PLM之家PLMHome-工业软件与AI结合践行者

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

  [复制链接]

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

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

小新 楼主

2014-4-28 11:53:40

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

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

x
QQ截图20140428114628.png
+ g- I6 ?- H% g. D这个是两个正方体进行装配。有三个约束条件,分别是三个面对齐。但是加载DLL后,RT所示,对其约束信息框中约束求解正确,没有出错。所对齐的面也和代码中设定的一致。但是实际窗口中两个面却没有对齐啊。其余两个约束也是同样状况。& C+ J% U: O, f) a
主要代码:
4 I' i0 c$ r2 L) S% J
  1. //Face *face1(dynamic_cast<Face *>(component2->FindObject("PROTO#.Features|BLOCK(1)|FACE 2 {(250,0,50) BLOCK(1)}")));
    & F9 C8 Q, @. E
  2.         Face *face1=findface(component2,"FACE4");
    9 x) _# ]" G* \0 A9 v
  3.     Positioning::ConstraintReference *constraintReference1;; [: ^+ r& _6 Q/ n! h
  4.     constraintReference1 = componenTConstraint1->CreateConstraintReference(component2, face1, false, false, false);
    + B4 K8 K1 j+ Y3 @  T
  5.    
    ) z5 m) T  ^4 k! l4 E2 V
  6.     Point3d helpPoint1(151.841109777454, 1.38777878078145e-014, 70.5813805572551);
    4 R: t; a' r5 P4 g4 j
  7.     constraintReference1->SetHelpPoint(helpPoint1);
    ; ^3 h/ M+ u2 r. a0 Y
  8.    
    0 x7 ?5 ]( o4 ]; L
  9.     //Face *face2(dynamic_cast<Face *>(component1->FindObject("PROTO#.Features|BLOCK(1)|FACE 2 {(50,0,50) BLOCK(1)}")));8 [  `) s; r# e3 O5 K6 M/ x4 k
  10.         Face *face2=findface(component1,"FACE1");
    ( G4 I/ }7 T/ i6 g) Q3 q( [
  11.     Positioning::ConstraintReference *constraintReference2;) p5 o8 C$ ^8 v% f* M
  12.     constraintReference2 = componentConstraint1->CreateConstraintReference(component1, face2, false, false, false);
复制代码
上面被注释的两行是通过JA录制产生的。我没用用的自己写的findface函数,代码如下:
) d: g1 U, _; R# @
  1. Face * findface(Assemblies::Component *component,const char *c)" V3 a) p) s! e
  2. {- j/ U" W& `# B+ Y  L  G
  3.         Part * component_part=(dynamic_cast<Part *>(component->Prototype()));
    8 K' L6 m# G& p! o* h. X+ [9 D: P
  4.         BodyCollection *bc=component_part->Bodies();
    0 l- Y4 L7 w4 S' k: Y
  5.         Face *face;7 {7 h( m3 y  d+ V1 Q3 X, {/ F9 Y
  6.                 # W. h, w' }. O' `- y. W
  7.         for(BodyCollection::iterator it = bc->begin();it!=bc->end();it++)
    * e; }- r( N' m' B7 L1 b
  8.         {8 h+ ^# ?  ?* J  T, {
  9.                 Body *body = (*it);9 V5 n; n4 N8 Z. V! s, ]6 Q1 e
  10.                 std::vector<Face*> faces = body->GetFaces();
    ' h8 E) o  k) m0 J' W% C: F
  11.                 unsigned int k=faces.size();& a) S0 n2 B( u1 M  d, C( M! H
  12.                 for(unsigned int j=0;j<faces.size();j++)
    + {" q: w% G- ?1 W' b# w) F
  13.                 {6 \6 P: ^' ?4 D
  14.                         const char *c1=faces[j]->Name().GetText();        $ Z3 N& x) z: X' q
  15.                         if (!strcmp(c,c1))
    + y, O) @* E. X" j% R
  16.                                 {
    6 |% R8 G! E9 |2 i/ F" e
  17.                                         face=faces[j];! L( E/ j% [/ F: k. x3 e
  18.                                         return(face);
    ( Y( U9 w6 Q: |; r' {) G9 Z5 g8 ?
  19.                                 }
    , Y. j  q) E, ?* d
  20.                 }: `- E8 {! C. M. i. y9 }# x# P
  21.         }
    - z  U( ?; S5 |. L
  22.         * \/ @( B! k4 v# u
  23. }
复制代码

% n# \. z$ c; N0 ~  ~* C6 Q! R6 x/ [
/ P2 o; ]1 O  h
: U/ U9 d  D2 p8 w/ p4 O: K- s+ [
上海点团信息科技有限公司,承接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

你找到的面是 部件原型的面 + [9 Y) N6 \1 }; S5 q4 {2 S- {
. x6 b  p! q2 u8 U" a5 v
装配里面需要的面是 occurrence实例对象的面 , 所以结算结果不对
" S' F/ o. `2 @+ j1 ]* [6 q- A  n: t" H/ v# l; S) o; R
这个地方使用 ufun的  ) N9 {% p9 i" D, E% U1 M# E
: p! D: G9 F0 ~+ J$ [0 n
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! w2 s% |3 f( \
你找到的面是 部件原型的面
  Y/ Z, e7 Y, s6 c. C* h7 I% H8 Q3 D
装配里面需要的面是 occurrence实例对象的面 , 所以结算结果不对

! l; P# _, e) @5 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二次开发专题模块培训报名开始啦

    我知道了