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

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

  [复制链接]

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

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

小新 楼主

2014-4-7 19:26:05

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

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

x
本帖最后由 小新 于 2014-4-7 19:51 编辑 8 `4 r1 ?/ B1 B* L( |
% V  G& ?# u' J* _
我做自动化装配,通过代码定义好其约束关系。但是在具体实现过程中,不知道如何找到定义约束关系的某个实体上的特定的面。如图我想将图上箭头所指的面用于建立约束,但是不知道在代码中如何找到这个面。此外我是想用NX Open C++实现,而不是用UFun函数实现。 123.png
7 y" X" |7 t) X5 G" i3 K- _, a
上海点团信息科技有限公司,承接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 , 看看
. A- J8 @: h; x. S* I6 w+ {# F* V  K& `
要么就是通过几何判断了,遍历所有的面,找出比如面的法相是什么,面的类型,面的一些参数什么的 最终确定是你选择的那个面
! y1 O. z2 r  W+ c( A+ R% j
. }  |9 H+ R% [+ d/ j或者直接找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+ O) k3 N: I) d5 j1 _- U
录制JA , 看看
" j% Y6 c7 g1 {* Z' i3 N/ p' D" A( m: G
要么就是通过几何判断了,遍历所有的面,找出比如面的法相是什么,面的类型,面的一些参数 ...

8 [' b" @' c& P, X4 C我录制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
* G. ?5 {( [  A2 ]$ V, X我录制JA后,出现代码Face *face1(dynamic_cast(block1->FindObject("FACE 4 {(250,100,50) BLOCK(1)}"))) ...
" U5 W# A0 \1 V  Q6 H7 x
对的 最简单的方法就是用UFUN的 UF_OBJ_cylce_by_name 函数/ G, F. ^% ~/ X% x% R- K, R2 z1 e( P

. L) b' B" g3 O4 a; M  c$ ?2 I0 zNXOpen C++ 没有类似的这个功能
$ b9 r9 \$ u; d
# G5 J! m* @6 ^# B9 g* W+ c9 D开发时候基本是 ufun + NXopen C++( M. I7 E5 z6 p1 a$ S0 G' Q
单独的 NXOpen C++ 你可能实现所有的要求
' P% t) C  s* ^& O" k
2 b- I; J/ g' R& z, k9 p" s两个要结合用
上海点团信息科技有限公司,承接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:597 z% n$ G2 W) T
对的 最简单的方法就是用UFUN的 UF_OBJ_cylce_by_name 函数7 j4 E  `7 K: R: p

9 a: S) n' `0 c. o9 A0 [! cNXOpen C++ 没有类似的这个功能
, E, y& n% \4 o7 g  ]/ k2 e' m4 q( `
123.png 123454.png 你好,我发现在Face类型继承了一个Name()方法,其函数说明的是:Returns the custom name of the object。我就想这个custom name 是否可能是我在UG给那个特定面命名的那个名字。如果用这个方法返回的custom name 和命名的名字相比较,如果是一致,那么我就从把这个面给保存下来,就算找到了。我按照这个思路用下面的代码验证这个思路。
3 G4 ?8 i9 b/ t+ J6 A5 G
  1. 5 F7 l% e3 l7 E6 b" j0 y
  2. <P>Session *theSession = Session::GetSession();; X3 t" D+ i2 f* ?
  3. Part *workPart(theSession->Parts()->Work());
    " v, V* y  u% K- i
  4. Part *displayPart(theSession->Parts()->Display());
    % Z* Z& g& G3 l& a+ N
  5. BodyCollection *bc=workPart->Bodies();
    $ f' m2 ~, O5 \0 K- `' }9 l. B
  6. BodyCollection::iterator it = bc->begin();//因为只有一个体,所以第一位置元素赋值给下面的body. p5 C( Y, s# l5 n# [2 b1 i/ A! y
  7. Body *body = (*it);* H0 R5 P3 e1 @* r' J! A
  8. std::vector<Face*> faces = body->GetFaces();0 V9 Z  |; p' G, G! o/ z8 C
  9. for(unsigned int j=0;j<faces.size();j++)4 C5 L( V0 g  D1 z
  10. {4 F. G  k5 r- a, x# r( t, _4 T

  11. 3 `4 Y% B9 C. t" ?7 J1 A
  12.       if ((faces[j]->Name().getText())=="FACE1")
    # b- v, |' @# [& y& s8 t" T
  13.         {</P>1 ~. \9 j- v. F; m
  14. <P>             UI *faceui = UI::GetUI();
    # C7 d$ f! w# q# {& {/ V
  15.             faceui->NXMessageBox()->Show("已经找到面",NXMessageBox::DialogTypeInformation,"已经找到特定的面");
    0 k/ e! S% T; G" v6 o+ M) p
  16.         }
    % m! v+ ]5 Q0 V+ S; D4 H
  17.     else7 ?9 O. Z' Q  w8 p- L+ k6 s/ l
  18.        {# Y7 b1 b: U! t. H/ S
  19.            UI *faceui = UI::GetUI();
    % m9 [6 n. m! n" _5 ^$ F
  20.            faceui->NXMessageBox()->Show("未找到面",NXMessageBox::DialogTypeInformation,faces[j]->Name().getText());$ r8 F, ^1 P7 n. q
  21.        }
    ; f, C; @" c! E5 E& z% `
  22. }</P>
复制代码
7 C& N1 e9 ^" ^$ n1 ]) X
上述代码能够通过编译。在实际运行中出现了上面图所示的两种结果。从图中看到程序判断,(faces[j]->Name().getText())=="FACE1"结果都为假,所以弹出了6个(6个面)“未找到面”的对话框,由于我估计将对话框内容为Name()返回的custom name。但是有一个对话框中内容就是“FACE1”,其余都是空白。既然有一个是“FACE1”为什么不显示“已经找到面”对话框咧?求指教, p, q! k( g' o8 \8 c) N
1 ^* ^+ u+ |  n% P
$ I+ L% V) P$ D1 x
) x0 S- d3 l& R* t8 l' N. K& o
+ V4 r  i8 k/ ^0 _- {2 z
上海点团信息科技有限公司,承接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 M' p2 _3 f2 {% a6 J/ h% M
小新 发表于 2014-4-8 21:55
: e( I- f  e; \- k) p9 ~! z8 @你好,我发现在Face类型继承了一个Name()方法,其函数说明的是:Returns the custom name of the objec ...
9 q  ~) v# c: {
1414.png 问题已经解决,按照上述思路是可行的。子所以出现上述问题是因为我在if语句判断时候没有处理好,应该用下面代码;
  1. 0 f$ ]# q, ^) G' `  U4 o; @! Y
  2. 通过上述代码确实找到了特定的面了。
    % x) ?4 C0 f  h7 C" I
  3. [code]Session *theSession = Session::GetSession();
    * g/ A. Q& l& m
  4.         Part *workPart(theSession->Parts()->Work());. b; [3 j1 q/ R) Y2 R9 R& `/ `
  5.         Part *displayPart(theSession->Parts()->Display());
    ( ^, u8 W- P0 _; G" O+ G9 l

  6. 8 p1 }; K# n4 v3 N% f
  7.         BodyCollection *bc=workPart->Bodies();6 e5 n' S4 A/ N* \) K  ^
  8.         BodyCollection::iterator it = bc->begin();//因为只有一个体,所以第一位置元素赋值给下面的body
    - a/ M& V3 g! M3 |1 g; q. u1 n- x
  9.         Body *body = (*it);
    5 u3 p* t; N' E- n) D9 r
  10.         std::vector<Face*> faces = body->GetFaces();
    4 e- J0 w3 o2 \+ `/ D
  11.         for(unsigned int j=0;j<faces.size();j++)+ E1 ^& n8 d5 L! d+ E( R
  12.         {& t6 S+ e7 `+ j" b
  13.                 const char *c1="FACE1";: v+ L- \6 R9 J! f0 ?- h% m
  14.                 const char *c2=faces[j]->Name().GetText();
    ) K* u: l- E9 p2 c& C; X
  15.                 if (!strcmp(c2,c1))
    5 E2 D% J' P! ?. |' e3 ^
  16.                 {
    4 F. j3 }3 M3 [# G& z
  17.                         UI *faceui = UI::GetUI();" q0 `  V( w- J3 x% K7 m+ r( P
  18.                         faceui->NXMessageBox()->Show("已经找到面",NXMessageBox::DialogTypeInformation,"已经找到特定的面");
    ! e. S  n0 R1 q9 v
  19.                        
    ( o! D; s* S6 {9 w% D3 |
  20.                 }; Q  P, X: `4 h; Q% m2 ?
  21.                 else- B7 `" @; u6 ~- D% }1 ^; g" J
  22.                 {* A& T4 q- _* ^7 [5 T# P* [
  23.                         UI *faceui = UI::GetUI();
    " Y# [0 l7 ^0 _6 |8 z$ C# _
  24.                         faceui->NXMessageBox()->Show("未找到面",NXMessageBox::DialogTypeInformation,faces[j]->Name().getText());
    : r1 @' w2 |, O& f2 b  J5 E
  25.                        
    . v5 I# p& F+ D2 G! v# ^
  26.                 }3 m9 L; J2 T. d( a" m5 K
  27.   ~9 ?9 l5 t4 y  p- ^# j
  28. # w, ?7 d" j. x) s
  29.         }
复制代码

! u. n# D# g$ B3 Y! w. o+ R3 \1 U2 N

% S$ ~, f1 I! \. @+ j
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了