老师好,我现在想要在主模型里给参考模型添加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);
有什么新的问题?
您的参考是不是外部文件?我刚刚又测试了一下如果参考的是外部文件的话,上边的代码修改失败,需要用其他办法,通过打开外部文件的方法修改。
有没有不用打开外部文件的修改方式
我这网不好,我这还显示的是你昨天回复的,刷新了一下才看见已经回复了
如下是完整的代码,不管参考是不是当前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
这是OBD中创建的元素,OBD中创建的元素,有些被添加了约束限制,不能在其他软件中修改。
郭老师,那我现在需要在ms中修改它,没有什么办法吗
而且,我把这些OBD中创建的元素作为参考元素的话,用上面的代码是可以修改它的,现在只是不能直接在本模型中修改它