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

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

  [复制链接]

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

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

小新 楼主

2014-4-7 19:26:05

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

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

x
本帖最后由 小新 于 2014-4-7 19:51 编辑
5 e1 y: X' t* K6 G  z' V
7 f) f+ x4 i' D* h我做自动化装配,通过代码定义好其约束关系。但是在具体实现过程中,不知道如何找到定义约束关系的某个实体上的特定的面。如图我想将图上箭头所指的面用于建立约束,但是不知道在代码中如何找到这个面。此外我是想用NX Open C++实现,而不是用UFun函数实现。 123.png
( D" I5 |% @3 K4 Z
上海点团信息科技有限公司,承接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 , 看看9 h2 `, a$ C8 `% F

) n% [( I7 f7 A3 l5 k, m2 t, U$ Y要么就是通过几何判断了,遍历所有的面,找出比如面的法相是什么,面的类型,面的一些参数什么的 最终确定是你选择的那个面
7 F& Y5 J2 c+ M0 g! \: Y5 [$ q! u* B. d2 `; f/ m6 W
或者直接找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
( q$ y1 F) x4 }2 p/ |录制JA , 看看6 Q# }8 n- f: J4 O5 w5 d: p" m
; i  D( P& N2 O- O
要么就是通过几何判断了,遍历所有的面,找出比如面的法相是什么,面的类型,面的一些参数 ...

  Y* [+ w4 Z( k+ _. M5 d: }我录制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; I% Q' f' Q8 B# g: g; j
我录制JA后,出现代码Face *face1(dynamic_cast(block1->FindObject("FACE 4 {(250,100,50) BLOCK(1)}"))) ...
0 L6 v  L/ _& R, J2 n1 `
对的 最简单的方法就是用UFUN的 UF_OBJ_cylce_by_name 函数
; d" O! Z$ i) N5 ^+ Z
! @3 B8 N" l* B' yNXOpen C++ 没有类似的这个功能
- o0 C3 T' z. _1 \( O/ _  E2 K0 l4 q
9 l* ~- e' W  d开发时候基本是 ufun + NXopen C++
; ]6 }& c: y- W( {6 C, @单独的 NXOpen C++ 你可能实现所有的要求
  f" q5 X$ A7 H  A
! p1 l* Z: m' Y+ t3 n3 ?两个要结合用
上海点团信息科技有限公司,承接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:590 v! c9 ~, P& c) J% L
对的 最简单的方法就是用UFUN的 UF_OBJ_cylce_by_name 函数& w: @; C0 Z- a6 u, B

, S, e3 s( Y& vNXOpen C++ 没有类似的这个功能

* f( S' M$ \" n( i/ L+ ^4 D 123.png 123454.png 你好,我发现在Face类型继承了一个Name()方法,其函数说明的是:Returns the custom name of the object。我就想这个custom name 是否可能是我在UG给那个特定面命名的那个名字。如果用这个方法返回的custom name 和命名的名字相比较,如果是一致,那么我就从把这个面给保存下来,就算找到了。我按照这个思路用下面的代码验证这个思路。, n+ a' n5 L9 q' _; l( F4 `

  1. ; s. H, h. ^& `! J0 v
  2. <P>Session *theSession = Session::GetSession();
    - w/ X& V* b" x: |) c, ]! c* x* V+ j
  3. Part *workPart(theSession->Parts()->Work());& \' b% g$ T( i- |, X% I5 f
  4. Part *displayPart(theSession->Parts()->Display());
    - ~' i+ G$ S* E: {+ @  s
  5. BodyCollection *bc=workPart->Bodies();
    0 _4 s) |: s  |! C- k* A. a& ?1 p
  6. BodyCollection::iterator it = bc->begin();//因为只有一个体,所以第一位置元素赋值给下面的body9 k7 L9 I2 U1 e( ~8 b: \
  7. Body *body = (*it);
    9 g2 g+ Q5 `4 }4 ?6 S' F. ~
  8. std::vector<Face*> faces = body->GetFaces();9 X# `- W( c( U1 J, ], ?" ~. u
  9. for(unsigned int j=0;j<faces.size();j++)/ U" N; j4 d8 [: F
  10. {8 k3 n& w' h0 @9 J, a% D% f

  11. % E* C# j6 T* m2 M* D+ [7 e3 d  N
  12.       if ((faces[j]->Name().getText())=="FACE1")
    - i/ A# K( o6 S/ c" H$ R
  13.         {</P>
    7 {( E9 b4 z3 L5 F: f
  14. <P>             UI *faceui = UI::GetUI();+ n  ^2 G" l# K! {! o+ F
  15.             faceui->NXMessageBox()->Show("已经找到面",NXMessageBox::DialogTypeInformation,"已经找到特定的面");
    2 f7 G" ^- Z: s
  16.         }1 F1 U) p+ t: h, K$ U# L. Z
  17.     else+ H3 ?/ Y; {2 l1 P' h' i% H2 ~
  18.        {% P9 y5 F2 M/ L' e
  19.            UI *faceui = UI::GetUI();
    8 f* H6 D6 i/ d
  20.            faceui->NXMessageBox()->Show("未找到面",NXMessageBox::DialogTypeInformation,faces[j]->Name().getText());: N1 i$ n$ Q2 G& T
  21.        }
    ; Q! f  q5 @$ H. K+ a: i
  22. }</P>
复制代码
: Q( u" j6 R  e( k8 P
上述代码能够通过编译。在实际运行中出现了上面图所示的两种结果。从图中看到程序判断,(faces[j]->Name().getText())=="FACE1"结果都为假,所以弹出了6个(6个面)“未找到面”的对话框,由于我估计将对话框内容为Name()返回的custom name。但是有一个对话框中内容就是“FACE1”,其余都是空白。既然有一个是“FACE1”为什么不显示“已经找到面”对话框咧?求指教$ \" u1 G, y* H, W

! \# w6 n" N8 w! ^8 l. e/ W( }7 z1 p! s8 U' e; {

5 m/ L, q/ p( K/ c! y& ~3 G9 c* D

; x6 Z9 [6 F% ?+ ]! M/ v4 z' F8 B6 F
上海点团信息科技有限公司,承接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 编辑 0 c  z$ O+ |' o9 Y
小新 发表于 2014-4-8 21:55
" ^8 T, c- j3 |& I$ |你好,我发现在Face类型继承了一个Name()方法,其函数说明的是:Returns the custom name of the objec ...

) N, R$ L  {6 P; F3 ? 1414.png 问题已经解决,按照上述思路是可行的。子所以出现上述问题是因为我在if语句判断时候没有处理好,应该用下面代码;

  1. : S/ {& a! q) f0 K0 _/ c$ c
  2. 通过上述代码确实找到了特定的面了。
    9 c0 b) k: x6 n: z
  3. [code]Session *theSession = Session::GetSession();! L5 J/ z5 u: H8 i
  4.         Part *workPart(theSession->Parts()->Work());
    . q4 X0 z- @# `* Z
  5.         Part *displayPart(theSession->Parts()->Display());; N( o3 Z% @$ y# T

  6. % m) V7 ]2 {- u
  7.         BodyCollection *bc=workPart->Bodies();
    4 D9 L; o  ^) |& `3 Q/ O
  8.         BodyCollection::iterator it = bc->begin();//因为只有一个体,所以第一位置元素赋值给下面的body! \& y% d0 k7 e6 T7 Q6 G
  9.         Body *body = (*it);" W6 q8 Y2 m4 T* b  N3 U/ s
  10.         std::vector<Face*> faces = body->GetFaces();
    ) k+ s) L1 J  |% C; G! b
  11.         for(unsigned int j=0;j<faces.size();j++)) c: G0 Y8 X& f0 s0 R! @3 |
  12.         {( o6 {2 q& o% t" ?/ Q+ m
  13.                 const char *c1="FACE1";  e# d% g  D+ j- }
  14.                 const char *c2=faces[j]->Name().GetText();( x8 \( P% _! t
  15.                 if (!strcmp(c2,c1))
    0 }7 l6 R' M! v7 \& c
  16.                 {
    - F' n8 h" l( i+ u: x0 c
  17.                         UI *faceui = UI::GetUI();
    ( d) L/ n* @8 P, j1 v
  18.                         faceui->NXMessageBox()->Show("已经找到面",NXMessageBox::DialogTypeInformation,"已经找到特定的面");
    * J. C9 u' b$ U" }) Z1 A
  19.                         - M2 \' q, {$ f: D5 [- a2 n" a
  20.                 }
    ) ?9 ]3 u8 s1 z
  21.                 else
      F3 d7 _! I/ v. [( [* p
  22.                 {
    5 p0 U5 {/ b6 q5 ^) F+ w
  23.                         UI *faceui = UI::GetUI();+ `8 ~" ~! k. _6 ~; L, n
  24.                         faceui->NXMessageBox()->Show("未找到面",NXMessageBox::DialogTypeInformation,faces[j]->Name().getText());  ?1 X5 m! d* e/ ^; \' m
  25.                         5 G0 @7 }/ t2 M  S# c% G
  26.                 }4 K4 G/ L' X; d1 W" H
  27. - x0 K* _  D, |: H- a
  28. % h& ^1 [+ G8 E7 M( j/ r+ v
  29.         }
复制代码

' i' r! g# ^$ {4 X" `# y# X8 A: k7 k( H; {  ^1 d7 n+ A3 p
% W) Q6 |/ y- ^! A2 K
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了