NX二次开发openC++(二)——NxOpenC++对象与UFUN对象之间的转化(以圆柱和球体为例子)

一、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();

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

白雪公主的后妈

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

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

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

打赏作者

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

抵扣说明:

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

余额充值