找回密码 注册 QQ登录
一站式解决方案

iCAx开思网

CAD/CAM/CAE/设计/模具 高清视频【积分说明】如何快速获得积分?快速3D打印 手板模型CNC加工服务在线3D打印服务,上传模型,自动报价
查看: 21649|回复: 19
打印 上一主题 下一主题

[求助] 如何获取一个part内的所有对象tag值并获取其隐藏显示属性?

[复制链接]
跳转到指定楼层
1
发表于 2008-8-27 10:39:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多同行朋友,交流,分享,学习。

您需要 登录 才可以下载或查看,没有帐号?注册

x
打开好几个part文件,我要得到非当前窗口,也就是非display的part的所有对象的tag值如,并且显示其隐藏/显示属性,我用UF_OBJ_cycle_all函数能获取所有的tag,但是用UF_OBJ_ask_display_properties变量显示其属性的时候有些类型是没有显示属性的就报异常了,我想获取一个part里面对象的显示属性,请问如何实现呢,非显示part, 谢谢了

[ 本帖最后由 my_dear2002 于 2008-8-27 11:37 编辑 ]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 赞一下!赞一下!
2
发表于 2008-8-27 10:57:04 | 只看该作者
help sos 救命啊
3
发表于 2008-8-27 12:32:10 | 只看该作者
用UF_PART_ask_num_parts能得到你的UG打开了part的数量.
UF_PART_ask_nth_part(int part_num)根据指定的数字序号得到你要的part的tag_t值。如果你知道part名,就直接用tag_t   UF_PART_ask_part_tag。
弄了半天你是想知道part是隐藏还是显示啊,那就用UF_PART_ask_display_part 或者 用UF_ASSEM_ask_work_part查出来当前工作part是不是你想要的不就行了么?
得到part的tag_t再遍历就OK了。
4
发表于 2008-8-27 13:23:52 | 只看该作者
不是,我能知道隐藏的part的tag,但是我遍历了所有对象,显示其属性的时候还是我们讨论的那个问题,有些对象不能显示其属性报异常,但是我用UF_LAYER_cycle_by_layer获取第一层的对象,然后遍历显示其属性就没问题,当然通过这个函数获取的对象明显比uf_obj里面的函数获取的对象少,但是显示属性不会报异常啊,所以我想了这么一个思路就是先获取非display的part,然后获取其某层的对象tag,最后显示其属性就不会有问题了,现在我的问题就是怎么通过这个非display的part来获取他里面某层的对象呢?

你是好人啊 呵呵

原帖由 dianzi24 于 2008-8-27 12:32 发表
用UF_PART_ask_num_parts能得到你的UG打开了part的数量.
UF_PART_ask_nth_part(int part_num)根据指定的数字序号得到你要的part的tag_t值。如果你知道part名,就直接用tag_t   UF_PART_ask_part_tag。
弄了半天你是 ...
5
发表于 2008-8-27 14:34:02 | 只看该作者
终于明白你的问题了,用层遍历只能获取当前工作part的对象,非display的part只能遍历那个part中的所有对象,其中包含了你不想要的对象,又去不掉。你用这个UF_OBJ_is_displayable函数试试,它的解释说“Returns a logical indicating whether tagged Unigraphics object is displayable,and therefore possesses attributes of color, width, font, and layer.”应该能判断一个对象是否拥有层、颜色等属性。再不行的话,恐怕要找一些绕弯的方法了。
6
发表于 2008-8-27 18:27:02 | 只看该作者
我用了isdisplable函数来判断是否有显示属性,然后再用display_property查询隐藏/显示状态没有错误了,但是我要把显示的给隐藏了或者隐藏的给显示出来,用UF_OBJ_set_blank_status 来设置上面过滤过的对象,现在这儿报异常,在过滤以前的对象有100多个,用了is_displable过滤以后减少为40个,但是我要设置他的显示/隐藏的时候报异常啊,帮忙看看如何解决吧?

原帖由 dianzi24 于 2008-8-27 14:34 发表
终于明白你的问题了,用层遍历只能获取当前工作part的对象,非display的part只能遍历那个part中的所有对象,其中包含了你不想要的对象,又去不掉。你用这个UF_OBJ_is_displayable函数试试,它的解释说“Returns a lo ...
7
发表于 2008-8-28 09:09:21 | 只看该作者
我试了没问题啊
tag_t part=NULL_TAG;
tag_t point=NULL_TAG;
const char *part_name = "aa";
logical is;
UF_OBJ_disp_props_t disp;

