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

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

  [复制链接]

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

小新 发表于 2014-4-7 19:26:05 |阅读模式

小新 楼主

2014-4-7 19:26:05

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

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

x
本帖最后由 小新 于 2014-4-7 19:51 编辑 ; p( D' m% P8 V5 P; ^

9 w& r$ {+ e  R2 V8 E9 X7 U我做自动化装配,通过代码定义好其约束关系。但是在具体实现过程中,不知道如何找到定义约束关系的某个实体上的特定的面。如图我想将图上箭头所指的面用于建立约束,但是不知道在代码中如何找到这个面。此外我是想用NX Open C++实现,而不是用UFun函数实现。 123.png 2 c% l- E# e  c8 G+ e
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复

使用道具 举报

全部回复6

admin 发表于 2014-4-8 11:20:06

admin 沙发

2014-4-8 11:20:06

录制JA , 看看7 X- o0 d5 O6 w. y

$ l! \. `+ |( U2 e" ]7 b/ p& z2 k要么就是通过几何判断了,遍历所有的面,找出比如面的法相是什么,面的类型,面的一些参数什么的 最终确定是你选择的那个面8 A2 f! b7 D7 r- q+ R4 Y4 Q
, `0 T8 g8 ~( G/ S" ~
或者直接找tag
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 doTeam.tech
回复 支持 反对

使用道具 举报

小新 发表于 2014-4-8 15:21:21

小新 板凳

2014-4-8 15:21:21

admin 发表于 2014-4-8 11:20
7 b" {/ M& e* V& P录制JA , 看看( J/ G. x1 _+ I7 x& x& V- E# l
" h9 G! Q7 e7 Z; U) z% G
要么就是通过几何判断了,遍历所有的面,找出比如面的法相是什么,面的类型,面的一些参数 ...
) R3 b  l) N5 X& j; J% o
我录制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.diantuankj.com/ doTeam.tech
回复 支持 反对

使用道具 举报

admin 发表于 2014-4-8 19:59:47

admin 地板

2014-4-8 19:59:47

小新 发表于 2014-4-8 07:21
) U' }" g) T. q. S! p: U3 c我录制JA后,出现代码Face *face1(dynamic_cast(block1->FindObject("FACE 4 {(250,100,50) BLOCK(1)}"))) ...

