• NX二次开发-UFUN发射线函数UF_MODL_trace_a_ray的用法


    今天是国庆节,放假休息懒得动,没有出去玩,在家研究一下发射线函数UF_MODL_trace_a_ray。小弟以前在软件公司混的时候,当时我做的那个项目就用到了UF_MODL_trace_a_ray,当时为了赶项目,从别处抄了代码,改吧改吧。自己也没有仔细的去研究一下这个函数的用法。UF_MODL_trace_a_ray在NX二次开发中算是一个用到比较高频的函数,今天研究了一下,写了一道例题,UFUN和NXOpen C++简单混合去用了一下,大致介绍下函数的用法。如有错误,还请各位前辈多多指教小弟!

     1 NX11+VS2013
     2     
     3     #include <uf.h>
     4     #include <uf_ui.h>
     5     #include <uf_modl.h>
     6     #include <uf_mtx.h>
     7     #include <uf_curve.h>
     8     #include <NXOpen/CurveCollection.hxx>
     9     #include <NXOpen/NXObject.hxx>
    10     #include <NXOpen/Part.hxx>
    11     #include <NXOpen/PartCollection.hxx>
    12     #include <uf_obj.h>
    13     #include <NXOpen/ListingWindow.hxx>
    14     
    15     NXOpen::Session *theSession = NXOpen::Session::GetSession();
    16     NXOpen::Part *workPart(theSession->Parts()->Work());
    17     NXOpen::Part *displayPart(theSession->Parts()->Display());
    18 
    19     UF_initialize();
    20 
    21     //创建点
    22     double Point1[3] = { -300.0, 50.0, 50.0 };
    23     tag_t PointTag = NULL_TAG;
    24     UF_CURVE_create_point(Point1, &PointTag);
    25 
    26     //创建块
    27     UF_FEATURE_SIGN Sign = UF_NULLSIGN;
    28     double Corner_pt[3] = { 0.0, 0.0, 0.0 };
    29     char *Edge_len[3] = { "100", "100", "100"};
    30     tag_t BlkTag = NULL_TAG;
    31     UF_MODL_create_block1(Sign, Corner_pt, Edge_len, &BlkTag);
    32 
    33     //特征找体
    34     tag_t BodyTag = NULL_TAG;
    35     UF_MODL_ask_feat_body(BlkTag, &BodyTag);
    36 
    37     //创建射线(从点出发,向X方向,发射到块上)
    38     tag_t Bodies[1] = { BodyTag };
    39     double Direction[3] = { 1.0, 0.0, 0.0 };
    40     double TransForm[16];
    41     UF_MTX4_identity(TransForm);
    42     int num_results;
    43     UF_MODL_ray_hit_point_info_p_t  hit_list;
    44     UF_MODL_trace_a_ray(1, Bodies, Point1, Direction, TransForm, 0, &num_results, &hit_list);
    45 
    46     //判断射线与块是否有交点
    47     if ( num_results == 0 )
    48     {
    49         uc1601("提示:找不到射线交点", 1);
    50     }
    51 
    52     if ( num_results != 0 )
    53     {
    54         //创建直线(连接发射点和射线与块的第一个交点)
    55         NXOpen::Point3d StartPoint1{ Point1[0], Point1[1], Point1[2] };
    56         NXOpen::Point3d EndPoint1{ hit_list[0].hit_point[0], hit_list[0].hit_point[1], hit_list[0].hit_point[2] };
    57         NXOpen::Line *Line1;
    58         Line1 = workPart->Curves()->CreateLine(StartPoint1, EndPoint1);
    59         
    60         //赋予直线红色
    61         UF_OBJ_set_color(Line1->Tag(), 186);
    62 
    63         //创建直线(连接射线与块的第一个交点与第二个交点)
    64         NXOpen::Point3d EndPoint2{ hit_list[1].hit_point[0], hit_list[1].hit_point[1], hit_list[1].hit_point[2] };
    65         NXOpen::Line *Line2;
    66         Line2 = workPart->Curves()->CreateLine(EndPoint1, EndPoint2);
    67 
    68         //赋予直线绿色
    69         UF_OBJ_set_color(Line2->Tag(), 108);
    70 
    71         //赋予第一个交点所在面为蓝色
    72         tag_t FirstFaceTag = { hit_list[0].hit_face };
    73         UF_OBJ_set_color(FirstFaceTag, 211);
    74 
    75         //赋予第二个交点所在面为紫色
    76         tag_t SecondFaceTag = { hit_list[1].hit_face };
    77         UF_OBJ_set_color(SecondFaceTag, 164);
    78 
    79         //打印坐标点和方向
    80         char msg[256];
    81         sprintf_s(msg, "交点数量为:%d
    射线与块第一个交点坐标为:
    X坐标:%f
    Y坐标:%f
    Z坐标:%f
    射线与块第二个交点坐标为:
    X坐标:%f
    Y坐标:%f
    Z坐标:%f",                        
    82             num_results,hit_list[0].hit_point[0], hit_list[0].hit_point[1], hit_list[0].hit_point[2], hit_list[1].hit_point[0], hit_list[1].hit_point[1], hit_list[1].hit_point[2]);
    83             
    84         lw->Open();
    85         lw->WriteLine(msg);
    86     }
    87 
    88     UF_terminate();

  • 相关阅读:
    多条件查询测试用例设计方法(1)—Pairwise(转)
    单例饿汉式和饱汉式各自的有缺点(转)
    Intellij IDEA生成JavaDoc(转)
    Linux常用命令分类
    Linux 常用命令
    数据库简单测试
    postman参数为Json数据结构
    WEB测试常见BUG
    APP应用测试技巧
    APP软件半成品测试技巧
  • 原文地址:https://www.cnblogs.com/nxopen2018/p/10975777.html
Copyright © 2020-2023  润新知