点击查看详细介绍

选择圆柱面生成柱,不完美的地方请多赐教

BAO694893367 VIP会员 3月前 116 0

UG NX 二次开发 技术交流 qq群:641226372      UG二次开发(C、C#、WPF)


image.png




//下面是api源代码

//////////////////////////////////////////////////////////////////////////////

//

// f.cpp

//

// Description:

// Contains Unigraphics entry points for the application.

//

//////////////////////////////////////////////////////////////////////////////


// Include files

#include <uf.h>

#include <uf_exit.h>

#include <uf_ui.h>

#if ! defined ( __hp9000s800 ) && ! defined ( __sgi ) && ! defined ( __sun )

#include <strstream>

# include <iostream>

using std::ostrstream;

using std::endl;

using std::ends;

using std::cerr;

#else

#include <strstream.h>

# include <iostream.h>

#endif

#include <uf.h>

#include <uf_abort.h>

#include <uf_assem.h>

#include <uf_attr.h>

#include <uf_bound.h>

#include <uf_brep.h>

#include <uf_cam.h>

#include <uf_cfi.h>

#include <uf_cgm.h>

#include <uf_clear.h>

#include <uf_clone.h>

#include <uf_csys.h>

#include <uf_curve.h>

#include <uf_dbc_mld.h>

#include <uf_defs.h>

#include <uf_dieeng.h>

#include <uf_dirpath.h>

#include <uf_disp.h>

#include <uf_dpud.h>

#include <uf_draw.h>

#include <uf_drf.h>

#include <uf_drpos.h>

#include <uf_eplib_types.h>

#include <uf_eval.h>

#include <uf_exit.h>

#include <uf_facet.h>

#include <uf_fam.h>

#include <uf_fltr.h>

#include <uf_forgeo.h>

#include <uf_gdt.h>

#include <uf_gent.h>

#include <uf_gexp.h>

#include <uf_group.h>

#include <uf_help.h>

#include <uf_kf.h>

#include <uf_layer.h>

#include <uf_layout.h>

#include <uf_lib.h>

#include <uf_linked_exterior.h>

#include <uf_mb.h>

#include <uf_modl.h>

#include <uf_mom.h>

#include <uf_motion.h>

#include <uf_mtx.h>

#include <uf_ncgroup.h>

#include <uf_nx2d.h>

#include <uf_obj.h>

#include <uf_object_types.h>

#include <uf_oper.h>

#include <uf_param.h>

#include <uf_part.h>

#include <uf_path.h>

#include <uf_patt.h>

#include <uf_pd.h>

#include <uf_plist.h>

#include <uf_plot.h>

#include <uf_process_aid.h>

#include <uf_ps.h>

#include <uf_rlist.h>

#include <uf_route.h>

#include <uf_rule.h>

#include <uf_sc.h>

#include <uf_setup.h>

#include <uf_sf.h>

#include <uf_sim.h>

#include <uf_sket.h>

#include <uf_smd.h>

#include <uf_so.h>

//#include <uf_spsd.h>

#include <uf_std.h>

#include <uf_styler.h>

#include <uf_subdiv.h>

#include <uf_surf_reg.h>

#include <uf_tabnot.h>

#include <uf_text.h>

#include <uf_trns.h>

#include <uf_udobj.h>

#include <uf_udop.h>

#include <uf_ugfont.h>

#include <uf_ugmgr.h>

#include <uf_ui.h>

//#include <uf_ui_xt.h>

#include <uf_undo.h>

//#include <uf_unit.h>

#include <uf_vdac.h>

#include <uf_vec.h>

#include <uf_view.h>

#include <uf_wave.h>

#include <uf_web.h>

#include <uf_weight.h>

#include <uf_weld.h>

#include <uf_xs.h>

#include <uf_defs.h>

#include <stdio.h>

#include <uf.h>

#include <uf_ui.h>

#include <uf_attr.h>

#include <uf_cfi.h>

#include <uf_bound.h>

#include <uf_brep.h>

#include <uf_dpud.h>

#include <uf_drpos.h>

#include <uf_path.h>

#include <uf_modl.h>

#include <uf_modl_error.h>

#include <uf_part.h>

#include <uf_obj.h>

#include <uf_cam.h>

#include <uf_cam_errors.h>

#include <uf_cam_planes.h>

#include <uf_cam_prefs.h>

#include <uf_cam_prepro.h>

#include <uf_cam_spec.h>

#include <uf_camgeom.h>

#include <uf_camtext.h>

#include <uf_cutter.h>

#include <uf_fbm_geom.h>

#include <uf_hmop.h>

#include <uf_oper_spec.h>

#include <uf_oprbnd.h>

#include <uf_param_indices.h>

#include <uf_turn.h>

#include <uf_ude.h>

#include <uf_ui_ont.h>

#include <uf_ui_param.h>

#include <uf_setup.h>

#include <uf_ncgroup.h>

#include <uf_param.h>

#include <uf_param_indices.h > //有关操作参数

#include <uf_ui_ont.h>

#include <UF_CUTTER.h>

#include <UF_UI_PARAM.h>

#include <UF_OPER.h>

#include <UF_CAMGEOM.h>

#include <string.h>




//设置选择的实体类型

static int init_proc( UF_UI_selection_p_t select, void *user_data )

{

int errorCode = 0;


int num_triples = 1; //选择类型 数量

UF_UI_mask_t mask_triples[]={16,0,0,}; //定义选择类型

errorCode = UF_UI_set_sel_mask(select, UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,num_triples, mask_triples);

if( errorCode == 0)

{

return UF_UI_SEL_SUCCESS;

}

else

{

return UF_UI_SEL_FAILURE;

}

}






//----------------------------------------------------------------------------

// Activation Methods

//----------------------------------------------------------------------------


// Unigraphics Startup

// This entry point activates the application at Unigraphics startup

extern "C" DllExport void ufsta( char *param, int *returnCode, int rlen )

{

/* Initialize the API environment */

int errorCode = UF_initialize();


if ( 0 == errorCode )

{

/* TODO: Add your application code here */




// 输入参数数字

char cp1[80]="海宝提示!请输入参数。"; //【输入】提示标题

char cp2[14][16]; //【输入】参数标题


int ip3=4; //【输入】参数个数 --------★


int ia4[14]; //【输入及输出】参数值 整数

double ra5[14]; //【输入及输出】参数值 实数

//ia4 和 ra5 一起的 ia4是整数 ra5是实数


int ip6[14]; //【输入】ip6[n]=0 ,第n项输入是整数、ip6[n]=1 ,第n项输入是实数


strcpy(cp2[0],"单边延伸"); //字符串赋值

strcpy(cp2[1],"直径缩减");

strcpy(cp2[2],"放置图层");

strcpy(cp2[3],"对象颜色");


ia4[0]=0; //初始值 实数

ia4[1]=0; //初始值 实数

ia4[2]=250; //初始值 整数

ia4[3]=160; //初始值 整数


ip6[0]=0; //实数

ip6[1]=0; //实数

ip6[2]=0; //整数

ip6[3]=0; //整数

int resp =uc1608(cp1,cp2,ip3,ia4,ra5,ip6); // 输入参数


// 返回值resp; 1=后退、2=取消、3=ok没有用户输入、4=ok有用户输入、8=无效状态,不能打开对话框




char *message="海宝提示!请选择圆柱面";

char *title="海宝提示!请选择圆柱面";

int scope=UF_UI_SEL_SCOPE_WORK_PART;//选取范围

//UF_UI_SEL_SCOPE_NO_CHANGE //选取范围没有变化

//UF_UI_SEL_SCOPE_ANY_IN_ASSEMBLY //选取范围在组装

//UF_UI_SEL_SCOPE_WORK_PART //选取范围是工作部分

//UF_UI_SEL_SCOPE_WORK_PART_AND_OCC //选取范围是工作部分和OCC

int response;

int count=0;

tag_p_t object;

UF_UI_select_with_class_dialog(message,title,scope,init_proc,NULL,&response,&count,&object); //调用API


if (count>0)

{

for (int i=0;i<count;i++)//循环

{


UF_DISP_set_highlight(object[i],0); //1高亮显示 0不高亮显示

}

}



if (response==UF_UI_OK || response==UF_UI_OBJECT_SELECTED)

if (count>0)

{

for (int i=0;i<count;i++)//循环

{


double f_x[ 3 ];

double f_y[ 3 ];

double f_z[ 3 ];


// 分析面

int type=0; //判断面类型

int norm_dir=0; //面法向

double point[3]; //轴中心 点

double box[6]; //极点坐标

double radius[1]; //半径 圆锥=最小半径 + 最大半径 /2

double rad_data[1];

UF_MODL_ask_face_data (

object[i], //输入面

&type,point,f_z,box,radius,rad_data,&norm_dir);


UF_VEC3_ask_perpendicular(f_z,f_y);//返回一个三维向量垂直于输入向量


double matrix_values[9];//输出坐标矩阵


UF_MTX3_initialize(f_y,f_z,matrix_values);//输入x,y方向获得坐标矩阵

f_x[0]=matrix_values[6]; //转换

f_x[1]=matrix_values[7];

f_x[2]=matrix_values[8];

f_y[0]=matrix_values[0];

f_y[1]=matrix_values[1];

f_y[2]=matrix_values[2];

UF_MTX3_initialize(f_x,f_y,matrix_values);//输入x,y方向获得坐标矩阵

tag_t matrix_id,csys_id;

//创建3?3矩阵

UF_CSYS_create_matrix(matrix_values, &matrix_id);

//创建一个临时的坐标系统

UF_CSYS_create_temp_csys (point, matrix_id, &csys_id );

UF_CSYS_set_wcs (csys_id); //设置工作坐标



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

double directions[3][3];

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

//UF_MODL_ask_bounding_box_exact 公差 0.0602 (保险公差 0.061)

int err=UF_MODL_ask_bounding_box_exact(

object[i], //输入实体

csys_id, //输入坐标 【NULL_TAG=默认工作坐标】

min_corner, //输出 x,y,z 最小值【最小坐标】

directions, //输出 边界框的方向向量

distances); //输出 大小


//将绝对坐标转换成工作坐标- 测量用到

UF_CSYS_map_point(UF_CSYS_WORK_COORDS,min_corner,UF_CSYS_ROOT_WCS_COORDS,min_corner);

UF_FEATURE_SIGN sign=UF_NULLSIGN;

tag_t targ_tag=NULL_TAG;

double origin[ 3 ]={0,0,min_corner[2]+-ia4[0]};

UF_CSYS_map_point(UF_CSYS_ROOT_WCS_COORDS,origin,UF_CSYS_WORK_COORDS,origin);

double 高=distances[2]+ia4[0]*2;

double d=radius[0];

char gg1[132]="";

char gg2[132]="";

sprintf(gg1,"%.6f",高); //浮点转字符串 "%f" 改成 "%.2f" 浮点保留2位小数转字符串

sprintf(gg2, "%.6f",d*2+ia4[1]);

char * height=gg1;

char * diam=gg2;

tag_t cyl_tag=NULL_TAG;

//创建圆柱

UF_MODL_create_cylinder (

sign,

targ_tag,

origin,

height,

diam,

f_z,

&cyl_tag );



}

}

UF_free(object);//卸载实体对象内存



/* Terminate the API environment */

errorCode = UF_terminate();

}


/* Print out any error messages */

}


//----------------------------------------------------------------------------

// Utilities

//----------------------------------------------------------------------------


// Unload Handler

// This function specifies when to unload your application from Unigraphics.

// If your application registers a callback (from a MenuScript item or a

// User Defined Object for example), this function MUST return

// "UF_UNLOAD_UG_TERMINATE".

extern "C" int ufusr_ask_unload( void )

{

/* 设置UF程序运行以后立刻从内存中卸除,即当重新修改、编译成新的DLL文件时,UG无须关闭重启动,就可调用此新的*.DLL文件 */

return (UF_UNLOAD_IMMEDIATELY);


}





0

最新回复 (0)
请登录后发表新帖