当前位置: 首页 > 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.jsqmd.com/news/944188/

相关文章:

  • 铁死亡研究要检测哪些指标?
  • 如何快速搭建免费开源电子签名平台:OpenSign完整部署指南
  • 闲鱼自动发布工具,python基础框架软件,自动擦亮批量发布
  • AI英语口语助手APP的开发
  • 保姆级教程:在Linux服务器上从零部署CARD耐药基因分析工具RGI(含数据库配置避坑指南)
  • 别再只用默认配色了!Seaborn热力图调色板保姆级指南(附代码对比图)
  • 告别平台限制:WorkshopDL让非Steam玩家也能畅玩创意工坊模组
  • Nginx 网关别只会反代:Docker 部署 Nginx Proxy Manager,给家庭服务加一层安全边界
  • 流动的奢享:长春 沈阳万象城美陈设计叙事 肆墨设计
  • 低功耗蓝牙广播
  • AI工具如何撬动用户LTV?揭秘智能积分系统的3层数据闭环设计
  • 3个颠覆性理由:为什么APK安装器是Windows用户的必备工具
  • [Java学习日记10】聊聊checked exception和runtime exception
  • 国内评价高的斜管沉淀池厂选哪家,水处理一体化设备/一体化废水的处理装置/污水处理厂设备,斜管沉淀池生产厂家选哪家 - 品牌推荐师
  • 无水印视频下载神器哪个好? 无水印视频下载工具软件推荐,无水印视频下载神器盘点 - 工具软件使用方法推荐
  • 大模型行业风向突变:从涨价潮到降价战,小米、DeepSeek谁能笑到最后?
  • 星月工具箱:轻量集成,多功能离线应用,为电脑日常维护打造的高效助手
  • css手写奥运五环
  • PVE-VDIClient:企业级虚拟桌面基础设施的终极开源解决方案
  • 2026 工程塑料实力厂家推荐:改性尼龙、PEEK、LCP 选材必看 TOP4 优选靠谱工厂清单 - 变量人生001
  • 基于Seeeduino XIAO与Grove模块的环境监测系统开发实践
  • B站视频转文字:从技术实现到学习效率的革命性提升
  • Joy-Con Toolkit高级配置与性能优化技术方案
  • 26NOI内训day6 西安高新一中
  • 网络连接遇阻,揭秘这款游戏的玩法与获胜条件!
  • 18 小凌派 rk2206 鸿蒙 liteos 如何通过修改配置文件,编译不通的案例
  • 2026年嘉德实创冷库服务商推荐榜单:医药GSP冷库、食品速冻冷库、冷链物流系统与温湿度监测工程实力品牌解析 - 品牌企业推荐师(官方)
  • 基于IMU传感器与Python的单摆周期精确测量:从硬件搭建到STFT分析
  • 游戏闪退?可能是Vulkan的锅!手把手教你排查Windows双显卡(独显+核显)的Vulkan支持与切换问题
  • 5分钟掌握Pulover‘s Macro Creator:Windows自动化神器的终极指南