1、 局部变量1表达式1; . 表达式n; ; 表达式块定义的说明:1. 表达式块要求以“”开头,以“;”结尾。表达式块作为一种顺序执行的组合规则,必须赋给一个属性。2. 一个表达式块包含有许多语句。这些语句在表达式块中顺序执行。3. 表达式块中的变量是局部变量。与标准的知识熔接语句不同,局部变量要使用符号赋值。局部变量必须以$为头部标识。如:$local_ver。4. 最后一个表达式的值为整个表达式块的返回值。返回值的类型必须与属性指定的数据类型一致。例如:(number) returned_number: $a2; $b3; $a+$b; 在上例中,属性returned_number:的值为5
2、。2.2 关于表达式块的说明1. KF语言是非过程性语言。然而,一些任务需要遵循一定的过程。也就是说:语句需要按某顺序执行。表达式块可满足本要求。2. 在我们前边几章中,虽然没有系统的提及表达式块,但在某些定义和举例中,还是使用了表达式块。比如:方法、函数及规则群的定义。3. 表达式块中的局部变量在表达式块以外不可被引用和改值。4. 表达式块可以嵌套。但内部表达式块只可引用外部表达式块中定义的局部变量,不可改变其值。内部表达式块可以再次定义与外部同名的局部变量,则在内部和外部表达式块中该变量会有不同的值。如同下例。为使程序清晰起见,应避免这种用法,防止程序失控。 $block_ver 1; 2
3、; ug_printvalue( $block_ver ); ;程序运行的结果为先打印出在第二个表达式块中的变量$block_ver的值(2),再打印出第一个表达式块中的同名变量$block_ver的值(1)。5. 表达式可以引用在同一个类文件中的属性。可以将表达式块的值赋给其他的属性。6. 注意:在同一个类文件中,属性first_point:与表达式块中的局部变量$first_point没有必然联系。2.3 表达式块的应用举例例 1 建立一个属性,以只读方式打开文件“c:workinput.txt”,读取其中的数据。并记录这些数据。第1步:打开NX,进入到KF可视化编程环境下。第2步:点击鼠
4、标右键,添加名为data_in_file的属性。第3步:定义属性的返回值类性为List。第4步:定义属性的规则公式为: $a openFile(e:kbeinput.txt;read); $b readSimpleDataFile($a); closeFile($a); $b;第5步:点击OK,查看read_in_file的值。参考答案如图4-1:图4-1:读取文件数据说明:在本例中,一个文本文件被打开,使用KF读取数据并关闭。ReadSimpleDataFile返回一个复合链,这里的每一个子链都是文件中的一行。读取的结果是链中链。这是一个典型的需要顺序执行的程序。例 2 编辑第三章例题中创建
5、的support类,使其从一个ASCII文件中读取原料的数据。创建一个stock.dat文件,包含有下列在loop循环中使用的直径信息。 0.25, 0.375, 0.5, 0.75, 1.0, 1.5, 2.0, 3.0打开*_support.dfa文件,创建一个输入参数,记录用户指定的外部数据文件。 (String Parameter) data_file: 编辑standard_steel属性,改变钢材选择规则。 使用表达式块来读取stock.dat文件中的直径,不再使用固化的代码。 (list) standard_steel: openFile(data_file: ;保存文件。并在N
6、X中验证本例。自由修改stock.dfa文件中的数据,在NX中更新数模。参考答案如图4-2。图4-2:更新后的数模以上两例分析了如何从一个存在的文件中读取数据,并利用这些数据建造数模。本节稍后将更详细的讨论文件的输入输出操作。例 3 通过给定的三个点p1,p2,p3和半径,计算倒角的相切点和中心点。使用文本编辑器创建*_fillet类,生成的新文件名为*_fillet.dfa。定义*_fillet类名和用到的输入参数。 #! UGNX/KF 2.0 DefClass: *_fillet (ug_base_part); (Point Canonical Parameter) p1: (Point
7、 Canonical Parameter) p2: (Point Canonical Parameter) p3: (Number Canonical Parameter) rad:定义support类中的其他属性。 (Vector) vec1: unitize(Vector2Points(p1:,p2:); (Vector) vec2: unitize(Vector2Points(p3: (Number) dot: vec1: . vec2: 注意,1. unitize是向量标准化函数。能够使输入的向量的模为1。2. 这里,dot属性规则的“.”是数学运算中的内积运算符号。 表示两个向量点乘
8、,得到一个浮点数。利用表达式块计算倒角数据。 (List) fillet_data: If abs(dot:) 0.99999 Then $vec3unitize(vec1:+vec2:); $a rad: * sqrt(1+dot:)/(1-dot: $b * sqrt(2/(1-dot: $ctr_pt p2: - $b*$vec3; $tan_p1 - $a*vec1: $tan_p2 0) then ug_printvalues(Circle +format(%d,$i)+ radius = %f,$rad) else ; return is ;(list) demandvalue:
9、Radiuses:保存文件并在NX中创建本类的实例。答案如图4-5。图4-5:从实例循环中找到并输出信息例 7 创建孔的实例链。孔的位置信息从外部文件中读取。使用文本编辑器创建*_hole_childlist类, 生成的新文件名为*_hole_childlist.dfa。定义*_hole_childlist类。 *_hole_childlist (ug_base_part);(string parameter) Point_File:kbehole_data.txt(number parameter) Hole_Diameter:(number parameter) Hole_Tip_Angl
10、e: 60;(number parameter) Hole_Depth: 0.5;(list parameter) Placement_Face: ;从文件中读取孔的位置信息。(list) read_in_points: openFile(Point_File:利用ug_cylinder来创建孔的实例循环。(child list) Holes: Class, If (length(read_in_points:) Then ug_simple_hole Else nulldesign; Quantity, length(read_in_points: Hole_Diameter, Hole_D
11、iameter: Hole_Depth, Hole_Depth: Hole_Tip_Angle, Hole_Tip_Angle: Location, Point( First(nth(child:,read_in_points:), Second(nth(child: Third(nth(child:) ); Placement_Face, Placement_Face: lockrule?,true;交互输出信息(integer) report: ug_printmessage(format(,length(read_in_points:)+ holes will be created);
12、report:第7步:保存文件并在NX中实例化本类。答案如图4-6。图4-6:从文件中读取孔的信息并作实例循环创建孔系4部件类4.1 继承部件类的语法格式 Defclass: 主类 ( 部件类1 部件类2 部件类n ); 部件类继承格式的说明:1. 一个类可以继承多个部件类。多类的继承要通过空格来划分。2. 如果多个继承类含有同样的属性名,那么,靠近左括号的类优先。4.2 部件类的说明1. 本论题涉及到类的继承。我们可以将一些通用的规则属性或方法封装到一个类中。这就是类的继承概念。如同C+,JAVA等面向对象的语言一样,继承概念有着显而易见的优点。2. 如同属性之间不可循环引用一样,类之间的继
13、承也不可循环。3. 原则上讲,所有的类都可被其他类所继承,从而成为部件类。4. 我们这里建议只把那些与几何创建无关的,一般不用于实例化的,仅记录很全局的属性规则及很通用的方法的类称为基本部件类。5. 当然也有一种情形,即现有的某个类大体上满足需要,但有小的不同。我们可以创建一个新类,继承旧类,并重载或新增一些规则属性和方法。这时,我们也可把被继承的旧类称为部件类。6. 系统提供的最常用的用于继承的部件类有ug_base_part,nulldesig,ug_displayable_entity等。7. 当我们定义一个类时,我们可以继承多个部件类来获取这些类中的所有属性和方法。例如:ug_line
14、继承了ug_displayable_entity类的层和颜色属性。8. 部件类中的属性和方法可以被重新定义,这时,该类的实例将使用本类中重载的属性和方法。如果某属性没有被重载而在实例化时用到了,则自动获取继承进来的部件类中的属性值。如同下例:类AAA定义如下:DefClass: AAA();(Number parameter) Dia: 12;(Number) Rad: Dia:/2;类BBB定义如下: BBB(AAA);(Number parameter) Height:1.0;(Number Canonical parameter) Rad:(Number) Volume: m_pi:*R
15、ad:2*Height:那么,BBB类在KF中的理解为:(Number Parameter) Dia:(Number Parameter) Height: 1.0;m_pi:4.3 部件类的应用举例例 8 我们知道,KF系统提供的基类ug_cylinder可接收直径,高度,位置等信息, 创建圆柱实体。我们现在需要通过接收拉伸荷载和最大压力等工程信息, 来创建几何数模。使用继承的方法来实现这个熔入工程规则的设计。使用文本编辑器创建*_support_cylinder类, 生成的新文件名为*_support_cylinder.dfa。定义*_support_cylinder类。 *_support_cylinder (ug_cylinder);(Number Parameter) Load: 5600;(Number Parameter) Max_Stress: 40000;重载直径属性,通过利用在方法练习中使用的公式 带入拉伸荷载和最大压力进行计算。 (Number) Pi: 3.1415926; (Number) Diameter: Sqrt(4*Load:/(pi:*Max_Stress:并在NX中测试本设计。生成圆柱的直径为:0.422。5文件的输入输出操作5.1 常用的文件操作函数 同其它的
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1