如题,ScanCriteria怎么区别OBD元素,例如,如何判断当前元素是墙,或者柱,类似双击构件,能自动弹出对应类型元素的编辑界面。
ScanCriteria是MS平台级的对象,不能认识OBD中的墙、梁柱等。你可以参考OBD SDK中的例子tfshowinfo,其中有如下写法用来判断一个元素描述符(MSElementDescr*)是哪种OBD中的对象的。
static StatusInt MSElementDescr_showInfo ( MSElementDescr* pThis /* => */ ) { int tfType = mdlTFElmdscr_getApplicationType (pThis); switch (tfType) { case TF_FREE_FORM_ELM: case TF_SMOOTH_FORM_ELM: case TF_LINEAR_FORM_ELM: case TF_ARC_FORM_ELM: case TF_LINE_STRING_FORM_ELM: case TF_SLAB_FORM_ELM: case TF_PATH_FORM_ELM: case TF_STRUCTURAL_ELM: case TF_STRUCTSMOOTH_ELM: { TFFormRecipeList* pRecipeNode = NULL; if (SUCCESS == mdlTFFormRecipeList_constructFromElmdscr (&pRecipeNode, pThis)) { TFFormRecipe_showInfo (mdlTFFormRecipeList_getFormRecipe (pRecipeNode)); mdlTFFormRecipeList_free (&pRecipeNode); } break; } case TF_COMPOUND_CELL_ELM: case TF_CC_INT_DOOR_ELM: case TF_CC_EXT_DOOR_ELM: case TF_CC_INT_WINDOW_ELM: case TF_CC_EXT_WINDOW_ELM: case TF_CC_INT_DOOR_AND_WINDOW_ELM: case TF_CC_EXT_DOOR_AND_WINDOW_ELM: { TFFrameList* pFrameNode = NULL; if (pFrameNode = mdlTFFrameList_constructFromElmdscr (pThis)) { TFFrame_showInfo (mdlTFFrameList_getFrame (pFrameNode)); mdlTFFrameList_free (&pFrameNode); } break; } case TF_EBREP_ELM: { MSElementDescr_showTriformaSolidInfo (pThis); break; } default: { int type = mdlElement_getType (&pThis->el); ElementId id = mdlElement_getID (&pThis->el); print ("type=%d Id=%I64d\n", type, id); break; } } return SUCCESS; }
Answer Verified By: Chao Cheng