iCAx开思工具箱

标题: ass [打印本页]

作者: 刘亮    时间: 2005-3-17 17:26
标题: ass
兄弟们,问装备的问题,下面
一、编程出一个长方体,得到特征idfeatures;
UF_MODL_create_block1(UF_NULLSIGN, corner_pts,  
                                   edge_lens, [$features)]
二、通过特征idfeatures,得到body的id
  UF_MODL_ask_feat_body(features, [$blocks)]
三、通过body的id创建component_part
UF_ASSEM_create_component_part(work_part, "lgl.prt",  
                                          NULL, NULL, units, 0,  
                                          origin, csys, 2, blocks,  
                                          [$instance)]
现在我要的是先造型造好一个长方体,而不是编程出一个长方体,
既通过打开一个部件,部件里有长方体,可以得到部件的id,有没有通过部件
的点得到body的id?应该不是 UF_MODL_ask_feat_body?
那我怎么样获得body的id来
UF_ASSEM_create_component_part(work_part, "lgl.prt",  
                                          NULL, NULL, units, 0,  
                                          origin, csys, 2, blocks,  
                                          [$instance)]
  
谢谢
作者: supergirl    时间: 2005-3-17 18:30
最简单的方法:
1 得到part的tag。
UF_PART_ask_part_tag ( char * part_name );
2 在part中cycle所有的object,肯定有你要的东东,UF_OBJ_cycle_objs_in_part (
tag_t part_tag,  
int type,  
tag_t * object );  
  
                     
作者: 刘亮    时间: 2005-3-17 21:03
supergirl  
怎么又是你为我扶贫啊!!!美女
作者: 刘亮    时间: 2005-3-17 21:04
那我怎么知道哪个id就是body的点啊?
作者: supergirl    时间: 2005-3-17 21:13
你可以查type啊,当然如果有多个同样type的就不行了。
如果遇到这种情况还有两个解决方法:
1 调selection ,手动选一个feature,这样就可以直接得到feature 的id,也不用cycle 整个part了。
2 给你的feature 先添加一个attribute,然后cycle的时候通过attribute来找
  set attribute 的函数: UF_ATTR_assign (
tag_t object,  
char * title,  
UF_ATTR_value_t value );
  
find attribute的函数:UF_ATTR_find_attribute (
tag_t object,  
int type,  
char * title,  
int * title_type );
  
这样麻烦一点。
作者: vodka    时间: 2005-3-18 01:21
Hey, 少东家
看标题还以为你在发标骂人呢还是在骂你自己啊
千万不要用“求助ass" 几个字(意思是你的ASS有麻烦,需要帮助)但你可以用assem
再仔细看看翻翻字典那两个字母不能省的
作者: 刘亮    时间: 2005-3-18 08:43

作者: jambo436    时间: 2005-3-18 14:34
请教supergirl ,详细说说再你的第2步中如何在添加一个attribute之后,通过cycle来找到该feature???
我试过了:
UF_OBJ_cycle_objs_in_part(part_tag,UF_attribute_type,tag_t * object);
好象不行?
  
你可以查type啊,当然如果有多个同样type的就不行了。  
如果遇到这种情况还有两个解决方法:  
1 调selection ,手动选一个feature,这样就可以直接得到feature 的id,也不用cycle 整个part了。  
2 给你的feature 先添加一个attribute,然后cycle的时候通过attribute来找  
  set attribute 的函数: UF_ATTR_assign (  
tag_t object,  
char * title,  
UF_ATTR_value_t value );  
  
find attribute的函数:UF_ATTR_find_attribute (  
tag_t object,  
int type,  
char * title,  
int * title_type );  
  
这样麻烦一点。
作者: supergirl    时间: 2005-3-18 16:15
1 给你要找的东西添加一个attribute,这就像给你要找的东西加一个小的标示 一样。
  
   可以在Ug中添加,这个就不多说了
   
   也可以用UF_ATTR_assign (
    tag_t object,  
    char * title,  
    UF_ATTR_value_t value ); 来添加
  
  2在part中cycle 出所有的object tag
  
3 对于每个object tag
   用函数 extern int UF_ATTR_find_attribute (
     tag_t object,  
     int type,  
    char * title,  
   int * title_type );来找是否有刚才你设置的attribute
   输入的参数title就是你刚才设的那 个title,这样就可以通过函数的返回值来看,是否找到了。
  
这是在part找东西的一个通用的方法。
  
当然我个人认为第一个方法好,毕竟效率高一些,只不过,就是要让用户选择一下比较讨厌
作者: jambo436    时间: 2005-4-13 13:33
再次请教SUPERGIRL:
我首先画一个球体,
给它添加一个属性,
接着通过查询属性来查看返回值,
返回值似乎不是我所期望的?请问什么原因,哪里出错了?
  
UF_ATTR_value_t value;
char    messg[133];
UF_MODL_create_sphere1(sign_sphere, center_1,diam, [$sphere_tag )]  
UF_MODL_ask_feat_body(sphere_tag,[$sphere_body)]
    value.type = UF_ATTR_string;
    value.value.string = "Car2TrunkTag";
    UF_ATTR_assign(sphere_body, "STRING_ATTRIBUTE", value);
  
int m=UF_ATTR_find_attribute (sphere_body,UF_ATTR_string,"STRING_ATTRIBUTE",[$title_type)]
    UF_get_fail_message(m, messg);
  uc1601(messg,1);
弹出信息框显示no error,也就是说UF_ATTR_find_attribute的返回值是0.如果属性设置成功的话应该是5才对啊!




欢迎光临 iCAx开思工具箱 (https://t.icax.org/) Powered by Discuz! X3.3