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

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

  [复制链接]

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

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

小新 楼主

2014-4-7 19:26:05

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

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

x
本帖最后由 小新 于 2014-4-7 19:51 编辑
1 l! P# w% V7 g: [6 f  H6 J2 l+ n/ Y( L
我做自动化装配,通过代码定义好其约束关系。但是在具体实现过程中,不知道如何找到定义约束关系的某个实体上的特定的面。如图我想将图上箭头所指的面用于建立约束,但是不知道在代码中如何找到这个面。此外我是想用NX Open C++实现,而不是用UFun函数实现。 123.png
% {; T% G5 y& U7 H, r, r: Y! W
上海点团信息科技有限公司,承接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 , 看看
1 }: m! d7 j4 \- c, G# G+ g" T+ Q! d% ]! k6 Z
要么就是通过几何判断了,遍历所有的面,找出比如面的法相是什么,面的类型,面的一些参数什么的 最终确定是你选择的那个面
  r$ r: I, Q. N; v
( O  W1 {* D; e& \或者直接找tag
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复 支持 反对

使用道具 举报

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

小新 板凳

2014-4-8 15:21:21

admin 发表于 2014-4-8 11:20
# }+ K7 h, n+ Z) z录制JA , 看看
, m" |5 `. P3 `. x. h; W. d) S2 w; @. U0 B1 i
要么就是通过几何判断了,遍历所有的面,找出比如面的法相是什么,面的类型,面的一些参数 ...

+ }8 L' o( \  ^. 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+ ]. ]8 V* F: _
我录制JA后,出现代码Face *face1(dynamic_cast(block1->FindObject("FACE 4 {(250,100,50) BLOCK(1)}"))) ...
& E( X3 D0 }& R5 n3 f; k
对的 最简单的方法就是用UFUN的 UF_OBJ_cylce_by_name 函数9 ]& Z6 P0 N3 H
* a. c+ L, B- W4 y! M. f
NXOpen C++ 没有类似的这个功能
1 a( D1 u& q3 w4 r/ _: Q) }7 N- ^% E! S
开发时候基本是 ufun + NXopen C++
# |! t6 n/ O. J: b0 ^, ^" k单独的 NXOpen C++ 你可能实现所有的要求
$ a. U% V1 r& Q7 M0 e9 I) W9 l& `5 u4 w& J' z6 x! J2 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 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- O0 j, j1 c  H1 |  e( y
对的 最简单的方法就是用UFUN的 UF_OBJ_cylce_by_name 函数
' t0 z) B, m* x/ n; n, n' G) ?9 ~3 e& u% a
NXOpen C++ 没有类似的这个功能
! v, E5 i, C. X- }
123.png 123454.png 你好,我发现在Face类型继承了一个Name()方法,其函数说明的是:Returns the custom name of the object。我就想这个custom name 是否可能是我在UG给那个特定面命名的那个名字。如果用这个方法返回的custom name 和命名的名字相比较,如果是一致,那么我就从把这个面给保存下来,就算找到了。我按照这个思路用下面的代码验证这个思路。
# B# B: U; p- ?3 h+ u

  1. 2 D) ^1 Q. a, o
  2. <P>Session *theSession = Session::GetSession();
    3 [. M* Z* N! V2 V8 G& U
  3. Part *workPart(theSession->Parts()->Work());9 J3 x% H; c- Z% N
  4. Part *displayPart(theSession->Parts()->Display());; b8 s' h& t. q6 ~/ k2 r% ^
  5. BodyCollection *bc=workPart->Bodies();
    " |7 \9 n" l! \: i4 ^* i
  6. BodyCollection::iterator it = bc->begin();//因为只有一个体,所以第一位置元素赋值给下面的body
    ' k  D7 y6 T7 n$ D: D# b: W4 o6 n
  7. Body *body = (*it);$ h3 f& z6 L: {4 U
  8. std::vector<Face*> faces = body->GetFaces();
    8 P  u* q2 ]- t) z+ D
  9. for(unsigned int j=0;j<faces.size();j++)$ }. q8 ]9 [; o; {# o
  10. {5 d/ ~, Z) \3 r' J; p& ]

  11. ' [" Z) p  n; H; N, T
  12.       if ((faces[j]->Name().getText())=="FACE1")
    2 P* U  c  Q8 d5 ]
  13.         {</P>
    # V4 r$ x" H+ [3 q: n  |& _; w& _
  14. <P>             UI *faceui = UI::GetUI();
    9 }! z# @4 U1 P4 p! o" ^
  15.             faceui->NXMessageBox()->Show("已经找到面",NXMessageBox::DialogTypeInformation,"已经找到特定的面");  x& B  f5 B/ j# n
  16.         }6 u, n% M/ ]2 A
  17.     else
    1 `' o0 G% c! D7 U' S$ H: i, v
  18.        {8 b; q9 s7 \. j0 u5 f, O
  19.            UI *faceui = UI::GetUI();
    : c5 u4 W( I9 Q3 a6 f& O. \
  20.            faceui->NXMessageBox()->Show("未找到面",NXMessageBox::DialogTypeInformation,faces[j]->Name().getText());
    : n, U* Q/ u# W3 a4 F: Z
  21.        }
    # f2 A5 e9 x$ x+ u8 c- O& D
  22. }</P>