part = UF_PART_ask_part_tag(part_name);
for (point = UF_OBJ_cycle_all(part, NULL_TAG); point != NULL_TAG;  point = UF_OBJ_cycle_all(part, point))
{
        UF_OBJ_is_displayable(point,&is);
        if(is == TRUE)
        {
//                UF_OBJ_ask_display_properties(point,&disp);
                UF_OBJ_set_blank_status(point,UF_OBJ_BLANKED);
        }
}
我的part名“aa”里有一万多体,非display,照样全隐藏了,没出错啊。

[ 本帖最后由 dianzi24 于 2008-8-28 09:12 编辑 ]
8
发表于 2008-8-28 10:21:28 | 只看该作者
我的做法跟你一样,我只不过用了do while循环,但是我单步调试不是这个循环的问题,因为point是有值的。
do
{
       point = uf_obj_cycle_all(part,point);
       UF_OBJ_is_displayable(point,&is);
       if(is)
       {
              UF_OBJ_ask_display_properties(point,&disp);
              if(disp.blank_status == 0)//第二次改成1
              {
                     UF_OBJ_set_blank_status(point,1);//第二次改成0
              }
       }
}
while(point != NULL_TAG);
上面代码不是真的,我就是给你示例一下,我就这么写的但是有问题,你在隐藏显示间切换调试一下看看有问题没有,我觉得你切换一下也会有问题,你试试。


原帖由 dianzi24 于 2008-8-28 09:09 发表
我试了没问题啊
tag_t part=NULL_TAG;
tag_t point=NULL_TAG;
const char *part_name = "aa";
logical is;
UF_OBJ_disp_props_t disp;
part = UF_PART_ask_part_tag(part_name);
for (point = UF_OBJ_cycle ...
9
发表于 2008-8-28 10:41:38 | 只看该作者
你说的切换是不是这个意思
UF_OBJ_ask_display_properties(point,&disp);
if(disp.blank_status == UF_OBJ_BLANKED)
{
        UF_OBJ_set_blank_status(point,UF_OBJ_NOT_BLANKED);
}
else if(disp.blank_status == UF_OBJ_NOT_BLANKED)
{
        UF_OBJ_set_blank_status(point,UF_OBJ_BLANKED);
}
我把一半的体隐藏,一半显示,结果还是正常啊。
又试验一下。
我先用函数把体隐藏了,然后用个uc1601停顿一下确定是隐藏了,最后再用函数显示出来,也没问题。
不是这几个函数的事吧,可能是你其他地方出问题,都查查看。
10
发表于 2008-8-28 15:48:20 | 只看该作者
我这儿还是有问题,这个问题先放一放,请教一个关联问题,我用addcomponent函数添加零件到装配体,本来零件里面隐藏的对象都显示出来了,所以我要先打开该零件,然后获取其隐藏特征的tag或者其他,然后去装配体里面找到该组件,然后查找其所有tag并且和零件里面的隐藏特征tag比较如果相同则将其隐藏,这是我的一个思路,可是遇到一个大问题,就是我如何得到装配体里面组件的所有对象tag值呢,我用Ask_Prototype_Of_Occ得到零件实例然后遍历,发现其隐藏对象和零件里面的隐藏对象个数和tag值都是一样的,也就是我并没有得到组件的显示/隐藏特征而是获取的还是零件的隐藏tag值,这样就没法比较了,帅哥帮忙看看如何解决,就是获取零件隐藏对象tag,然后在装披头组件里面找到对应的对象tag,然后取得其显示属性为0(显示)并将其改为1使其隐藏,这样就做到添加组件后该隐藏的能隐藏了,谢谢了


原帖由 dianzi24 于 2008-8-28 10:41 发表
你说的切换是不是这个意思
UF_OBJ_ask_display_properties(point,&disp);
if(disp.blank_status == UF_OBJ_BLANKED)
{
        UF_OBJ_set_blank_status(point,UF_OBJ_NOT_BLANKED);
}
else if(disp.blank_status ==  ...
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3D打印手板模型快速制作服务,在线报价下单!

QQ 咨询|手机版|联系我们|iCAx开思网  

GMT+8, 2025-1-4 06:23 , Processed in 0.026208 second(s), 11 queries , Gzip On, Redis On.

Powered by Discuz! X3.3

© 2002-2025 www.iCAx.org

快速回复 返回顶部 返回列表