iCAx开思网

标题: 如何获取一个part内的所有对象tag值并获取其隐藏显示属性? [打印本页]

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

[ 本帖最后由 my_dear2002 于 2008-8-27 11:37 编辑 ]
作者: my_dear2002    时间: 2008-8-27 10:57
help sos 救命啊
作者: 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。
弄了半天你是想知道part是隐藏还是显示啊,那就用UF_PART_ask_display_part 或者 用UF_ASSEM_ask_work_part查出来当前工作part是不是你想要的不就行了么?
得到part的tag_t再遍历就OK了。
作者: my_dear2002    时间: 2008-8-27 13:23
不是,我能知道隐藏的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。
弄了半天你是 ...

作者: dianzi24    时间: 2008-8-27 14:34
终于明白你的问题了,用层遍历只能获取当前工作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.”应该能判断一个对象是否拥有层、颜色等属性。再不行的话,恐怕要找一些绕弯的方法了。
作者: my_dear2002    时间: 2008-8-27 18:27
我用了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 ...

作者: 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_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 编辑 ]
作者: my_dear2002    时间: 2008-8-28 10:21
我的做法跟你一样,我只不过用了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 ...

作者: 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 == UF_OBJ_NOT_BLANKED)
{
        UF_OBJ_set_blank_status(point,UF_OBJ_BLANKED);
}
我把一半的体隐藏,一半显示,结果还是正常啊。
又试验一下。
我先用函数把体隐藏了,然后用个uc1601停顿一下确定是隐藏了,最后再用函数显示出来,也没问题。
不是这几个函数的事吧,可能是你其他地方出问题,都查查看。
作者: my_dear2002    时间: 2008-8-28 15:48
我这儿还是有问题,这个问题先放一放,请教一个关联问题,我用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 ==  ...

作者: dianzi24    时间: 2008-8-29 08:55
偶主要做加工的开发,装配接触的少(谁叫是编程的出身呢),说一下我的想法:不用装配树查找是不是也可以呢?添加之前已经有零件的tag_t,用UF_OBJ_set_name给隐藏的对象名字做上标记(多个对象可以使用同一名字),添加后虽然都显示出来,直接用UF_OBJ_cycle_by_name通过名字把他们再找出来,如果事后不想要再删掉名字就行了UF_OBJ_delete_name。看看是不是可行?
作者: my_dear2002    时间: 2008-8-29 09:34
我想你可能没明白我的意思,我的意思是添加到装配体里面发现所有对象都是显示的,但是查询装入组件的显示属性却是隐藏,所以我没法将装配树上的东西再隐藏了,你可以在ug操作里面试试,首先将一个部分实体隐藏的零件装到装配体里面,发现在装配体里所有的东西都显示出来了,你将刚刚加入的组件作为工作部件还是都显示,但是你将该部件转换为显示部件他又回复到原来部分隐藏的状态了,所以问题就出在如何找出装配体里面该组件实体的所有实体并且将其隐藏,但是你变量装配体组件的时候发现虽然图形区显示了但是程序操作发现有些已经是隐藏了的,这就是问题所在了,哭死...

原帖由 dianzi24 于 2008-8-29 08:55 发表
偶主要做加工的开发,装配接触的少(谁叫是编程的出身呢),说一下我的想法:不用装配树查找是不是也可以呢?添加之前已经有零件的tag_t,用UF_OBJ_set_name给隐藏的对象名字做上标记(多个对象可以使用同一名字), ...

作者: dianzi24    时间: 2008-8-29 09:40
另外还有几个疑问。1.添加装配并没有复制对象,添加之前使用的那些零件tag_t变量在添加之后是不是仍然有效?如果从装配树里找一个tag_t和原来零件tag_t相同,说明他们本来就是同一个对象,实验一下,装配之后用UF_OBJ_delete_object把原来的零件tag_t对象删了,看看装配体里是不是也消失?2.既然知道哪些对象应该是隐藏的,找到这些对象后为什么不直接强制再隐藏一次,还要判断他的值是0还是1呢?(装配后属性是隐藏的,屏幕上显示,估计是UG的问题)。
作者: dianzi24    时间: 2008-8-29 09:51
添加装配后程序里的属性没变,只是图形区的显示有问题,当你转换为显示部件时又变的正常了(是不是此时UG调用了刷新函数,将属性里的正确的隐藏的值发挥作用了?),你不如也刷新一下视图看看效果?
作者: my_dear2002    时间: 2008-8-29 10:19
1.ug的装配不是重新复制,而是虚拟装配,就是原来零件的一个镜像,因为他已经显示,但是显示属性却是隐藏的,所以我无法再改了,也不用再改了啊。
2.我没找到如何遍历装配体组件内对象的方法,我都是将组件转换为原型然后遍历,自然tag值都是一样的。

