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

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

  [复制链接]

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

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

小新 楼主

2014-4-28 11:53:40

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

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

x
QQ截图20140428114628.png
6 {3 }4 j; d: q* U这个是两个正方体进行装配。有三个约束条件,分别是三个面对齐。但是加载DLL后,RT所示,对其约束信息框中约束求解正确,没有出错。所对齐的面也和代码中设定的一致。但是实际窗口中两个面却没有对齐啊。其余两个约束也是同样状况。
7 u/ K& l5 b& ]4 h4 l主要代码:& P. L2 }6 P+ C% X, e& v% X
  1. //Face *face1(dynamic_cast<Face *>(component2->FindObject("PROTO#.Features|BLOCK(1)|FACE 2 {(250,0,50) BLOCK(1)}")));
      I/ a; h7 b, p3 g
  2.         Face *face1=findface(component2,"FACE4");2 ^6 ]9 {. j% m) w" v
  3.     Positioning::ConstraintReference *constraintReference1;4 H3 j6 T1 F3 _: X% ^, i
  4.     constraintReference1 = componenTConstraint1->CreateConstraintReference(component2, face1, false, false, false);/ z# a3 C1 c, W4 `6 M4 g! u' O
  5.    
    ) {4 D% O: t; u: I2 O. v$ q7 a# ]
  6.     Point3d helpPoint1(151.841109777454, 1.38777878078145e-014, 70.5813805572551);. a$ T0 M. `1 h0 Q6 A3 R( ^$ l
  7.     constraintReference1->SetHelpPoint(helpPoint1);
    ; Y. K- y0 g) ]8 m
  8.    
    0 K, n7 e/ i- @
  9.     //Face *face2(dynamic_cast<Face *>(component1->FindObject("PROTO#.Features|BLOCK(1)|FACE 2 {(50,0,50) BLOCK(1)}")));% Z' V" M% p3 p" @8 q5 U! x( i
  10.         Face *face2=findface(component1,"FACE1");+ _1 C7 N1 Q' A/ ]( h9 S
  11.     Positioning::ConstraintReference *constraintReference2;$ O# {8 O3 v  [4 E# ?8 T
  12.     constraintReference2 = componentConstraint1->CreateConstraintReference(component1, face2, false, false, false);
复制代码
上面被注释的两行是通过JA录制产生的。我没用用的自己写的findface函数,代码如下:
) B( J5 X& E" f! \" C) c7 s, W
  1. Face * findface(Assemblies::Component *component,const char *c)
    1 m+ D3 @$ d! i2 d' R0 ~2 N
  2. {
    0 ^8 r0 N  B1 h$ b. Y+ N; Z
  3.         Part * component_part=(dynamic_cast<Part *>(component->Prototype()));
    6 [$ |3 Y2 B% W! v9 I8 d0 u8 I% L
  4.         BodyCollection *bc=component_part->Bodies();
    - o" b3 T$ x! \" v8 a/ M# [
  5.         Face *face;
    ( y2 ^0 g$ J+ u" m$ e  D, F, |/ T
  6.                
    2 I% J3 Y# e2 g) z3 n# H5 @8 E
  7.         for(BodyCollection::iterator it = bc->begin();it!=bc->end();it++)
    4 W6 B0 ^$ s. ~8 j" X
  8.         {
    2 z& X3 B5 E; F9 L& C4 D
  9.                 Body *body = (*it);
    % K! n2 T( T. e- D( M, i
  10.                 std::vector<Face*> faces = body->GetFaces();4 O: J% ?. t: q( l) E4 a5 O
  11.                 unsigned int k=faces.size();
    0 t1 e; W$ J2 e: a
  12.                 for(unsigned int j=0;j<faces.size();j++)
    5 R. T/ R! j' t, K9 d3 ?
  13.                 {# `0 G! E) a% D, E& H4 F- t
  14.                         const char *c1=faces[j]->Name().GetText();        7 |+ e. ?% y/ [/ `/ _; M& v& Y% z
  15.                         if (!strcmp(c,c1))! r2 c9 F4 x" [$ C, R& F
  16.                                 {
    6 O( D! d6 m! d2 h
  17.                                         face=faces[j];
    0 e9 ~" k; N+ N
  18.                                         return(face);
    ! q+ Z, K/ ]9 p# i) o1 C% _
  19.                                 }* D* R+ M6 ]0 X; m/ v, n  z
  20.                 }$ n' S( A8 S8 v. }2 b+ t  u8 p$ _% w
  21.         }
    2 u: s1 [5 C- @+ L; z, U. x+ r
  22.        
    0 W( o) b9 ?. g, }
  23. }
复制代码
4 b/ y8 A- i& g( N

) z" q; c7 p) m2 B6 H9 ^# |* q0 h, r3 t$ R# T# B# M# B  `
9 ^- E1 \5 W: T, }% }
上海点团信息科技有限公司,承接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

你找到的面是 部件原型的面
; b6 Z' F/ f. O  z7 D$ M- n+ W1 Y$ Y" R; e  S
装配里面需要的面是 occurrence实例对象的面 , 所以结算结果不对9 k3 M4 ]4 `1 Z) f, W7 O

6 N- ^+ }1 ]) t6 b( C这个地方使用 ufun的  
/ `. F8 q& {* s- S9 h: s
! `8 G* y4 P* y0 EUF_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:515 E* K6 Q0 W' q' b  P
你找到的面是 部件原型的面 - `* z8 b, T# [. e3 u- j; j6 s

  \) L- g( `8 ]: C3 n! U$ T0 y装配里面需要的面是 occurrence实例对象的面 , 所以结算结果不对

9 F# m8 @" Y# y1 H) R( @/ t但是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二次开发专题模块培训报名开始啦

    我知道了