NX2512二次开发一键透明小工具的代码编写,使用C++API修改透明度-3
NX2512二次开发一键透明小工具的代码编写-2https://www.ugsnx.com/forum.php? ... 183&fromuid=2527201
(出处: UG爱好者)
上一篇功能已经写完,用的是C的开放API UF_OBJ_set_translucency改的透明度
这边再补个用C++的displayModification显示修改器改透明度的方法。
具体过程就是创建一个displayModification修改器对象,设置修改器的透明度值,将所有要改的面放到一个vector动态数组里,然后把vector数组传给设置好透明度的displayModification修改器对象进行透明度修改。
还是写apply_cb()里的方法,在点击应用按钮时执行。
//获取透明度数值输入框属性
PropertyList* integerProps = integer0->GetProperties();
int integer = integerProps->GetInteger("Value");
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;
//创建一个显示修改器
DisplayModification* displayModification;
displayModification = theSession->DisplayManager()->NewDisplayModification();
//把透明数值设置进修改器
displayModification->SetNewTranslucency(integer);
//要修改的对象集合
std::vector<DisplayableObject*> objects;
//遍历选中的面对象
for (TaggedObject* face : faces)
{
//TaggedObject指针转型成Face
NXOpen::Face* selectedFace = dynamic_cast<NXOpen::Face*>(face);
//加到修改对象集合里
objects.push_back(selectedFace);
}
//遍历选中的体对象
for (TaggedObject* body : bodys)
{
//TaggedObject指针转型成Body
NXOpen::Body* selectedBody = dynamic_cast<NXOpen::Body*>(body);
//获取体上全部的面集合
std::vector< NXOpen::Face* > faces = selectedBody->GetFaces();
//遍历面
for (Face* face : faces)
{
//把面也加到修改对象集合里
objects.push_back(face);
}
}
//修改集合里的对象
displayModification->Apply(objects);
//删除堆区的数据
delete displayModification;这边在获取体对象后还要获取选择的体上的所有面对象,把面放入vector里。还有一个就是对话框里获取的面和体的对象是TaggedObject指针类型,我们把指针强转成Face指针后才放入vector数值里。最后NewDisplayModification()这个new出来在堆区的对象要记得删下。
全部取消透明也是一样的逻辑
//创建一个显示修改器
DisplayModification* displayModification;
displayModification = theSession->DisplayManager()->NewDisplayModification();
//设置透明度为0
displayModification->SetNewTranslucency(0);
//获取工作部件的所有体
Part* workPart = theSession->Parts()->Work();
BodyCollection* bodies = workPart->Bodies();
//要修改对象的集合
std::vector<DisplayableObject*> objects;
//遍历所有体
for (Body* body : *bodies)
{
//把体直接加修改对象的集合里
objects.push_back(body);
//获取体上的所有面
std::vector< NXOpen::Face* > faces = body->GetFaces();
//把面也加集合里
for (Face* face : faces)
{
objects.push_back(face);
}
}
//对集合对象执行透明度修改
displayModification->Apply(objects);
//删除堆区数据
delete displayModification;
用的函数、容器、对象类型等都在下面这几个头文件里,要加下
#include <NXOpen/PartCollection.hxx>
#include <NXOpen/BodyCollection.hxx>
#include <NXOpen/Body.hxx>
#include <NXOpen/Face.hxx>
#include <NXOpen/DisplayModification.hxx>
#include <NXOpen/DisplayManager.hxx>
生成dll文件后测试功能即可
附上源码、对话框和dll文件
厉害了大师 谢谢分享 感谢分享!收藏学习了。 赞一下希望能多分享一些例子 谢谢分享! 高人,俺得好好学学 感谢分享!收藏学习了。 太棒了,感谢分享 大神,你装NX2512是完整版的?带有API的?能给我安装包吗?网上找的都是阉割版,没办法二次开发
页:
[1]
2