老师好,我现在想要在主模型里给参考模型添加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);
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
有什么新的问题?
您的参考是不是外部文件?我刚刚又测试了一下如果参考的是外部文件的话,上边的代码修改失败,需要用其他办法,通过打开外部文件的方法修改。
有没有不用打开外部文件的修改方式
我这网不好,我这还显示的是你昨天回复的,刷新了一下才看见已经回复了
如下是完整的代码,不管参考是不是当前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: 帅 樊