iCAx开思工具箱

标题: 关于UG中的KF模块 [打印本页]

作者: herryweiwei    时间: 2005-1-17 20:36
标题: 关于UG中的KF模块
kf模块中的几何采用可以将几何建模特征采纳到知识模型库里面,并且在模型树中体现出来,可是我却无法对几何采用的模块进行编辑操作,一旦借助到所采用的几何体的操作系统就报错,请问各位,你们也有类似的情况么,怎么解决。
要是没有解决办法,这个几何采用还有什么意义?
谢谢各位了,请指教!
作者: frecar    时间: 2005-1-17 21:44
不太明白你所说的对采用后的模型进行编辑是什么意思?
如果只是想改变参数的话,你采用后右键edit是可以改变参数的。
如果你想得到dfa文件,也是可以的,采用后如果是feature,那么
对于的类的参数就可以得到。
采用后可以再给这个特征加上自己的attribute。
作者: herryweiwei    时间: 2005-1-18 12:27
小弟所指的对采用后的模型进行编辑指的是在KF中对其进行拉伸、借助其(sheetbody)进行剪裁实体等等。
我采用后没有得到任何的参数,导出的dfa文件在新建文件中一开始是打不开、无法生成,后来指定路径后连dfa文件都看不到了,请问kf模块的adoption几何采用是否可以实现:采用已经通过建模模块生成的特征-->生成dfa文件-->在新建的文件中打开这个dfa文件-->得到和原本一样的实体或者片体,这点对偶很重要,谢谢各位了。
我的kf现在无法完成上述工作,正在怀疑是不是这个模块损坏了.......
请各路神仙帮帮忙啊,谢谢!!!
作者: frecar    时间: 2005-1-18 12:59
KF完全实现你所说的功能,你可以在采用后,用list rules(注意是在root上面)看到dfa的文件内容,然后再save as成dfa文件就可以了。
作者: herryweiwei    时间: 2005-1-19 09:40
生成dfa文件这点小弟知道,只是我无法根据生成的dfa文件重新获得几何体了,看来是kf模块有问题了,我修复安装ug试试。
谢谢各位了!
作者: popo2004    时间: 2005-1-19 15:32
在KF中对其参数进行修改时经常会出现参数若从0.2直接变到2时无法实现,而从0.2到0.4再每增加0.2一直到2就会实现啊
作者: herryweiwei    时间: 2005-1-20 14:38
楼上指的是face offset之类的操作么?在建模模块下也是如此吧?
作者: herryweiwei    时间: 2005-1-21 09:50
请问frecar 我在kf中几何采用单独的特征可以生成dfa文件,可是涉及到几个相互之间有关联的特征(比如在实体上某个面的特定位置打孔)时就无法由dfa文件重新生成特征。请问有解决的办法么?
能几何采用几个相关的特征么?
作者: frecar    时间: 2005-1-22 09:10
当你某个面上进行打孔时,你需要选择一个放置面,这个放置面是以一个HOSTPOINTER来提供给后面的操作进行参考的,而且只是在这个PART中存在,而且是动态分配的。当你新建一个文件,从DFA文件后再重新生成模型时,UG不认识这个HOSTPOINTER,无法参考它。
你需要在生成DFA文件后,稍做修改,用函数来取得你这个放置面,这样才能够在重新生成时做参考。
作者: herryweiwei    时间: 2005-1-23 12:02
请问frecar,能给我个类似的简单dfa文件参考一下么,拜谢了!
作者: frecar    时间: 2005-1-23 20:30
#! UG/KF 17.0
#
  
DefClass: ug_edge_blend_example (ug_base_part);
  
#+
     Create a block and apply a blend to its edges.
     To be used with a new metric part.
#-
  
(Number Parameter) Radius: 1.0;
  
(Child) Block: {
   Class;    ug_block;
   Height;    10;
   Length;    10;
   Width;    10;
};
  
