【MSCE c#】tekla建立的模型导出成ifc格式后,ms查看属性相关问题

如下图红色框内所示,我是用ms up17 打开,是可以看到的。但是用ms up15打开  这些红色框体里的属性都看不到。

并且用获取ec属性也获取不到。我想通过二次开发获取这个属性,应该怎么做?

Parents
  • U17上通过EC方式也读取不到这些属性么?能否提供这个文件供我们分析,可将多余元素删除掉,只留这一个元素即可。

  • 我目前是用的up15 做的程序去读的  麻烦郭工提供下up17的sdk呢 。。再问问哈   up17sdk还是用vs2017  开发吗

  • 这些属性获取起来还是比较麻烦的,如下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: 瑞 胡 

  • 郭老师,DgnECInstanceIterable dgnECInsIter = DgnECManager::GetManager().FindRelatedInstances(*instance, *qrcs, insCreateCon); 我目前没有成功改成c#版本的  应该怎么做呢?

  • c++的代码我是测试通过了。但是现状是up15 和 up17的sdk不一样。我得做两个版本的程序去处理,比较难维护。

    c#版本的目前是通用的。所以我只想再up15上做了程序  up17也一样可用。

  • 现状是up15 和 up17的sdk不一样。我得做两个版本的程序去处理,比较难维护。

    Update15已经无法从Bentley的官网上下载到了。可以要求使用Update15的用户升级到17上去。当然,您也可以做一个安装程序,将您程序的U15和U17都打包进去,依靠安装程序去检测用户机器上的MS版本,然后将对应版本的程序复制到用户的机器上即可。



  • 符老师,up17有离线版本安装包吗 在线装很受网络限制呀。

Reply Children