适用于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));
}