(Child) Blend: {
   Class;      ug_edge_blend;
   Edge_Blend_References;  ug_body_askEdges(Block: );
   Radius;      Radius:;
};
作者: herryweiwei    时间: 2005-1-28 00:44
多谢!!!
作者: herryweiwei    时间: 2005-1-30 00:40
Edge_Blend_References;  ug_body_askEdges(Block: );  
以上那句不解,倒角倒的是所有的边,能实现只倒个别的几个指定的边么,具体的语句有事怎么样的呢?请赐教
作者: goodluckwu    时间: 2005-2-4 10:23
:(
完全不懂
:(
作者: frecar    时间: 2005-2-13 10:11
能阿,换个函数就行了
作者: herryweiwei    时间: 2005-2-18 01:01
怎么换啊 请frecar明示 谢谢了!
作者: frecar    时间: 2005-2-21 09:17
函数ug_body_askEdgeClosestToPoint(Any $body, Point $point)
其中$body是边所在的实体
      $point可以是你所要得到的边上的一点.
如果你选的是几条边共点的那一点,那么将得到那几条边的一个LIST
作者: herryweiwei    时间: 2005-2-22 14:45
请问frecar兄,如同ug_body_askEdgeClosestToPoint(Any $body, Point $point)这一类的函数的介绍和用法在哪本书里能学习到,ug的doc里面有么,我现在要用到大量这方面的东东,真不好意思一而再再而三的麻烦你啊^_^
作者: frecar    时间: 2005-2-22 19:11
帮助文档中都有说明的.
作者: wzchu1979    时间: 2005-2-24 09:20
我看到一个dfa文件,楼主能否帮着分析以下,特别是(child)后面的%是什么意思?????
  
#! UG/KF 17.0
  
DefClass: nut (ug_base_part);
    (number parameter) bolt_diameter:1.0;
    (number parameter) hex_height:0.5;
    (point  parameter) position:point(0,0,0);
    (vector parameter) x_direction:vector(1,0,0);
    (vector parameter) y_direction:vector(0,1,0);
  
    (number) hex_flat_width: 1.75*bolt_diameter:;
    (number) radius: hex_flat_width: / 2.0 / cos(30.0);
    (vector) z_direction: x_direction: * y_direction:;
  
    (child list) %lines: {
            class; ug_line;
            start_point; position: + radius:*cos(60*(child:index:-1))*x_direction: +
                                     radius:*sin(60*(child:index:-1))*y_direction:;
            end_point; position: + radius:*cos(60*child:index*x_direction: +
                                   radius:*sin(60*child:index*y_direction:;
            suppress?; true;
            quantity; 6;
    };
  
    (child) %extrusion: {
            class; ug_extruded;
            profile; %lines:;
            end_limit; hex_height:;
            direction; -1 * z_direction:;
    };
  
    (child) %upper_cone: {
            class; ug_cone;
            base_diameter; hex_flat_width: + (2*hex_height:/tan(30));
            top_diameter; 0;
            height; hex_height: + hex_flat_width: * tan(30)/2;
            origin; position:;
            direction; -1 * z_direction:;
    };
  
    (child) %lower_cone: {
            class; ug_cone;
            base_diameter; hex_flat_width: + (2*hex_height:/tan(30));
            top_diameter; 0;
            height; hex_height: + hex_flat_width: * tan(30)/2;
            origin; position: + -1*hex_height:*z_direction:;
            direction; z_direction:;
    };
  
    (child) %hole: {
            class; ug_cylinder;
            diameter; bolt_diameter:;
            height; hex_height:;
            origin; position:;
            direction; -1 * z_direction:;
    };
  
   (child) %bool1: {
            class; ug_boolean;
            operation; intersect;
            tool; {%upper_cone:};
            target; {%extrusion:};
    };
  
    (child) %bool2: {
            class; ug_boolean;
            operation; intersect;
            tool; {%lower_cone:};
            target; {%bool1:};
    };
  
    (child) %bool3: {
            class; ug_boolean;
            operation; subtract;
            tool; {%hole:};
            target; {%bool2:};
    };
  
    (child) %body: {
            class; ug_body;
            feature; {%bool3:};
            color; 4;
    };
作者: herryweiwei    时间: 2005-2-24 14:25
回wzchu1979,我也不清楚%是在什么情况下出现的。只是有的函数、例如%ug_tolerances等就是这个用法;此外我也在一些子特征里见到过这种在前面加%号的作法,我也想知道是怎么回事情。
作者: herryweiwei    时间: 2005-2-24 14:34
还得再麻烦frecar一下,请问关于以上那个倒角的命令,我使用函数ug_body_askEdgesClosestToPoint(Block:,Point (0,5,0));在零件中建立新的子规则的时候总是出现如下的报错(如图)说找不到目标体、没ug_body_askEdgesClosestToPoint这个函数。我试了一个上午了,实在没办法才又来麻烦你的,frecar就帮忙帮到底,给出一个完整的使用函数ug_body_askEdgeClosestToPoint(Any $body, Point $point)的例子领小弟入门吧,谢谢!
作者: herryweiwei    时间: 2005-2-25 10:42
不麻烦frecar了,谢谢!小弟已经发现出错的地方了,呵呵
作者: frecar    时间: 2005-2-26 08:47
%不是必需的.加%只是为了在KF模块隐藏所创建特征的细节.
如果没有都%,那么在KF导航器中你可以看到实例是由line,extrusion,等等
特征所构成.
有%你就看不到这些信息
作者: herryweiwei    时间: 2005-2-27 09:36
frecar果然高人也,又学到一点,请受小弟一拜!
作者: frecar    时间: 2005-2-27 14:38
%只是为了隐藏建模的细节.你可以把%去掉后,再在UG里面运行一下,
比较一下有什么差别,你就很清楚%的作用的.
另外,帮助上面也有说明的.
作者: herryweiwei    时间: 2005-3-1 19:22
还有一个问题,请问和dfa文件关联起来的dlg对话框可以实现对窗口的零件特征和dfa内部函数的交互活动么?
例如:用一张面切一个实体(实体是由dfa文件生成的),能否通过对话框实现kf的Defun: ug_adoptObject(Any $object)几何采用功能实现对面的选取,然后在kf中用选中面来切实体呢?
先谢谢啦
作者: sky_trace    时间: 2005-3-31 16:54
%好像用于隐藏KF类或属性,以%开头的类和属性将不会在KF导航器中显现。
  
原来已经有那么多高人说过了啊!班门弄斧了啊!
作者: vodka    时间: 2005-4-1 06:15
隐藏以%起头的规则,避免被用户在KF Navigator里改动它们
作者: herryweiwei    时间: 2005-4-5 10:18
继续请教各位高手,KF可以实现对话框的嵌套调用么,还是仍然需要借助C来实现?具体怎么作呢?谢谢!
作者: vodka    时间: 2005-4-6 04:18
对话框可以和多层class关联的。比如你有个a1.dlg + a1.dfa, a1里面有个child rule,用了b1 class, 你可以有b1.dlg对话框
  
Dialog Launching
The following describes the behavior when you attach a button on the KF UIStyler dialog to a child rule in Fusion. When the button is pressed it realizes that it is associated to a child rule and goes to look for a .dlg file that matches the class of the child. This allows a KF UIStyler dialog to display additional dialogs for child classes.  
  
If the KF UIStyler interface can find a .dlg file that matches the name of the class of the child rule then it displays the new dialog and allows you to input parameters. Pressing OK or Cancel returns you back to the parent dialog. You can nest down multiple levels and all of the concepts for a KF UIStyler dialog apply to the children.     
  
When you invoke the subdialog it automatically creates a temporary instance of the rules if that has not already occurred. This automatic action is as if there were a refresh callback on the button. This is required for technical reasons because in order to output parameters to KF from the subdialog it has to put a dynamic rule over an existing rule in Fusion. In order for that to work the child needs to exist - so it creates a temporary copy.
  
When you press OK or APPLY in the child dialog it never runs the full UG update. It applies any parameter changes to KF, and either exits the dialog with OK or in the case of Apply it updates the dialog presentation with any changes. Since you are not in the primary parent dialog, doing a full UG update may cause update errors if all parameters are not entered or changed as yet. Therefore, you do not see geometry updates when you hit OK or Apply in the child dialog. That only happens in the main parent.
  
Hitting cancel in the child dialog only exits the dialog.
  
When you get back to the main parent dialog - then OK and Apply causes the full UG update and realizes any child dialog parameter changes.
  
Given this information it is worth looking at how parameter values are passed and updated in the child rule.
  
  DefClass: MainClass ...
  
   (child) aaa: { class, SubClass, parm1, 10};
  
   
  
   DefClass: SubClass ...
  
    (number parameter modifiable) parm1: 0;
  
    (number parameter modifiable) parm2: 0;
  
UI/Styler File MainClass.dlg:
  
    Button named "aaa" to launch the child dialog.
  
   
  
UI/Styler File SubClass.dlg:
  
    Two Number fields named "parm1" and "parm2"
  
When the child dialog displays, the initial value of parm2 is 0.0, and the initial value of parm1 is 10. If the value of parm1 is changed to 99 and you choose OK in the dialog - then a new dynamic rule writes over parm1 to set the value to 99. This dynamic rule overrides the value of 10 that was set by the parent and passed as a parameter to the child. As long as that dynamic rule exists the value remains 99. The only way to get rid of the dynamic rule is to delete it using the VDE, in which case the value goes back to 10.
  
Note the following when creating a child class that updates with a KF UIStyler dialog:
  
The parameters (like Parm1 and Parm2 ) need to have the modifiable attribute - otherwise the dialog cannot overlay the dynamic rule.
  
The parameters cannot be canonical, because you can't put a dynamic rule over a canonical parameter.
  
It is not necessary for the control values to be formal parameters. It can just be a "local variable" in that class as long as it has a modifiable attribute set. Making it a parameter is more consistent, but not required.
  
For example, the following situation would also work as a variation from what was shown above using local variables instead of parameters in the child class:
  
    DefClass: MainClass ...
  
     (child) aaa: { class, SubClass };   # no parameters passed
  
   
  
    DefClass: SubClass ...
  
     (number modifiable) parm1: 0;       # just local attributes
  
     (number modifiable) parm2: 0;
  
This is somewhat different from how you deal with rules and parameters for top level classes and dialogs (at the root level). For top level classes all of the values do need to be parameters for the class, they can be canonical, and they do not have to be modifiable.




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