iCAx开思网

标题: 【求助】UG API中如何获得实体表面的tag?非常感谢! [打印本页]

作者: 云淡风清    时间: 2004-3-17 15:14
标题: 【求助】UG API中如何获得实体表面的tag?非常感谢!
我需要对实体的表面做一些进一步的操作,所以需要先获得表面的tag
  
我查了一下help,选了下面这个函数
extern int UF_OBJ_cycle_objs_in_part (
               tag_t part_tag, int type, tag_t * object );
  
tag_t    part_tag        Input                Tag of part you wish to cycle  
int        type              Input                Type of object on which to cycle  
tag_t *  object          Input/Output      On input the object found  
                                                        by the last call to this routine.  
                                                        if this routine has not been called  
                                                        yet, then set object=NULL_TAG
                                                        to start cycling.  
                                                        On output the next object of the  
                                                        type specified. If there is no  
                                                       object, and the cycling is complete
                                                       a NULL_TAG is returned.  
  
考虑到我要查询的对象是实体表面,所以type我定义为
UF_solid_face_subtype
  
但问题就出在这里,始终查询不出结果! *object返回0(NULL_TAG)
为了验证是不是类型定义那里出错,我将type变成UF_solid_type
(UF_solid_face_subtype为UF_solid_type的一个子类型)
结果查询正常,*object返回为一个非零整数(tag_t)
感觉很疑惑,因为我需要查询的确实只是face这种子类型
而不是solid_type本身。
  
希望高手能帮忙指点一下!
怎样才能查询到subtype对象?
又或者我本身就选错了函数?
不知道你们在解决相同问题的时候,是用的什么方法?
非常感谢!bow先!
作者: 云淡风清    时间: 2004-3-17 15:23
我查了一下uf_object_types.h
#define UF_solid_type                            70
#define    UF_solid_body_subtype                       0
#define    UF_solid_swept_body_subtype             1 /* Internal use only -
                                                                      nondisplayable */
#define    UF_solid_face_subtype                         2
#define    UF_solid_edge_subtype                        3
#define    UF_solid_silhouette_subtype                  4 /* Moved to type      
                                                                             201 in V10 */
#define    UF_solid_foreign_surf_subtype               5
所以想,是不是将type赋值为702就可以
(70是type的值,2是subtype的值)
但试了试,好像还是没有效果
大家帮忙了,谢谢!
作者: zzz    时间: 2004-3-17 15:45
我说什么好呢。
再进一步判断一下子类型不就完了吗?
好像是UF_OBJ_ask_type_and_subtype吧。
作者: windcc    时间: 2004-3-17 16:15
int ii;
  
UF_MODL_ask_feat_faces(tag, [$face_list)]
  
UF_MODL_ask_list_count(face_list, [$num_faces)]
  
for (ii = 0;ii < num_faces;ii++)
{
      UF_MODL_ask_list_item(face_list, ii, [$face_tag)]
}
  
就可以取出face_tag.
作者: 云淡风清    时间: 2004-3-18 12:26
总算做出来了!
  
这么查询的
part_tag --> solid_tag(type) --> face_tag(subtype)
总之就是一步一步向下找
谢谢windcc
  
版主说的那个函数我也去查了
extern int UF_OBJ_ask_type_and_subtype (
tag_t object_id, int * type, int * subtype );
是在已经知道object tag的情况下去查询它的类型和子类型
而我这里是已知类型,去筛选出符合条件的object
正好是个反向的过程
  
btw,
虽然把face tag查询出来了,但一步一步也挺费事的
所以,想知道有没有直接可以用子类型找object的函数
就像这样part_tag --> face_tag
thanks!
作者: 云淡风清    时间: 2004-3-19 09:06
哈哈哈哈,找到一个函数
extern int UF_MODL_ask_object (int ug_type, int ug_subtype, tag_t * object );
直接可以根据类型和子类型查询到对象的tag,兴奋ing~~~




欢迎光临 iCAx开思网 (https://www.icax.org/) Powered by Discuz! X3.3