查看: 5069|回复: 2

[已解决] NX Open C++自动化装配约束求解正确但是显示不正确

 火 [复制链接]

7

主题

28

回帖

173

积分

注册会员

积分
173
发表于 2014-4-28 11:53:40 | 显示全部楼层 |阅读模式

请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!

您需要 登录 才可以下载或查看,没有账号?注册

×
QQ截图20140428114628.png
- ?9 h" G  k, O+ J0 d' T这个是两个正方体进行装配。有三个约束条件,分别是三个面对齐。但是加载DLL后,RT所示,对其约束信息框中约束求解正确,没有出错。所对齐的面也和代码中设定的一致。但是实际窗口中两个面却没有对齐啊。其余两个约束也是同样状况。
; Z3 o4 n8 `# }! g# {; O" \0 m  c主要代码:
! x4 _  B9 ~4 L; h6 Q6 D
  1. //Face *face1(dynamic_cast<Face *>(component2->FindObject("PROTO#.Features|BLOCK(1)|FACE 2 {(250,0,50) BLOCK(1)}")));$ x( V- E% c# k( k
  2.         Face *face1=findface(component2,"FACE4");
    ! e4 m" l! ^$ P3 f- E- |, _
  3.     Positioning::ConstraintReference *constraintReference1;
    9 y: [* F9 ?9 t
  4.     constraintReference1 = componenTConstraint1->CreateConstraintReference(component2, face1, false, false, false);& S( w3 b8 I- z- w5 h
  5.    
    ; ]# I% X" M  `$ Z3 {! n0 ~" b1 S
  6.     Point3d helpPoint1(151.841109777454, 1.38777878078145e-014, 70.5813805572551);) F! p# }* u, j, P, n9 s" S- x) _
  7.     constraintReference1->SetHelpPoint(helpPoint1);5 p$ y4 ]( j) O7 F7 i
  8.     : N8 ~# r4 ^) I! h  Q
  9.     //Face *face2(dynamic_cast<Face *>(component1->FindObject("PROTO#.Features|BLOCK(1)|FACE 2 {(50,0,50) BLOCK(1)}")));2 V* c* r5 g& v6 U
  10.         Face *face2=findface(component1,"FACE1");8 D, H1 T. C2 w: C( l/ V$ k
  11.     Positioning::ConstraintReference *constraintReference2;
    2 P" x, Z0 K; u2 V6 D0 {+ _5 z
  12.     constraintReference2 = componentConstraint1->CreateConstraintReference(component1, face2, false, false, false);
复制代码
上面被注释的两行是通过JA录制产生的。我没用用的自己写的findface函数,代码如下:
3 w1 k/ V1 T8 ]4 s+ t" [6 B; Z; U* O
  1. Face * findface(Assemblies::Component *component,const char *c)
    + y4 m- e$ s$ M+ \) ^
  2. {
    1 _, e0 q0 g. I! U3 q- M. s
  3.         Part * component_part=(dynamic_cast<Part *>(component->Prototype()));( Y) |4 v9 `8 z' N- I$ V. f
  4.         BodyCollection *bc=component_part->Bodies();
    + l/ G( j' a+ ~. M# H  L% g
  5.         Face *face;
    ( m6 _$ V" Y% W
  6.                
    8 _- ]& X1 K' w% |7 V7 u
  7.         for(BodyCollection::iterator it = bc->begin();it!=bc->end();it++)
    3 |3 J! d6 @: ]- U" H4 L
  8.         {
    4 h. h" o1 W& ]+ x+ v  P
  9.                 Body *body = (*it);9 B- M- l  z5 }; E0 r$ w3 [6 _
  10.                 std::vector<Face*> faces = body->GetFaces();
    - w9 v. X0 I3 k3 q% b; u( E& ~) Z. S
  11.                 unsigned int k=faces.size();% |% Y# _5 O4 g* B
  12.                 for(unsigned int j=0;j<faces.size();j++)! l3 p; A5 L! p7 Z
  13.                 {" }+ S4 t5 U4 B3 ~+ {- t
  14.                         const char *c1=faces[j]->Name().GetText();       
    , a6 a% {. }2 s  \2 m! l8 D
  15.                         if (!strcmp(c,c1))7 ]$ }9 L# W& p0 x6 m+ N! E
  16.                                 {) Q8 `3 E# C% S
  17.                                         face=faces[j];
    . v5 I6 y. ?# C8 @1 l8 @
  18.                                         return(face);
    & f- o& u, k9 n
  19.                                 }! G( ]7 R$ ^& N( p, r
  20.                 }& P& y  B* Q/ J2 H5 v; R
  21.         }; g* g' N) @' X; a+ l, y9 `
  22.        
    2 b7 G( e3 v& K" q
  23. }
复制代码

  I% l6 p5 {+ P, M8 p; ?+ M1 _1 i+ J5 o

) D% ~- V6 ~, J/ D% `6 d2 }
: C4 }% ^4 R* `1 Y0 [. X/ S: D
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复

使用道具 举报

2477

主题

1280

回帖

8万

积分

管理员

PLM之家站长

积分
82265
QQ
发表于 2014-4-28 12:51:25 | 显示全部楼层
你找到的面是 部件原型的面
0 j% h+ A$ j1 r0 {
9 G! G2 s( {' Q  O% @6 B1 h, I装配里面需要的面是 occurrence实例对象的面 , 所以结算结果不对7 Q- m$ P2 x3 a% W' E* z
$ v, }4 |) P9 [; p; D* [; G% B# u# b
这个地方使用 ufun的  % R3 ]$ B! u, z& |5 d# I
0 H) }0 I' B. V# d0 f
UF_OBJ_cycle_by_name    去找 就可以了
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 doTeam.tech
回复 支持 反对

使用道具 举报

7

主题

28

回帖

173

积分

注册会员

积分
173
 楼主| 发表于 2014-5-6 20:11:05 | 显示全部楼层
admin 发表于 2014-4-28 12:51
. R: Z- w# `; F$ i你找到的面是 部件原型的面 # X  A' K$ g1 C; \
2 ^+ d: C4 f/ T' }7 U, Y
装配里面需要的面是 occurrence实例对象的面 , 所以结算结果不对
/ w. k; R5 S8 b3 ]; |( d" D* Y
但是CreateConstraintReference()方法中第二个参数没有要求用的是occurrenc的面啊?在NX C++中好像也没有关于occurrence和instancen的相关类
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

在本版发帖
关注公众号
QQ客服返回顶部