表达式的定义ug/Open API创建的表达式和UG的交互界面产生的表达式同样在“表达式编辑器”中可见。
表达式提供UG中的参数化建模的机制,表达式能控制特征,特征也随表达式的变化而改变。—个表达式可在多个特征中使用,这样它的变化将能改变多个特征。
表达式的形式一般是: “name = value”。
表达式名的首字符必须是字母,其他字符可以是数字、字母、下划线等。表达式名是大小写敏感的,一个部件文件中的表达式名应唯—。表达式值可以是数字和条件等式,表达式名可以用于表达式值中。
表达式的使用UF函数允许用户创建、查询和编辑表达式和几何表达式,对表达式进行各种操作的函数包含在头文件uf_modl.h中,对几何表达式进行各种操作的函数包含在头文件uf_gexp.h中。
如果表达式串中,仅仅提供表达式值,UG软件会自动给它—个名字。如表达式串定义如下:
“diameter/2”
UG会赋给它一个类似“p0”的名字。建议按下列形式赋值
“radius = diameter/2 ”
可以用函数UF_MODL_create_exp()创建表达式;当需要得到创建的表达式的标签时,使用函数UF_MODL_create_exp_tag()。常用表达式操作函数如表3-8所示:
表3-8常用表达式操作函数
函数 | 描述 |
UF_MODL_create_exp() | 创建表达式,没有返回 |
UF_MODL_create_exp_tag() | 创建表达式,返回新建表达式的标识 |
UF_MODL_import_exp() | 从文件输入表达式,即可引用其它部件的表达式文件,操作完成后必须用函数UF_MODL_update()更新数据库 |
UF_MODL_dissect_exp_string() | 分解名字和值返回名字、值和表达式的标识 |
UF_MODL_eval_exp() | 输入表达式的名,返回表达式的值 |
UF_MODL_edit_exp() | 用新的值替换表达式中原有的值。使用后应用函数UF_MODL_update()来更新模型 |
UF_MODL_rename_exp() | 给已有表达式赋新的名称 |
UF_MODL_ask_exp() | 返回表达式名和表达式值 |
UF_MODL_ask_exps_of_feature() | 返回制约某特征的所有表达式的标识 |
UF_MODL_ask_exps_of_part() | 返回某部件文件的所有表达式的标识 |
UF_MODL_ask_exp_tag_string() | 输入表达式标识,返回该表达式串。 |
UF_MODL_ask_exp_tag_value() | 通过表达式标识获得表达式值 |
6 }- H# R j2 G' r. J. Y6 Q$ W) j
下面举例说明函数UF_MODL_edit_exp()的使用方法,代码实现的功能是将表达式p1的值改为20。注意:函数UF_MODL_edit_exp()的输入参数必须为整个表达式,并且编辑表达式后,必须更新模型才能及时反映其变化。
* y1 |! F; D1 P: A, {
char sExp[] = “p1=20”;
UF_MODL_edit_exp(sExp);
UF_MODL_update();
链表对象为了提高编程的灵活性,UG/Open API提供了对象链表。它使用来存放对象或特征的标识,链表的每个节点保存一个对象或特征的标识。与链表有关的操用函数如表3-9所示,它们包含在头文件uf_modl.h中。
表3-9 链表操作函数
函数 | 描述 |
UF_MODL_create_list() | 创建一个链表,并返回链表的头指针 |
UF_MODL_put_list_item() | 插入元素到链表中。该函数只将对象加入到链表的尾部,不校验链表中是否有重复对象 |
UF_MODL_ask_list_count() | 获取链表中元素的个数。该函数计算从链表的头开始到第一个出现NULL_TAG节点之间的节点个数。因此,如果链表中包含NULL_TAG,那么得不到链表的真实长度。 |
UF_MODL_ask_list_item() | 查询链表中的对象标识。该函数通过标识在链表中的位置返回对象标识 |
UF_MODL_delete_list_item() | 将指定的对象从链表中删除 |
UF_MODL_delete_list() | 删除链表,并释放内存 |
( U7 Q; s s. \0 v& M
下面举例说明链表的使用方法,代码实现的功能是利用曲线数组创建曲线链表,需要注意的是链表使用完后,需要利用UF_MODL_delete_list()删除不需要的链表。
uf_list_p_t curves_list = NULL;
int i = 0, irc =0;
UF_MODL_create_list(&curves_list);
for(i=0; i<n_curves; i++)
UF_MODL_put_list_item(curves_list, curves);
…
UF_MODL_delete_list(&curves_list);
8 }: M# K! Q4 {$ T1 O1 TList两种应用场合。
属性对象UG环境下的属性是用户附加到部件或对象上的字符串、整形数值、实型数值的字段,用于对部件或对象进行说明或做标记。UG/Open API在头文件uf_attr.h中提供了与部件或对象属性的接口。与属性对象有关的操用函数如表3-10所示。
部件属性对象是UF_part_attribute_type类型,它是关于整个部件的信息对象,例如模型的材料等属性。在每个UG部件中都有—个部件属性对象,在单个的部件属性对象上可以附加多个属性项。
UG提供了7种属性类型:UF_ATTR_any、UF_ATTR_string、UF_ATTR_integer、UF_ATTR_real、UF_ATTR_null、UF_ATTR_time、UF_ATTR_reference。UF_ATTR_any表示所有属性类型。
表3-10 链表操作函数
函数 | 描述 |
UF_ATTR_ask_part_attribute() | 获取工作部件的部件属性对象标识 |
UF_ATTR_ask_part_attrs() | 用于从加载到UG中的抽取属性对象的属性 |
UF_ATTR_ask_part_attrs_in_file() | 用于从磁盘文件中抽取部件的属性对象的属性,而不用把该部件加载到UG中 |
UF_ATTR_assign() | 给指定的部件属性或部件分派一个属性 |
UF_ATTR_count_attributes() | 计算属于某一个对象的指定类型的属性数 |
UF_ATTR_cycle() | 遍历对象某一类型的所有属性项,返回下一个属性标题及属性值 |
UF_ATTR_delete() | 从对象上删除指定类型的属性 |
UF_ATTR_delete_all() | 从对象上删除指定类型的所有属性 |
UF_ATTR_find_attribute() | 查找某一属性标题的特定属性类型 |
UF_ATTR_read_value() | 读取给定类型和标题的属性的值 |
2 y% H. Y/ B' @5 r
- j7 N" q% J. _* @& A
任何确定存在的UG对象都具有唯一的标识,这里对象是指UG的part、object、Feature、Expression等。