PLM之家PLMHome-工业软件与AI结合践行者

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

  [复制链接]

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

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

小新 楼主

2014-4-7 19:26:05

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

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

x
本帖最后由 小新 于 2014-4-7 19:51 编辑 1 F) e5 r2 A3 Q
+ l1 V: h3 @. j+ c
我做自动化装配,通过代码定义好其约束关系。但是在具体实现过程中,不知道如何找到定义约束关系的某个实体上的特定的面。如图我想将图上箭头所指的面用于建立约束,但是不知道在代码中如何找到这个面。此外我是想用NX Open C++实现,而不是用UFun函数实现。 123.png * {" H7 @, F( d- \0 V
上海点团信息科技有限公司,承接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 B+ ]8 r% `! ^4 M' w% l) F5 R, \* _
要么就是通过几何判断了,遍历所有的面,找出比如面的法相是什么,面的类型,面的一些参数什么的 最终确定是你选择的那个面% F# A/ l. ]* A
+ w% D2 B" O* @% {
或者直接找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
2 g' Y, x) v& i3 L# j7 s录制JA , 看看3 M1 W9 p* `2 [

- J: P1 A5 E4 f0 t# R要么就是通过几何判断了,遍历所有的面,找出比如面的法相是什么,面的类型,面的一些参数 ...

: [. i1 k7 N8 C) g% 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:211 y1 q# p$ a# ~
我录制JA后,出现代码Face *face1(dynamic_cast(block1->FindObject("FACE 4 {(250,100,50) BLOCK(1)}"))) ...

$ O( Y; f3 d! R' i( ~# x" a4 L$ s  z对的 最简单的方法就是用UFUN的 UF_OBJ_cylce_by_name 函数
( ^  b6 `+ W& a8 R& Z
: s( |$ g- W8 M, `# Y) U" [3 h& S5 PNXOpen C++ 没有类似的这个功能 1 K+ W& e# J( q9 |" D6 F8 M

0 K: J  ?( m& E0 v  ?开发时候基本是 ufun + NXopen C++- g$ [3 n. x# ~0 K/ k/ C( g
单独的 NXOpen C++ 你可能实现所有的要求 6 b" @' R1 V7 e6 n, w) P
3 O& y% i; c$ J$ C9 \
两个要结合用
上海点团信息科技有限公司,承接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
  z$ P' _# t4 {对的 最简单的方法就是用UFUN的 UF_OBJ_cylce_by_name 函数- a7 M6 Y: [  T- @& o

$ \6 r- _8 m6 nNXOpen C++ 没有类似的这个功能
0 m' v; @& s" m0 f; G) v) F
123.png 123454.png 你好,我发现在Face类型继承了一个Name()方法,其函数说明的是:Returns the custom name of the object。我就想这个custom name 是否可能是我在UG给那个特定面命名的那个名字。如果用这个方法返回的custom name 和命名的名字相比较,如果是一致,那么我就从把这个面给保存下来,就算找到了。我按照这个思路用下面的代码验证这个思路。. X: u. a- f( e
  1. + G9 L. M6 m% F# h, X+ c$ Z
  2. <P>Session *theSession = Session::GetSession();
    ) l1 s$ Z- Y3 H. B9 U) z
  3. Part *workPart(theSession->Parts()->Work());
    8 g0 C0 j$ V& F0 l
  4. Part *displayPart(theSession->Parts()->Display());5 K; S- _2 D7 X  [1 q/ Q- w
  5. BodyCollection *bc=workPart->Bodies();
    7 e' o5 R: M1 f$ u* J
  6. BodyCollection::iterator it = bc->begin();//因为只有一个体,所以第一位置元素赋值给下面的body
    0 ?0 \, v2 K/ D2 y
  7. Body *body = (*it);
    & _# D% B- v2 t3 G
  8. std::vector<Face*> faces = body->GetFaces();% I3 C0 B* X) r2 s8 w& R- A
  9. for(unsigned int j=0;j<faces.size();j++)
    9 R/ L! ~1 y# v  |
  10. {
    9 d" D' n7 O( c; l6 A

  11. ' n' P; C$ w* E
  12.       if ((faces[j]->Name().getText())=="FACE1")
    $ o* _1 k# V2 d$ }5 ]9 e
  13.         {</P>
    7 v+ y4 i  O7 @* z' N' W  Z) z6 I
  14. <P>             UI *faceui = UI::GetUI();
    8 g1 @  F' N; H* X
  15.             faceui->NXMessageBox()->Show("已经找到面",NXMessageBox::DialogTypeInformation,"已经找到特定的面");2 F& P- {" u$ V
  16.         }* `( z/ I2 g* ]" C% h
  17.     else( r4 b! I9 q5 _* E/ E- W
  18.        {: g! P' a- a, p  d
  19.            UI *faceui = UI::GetUI();) d3 d8 P- ]! E2 }
  20.            faceui->NXMessageBox()->Show("未找到面",NXMessageBox::DialogTypeInformation,faces[j]->Name().getText());1 _7 a2 V" f3 P- `
  21.        }
    ( Y& O' h! N0 k: Y
  22. }</P>
复制代码
0 J+ U8 c7 q, O$ H* z' m* T6 C6 j
上述代码能够通过编译。在实际运行中出现了上面图所示的两种结果。从图中看到程序判断,(faces[j]->Name().getText())=="FACE1"结果都为假,所以弹出了6个(6个面)“未找到面”的对话框,由于我估计将对话框内容为Name()返回的custom name。但是有一个对话框中内容就是“FACE1”,其余都是空白。既然有一个是“FACE1”为什么不显示“已经找到面”对话框咧?求指教
+ ~2 |8 y: R# h$ M; X0 [# h
1 e8 G$ K0 ^0 |- c2 p$ K  z
; l: f8 B+ }: c, d
  c8 m" m( c' H: z
0 o1 S) D% l8 L* k5 C4 l2 T
上海点团信息科技有限公司,承接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 编辑 6 q1 J0 U3 q1 k/ x& [* k
小新 发表于 2014-4-8 21:55" ~6 W5 q, q: v% |  C- h
你好,我发现在Face类型继承了一个Name()方法,其函数说明的是:Returns the custom name of the objec ...
) a( z, B  {7 g' O, r  p8 Y
1414.png 问题已经解决,按照上述思路是可行的。子所以出现上述问题是因为我在if语句判断时候没有处理好,应该用下面代码;

  1. 8 I7 W' q2 P8 {" C0 r  M% K# @
  2. 通过上述代码确实找到了特定的面了。+ K9 d( G+ \' }, C) v1 a3 D
  3. [code]Session *theSession = Session::GetSession();
    7 a; c' Q' ~! z$ }; k- y# G
  4.         Part *workPart(theSession->Parts()->Work());  Q, H5 y9 y% `) a6 d
  5.         Part *displayPart(theSession->Parts()->Display());
    9 \8 h/ b" B/ E. }" z' S/ c

  6. : m" L' M& @, k
  7.         BodyCollection *bc=workPart->Bodies();
    3 w1 z$ p. x7 b  O; u6 L" @
  8.         BodyCollection::iterator it = bc->begin();//因为只有一个体,所以第一位置元素赋值给下面的body
    7 ?% j3 H! Y; q9 V) H7 z
  9.         Body *body = (*it);2 U& F  |8 p, h0 h8 ~: }
  10.         std::vector<Face*> faces = body->GetFaces();
    . I8 O0 o& S8 s; b$ g
  11.         for(unsigned int j=0;j<faces.size();j++)5 z- u" I) F7 B6 K* z$ j: k
  12.         {$ @/ r( a# r6 f" \+ D
  13.                 const char *c1="FACE1";
    6 ?& L7 m( n& E4 ^
  14.                 const char *c2=faces[j]->Name().GetText();& g) a) Y& W4 D8 |& f
  15.                 if (!strcmp(c2,c1))
    : g+ A- q8 Y; O0 z" D7 Y* X, N; A
  16.                 {
    8 A% D, F* ]% v; w; o% C
  17.                         UI *faceui = UI::GetUI();
    & j+ @9 _. x8 Q6 p, @8 e. w8 m
  18.                         faceui->NXMessageBox()->Show("已经找到面",NXMessageBox::DialogTypeInformation,"已经找到特定的面");* ^3 r) _5 o$ U; r
  19.                        
    2 G1 Q, M- k! \: c- [) j
  20.                 }
    9 D% L7 t4 ^: K% ~$ W
  21.                 else  k4 Q3 i+ r. A" x& F
  22.                 {, U5 t. I* t5 t$ J) ?- e" l
  23.                         UI *faceui = UI::GetUI();
    % S: z5 x5 c, u! w; Q$ Y
  24.                         faceui->NXMessageBox()->Show("未找到面",NXMessageBox::DialogTypeInformation,faces[j]->Name().getText());
    . q! i% x: f* V5 q" ^4 _
  25.                         " T, p; r7 R- A' a1 M$ t* Y9 A
  26.                 }( t4 B5 d  j3 ?0 u% ^

  27. 7 t- H# ]! t# z5 n" g4 \
  28. # |: c) Q2 V. e
  29.         }
复制代码

! |! @( g1 I) }# {
" h' L4 b4 z: C* {& k9 Q6 F% U( W% B( R
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了