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

[已解决] 如何找到实体的某个特定的面用于自动装配?

  [复制链接]

2014-4-8 22:22:41 4686 6

7

主题

28

回帖

173

积分

注册会员

积分
173
发表于 2014-4-7 19:26:05 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 小新 于 2014-4-7 19:51 编辑
2 B# P2 [+ a, v& L% @& N# M
0 h% n8 X$ s% P我做自动化装配,通过代码定义好其约束关系。但是在具体实现过程中,不知道如何找到定义约束关系的某个实体上的特定的面。如图我想将图上箭头所指的面用于建立约束,但是不知道在代码中如何找到这个面。此外我是想用NX Open C++实现,而不是用UFun函数实现。 123.png 3 j1 c: y* L- ^8 e/ x/ Q. C
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复

使用道具 举报

全部回复6

2470

主题

1275

回帖

8万

积分

管理员

PLM之家站长

积分
82162
QQ
发表于 2014-4-8 11:20:06 | 显示全部楼层
录制JA , 看看
! {  U/ q/ O  y. g) H1 p+ v. \
! a$ q1 @. ^3 r要么就是通过几何判断了,遍历所有的面,找出比如面的法相是什么,面的类型,面的一些参数什么的 最终确定是你选择的那个面
) o3 q& e. @! B. h: L/ P4 P- u# u( N2 m6 O9 t
或者直接找tag
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 doTeam.tech
回复 支持 反对

使用道具 举报

7

主题

28

回帖

173

积分

注册会员

积分
173
 楼主| 发表于 2014-4-8 15:21:21 | 显示全部楼层
admin 发表于 2014-4-8 11:20
$ h. t7 C3 |" @录制JA , 看看4 _+ ~, v$ |5 g. C' o

! f# R! |1 b5 f: s要么就是通过几何判断了,遍历所有的面,找出比如面的法相是什么,面的类型,面的一些参数 ...

