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

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

  [复制链接]

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

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

小新 楼主

2014-4-7 19:26:05

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

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

x
本帖最后由 小新 于 2014-4-7 19:51 编辑
/ r5 I5 m; g8 d. r7 }# }) ?. H+ r4 B
  Q# m8 v& X& \- |0 t我做自动化装配,通过代码定义好其约束关系。但是在具体实现过程中,不知道如何找到定义约束关系的某个实体上的特定的面。如图我想将图上箭头所指的面用于建立约束,但是不知道在代码中如何找到这个面。此外我是想用NX Open C++实现,而不是用UFun函数实现。 123.png
6 J% n0 p6 q; w( d( s' E* f1 J
上海点团信息科技有限公司,承接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 , 看看
' p8 e& l: @8 _$ H; u; y9 u$ ~8 d2 v* H; [- g' S% L
要么就是通过几何判断了,遍历所有的面,找出比如面的法相是什么,面的类型,面的一些参数什么的 最终确定是你选择的那个面8 T$ n2 @  V: N# g5 g

( c! @; r! o1 m; d, s$ T  a- I6 _或者直接找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
8 n0 I) _' H; @6 K& M% F& P录制JA , 看看
% G+ e0 Z  E5 W  h  B! r4 D' q6 M% u5 o; F5 i
要么就是通过几何判断了,遍历所有的面,找出比如面的法相是什么,面的类型,面的一些参数 ...
2 K( q# e' A( _7 _
我录制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
- H' i0 g6 l1 c1 r我录制JA后,出现代码Face *face1(dynamic_cast(block1->FindObject("FACE 4 {(250,100,50) BLOCK(1)}"))) ...

0 C8 l9 Y% K8 U/ S4 o对的 最简单的方法就是用UFUN的 UF_OBJ_cylce_by_name 函数0 t9 q! ^9 T& R7 k. T0 R

* p/ h+ A8 N! b# _  \NXOpen C++ 没有类似的这个功能
: X3 C8 A/ ]/ b
  h7 \9 p8 Q* B; y开发时候基本是 ufun + NXopen C++
# Q  k- X& T4 h( E单独的 NXOpen C++ 你可能实现所有的要求
& b  G; T0 H  m8 p! i8 j/ b- e: i( o; J! J
两个要结合用
上海点团信息科技有限公司,承接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
$ Q9 a7 J! @9 C  o对的 最简单的方法就是用UFUN的 UF_OBJ_cylce_by_name 函数
& q2 Q0 X; w3 m/ x8 ^% u
7 p/ s/ d- R* |% _; R: ?NXOpen C++ 没有类似的这个功能

/ ]9 F4 p$ k* n, m+ s 123.png 123454.png 你好,我发现在Face类型继承了一个Name()方法,其函数说明的是:Returns the custom name of the object。我就想这个custom name 是否可能是我在UG给那个特定面命名的那个名字。如果用这个方法返回的custom name 和命名的名字相比较,如果是一致,那么我就从把这个面给保存下来,就算找到了。我按照这个思路用下面的代码验证这个思路。
- R: Y5 R* Y, [2 {+ K5 f3 o% k

  1. 2 n- ~" V+ y' i+ R  t  m5 r
  2. <P>Session *theSession = Session::GetSession();2 B1 I" O$ ^" a6 _5 v
  3. Part *workPart(theSession->Parts()->Work());- K4 o3 U  m, G9 b) I  u
  4. Part *displayPart(theSession->Parts()->Display());
    & ~+ C' H6 k% D& ?* y
  5. BodyCollection *bc=workPart->Bodies();
    1 s7 B* l- \0 D+ _9 i/ n+ a' W
  6. BodyCollection::iterator it = bc->begin();//因为只有一个体,所以第一位置元素赋值给下面的body
    ( }2 X; o+ \0 k  Z- U% d! ~" {
  7. Body *body = (*it);! H& G6 R# E2 \. `) T) ?! q
  8. std::vector<Face*> faces = body->GetFaces();* ?- X; H* W5 \! I$ |
  9. for(unsigned int j=0;j<faces.size();j++)9 O1 l1 ^. ?5 A
  10. {( ]$ h4 c) J# @+ B# D/ z
  11. , l7 Z. `" _7 s) ~, g0 L
  12.       if ((faces[j]->Name().getText())=="FACE1")
    + M  C; x( v2 z, {1 ^5 I
  13.         {</P>
    4 S3 V$ ]4 H' a; X: c; O5 b
  14. <P>             UI *faceui = UI::GetUI();2 d' _! Q' W0 p! w) l
  15.             faceui->NXMessageBox()->Show("已经找到面",NXMessageBox::DialogTypeInformation,"已经找到特定的面");
    / Z9 a# q( W' t6 B4 n
  16.         }% o1 H9 i+ o, e! Y" S
  17.     else) B9 z# C* w( Q" \# E
  18.        {
    8 I; ]! m: r6 g, S
  19.            UI *faceui = UI::GetUI();
    4 A( O/ ?' q4 j# J5 }$ x/ r7 G% M
  20.            faceui->NXMessageBox()->Show("未找到面",NXMessageBox::DialogTypeInformation,faces[j]->Name().getText());
    ; _' X( x* d0 j3 w
  21.        }
    8 Y" k! e7 A; e" ]; p- ]
  22. }</P>
复制代码

0 @1 Y% i* R+ A上述代码能够通过编译。在实际运行中出现了上面图所示的两种结果。从图中看到程序判断,(faces[j]->Name().getText())=="FACE1"结果都为假,所以弹出了6个(6个面)“未找到面”的对话框,由于我估计将对话框内容为Name()返回的custom name。但是有一个对话框中内容就是“FACE1”,其余都是空白。既然有一个是“FACE1”为什么不显示“已经找到面”对话框咧?求指教
- {  L& Y% S) Q3 z% e5 _% t; q6 v
0 u4 d  d6 x" Z8 a
7 k' t# n9 N* d4 M

0 T! H! E! E& e+ q6 [0 W4 x
上海点团信息科技有限公司,承接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 编辑
: v* t" E* g" O; y
小新 发表于 2014-4-8 21:55
/ k" _' z4 S! {% t  Q9 t6 {% h! G你好,我发现在Face类型继承了一个Name()方法,其函数说明的是:Returns the custom name of the objec ...
( Y/ T  L' |7 t8 n7 K& _, F- D  D
1414.png 问题已经解决,按照上述思路是可行的。子所以出现上述问题是因为我在if语句判断时候没有处理好,应该用下面代码;

  1. 7 Q6 k* b3 K' M
  2. 通过上述代码确实找到了特定的面了。+ L6 z$ E; Q% ?' F- N: X) n
  3. [code]Session *theSession = Session::GetSession();
    + O5 r1 ^4 i( F8 w. K# M! Q
  4.         Part *workPart(theSession->Parts()->Work());- ]+ |9 V; V. X: g+ c/ }
  5.         Part *displayPart(theSession->Parts()->Display());
    . |/ j- B, c! V% ~5 Y" W
  6. 0 |9 p- z" E& x* K
  7.         BodyCollection *bc=workPart->Bodies();
    : J, X! r- f' Z/ j. ~" \1 O
  8.         BodyCollection::iterator it = bc->begin();//因为只有一个体,所以第一位置元素赋值给下面的body6 c) w1 k/ z3 W' G7 D9 o
  9.         Body *body = (*it);
    . w% n) ?: j1 k3 n% E
  10.         std::vector<Face*> faces = body->GetFaces();
    5 d) m# b9 c0 W0 x  |
  11.         for(unsigned int j=0;j<faces.size();j++)7 b0 p/ {& c: [' f5 o) E" d
  12.         {
    & Q* U7 K' B2 |% `% r& k
  13.                 const char *c1="FACE1";
    * b' l5 n, h6 p1 }9 M+ d) s. H( j
  14.                 const char *c2=faces[j]->Name().GetText();3 b& u# G6 Y" s
  15.                 if (!strcmp(c2,c1))
    6 j9 Q8 J- s8 d2 a4 d+ W7 W
  16.                 {# z4 B( Y: h' M; h2 N- j7 d' l
  17.                         UI *faceui = UI::GetUI();+ _( @+ x' l0 }3 i: F
  18.                         faceui->NXMessageBox()->Show("已经找到面",NXMessageBox::DialogTypeInformation,"已经找到特定的面");
      v1 T1 N* m: S* @0 P
  19.                        
    0 R/ l2 \6 j- X% h, [. j. v+ D
  20.                 }
    7 U3 K# F/ m. D( x3 W
  21.                 else
      H( R4 P* Z( b$ t1 U
  22.                 {, {  q0 T* o! R! w& I4 y- T
  23.                         UI *faceui = UI::GetUI();  `& a& E* K3 O2 p# c
  24.                         faceui->NXMessageBox()->Show("未找到面",NXMessageBox::DialogTypeInformation,faces[j]->Name().getText());, G6 h/ ?( X  Y: a2 T% L. U
  25.                         , T) P3 e5 d  k/ |
  26.                 }
    / c# ~5 Q& i! S/ ]
  27. ) y* t3 ~4 e3 G
  28. % ?) r# |" u* {6 U( f
  29.         }
复制代码

/ n0 |2 z  L9 m' p5 X
+ Y9 y2 r# N+ q% W8 [/ f0 ?/ Z/ f! ]# k/ @& V! p0 Z+ q* O
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了