复制代码

5 `; z) h( B9 X3 l上述代码能够通过编译。在实际运行中出现了上面图所示的两种结果。从图中看到程序判断,(faces[j]->Name().getText())=="FACE1"结果都为假,所以弹出了6个(6个面)“未找到面”的对话框,由于我估计将对话框内容为Name()返回的custom name。但是有一个对话框中内容就是“FACE1”,其余都是空白。既然有一个是“FACE1”为什么不显示“已经找到面”对话框咧?求指教
; y4 ]/ Z) X: o% y" |# [- P3 N+ r
0 ?5 y' q' h+ B  M/ i

- p2 n' W% t$ L0 }

% K* R8 r+ V: ?5 I, g4 o
上海点团信息科技有限公司,承接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 编辑
9 u: |" P9 Q  |: O9 n* F" ~& q% o
小新 发表于 2014-4-8 21:55
$ B) I# k7 q- S  i8 W7 h你好,我发现在Face类型继承了一个Name()方法,其函数说明的是:Returns the custom name of the objec ...

# C5 i/ `3 s( B2 F$ [; ], ~ 1414.png 问题已经解决,按照上述思路是可行的。子所以出现上述问题是因为我在if语句判断时候没有处理好,应该用下面代码;
  1. ) v' J$ R0 s+ [& u8 r) G. H7 J
  2. 通过上述代码确实找到了特定的面了。5 z) j* l/ e9 x# S, ?2 ?" ^, X
  3. [code]Session *theSession = Session::GetSession();$ Z5 ^+ Y: D  B  `! q  G
  4.         Part *workPart(theSession->Parts()->Work());4 {4 t1 w$ O" S( C* I1 E' i
  5.         Part *displayPart(theSession->Parts()->Display());) `# L, ~* @8 O& ?8 u. }# j

  6. 7 h- B7 q1 h6 r1 `0 Z
  7.         BodyCollection *bc=workPart->Bodies();4 w% I8 |/ U4 {
  8.         BodyCollection::iterator it = bc->begin();//因为只有一个体,所以第一位置元素赋值给下面的body
    3 M' h6 A4 ~/ v9 l  Z
  9.         Body *body = (*it);
    ! c2 D# a9 A3 E" [2 F) g
  10.         std::vector<Face*> faces = body->GetFaces();
    6 h% _# ~0 k$ i/ T4 p
  11.         for(unsigned int j=0;j<faces.size();j++)
    - o( W& a& b- U8 c- r, l$ n. o
  12.         {
    - c  o! S# g6 t+ A  G( \
  13.                 const char *c1="FACE1";
    / d9 t, G; H4 B+ i/ l2 ^- }
  14.                 const char *c2=faces[j]->Name().GetText();6 U, o8 Q4 \  Y# v, C5 d$ V& I' o
  15.                 if (!strcmp(c2,c1))
    9 n$ o& V# A( o
  16.                 {2 @( J( F9 V8 z4 Z" g/ \5 L4 z
  17.                         UI *faceui = UI::GetUI();7 l9 \- X" S% @4 H% U/ X
  18.                         faceui->NXMessageBox()->Show("已经找到面",NXMessageBox::DialogTypeInformation,"已经找到特定的面");! x  ?$ y% J8 _& Z5 F
  19.                        
    ! b' u- w: E( ]: V8 c
  20.                 }. Z* [. P6 Q. Z) |1 a
  21.                 else
    . [6 B8 H# E6 B) Z5 K8 }
  22.                 {
    7 [/ D9 j3 M" W) ?3 h6 T8 o
  23.                         UI *faceui = UI::GetUI();2 J& D. r. Z) l) ]; W8 c5 i% K
  24.                         faceui->NXMessageBox()->Show("未找到面",NXMessageBox::DialogTypeInformation,faces[j]->Name().getText());: W4 N# \  C% a6 V( a3 ^
  25.                         , @$ K' J* i5 ], Q
  26.                 }
    9 M/ l' X$ W! {! t1 i+ c
  27. , k2 }! {& _" G% o3 H# l
  28. , J: r& F+ c: u4 k9 X
  29.         }
复制代码

' X, n4 @7 |$ {9 F+ j  w4 f3 F
7 v1 w. p3 {4 R/ ]+ m; M. `1 s6 H' \3 Y  @$ ^# ~& p) Y( Y
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了