ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

NXOpen 求点到边的垂线并结合UF求起始点终点交点

2021-04-13 08:01:38  阅读:294  来源: 互联网

标签:SetRightHandSide Limits point associativeLineBuilder1 NXOpen msg line UF 求点


VS2010 NX8.5

 

//创建垂线
Features::AssociativeLine *nullFeatures_AssociativeLine(NULL);

Features::AssociativeLineBuilder *associativeLineBuilder1;
associativeLineBuilder1 = workPart->BaseFeatures()->CreateAssociativeLineBuilder(nullFeatures_AssociativeLine);
Plane *plane1;
plane1 = workPart->Planes()->CreatePlane(Facemidpoint, oneFaceVec1, SmartObject::UpdateOptionWithinModeling);
Unit *unit1;
unit1 = associativeLineBuilder1->Limits()->StartLimit()->Distance()->Units();
associativeLineBuilder1->Limits()->StartLimit()->Distance()->SetRightHandSide("0");
associativeLineBuilder1->SetStartPointOptions(Features::AssociativeLineBuilder::StartOptionPoint);
associativeLineBuilder1->StartAngle()->SetRightHandSide("0");
associativeLineBuilder1->EndAngle()->SetRightHandSide("270");
associativeLineBuilder1->Limits()->StartLimit()->SetLimitOption(GeometricUtilities::CurveExtendData::LimitOptionsAtPoint);
associativeLineBuilder1->Limits()->StartLimit()->Distance()->SetRightHandSide("0");
associativeLineBuilder1->Limits()->EndLimit()->SetLimitOption(GeometricUtilities::CurveExtendData::LimitOptionsAtPoint);
associativeLineBuilder1->Limits()->EndLimit()->Distance()->SetRightHandSide("0");
associativeLineBuilder1->SetStartPointOptions(Features::AssociativeLineBuilder::StartOptionInferred);
associativeLineBuilder1->Limits()->StartLimit()->Distance()->SetRightHandSide("0");
associativeLineBuilder1->Limits()->EndLimit()->Distance()->SetRightHandSide("0");
associativeLineBuilder1->SetStartPointOptions(Features::AssociativeLineBuilder::StartOptionPoint);
associativeLineBuilder1->Limits()->SetFullCircle(false);

Point *pointA = workPart->Points()->CreatePoint(Facemidpoint);//面中心点
Xform *nullXform(NULL);
Point *point2;
point2 = workPart->Points()->CreatePoint(pointA, nullXform, SmartObject::UpdateOptionWithinModeling);
associativeLineBuilder1->StartPoint()->SetValue(point2);
associativeLineBuilder1->SetEndPointOptions(Features::AssociativeLineBuilder::EndOptionAtAngle);
associativeLineBuilder1->Limits()->EndLimit()->SetLimitOption(GeometricUtilities::CurveExtendData::LimitOptionsValue);
associativeLineBuilder1->Limits()->SetFullCircle(false);
associativeLineBuilder1->Limits()->StartLimit()->Distance()->SetRightHandSide("0");
Edge *edge1 = dynamic_cast<Edge *>(selectEdgs[0]);//选择的边
associativeLineBuilder1->EndAtAngle()->SetValue(edge1);
associativeLineBuilder1->EndAtAngle()->SetValue(NULL);
associativeLineBuilder1->Limits()->SetFullCircle(false);
associativeLineBuilder1->Limits()->StartLimit()->Distance()->SetRightHandSide("0");
associativeLineBuilder1->EndAtAngle()->SetValue(edge1);
associativeLineBuilder1->Limits()->EndLimit()->Distance()->SetRightHandSide(doubleToNXString(distance1+1));//线的长度
associativeLineBuilder1->SetAssociative(true);

//NXObject *nXObject1;
//nXObject1 = associativeLineBuilder1->Commit();
Features::Feature *associativelin1;
associativelin1 = associativeLineBuilder1->CommitFeature();

associativeLineBuilder1->Destroy();

//sprintf_s(msg, "%d", associativelin1->Tag());
//theSession->ListingWindow()->WriteLine(msg);

Line *line1(dynamic_cast<Line *>(associativelin1->FindObject("CURVE 1")));//垂线转换
//求线的起点和终点
UF_CURVE_line_t line_coords;
UF_CURVE_ask_line_data(line1->Tag(), &line_coords );
sprintf_s(msg, "垂线起点 x:%.2f,y:%.2f,z:%.2f", line_coords.start_point[0],line_coords.start_point[1],line_coords.start_point[2]);
theSession->ListingWindow()->WriteLine(msg);
sprintf_s(msg, "垂线终点 x:%.2f,y:%.2f,z:%.2f", line_coords.end_point[0],line_coords.end_point[1],line_coords.end_point[2]);
theSession->ListingWindow()->WriteLine(msg);
//求交点
double ref_point [ 3 ];// = {Facemidpoint.X,Facemidpoint.Y,Facemidpoint.Z}
UF_CURVE_intersect_info_t out_info;
UF_CURVE_intersect(line1->Tag(), edge1->Tag(), ref_point, &out_info );

sprintf_s(msg, "是否有交点%d", out_info.type_of_intersection);
theSession->ListingWindow()->WriteLine(msg);
sprintf_s(msg, "交点 x:%.2f,y:%.2f,z:%.2f", out_info.curve_point[0],out_info.curve_point[1],out_info.curve_point[2]);
theSession->ListingWindow()->WriteLine(msg);

 

 

 

 

 

标签:SetRightHandSide,Limits,point,associativeLineBuilder1,NXOpen,msg,line,UF,求点
来源: https://www.cnblogs.com/hqsalanhuang/p/14651402.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有