购买与咨询 NX 二次开发视频教程,请联系微信号:13890821008 QQ号:85585969
1、帮助文档中UF_UI_specify_screen_position有个很全的案例可以参考
2、以下代码中主要函数:
UF_DISP_refresh(); //去除临时的对象
UF_DISP_display_temporary_arc //零时圆
UF_DISP_display_temporary_point //零时点
UF_DISP_display_temporary_text //零时文本
uc1608 //参数输入框
UF_UI_specify_screen_position //屏幕指定点
UF_CURVE_create_arc //创建圆
参考了唐工和梅雷的文献,希望共同学习进步
生命不息,学习不止!
以下为源代码:
#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_ui.h>
#include <uf_exit.h>
#include <UF_CSYS.h>
#include <UF_MTX.h>
#include <uf_view.h>
#include <UF_MODL.h>
#include <UF_OBJ.h>
#include <UF_LAYER.h>
#include <UF_VEC.h>
static void FeatureYDZEp(double origin1[3],char *D1,char *H,char *D,char *L, int ColorID,int LayerID);
double DoublePrecision0p5(double d);
#define UF_CALL(X) (report_error( __FILE__, __LINE__, #X, (X)))
static int report_error( char *file, int line, char *call, int irc)
{
if (irc)
{
char err[133],
msg[133];
sprintf(msg, "*** ERROR code %d at line %d in %s:\n+++ ",
irc, line, file);
UF_get_fail_message(irc, err);
UF_print_syslog(msg, FALSE);
UF_print_syslog(err, FALSE);
UF_print_syslog("\n", FALSE);
UF_print_syslog(call, FALSE);
UF_print_syslog(";\n", FALSE);
if (!UF_UI_open_listing_window())
{
UF_UI_write_listing_window(msg);
UF_UI_write_listing_window(err);
UF_UI_write_listing_window("\n");
UF_UI_write_listing_window(call);
UF_UI_write_listing_window(";\n");
}
}
return(irc);
}
//用户代码
tag_t wcs_tag = NULL_TAG,matrix_id = NULL_TAG,tempnoteTAG = NULL_TAG;
double matrix_values[9], arc_center1[3], currentpos[3];
char msg[256];
double ra5[14]; //【输入及输出】参数值 实数
static void motion_cb( double *screen_pos, UF_UI_motion_cb_data_p_t motion_cb_data, void *my_data )
{
uc1601("制作人:青蓝 QQ:1007471073",0);
UF_DISP_view_type_t which_views = UF_DISP_USE_WORK_VIEW;
//获得当前工作坐标
UF_CSYS_ask_wcs(&wcs_tag);
//获得坐标 相关的矩阵和原点
double csys_origin[3]={0,0,0};
UF_CSYS_ask_csys_info(wcs_tag,&matrix_id,csys_origin);
//获得 3x3矩阵数据
double arc_center[3];
UF_CSYS_ask_matrix_values(matrix_id,matrix_values); //通过TAG找到矩阵值
double screen_posWcs[3];
UF_CSYS_map_point(UF_CSYS_WORK_COORDS,screen_pos,UF_CSYS_ROOT_WCS_COORDS,screen_posWcs);
screen_posWcs [0] = DoublePrecision0p5(screen_posWcs [0]);
screen_posWcs [1] = DoublePrecision0p5(screen_posWcs [1]);
UF_CSYS_map_point(UF_CSYS_ROOT_WCS_COORDS,screen_posWcs,UF_CSYS_WORK_COORDS,screen_pos);
UF_MTX3_vec_multiply( screen_pos, matrix_values, arc_center); //叉乘
double start_angle = 0.0; //起始角度
double end_angle = 360.0 * DEGRA; //终止角度
UF_OBJ_disp_props_t attrib;
attrib.layer= 1; //图层
attrib.color= 186; //颜色
attrib.blank_status= UF_OBJ_NOT_BLANKED; //是否隐藏
attrib.line_width= UF_OBJ_WIDTH_NORMAL; //宽度
attrib.font=0; //系统字体,NX字体
attrib.highlight_status= FALSE; //是否高亮
UF_DISP_display_temporary_arc( //零时圆
NULL,
which_views,
matrix_values,
start_angle,
end_angle,
arc_center,
ra5[0]/2,
&attrib
);
UF_DISP_poly_marker_t marker_type = UF_DISP_4T_PROC_SPOT_WELD ;
UF_DISP_display_temporary_point ( NULL,which_views, screen_pos, &attrib, marker_type);//零时点
double wcs_x_vect[3],wcs_y_vect[3], affineoriginX[3], affineoriginY[3],textorigin[3],arc_center2[3];
UF_MTX3_x_vec( matrix_values, wcs_x_vect );
UF_MTX3_y_vec( matrix_values, wcs_y_vect );
UF_VEC3_affine_comb( screen_pos, ra5[0]/2, wcs_x_vect, affineoriginX );
UF_VEC3_affine_comb( affineoriginX, -ra5[0]/2, wcs_y_vect, affineoriginY );
double Wcsscreen_pos[3];
UF_CSYS_map_point(UF_CSYS_WORK_COORDS,screen_pos,UF_CSYS_ROOT_WCS_COORDS,Wcsscreen_pos);
//显示坐标到状态栏
Wcsscreen_pos [0] = DoublePrecision0p5(Wcsscreen_pos [0]);
Wcsscreen_pos [1] = DoublePrecision0p5(Wcsscreen_pos [1]);
sprintf( msg, "D = %.1f\nX = %.1f\nY = %.1f ", ra5[0],Wcsscreen_pos[0], Wcsscreen_pos[1]);
UF_DISP_text_ref_t ref_point = UF_DISP_TOPLEFT;
UF_DISP_display_temporary_text ( NULL,which_views, msg, affineoriginY,ref_point,&attrib,6,1); //零时文本
}

●●●请先
登陆 或
注册 后查看●●●
演示效果:
