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

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

  [复制链接]

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

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

小新 楼主

2014-4-7 19:26:05

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

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

x
本帖最后由 小新 于 2014-4-7 19:51 编辑 : t3 L$ a# z0 I+ f$ _: x1 d5 Q6 R
+ i3 V3 T) G) A- e
我做自动化装配,通过代码定义好其约束关系。但是在具体实现过程中,不知道如何找到定义约束关系的某个实体上的特定的面。如图我想将图上箭头所指的面用于建立约束,但是不知道在代码中如何找到这个面。此外我是想用NX Open C++实现,而不是用UFun函数实现。 123.png / H2 g& t1 V7 R' i
上海点团信息科技有限公司,承接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 , 看看
" ]% D1 S' s; @! g, S5 ~
3 D( v6 R" B6 R; E* V3 f要么就是通过几何判断了,遍历所有的面,找出比如面的法相是什么,面的类型,面的一些参数什么的 最终确定是你选择的那个面
( j$ `" f2 o- ^1 a1 D; I! {4 {2 b1 s0 F' Q
或者直接找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
5 n/ x8 \6 w) t; ^/ F' t: V录制JA , 看看
7 f/ @7 O8 R/ j; Z
. ~8 \( |$ n. Y$ @要么就是通过几何判断了,遍历所有的面,找出比如面的法相是什么,面的类型,面的一些参数 ...

! u% W2 R$ H, B我录制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
% z/ D& ~: e2 V/ x我录制JA后,出现代码Face *face1(dynamic_cast(block1->FindObject("FACE 4 {(250,100,50) BLOCK(1)}"))) ...

; q+ y0 ?9 y0 Y: U2 }1 U' H2 ?对的 最简单的方法就是用UFUN的 UF_OBJ_cylce_by_name 函数, `# }* W, ]/ t0 ~$ W0 r; t
, s' O& _8 L/ K1 @) G+ c
NXOpen C++ 没有类似的这个功能 % }1 t/ F6 V2 m% ^2 Z1 F7 o, m
7 Z1 m4 y( p/ O, n) n' |$ i
开发时候基本是 ufun + NXopen C++; F" `5 E( j% w8 j
单独的 NXOpen C++ 你可能实现所有的要求
% H3 D0 k, C: Y  \( n' O) h/ `. P( J. R7 B' X8 b& [! ]
两个要结合用
上海点团信息科技有限公司,承接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:594 }" ]- `1 k8 s4 F5 J: f
对的 最简单的方法就是用UFUN的 UF_OBJ_cylce_by_name 函数
% D0 l: v6 O5 c: h3 i; x5 k
* }1 v/ A. H- B/ @+ F4 v3 C8 dNXOpen C++ 没有类似的这个功能

5 p3 [+ z; I/ m 123.png 123454.png 你好,我发现在Face类型继承了一个Name()方法,其函数说明的是:Returns the custom name of the object。我就想这个custom name 是否可能是我在UG给那个特定面命名的那个名字。如果用这个方法返回的custom name 和命名的名字相比较,如果是一致,那么我就从把这个面给保存下来,就算找到了。我按照这个思路用下面的代码验证这个思路。2 k) j) R$ L% X1 m  H: L

  1. . ?6 p6 V  A' }3 D7 C
  2. <P>Session *theSession = Session::GetSession();
    & y; [* w5 d. A: P! ?# y
  3. Part *workPart(theSession->Parts()->Work());8 V1 ~8 H3 a9 L) u* V
  4. Part *displayPart(theSession->Parts()->Display());* M6 m; Y) H1 C0 Z! i( E% H
  5. BodyCollection *bc=workPart->Bodies();4 t7 t: v7 u1 D; J( J1 n( T3 b
  6. BodyCollection::iterator it = bc->begin();//因为只有一个体,所以第一位置元素赋值给下面的body1 S# j& d; S. @, V" a
  7. Body *body = (*it);
    . k- g0 f9 H% K! @; p
  8. std::vector<Face*> faces = body->GetFaces();4 Q2 `9 k5 M# b6 G' [4 P& J
  9. for(unsigned int j=0;j<faces.size();j++)
    5 ~0 m2 F9 |' n0 A
  10. {
    8 k9 h: A! f. r3 Y1 f! V$ v, W& Z

  11. ) n9 O( U5 X4 G/ S7 \" C9 ]3 S$ K
  12.       if ((faces[j]->Name().getText())=="FACE1")
    $ m3 @! K% X! y
  13.         {</P>
    ; v6 h9 m- a6 B) L- R* _
  14. <P>             UI *faceui = UI::GetUI();) c* t' |5 W9 P# ^+ r7 W% K$ ?. }4 `
  15.             faceui->NXMessageBox()->Show("已经找到面",NXMessageBox::DialogTypeInformation,"已经找到特定的面");. E4 }7 ~6 L2 k, @
  16.         }
    ) [3 X. N7 Z6 s% v
  17.     else% E$ g3 K% k$ j
  18.        {
    # z5 _4 q4 D3 I
  19.            UI *faceui = UI::GetUI();0 Z  L$ L. S) V+ w5 t. D) N- e
  20.            faceui->NXMessageBox()->Show("未找到面",NXMessageBox::DialogTypeInformation,faces[j]->Name().getText());: ?/ Y/ F4 r! u+ Y" N+ c1 ^6 ?" w0 Z
  21.        }9 _) p1 @; K- @1 t1 g# P
  22. }</P>
复制代码

6 P7 {  ?, v8 F" T上述代码能够通过编译。在实际运行中出现了上面图所示的两种结果。从图中看到程序判断,(faces[j]->Name().getText())=="FACE1"结果都为假,所以弹出了6个(6个面)“未找到面”的对话框,由于我估计将对话框内容为Name()返回的custom name。但是有一个对话框中内容就是“FACE1”,其余都是空白。既然有一个是“FACE1”为什么不显示“已经找到面”对话框咧?求指教) W) _2 N4 J1 _2 A5 r* @
2 G0 ]* E9 ?$ [' {

$ M6 }5 I+ g2 d. w
. V: y/ W, z% `' x6 Z

# f2 h8 E* G# ~7 i; ]9 g( 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 编辑 , D# b) Q' Q. [4 U$ h
小新 发表于 2014-4-8 21:55/ ~2 a$ ^: r% X7 _; i, p1 {
你好,我发现在Face类型继承了一个Name()方法,其函数说明的是:Returns the custom name of the objec ...
4 M3 J8 O. ^' z- D( B; V( l6 `  x2 y5 M
1414.png 问题已经解决,按照上述思路是可行的。子所以出现上述问题是因为我在if语句判断时候没有处理好,应该用下面代码;
  1. 0 m: E! @6 J9 o; l
  2. 通过上述代码确实找到了特定的面了。) M" n. Q& `6 D0 q+ U
  3. [code]Session *theSession = Session::GetSession();
    & y5 P9 C" [7 t+ \
  4.         Part *workPart(theSession->Parts()->Work());
    " `" t3 U7 E3 e/ Y
  5.         Part *displayPart(theSession->Parts()->Display());
    * T9 `$ Q! v; p3 M0 M

  6. 1 N; ?. E* N, d' I% v) L+ P5 t
  7.         BodyCollection *bc=workPart->Bodies();
    , Z; R3 }( b, q
  8.         BodyCollection::iterator it = bc->begin();//因为只有一个体,所以第一位置元素赋值给下面的body
    ' b( F) [/ n* ~6 l+ L
  9.         Body *body = (*it);
    - V. P# A2 K; D* K
  10.         std::vector<Face*> faces = body->GetFaces();# H( R# H2 Y- x' J
  11.         for(unsigned int j=0;j<faces.size();j++)
    ' `" t, r6 Y7 p2 K8 i0 ^
  12.         {
    $ f7 z- ^, f) A$ F
  13.                 const char *c1="FACE1";, O. b" U: o" n6 U7 j: H3 L) ^
  14.                 const char *c2=faces[j]->Name().GetText();: v, Q5 `. {% d% L( h
  15.                 if (!strcmp(c2,c1))# @& x0 _& t) H8 v
  16.                 {
    % S0 p7 t* S& P  k4 s, ^; B3 v
  17.                         UI *faceui = UI::GetUI();' X7 X- j# J. n: t( U( W" @
  18.                         faceui->NXMessageBox()->Show("已经找到面",NXMessageBox::DialogTypeInformation,"已经找到特定的面");. u' N- r, ]- v! `" z. W
  19.                        
    * s$ ]) t1 j5 d( q/ w2 P, W
  20.                 }5 ]5 K/ q; N9 C3 y: C
  21.                 else7 m& z4 F3 Z$ L
  22.                 {
    " E* k/ {& n1 R. ], ~/ m
  23.                         UI *faceui = UI::GetUI();
    8 t/ h( |0 u& q
  24.                         faceui->NXMessageBox()->Show("未找到面",NXMessageBox::DialogTypeInformation,faces[j]->Name().getText());# b8 `+ U* P" ?- _
  25.                         0 s/ B8 J" V1 K  P3 h# f8 s; H; [
  26.                 }
    # T* w! O% b- ^! k

  27. , q" `- a7 X1 `! W# H' {4 g$ s' ]
  28. * A1 |, V2 Z" p
  29.         }
复制代码

1 @7 k' r) m' A- ^9 x) T0 f- A
- o. ]) S3 a: B5 n, K# _: u+ r) p: c  w/ c/ Z! q+ A5 w' j0 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二次开发专题模块培训报名开始啦

    我知道了