文章目录
- 1、前言
- 2、在UG NX中修改Body的颜色操作
- 3、采用NXOpen(C++)实现
- 3.1 创建修改对象颜色的方法
- 3.2 在do_it()中添加调用的代码
- 3.3 测试效果
1、前言
在UG NX中,改变NXObject和Feature的操作是不相同的,所以其二次开发的代码也不一样,我们上篇文章介绍一下修改特征的颜色,在这篇文章中介绍一下修改NXObject对象的颜色。
2、在UG NX中修改Body的颜色操作
我们仍然以长方体为例,如下图所示:
在过滤器中设置为:“实体”,默认情况下是选择的特征;
鼠标在视图区左键选择实体,然后点击右键:
选择“编辑显示”,弹出编辑显示的对话框
在颜色中点击颜色框,弹出颜色对话框;
在对象颜色对话框中,选择需要更改的颜色,点击“确定”
再点击“确定”,修改实体的颜色如下:
3、采用NXOpen(C++)实现
3.1 创建修改对象颜色的方法
void UFModel::ModifyNXObjectColor(NXOpen::NXObject* nXObject, int color)
{
NXOpen::Session::UndoMarkId markId4;
markId4 = theSession->SetUndoMark(NXOpen::Session::MarkVisibilityVisible, "Edit Object Display");
NXOpen::DisplayModification* displayModification1;
displayModification1 = theSession->DisplayManager()->NewDisplayModification();
displayModification1->SetApplyToAllFaces(true);
displayModification1->SetApplyToOwningParts(false);
displayModification1->SetNewColor(color);
std::vector<NXOpen::DisplayableObject*> objects1(1);
objects1[0] = dynamic_cast<NXOpen::DisplayableObject*> (nXObject);
displayModification1->Apply(objects1);
int nErrs1;
nErrs1 = theSession->UpdateManager()->DoUpdate(markId4);
delete displayModification1;
}
3.2 在do_it()中添加调用的代码
void UFModel::do_it()
{
//TaggedObject* masked_obj = select_by_mask();
//TaggedObject* typed_obj = select_by_type();
std::vector< NXOpen::TaggedObject* > any_objs = select_any_objects();
/*Point3d point3D;
point3D.X = 0;
point3D.Y = 0;
point3D.Z = 0;
char *length[] = {"100","100","100"};
Body *body = nullptr;
CreateBlock(&point3D,length,body); */
//Point3d point3D1;
//point3D1.X = 200;
//point3D1.Y = 200;
//point3D1.Z = 200;
//char* length1[] = { "100","100","100" };
//NXOpen::Body *body1 = nullptr;
//CreateBlock1(point3D1, length1, body1);
//std::vector<NXOpen::Body*>bodies;
//bodies.push_back(body);
//bodies.push_back(body1);
//lw->Open();
//lw->WriteLine("1111\n");
//lw->WriteLine(body->JournalIdentifier().GetLocaleText());
NXObject* nXObject = dynamic_cast<NXOpen::NXObject*>(any_objs[0]);
Body* body(dynamic_cast<NXOpen::Body*>(workPart->Bodies()->FindObject(nXObject->JournalIdentifier())));
NXOpen::Features::Feature* feature = body->GetFeatures()[0];
//NXOpen::NXColor* color(workPart->Colors()->Find("Medium Orange"));
//ModifyFeatureColor(feature,color);
ModifyNXObjectColor(body, 108);
}
3.3 测试效果
原始模型为:
调用dll
选择实体对象
修改颜色如下: