点击查看详细介绍

【代码分享】 动态圆源代码的分享

Chenyw VIP会员 6年前 10805 89

购买与咨询 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); //零时文本
}

●●●请先 登陆注册 后查看●●●


演示效果:

1.gif

2

最新回复 (89)
  • 不及无耐 VIP会员 6年前
    1

    感谢楼主分享,多谢楼主学习!楼主最棒!

  • Bateer VIP会员 6年前
    2

    感谢楼主分享,多谢楼主学习!楼主最棒!

  • zy1377145535 6年前
    3

    谢谢分享,学习了,感谢

  • chenjian1 VIP会员 6年前
    4

    感谢楼主分享有用哦

  • tanker510 6年前
    5

    感谢楼主分享有用哦

  • wujiang11198 6年前
    6

    感谢楼主 真是好啊!!!!

  • wujiang11198 6年前
    7

    为什么我运行是这样呢 有很多圆微信图片_20190808204523.png

  • one324230760 6年前
    8

    太感谢了太感谢了太感谢了

  • 王牌飞行员 VIP会员 6年前
    9

    感谢楼主分享,多谢楼主学习!楼主最棒!

  • 三年梦1994 6年前
    10

    谢谢分享,学习了,感谢

  • Hi_oTo 6年前
    11

    谢谢分享,学习了,感谢

  • 少许流风1213 6年前
    12

    感谢楼主分享有用哦

  • 机械人生 6年前
    13

    谢谢分享,相互学习

  • MRHao 6年前
    14

    感谢楼主 真是好啊!!!!

  • fthj0537 6年前
    15

    感谢楼主分享,修改后的效果很好!

请登录后发表新帖