老师好,我现在想要在主模型里给参考模型添加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);
您先用我上边的代码试试看能不能修改参考中元素的颜色
郭老师,我上面的那段代码不对,不能那样获取名字,获取出来的名字全是3D Metric Design;不过我也专门试了你发的那段代码,我没测试成功,改不了颜色
您改代码里边的ID了么?我代码里边ID是我测试文件中元素的ID,您要改成您文件里边的元素ID。
郭老师,help
有什么新的问题?
我这网不好,我这还显示的是你昨天回复的,刷新了一下才看见已经回复了
如下是完整的代码,不管参考是不是当前dgn文件中的Model:
DgnAttachmentP dgnAtta = *ACTIVEMODEL->GetDgnAttachmentsP()->begin(); if (dgnAtta->GetDgnModelP()->GetDgnFileP() == ISessionMgr::GetActiveDgnFile()) { PersistentElementRefP perEleRef = dgnAtta->GetDgnModelP()->FindElementByID(1431); EditElementHandle eeh(perEleRef); ElementPropertiesSetterPtr propSet = ElementPropertiesSetter::Create(); propSet->SetColor(3); propSet->Apply(eeh); eeh.ReplaceInModel(perEleRef); } else { DgnFileStatus dgnFileStatus; int defFileId = 0; DgnDocumentPtr dgnDoc = DgnDocument::CreateFromFileName(dgnFileStatus, dgnAtta->GetDgnModelP()->GetDgnFileP()->GetFileName().data(), NULL, defFileId, DgnDocument::FetchMode::Write); DgnFilePtr dgnFilePtr = DgnFile::Create(*dgnDoc, DgnFileOpenMode::ReadWrite); if (dgnFilePtr.IsNull()) return; StatusInt openForWriteStatus; dgnFilePtr->LoadDgnFile(&openForWriteStatus); if (SUCCESS != openForWriteStatus) return; StatusInt status = dgnFilePtr->FillDictionaryModel(); if (SUCCESS != status) { return; } ModelId mdoelId = dgnAtta->GetDgnModelP()->GetModelId(); DgnModelPtr dgnModelPtr = dgnFilePtr->LoadModelById(mdoelId); dgnFilePtr->FillSectionsInModel(&*dgnModelPtr); EditElementHandle eeh(1431, &*dgnModelPtr); ElementRefP perEleRef = eeh.GetElementRef(); ElementPropertiesSetterPtr propSet = ElementPropertiesSetter::Create(); propSet->SetColor(3); propSet->Apply(eeh); eeh.ReplaceInModel(perEleRef); dgnFilePtr->ProcessChanges(DgnSaveReason::FileClose); }
Answer Verified By: 帅 樊
感谢老师,我测试了一下,是可以的,我再改改弄到我的改属性的代码里
郭老师,我改了我的代码,也支持修改属性了,此方法可行,感谢!
郭老师,碰到个bug,用上面你发给我的代码没弄成功,我把测试文件发你,你可以试试。状况:运行完代码后,元素颜色改为红色,但是用鼠标在其他地方点一下,该元素又恢复为之前的状态,好像并没有把状态保留下来这个bug只针对非参考模型的元素,参考模型的元素效果还是好的1207.test.dgn