【UG\NX二次开发】常用函数

对话框常用数据类型和函数

UF_STYLER_ask_value:获取对话框控件值

UF_STYLER_set_value:设置对话框控件值

UF_STYLER_free_value:释放内存

uc1616:点子功能对话框

UF_UI_specify_vector:矢量子功能对话框

uc1630:坐标系子功能对话框

UF_UI_open_listing_window:打开列表窗口

UF_UI_write_listing_window:输入到列表窗口

uc1600:获取用户输入的字符串

uc1607:获取用户输入的整型数值

uc1609:获取用户输入的实型数值

uc1601:在信息窗口或状态行显示信息

UF_UI_set_prompt:在提示行显示信息

UF_UI_set_status:在状态行显示信息

UF_UI_message_dialog:显示信息对话框

根据体(body)查询特征(feature):UF_MODL_ask_body_feats

UF_MODL_ask_body_features

根据对象(object)查询特征(feature):UF_MODL_ask_object_feat

根据特征(feature)查询体(body):UF_MODL_ask_feat_body

根据特征(feature)查询对象(object):UF_MODL_ask_feat_object

根据特征(feature)查询面(face):UF_MODL_ask_feat_faces

根据体(body)查询面(face):UF_MODL_ask_body_faces

根据边缘(edge)查询面(face):UF_MODL_ask_edge_faces

uf_list_t(数据类型)

UF_MODL_put_list_item:将对象标识加入到链表中

UF_MODL_ask_list_item:查询对象链表

UF_MODL_create_list:创建一个链表,并返回链表的头指针

UF_MODL_put_list_item:链表的插入,只将对象TAG加入到尾部

UF_MODL_ask_list_count:获取链表长度

UF_MODL_ask_list_item:查询链表中的对象标识,从头节点开始计算,返回第index个节点所包含的对象标识

UF_MODL_delete_list_item:将指定的对象从链表中删除,若节点都被删除了,它将会删除链表

UF_MODL_delete_list:删除链表,释放内存。

创建块 :UF_MODL_create_blockl

UF_MODL_create_block

创建圆柱:UF_MODL_create_cyll

UF_MODL_create_cyl

创建圆锥:UF_MODL_create_conel

UF_MODL_create_cone

创建球 :UF_MODL_create_spherel

UF_MODL_create_sphere

简单孔:UF_MODL_create_simple_hole

台阶孔:UF_MODL_create_c_bore_hole

埋头孔:UF_MODL_create_c_sunk_hole

凸台:UF_MODL_create_boss

矩形凸垫:UF_MODL_create_rect_pad

通用凸垫:UF_MODL_create_general_pad

矩形型腔:UF_MODL_create_rect_pocket

通用型腔:UF_MODL_create_general_pocket

球形键槽:UF_MODL_create_ball_slot

矩形键槽:UF_MODL_create_rect_slot

T型槽:UF_MODL_create_t_slot

U型槽:UF_MODL_create_u_slot

燕尾槽:UF_MODL_create_dove_tail_shot

球型沟槽:UF_MODL_create_ball_groove

U型沟槽:UF_MODL_create_u_groove

矩形沟槽:UF_MODL_create_rect_groove

创建一个旋转体:UF_MODL_create_revolved

查询相关面的数据(类型,中心点,轴方向):UF_MODL_ask_face_data

查询面的u,v参数,参数点等:UF_MODL_ask_face_props

依据给定改考点返回面上的参数与点:UF_MODL_ask_face_parm

面拔锥:UF_MODL_create_taper_from_faces

边拔锥:

UF_MODL_create_taper_from_edges

分隔线拔锥:UF_MODL_create_taper_split_line

边倒圆:UF_MODL_create_edge_blend

倒圆:UF_MODL_create_blind

面倒圆:UF_MODL_create_face_blend

倒角:UF_MODL_create_chamfer

挖空:UF_MODL_create_hollow

不等厚挖空:UF_MODL_create_variable_hollow

螺纹:UF_MODL_create_symb_thread

环形矩阵:UF_MODL_create_circular_iset

矩形矩阵:UF_MODL_create_linear_iset

镜像体:UF_MODL_create_mirror_body

镜像特征:UF_MODL_create_mirror_set

修剪片体:UF_MODL_create_trimmed_sheet

修剪体:UF_MODL_trim_body

分割体:UF_MODL_split_body

偏置表面:UF_MODL_create_face_offset

简化实体:UF_MODL_create_simplify

固定基准面:UF_MODL_create_fixed_dplane

相对基准面:UF_MODL_create_relative_dplane

固定基准轴:UF_MODL_create_fixed_daxis

相对基准轴:UF_MODL_create_relative_daxis

UF_MODL_dissect_exp_string: 将表达式的名称和数值分离,并得到表达式的标识

UF_MODL_ask_exp:有表达式的名称获得表达式的“名称=数值”对

UF_MODL_eval_exp:计算表达式的数值

UF_MODL_edit_exp:更改表达式的数值,当表达式数值被修改后,模型需要被更新以反映表达式的改变,利用函数UF_MODL_update更新模型

UF_MODL_rename_exp:为表达式重新命名

UF_MODL_create_exp() 可用于创建表达式

UF_MODL_create_exp_tag() 得到创建的表达式的标签

UF_MODL_dissect_exp_string() 分解名字和值返回名字、值和表达式的标签

UF_MODL_ask_exp() 返回表达式名和表达式值

UF_MODL_eval_exp() 输入表达式的名,返回表达式的值

UF_MODL_edit_exp() 用新的值替换表达式中原有的值,使用后应UF_MODL_update()来更新模型

UF_MODL_rename_exp() 给已有表达式赋新的名称

UF_MODL_ask_exps_of_feature() 返回制约某特征的所有表达式的标签

UF_MODL_ask_exps_of_part() 返回某部件的所有表达式的标签

UF_MODL_ask_exp_tag_string() 输入表达式标签,返回该表达式串

UF_MODL_is_exp_in_part(); 判断某个表达式是不是在该部件中,是返回FOUR,

对象的遍历:(执行一次,返回一个tag)

UF_OBJ_cycle_all //返回所有对象在一个给定的部分不管他们的所在的层和当前状态。

