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

 NX11+VS2013

     #include <uf.h>
#include <uf_ui.h>
#include <uf_modl.h>
#include <uf_mtx.h>
#include <uf_curve.h>
#include <NXOpen/CurveCollection.hxx>
#include <NXOpen/NXObject.hxx>
#include <NXOpen/Part.hxx>
#include <NXOpen/PartCollection.hxx>
#include <uf_obj.h>
#include <NXOpen/ListingWindow.hxx> NXOpen::Session *theSession = NXOpen::Session::GetSession();
NXOpen::Part *workPart(theSession->Parts()->Work());
NXOpen::Part *displayPart(theSession->Parts()->Display()); UF_initialize(); //创建点
double Point1[] = { -300.0, 50.0, 50.0 };
tag_t PointTag = NULL_TAG;
UF_CURVE_create_point(Point1, &PointTag); //创建块
UF_FEATURE_SIGN Sign = UF_NULLSIGN;
double Corner_pt[] = { 0.0, 0.0, 0.0 };
char *Edge_len[] = { "", "", ""};
tag_t BlkTag = NULL_TAG;
UF_MODL_create_block1(Sign, Corner_pt, Edge_len, &BlkTag); //特征找体
tag_t BodyTag = NULL_TAG;
UF_MODL_ask_feat_body(BlkTag, &BodyTag); //创建射线(从点出发,向X方向,发射到块上)
tag_t Bodies[] = { BodyTag };
double Direction[] = { 1.0, 0.0, 0.0 };
double TransForm[];
UF_MTX4_identity(TransForm);
int num_results;
UF_MODL_ray_hit_point_info_p_t hit_list;
UF_MODL_trace_a_ray(, Bodies, Point1, Direction, TransForm, , &num_results, &hit_list); //判断射线与块是否有交点
if ( num_results == )
{
uc1601("提示:找不到射线交点", );
} if ( num_results != )
{
//创建直线(连接发射点和射线与块的第一个交点)
NXOpen::Point3d StartPoint1{ Point1[], Point1[], Point1[] };
NXOpen::Point3d EndPoint1{ hit_list[].hit_point[], hit_list[].hit_point[], hit_list[].hit_point[] };
NXOpen::Line *Line1;
Line1 = workPart->Curves()->CreateLine(StartPoint1, EndPoint1); //赋予直线红色
UF_OBJ_set_color(Line1->Tag(), ); //创建直线(连接射线与块的第一个交点与第二个交点)
NXOpen::Point3d EndPoint2{ hit_list[].hit_point[], hit_list[].hit_point[], hit_list[].hit_point[] };
NXOpen::Line *Line2;
Line2 = workPart->Curves()->CreateLine(EndPoint1, EndPoint2); //赋予直线绿色
UF_OBJ_set_color(Line2->Tag(), ); //赋予第一个交点所在面为蓝色
tag_t FirstFaceTag = { hit_list[].hit_face };
UF_OBJ_set_color(FirstFaceTag, ); //赋予第二个交点所在面为紫色
tag_t SecondFaceTag = { hit_list[].hit_face };
UF_OBJ_set_color(SecondFaceTag, ); //打印坐标点和方向
char msg[];
sprintf_s(msg, "交点数量为:%d\n射线与块第一个交点坐标为:\nX坐标:%f\nY坐标:%f\nZ坐标:%f\n射线与块第二个交点坐标为:\nX坐标:%f\nY坐标:%f\nZ坐标:%f",
num_results,hit_list[].hit_point[], hit_list[].hit_point[], hit_list[].hit_point[], hit_list[].hit_point[], hit_list[].hit_point[], hit_list[].hit_point[]); lw->Open();
lw->WriteLine(msg);
} UF_terminate();

