有情感的NPC 发表于 2026-3-26 15:29:29

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

NX2512二次开发一键透明小工具的对话框制作流程-1
https://www.ugsnx.com/forum.php? ... 816&fromuid=2527201
(出处: UG爱好者)

接着上文写吧。

这边先稍微改动下对话框,NX软件里直接打开原来的dlx文件进行编辑就可以了。

把两个选择改成非必选的,就是可以不选为空的。

然后保存覆盖原来的文件即可

接下来开始写逻辑代码
上面对话框里组件的对象在我们生成c++代码的时候都已经写好了,在下图的位置。

integer0是透明度
face_select0是选择面
bodySelect0是选择体
button0是全部取消透明按钮

我们只需要在下面这个位置写逻辑,这里是在点击对话框的应用的时候执行的逻辑,点击确认的时候会自动调这个应用函数的,所以我们只需要写应用逻辑。

代码如下,我把注释都写上了,你们也可以复制给AI让AI解释的。


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

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

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

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

//遍历体集合,对每个体进行操作
for (TaggedObject* body : bodys)
{
    //拿到每个体的ID
    tag_t tagid = body->Tag();
    //将上面获取到的透明度数值设置给这个体对象
    UF_OBJ_set_translucency(tagid, integer);
}这边的UF_OBJ_set_translucency还是需要引入<uf_obj.h>头文件,所以我们#include <uf_obj.h>引入下

接着是点击全部取消透明按钮时执行的逻辑,他是在int tran::update_cb(NXOpen::BlockStyler::UIBlock* block)函数里的下面这个else if(block == button0)位置

代码如下


//拿到当前工作部件
Part* workPart = theSession->Parts()->Work();
//拿到当前工作部件的所有体的集合
BodyCollection* bodies = workPart->Bodies();
//遍历体集合
for (Body* body : *bodies)
{
    //拿到每个体ID
   tag_t tagid = body->Tag();
   //将体的透明度设置为0
   UF_OBJ_set_translucency(tagid, 0);
}
这边要再加入3个头文件
#include <NXOpen/PartCollection.hxx>
#include <NXOpen/BodyCollection.hxx>
#include <NXOpen/Body.hxx>

然后就能直接生成dll文件了。

把dll重命名替换到application目录下执行测试即可


远远的 发表于 2026-3-26 18:37:17

牛B厉害了我的哥

chenyaohua 发表于 2026-3-26 21:13:29

分享多一些

hegaoj3 发表于 2026-4-13 09:04:56

谢谢分享
页: [1]
查看完整版本: NX2512二次开发一键透明小工具的代码编写-2