一、NXOpen的对象,如何转化成UFU对象
一般新手只会抄袭代码,并不知道代码具体含义,现在将自己在开发中的问题进行说明,网上大都以块为例子,现在以圆柱和球体进行说明。
通过一个示例进行演示:
1、利用NXOpen的函数创建一个块(NXOpenC++)
2、将整个块进行染色(利用UFUN的方法)
以上会涉及到将ufun对象转化成NX对象
通过录制代码与块不同的是将以下代码注释
//圆柱
//NXOpen::NXObject *nXObject1;
//nXObject1 = cylinderBuilder1->Commit();
//球体
//NXOpen::NXObject *nXObject1;
//nXObject1 = sphereBuilder1->Commit();
在录制的代码后边加上
//圆柱
NXOpen::Features::Feature *feature1;
feature1 = cylinderBuilder1->CommitFeature();
tag_t object_tag = NULL_TAG;
UF_MODL_ask_feat_body(feature1->Tag(), &object_tag);
UF_OBJ_set_color(object_tag, 186);
//球体
NXOpen::Features::Feature *feature1;
feature1 = sphereBuilder1->CommitFeature();
tag_t object_tag = NULL_TAG;
UF_MODL_ask_feat_body(feature1->Tag(), &object_tag);
UF_OBJ_set_color(object_tag, 186);
全部代码如下:
//用户定义
#include <NXOpen/Features_BlockFeatureBuilder.hxx>
#include <NXOpen/Features_Feature.hxx>
#include <NXOpen/Features_FeatureBuilder.hxx>
#include <NXOpen/Features_FeatureCollection.hxx>
#include <NXOpen/NXObjectManager.hxx>
#include <uf_modl.h>
#include <uf_obj.h>
#include <NXOpen/Unit.hxx>
#include <NXOpen/UnitCollection.hxx>
#include <NXOpen/ExpressionCollection.hxx>
#include <NXOpen/PointCollection.hxx>
#include <NXOpen/Features_CylinderBuilder.hxx>
#include <NXOpen/Features_SphereBuilder.hxx>
UF_initialize();
NXOpen创建块,UFUN设置颜色
//NXOpen::Features::Feature *nullNXOpen_Features_Feature(NULL);
//NXOpen::Features::BlockFeatureBuilder *blockFeatureBuilder1;
//blockFeatureBuilder1 = workPart->Features()->CreateBlockFeatureBuilder(nullNXOpen_Features_Feature);
//blockFeatureBuilder1->BooleanOption()->SetType(NXOpen::GeometricUtilities::BooleanOperation::BooleanTypeCreate);
//std::vector<NXOpen::Body *> targetBodies1(1);
//NXOpen::Body *nullNXOpen_Body(NULL);
//targetBodies1[0] = nullNXOpen_Body;
//blockFeatureBuilder1->BooleanOption()->SetTargetBodies(targetBodies1);
//blockFeatureBuilder1->BooleanOption()->SetType(NXOpen::GeometricUtilities::BooleanOperation::BooleanTypeCreate);
//std::vector<NXOpen::Body *> targetBodies2(1);
//targetBodies2[0] = nullNXOpen_Body;
//blockFeatureBuilder1->BooleanOption()->SetTargetBodies(targetBodies2);
//
//NXOpen::Point3d coordinates1(0.0, 0.0, 0.0);
//NXOpen::Point *point1;
//point1 = workPart->Points()->CreatePoint(coordinates1);
//NXOpen::Unit *unit1(dynamic_cast<NXOpen::Unit *>(workPart->UnitCollection()->FindObject("MilliMeter")));
//NXOpen::Expression *expression1;
//expression1 = workPart->Expressions()->CreateSystemExpressionWithUnits("0", unit1);
//blockFeatureBuilder1->SetType(NXOpen::Features::BlockFeatureBuilder::TypesOriginAndEdgeLengths);
//NXOpen::Point *point2;
//point2 = blockFeatureBuilder1->OriginPoint();
//blockFeatureBuilder1->SetOriginPoint(point1);
//NXOpen::Point3d originPoint1(0.0, 0.0, 0.0);
//blockFeatureBuilder1->SetOriginAndLengths(originPoint1, "50", "50", "50");
//blockFeatureBuilder1->SetBooleanOperationAndTarget(NXOpen::Features::Feature::BooleanTypeCreate, nullNXOpen_Body);
//NXOpen::Features::Feature *feature1;
//feature1 = blockFeatureBuilder1->CommitFeature();
利用ufun对openc++生成的块进行染色
NXOpen 里的对象转换成 ufun 里的Tag | 只需要 ->Tag()
//tag_t object_tag = NULL_TAG;
//UF_MODL_ask_feat_body(feature1->Tag(), &object_tag);
//UF_OBJ_set_color(object_tag, 186);
//blockFeatureBuilder1->Destroy();
//workPart->Expressions()->Delete(expression1);
利用OPENC++创建圆柱体,利用UFUN染色
NXOpen::Features::Feature *nullNXOpen_Features_Feature(NULL);
NXOpen::Features::CylinderBuilder *cylinderBuilder1;
cylinderBuilder1 = workPart->Features()->CreateCylinderBuilder(nullNXOpen_Features_Feature);
cylinderBuilder1->BooleanOption()->SetType(NXOpen::GeometricUtilities::BooleanOperation::BooleanTypeCreate);
std::vector<NXOpen::Body *> targetBodies1(1);
NXOpen::Body *nullNXOpen_Body(NULL);
targetBodies1[0] = nullNXOpen_Body;
cylinderBuilder1->BooleanOption()->SetTargetBodies(targetBodies1);
cylinderBuilder1->Diameter()->SetRightHandSide("50");
cylinderBuilder1->Height()->SetRightHandSide("100");
NXOpen::Unit *unit1;//单位
unit1 = cylinderBuilder1->Height()->Units();
NXOpen::Expression *expression1;
expression1 = workPart->Expressions()->CreateSystemExpressionWithUnits("0", unit1);
//NXOpen::NXObject *nXObject1;
//nXObject1 = cylinderBuilder1->Commit();
NXOpen::Expression *expression2(cylinderBuilder1->Height());
NXOpen::Expression *expression3(cylinderBuilder1->Diameter());
NXOpen 里的对象转换成 ufun 里的Tag | 只需要 ->Tag()
NXOpen::Features::Feature *feature1;
feature1 = cylinderBuilder1->CommitFeature();
tag_t object_tag = NULL_TAG;
UF_MODL_ask_feat_body(feature1->Tag(), &object_tag);
UF_OBJ_set_color(object_tag, 186);
cylinderBuilder1->Destroy();
workPart->Expressions()->Delete(expression1);
NXOPEN绘制球体——>UFUN上色
//NXOpen::Features::Sphere *nullNXOpen_Features_Sphere(NULL);
//NXOpen::Features::SphereBuilder *sphereBuilder1;
//sphereBuilder1 = workPart->Features()->CreateSphereBuilder(nullNXOpen_Features_Sphere);
//sphereBuilder1->Diameter()->SetRightHandSide("100");
//NXOpen::Unit *unit1;
//unit1 = sphereBuilder1->Diameter()->Units();
//NXOpen::Expression *expression1;
//expression1 = workPart->Expressions()->CreateSystemExpressionWithUnits("0", unit1);
NXOpen::NXObject *nXObject1;
nXObject1 = sphereBuilder1->Commit();
//NXOpen::Expression *expression2(sphereBuilder1->Diameter());
//NXOpen::Features::Feature *feature1;
//feature1 = sphereBuilder1->CommitFeature();
//tag_t object_tag = NULL_TAG;
//UF_MODL_ask_feat_body(feature1->Tag(), &object_tag);
//UF_OBJ_set_color(object_tag, 186);
//sphereBuilder1->Destroy();
//workPart->Expressions()->Delete(expression1);
UF_terminate();