购买与咨询 NX 二次开发视频教程,请联系微信号:13890821008 QQ号:85585969
//下面是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);
}