找回密码
 立即注册

QQ登录

只需一步,快速开始

微信扫码登录

搜索
查看: 45|回复: 0

[原创] NX2512二次开发一键透明小工具的代码编写-2

[复制链接]

2662

主题

1121

回帖

2万

积分

中将

积分
27678
发表于 1 小时前 | 显示全部楼层 |阅读模式
NX2512二次开发一键透明小工具的对话框制作流程-1
https://www.ugsnx.com/forum.php? ... 816&fromuid=2527201
(出处: UG爱好者)

接着上文写吧。

这边先稍微改动下对话框,NX软件里直接打开原来的dlx文件进行编辑就可以了。
8.jpg
把两个选择改成非必选的,就是可以不选为空的。
0.jpg
然后保存覆盖原来的文件即可

接下来开始写逻辑代码
上面对话框里组件的对象在我们生成c++代码的时候都已经写好了,在下图的位置。
1.jpg
integer0是透明度
face_select0是选择面
bodySelect0是选择体
button0是全部取消透明按钮

我们只需要在下面这个位置写逻辑,这里是在点击对话框的应用的时候执行的逻辑,点击确认的时候会自动调这个应用函数的,所以我们只需要写应用逻辑。
2.jpg
代码如下,我把注释都写上了,你们也可以复制给AI让AI解释的。
3.jpg

  1. //获取透明度数值输入框属性
  2. PropertyList* integerProps = integer0->GetProperties();
  3. //获取透明度的值
  4. int integer = integerProps->GetInteger("Value");
  5. //清理内存堆区数据,C/C++堆区数据要自己管理
  6. delete integerProps;
  7. //指针置空
  8. integerProps = NULL;

  9. //拿到选择面按钮的资产
  10. PropertyList* faceSelectProps = face_select0->GetProperties();
  11. //获取选择的面的集合
  12. std::vector<NXOpen::TaggedObject*> faces = faceSelectProps->GetTaggedObjectVector("SelectedObjects");
  13. //清理内存堆区数据
  14. delete faceSelectProps;
  15. //指针置空
  16. faceSelectProps = NULL;

  17. //拿到选择体按钮的资产
  18. PropertyList* bodySelectProps = bodySelect0->GetProperties();
  19. //获取选择的体的集合
  20. std::vector<NXOpen::TaggedObject*> bodys = bodySelectProps->GetTaggedObjectVector("SelectedObjects");
  21. //清理内存堆区数据
  22. delete bodySelectProps;
  23. //指针置空
  24. bodySelectProps = NULL;

  25. //遍历面集合,对每个面进行操作
  26. for (TaggedObject* face : faces)
  27. {
  28.     //拿到每个面的ID
  29.     tag_t tagid = face->Tag();
  30.     //将上面获取到的透明度数值设置给这个面对象
  31.     UF_OBJ_set_translucency(tagid, integer);
  32. }

  33. //遍历体集合,对每个体进行操作
  34. for (TaggedObject* body : bodys)
  35. {
  36.     //拿到每个体的ID
  37.     tag_t tagid = body->Tag();
  38.     //将上面获取到的透明度数值设置给这个体对象
  39.     UF_OBJ_set_translucency(tagid, integer);
  40. }
复制代码
这边的UF_OBJ_set_translucency还是需要引入<uf_obj.h>头文件,所以我们#include <uf_obj.h>引入下
9.jpg
接着是点击全部取消透明按钮时执行的逻辑,他是在int tran::update_cb(NXOpen::BlockStyler::UIBlock* block)函数里的下面这个else if(block == button0)位置
4.jpg
代码如下
5.jpg

  1. //拿到当前工作部件
  2. Part* workPart = theSession->Parts()->Work();
  3. //拿到当前工作部件的所有体的集合
  4. BodyCollection* bodies = workPart->Bodies();
  5. //遍历体集合
  6. for (Body* body : *bodies)
  7. {
  8.     //拿到每个体ID
  9.      tag_t tagid = body->Tag();
  10.      //将体的透明度设置为0
  11.      UF_OBJ_set_translucency(tagid, 0);
  12. }
复制代码

这边要再加入3个头文件
  1. #include <NXOpen/PartCollection.hxx>
  2. #include <NXOpen/BodyCollection.hxx>
  3. #include <NXOpen/Body.hxx>
复制代码

7.jpg
然后就能直接生成dll文件了。
6.jpg
把dll重命名替换到application目录下执行测试即可

1.gif
10.jpg
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

咨询QQ:1359218528|发帖须知!|Archiver|手机版|小黑屋|UG爱好者论坛 ( 京ICP备10217105号-2 )

GMT+8, 2026-3-26 17:21

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表