查看: 4915|回复: 6

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

  [复制链接]

7

主题

28

回帖

173

积分

注册会员

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

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

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

×
本帖最后由 小新 于 2014-4-7 19:51 编辑
; C3 F5 O% }# _0 \; J: F! @- F, h" [" F/ J5 r" c6 P
我做自动化装配,通过代码定义好其约束关系。但是在具体实现过程中,不知道如何找到定义约束关系的某个实体上的特定的面。如图我想将图上箭头所指的面用于建立约束,但是不知道在代码中如何找到这个面。此外我是想用NX Open C++实现,而不是用UFun函数实现。 123.png
) ?* w, I6 u+ d8 W0 i. W
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复

使用道具 举报

4

主题

3

回帖

48

积分

管理员

积分
48
发表于 2014-4-8 11:20:06 | 显示全部楼层
录制JA , 看看1 C$ [1 o1 q/ r; \3 H

9 a7 ^- @% w1 G要么就是通过几何判断了,遍历所有的面,找出比如面的法相是什么,面的类型,面的一些参数什么的 最终确定是你选择的那个面  t' S" q% y# p) c
  v! n: {! U# q) A9 `4 ^1 N6 x
或者直接找tag
上海点团信息科技有限公司,承接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 15:21:21 | 显示全部楼层
admin 发表于 2014-4-8 11:20
7 B& s( p/ ~7 d0 w录制JA , 看看. {4 y; a. d6 @! q( D+ j
0 w7 n* J1 u# [6 ~3 t
要么就是通过几何判断了,遍历所有的面,找出比如面的法相是什么,面的类型,面的一些参数 ...
9 K" Z- P4 S1 T8 v) @& W" n5 ~
我录制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
回复 支持 反对

使用道具 举报

4

主题

3

回帖

48

积分

管理员

积分
48
发表于 2014-4-8 19:59:47 | 显示全部楼层
小新 发表于 2014-4-8 07:21
* t0 J8 d# O& ]* _0 P; S0 O我录制JA后,出现代码Face *face1(dynamic_cast(block1->FindObject("FACE 4 {(250,100,50) BLOCK(1)}"))) ...
) o1 D) K. i' m. r8 v5 O! Q- i
对的 最简单的方法就是用UFUN的 UF_OBJ_cylce_by_name 函数; Q  y" v7 X4 V9 X5 }  e
* \5 t' t/ `" ^; ?. ?! a( P
NXOpen C++ 没有类似的这个功能
# s" @( l5 }; h& `" a% y4 R, h: D1 ^( I! J4 x8 j1 N8 F# U+ ?
开发时候基本是 ufun + NXopen C++
0 F8 V- p, C3 W4 K. V( T4 e% f单独的 NXOpen C++ 你可能实现所有的要求
5 l! N7 M0 v& {, W0 ?
$ t0 ]0 K. O/ u两个要结合用
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.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:59
& a* o; _  X( u  ~/ A3 n对的 最简单的方法就是用UFUN的 UF_OBJ_cylce_by_name 函数
! N, S1 {: U9 h" i5 T  r% L. w
+ g# t. ?$ h+ r' NNXOpen C++ 没有类似的这个功能

% }6 g5 I- v5 D5 h' Q 123.png 123454.png 你好,我发现在Face类型继承了一个Name()方法,其函数说明的是:Returns the custom name of the object。我就想这个custom name 是否可能是我在UG给那个特定面命名的那个名字。如果用这个方法返回的custom name 和命名的名字相比较,如果是一致,那么我就从把这个面给保存下来,就算找到了。我按照这个思路用下面的代码验证这个思路。
& s# h" |! C* a& Q' s

  1. : ]- X7 Q$ a  g( B9 c: m
  2. <P>Session *theSession = Session::GetSession();' S7 A( U/ `7 |
  3. Part *workPart(theSession->Parts()->Work());/ j: c8 |0 J) q: F
  4. Part *displayPart(theSession->Parts()->Display());8 V0 y& W4 ~1 p+ p5 m
  5. BodyCollection *bc=workPart->Bodies();
    8 D& X) C+ V; E9 u% E. F# Z
  6. BodyCollection::iterator it = bc->begin();//因为只有一个体,所以第一位置元素赋值给下面的body0 K4 c0 E; t) T
  7. Body *body = (*it);% K1 }$ V& ^1 C
  8. std::vector<Face*> faces = body->GetFaces();9 z0 c3 J- H" v" }0 u. x
  9. for(unsigned int j=0;j<faces.size();j++)
    " ?, [; O, v- E
  10. {
    / f. T. r1 [! \1 U& N
  11. ! `! v* E; G* |' h) c% i
  12.       if ((faces[j]->Name().getText())=="FACE1")
    & ~7 r% @6 H$ ~, D$ c" B: a7 Y
  13.         {</P>+ v9 ?2 [* J, A  {: [; T  a- l
  14. <P>             UI *faceui = UI::GetUI();
    3 Y7 @& }! m- t9 e/ E/ J9 x6 n
  15.             faceui->NXMessageBox()->Show("已经找到面",NXMessageBox::DialogTypeInformation,"已经找到特定的面");
    ! v+ E/ }" c: j! f5 v
  16.         }
    ( F1 g, ]- k; m" C% ^
  17.     else
    ! ]& G, }1 R# |$ q
  18.        {: e* p6 E+ P+ y! o* |" p- S
  19.            UI *faceui = UI::GetUI();7 o9 u+ e) ^' L" R. ?4 O" _! g
  20.            faceui->NXMessageBox()->Show("未找到面",NXMessageBox::DialogTypeInformation,faces[j]->Name().getText());
    0 s  ]8 l$ u* L2 p4 W
  21.        }! r0 j8 r) h0 R  q: I1 {) p
  22. }</P>
复制代码

  l4 N& a8 h. o- ~: o4 R/ B上述代码能够通过编译。在实际运行中出现了上面图所示的两种结果。从图中看到程序判断,(faces[j]->Name().getText())=="FACE1"结果都为假,所以弹出了6个(6个面)“未找到面”的对话框,由于我估计将对话框内容为Name()返回的custom name。但是有一个对话框中内容就是“FACE1”,其余都是空白。既然有一个是“FACE1”为什么不显示“已经找到面”对话框咧?求指教! x4 I6 s, f% H* W7 z
& y9 d6 `4 z! Z! b8 F2 e1 j
! w* W" l1 T" j7 U
$ h8 z7 D$ d' J+ A7 E( N$ T

4 T9 x0 X( w6 d8 S9 a4 C+ h- r
上海点团信息科技有限公司,承接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 编辑 9 c( b: S* y7 v5 @5 D$ H2 a, e7 ^
小新 发表于 2014-4-8 21:55! v/ ?9 k8 u1 J& G) m3 }
你好,我发现在Face类型继承了一个Name()方法,其函数说明的是:Returns the custom name of the objec ...
* j9 x6 [& |# f; ?/ _" d
1414.png 问题已经解决,按照上述思路是可行的。子所以出现上述问题是因为我在if语句判断时候没有处理好,应该用下面代码;
  1. 4 X) ~7 ?4 x9 b5 S
  2. 通过上述代码确实找到了特定的面了。
    0 h1 b% b1 x& O( h. \
  3. [code]Session *theSession = Session::GetSession();! t  q& H2 K+ E# G6 T* X( \
  4.         Part *workPart(theSession->Parts()->Work());; ?: R4 C) j0 e
  5.         Part *displayPart(theSession->Parts()->Display());# c0 z% g. ]: g9 O8 w
  6. # J% l  V5 p. I: r+ m
  7.         BodyCollection *bc=workPart->Bodies();8 e7 }4 T4 C1 L3 F. d+ J! ?; R
  8.         BodyCollection::iterator it = bc->begin();//因为只有一个体,所以第一位置元素赋值给下面的body: ~4 s4 V, {( p/ M5 U4 m
  9.         Body *body = (*it);
    1 }9 j5 B8 `, w2 ^
  10.         std::vector<Face*> faces = body->GetFaces();
    . L; h6 i$ b' o  ]$ \
  11.         for(unsigned int j=0;j<faces.size();j++)
    , Z' F0 l! k4 q/ r
  12.         {
    ( ^+ K* u; H- q2 \
  13.                 const char *c1="FACE1";9 z3 {) c6 _! w/ X* W' d
  14.                 const char *c2=faces[j]->Name().GetText();1 q1 R& |8 a# ~
  15.                 if (!strcmp(c2,c1)). ~+ O9 S3 l( g6 K, G
  16.                 {
    7 {: T4 m, M' w2 V  G& t
  17.                         UI *faceui = UI::GetUI();8 ^+ h. B6 `7 N  c
  18.                         faceui->NXMessageBox()->Show("已经找到面",NXMessageBox::DialogTypeInformation,"已经找到特定的面");
    2 D9 h  [" ^1 I
  19.                        
    2 N: Z5 d. ^1 Q9 ^( n
  20.                 }
    $ u4 i% ~$ a# l! P; ]/ }) f
  21.                 else
    % m& }4 L7 @" d; `4 D3 ]" |
  22.                 {5 {" u* G. y2 ]/ H
  23.                         UI *faceui = UI::GetUI();7 E  Y1 h* W/ l
  24.                         faceui->NXMessageBox()->Show("未找到面",NXMessageBox::DialogTypeInformation,faces[j]->Name().getText());4 A- O" O/ e  R. c: \
  25.                         6 y& i1 t/ B9 o. S+ q5 q* h
  26.                 }
    % x0 Z. f1 a! m0 j

  27. ' F' J1 |$ G6 J) W
  28. / w$ n2 \9 u# ^4 T
  29.         }
复制代码

4 c4 B2 t+ j* l' ^" }' `2 r6 h4 M1 O1 e0 k* b
% r' C1 J$ C$ l: q3 @" P& Z  ^
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复 支持 反对

使用道具 举报

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

本版积分规则

在本版发帖
关注公众号
QQ客服返回顶部