一、UFUN的对象,如何转化成NXOpen对象(NxOpenC++对象)
通过一个示例进行演示:
1、利用UFUN的函数创建一个块(UFUN)
2、将整个块进行染色(利用NXOpen的方法)
以上会涉及到将ufun对象转化成NX对象
代码如下:
#include <uf_modl_primitives.h>
#include <uf_modl.h>
#include <NXOpen/DisplayManager.hxx>
#include <NXOpen/DisplayModification.hxx>
#include <NXOpen/DisplayableObject.hxx>
#include <NXOpen/NXObjectManager.hxx>
UF_initialize();
NXOpen::Part *workPart(theSession->Parts()->Work());
UF_FEATURE_SIGN blocksign = UF_NULLSIGN;
double blockcorner[3] = { 0.0,0.0,0.0 };
char *blockedge[3] = { "100","100","100" };
tag_t blockTag = NULL_TAG, bodyTag = NULL_TAG;
UF_MODL_create_block1(blocksign, blockcorner, blockedge, &blockTag);
//通过特征找体——染色不是对特征染色而是对体进行染色
UF_MODL_ask_feat_body(blockTag,&bodyTag);
//利用NXOpenC++进行染色用到转化函数NXObjectManager
NXOpen::DisplayModification *displayModification1;
displayModification1 = theSession->DisplayManager()->NewDisplayModification();
displayModification1->SetNewColor(186);
std::vector<NXOpen::DisplayableObject *> objects1(1);
//NXOpen::Body *body1(dynamic_cast<NXOpen::Body *>(NXOpen::NXObjectManager::Get(bodyTag)));
objects1[0] = body1;
displayModification1->Apply(objects1);
delete displayModification1;
UF_terminate();
运行结果如图1所示:
二、NXOpen的对象,如何转化成UFU对象
通过一个示例进行演示:
1、利用NXOpen的函数创建一个块(NXOpenC++)
2、将整个块进行染色(利用UFUN的方法)
以上会涉及到将ufun对象转化成NX对象
代码如下:
//用户定义
#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>
// 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);
UF_terminate();
运行结果同图1所示。