PLM之家PLMHome-工业软件践行者

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

  [复制链接]

2014-5-6 20:11:05 4682 2

小新 发表于 2014-4-28 11:53:40 |阅读模式

小新 楼主

2014-4-28 11:53:40

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

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

x
QQ截图20140428114628.png . ~4 ^2 ]8 M+ j7 }4 @  f* m
这个是两个正方体进行装配。有三个约束条件,分别是三个面对齐。但是加载DLL后,RT所示,对其约束信息框中约束求解正确,没有出错。所对齐的面也和代码中设定的一致。但是实际窗口中两个面却没有对齐啊。其余两个约束也是同样状况。# ]' `& `6 E4 B4 u
主要代码:
. B5 I: y, i4 {% h7 X
  1. //Face *face1(dynamic_cast<Face *>(component2->FindObject("PROTO#.Features|BLOCK(1)|FACE 2 {(250,0,50) BLOCK(1)}")));5 R, w* N- F3 V( ^# w3 g8 m
  2.         Face *face1=findface(component2,"FACE4");, d6 B, S  ^$ [0 f) L: m
  3.     Positioning::ConstraintReference *constraintReference1;) }2 d3 i) }7 A+ B5 R$ p0 H
  4.     constraintReference1 = componenTConstraint1->CreateConstraintReference(component2, face1, false, false, false);) ?; G2 o' k( ?# o& P8 E; L! m
  5.    
    7 V) Z: m1 B1 R9 B' I% `
  6.     Point3d helpPoint1(151.841109777454, 1.38777878078145e-014, 70.5813805572551);! Q, u% N% e* r/ W  e
  7.     constraintReference1->SetHelpPoint(helpPoint1);
    - A9 m2 J. m8 [; L
  8.    
    * J/ k9 ?( d& O' P5 L* q+ F
  9.     //Face *face2(dynamic_cast<Face *>(component1->FindObject("PROTO#.Features|BLOCK(1)|FACE 2 {(50,0,50) BLOCK(1)}")));# r6 l# Q! w) o. t5 p
  10.         Face *face2=findface(component1,"FACE1");
    1 T( Y# F( `4 n7 S9 Y9 w! f
  11.     Positioning::ConstraintReference *constraintReference2;
    3 Q% Y9 n9 y, d' N$ a1 M
  12.     constraintReference2 = componentConstraint1->CreateConstraintReference(component1, face2, false, false, false);
复制代码
上面被注释的两行是通过JA录制产生的。我没用用的自己写的findface函数,代码如下:
8 E6 J9 C0 G' r3 j7 K
  1. Face * findface(Assemblies::Component *component,const char *c)% S; Q' b4 @- D! |$ S
  2. {
    5 L/ t, z7 p2 V& D5 ~  O: Y
  3.         Part * component_part=(dynamic_cast<Part *>(component->Prototype()));
    & U% {4 L& A" J; l4 P
  4.         BodyCollection *bc=component_part->Bodies();
    " ?4 d: }& u& w  P9 [' k# o" w* W
  5.         Face *face;7 s1 B9 m0 R$ b2 Z' ]& C
  6.                
    # T) s0 {" Y" B8 J- B$ {5 Z
  7.         for(BodyCollection::iterator it = bc->begin();it!=bc->end();it++)& z7 ]4 n4 }; y  ?
  8.         {1 t, ]' u/ _* j' ^3 K: t) l
  9.                 Body *body = (*it);
    ( k0 {; x9 C) _# j1 _5 w6 n
  10.                 std::vector<Face*> faces = body->GetFaces();
    ( h3 b( f* k1 z+ J# g# I" w
  11.                 unsigned int k=faces.size();! D3 Z7 h. l7 h1 A- R
  12.                 for(unsigned int j=0;j<faces.size();j++)
    " E' t6 w. Q4 K, p
  13.                 {- o* a, n5 n4 M% z1 ~- d
  14.                         const char *c1=faces[j]->Name().GetText();       
    / E. R4 y  g* ^" D1 k8 X' Q
  15.                         if (!strcmp(c,c1))
    5 Y; D9 G1 u7 [; y8 @2 N
  16.                                 {
    , L8 [5 C0 L5 K1 {( l9 X; Q
  17.                                         face=faces[j];6 o% s5 G4 L+ }# U& _4 I6 W
  18.                                         return(face);
    - h5 |  g6 k$ q4 R- U: v9 k$ X
  19.                                 }9 p: I* t2 }* i, F& H9 a. Q
  20.                 }
    7 g$ O# E+ j& H" r) g+ Y2 C& O
  21.         }
    " d4 [( u2 Y% E  {/ Z& I  c+ U
  22.         1 u; p) h# G3 [) t3 f' d
  23. }
复制代码

* P. g5 k! W  Y7 M' R1 s* v* S; I
) y7 ^7 w: r# ]/ T8 m$ G) l1 D) T6 x$ w4 D4 u* g

1 V; }) n; {8 v
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复

使用道具 举报

全部回复2

admin 发表于 2014-4-28 12:51:25

admin 沙发

2014-4-28 12:51:25

你找到的面是 部件原型的面
; o+ \* m& I1 X7 P, Q9 L' l* a! Y0 D5 {; z7 x
装配里面需要的面是 occurrence实例对象的面 , 所以结算结果不对) e% W) R% N5 k! m; E

4 z5 \7 l  h) Y& X  A9 J$ B. Q, ]这个地方使用 ufun的  - d, F- j# u5 g6 g! @5 T! I
: A/ j) m0 X2 f+ P2 t* r" h
UF_OBJ_cycle_by_name    去找 就可以了
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 doTeam.tech
回复 支持 反对

使用道具 举报

小新 发表于 2014-5-6 20:11:05

小新 板凳

2014-5-6 20:11:05

admin 发表于 2014-4-28 12:51- R) M& _+ R" x8 ^" k  e3 {5 F0 A
你找到的面是 部件原型的面
8 o4 Q4 q# e5 K% m& L: [- T; x- w/ P% T0 f6 k; H
装配里面需要的面是 occurrence实例对象的面 , 所以结算结果不对
( [1 s, g9 s7 `# Y
但是CreateConstraintReference()方法中第二个参数没有要求用的是occurrenc的面啊?在NX C++中好像也没有关于occurrence和instancen的相关类
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复 支持 反对

使用道具 举报

发表回复

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

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

    本网站(plmhome.com)为PLM之家工业软件学习官网站

    展示的视频材料全部免费,需要高清和特殊技术支持请联系 QQ: 939801026

    PLM之家NX CAM二次开发专题模块培训报名开始啦

    我知道了