zoukankan      html  css  js  c++  java
  • 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();

  • 相关阅读:
    WSP部署错误—SharePoint管理框架中的对象“SPSolutionLanguagePack Name=0”依赖其他不存在的对象
    Elevate Permissions To Modify User Profile
    Error with Stsadm CommandObject reference not set to an instance of an object
    ASP.NET MVC3添加Controller时没有Scaffolding options
    测试使用Windows Live Writer写日志
    配置TFS 2010出现错误—SQL Server 登录的安全标识符(SID)与某个指定的域或工作组帐户冲突
    使用ADO.NET DbContext Generator出现错误—Unable to locate file
    CSS
    HTML DIV标签
    数据库
  • 原文地址:https://www.cnblogs.com/nxopen2018/p/10975777.html
Copyright © 2011-2022 走看看