如下图红色框内所示,我是用ms up17 打开,是可以看到的。但是用ms up15打开 这些红色框体里的属性都看不到。
并且用获取ec属性也获取不到。我想通过二次开发获取这个属性,应该怎么做?
没有呀,郭老师
按我这样选项再搜索一下试试:
郭老师,我测试了 c#版本的up17 二次开发程序,没法通过获取ec属性获取到。麻烦你这边看看 那种属性是什么样的存在,如何获取。 测试文件如下
20221018.dgn
元素之间应该是存在依赖关系。看下图
郭老师正在探索如何通过编程手段处理这种关系。推测是要用到ECRelationshipClass
这些属性获取起来还是比较麻烦的,如下c/c++示例代码演示了获取“格栅板”的属性:
ElementAgenda selectset; SelectionSetManager::GetManager().BuildAgenda(selectset); if (selectset.GetCount() < 1) { return; } EditElementHandle& eeh = selectset[0]; DgnFileP dgnFile = ISessionMgr::GetActiveDgnFile(); SchemaInfo schemaInfo(ECN::SchemaKey(L"IFC2x3", 1, 0), *dgnFile); DgnECManagerR ecMan = DgnECManager::GetManager(); ECN::ECSchemaPtr pSchema = ecMan.LocateSchemaInDgnFile(schemaInfo, ECN::SchemaMatchType::SCHEMAMATCHTYPE_LatestCompatible); if (pSchema.IsNull()) { mdlDialog_dmsgsPrint(L"Can't find BaseElementSchema schema"); return; } ECN::ECRelationshipClassP pRelaClass = pSchema->GetClassP(L"IfcRelDefinesProperties_RelatedObjects")->GetRelationshipClassP(); ECN::ECRelationshipClassP pRRelaClass = pSchema->GetClassP(L"IfcRelDefinesByPropertiesProperties_RelatingPropertyDefinition")->GetRelationshipClassP(); ECN::ECClassP pVolClass = pSchema->GetClassP(L"IfcPlate"); DgnElementECInstancePtr pInstance = ecMan.FindInstanceOnElement(eeh, *pVolClass, true); //polymorphic=true is important if (pInstance.IsNull()) { mdlDialog_dmsgsPrint(L"pInstance is null"); return; } QueryRelatedClassSpecifierPtr qrcs = QueryRelatedClassSpecifier::Create(*pRelaClass,NULL, ECN::STRENGTHDIRECTION_Backward); DgnECInstanceCreateOptions options = DgnECInstanceCreateOptions(); DgnECInstanceCreateContext insCreateCon(options); DgnECInstanceIterable dgnECInsIter= DgnECManager::GetManager().FindRelatedInstances(*pInstance, *qrcs, insCreateCon); for (DgnECInstanceIterable::const_iterator iter = dgnECInsIter.begin(); iter != dgnECInsIter.end(); ++iter) { DgnECInstancePtr instance = *iter; QueryRelatedClassSpecifierPtr qrcsCur = QueryRelatedClassSpecifier::Create(*pRRelaClass); DgnECInstanceIterable dgnECInsIterCur = DgnECManager::GetManager().FindRelatedInstances(*instance, *qrcsCur, insCreateCon); for (DgnECInstanceIterable::const_iterator iterCur = dgnECInsIterCur.begin(); iterCur != dgnECInsIterCur.end(); ++iterCur) { DgnECInstancePtr instanceCur = *iterCur; WPrintfString wStrCur(L"Class__%s", instanceCur->GetClass().GetFullName()); mdlDialog_dmsgsPrint(wStrCur); ECPropertyIterable ecPropIter = instanceCur->GetClass().GetProperties(); for (ECPropertyIterable::const_iterator iterCCur = ecPropIter.begin(); iterCCur != ecPropIter.end(); ++iterCCur) { ECValue curECValue; instanceCur->GetValue(curECValue, (*iterCCur)->GetName().GetWCharCP()); WPrintfString wStr(L"Property__%s Value__%s", (*iterCCur)->GetName().GetWCharCP(), curECValue.ToString().GetWCharCP()); mdlDialog_dmsgsPrint(wStr); } } }
您可以试着改写成c#的。
Answer Verified By: 瑞 胡