当前位置: 首页 > news >正文

NX/UG二次开发:NX的方式替换面

//获取面的法向
void GetPosNormalOfMidUv(tag_t tFace,double pos[3],double normal[3])
{
double u1[ 3 ];
double v1[ 3 ];
double u2[ 3 ];
double v2[ 3 ];
double radii[ 2 ];
double uv[ 4 ];

UF_CALL(UF_MODL_ask_face_uv_minmax (tFace,uv));
double param[ 2 ]={(uv[0]+uv[1])*0.5, (uv[2]+uv[3])*0.5};
UF_CALL(UF_MODL_ask_face_props (tFace,param,pos,u1,v1,u2,v2,normal,radii));
}


//替换面
bool ReplaceFace(tag_t NeedReplaceFace,tag_t ToolFace,bool ReverseDir)
{
double TargetFaceDir[3] = { 0 };
double TargetFacePt[3] = { 0 };
GetPosNormalOfMidUv(NeedReplaceFace,TargetFacePt,TargetFaceDir);

double ToolFaceDir[3] = { 0 };
double ToolFacePt[3] = { 0 };
GetPosNormalOfMidUv(ToolFace,ToolFacePt,ToolFaceDir);

double dot = NULL;
double ReplaceDir[3] = { 0 };
UF_VEC3_sub(ToolFacePt,TargetFacePt,ReplaceDir);
UF_VEC3_dot(ReplaceDir,TargetFaceDir,&dot);
if (dot < 0)
{
ReverseDir = true;
}

Session *theSession = Session::GetSession();
Part *workPart(theSession->Parts()->Work());
Part *displayPart(theSession->Parts()->Display());
UF_UNDO_mark_id_t mark_id;
UF_UNDO_set_mark(UF_UNDO_visible, NULL, &mark_id);
Features::ReplaceFaceBuilder *replaceFaceBuilder1;
Features::Feature *nullFeatures_Feature(NULL);
try
{
replaceFaceBuilder1 = workPart->Features()->CreateReplaceFaceBuilder(nullFeatures_Feature);

replaceFaceBuilder1->OffsetDistance()->SetRightHandSide("0");

std::vector<Face *> faces1(1);
Face *face1(dynamic_cast<Face *>(NXObjectManager::Get(NeedReplaceFace)));
faces1[0] = face1;
FaceDumbRule *faceDumbRule1;
faceDumbRule1 = workPart->ScRuleFactory()->CreateRuleFaceDumb(faces1);

std::vector<SelectionIntentRule *> rules1(1);
rules1[0] = faceDumbRule1;
replaceFaceBuilder1->FaceToReplace()->ReplaceRules(rules1, false);

std::vector<Face *> faces2(1);
Face *face2(dynamic_cast<Face *>(NXObjectManager::Get(ToolFace)));
faces2[0] = face2;
FaceDumbRule *faceDumbRule2;
faceDumbRule2 = workPart->ScRuleFactory()->CreateRuleFaceDumb(faces2);

std::vector<SelectionIntentRule *> rules2(1);
rules2[0] = faceDumbRule2;
replaceFaceBuilder1->ReplacementFaces()->ReplaceRules(rules2, false);

replaceFaceBuilder1->SetReverseDirection(ReverseDir);

NXOpen::Features::Feature * CommitFeature;
CommitFeature = replaceFaceBuilder1->CommitFeature();

NXOpen::Features::BodyFeature * BodyFeature1 = dynamic_cast<NXOpen::Features::BodyFeature *>(CommitFeature);
vector<NXOpen::Body *> vBodies;
vBodies = BodyFeature1->GetBodies();
vector<tag_t>vUfBodys;
for(int i=0;i<vBodies.size();i++)
{
vUfBodys.push_back(vBodies[i]->Tag());
}
replaceFaceBuilder1->Destroy();
return true;
}
catch (const std::exception&ex)
{
uc1601((char *)ex.what(),0);
UF_UNDO_undo_to_mark (mark_id,NULL);
return false;
}
}

http://www.zskr.cn/news/1455652.html

相关文章:

  • 铁死亡研究要检测哪些指标?
  • 告别平台限制:WorkshopDL让非Steam玩家也能畅玩创意工坊模组
  • 别再只用默认配色了!Seaborn热力图调色板保姆级指南(附代码对比图)
  • PaddleOCR-VL-1.6核心技术解密:区域优化与渐进式训练原理剖析
  • [Java学习日记10】聊聊checked exception和runtime exception
  • 无水印视频下载神器哪个好? 无水印视频下载工具软件推荐,无水印视频下载神器盘点 - 工具软件使用方法推荐
  • css手写奥运五环
  • 基于Seeeduino XIAO与Grove模块的环境监测系统开发实践
  • Joy-Con Toolkit高级配置与性能优化技术方案
  • 2026年嘉德实创冷库服务商推荐榜单:医药GSP冷库、食品速冻冷库、冷链物流系统与温湿度监测工程实力品牌解析 - 品牌企业推荐师(官方)
  • 26NOI内训day6 西安高新一中
  • 基于IMU传感器与Python的单摆周期精确测量:从硬件搭建到STFT分析
  • 异步音乐生成API架构深度解析与实战集成指南
  • AI工具如何接管企业搜索?揭秘2024头部公司已验证的7步整合路径
  • 从电磁感应到无线充电:DIY线圈点亮LED实验全解析
  • OpenAI万亿IPO前夜豪赌AI基建,谷歌、英伟达等巨头跟风,普通人要为此买单?
  • 宇树科技冲刺“具身智能第一股”,机器人产业将如何重塑半导体产业链?
  • 破局期刊撰稿投稿难题:依托 Paperxie 期刊论文专属创作模块,高效打通从选题到成文全链路
  • Java反射的意义
  • 2026 年中国算力市场分化,芜湖如何破局轻资产运营、国产算力替代与产业生态培育?
  • ES|QL助力LLM工作负载调试:解决延迟、成本与GPU饱和问题
  • 向量空间JBoltAI:包装合规审核的AI解法
  • 终极免费方案:3步解锁Wand专业版完整功能,开启游戏修改新纪元
  • XZ1813,120VIN,外置MOS,异步降压芯片
  • 2026库尔勒汽车维修哪家靠谱?本地15年老店多维度实测横向测评 - GrowthUME
  • # [特殊字符] Linux 学习笔记(一):环境搭建与 C 语言开发初体验
  • SteamBot架构设计深入解析:5大核心模块实现自动化交易最佳实践
  • 2026年信创协同系统哪家的靠谱?一文搞懂你该怎么选
  • 探讨在不同物理显示媒介上优化响应式栅格系统设计规范色彩空间与视觉对比度的规范体系
  • 推理篇第12节:TensorRT-LLM(二)——KV Cache与PageAttention优化