0 E: j" K" B( j% T我录制JA后,出现代码Face *face1(dynamic_cast<Face *>(block1->FindObject("FACE 4 {(250,100,50) BLOCK(1)}")));,如何直接用这个代码,确实可行。但是关键是,我总不可能,每要查找一个面就录制一个JA吧。我见到用UFun做的话,直接在Ug里,给这个面命名下,然后通过函数UF_OBJ_cylce_by_name,第一参数就是刚刚命名的名字。但是我想问问在NX Open C++是否有类似的做法
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复 支持 反对

使用道具 举报

2470

主题

1275

回帖

8万

积分

管理员

PLM之家站长

积分
82162
QQ
发表于 2014-4-8 19:59:47 | 显示全部楼层
小新 发表于 2014-4-8 07:21
, O( ~" Y% m0 b  N5 k% D我录制JA后,出现代码Face *face1(dynamic_cast(block1->FindObject("FACE 4 {(250,100,50) BLOCK(1)}"))) ...
- m; f& M9 h( m
对的 最简单的方法就是用UFUN的 UF_OBJ_cylce_by_name 函数3 s; K. h/ @$ R1 }3 B  t# c
1 H$ v6 B9 T- b3 K8 L( B9 V
NXOpen C++ 没有类似的这个功能
, O& m5 [$ m- M( j6 f+ m2 n/ [) Q) i( o9 w
开发时候基本是 ufun + NXopen C++9 r6 C/ y7 W% _7 J3 |! A1 ]4 B
单独的 NXOpen C++ 你可能实现所有的要求 0 Y# k0 v  p2 C  o8 ^
9 A0 m7 d" h$ k5 k- E* _( N
两个要结合用
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 doTeam.tech
回复 支持 反对

使用道具 举报

3

主题

51

回帖

278

积分

中级会员

积分
278
发表于 2014-4-8 21:01:01 | 显示全部楼层
楼主说的有道理,顶一个
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复 支持 反对

使用道具 举报

7

主题

28

回帖

173

积分

注册会员

积分
173
 楼主| 发表于 2014-4-8 21:55:15 | 显示全部楼层
admin 发表于 2014-4-8 19:591 T3 D+ G2 b9 [8 h; R) K" T
对的 最简单的方法就是用UFUN的 UF_OBJ_cylce_by_name 函数) I9 a8 [; L- I- ]# a$ ]
; |* \  ?! |" z4 |/ B
NXOpen C++ 没有类似的这个功能
' j% D1 F9 \+ K* d. \, X/ Z% i
123.png 123454.png 你好,我发现在Face类型继承了一个Name()方法,其函数说明的是:Returns the custom name of the object。我就想这个custom name 是否可能是我在UG给那个特定面命名的那个名字。如果用这个方法返回的custom name 和命名的名字相比较,如果是一致,那么我就从把这个面给保存下来,就算找到了。我按照这个思路用下面的代码验证这个思路。" w  ^$ p6 R/ _2 h$ P# l

  1. - p; w, }3 F) c. m
  2. <P>Session *theSession = Session::GetSession();' c1 K! `6 D: ~$ p6 ^
  3. Part *workPart(theSession->Parts()->Work());
    - b) K3 o, k: o( S$ E9 |* u
  4. Part *displayPart(theSession->Parts()->Display());+ c6 s. p/ l+ I+ A8 K, D" ?
  5. BodyCollection *bc=workPart->Bodies();
    5 k4 V' I  D3 ^' h% R" i* w
  6. BodyCollection::iterator it = bc->begin();//因为只有一个体,所以第一位置元素赋值给下面的body
    , F# x# l* @* e0 G7 s
  7. Body *body = (*it);! z7 T) `: h" I4 O# \+ t5 E; t
  8. std::vector<Face*> faces = body->GetFaces();
    $ ?2 Z; d" d9 w; |3 X/ x* \1 s# c
  9. for(unsigned int j=0;j<faces.size();j++)) c% d- w8 A; P4 v. M3 U
  10. {
    7 L. Y$ k2 |4 ^
  11. ! X6 {5 R' w! `' E/ x& N
  12.       if ((faces[j]->Name().getText())=="FACE1")7 G/ X5 z& X2 }6 F( h
  13.         {</P>% g5 O/ [# ^* S8 p" h" N# L
  14. <P>             UI *faceui = UI::GetUI();! D3 v: t) n0 S0 e* q0 x
  15.             faceui->NXMessageBox()->Show("已经找到面",NXMessageBox::DialogTypeInformation,"已经找到特定的面");
    - Q0 D. a9 `/ b/ [: v, p0 m3 i
  16.         }0 B* I& p3 z$ f( g! |( ?1 @
  17.     else% j! j3 y4 B) v* K2 \7 u  ~
  18.        {
    7 A+ C+ B  P) N% j& e
  19.            UI *faceui = UI::GetUI();* _0 M+ _+ A2 r: ~) Y/ [
  20.            faceui->NXMessageBox()->Show("未找到面",NXMessageBox::DialogTypeInformation,faces[j]->Name().getText());+ k0 N5 ~( R3 R2 w) y
  21.        }3 C4 ~* O3 o  S* m1 H$ W* U
  22. }</P>
复制代码
, h# [+ H$ ~; c$ N; D7 o; {
上述代码能够通过编译。在实际运行中出现了上面图所示的两种结果。从图中看到程序判断,(faces[j]->Name().getText())=="FACE1"结果都为假,所以弹出了6个(6个面)“未找到面”的对话框,由于我估计将对话框内容为Name()返回的custom name。但是有一个对话框中内容就是“FACE1”,其余都是空白。既然有一个是“FACE1”为什么不显示“已经找到面”对话框咧?求指教! I1 E* y* u  e1 P0 [& f
9 Y4 ], Z) B# I
# k: z% w' F$ g5 F
3 ~: ]. p) j! w- d. N3 `" Q: ]

. z) P( F/ D) ~: D4 A
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复 支持 反对

使用道具 举报

7

主题

28

回帖

173

积分

注册会员

积分
173
 楼主| 发表于 2014-4-8 22:22:41 | 显示全部楼层
本帖最后由 小新 于 2014-4-9 10:35 编辑
" D( P4 _2 C! ?) ~6 l! M; Y
小新 发表于 2014-4-8 21:55$ o/ M8 J# g( j, ~4 ^' ^; I+ J. y- E
你好,我发现在Face类型继承了一个Name()方法,其函数说明的是:Returns the custom name of the objec ...

( l2 I' ]( n$ K0 O$ | 1414.png 问题已经解决,按照上述思路是可行的。子所以出现上述问题是因为我在if语句判断时候没有处理好,应该用下面代码;

  1. 5 c5 g- p: Q8 C
  2. 通过上述代码确实找到了特定的面了。
    " [; p9 H. ~( j- N( ~4 x+ s
  3. [code]Session *theSession = Session::GetSession();
    ) \( \4 Q$ D+ t  c
  4.         Part *workPart(theSession->Parts()->Work());  e* O0 E1 v. A; w3 N5 j9 o
  5.         Part *displayPart(theSession->Parts()->Display());
      k3 o  T8 u! j" b: g7 \( R4 B

  6. 1 T& z1 O. U6 b( g9 _$ o% r
  7.         BodyCollection *bc=workPart->Bodies();8 F( R# A9 C5 C
  8.         BodyCollection::iterator it = bc->begin();//因为只有一个体,所以第一位置元素赋值给下面的body
    / E' l) t0 ^3 }
  9.         Body *body = (*it);
    ) h, w( x5 v7 R# w0 S5 b- X. M2 D
  10.         std::vector<Face*> faces = body->GetFaces();
    ' ]5 \% {# [7 F; u# o
  11.         for(unsigned int j=0;j<faces.size();j++)1 J2 k1 L. N6 O5 g; P& n
  12.         {
    , W4 y- v' H7 u
  13.                 const char *c1="FACE1";8 Y" y3 a' s2 w) _- m- }. X% l
  14.                 const char *c2=faces[j]->Name().GetText();
    ; N# h, x# ?, Y- _' n+ d
  15.                 if (!strcmp(c2,c1))
    3 s# z* C6 ^. s% L6 O. p8 D
  16.                 {- Z4 {* o3 [9 W  e1 V, G' h* ]
  17.                         UI *faceui = UI::GetUI();5 L, p; k- F/ r% e
  18.                         faceui->NXMessageBox()->Show("已经找到面",NXMessageBox::DialogTypeInformation,"已经找到特定的面");6 @, P0 q. T+ h. {% O! L
  19.                         # o8 B/ @% a. e1 r8 N( |
  20.                 }
    9 M7 G0 e* [) d, @: ~
  21.                 else- c0 I) ^  w: s4 H* b
  22.                 {  o  n4 d& M' y! {; u4 u
  23.                         UI *faceui = UI::GetUI();) s; u  I. u  Y1 X. e
  24.                         faceui->NXMessageBox()->Show("未找到面",NXMessageBox::DialogTypeInformation,faces[j]->Name().getText());1 D1 ]% B0 m4 |1 X; B
  25.                         2 w$ w  y; E3 M9 G1 L
  26.                 }$ K) R3 Q( C8 p6 ^# {! x! R# e

  27. % ]! z+ s* P9 j" j4 @3 |7 g/ [
  28. " U# j: y2 r- z0 k$ B/ M- }
  29.         }
复制代码

1 P: q$ H$ \6 l$ v( F) u) `8 |( n6 _4 a, M# W- b
, Z. U6 k- k# s) t' L
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复 支持 反对

使用道具 举报

发表回复

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

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

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

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

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

    我知道了