NX二次开发-UFUN发射线函数UF_MODL_trace_a_ray的用法的更多相关文章

  1. NX二次开发-UFUN拉伸函数UF_MODL_create_extruded

    NX9+VS2012 //NX二次开发中常用拉伸函数为UF_MODL_create_extruded2,但是此函数不能拉伸片体, //想要拉伸片体用函数UF_MODL_create_extruded. ...

  2. NX二次开发-UFUN拉伸函数UF_MODL_create_extruded2

    NX9+VS2012 //NX二次开发中常用拉伸函数为UF_MODL_create_extruded2,但是此函数不能拉伸片体, //想要拉伸片体用函数UF_MODL_create_extruded. ...

  3. NX二次开发-UFUN计时函数UF_begin_timer

    NX9+VS2012 #include <uf.h> #include <uf_modl.h> UF_initialize(); //计时开始 UF_timer_t Timer ...

  4. NX二次开发-UFUN计时函数UF_end_timer

    1 NX9+VS2012 2 3 #include <uf.h> 4 #include <uf_modl.h> 5 6 7 UF_initialize(); 8 9 //计时开 ...

  5. NX二次开发-UFUN遍历函数UF_OBJ_cycle_objs_in_part

    NX11+VS2013 #include <uf.h> #include <uf_obj.h> #include <uf_modl.h> #include < ...

  6. NX二次开发-UFUN遍历函数UF_OBJ_cycle_all

    NX11+VS2013 #include <uf.h> #include <uf_obj.h> #include <uf_modl.h> #include < ...

  7. NX二次开发-UFUN将工程图转成CGM和PDF文件UF_CGM_export_cgm

    文章转载自唐康林NX二次开发论坛,原文出处: http://www.nxopen.cn/thread-126-1-1.html 刚才有同学问到这个问题,如果是用NXOpen来做,直接录制一下就可以了: ...

  8. NX二次开发-UFUN获取NX系统默认导出CGM的选项设置UF_CGM_ask_default_export_options

    文章转载自唐康林NX二次开发论坛,原文出处: http://www.nxopen.cn/thread-126-1-1.html 刚才有同学问到这个问题,如果是用NXOpen来做,直接录制一下就可以了: ...

  9. NX二次开发-UFUN获取当前导出CGM选项设置UF_CGM_ask_session_export_options

    文章转载自唐康林NX二次开发论坛,原文出处: http://www.nxopen.cn/thread-126-1-1.html 刚才有同学问到这个问题,如果是用NXOpen来做,直接录制一下就可以了: ...

随机推荐

  1. windows10 注销 锁定

    锁定,暂时离开电脑时使用. 跑程序,下载内容(注意有时要修改一些软件的设置)继续进行. 锁定电脑,这时就不要关机. 注销快于重启. 一个账号 后台跑程序 https://zhidao.baidu.co ...

  2. macOS截屏

    Command+Shift+3: 全屏幕截屏,并自动保存在桌面 Command+Shift+4: 手动截屏,并自动保存在桌面 Command+Shift+4, + Space, 之后点击程序的窗口,实 ...

  3. bzoj 2084

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=2084 这道题很容易想到就是一个变种的最长回文字串, 不过回文的规则变成了s[i + p[i] ...

  4. PHP FILTER_SANITIZE_NUMBER_INT 过滤器

    定义和用法 FILTER_SANITIZE_NUMBER_INT 过滤器删除数字中所有非法的字符. 该过滤器允许所有数字以及 . + - Name: "number_int" ID ...

  5. PHP ftp_nlist() 函数

    「大理石平台维修」大理石平台维修完后需要怎么处理? 定义和用法 ftp_nlist() 函数返回 FTP 服务器上指定目录的文件列表. 如果成功,则返回指定目录下的文件名组成的数组.如果失败,则返回 ...

  6. cartographer和ROS的坐标系关系

    参考定义见:backpack_3d.lua    Local map frame是一次slam过程中的原点.但是现在cartographer支持Incremental mapping.global m ...

  7. CSS:CSS padding(填充)

    ylbtech-CSS:CSS padding(填充) 1.返回顶部 1. CSS padding(填充) CSS padding(填充)是一个简写属性,定义元素边框与元素内容之间的空间,即上下左右的 ...

  8. GDB结合Bochs调试内核

    1. 编译内核 编辑.config文件,相关项目改成如下形式: 1: CONFIG_KGDB=y 2: CONFIG_KGDB_SERIAL_CONSOLE=y 3: CONFIG_MAGIC_SYS ...

  9. Java目录事件

    当文件系统中的对象被修改时,我们可以监听watch服务以获取警报.java.nio.file包中的以下类和接口提供watch服务. Watchable接口 WatchService接口 WatchKe ...

  10. JDK8新特性之Optional

    Optional是什么 java.util.Optional Jdk8提供Optional,一个可以包含null值的容器对象,可以用来代替xx != null的判断. Optional常用方法 of ...