NX二次开发openC++(二)——NxOpenC++对象与UFUN对象之间的转化(NXObjectManager、feature1->Tag())

一、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所示。

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白雪公主的后妈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值