[ORD CE C++]怎样在交互工具里让用户选择一个只读元素?

我在界面上弄了个按钮,想让用户点击后加载一个交互工具,选择一个元素。

目前我是使用了一个继承自DgnElementSetTool的子类做的,在_OnElementModify中获取选择集进行操作,但问题是对于参考进来的只读元素无法进行选择,重写了_OnPostLocate函数也无济于事,请问该如何实现?实在不行,就只能让用户先选择了。。。

Parents Reply Children
  • 直接获取选择集合里的元素,代码如下:

    void getSelectElement(ElementRefP& erp, DgnModelRefP& dmrp, size_t& num)
    {
        erp = nullptr;
        dmrp = nullptr;
        auto& ssm = SelectionSetManager::GetManager();
        num = ssm.NumSelected();
        if (num <= 0)
        {
            return;
        }
        ssm.GetElement(0, &erp, &dmrp);
    }

    但是获取不到元素,看样子达到要求只能自己写类继承DgnTool类了,DgnElementSetTool类不能满足要求

  • 但是获取不到元素

    在我这里可以获取到元素呀。测试代码如下:

    void getSelectElement(ElementRefP& erp, DgnModelRefP& dmrp, size_t num)
    {
    	erp = nullptr;
    	dmrp = nullptr;
    	auto& ssm = SelectionSetManager::GetManager();
    	num = ssm.NumSelected();
    	if (num <= 0)
    	{
    		return;
    	}
    	ssm.GetElement(0, &erp, &dmrp);
    }
    void SelectionSetTest()
    {
    	ElementRefP erp = nullptr;
    	DgnModelRefP dmrp = nullptr;
    	getSelectElement(erp, dmrp, 0);
    	ElementHandle eh(erp, dmrp);
    	WPrintfString wStr(L"elId=%d", eh.GetElementId());
    	mdlDialog_dmsgsPrint(wStr);
    }

    执行结果如下(我选择集中的所有元素都是在参考文件中的):

    DgnElementSetTool类不能满足要求

    不要轻易下错误的结论。DgnElementSetTool可以满足我们各方面的要求的,但其用法也确实比较复杂。



  • 你在_OnElementModify函数里调用getSelectElement函数试试看,我试了,得到的elementID是0.。。

    我打算自己写一个类继承自DgnTool,或者直接调用MicroStation里面的选择命令。。。