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

[已解决] 如何查找一个部件对应的occurrence的面

[复制链接]

2014-5-9 10:26:29 3468 1

小新 发表于 2014-5-8 15:55:39 |阅读模式

小新 楼主

2014-5-8 15:55:39

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

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

x
本帖最后由 小新 于 2014-5-8 16:10 编辑
$ a- W3 h% Y! O  B$ h! _* f1 r% s+ ]0 d6 X; ?
录制装配过程的JA,经过对录制的代码进行简化删减后,如下,经编译后能够实现自动化装配。
  1. Session *theSession = Session::GetSession();- J: a$ J# @1 M* @1 [) L4 k% Q, s
  2.     Part *workPart(theSession->Parts()->Work());
    % u; |  j( N; L6 F9 c- _
  3.     Part *displayPart(theSession->Parts()->Display());
    9 u- u6 x3 x1 K1 c# X
  4.             
    ) N. Y0 S9 p1 O5 E  |
  5.     BasePart *basePart1;1 \/ _# ^8 \9 w* |. L( D: g6 I
  6.     PartLoadStatus *partLoadStatus1;
      l& Q% t, F% i0 ^6 Y- j
  7.     basePart1 = theSession->Parts()->OpenBase("D:\\sy\\model4.prt", &partLoadStatus1);2 J& s5 x4 U/ b) r
  8.     delete partLoadStatus1;
    0 b# v2 l" X1 k3 X, p3 @$ V0 S% {5 a
  9.     0 i9 B% g+ J; U0 w: M& m+ f: U
  10.     Point3d basePoint1(0.0, 0.0, 0.0);
    : k# g  \7 F9 u0 |, X0 _& f& O
  11.     Matrix3x3 orientation1;
    & X& w, `3 k2 c4 Q' r( b) X
  12.     orientation1.Xx = 1.0;    orientation1.Xy = 0.0;    orientation1.Xz = 0.0;/ M% s! j; L3 L- Z
  13.     orientation1.Yx = 0.0;    orientation1.Yy = 1.0;    orientation1.Yz = 0.0;
    % ~! q4 h+ ?: R) w
  14.     orientation1.Zx = 0.0;    orientation1.Zy = 0.0;    orientation1.Zz = 1.0;
    ; H6 t- [. n  u) F: v
  15.     PartLoadStatus *partLoadStatus2;! m& u( `5 g. D9 T" W
  16.     Assemblies::Component *component1;
    2 ?5 M% M. n- F, [  v
  17.     component1 = workPart->ComponentAssembly()->AddComponent("D:\\sy\\model4.prt", "MODEL", "MODEL4", basePoint1, orientation1, -1, &partLoadStatus2, true);//添加组件9 s9 b! Z6 Z5 C8 g; t) D
  18.    delete partLoadStatus2;  6 O( s) }8 k7 q2 K
  19.     5 J5 s- b9 b) b2 [6 Y. \+ M
  20.     BasePart *basePart2;
    + e8 H: m4 s2 t( n# A. r5 d0 Y1 J
  21.     PartLoadStatus *partLoadStatus3;" X: C1 D2 @1 v1 j
  22.     basePart2 = theSession->Parts()->OpenBase("D:\\sy\\model5.prt", &partLoadStatus3);   
    $ c  {, d7 x- I5 F* |
  23.     delete partLoadStatus3;    ! n9 T  f9 c; o3 r3 h
  24.     8 v: m, Q  l+ e& V# h
  25.     Point3d basePoint2(0.0, 0.0, 0.0);
    + ]$ h5 S/ P9 I
  26.     Matrix3x3 orientation2;
    4 ?% [' }$ d0 D+ c0 H3 K- l% P( D
  27.     orientation2.Xx = 1.0;    orientation2.Xy = 0.0;    orientation2.Xz = 0.0;
    1 |! ?% y: y( C) l9 t& u
  28.     orientation2.Yx = 0.0;    orientation2.Yy = 1.0;    orientation2.Yz = 0.0;# l2 J5 ?- @0 x; o% D3 P. s
  29.     orientation2.Zx = 0.0;    orientation2.Zy = 0.0;    orientation2.Zz = 1.0;
    7 t) Y/ {# w/ D8 _; A
  30.     PartLoadStatus *partLoadStatus4;$ l$ D0 m2 B8 f5 n
  31.     Assemblies::Component *component2;0 _+ G$ T2 x% R1 X
  32.     component2 = workPart->ComponentAssembly()->AddComponent("D:\\sy\\model5.prt", "MODEL", "MODEL5", basePoint2, orientation2, -1, &partLoadStatus4, true);//添加组件4 c: F3 y* S# }# B3 a  J0 E7 }  @  E
  33.    delete partLoadStatus4;  
    , S5 s5 Z+ M( m" R
  34.    
    5 f, {- o% D0 ~
  35.     Positioning::ComponentPositioner *componentPositioner1;
    6 `( Z9 d4 p* b1 }2 S' o" P4 w
  36.     componentPositioner1 = workPart->ComponentAssembly()->Positioner();     
    3 y8 U5 b9 r* G0 J0 F; n3 Z
  37.     componentPositioner1->BeginAssemblyConstraints();      
    " ~! D* z2 k# J/ W: I9 X% `
  38.    
    7 v4 P1 H: C/ r6 b! O1 R
  39.     Positioning::Network *network1;
    : X" t; G* |8 y) e
  40.     network1 = componentPositioner1->EstablishNetwork();    . r" X; S, \: O$ u+ N7 x
  41.     Positioning::ComponentNetwork *componentNetwork1(dynamic_cast<Positioning::ComponentNetwork *>(network1));0 Y- g/ s/ e9 P2 x. J+ ]
  42.     componentNetwork1->SetMoveObjectsState(true);              
    1 |3 o8 U& J, l0 S7 {2 C
  43.    
    3 j' z+ A2 H$ |- k$ K6 W, F
  44.     Positioning::Constraint *constraint1;0 }7 g( {# h! u- W: x% a7 E
  45.     constraint1 = componentPositioner1->CreateConstraint(true);1 V9 T" T6 N! O/ v
  46.     4 b0 j; H$ K: R9 N# n' }, o
  47.     Positioning::ComponenTConstraint *componentConstraint1(dynamic_cast<Positioning::ComponentConstraint *>(constraint1));# L2 |) B; a( N1 t. Y9 w- U
  48.     componentConstraint1->SetConstraintAlignment(Positioning::Constraint::AlignmentContraAlign);   
    2 L2 a4 C# \5 s1 G- A9 |: V& ?$ j
  49.     componentConstraint1->SetConstraintType(Positioning::Constraint::TypeTouch);2 H" F9 J* J! C1 [
  50.     ( h1 E: c8 t- [: K3 [5 x9 i
  51.     Face *face1(dynamic_cast<Face *>(component2->FindObject("PROTO#.Features|BLOCK(1)|FACE 6 {(500,25,25) BLOCK(1)}")));        
    3 ]8 N; @8 K; U( P/ L7 }, c' T
  52.     Positioning::ConstraintReference *constraintReference1;
复制代码
但是出现了一个问题,在上述代码中,进行装配的面是通过FindObject来找到的,不是我想要的那个面,而且FindObject函数参数是一个JA标识符,我无法给某个面定义JA标示符。如果我在建立模型时,我给某个面命名为FACE1。那么我如何找到我想要的面FACE1,然后用于代码
! b  p1 F+ r  Q8 O* {) M+ m
  1. constraintReference1 = componentConstraint1->CreateConstraintReference(component2, face1, false, false, false);
复制代码
其中上述代码中第二参数类型是NXObject *,也无法通过Ufun函数的UF_OBJ_cycle_by_name找到,因为该函数找到是FACE1面的tag,返回的类型不是NXObject *。
- P9 f$ ]9 f3 i3 {问题:# G! k  }- c* I- m8 e
1)C++中是否有某个方法通过某个对象的tag返回其NXObject *类型) d. I% ~; F+ p- K
2)C++是否有某个类中的方法可以找到occurrence中的面(CreateConstraintReference需要的是occurrence的对象),而且返回的是NXObject *类型对象,可以直接用于CreateConstraintReference()方法。" |; \- L3 D8 ^4 r& c
* R1 B' [- B/ k7 O
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复

使用道具 举报

全部回复1

admin 发表于 2014-5-9 10:26:29

admin 沙发

2014-5-9 10:26:29

tag 可以通过 NXObjectManager 返回 NXobject; L; v) N8 t5 N, {7 B9 g5 P' e! V
: Z$ B4 R  p' W# c9 u$ f) k4 I
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 doTeam.tech
回复 支持 反对

使用道具 举报

发表回复

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

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

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

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

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

    我知道了