QQ登录

只需一步,快速开始

快捷登录

登录 或者 注册 请先

UG爱好者

查看: 9468|回复: 4
打印 上一主题 下一主题

[分享] parasolid内核PK函数(兴趣研究)

[复制链接]

少尉

Rank: 5Rank: 5

51

主题

75

帖子

2258

积分
跳转到指定楼层
楼主
发表于 2017-9-13 16:31:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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);

}
}





有奖推广贴子: 

回复

使用道具 举报

六级士官

Rank: 4

3

主题

162

帖子

1471

积分
板凳
发表于 2017-9-14 09:28:41 | 只看该作者
虽然看不懂,显然很高深,顶一个
回复 支持 反对

使用道具 举报

六级士官

Rank: 4

3

主题

162

帖子

1471

积分
地板
发表于 2017-9-14 09:29:32 | 只看该作者
楼主能不能通俗地介绍一下这个东西的好处
回复 支持 反对

使用道具 举报

六级士官

Rank: 4

1

主题

116

帖子

1157

积分
5#
发表于 2018-8-16 21:57:54 | 只看该作者
能不能共享一下库和头文件
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

 
 
QQ:1359218528
工作时间:
9:00-17:00
 
微信公众号
手机APP
机械社区
微信小程序

手机版|UG爱好者论坛 ( 京ICP备10217105号-2 )    论坛管理员QQ:1359218528

本站信息均由会员发表,不代表本网站立场,如侵犯了您的权利请联系管理员,邮箱:1359218528@qq.com  

Powered by UG爱好者 X3.2  © 2001-2014 Comsenz Inc. GMT+8, 2024-11-22 23:53

返回顶部