原帖由 dianzi24 于 2008-8-29 09:40 发表
另外还有几个疑问。1.添加装配并没有复制对象,添加之前使用的那些零件tag_t变量在添加之后是不是仍然有效?如果从装配树里找一个tag_t和原来零件tag_t相同,说明他们本来就是同一个对象,实验一下,装配之后用UF_OB ...

作者: my_dear2002    时间: 2008-8-29 10:21
这个不关刷新的问题,好像装配只是添加了零件的几何属性到装配体,其隐藏显示属性并没有添加。

原帖由 dianzi24 于 2008-8-29 09:51 发表
添加装配后程序里的属性没变,只是图形区的显示有问题,当你转换为显示部件时又变的正常了(是不是此时UG调用了刷新函数,将属性里的正确的隐藏的值发挥作用了?),你不如也刷新一下视图看看效果?

作者: dianzi24    时间: 2008-8-29 11:13
确实够棘手。对装配机理不是太了解,有空用代码调试看看能不能解决,白天在忙公司的开发项目,时间稍微紧点。
作者: my_dear2002    时间: 2008-8-29 12:59
恩,那就多谢了,有空帮忙多上上心了。
原帖由 dianzi24 于 2008-8-29 11:13 发表
确实够棘手。对装配机理不是太了解,有空用代码调试看看能不能解决,白天在忙公司的开发项目,时间稍微紧点。

作者: 163扛把子    时间: 2008-9-2 09:48
标题: 我的心久久不能平静!
逐句地看完楼主的这个帖子以后,我的心久久不能平静,震撼啊!为什么会有如此好的帖子!我纵横网络BBS多年,自以为再也不会有任何帖子能打动我,没想到今天看到了如此精妙绝伦的这样一篇帖子。楼主,是你让我深深地理解了‘人外有人,天外有天’这句话。谢谢你!在看完这帖子以后,我没有立即回复,因为我生怕我庸俗不堪的回复会玷污了这网上少有的帖子。但是我还是回复了,因为我觉得如果不能在如此精彩的帖子后面留下自己的网名,那我死也不会瞑目的!能够在如此精彩的帖子后面留下自己的网名是多么骄傲的一件事啊!楼主,请原谅我的自私!我知道无论用多么华丽的辞藻来形容楼主您帖子的精彩程度都是不够的,都是虚伪的,所以我只想说一句:您的帖子太好了!
    www.gold4rs.com
