第一次调用 :返回第一个启用层中的第一个对象。
第二次调用 :返回下一个已启用层中的下一个对象。
最后一次调用:当所有对象都被耗尽时,将返回object_tag = NULL_TAG。
在循环数据库时,不要尝试删除对象。
当 当前对象已被删除时,尝试读取下一个对象时,可能会出现问题。
要删除对象,保存一个包含对象的数组,然后在完成循环后,使用
UF_OBJ_delete_array_of_objects删除保存的对象数组。
查找当前工作部件下,工作图层中的所有体 例子:
extern DllExport void ufusr(char *param, int *returnCode, int rlen) { UF_initialize(); vector<tag_t> vBodyTags; tag_t object_tag = NULL_TAG; int iWorkLayer = 0; UF_LAYER_ask_work_layer(&iWorkLayer); UF_LAYER_cycle_by_layer(iWorkLayer, &object_tag); while (object_tag != NULL_TAG) { vector<tag_t>::iterator it = find(vBodyTags.begin(), vBodyTags.end(), object_tag); if (it == vBodyTags.end()) { int objType = 0, objsubType = 0; UF_OBJ_ask_type_and_subtype(object_tag, &objType, &objsubType); if (objType == UF_solid_type && objsubType == UF_solid_body_subtype) { vBodyTags.push_back(object_tag); } } UF_LAYER_cycle_by_layer(iWorkLayer, &object_tag); } for (int i = 0; i < vBodyTags.size(); i++) { //vBodyTags[i] } UF_terminate(); } extern int ufusr_ask_unload(void) { return (UF_UNLOAD_IMMEDIATELY); }