UF_OBJ_cycle_by_name //输入对象的名字,获得对象的tag

UF_OBJ_cycle_by_name_and_type

UF_OBJ_cycle_objs_in_part //可以获取当前显示部分所有对象的tag (第二个参数是个宏定义)

UF_VIEW_cycle_objects

UF_LAYER_cycle_by_layer //输入一个图层,返回所有对象的tag

UF_OBJ_cycle_objs_in_part(); //在part中遍历对象

UF_OBJ_cycle_all() //在当前工作part中遍历对象

UF_OBJ_cycle_by_name() //通过对象名称查询对象

uf_object_types.h :定义对象

的宏

a type ----uf_object_types.h文件中列出了所有类

a subtype---uf_object_types.h文件中列出了所有类

获取系统显示参数:UF_DISP_ask_system_prrameters

设置颜色:UF_DISP_set_color

设置显示状态:UF_DISP_set_display

设置/取消高亮显示:UF_DISP_set_highlight

设置系统显示参数:UF_DISP_set_system_parameters

显示刷新:UF_DISP_refresh

设置图层状态:UF_LAYER_set_status

(UF_LAYER_WORK_LAYER //设置工作图层

UF_LAYER_ACTIVE_LAYER ; //设置可选图层

UF_LAYER_REFERENCE_LAYER ; //设置只见图层

UF_LAYER_INACTIVE_LAYER; //设置不可选不可见活动图层)

建立目录:UF_LAYER_create_category

设置对象颜色:UF_OBJ_set_color

设置对象图层:UF_OBJ_set_layer

获取对象显示属性:UF_OBJ_ask_display_properties

tag:对象标识

piece part:单个零件

Occurence:事例

object occurence:对象事例

instance:实例

Multi_level:多层装配

component part:组件部件

prototype:原型

reference set:引用集

work part:工作部件

知道(part tag)查询(part name):UF_PART_ask_part_name

知道(part name)查询(part tag):UF_PART_ask_part_tag

知道(part occurrence tag)查询(part tag):

UF_ASSEM_ask_prototype_of_occ

知道(instance tag)查询(part tag):

UF_ASSEM_ask_parent_of_instance(获得父)

UF_ASSEM_ask_child_of_instance(获得子)

知道(entity occurrence tag)查询(part tag):

UF_ASSEM_ask_part_occurrence //查询包含相应对象事例或部件事例的事例

知道(part tag)查询(part occurrence tag):

UF_ASSEM_ask_occs_of_part

//输入父部件标识以及具有事例的部件标识,返回事例的标识数组和事例个数

知道(part occurrence tag)查询(part occurrence tag):

UF_ASSEM_askpart_occ_children

UF_ASSEM_where_is_part_used

知道(instance tag)查询(part occurrence tag):

UF_ASSEM_ask_part_occs_of_inst

//输入实例标识,获取该实例下所对应的所有事例的标识数组及事例个数

UF_ASSEM_ask_part_occ_of_inst

//输入父部件事例标识和实例标识,获取该实例下的事例标识

知道(entity occurrence tag)查询(part occurrence tag):

UF_ASSEM_ask_part_occurrence

知道(part tag)查询(instance tag):

遍历给定的部件下的所有instance,函数的返回值代表下一个instance 的标识

UF_ASSEM_cycle_inst_of_part

知道(part occurrence tag)查询(instance tag):

UF_ASSEM_ask_inst_of_part_occ //查询部件事例所对应的实例标识

知道(instance name)查询(instance tag):

UF_ASSEM_ask_instance_of_name

知道(entity occurrence tag)查询(instance tag):

UF_ASSEM_ask_ask_part_occurrence

UF_ASSEM_askinst_of_part_occ

知道(entity occurrence tag)查询(entity tag):

UF_ASSEM_prototype_of_occ

知道(entity handle)查询(entity tag):

UF_TAG_ask_tag_of_handle

知道(part occurrence tag)查询(entity occurrence tag):

遍历给定的部件occurrence 下的所有对象occurrence,函数的返回值代表下一个对象occurrence 的标识

UF_ASSEM_cycle_ents_in_part_occ

知道(entity tag)查询(entity occurrence tag):

UF_ASSEM_find_occurrence //输入部件事例标识及对象标识,获取该对象的事例标识

UF_ASSEM_ask_occs_of_entity

//输入对象标识,获取进程中全部部件事例中该对象所对应的事例标识数组及事例个数

知道(Part Tag) 查询(Part Name): UF_PART_ask_part_name()

知道(Part Name) 查询(Part Tag): UF_PART_ask_part_tag()

知道(Part Occurrence Tag 或者Entity Occurrence Tag) 查询(Part Tag 或者 Entity Tag):

UF_ASSEM_ask_prototype_of_occ()

如果输入是部件事例标识,返回部件标识;

如果输入为对象事例标识,返回对象原型标识

添加已存部件:UF_ASSEM_add_part_to_assembly

查询装配选项:UF_ASSEM_ask_assem_options

设置装配选项:UF_ASSEM_set_assem_options

获取根部事例:UF_ASSEM_ask_root_part_occ

获取组件中的子组件:UF_ASSEM_ask_part_occ_children ()(获取指定部件事例下的部件事例标识数组和事例个数)

初始化装配约束:UF_ASSEM_init_mc

求解装配约束:UF_ASSEM_solve_mc

将应用约束到装配:UF_ASSEM_apply_mc_data

from_status:主动组件的载入状态

to_status:从动组件的载入状态

mate_type:配合类型

from_type:主动组件特征类型

to_type:从动组件特征类型

from:主动组件的原型标识

from_part_occ:主动组件的事例标识

to:从动组件的原型标识

to_part_occ:被动组件的事例标识

offset:偏移对象的标识,定义两个特征之间的偏移量

name:约束名称

user_name:逻辑类型变量,true表示约束名称是用户自己定义的

建立引用集:UF_ASSEM_create_ref_set

删除引用集中的成员:UF_AEESM_remove_ref_set_members

添加成员到引用集:UF_ASSEM_add_ref_set_members

替代引用集:UF_ASSEM_replace_refset

建立爆炸图:UF_ASSEM_create_explosion

建立装备爆炸与视图之间的关联:UF_ASSEM_set_view_explosi

on

组件爆炸:UF_ASSEM_explode_component

建立体链接: UF_WAVE_create_linked_body

建立线链接:UF_WAVE_create_linked_curve

读取部件属性:UF_ATTR_ask_part_attrs

设置属性:UF_ATTR_assign

于读取指定属性类型和属性标题的属性值:UF_ATTR_read_value

查询工程图设置:UF_DRF_ask_preference

设置工程图设置:UF_DRF_set_perference

设置视图边界是否可见:UF_DRAW_set_border_display

设置视图比例:UF_DRAW_set_view_scle

查询文本设置:UF_DRF_ask_lettering_preferences

设置文本设置:UF_DRF_set_lettering_preferences

设置网格参数:UF_DISP_set_grid_parameters

新建工程图:UF_DRAW_create_drawing

打开工程图:UF_DRAW_open_drawing

删除工程图: UF_DRAW_delete_drawing

更名工程图: UF_DRAW_rename_drawing

UF_DRAW_ask_current_drawing() 获取当前工程图页面的标识,可以使用UF_OBJ_ask_name()函数获取该页面的名称

UF_DRAW_ask_drawing_info() 获取某一工程图页面的相关信息,包括大小、比例、单位、投影角

UF_DRAW_set_drawing_info() 设置某一工程图页面的相关信息,包括大小、比例、单位、投影角

UF_DRAW_ask_drawings() 获取当前工作部件所有工程图页面的标识数组

UF_DRAW_ask_views() 查询给定工程图页面上视图的数量和视图标识数组

UF_DRAW_ask_view_display() 查询指定视图的显示设置,这些设置信息与UG 交互状态下使用鼠标左键双击视图打开的“视图样式”对话框中的信息相同

UF_DRAW_ask_view_borders() 获取视图的边界信息

UF_DRAW_ask_view_scale() 获取视图的比例,如果该视图比例是参数化的还将返回表达式的标识,否则表达式的标识为NULL_TAG

UF_DRAW_ask_view_status() 获取视图的状态,可以为UF_DRAW_ACTIVE_VIEW或者UF_DRAW_REFERENCE_VIEW

UF_VIEW_ask_type() 获取视图的类型和子类型

UF_VIEW_ask_tag_of_view_name() 对于已存在的视图,根据视图的名称获取视图的标识

UF_DRAW_ask_drawing_of_view() 获取包含指定视图的工程图页面的标识

UF_VIEW_cycle_objects() 在给定的视图内遍历对象

uc6433() 根据视图的名称获取视图的转换矩阵

UF_DRAW_move_view() 移动指定的视图到当前工程图页面的指定位置

UF_DRAW_move_view_to_drawing() 移动指定的视图到指定的工程图页面

UF_DRAW_set_view_display() 设置指定视图的显示设置,这些设置信息与UG 交互状态下使用鼠标左键双击视图打开的“视图样式”对话框中的信息相同

UF_DRAW_set_view_scale() 设置视图的比例为指定的值

UF_VIEW_delete() 删除指定的视图或返回视图不能被删除的错误代码

UF_VIEW_copy_view() 创建一个给定视图的复制

UF_VIEW_rename() 重新修改视图的名称

UF_VIEW_update_view()

更新一个指定的视图

添加辅助视图:UF_DRAW_add_auxiliary_view

添加圆形局部视图:UF_DRAW_add_circ_detail_view

添加局部视图:UF_DRAW_add_detail_view

添加正交视图:UF_DRAW_add_orthographic_view

建立简单剖:UF_DRAW_create_simple_sxview

建立阶梯剖:UF_DRAW_create_stepped_sxview

建立半剖:UF_DRAW_create_create_half_sxview

建立旋转剖:UF_DRAW_create_revolved_sxview

建立展开剖:UF_DRAW_create_unfolded_sxview

导入视图:UF_DRAW_import_view

创建并显示中心线:UF_DRF_create_linear_cline

创建并显示整圆中心线:UF_DRF_create_3pt_cline_fcir

创建并显示部分圆中心线:UF_DRF_create_3pt_cline_pcir

创建并显示整螺栓圆:UF_DRF_create_3pt_cline_fbolt

创建并显示部分螺栓圆:UF_DRF_create_3pt_cline_pbolt

获得当前标签的显示部分:UF_PART_ask_display_part

指定部件中所有表达式的标识:UF_MODL_ask_exps_of_part (第3个参数定义tag*类型变量 然后用&符号)

UF_MODL_ask_exp_tag_string:根据表达式标签,获取表达式的字符串形式

UF_PART_import:将一个对象导入到当前工作文件中,被导入对象导入时的各类状态在UF_import_part_modes_s:设置被导入对象导入时的各类状态。

(为了和UGNX内部数据结构保持一致,该结构体在uf_part.h中被重新定义为UF_import_part_modes_t

在进行二次开发时用的是:UF_import_part_modes_t)

UF_GROUP_ask_group_data:输入一个组的标签,查询里面的所有成员

UF_OBJ_ask_type_and_subtype:通过标签,查询相关的特征(体,面,等等)(例如第二个参数等于70,第三个参数等于0表示找到的是一个实体的标签)

UF_ASSEM_ask_work_part:返回当前工作部分的标签(装配)

UF_LAYER_ask_work_layer:获取当前图层

UF_ASSEM_add_part_to_assembly :在给定的装配体中添加一个部件

可以用下面的代码找出错误:

int err = UF_ASSEM_add_part_to_assembly();

char msg[133] = "";

UF_get_fail_message(err, msg);

uc1601(msg, 1);

int UF_MODL_ask_feat_body

(

tag_t feature_obj_id, //特征对象标识符

tag_t *body_obj_id

)

uf_part_ask_part_name:这个函数的输入参数是部件的原型tag,输出参数是部件的路径

uc4574;输入的是部件路径,输出的是部件名称

uc4576 输出目录组件和文件名称组件

NXObjectManager::Get(faceTag); tag转换函数 (代码录制)

std::vector (容器,相当于链表)

vecFace.push_back(往容器中压入某个值)

原型tag = 部件tag

根显示部件发生变化,OCC就会改变, instance tag不会改变

打开一个对话框会初始化4次:

1、创建对话框时设置的参数;

2、 initialize_cb

3、NX自身的一个记忆功能(如果某个操作或者数值设的比较多,这时会初始化为这个操作或者数值)

4、dialogShown_cb

初始化函数一般写在dialogShown_cb里

点击应用或者确定时的处理函数都写在apply_cb()里

update_cb: 是对话框上控件状态发生改变时回调函数,比如单机一个按钮、改变一个下列表框(枚举)的选项、选择一个对象等

关闭block对话框之前弹出其他对话框,我们一般写在按钮的回调函数里

设计对话框是,使用选择对象对话框:

在函数int CreateBolckDlg2::filter_cb(NXOpen::BlockStyler::UIBlock* block, NXOpen::TaggedObject* selectObject)中

当鼠标滑过NX的界面,会选择很多对象(如果需要选择某些特定的对象,例如面等等)则需要在dialogShown_cb()函数里使用下面

的代码进行过滤:(选择面为例)

Selection::MaskTriple maskTrip;

SelectMaskArray maskArray;

//设置选择底面过滤条件

maskArray.RemoveAll();

maskTrip.Type = UF_solid_type;

maskTrip.Subtype = UF_solid_face_subtype;

maskTrip.SolidBodySubtype = UF_UI_SEL_FEATURE_ANY_FACE;

maskArray.Add(maskTrip);

CBlockBase::SetSelectionFilter(selUnFaceUI, Selection::SelectionActionClearAndEnableSpecific, maskArray);

UF_MODL_ask_shared_edges: 把两个面相交部分存入链表

UF_ASSEM_set_work_part: 通过partTag设置为工作部件(装配下)

UF_ASSEM_set_work_occurrence: 通过occTag设置为工作部件(装配下)

UF_ASSEM_ask_root_part_occ ;获取根部事例

UF_ASSEM_ask_all_part_occ_children; 输出子部件的 occurrence 标识数组

UF_ASSEM_ask_component_data:获取该节点的相关信息

UF_ASSEM_ask_part_occ_of_inst输入父OCC和instance tag 返回值是该部件的OCC

UG的系统菜单文件所在的路径 默认值为$UGII_BASE_DIR/ugii/menus

主菜单文件的全路径 $UGII_DEFAULT_MENU_DIR/ug_main.men

弹出式菜单文件的全路径 $UGII_DEFAULT_MENU_DIR/ug_view_popup.men

CONFIG_ask_system_path:自己封装得函数,可以获取项目存放路径

tag_t part = UF_ASSEM_ask_work_part(); //得到当前装配部件标识

tag_t root = UF_ASSEM_ask_root_part_occ(part); //根据当前装配标识获得根节点

UF_ASSEM_ask_part_occ_children(root, &child_part_occs); //根据装配根节点获得子节点

UF_ASSEM_set_work_occurrence(child_part_occs[i]); //将各子部件设为工作部件

tag_t part1 = UF_ASSEM_ask_work_part(); //取得当前工作部件标识

UF_MODL_ask_exps_of_part(part, &model_exp_num, &exp); //获得该部件表达式标识

装配意义下的部件对象

1.查询当前显示部件和工作部件 UF_ASSEM_ask_display_part() //用于查询当前显示部件

UF_ASSEM_ask_work_part() //用于查询当前工作部件

2.设置当前显示部件和工作部件 UF_ASSEM_set_display_part() //把某一部件设置为当前显示部件

UF_ASSEM_set_work_part() //把某一部件设置为工作部件

3.增加一个part到一个assembly中 UF_ASSEM_add_part_to_assembly() //把存在part加入到装载配

件中

UF_ASSEM_create_component_part()//创建一个新的part,并加到装配件中

4.从一个part事件标识得到part标识 UF_ASSEM_ask_prototype_of_occ(); //如果输入是部件事例标识,返回部件标识;

//如果输入为对象事例标识,返回对象原型标识

5.在一个part中查找实例 UF_ASSEM_cycle_inst_of_part();

UF_OBJ_set_layer() 用于设置可显示的UF对象的层

UF_OBJ_set_color() 用于设置救援UF对象的颜色

UF_OBJ_set_blank_status() 用一坷显示的UF对象的blank状态

UF_OBJ_set_line_width() 用于设置可显示的UF对象的线形

UF_OBJ_set_font() 用于设置可显示的UF对象的字体

UF_OBJ_set_highlight() 用于设置可显示的UF对象的高亮状态 //除高亮状态外其他信息都可以保存到part文件中

UF_DISP_add_item_to_display() 增加一个新的对象到Unigraphics的显示窗

UF_LAYER_cycle_by_layer() 专门针对可显示的UF对象的附加查询函数

UF_UI_select_single()

UF_UI_select_by_class() 是可显示的UF对象类型选择对话框

UF_UI_select_feature()

UF_UI_select_sketch() 让用户在Uuigraphics的交互环境中从图形窗口对象

UG二次开发中,如何遍历得到面的tag:

建的长方体,可以得到长方体features的tag

需要根据特征的tag找到对应的body的tag;UF_MODL_ask_feat_body(tag_t feature_obj_id, tag_t * body_obj_id )

然后通过遍历body,找到所有的面: UF_MODL_ask_body_faces(tag_t body, uf_list_p_t * face_list )

一 《UG 对象类型及操作》

1.部件对象

UG 的部件文件是以.prt 为扩展名的二进制文件。当其被加载到UG 进程中后,有一个

部件对象(Part object)与其相关联,同时UG 也为每个部件对象分配了一个标识(tag)。

利用部件对象的标识,通过相关函数我们可以查看、修改部件中大量的几何与非几何信息。

这些函数大多封装在uf_part.h 头文件中

UF_PART_open() 根据部件的名称将UG 或Solid Edge 部件加载到内存并使其成为工作部件和显示部件

UF_PART_save() 将当前的工作部件保存到磁盘中

UF_PART_close() 关闭指定的部件,并可指定是否关闭装配树中该部件之下的所有部件

UF_PART_ask_part_name() 查询部件的文件名

UF_PART_ask_customer_area() 查询部件中用户定义的数据

UF_PART_ask_description() 查询部件文件的描述信息

UF_PART_ask_families() 查询部件文件中的部件族

UF_PART_ask_part_history() 查询部件文件的历史

UF_ATTR_ask_part_attribute() 获取部件属性对象的标识

UF_OBJ_cycle_objs_in_part() 根据指定的类型遍历部件中的所有对象

2.UF对象

UG 中的对象如特征、实体、草图等都有明确的函数与其对应,在uf_o

bject_types.h

头文件中这些对象都被定义为相关的类型,要对这些对象进行操作,获取其标识,一个重

要的函数就是UF_OBJ_cycle_objs_in_part()。

(1)如果已知一个对象的标识,可以使用UF_OBJ_ask_type_and_subtype()函数来查询其类型和子类型

(2)有的UF对象不仅从属于某种类型,有可能还从属于该类型下的子类型

例如:UF_circle_type 类型对象的子类型包括:UF_circle_open_subtype 开放圆子类型;

UF_circle_closed_subtype 闭合圆子类型;

UF_sketch_ref_circle_subtype 草图参考圆子类型

(3)对象的状态有四种:被删除状态 UF_OBJ_DELETED

临时状态 UF_OBJ_TEMPORARY

不正常状态 UF_OBJ_CONDEMNED

激活状态 UF_OBJ_ALIVE。

对象的状态可以使用函数UF_OBJ_ask_status()来进行查询。

UF_OBJ_set_layer() 修改对象所在的图层

UF_OBJ_set_color() 修改对象的颜色

UF_OBJ_set_line_width() 修改对象的线宽

UF_OBJ_set_blank_status() 修改对象的Blank 状态

UF_OBJ_set_font() 修改对象的线型

UF_DISP_set_highlight() 切换对象的高亮显示状态

UF_OBJ_is_type_displayable() 可以检测该类型UF 对象是否属于可显示的UF 对象

UF_OBJ_ask_display_properties() 判断对象的颜色、层、Blank 状态、线型和线宽是否能够设置

3.表达式

UF_MODL_create_exp() 创建表达式

UF_MODL_create_exp_tag() 创建表达式,并获得新创建的表达式的标识(tag)

UF_MODL_dissect_exp_string() 分解表达式,返回表达式的名称、值和标识

UF_MODL_ask_exp() 根据表达式的名称获取整个表达式

UF_MODL_eval_exp() 根据表达式的名称计算表达式的值,输出一实数值

UF_MODL_edit_exp() 用新的值替换表达式中的原有值, 使用该函数后注意调用函数

UF_MODL_update() 更新模型

UF_MODL_ask_exps_of_part() 根据部件标识获取部件中所有表达式的数量,以及部件中所有表达式标识的数组

UF_MODL_ask_exps_of_feature() 根据特征标识获取特征中所有表达式的数量,以及特征中所有表达式标识的数组

UF_MODL_ask_exp() 根据表达式的名称获得表达式的“名称-数值”对

UF_MODL_ask_exp_tag_string() 根据表达式的标识获得表达式的“名称-数值”对

UF_MODL_ask_exp_tag_value() 根据表达式的标识获得表达式的数值

UF_MODL_eval_exp() 根据表达式的名称计算表达式的数值

UF_MODL_ask_exp_desc_of_feat()根据特征标识获取特征中所有表达式的数量,特征中所有表达式标识的数组,以

及各个表达式的描述

UF_MODL_ask_descriptor_of_exp() 根据表达式标识获取

该表达式的描述

UF_MODL_dissect_exp_string() 根据表达式的“名称-数值”对,获取表达式的LHS、RHS 和表达式的标识

UF_MODL_edit_exp() 根据输入的表达式的“名称-数值”对,修改表达式,当表达式被修改后,使用

函数UF_MODL_update()更新模型

UF_MODL_rename_exp() 根据输入的表达式的旧名称与新名称修改表达式的名称

------------------------------------------------------------------------------------------------------------------

2,《菜单文件》

菜单文件默认情况下都保存在UGII_BASE_DIR/ugii/menus 文件夹下。

ug_main.men UG 主菜单栏的菜单文件

ug_view_popup.men UG 快捷菜单文件

ug_cam.men 进入加工应用模式后,为菜单栏添加相应按钮的菜单文件

ug_drafting.men 进入制图应用模式后,为菜单栏添加相应按钮的菜单文件

ug_mechanisms.men 进入运动分析应用模式后,为菜单栏添加相应按钮的菜单文件

ug_modeling.men 进入建模应用模式后,为菜单栏添加相应按钮的菜单文件

ug_smd.men 进入钣金→成型/压平应用模式后,为菜单栏添加相应按钮的菜单文件

------------------------------------------------------------------------------------------------------------------

3《UG 信息窗口》

UG 信息窗口是指在UG 环境下显示的一个文本框,在应用开发过程中通常用于显示计算结果

UF_UI_open_listing_window() 打开信息窗口

UF_UI_write_listing_window() 将文本写入信息窗口

UF_UI_save_listing_window() 将信息窗口中的文本保存到文本文件中

UF_UI_close_listing_window() 关闭信息窗口

UF_UI_exit_listing_window() 清除信息窗口中的内容,退出信息窗口

UF_UI_is_listing_window_open() 查询信息窗口是否打开

UF_UI_create_part() 显示“创建新部件文件”对话框,创建一个部件并设置其为工作部件,功能与UG 下拉

菜单【文件】→【新建】相同

UF_UI_open_part() 显示“打开部件”对话框,打开一个部件并设置其为工作部件,功能与UG 下拉菜单

【文件】→【打开】相同

UF_UI_create_filebox() 显示用于选择文件的对话框,目的在于获取用户选择文件的全路径

------------------------------------------------------------------------------------------------------------------

4 《部件文件的基本操作》

部件文件的打开操作主要使用函数 UF_PART_open( )、UF_PART_open_quiet( )和 UF_PART_reopen( )

部件文件的保存可使用 UF_PART_save ( )、UF_PART_save_all( )和UF_PART_save_as( )

关闭部件文件 UF_PART_close( )用于关闭指定的部件,

UF_PART_close_all( )用于关闭当

前进程中的所有部件

UF_PART_import( ) 用于从磁盘中将UG NX 部件或Solid Edge 部件导入到当前的工作部件中

UF_PART_export( ) 用于将指定的对象(objects)导出到指定的部件,对象被复制到目标部件中

UF_PART_ask_num_parts( ) 用于返回当前进程中被打开的部件文件的数量,

UF_PART_ask_nth_part( ) 用于获取进程中第n 个部件的标识,

数UF_PART_ask_families( ) 用来获取部件中部件族的标识

UF_FAM_ask_family_data( ) 用于获取族表的数据,该函数的输入参数是族表标识

UF_FAM_ask_attribute_data( )用于获取族表属性的数据

UF_FAM_ask_member_column_data( ) 用于获取族表列信息

UF_FAM_ask_member_row_data( ) 用于获取族表行信息

UF_FAM_edit_member( ) 用于编辑族表成员的数据

UF_FAM_evaluate_intent_data( ) 用于计算意图数据(intent data),返回满足要求的族表成员

UF_PART_apply_family_instance() 用于应用成员的属性值到族表部件

UF_ASSEM_set_instance_intent( ) 用于在装配环境下设置意图数据

UF_ASSEM_eval_instance_intent( ) 用于计算装配实例的意图数据

UF_MODL_ask_minimum_dist_2 //查询两物体间距离

UF_VEC3_cross //单位化向量 所谓单位化就是保持其方向不变,将其长度化为1

UF_is_initialized //检查C API环境已成功打开,初始化

UF_CFI_ask_file_exist //检查目录文件是否存在

UC1616 //点构造器

UF_ASSEM_add_part_to_assembly //将零件模型导入到当前对话框返回模型名称和加载状态等信息

uc4574 //获取文件名不带路径和后缀

UF_ATTR_ask_part_attrs_in_file //从一个未打开的部件文件中读取所有的部件属性

API拾取向量对话框通过函数UF_UI_specify_vector调用

其原型如下:

int UF_UI_specify_vector

(

char* message,

int* mode,

int display_conehead,

double direction[3],

double origin[3],

int*response

);

1,第一个参数显示提示消息

2,第二个参数是拾取模式,可以是如下值:

UF_UI_INFERRED

UF_UI_TWO_POINTS

UF_UI_AT_ANGLE

UF_UI_EDGE_CURVE

UF_UI_TANGENT_TO_CURVE

UF_UI_FACE_NORMAL

UF_UI_DATUM_PLANE

UF_UI_DATUM_AXIS

UF_UI_XC_AXIS

UF_UI_NEGATIVE_XC_AXIS

UF_UI_YC_AXIS

UF_UI_NEGATIVE_YC_AXIS

UF_UI_ZC_AXIS

UF_UI_NEGATIVE_ZC_AXIS

3,第三个参数决定函数执行完毕之后,是否显示矢量箭头,可以是值UF_UI_DISP_TEMP_VECTOR或者UF_UI_DISP_NO_VECTOR中的一个。

4,第四个和第五个参数分别是方向和基点,这个参数唯一地确定了一个矢量。

5,最后一个参数则是对话框的返回值,和前面介绍的其他对话框一样。

uc1603()和uc1605()分别用于显示“单选菜单列表”对话框和“复选菜单列表”对话框

UF_UI_specify_screen_position() //拾取屏幕上位

部件族常用函数:

UF_PART_ask_families() //用来获取部件中部件族的标识

UF_FAM_ask_family_data() //用于获取族表的数据,该函数的输入参数是族表标识

UF_FAM_ask_attribute_data() //用于获取族表属性的数据。

UF_FAM_ask_member_column_data() //用于获取族表列的信息

UF_FAM_ask_member_row_data() //用于获取族表行的信息

UF_FAM_edit_member() //用于编辑族表成员的数据,当所有编辑结束后注意调用函数UF_MODL_update( )执行更新操作

UF_FAM_evaluate_intent_data() //用于计算意图数据(intent data),返回满足要求的族表成员

UF_PART_apply_family_instance() //用于应用成员的属性值到族表部件

UF_ASSEM_set_instance_intent() //用于在装配环境下设置意图数据

UF_ASSEM_eval_instance_intent() //用于计算装配实例的意图数据,并可选择应用结果

UF_translate_variable(), //该函数用于获取环境变量的值

UF_STYLER_ask_value() // 获取相关控件的值后,

UF_CURVE_create_line //画一条线

UF_MODL_create_extruded //创建拉伸体

UF_VEC3_is_parallel //输入2个向量和一个公差,判断这两个向量是不是平行

UF_ASSEM_ask_transform_of_occ()和UF_ASSEM_ask_component_data()用于获

取指定组件的装配空间。需要指出的是,如果输入的参数是部件的事例标识,装配是组件

所从属的部件文件(没有必要一定为显示部件),在这种情况下,装配空间可以解释为拥有

装配的绝对坐标系。如果函数UF_ASSEM_ask_component_data()的输入参数是实例标识,

装配空间则是组件的直接父装配的绝对坐标系

配合条件的创建过程为:

1. 定义配合条件,并调用函数UF_ASSEM_init_mc()进行初始化;

2. 填充配合条件结构体UF_ASSEM_mating_condition_t,其中主要填充配合约束结构体UF_ASSEM_constraint_t;

3. 调用函数UF_ASSEM_solve_mc()求解配合条件;

4. 调用函数UF_ASSEM_apply_mc_data()应用配合条件到一组件;

5. 调用函数UF_MODL_update()更新模型,以反应模型变化

sys MLDLG



有关线的函数头文件:
#include <uf_curve.h>
#include <uf_csys.h>
#include <UF_MODL.h>
#include <UF_EVAL.h>
UF_CURVE_create_line               //创建一条线(2点)
UF_CURVE_create_line_point_angle   //创建一条线(点和角度)
UF_CURVE_create_line_point_point   //创建一条线(2点)
UF_CURVE_create_line_point_tangent //创建一条线(过点和曲线相切)
UF_CURVE_create_line_tangent_point //创建一条线(切线和通过一个点)
UF_CURVE_create_bridge_curve       //创建切线(2条曲线之间的切线)

UF_CURVE_create_arc                //创建弧
UF_CURVE_create_arc_3point         //创建3点圆弧
UF_CURVE_create_arc_3tangent       //创建弧(三条曲线切圆弧)
UF_CURVE_create_arc_center_radius  //创建弧(中心半径)
UF_CURVE_create_arc_center_tangent //创建弧(中心和切线)
UF_CURVE_create_arc_point_center   //创建弧(2点:中心和起点)
UF_CURVE_create_arc_point_point_radius   //创建弧(两个点和半径)
UF_CURVE_create_arc_point_point_tangent  //创建弧(两个点和切线)
UF_CURVE_create_arc_point_tangent_point  //创建弧(点、切线、点)
UF_CURVE_create_arc_point_tangent_radius   //创建弧(点、切线、半径)
UF_CURVE_create_arc_point_tangent_tangent  //创建弧(点、切线、切线)
UF_CURVE_create_arc_tangent_point_point    //创建弧(切线、点、点)
UF_CURVE_create_arc_tangent_point_tangent  //创建弧(切线、点、切线)
UF_CURVE_create_arc_tangent_tangent_point  //创建弧(切线、切线、点)
UF_CURVE_create_arc_tangent_tangent_radius //创建弧(切线、切线、半径)
UF_CURVE_create_arc_thru_3pts  //创建弧(通过用户指定的输入3点)

UF_MODL_intersect_objects  //2个面交线
UF_CURVE_create_int_object //2个面交线
UF_MODL_create_law            //创建规律曲线 太难了没去研究
UF_CURVE_create_joined_curve  //曲线链接成一条曲线
UF_CURVE_auto_join_curves     //无序曲线,重新排列(封闭曲线如圆、椭圆不能加入)
UF_CURVE_ask_analysis_display //获得曲线显示类型线、圆、圆锥或样条
UF_CURVE_create_wrap_object   //缠绕或展开曲线


UF_CURVE_ask_arc_length        获得弧长
UF_CURVE_ask_bridge_feature    询问桥曲线特性
UF_CURVE_ask_centroid          计算曲线的质心(重心)或固体边缘
UF_CURVE_ask_combine_curves    检索的参数用于创建参数曲线(s)结合两条曲线沿指定方向向量。

UF_CURVE_ask_curve_turn_angle  获得2曲线角度
UF_CURVE_ask_feature_curves    获得曲线特征
UF_CURVE_ask_line_data         获得直线2个端点坐标
UF_CURVE_ask_spline_data       获得样条线参数
UF_CURVE_ask_spline_sap        获得b样条线参数
UF_CURVE_ask_spline_thru_pts   读了样条函数定义的数据结构
UF_CURVE_create_bridge_feature 桥接曲线
UF_CURVE_create_conic          创建一个圆锥曲线
UF_CURVE_create_fillet         曲线倒角
UF_CURVE_create_isocline       创建样条
UF_CURVE_create_offset_curve   偏置曲线
UF_CURVE_create_offset_object  偏置曲线
UF_CURVE_create_proj_curves    创建投影曲线
UF_CURVE_create_shadow_outline 创建轮廓曲线
UF_CURVE_create_silhouette       样条转直线圆弧
UF_CURVE_create_simplified_curve 样条转直线圆弧
UF_CURVE_create_spline           创建样条曲线
UF_CURVE_create_spline_thru_pts  创建一个从输入定义数据指定的样条曲线
UF_CURVE_create_trim             修剪曲线
UF_CURVE_create_wrap_object      创建一个包或打开曲线
UF_CURVE_edit_arc_data           编辑现有的弧
UF_CURVE_edit_bridge_feature   编辑一个桥曲线
UF_CURVE_edit_combine_curves   编辑参数曲线
UF_CURVE_edit_conic_data       编辑一个二次曲线
UF_CURVE_edit_length           编辑曲线的长度。
UF_CURVE_edit_line_arc         编辑圆弧
UF_CURVE_edit_line_data        编辑直线
UF_CURVE_edit_move_mult_points 编辑样条(移动样条上的点)
UF_CURVE_edit_offset_object    编辑偏移曲线
UF_CURVE_edit_proj_curves       编辑投影曲线
UF_CURVE_edit_spline_thru_pts   编辑样条的定义数据
UF_CURVE_edit_trim_curve        编辑修剪曲线边界对象

UF_CURVE_free_curve_struct      释放曲线结构指针获得的功能
UF_CURVE_free_wrap_parms        释放任何所指向的数据结构输入结构
UF_CURVE_intersect              曲线交点

UF_CURVE_section_from_planes    创建截面曲线
UF_CURVE_set_analysis_display 集的值曲线分析显示选项线、圆、圆锥或样条
UF_CURVE_set_spline_sap       集的值(SAP)B-curve形状分析参数


UG/Open API 提供了一些形如 UG_MODL_delete_xxxx 的函数以实现模型中对象的删除。
                        
函数名称与作用描述:

UF_MODL_delete_exp()
//输入表达式的名称 char *exp_name,删除表达式        

UF_MODL_delete_feature()
//输入要删除特征的标识链表 uf_list_p_t cmtags,删除一个或多个特征

UF_OBJ_delete_object()
//输入要删除对象的标识,删除对象

UF_OBJ_delete_array_of_objects()
//输入要删除对象的标识数组,删除多个对象

被隐藏内容已经显示出来

UF_MODL_delete_object_parms ()
//输入对象的标识链表,删除对象的参数
UF_MODL_delete_body_parms ()
//输入实体对象(solid bodies)的标识链表,删除实体内所有的参数

                  
在调用函数 UF_OBJ_delete_object()时需要注意:函数返回值为 0,并不保证对象被删除,此时可以利用函数 UF_OBJ_ask_status()确认对象是否被删除。在遍历部件中的对象期间,不要试图删除对象,否则会出现错误。系统推荐使用的方法是:在遍历过程中将要删除的对象保存在数组中,在遍历后使用函数 UF_OBJ_delete_array_of_objects()删除对象。

比如:
//提取的实体边缘,用UF_OBJ_delete_object函数无法删除,可以用UF_OBJ_delete_array_of_objects函数删除
//UF_OBJ_delete_array_of_objects(1,obj_by_tag,NULL);//删除对象,可以删除提取的线

在调用函数 UF_MODL_delete_object_parms ()时需要注意:标识链表中的片体和实体将被函数制成非参数化的特征。标识链表中的曲线和点,如果是一个特征的输出,调用该函数将删除其与该特征之间的联系,变成基本曲线和点。该函数不支持草图曲线执行删除参数的操作。
UGopen 布尔运算相关函数说明
  楼主(阅:332/回:16)
UF_MODL_operations          //对两个实体执行布尔操作,包括相加、相减和相交
UF_MODL_unite_bodies           //相加操作,不保留目标体、工具体
UF_MODL_subtract_bodies            //相减操作,不保留目标体、工具体
UF_MODL_intersect_bodies      //相交操作,不保留目标体、工具体
UF_MODL_replace_boolean_body  //编辑操作,替换目标体或工具体
被隐藏内容已经显示出来

UF_MODL_unite_bodies_with_
retained_options        //相加操作,可保留或删除目标体、工具体
UF_MODL_subtract_bodies_with_
retained_options        //相减操作,可保留或删除目标体、工具体


UF_MODL_intersect_bodies_with_
retained_options        //相交操作,可保留或删除目标体、工具体
UF_MODL_edit_boolean_with_
retained_options        //编辑操作,保留或替换目标体或工具体

//布尔减 
tag_t frec_eid=NULL;
int err=UF_MODL_subtract_bodies_with_retained_options (
object_tag, //目标体
f_tag,      //工具体
FALSE,      //不保留目标体
TRUE ,      //保留工具体
&frec_eid );

UF是默认绝对坐标的我们需要转换工作坐标
#include <uf_part.h>
#include <uf_defs.h>
#include <uf_modl.h>
#include <uf_mtx.h>

//点坐标转换,点数据从一个坐标转换到另一个坐标
UF_CSYS_map_point     
        
//将模型点位转换成视图点位
UF_VIEW_map_model_to_drawing  

//将视图点位转换成模型点位
UF_VIEW_map_drawing_to_model  


UF_MTX4_csys_to_csys  //坐标1 到 坐标2 形成4x4矩阵
UF_MTX4_vec3_multiply //变化的实现

double point[ 3 ]={0,0,0};

//将工作坐标转换成绝对坐标
UF_CSYS_map_point(UF_CSYS_ROOT_WCS_COORDS,point,UF_CSYS_WORK_COORDS,point);

//将绝对坐标转换成工作坐标
UF_CSYS_map_point(UF_CSYS_WORK_COORDS,point,UF_CSYS_ROOT_WCS_COORDS,point);


点 从坐标1 转换到 坐标2,

被隐藏内容已经显示出来

  double  from_origin[3] = {0.0, 0.0, 0.0};
  double  from_x_axis[3] = {1.0, 0.0, 0.0};
  double  from_y_axis[3] = {0.0, 1.0, 0.0};
  double  to_origin[3] = {10.0, 10.0, 10.0};
  double  to_x_axis[3] = {0.0, 1.0, 0.0};
  double  to_y_axis[3] = {1.0, 0.0, 0.0};

  double  target[3] = { 20.0, 10.0, 5.0};
  double  new_target[3];

  double  transform[16];


//坐标1 到 坐标2 形成4x4矩阵
UF_MTX4_csys_to_csys( from_origin, from_x_axis, from_y_axis,to_origin, to_x_axis, to_y_axis, transform );
UF_MTX4_vec3_multiply( target, transform, new_target );//变化的实现

char mei_msg[64]="";
UF_UI_open_listing_window(); //打开窗口
UF_UI_write_listing_window("\n"); 
sprintf(mei_msg, "点坐标,%.2f,%.2f,%.2f",target[0],target[1],target[2]);
UF_UI_write_listing_window( mei_msg );
UF_UI_write_listing_window("\n"); 
sprintf(mei_msg, "点坐标,%.2f,%.2f,%.2f",new_target[0],new_target[1],new_target[2]);
UF_UI_write_listing_window( mei_msg );


//获取曲面方向,根据UV值中点
bool getFaceNormal(const tag_t &faceTag, double *pFaceNor, double *pCen/*=NULL*/)
    {
        UF_INITIALIZE();
        double uvLimit[4] = { 0 };
        UF_MODL_ask_face_uv_minmax(faceTag, uvLimit);
        double uvPair[2] = { (uvLimit[0] + uvLimit[1]) / 2,(uvLimit[2] + uvLimit[3]) / 2 };

        double newPos[3] = { 0,0,0 }, unused[3] = { 0,0,0 }, unitNor[3] = { 0,0,0 };
        UF_MODL_ask_face_props(faceTag, uvPair, newPos, unused, unused, unused, unused, unitNor, unused);

        double faceNor[3] = { 0,0,0 };
        tag_t pos_so[3] = { null_tag }, pt = null_tag;
        UF_SO_create_scalar_double(faceTag, UF_SO_update_after_modeling, newPos[0], &pos_so[0]);
        UF_SO_create_scalar_double(faceTag, UF_SO_update_after_modeling, newPos[1], &pos_so[1]);
        UF_SO_create_scalar_double(faceTag, UF_SO_update_after_modeling, newPos[2], &pos_so[2]);
        UF_SO_create_point_3_scalars(faceTag, UF_SO_update_after_modeling, pos_so, &pt);

        tag_t direction = null_tag;
        if (0 == UF_SO_create_dirr_normal_to_surface_point(faceTag, UF_SO_update_after_modeling, faceTag, pt, FALSE, &direction))
        {
            UF_SO_ask_direction_of_dirr(direction, faceNor);
            for (int i = 0; i != 3; ++i)
            {
                *(pFaceNor + i) = faceNor[i];
                if (pCen)
                    *(pCen + i) = newPos[i];
            }
            return true;
        }
        else
        {
            for (int i = 0; i != 3; ++i)
            {
                *(pFaceNor + i) = unitNor[i];
                if (pCen)
                    *(pCen + i) = newPos[i];
            }
            return false;
        }
    }


//程序有很多显示的更新时可采用此方法,速度提升很明显
UF_DISP_set_display(UF_DISP_SUPPRESS_DISPLAY);//停止更新显示
//中间放需要更新显示内容的代码

UF_DISP_set_display(UF_DISP_UNSUPPRESS_DISPLAY);//启动更新显示
 UF_DISP_regenerate_display();//重新显示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

社恐猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值