NXOpen固定约束
UF_initialize();
Session *theSession = Session::GetSession();
Part *workPart(theSession->Parts()->Work());
Part *displayPart(theSession->Parts()->Display());
// ----------------------------------------------
// Menu: Assemblies->Components->Add Component...
// ----------------------------------------------
//添加组件
Point3d basePoint1(0.0, 0.0, 0.0);
Matrix3x3 orientation1;
orientation1.Xx = 1.0;
orientation1.Xy = 0.0;
orientation1.Xz = 0.0;
orientation1.Yx = 0.0;
orientation1.Yy = 1.0;
orientation1.Yz = 0.0;
orientation1.Zx = 0.0;
orientation1.Zy = 0.0;
orientation1.Zz = 1.0;
PartLoadStatus *partLoadStatus1;
Assemblies::Component *component1;
component1 = workPart->ComponentAssembly()->AddComponent("E:\\bgl\\1.prt", "MODEL", "1", basePoint1, orientation1, -1, &partLoadStatus1);
delete partLoadStatus1;
/*//添加固定约束
Positioning::ComponentPositioner *componentPositioner1;
componentPositioner1 = workPart->ComponentAssembly()->Positioner();
componentPositioner1->ClearNetwork();
componentPositioner1->BeginAssemblyConstraints();
////////////////////////////////////
Positioning::Network *network1;
network1 = componentPositioner1->EstablishNetwork();
Positioning::ComponentNetwork *componentNetwork1(dynamic_cast<Positioning::ComponentNetwork *>(network1));
componentNetwork1->SetMoveObjectsState(true);
Assemblies::Component *nullAssemblies_Component(NULL);
componentNetwork1->SetDisplayComponent(nullAssemblies_Component);
////////////////////////////////////////
Positioning::Constraint *constraint1;
constraint1 = componentPositioner1->CreateConstraint();
Positioning::ComponentConstraint *componentConstraint1(dynamic_cast<Positioning::ComponentConstraint *>(constraint1));
componentConstraint1->SetConstraintType(Positioning::Constraint::TypeFix);
//Assemblies::Component *component1(dynamic_cast<Assemblies::Component *>(workPart->ComponentAssembly()->RootComponent()->FindObject("COMPONENT 1 1")));
Positioning::ConstraintReference *constraintReference1;
constraintReference1 = componentConstraint1->CreateConstraintReference(component1, component1, false, false, false);
componentNetwork1->Solve();
componentPositioner1->ClearNetwork();
componentPositioner1->EndAssemblyConstraints();*/
Positioning::ComponentPositioner *componentPositioner1;
componentPositioner1 = workPart->ComponentAssembly()->Positioner();
componentPositioner1->ClearNetwork();
//开始
componentPositioner1->BeginAssemblyConstraints();
Positioning::Network *network1;
network1 = componentPositioner1->EstablishNetwork();
Positioning::ComponentNetwork *componentNetwork1(dynamic_cast<Positioning::ComponentNetwork *>(network1));
componentNetwork1->SetMoveObjectsState(true);
Assemblies::Component *nullAssemblies_Component(NULL);
componentNetwork1->SetDisplayComponent(nullAssemblies_Component);
componentNetwork1->SetMoveObjectsState(true);
Positioning::Constraint *constraint1;
constraint1 = componentPositioner1->CreateConstraint();
Positioning::ComponentConstraint *componentConstraint1(dynamic_cast<Positioning::ComponentConstraint *>(constraint1));
componentConstraint1->SetConstraintAlignment(Positioning::Constraint::AlignmentInferAlign);
componentConstraint1->SetConstraintType(Positioning::Constraint::TypeTouch);
//Find Face1
tag_t face1Tag = null_tag;
Face *face1;
UF_OBJ_cycle_by_name("F1",&face1Tag);
if (face1Tag)
{
face1 = dynamic_cast<Face *>(NXObjectManager::Get(face1Tag));
}
//Find Face2
tag_t face2Tag = null_tag;
Face *face2;
UF_OBJ_cycle_by_name("F2",&face2Tag);
if (face2Tag)
{
face2 = dynamic_cast<Face *>(NXObjectManager::Get(face2Tag));
}
Positioning::ConstraintReference *constraintReference1;
constraintReference1 = componentConstraint1->CreateConstraintReference(component1, face1, true, false, false);
Positioning::ConstraintReference *constraintReference2;
constraintReference2 = componentConstraint1->CreateConstraintReference(workPart->ComponentAssembly(), face2, true, false, false);
constraintReference2->SetFixHint(true);
componentNetwork1->Solve();
componentPositioner1->ClearNetwork();
componentPositioner1->EndAssemblyConstraints();
UF_terminate();