老师好,我现在想要在主模型里给参考模型添加EC属性,有没有什么方法,或者例子,能直接从主模型操作到参考模型的
老师,不用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;不过我也专门试了你发的那段代码,我没测试成功,改不了颜色
您改代码里边的ID了么?我代码里边ID是我测试文件中元素的ID,您要改成您文件里边的元素ID。
郭老师,help
有什么新的问题?