少尉
UID2367596
U币1
G币2058
技术0
主题51
精华1
阅读权限75
注册时间2015-6-28
最后登录2021-3-13
在线时间69 小时
居住地浙江省 温州市 乐清市 乐成镇
QQ
手机15757753770
出生地辽宁省 大连市
少尉
|
parasolid内核PK函数(C语言) 运行速度 比 ufun 和 nxopen 快
乐清 * 梅雷
目前本人只用于兴趣研究,有关lib库 和 头文件 自己去百度找。
下面是常用的 函数以及 基础列子
注意PK单位是米 1米=1000毫米
#include <uf.h>
#include <uf_ui.h>
#include <uf_exit.h>
#include <uf_modl.h>
#include <uf_obj.h>
#include <uf_csys.h>
#include <uf_part.h>
#include <uf_ps.h>
#include "parasolid_kernel.h"
#include "parasolid_ifails.h"
#include "parasolid_tokens.h"
#include <math.h>
#include <list>
——————————————————————————————
PK_BODY_ask_memory_usage 返回实体占用内存
PK_EDGE_ask_vertices 返回边缘顶点
PK_FACE_ask_vertices 返回表面顶点
PK_BODY_ask_vertices 返回实体顶点
PK_EDGE_find_extreme 返回边缘极点坐标
PK_FACE_find_extreme 返回面极点坐标
PK_BODY_find_extreme 返回实体极点 坐标
PK_TOPOL_find_box 粗量对象极点坐标
PK_TOPOL_eval_mass_props 获得对象信息(体积等)
PK_EDGE_ask_type 分析边缘类型
PK_FACE_ask_type 分析表面类型
PK_BODY_ask_type 分析实体类型
PK_EDGE_ask_body 根据边缘获得实体
PK_EDGE_ask_curve 根据边缘获得曲线
PK_EDGE_ask_faces 根据边缘获得面
PK_CURVE_ask_edges 根据线返回边缘
PK_FACE_ask_body 根据面获得实体
PK_FACE_ask_loops 根据面获得loops
PK_FACE_ask_edges 根据面获得边缘
PK_BODY_ask_faces 根据实体获得面
PK_BODY_ask_edges 根据实体获得边
PK_BODY_ask_first_edge 根据实体获得第一个边
PK_BODY_ask_first_face 根据实体获得第一个面
PK_EDGE_check 检查边
PK_FACE_check 检查面
PK_BODY_check 检查体
PK_EDGE_find_end_tangents 获得相切的边
PK_EDGE_ask_oriented_curve 获得边和方向
PK_EDGE_reverse 边反向
PK_FACE_delete 删除面
PK_ENTITY_delete 删除视实体
PK_ENTITY_delete_attribs 删除实体所有属性
PK_ENTITY_copy 复制实体
PK_POINT_ask 分析点坐标
PK_LINE_ask 分析直线信息
PK_CIRCLE_ask 分析圆弧信息
PK_ELLIPSE_ask 分析椭圆信息
PK_CURVE_ask_param 返回曲线信息
PK_CURVE_find_length 返回曲线弧长
PK_FACE_find_uvbox 返回面uv值
PK_SURF_ask_uvbox 返回面uv大小
PK_SURF_parameterise_vector 获得点在面上的uv值
PK_CURVE_find_min_radius 返回曲线最小半径
PK_SURF_find_min_radii 返回面最小半径
PK_SURF_find_non_aligned_box返回面大小
PK_CURVE_find_non_aligned_box返回曲线大小
PK_SURF_ask_faces 返回给定的表面被附加的一组面。
PK_SURF_offset 偏移面
PK_ENTITY_is 是否实体
PK_ENTITY_is_curve 是否曲线
PK_ENTITY_is_geom 是否geom
PK_ENTITY_is_part 是否部件
PK_ENTITY_is_surf 是否surf
PK_ENTITY_is_topol 是否topol
PK_FACE_is_coincident 分析2个面是否重合
PK_EDGE_is_planar 分析边缘是否在平面上
PK_EDGE_is_smooth 分析边缘是否平滑光滑
PK_POINT_create 创建点
PK_LINE_create 创建直线
PK_CIRCLE_create 创建圆弧
PK_ELLIPSE_create 创建椭圆
PK_PLANE_create 创建平面
PK_BODY_create_solid_block创建块
PK_BODY_create_solid_cone 创建圆锥
PK_BODY_create_solid_cyl 创建圆柱
PK_BODY_create_solid_prism 创建棱柱
PK_BODY_create_solid_sphere 创建球
PK_BODY_create_solid_topology 创建拓扑
PK_BODY_create_solid_torus 创建环
PK_BODY_create_wire_topology 创建连线体的拓扑结构
PK_BODY_offset_2 偏移
PK_BODY_extend 扩展一个片体
PK_BODY_extrude 拉神
PK_BODY_sweep 扫描扫略
PK_BODY_thicken_3 片体加厚
PK_BODY_hollow_2 孔
PK_BODY_sew_bodies 缝合
PK_BODY_trim修剪体
PK_BODY_trim_gap_analysis这个函数在提供给失败的修剪操作的边缘找到缺口。
PK_BODY_taper 分离
PK_BODY_boolean_2 布尔运算
PK_BODY_unite_bodies 布尔加
PK_BODY_subtract_bodies 布尔减
PK_BODY_intersect_bodies 布尔求交
PK_BODY_spin 旋转对象
PK_BODY_transform_2 变换实体
PK_FACE_offset_2 偏移面
PK_CURVE_intersect_curve 2个曲线交点
PK_SURF_find_curves_common 获得2个面的交线
PK_FACE_intersect_curve 获得曲线和面的交点
————————————————————————————————————————
例子:PK创建 长方体大小 20*20*30 (单位mm)
// PK创建 长方体大小 20*20*30 (单位mm)
double mm=0.001;
tag_t partition = NULL_TAG;
UF_PS_create_partition(&partition);//为Parasolid创建一个隔层分区,并将其设置为当前分区
PK_BODY_t Output1=PK_ENTITY_null;
PK_AXIS2_sf_s basis_set;
PK_VECTOR_t origpoint={10.0*mm,10.0*mm,0.0*mm}; //点位置 10,10,0
PK_VECTOR1_t zDir={0.0,0.0,1.0};
PK_VECTOR1_t refDir={1.0,0.0,0.0};
basis_set.location=origpoint;
basis_set.axis=zDir;
basis_set.ref_direction=refDir;
PK_ERROR_code_t err=PK_BODY_create_solid_block(20.0*mm,20.0*mm,30.0*mm,&basis_set,&Output1);
if(err == PK_ERROR_no_errors)
{
tag_t ug_tag = NULL_TAG;
UF_PS_create_obj_from_ps_tag(Output1, &ug_tag);//通过Parasolid创建一个NX对象tag
UF_DISP_regenerate_display();//恢复显示
//获得实体表面数量
int numFaces=0;
PK_FACE_t *faces=NULL;
PK_BODY_ask_faces(Output1,&numFaces,&faces);
PK_MEMORY_free(faces);
char msg[132]="";
sprintf(msg,"梅雷提示!面数量=%d",numFaces);
uc1601(msg,1);
}
————————————————————————————————————————
例子:ufun选择对象,pk内核函数粗量获得对象极点坐标和大小
char *message="梅雷提示!请选择实体。";
char *title="pk内核获得实体面数量";
int scope=UF_UI_SEL_SCOPE_WORK_PART;//选取范围
int response;
tag_t object_tag=NULL_TAG;
double cursor[3]={0,0,0};
tag_t view=NULL_TAG;
UF_UI_lock_ug_access (UF_UI_FROM_CUSTOM);
UF_UI_select_with_single_dialog(message,title,scope,MEI_init_proc,NULL,&response,&object_tag,cursor,&view);
UF_DISP_set_highlight(object_tag,0);
UF_UI_unlock_ug_access (UF_UI_FROM_CUSTOM);
if (response==UF_UI_OBJECT_SELECTED)
{
PK_BODY_t body=PK_ENTITY_null;
tag_t ps_tag=NULL_TAG;
UF_PS_ask_ps_tag_of_object(object_tag, &ps_tag);
if (ps_tag==NULL_TAG)
{
uc1601("找不到ps_tag",1);
}
else
{
body=(PK_BODY_t )ps_tag;
PK_BOX_t box;
box.coord[0]=0;
box.coord[1]=0;
box.coord[2]=0;
box.coord[3]=0;
box.coord[4]=0;
box.coord[5]=0;
PK_TOPOL_find_box(body,&box);
char msg[133]="";
sprintf(msg, "粗量对象外形=%.2f,%.2f,%.2f\n",(box.coord[3]-box.coord[0])*1000,(box.coord[4]-box.coord[1])*1000,(box.coord[5]-box.coord[2])*1000);
UF_UI_open_listing_window();
UF_UI_write_listing_window(msg);
}
}
|
|