PK VS UF 创建块的时间
UF
//计时开始
UF_timer_t Timer;
UF_begin_timer(&Timer);
//创建块
UF_FEATURE_SIGN sign = UF_NULLSIGN;
double corner_pt[3] = { 0.0, 0.0, 0.0 };
char* edge_len[3] = { "10","20","30" };
tag_t blk_obj_id = NULL_TAG;
UF_MODL_create_block1(sign, corner_pt, edge_len, &blk_obj_id);
//结束计时
UF_timer_values_t ValueTimer;
UF_end_timer(Timer, &ValueTimer);
//打印信息
char msg[256];
UF_UI_open_listing_window();
sprintf(msg, "该进程的总CPU时间(用户+系统):%f\n总运行时间:%f", ValueTimer.cpu_time, ValueTimer.real_time);
UF_UI_write_listing_window(msg);
PK
封装PK块
bool PKCreateBlock::ag_create_block(const double point[3], const double mtx_3d[9], const double size[3],
PK_BODY_t& pkBody)
{
//注意pk单位是米NX单位是mm
//所以 传入pk大数据*0.001
//返回 pk的数据*1000.0
//特殊 向量矩阵这种数据是正常的不需要单位转换
int i = 0;
double x_vec[3] = { 0.0 }, y_vec[3] = { 0.0 }, mtx_3d1[9] = { 0.0 };
double size1[3] = { 0.0 }, x_vec1[3] = { 0.0 }, y_vec1[3] = { 0.0 };
double mm = 0.001, magnitude = 0.0;
PK_AXIS2_sf_s basis_set;
pkBody = PK_ENTITY_null;
UF_MTX3_x_vec(mtx_3d, x_vec);
UF_MTX3_y_vec(mtx_3d, y_vec);
UF_MTX3_initialize(x_vec, y_vec, mtx_3d1);
UF_MTX3_x_vec(mtx_3d1, x_vec1);
UF_MTX3_y_vec(mtx_3d1, y_vec1);
UF_MTX3_z_vec(mtx_3d1, basis_set.axis.coord);
UF_MTX3_x_vec(mtx_3d1, basis_set.ref_direction.coord);
basis_set.location.coord[0] = (point[0] + x_vec1[0] * size[0] * 0.5 + y_vec1[0] * size[1] * 0.5) * mm;
basis_set.location.coord[1] = (point[1] + x_vec1[1] * size[0] * 0.5 + y_vec1[1] * size[1] * 0.5) * mm;
basis_set.location.coord[2] = (point[2] + x_vec1[2] * size[0] * 0.5 + y_vec1[2] * size[1] * 0.5) * mm;
for (i = 0; i < 3; i++)
{
size1[i] = size[i] * mm;
}
PK_BODY_create_solid_block(size1[0], size1[1], size1[2], &basis_set, &pkBody);
if (PK_ENTITY_null == pkBody)
return false;
return true;
}
实现
UF_timer_t Timer;
UF_begin_timer(&Timer);
//例子:PK创建长方体
tag_t partition = NULL_TAG;
tag_t body_tag = NULL_TAG;
PK_BODY_t pk_body = PK_ENTITY_null;
UF_PS_create_partition(&partition);//为Parasolid创建一个隔层分区,并将其设置为当前分区 必须用
//如果你只是用于计算 不显示到ug 可以不创建分区
constexpr double point[3] = { 0.0 };
const double mtx_3d[9] = { 1,0,0,0,1,0,0,0,1 };
constexpr double size[3] = { 10,20,30 };
ag_create_block(point, mtx_3d, size, pk_body);
UF_PS_create_obj_from_ps_tag(pk_body, &body_tag);//pk对象创建到UG不会立即显示
UF_DISP_add_item_to_display(body_tag);//在UG里显示出来
//结束计时
UF_timer_values_t ValueTimer;
UF_end_timer(Timer, &ValueTimer);
//打印信息
char msg[256];
UF_UI_open_listing_window();
sprintf(msg, "该进程的总CPU时间(用户+系统):%f\n总运行时间:%f", ValueTimer.cpu_time, ValueTimer.real_time);
UF_UI_write_listing_window(msg);
评论区