• NX二次开发-直线分析函数UF_EVAL_ask_line与NXOpen::Line直线分析的用法


     1     NX11+VS2013
     2     
     3     #include <NXOpen/Line.hxx>
     4     #include <NXOpen/NXException.hxx>
     5     #include <NXOpen/PartCollection.hxx>
     6     #include <NXOpen/Session.hxx>
     7     #include <uf.h>
     8     #include <uf_curve.h>
     9     #include <uf_ui.h>
    10     #include <NXOpen/Edge.hxx>
    11     #include <NXOpen/NXObjectManager.hxx>
    12     #include <uf_eval.h>
    13 
    14     NXOpen::Session *theSession = NXOpen::Session::GetSession();
    15     NXOpen::Part *workPart(theSession->Parts()->Work());
    16     NXOpen::Part *displayPart(theSession->Parts()->Display());
    17 
    18     UF_initialize();
    19 
    20     //创建一条直线
    21     UF_CURVE_line_t Line_Coords;
    22     Line_Coords.start_point[0] = 10.0;
    23     Line_Coords.start_point[1] = 0.0;
    24     Line_Coords.start_point[2] = 0.0;
    25     Line_Coords.end_point[0] = 100.0;
    26     Line_Coords.end_point[1] = 0.0;
    27     Line_Coords.end_point[2] = 0.0;
    28     tag_t LineTag = NULL_TAG;
    29     UF_CURVE_create_line(&Line_Coords, &LineTag);
    30 
    31     //方法1:UFUN方法
    32     //获得一条直线两个端点坐标、直线长度、向量方向
    33 
    34     //函数1(UF_CURVE_ask_line_data)
    35     UF_CURVE_line_t AskLinePoint;
    36     UF_CURVE_ask_line_data(LineTag, &AskLinePoint);
    37     double UF1LinePoint1[3] = { AskLinePoint.start_point[0], AskLinePoint.start_point[1], AskLinePoint.start_point[2] };//获得直线起点坐标
    38     double UF1LinePoint2[3] = { AskLinePoint.end_point[0], AskLinePoint.end_point[1], AskLinePoint.end_point[2] };//获得直线终点坐标
    39 
    40     //函数2(UF_EVAL_ask_line)
    41     UF_EVAL_p_t evaluator;
    42     UF_EVAL_initialize(LineTag, &evaluator);
    43 
    44     UF_EVAL_line_t line;
    45     UF_EVAL_ask_line(evaluator, &line);
    46     double UFLineLength = line.length;//获得直线长度
    47     double UF2LinePoint1[3] = { line.start[0], line.start[1], line.start[2] };//获得直线起点坐标
    48     double UF2LinePoint2[3] = { line.end[0], line.end[1], line.end[2] };//获得直线终点坐标
    49     double UFLineVec[3] = { line.unit[0], line.unit[1], line.unit[2] };//获得直线向量方向
    50 
    51     char msg[256];
    52     sprintf_s(msg, "直线的长度为:%.3f
    直线的起点坐标X为:%.3f  直线的起点坐标Y为:%.3f  直线的起点坐标Z为:%.3f
    直线的终点坐标X为%.3f  直线的终点坐标Y为:%.3f 直线的终点坐标Z为:%.3f
    直线的向量方向为:%.0f,%.0f,%.0f",
    53         UFLineLength, UF2LinePoint1[0], UF2LinePoint1[1], UF2LinePoint1[2], UF2LinePoint2[0], UF2LinePoint2[1], UF2LinePoint2[2], UFLineVec[0], UFLineVec[1], UFLineVec[2]);
    54 
    55     lw->Open();
    56     lw->WriteLine(msg);
    57 
    58     UF_EVAL_free(evaluator);
    59 
    60     //方法2:NXOpen方法
    61     //获得一条直线两个端点坐标、直线长度
    62     std::vector<Line*> LineVector;
    63     LineVector.push_back(dynamic_cast<Line*>(NXObjectManager::Get(LineTag)));
    64 
    65     for (int i = 0; i < LineVector.size(); i++)
    66     {
    67         double NXLineLength = LineVector[i]->GetLength();//获得直线长度
    68         Point3d NXLinePoint1 = LineVector[i]->StartPoint();//获得直线起点坐标
    69         //char msg[200];
    70         //sprintf_s(msg, "%.3f,%.3f,%.3f", NXLinePoint1.X, NXLinePoint1.Y, NXLinePoint1.Z);
    71         //uc1601(msg, 1);
    72         Point3d NXLinePoint2 = LineVector[i]->EndPoint();//获得直线终点坐标
    73         //sprintf_s(msg, "%.3f,%.3f,%.3f", NXLinePoint2.X, NXLinePoint2.Y, NXLinePoint2.Z);
    74         //uc1601(msg, 1);
    75     }
    76     
    77     UF_terminate();

  • 相关阅读:
    Ruby能否成为第二个Java
    攻防实践:一次入侵兼反入侵的实例
    微型PHP木马的探讨
    破解Session cookie的方法
    ASP马免杀工具—ASP万能溶剂
    微型PHP木马的探讨
    Ubuntu 8.04公布带给我们的商机
    Root logins are not allowed 的标题操持
    若何安装vixta之一若何哄骗Nero将vixta刻录成ISO光盘
    如何安排vixta之三Installing来源劈脸安排
  • 原文地址:https://www.cnblogs.com/nxopen2018/p/10957196.html
Copyright © 2020-2023  润新知