7 V! \. Y2 {) b0 Z: h+ T( f; E9 h  v对的 最简单的方法就是用UFUN的 UF_OBJ_cylce_by_name 函数
! o# P  ]* p8 ]6 u$ t
$ j, P% U- I6 ]- e" p" k- m) _* x5 YNXOpen C++ 没有类似的这个功能
+ H) _$ m* \, d! h9 t; Y, i5 Z) H) f6 u5 s- ^
开发时候基本是 ufun + NXopen C++2 g( U, u4 X( Y( J
单独的 NXOpen C++ 你可能实现所有的要求 & W) ?  H% \" V9 ]9 M! o$ m
3 {' i0 Z1 r7 @- x" m
两个要结合用
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 doTeam.tech
回复 支持 反对

使用道具 举报

璀璨の樱之雨 发表于 2014-4-8 21:01:01

璀璨の樱之雨 5#

2014-4-8 21:01:01

楼主说的有道理,顶一个
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复 支持 反对

使用道具 举报

小新 发表于 2014-4-8 21:55:15

小新 6#

2014-4-8 21:55:15

admin 发表于 2014-4-8 19:59
% D3 A- w+ X& B" S2 X0 O6 d2 e对的 最简单的方法就是用UFUN的 UF_OBJ_cylce_by_name 函数
2 k7 O8 e/ y& ^# [& v) s! d; G+ b( K7 b/ X% O$ }) S) V( N# t( W# W
NXOpen C++ 没有类似的这个功能
1 f! [% q1 w4 F; c
123.png 123454.png 你好,我发现在Face类型继承了一个Name()方法,其函数说明的是:Returns the custom name of the object。我就想这个custom name 是否可能是我在UG给那个特定面命名的那个名字。如果用这个方法返回的custom name 和命名的名字相比较,如果是一致,那么我就从把这个面给保存下来,就算找到了。我按照这个思路用下面的代码验证这个思路。
( @) O  c: E1 J
  1. 1 a% u2 ~1 X( K1 Q( {
  2. <P>Session *theSession = Session::GetSession();
    8 B/ _5 q& ~! x8 I9 p
  3. Part *workPart(theSession->Parts()->Work());
    ; a% C$ _1 F9 }; \7 t
  4. Part *displayPart(theSession->Parts()->Display());
    ' _6 _- X- X2 J' q+ y
  5. BodyCollection *bc=workPart->Bodies();
    . H0 g' M8 j% ?) _
  6. BodyCollection::iterator it = bc->begin();//因为只有一个体,所以第一位置元素赋值给下面的body
    & [7 K" u( h1 d* y6 k5 ]
  7. Body *body = (*it);
    # G- L  J8 w1 Q5 U
  8. std::vector<Face*> faces = body->GetFaces();
    7 b* ]: |! c* R, Z6 }
  9. for(unsigned int j=0;j<faces.size();j++): u* f& {7 I; U% ^' E* @! Z
  10. {* {. c8 E9 P, g, m# l/ \0 K% g

  11. 5 t/ i# L* d5 }$ {5 b9 K/ u/ l. E7 S
  12.       if ((faces[j]->Name().getText())=="FACE1")
    9 y6 X& v+ M& O" K
  13.         {</P>0 z7 e9 X4 @; I' C  g+ h
  14. <P>             UI *faceui = UI::GetUI();
    ; G- I% Q; _. K/ Q# p; i# P
  15.             faceui->NXMessageBox()->Show("已经找到面",NXMessageBox::DialogTypeInformation,"已经找到特定的面");' c2 v7 J% P0 Z* K
  16.         }
    & I4 m7 p- ?. @
  17.     else
    + d, G' r6 v$ s+ l9 }! |
  18.        {& h6 n: p0 \7 B
  19.            UI *faceui = UI::GetUI();- W$ i5 W' I# u8 \
  20.            faceui->NXMessageBox()->Show("未找到面",NXMessageBox::DialogTypeInformation,faces[j]->Name().getText());
    8 [* p3 M3 r. J* L7 _
  21.        }
    ) S9 U) [: M* w. T
  22. }</P>
复制代码

" w" J7 D" O/ w/ R' C) ]) r上述代码能够通过编译。在实际运行中出现了上面图所示的两种结果。从图中看到程序判断,(faces[j]->Name().getText())=="FACE1"结果都为假,所以弹出了6个(6个面)“未找到面”的对话框,由于我估计将对话框内容为Name()返回的custom name。但是有一个对话框中内容就是“FACE1”,其余都是空白。既然有一个是“FACE1”为什么不显示“已经找到面”对话框咧?求指教
& S, o, B5 F' x% x: G! s. S" j( R% N6 z% A- K  N' B9 E" Z
* D3 Z; I: q/ @+ e  m& ~6 O, l
$ {4 S( J4 i5 W" m
* e  C$ s0 u! x. c& g% q) M. b
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复 支持 反对

使用道具 举报

小新 发表于 2014-4-8 22:22:41

小新 7#

2014-4-8 22:22:41

本帖最后由 小新 于 2014-4-9 10:35 编辑
- _, a/ Y; l, i: W
小新 发表于 2014-4-8 21:55$ [7 a6 w0 x! _4 L/ p0 D
你好,我发现在Face类型继承了一个Name()方法,其函数说明的是:Returns the custom name of the objec ...
+ C! H% e! W" v
1414.png 问题已经解决,按照上述思路是可行的。子所以出现上述问题是因为我在if语句判断时候没有处理好,应该用下面代码;
  1. # q$ D" f5 Y3 m1 R+ L* M
  2. 通过上述代码确实找到了特定的面了。# C& N5 Z; n( c/ C3 b; W
  3. [code]Session *theSession = Session::GetSession();
    7 F% z$ n4 {  k: i/ t4 `
  4.         Part *workPart(theSession->Parts()->Work());7 {$ b' x' G) V  A6 K3 R
  5.         Part *displayPart(theSession->Parts()->Display());1 z6 E/ J% J9 ?) ^

  6. : P3 z% l1 z) x4 o4 l
  7.         BodyCollection *bc=workPart->Bodies();/ o2 Z4 y$ E/ a& Q; }
  8.         BodyCollection::iterator it = bc->begin();//因为只有一个体,所以第一位置元素赋值给下面的body) i* j# M: g  F: u* m, W5 ?1 y
  9.         Body *body = (*it);
    ( }0 C2 U+ {5 T$ g  F4 x9 I
  10.         std::vector<Face*> faces = body->GetFaces();7 h0 g: O. J: ~
  11.         for(unsigned int j=0;j<faces.size();j++)
    8 k' {- s& P, q- R
  12.         {" A" [7 G, D; e- G' S+ u
  13.                 const char *c1="FACE1";
    + v3 \% U- _/ p' U
  14.                 const char *c2=faces[j]->Name().GetText();
    9 O7 P3 }( L: A0 f1 X9 ~. M
  15.                 if (!strcmp(c2,c1))5 ~3 x1 g4 N" m) W$ R
  16.                 {8 i7 |8 J0 o6 O1 k/ o! W/ g3 v: g& z
  17.                         UI *faceui = UI::GetUI();0 c. n& h: k& I8 X3 V& {" M) c- r4 _
  18.                         faceui->NXMessageBox()->Show("已经找到面",NXMessageBox::DialogTypeInformation,"已经找到特定的面");
    ) [, j9 G& }( c  e1 q6 U7 z
  19.                         . C' K- {4 N+ I2 {6 J( Q" {
  20.                 }/ @" O; J: T1 O5 g" o2 N( H
  21.                 else( A  {3 e, }1 R; ~, r
  22.                 {, [7 @) d  [" P2 E+ D
  23.                         UI *faceui = UI::GetUI();
    + {4 A0 D3 e8 }  s5 z* K
  24.                         faceui->NXMessageBox()->Show("未找到面",NXMessageBox::DialogTypeInformation,faces[j]->Name().getText());+ X/ l9 x5 W4 z3 h& N
  25.                         ; q3 d, _8 Y" L. h- O
  26.                 }7 L3 Q" Y  T9 l* ]
  27. # N. S* l6 f# d

  28. ) q7 u8 b  t5 x8 v2 N
  29.         }
复制代码
9 v3 Y) j' t. ~' u; L: `4 L

" B; G: F. D; e3 d6 ~$ q$ n3 H+ q. p8 Q, u! F' T- a
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了