NX Open C++自动化装配约束求解正确但是显示不正确
这个是两个正方体进行装配。有三个约束条件,分别是三个面对齐。但是加载DLL后,RT所示,对其约束信息框中约束求解正确,没有出错。所对齐的面也和代码中设定的一致。但是实际窗口中两个面却没有对齐啊。其余两个约束也是同样状况。
主要代码:
//Face *face1(dynamic_cast<Face *>(component2->FindObject("PROTO#.Features|BLOCK(1)|FACE 2 {(250,0,50) BLOCK(1)}")));
Face *face1=findface(component2,"FACE4");
Positioning::ConstraintReference *constraintReference1;
constraintReference1 = componentConstraint1->CreateConstraintReference(component2, face1, false, false, false);
Point3d helpPoint1(151.841109777454, 1.38777878078145e-014, 70.5813805572551);
constraintReference1->SetHelpPoint(helpPoint1);
//Face *face2(dynamic_cast<Face *>(component1->FindObject("PROTO#.Features|BLOCK(1)|FACE 2 {(50,0,50) BLOCK(1)}")));
Face *face2=findface(component1,"FACE1");
Positioning::ConstraintReference *constraintReference2;
constraintReference2 = componentConstraint1->CreateConstraintReference(component1, face2, false, false, false);上面被注释的两行是通过JA录制产生的。我没用用的自己写的findface函数,代码如下:
Face * findface(Assemblies::Component *component,const char *c)
{
Part * component_part=(dynamic_cast<Part *>(component->Prototype()));
BodyCollection *bc=component_part->Bodies();
Face *face;
for(BodyCollection::iterator it = bc->begin();it!=bc->end();it++)
{
Body *body = (*it);
std::vector<Face*> faces = body->GetFaces();
unsigned int k=faces.size();
for(unsigned int j=0;j<faces.size();j++)
{
const char *c1=faces->Name().GetText();
if (!strcmp(c,c1))
{
face=faces;
return(face);
}
}
}
}
你找到的面是 部件原型的面
装配里面需要的面是 occurrence实例对象的面 , 所以结算结果不对
这个地方使用 ufun的
UF_OBJ_cycle_by_name 去找 就可以了 admin 发表于 2014-4-28 12:51
你找到的面是 部件原型的面
装配里面需要的面是 occurrence实例对象的面 , 所以结算结果不对
但是CreateConstraintReference()方法中第二个参数没有要求用的是occurrenc的面啊?在NX C++中好像也没有关于occurrence和instancen的相关类
页:
[1]