【MSTN CE C++】如何给参考模型添加EC属性

老师好,我现在想要在主模型里给参考模型添加EC属性,有没有什么方法,或者例子,能直接从主模型操作到参考模型的

Parents
  • 老师,不用EC属性了,就新版的ItemType就行,但是是给参考模型的元素添加

  • 下边代码演示了如何修改参考中元素ID为2061这个元素的颜色,您可以参考换成添加ItemType属性,添加ItemType属性可以找一下以前的帖子看看:

    	DgnAttachmentP dgnAtta = *ACTIVEMODEL->GetDgnAttachmentsP()->begin();
    	PersistentElementRefP perEleRef = dgnAtta->GetDgnModelP()->FindElementByID(2061);
    	EditElementHandle eeh(perEleRef);
    	ElementPropertiesSetterPtr propSet = ElementPropertiesSetter::Create();
    	propSet->SetColor(3);
    	propSet->Apply(eeh);
    	eeh.ReplaceInModel(perEleRef);

  • /* 1、已知获取到 ElementHandle elementHandle */
    
    /* 2、创建DgnECInstancePtr */
    EditElementHandle eeh(elementHandle.GetElementId(), elementHandle.GetModelRef());
    
    DgnFileP pDgnFile = elementHandle.GetModelRef()->GetDgnFileP();
    
    Bentley::DgnPlatform::CustomItemHost itemHost(eeh, false);
    
    ItemTypeLibraryPtr libPtr = ItemTypeLibrary::FindByName(libName, *pDgnFile);   //libName已知
    
    if(libPtr.IsNull())
    {
    	libPtr = ItemTypeLibrary::Create(libName, *pDgnFile, false);   //libName已知
    }
    
    ItemTypeP sheet_ptr = libPtr->GetItemTypeByName(className);  //className已知
    if(!sheet_ptr)
    {
    	libPtr->AddItemType(className,false);	   //className已知
    	libPtr->Write();
    	sheet_ptr = libPtr->GetItemTypeByName(className);   //className已知
    }
    CustomPropertyP p = sheet_ptr->GetPropertyByName(propName);  //propName已知
    if(!p)
    {
    	p = sheet_ptr->AddProperty(propName);   //propName已知
    	libPtr->Write();
    }
    
    p->SetType(Bentley::DgnPlatform::CustomProperty::Type::String);
    
    DgnECInstancePtr instancePtr = itemHost.GetCustomItem(libName, className);
    if (instancePtr.IsNull())
    {
    	instancePtr = itemHost.ApplyCustomItem(*sheet_ptr);
    }
    
    /* 3、元素挂接属性 */
    std::string sguid = GuidToString(CreateGuid());
    instancePtr->SetValue(ID, ECValue(strGuid.data()));  //ID已知
    instancePtr->WriteChanges();
    instancePtr->ScheduleWriteChanges(eeh);

    郭老师,可以帮忙看看这段代码吗,这段代码只能修改本模型中的元素的属性,不能操作参考模型的元素属性,哪里需要改进一下呢

  • 你看我上边代码是怎么获取EditElementHandle的

  • DgnAttachmentP dgnAtta = nullptr;
    for (auto iter= ACTIVEMODEL->GetDgnAttachmentsP()->begin();iter!= ACTIVEMODEL->GetDgnAttachmentsP()->end();iter++)
    {
    	if ((*iter)->GetDgnModelP()->GetModelName() == elementHandle.GetDgnModelP()->GetModelName())
    	{
    		dgnAtta = *iter;
    		break;
    	}
    }
    if (dgnAtta)
    {
    	PersistentElementRefP perEleRef = dgnAtta->GetDgnModelP()->FindElementByID(elementHandle.GetElementId());
    	EditElementHandle eeh(perEleRef);
        ......
    
    }
    /* 3、元素挂接属性 */
    std::string sguid = GuidToString(CreateGuid());
    instancePtr->SetValue(ID, ECValue(sguid.data()));  //ID已知
    instancePtr->WriteChanges();
    instancePtr->ScheduleWriteChanges(eeh);

    郭老师,我现在把开头的代码和你那个保持一致了,后面还是我的代码,这样还是没成功,咋样改进好呢

  • 您先用我上边的代码试试看能不能修改参考中元素的颜色

  • 郭老师,我上面的那段代码不对,不能那样获取名字,获取出来的名字全是3D Metric Design;
    不过我也专门试了你发的那段代码,我没测试成功,改不了颜色

Reply Children