PLM之家PLMHome-国产软件践行者

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

  [复制链接]

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

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

小新 楼主

2014-4-28 11:53:40

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

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

x
QQ截图20140428114628.png
% A3 `1 c) s/ M9 E5 v这个是两个正方体进行装配。有三个约束条件,分别是三个面对齐。但是加载DLL后,RT所示,对其约束信息框中约束求解正确,没有出错。所对齐的面也和代码中设定的一致。但是实际窗口中两个面却没有对齐啊。其余两个约束也是同样状况。, z2 T7 l7 S1 v; J* e% e1 R; }
主要代码:; N# t- J. o' F5 N9 a  Y2 ]
  1. //Face *face1(dynamic_cast<Face *>(component2->FindObject("PROTO#.Features|BLOCK(1)|FACE 2 {(250,0,50) BLOCK(1)}")));
    6 d: U- R' V$ n( Y
  2.         Face *face1=findface(component2,"FACE4");; ?9 u' p, ^8 w( Z+ K$ a% j
  3.     Positioning::ConstraintReference *constraintReference1;8 g) I) d$ H4 O' H. q0 [! `
  4.     constraintReference1 = componenTConstraint1->CreateConstraintReference(component2, face1, false, false, false);& y/ }# X2 T8 `1 o3 c' A5 d
  5.    
    ; i& @4 W) E& l9 x4 U( M7 U5 w) a" S
  6.     Point3d helpPoint1(151.841109777454, 1.38777878078145e-014, 70.5813805572551);4 B9 S/ k) b; R, I& y
  7.     constraintReference1->SetHelpPoint(helpPoint1);* v' Z# g, l* P6 y! |7 v, Z7 t* [+ s
  8.     3 ?" S# }, Z5 x9 m
  9.     //Face *face2(dynamic_cast<Face *>(component1->FindObject("PROTO#.Features|BLOCK(1)|FACE 2 {(50,0,50) BLOCK(1)}")));9 w2 y1 k, m6 a( ?9 k) k
  10.         Face *face2=findface(component1,"FACE1");
    1 |! L7 E0 c$ M
  11.     Positioning::ConstraintReference *constraintReference2;
    5 x5 l# c8 ~- a. v# y( V2 ?
  12.     constraintReference2 = componentConstraint1->CreateConstraintReference(component1, face2, false, false, false);
复制代码
上面被注释的两行是通过JA录制产生的。我没用用的自己写的findface函数,代码如下:
( X4 M( R0 e) x6 r" k9 Y# J0 x
  1. Face * findface(Assemblies::Component *component,const char *c)% t8 u- q3 a2 e4 S5 |0 {
  2. {
    : x- D. R1 O. h/ U( M; [
  3.         Part * component_part=(dynamic_cast<Part *>(component->Prototype()));6 z8 j5 T- A3 Y" E1 [
  4.         BodyCollection *bc=component_part->Bodies();
    ! s& Y) f! F' T1 @7 f# K. ]4 b4 y$ q
  5.         Face *face;3 _4 p3 P9 J) L* J* s
  6.                 , |. s$ m4 G8 e  a  L% X, G
  7.         for(BodyCollection::iterator it = bc->begin();it!=bc->end();it++)
    ) l: ?$ m: v+ J. h4 I& u
  8.         {
    % B9 S& S/ t- W3 S: K0 g
  9.                 Body *body = (*it);; _$ x# c" a1 C" C: ~
  10.                 std::vector<Face*> faces = body->GetFaces();' ?" f: m1 t% Y0 F: H" x
  11.                 unsigned int k=faces.size();
    / U6 e. ]( F* \8 c# u) v
  12.                 for(unsigned int j=0;j<faces.size();j++)  i% }9 S8 Y/ O0 _# Y1 J* \3 h8 i! ]
  13.                 {7 ?7 {- Q# J/ |1 N: {
  14.                         const char *c1=faces[j]->Name().GetText();        . b& ?5 j, Y1 N; Z6 v* j
  15.                         if (!strcmp(c,c1))
    $ w) C! D& u# W
  16.                                 {
    7 G* E) l( W+ g  h( @: [% c
  17.                                         face=faces[j];% Q7 x! u0 Y7 p4 A) U; [& ~& l
  18.                                         return(face);' T! D( m. v, R" z. f
  19.                                 }
    ' r, Q5 X* T% }/ K$ N& z  [9 P! z
  20.                 }
    # ~2 L, g9 \5 v3 q6 D* n" l
  21.         }
    , _4 A: k- ^8 G) R# H7 G* c: P
  22.         * R, N8 a$ a% e3 g
  23. }
复制代码
; G/ s, |1 w) m/ l% ^
* K0 B9 w: ^) l

9 g8 r) N+ w% k; P; ^2 i: `5 _- Q6 C
% w7 @$ ]) j" f% k5 ^3 C& K. y
上海点团信息科技有限公司,承接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

你找到的面是 部件原型的面 % V6 H6 u+ I: R$ \5 N* B  F+ q! h
, N, c* `! D: e) m! \: e
装配里面需要的面是 occurrence实例对象的面 , 所以结算结果不对8 l- P  t( b) T' i* M6 h0 g! X$ c
/ ^4 V2 K3 G, Q8 w+ R) j8 P4 m
这个地方使用 ufun的  5 Q8 `- P& u/ R) Y

' V9 \$ F: |# ?4 h6 Z; S9 \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
: q' L& z- D% e2 }你找到的面是 部件原型的面 6 n; y3 U; _2 J5 n

" D! X5 f' v, J- S, p0 H$ Y装配里面需要的面是 occurrence实例对象的面 , 所以结算结果不对
, }* d. F: q# o' ~6 h/ 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二次开发专题模块培训报名开始啦

    我知道了