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

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

[复制链接]

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

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

小新 楼主

2014-5-8 15:55:39

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

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

x
本帖最后由 小新 于 2014-5-8 16:10 编辑
7 K6 Z, G  O4 \6 q5 ?
5 C2 x3 Y- e3 N) A录制装配过程的JA,经过对录制的代码进行简化删减后,如下,经编译后能够实现自动化装配。
  1. Session *theSession = Session::GetSession();0 X  z. P; _: J  ~2 g- U& E
  2.     Part *workPart(theSession->Parts()->Work());- L& ]- o6 K; l/ X
  3.     Part *displayPart(theSession->Parts()->Display());9 \4 \- ^! a. A. ~" Q& Z3 u7 @
  4.             
    3 ?! H2 \  v5 U8 Y, L- L) N4 ^
  5.     BasePart *basePart1;( |2 ^$ q& [5 G6 Z+ `2 ]
  6.     PartLoadStatus *partLoadStatus1;
    . u0 J# L3 Z' I3 s/ U
  7.     basePart1 = theSession->Parts()->OpenBase("D:\\sy\\model4.prt", &partLoadStatus1);6 a! y7 R$ s  k& }
  8.     delete partLoadStatus1;; C% F; n+ O& a3 l
  9.    
    " W  S- s+ W, A4 [
  10.     Point3d basePoint1(0.0, 0.0, 0.0);
    1 N9 k% l! g8 V- P0 b9 _
  11.     Matrix3x3 orientation1;
    * |' q0 R/ N8 z$ M0 F
  12.     orientation1.Xx = 1.0;    orientation1.Xy = 0.0;    orientation1.Xz = 0.0;
    / T5 K4 f+ v! ]
  13.     orientation1.Yx = 0.0;    orientation1.Yy = 1.0;    orientation1.Yz = 0.0;$ G) [  D9 j4 M" r, D- x. {1 }
  14.     orientation1.Zx = 0.0;    orientation1.Zy = 0.0;    orientation1.Zz = 1.0;7 F$ q* ~* J4 O8 x* E
  15.     PartLoadStatus *partLoadStatus2;
    1 s. O( `1 o  @
  16.     Assemblies::Component *component1;6 {# t; p' q2 W; V4 A9 K
  17.     component1 = workPart->ComponentAssembly()->AddComponent("D:\\sy\\model4.prt", "MODEL", "MODEL4", basePoint1, orientation1, -1, &partLoadStatus2, true);//添加组件6 f3 y: O3 |) N' `6 @
  18.    delete partLoadStatus2;  
    / m6 R$ E! ^  o
  19.    
    0 I% z8 b0 n7 v$ F/ q4 w
  20.     BasePart *basePart2;$ Z8 {# `; V8 h5 n; \% i0 u
  21.     PartLoadStatus *partLoadStatus3;1 K! [4 a3 |+ d% u
  22.     basePart2 = theSession->Parts()->OpenBase("D:\\sy\\model5.prt", &partLoadStatus3);      N* Q# t' r3 Y6 X
  23.     delete partLoadStatus3;   
    5 }* v; i' \+ g1 i. T$ _+ H# m
  24.     ' ]! F4 Q( O4 ^8 K+ \+ t  j, q! h
  25.     Point3d basePoint2(0.0, 0.0, 0.0);
    3 w2 Q* N  m4 b1 `$ p9 d1 h8 O$ B! V
  26.     Matrix3x3 orientation2;9 r8 t7 ~- C3 {' d2 ~6 X! [
  27.     orientation2.Xx = 1.0;    orientation2.Xy = 0.0;    orientation2.Xz = 0.0;
    8 j4 E7 b6 A, T) n
  28.     orientation2.Yx = 0.0;    orientation2.Yy = 1.0;    orientation2.Yz = 0.0;
    ( ?" V6 X1 Q) r( ]
  29.     orientation2.Zx = 0.0;    orientation2.Zy = 0.0;    orientation2.Zz = 1.0;
    8 N  j; @; D! ^9 A+ Y5 u5 ~+ U* M
  30.     PartLoadStatus *partLoadStatus4;3 }8 j0 W0 M# h
  31.     Assemblies::Component *component2;
    ' q4 E' Q# q  A% I: }; d4 s
  32.     component2 = workPart->ComponentAssembly()->AddComponent("D:\\sy\\model5.prt", "MODEL", "MODEL5", basePoint2, orientation2, -1, &partLoadStatus4, true);//添加组件
    + Q6 t7 H% W' |; H
  33.    delete partLoadStatus4;  . P3 j7 n  a) ~3 K
  34.    
    # ~2 Z* L# R8 ~' B$ O, E1 @
  35.     Positioning::ComponentPositioner *componentPositioner1;2 r1 t8 V& }4 L2 C/ P' ~
  36.     componentPositioner1 = workPart->ComponentAssembly()->Positioner();     
    2 _( Z- W5 q  v8 L5 o. r
  37.     componentPositioner1->BeginAssemblyConstraints();      
    1 c1 T" S0 ?; r
  38.     ; i, s! a6 ?" {& E1 b
  39.     Positioning::Network *network1;
    6 o' c$ ^* ?5 X( F
  40.     network1 = componentPositioner1->EstablishNetwork();    / J  G( ?4 ~1 Z" v; K
  41.     Positioning::ComponentNetwork *componentNetwork1(dynamic_cast<Positioning::ComponentNetwork *>(network1));9 Y6 L* z4 b0 p0 u8 w; C* e8 @
  42.     componentNetwork1->SetMoveObjectsState(true);              
    ! D7 m# x0 _2 E" @! X
  43.    
    1 R9 u9 G, L3 P
  44.     Positioning::Constraint *constraint1;
    ) A* c& _. W1 L
  45.     constraint1 = componentPositioner1->CreateConstraint(true);
    5 Y; U8 f6 [; t1 T2 c
  46.     % U9 ^; y, {. l, g3 O( s+ V' {% t
  47.     Positioning::ComponenTConstraint *componentConstraint1(dynamic_cast<Positioning::ComponentConstraint *>(constraint1));4 j3 b, s& M* t# N
  48.     componentConstraint1->SetConstraintAlignment(Positioning::Constraint::AlignmentContraAlign);    ' G8 q1 z" n, S- Q
  49.     componentConstraint1->SetConstraintType(Positioning::Constraint::TypeTouch);
    " m( j7 {$ X: Q- P: l
  50.    
    5 N" M1 w4 f) S. ?! r
  51.     Face *face1(dynamic_cast<Face *>(component2->FindObject("PROTO#.Features|BLOCK(1)|FACE 6 {(500,25,25) BLOCK(1)}")));        ! ^. M* ^" S, x; X& O
  52.     Positioning::ConstraintReference *constraintReference1;
复制代码
但是出现了一个问题,在上述代码中,进行装配的面是通过FindObject来找到的,不是我想要的那个面,而且FindObject函数参数是一个JA标识符,我无法给某个面定义JA标示符。如果我在建立模型时,我给某个面命名为FACE1。那么我如何找到我想要的面FACE1,然后用于代码
) Y# K  z2 B5 ]- c/ H  q
  1. constraintReference1 = componentConstraint1->CreateConstraintReference(component2, face1, false, false, false);
复制代码
其中上述代码中第二参数类型是NXObject *,也无法通过Ufun函数的UF_OBJ_cycle_by_name找到,因为该函数找到是FACE1面的tag,返回的类型不是NXObject *。* \4 m/ \0 j! q0 y2 i4 c. d9 T, r# V
问题:4 ^2 ?$ m+ t8 s! p- P
1)C++中是否有某个方法通过某个对象的tag返回其NXObject *类型
0 S& s  ~+ G7 l2 b2)C++是否有某个类中的方法可以找到occurrence中的面(CreateConstraintReference需要的是occurrence的对象),而且返回的是NXObject *类型对象,可以直接用于CreateConstraintReference()方法。5 a0 j0 r% L/ {. q
1 s4 V2 z9 l; I8 [* C
上海点团信息科技有限公司,承接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 返回 NXobject9 @+ ?& H- F7 ~) I5 k

4 g! B3 B# e. U0 ?
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了