iCAx开思网

标题: ug二次开发中,如何改变视图??? [打印本页]

作者: qingwufy    时间: 2005-4-15 21:27
标题: ug二次开发中,如何改变视图???
请教各位高手:
     ug二次开发中,系统默认的是视图是"TOP",想把零件的视角
由"TOP"(上视图)改变为'"TFR-ISO"(等轴侧视图,Isometric),
该如何改变??
      我试过了许多函数,用UF_ROUTE_create_iso_drawing,没有
任何反应,用uc6449("TFR-ISO"),出现错误,错误提示是View Not Active,
本来想找set_view_active之类的函数,但是没有找到。
     请教各位高手,怎样才能把想把零件的视角由"TOP"(上视图)改变
为'"TFR-ISO"(等轴侧视图,Isometric)???
    敬请各位高手指点,谢谢!!
作者: wflying    时间: 2005-4-16 15:30
UF_DRAW_set_drawing_info不行吗?
作者: qingwufy    时间: 2005-4-18 08:45
谢谢高手,UF_DRAW是制作二维平面图的吧?
我希望的是把三维图形以等轴测的视角显示就可以了
作者: haiying    时间: 2005-4-18 22:21
先通过:UF_OBJ_cycle_by_name( view_name, [$view_tag)]
得到 view_tag;而后用:
UF_DRAW_import_view( drawing_tag, view_tag,
                                       reference_point3, &view_info,
                                       [$draw_view_tag )]
注意让: char*view_name = "TFR-ISO";
作者: thriller    时间: 2005-4-19 14:52
想到一个比较笨的方法,UF_VIEW_rotate_view
直接把视图旋转一下
作者: jambo436    时间: 2005-4-20 21:18
5楼说的方法不合适,
我曾试过,
该函数的功能就是绕设定点旋转设定角度值,
不能达到楼主预期的效果
作者: zhaobinbob    时间: 2005-4-20 22:04
我也想知道该怎么办
作者: qingwufy    时间: 2005-4-21 09:09
to haiying:
我试你所说的方法,还是不行的。
下面是最简单的代码。
  
      int units=1;
     tag_t part_tag;
     char part_name[132]="c:\\block.prt";
     long error_code;
     error_code=UF_PART_new(part_name,units,[$part_tag)]
  
     char *block_len[3] = {"10","10","5"};
     tag_t  block_feat_id;
     double block_origin[3] = {0.0,0.0,0.0};
     UF_FEATURE_SIGN sign = UF_NULLSIGN;
  
     error_code=UF_MODL_create_block1(sign,block_origin,block_len,[$block_feat_id)]
     tag_t tag_iso;
     error_code=UF_OBJ_cycle_by_name( "TFR-ISO", [$tag_iso )]  
     double dwg_reference_point[2]={0,0};
     UF_DRAW_view_info_t  view_info;
     tag_t  draw_view_tag;
     tag_t drawing_tag;
     error_code=UF_DRAW_ask_current_drawing([$drawing_tag)]
     UF_DRAW_initialize_view_info( [$view_info )]
      error_code=UF_DRAW_import_view(drawing_tag,tag_iso,dwg_reference_point,[$view_info,&draw_view_tag)]
  
      上述代码在运行中,UF_DRAW_ask_currrent_drawing会出错,错误提示
是“there is no current drawing”。
      如果在程序中去掉函数UF_DRAW_ask_currrent_drawing,用part_tag代替UF_DRAW_import_view中的drawing_tag,则UF_DRAW_import_view出错,错误提示是内存访问越界。
  
       请问是由于函数使用不当,还是改函数不适合??
       请高手指点这是怎么回事??
       谢谢!!
作者: wflying    时间: 2005-4-21 09:52
在UF_DRAW_ask_current_drawing([$drawing_tag)]前添加上  
UF_DRAW_create_drawing( drawing_name, &drawing_info,
                                        [$new_drawing_tag)]就可以了,试试看!!
作者: qingwufy    时间: 2005-4-21 17:02
程序是调出来了,结果和我预想的一样,得到了一张工程图。
  
而我想要的结果如下图所示。左图是程序得到的实体,视图为“TOP”,
我想要的是它以等轴测视图“TFR-ISO”显示出来,如右图所示。
作者: jambo436    时间: 2005-4-22 14:38
这个问题看似简单而且对应的操作也不复杂,
为什么就是没人整出来呢?
我也曾经找了一些函数,
都没能达到预期的效果!
作者: 深夜摔键盘    时间: 2005-4-23 15:16
为什么非要找针对某种特定视图的函数?
UF_VIEW_rotate_view 是万能的,它的参数是一个用来表示旋转轴的向量,一个是旋转角度,遵循右手螺旋法则。它们在3D图形学中是采用4元数的表示方法。
  
TFR-ISO视图的变换矩阵只要你愿意翻翻图形学的书就能找到或者自己写出来。有了这个变换矩阵,你再翻翻书,就可以查到怎样将旋转矩阵转化为4元数,这样就可以用UF_VIEW_rotate_view 了。
作者: 深夜摔键盘    时间: 2005-4-23 15:40
用四元数来计算3D旋转问题,要比复合旋转矩阵快好多倍。
作者: zhaobinbob    时间: 2005-4-23 21:55
上面所说很有道理哦,Ug中的视图旋转是不是就是这样实现的啊!!
作者: jambo436    时间: 2005-4-24 20:22
键盘兄说得当然有道理,
不过只是奇怪为什么对应这么简单的操作没有函数,
而且要搞懂这些该死的矩阵可真不是个什么好事情,
原本可以避免的.
  
再说,UF_VIEW_rotate_view也并不是所说的万能的,
他的前提是要知道目前视图的状态,
再在此基础上再绕设定点旋转预定角度而已.
而有时我们需要的是在任何时候都能回到楼主所说的TFR-ISO或者其他视图状态,用这个函数就未必都能达到需求,
或者说在参数设定上要费很大功夫了.
作者: thriller    时间: 2005-4-26 16:18
jambo436: 任何时候都可以得到视图的方向的。
作者: 深夜摔键盘    时间: 2005-4-26 18:04
有本书一开篇就强调说,“如何求解问题的才能是一门已经失传了好久的艺术”。我们遇到问题,首先不去想怎么解决它,而是寻找有没有子程序。
  
虽然为了追求效率,许多东西不需要DIY了,但最好不要完全依赖它们,应该随时作好自己做的准备。特别是linux在国内渐渐浮出水面的现在。
作者: Yeren2005    时间: 2005-4-27 11:08
键盘兄说的对,不过那样的算法只适合要求的那一种情况,可以更广的来做,即将任意物体投影到任意视角(平面)内。首先,按要求生成一个相对于用户坐标系的平面,如楼主的视角所在平面,之后在此平面中建立一个右手坐标系,然后根据此坐标系即可得到你所说的变换矩阵,再转回去时只要乘此阵的逆阵即可。 这种方法应该适用于所有的旋转、平移、投影等。
作者: qingwufy    时间: 2005-4-27 21:53
谢谢各位高手的指点,
现在问题解决了,
zzz版主指点迷津,在uf_layout.h里面,uc6464()  
可以解决此类问题。
  
各位高手的指点,拓宽了我得思路,受益匪浅
谢谢各位!
作者: qingwufy    时间: 2005-4-27 21:56
键盘兄的介绍很详细,很有道理,
以后要向你好好学习学习,要学的东西是在太多了
作者: zhaobinbob    时间: 2005-4-28 18:30
uc6464() 可以实现旋转旋转视图,但是不像ug中的切换试图按钮那样,是一个渐变的过程,而是以下就跳到另一个视图里了。




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