www.jay-z.cn      www.163renwu.cn        www.0551-hotel.cn       www.southrap.cn
     我愿意一辈子的看下去!这篇帖子构思新颖,题材独具匠心,段落清晰,情节诡异,跌宕起伏,主线分明,引人入胜,平淡中显示出不凡的文学功底,可谓是字字珠玑,句句经典,是我辈应当学习之典范。就小说艺术的角度而言,这篇帖子可能不算太成功,但它的实验意义却远远大于成功本身。正所谓:“一马奔腾,射雕引弓,天地都在我心中!”楼主真不愧为无厘界新一代的开山怪!本来我已经对这个社区失望了,觉得这个社区没有前途了,心里充满了悲哀。但是看了你的这个帖子,又让我对社区产生了希望。是你让我的心里重新燃起希望之火,是你让我的心死灰复燃,是你拯救了我一颗拨凉拨凉的心!本来我决定不会在社区回任何帖子了,但是看了你的帖子,我告诉自己这个帖子是一定要回的!这是百年难得一见的好贴啊!苍天有眼啊,让我在有生之年得以观得 如此精彩绝伦的帖子!楼主的话真如“大音希声扫阴翳”,犹如“拨开云雾见青天”,使我等网民看到了希望,看到了未来!晴天霹雳,醍醐灌顶或许不足以形容大师文章的万一;巫山行云,长江流水更难以比拟大师的文才!黄钟大吕,振聋发聩!你烛照天下,明见万里;雨露苍生,泽被万方!透过你深邃的文字,

      我仿佛看到了你鹰视狼顾,龙行虎步的伟岸英姿;仿佛看到了你手执如椽大笔,写天下文章的智慧神态;仿佛看见了你按剑四顾,江山无数的英武气概!楼主,你说的多好啊!我在社区打滚这么多年,所谓阅人无数,见怪不怪了,但一看到楼主的气势,我就觉得楼主同在社区里灌水的那帮小混蛋有着本质的差别,那忧郁的语调,那熟悉的签名,还有字里行间高屋建瓴的辞藻。没用的,楼主,就算你怎么换马甲都是没有用的,你的亿万拥戴者早已经把你认出来了,你一定就是传说中的最强 id。自从社区改版之后,我就已经心灰意冷,对社区也没抱什么希望了,传说已经幻灭,神话已经终结,留在社区还有什么意思。没想到,没想到,今天可以再睹楼主的风范,我激动得忍不住就在屏幕前流下了眼泪。是啊,只要在楼主的带领下,社区就有希望了。我的内心再一次沸腾了,我胸腔里的血再一次燃烧了。楼主的话概括扼要,一语道出了我们苦想多年的而不可得答案的几个重大问题的根本。楼主就好比社区的明灯,楼主就好比社区的方向,楼主就好比社区的栋梁。有楼主在,社区的明天必将更好!楼主你的高尚情操太让人感动了。在现在这样一个物欲横流的金钱社会里,竟然还能见到楼主这样的性情中人,无疑是我这辈子最大的幸运。让我深深感受到了人性的伟大。楼主的帖子,就好比黑暗中刺裂夜空的闪电,又好比撕开乌云的阳光,一瞬间就让我如饮甘露,让我明白了永恒的真理在这个世界上是真实存在着的。只有楼主这样具备广阔胸怀和完整知识体系的人,才能作为这真理的唯一引言者。

       看了楼主的帖子,让我陷入了严肃的思考中,我认为,如果不把楼主的帖子顶上去,就是对真理的一种背叛,就是对谬论的极大妥协。因此,我决定义无返顾的顶了!楼主,在遇到你之前,我对人世间是否有真正的圣人是怀疑的;而现在,我终于相信了!我曾经忘情于汉廷的歌赋,我曾经惊讶于李杜的诗才,我曾经流连于宋元的词曲;但现在,我才知道我有多么浅薄!楼主的帖子实在是写得太好了。文笔流畅,修辞得体,深得魏晋诸朝遗风,更将唐风宋骨发扬得入木三分,能在有生之年看见楼主的这个帖子。实在是我三生之幸啊。看完楼主的这个帖子之后,我竟感发生出一种无以名之的悲痛感?D?D啊,这么好的帖子,如果将来我再也看不到了,那我该怎么办?那我该怎么办?

      直到我毫不犹豫的把楼主的这个帖子收藏了,我内心的那种激动才逐渐平复下来。可是我立刻想到,这么好的帖子,倘若别人看不到,那么不是浪费楼主的心血吗?经过痛苦的思想斗争,我终于下定决心,我要把这个帖子一直往上顶,往上顶到所有人都看到为止!我现在终于明白我缺乏的是什么了,正是楼主那种对真理的执着追求和楼主那种对理想的艰苦实践所产生的厚重感。面对楼主的帖子,我震惊得几乎不能动弹了,楼主那种裂纸欲出的大手笔,竟使我忍不住一次次的翻开楼主的帖子,每看 一次,赞赏之情就激长数分,我总在想,是否有神灵活在它灵秀的外表下,以至能使人三月不知肉味,使人有余音穿梁,三日不绝的感受。楼主,你写得实在是太好了!我唯一能做的,就只有把这个帖子顶上去这件事了。楼主,我支持您! ..
作者: my_dear2002    时间: 2008-9-2 10:31
汗....来指点一下才是正路啊

原帖由 163扛把子 于 2008-9-2 09:48 发表
逐句地看完楼主的这个帖子以后,我的心久久不能平静,震撼啊!为什么会有如此好的帖子!我纵横网络BBS多年,自以为再也不会有任何帖子能打动我,没想到今天看到了如此精妙绝伦的这样一篇帖子。楼主,是你让我深深地理 ...





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