NX二次开发-NXopen创建对象的最小包容块

适用于NX12.0以上版本

//创建最小包容块
static void CreateMinBox(vector<NXOpen::TaggedObject*> bodyTag, tag_t& Feat_bodyTag)
{

	NXOpen::Features::ToolingBox* nullNXOpen_Features_ToolingBox(NULL);
	NXOpen::Features::ToolingBoxBuilder* toolingBoxBuilder1;
	toolingBoxBuilder1 = workPart->Features()->ToolingFeatureCollection()->CreateToolingBoxBuilder(nullNXOpen_Features_ToolingBox);

	toolingBoxBuilder1->SetType(NXOpen::Features::ToolingBoxBuilder::TypesBoundedBlock);

	toolingBoxBuilder1->XValue()->SetFormula("10");

	toolingBoxBuilder1->YValue()->SetFormula("10");

	toolingBoxBuilder1->ZValue()->SetFormula("10");

	toolingBoxBuilder1->OffsetPositiveX()->SetFormula("0");

	toolingBoxBuilder1->OffsetNegativeX()->SetFormula("0");

	toolingBoxBuilder1->OffsetPositiveY()->SetFormula("0");

	toolingBoxBuilder1->OffsetNegativeY()->SetFormula("0");

	toolingBoxBuilder1->OffsetPositiveZ()->SetFormula("0");

	toolingBoxBuilder1->OffsetNegativeZ()->SetFormula("0");

	toolingBoxBuilder1->RadialOffset()->SetFormula("0");

	toolingBoxBuilder1->SetSingleOffset(false);

	toolingBoxBuilder1->Clearance()->SetFormula("0");

	toolingBoxBuilder1->SetNonAlignedMinimumBox(true);


	NXOpen::Matrix3x3 matrix1;
	matrix1.Xx = 1.0;
	matrix1.Xy = 0.0;
	matrix1.Xz = 0.0;
	matrix1.Yx = 0.0;
	matrix1.Yy = 1.0;
	matrix1.Yz = 0.0;
	matrix1.Zx = 0.0;
	matrix1.Zy = 0.0;
	matrix1.Zz = 1.0;
	NXOpen::Point3d position1(0.0, 0.0, 0.0);
	toolingBoxBuilder1->SetBoxMatrixAndPosition(matrix1, position1);

	NXOpen::SelectionIntentRuleOptions* selectionIntentRuleOptions1;
	selectionIntentRuleOptions1 = workPart->ScRuleFactory()->CreateRuleOptions();

	selectionIntentRuleOptions1->SetSelectedFromInactive(false);


	std::vector<NXOpen::Body*> bodies1;
	for (int i = 0; i < bodyTag.size(); i++)
	{
		//NXOpen::Features::Brep* brep1(dynamic_cast<NXOpen::Features::Brep*>(NXObjectManager::Get(faceTag[i]->Tag())));
		NXOpen::Body* body1(dynamic_cast<NXOpen::Body*>(NXObjectManager::Get(bodyTag[i]->Tag())));
		bodies1.push_back(body1);


	}

	NXOpen::BodyDumbRule* bodyDumbRule1;
	bodyDumbRule1 = workPart->ScRuleFactory()->CreateRuleBodyDumb(bodies1, true, selectionIntentRuleOptions1);

	delete selectionIntentRuleOptions1;
	NXOpen::ScCollector* scCollector1;
	scCollector1 = toolingBoxBuilder1->BoundedObject();

	std::vector<NXOpen::SelectionIntentRule*> rules1(1);
	rules1[0] = bodyDumbRule1;
	scCollector1->ReplaceRules(rules1, false);

	std::vector<NXOpen::NXObject*> selections1;

	for (int i = 0; i < bodyTag.size(); i++)
	{
		NXOpen::Body* body1(dynamic_cast<NXOpen::Body*>(NXObjectManager::Get(bodyTag[i]->Tag())));
		selections1.push_back(body1);
	}

	std::vector<NXOpen::NXObject*> deselections1(0);
	toolingBoxBuilder1->SetSelectedOccurrences(selections1, deselections1);

	NXOpen::SelectNXObjectList* selectNXObjectList1;
	selectNXObjectList1 = toolingBoxBuilder1->FacetBodies();

	std::vector<NXOpen::NXObject*> objects1(0);
	bool added1;
	added1 = selectNXObjectList1->Add(objects1);

	toolingBoxBuilder1->CalculateBoxSize();

	NXOpen::Point3d csysorigin1(0, 0, 0);
	toolingBoxBuilder1->SetBoxPosition(csysorigin1);
	toolingBoxBuilder1->SetNonAlignedMinimumBox(true);
	toolingBoxBuilder1->SetShowDimension(true);
	toolingBoxBuilder1->ShowDimension();


	NXOpen::NXObject* nXObject1;
	nXObject1 = toolingBoxBuilder1->Commit();
	toolingBoxBuilder1->Destroy();

	//特征找体
	UF_CALL(UF_MODL_ask_feat_body(nXObject1->Tag(), &Feat_bodyTag));
	UF_CALL(UF_OBJ_set_translucency(Feat_bodyTag, 70));



}

在进行NX二次开发时,可以使用NX Open C++ API编写一个最小包容的功能。以下是一个简单的实现示例: 1. 在NX中创建一个新的Part文件,并打开Part文件。 2. 在NX Open C++ API中创建一个新的类。 3. 在这个类中添加一个名为“CreateMinimumEnclosingBox”的静态方法,该方法将负责执行最小包容的计算。 4. 在“CreateMinimumEnclosingBox”方法中,使用NX Open C++ API中的“SelectObject”方法来选择需要计算最小包容的对象。 5. 使用NX Open C++ API中的“CreateMinimumEnclosingBox”方法来计算最小包容,并将结果返回给调用者。 6. 在NX中使用这个自定义功能来计算最小包容。 下面是一个简单的代码示例: ```cpp #include <uf_part.h> #include <uf_modl.h> class MinimumEnclosingBox { public: static tag_t CreateMinimumEnclosingBox() { // Select the objects to compute the minimum enclosing box tag_t selectedObjects[1]; int numSelectedObjects; UF_UI_select_with_single_dialog("Select objects to compute the minimum enclosing box", "", UF_UI_SEL_SCOPE_WORK_PART, UF_UI_SEL_TYPE_ANY, false, selectedObjects, &numSelectedObjects); // Compute the minimum enclosing box tag_t workPart = UF_PART_ask_display_part(); tag_t boxFeature; UF_MODL_create_me_box(selectedObjects[0], &boxFeature); return boxFeature; } }; ``` 当你完成这个功能的开发后,你可以在NX中使用它来计算任何对象的最小包容,只需要调用“CreateMinimumEnclosingBox”方法即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值