PLM之家PLMHome-工业软件践行者

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

  [复制链接]

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

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

小新 楼主

2014-4-7 19:26:05

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

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

x
本帖最后由 小新 于 2014-4-7 19:51 编辑
; t# s# p5 P: K$ Q7 M8 O  w
4 s& u. x% Y+ b3 c. N& k我做自动化装配,通过代码定义好其约束关系。但是在具体实现过程中,不知道如何找到定义约束关系的某个实体上的特定的面。如图我想将图上箭头所指的面用于建立约束,但是不知道在代码中如何找到这个面。此外我是想用NX Open C++实现,而不是用UFun函数实现。 123.png * ~8 p0 r% r+ j! y+ F
上海点团信息科技有限公司,承接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 A/ y, k! ]9 H% e! `9 H$ s

# c0 N3 f& `7 ?" F要么就是通过几何判断了,遍历所有的面,找出比如面的法相是什么,面的类型,面的一些参数什么的 最终确定是你选择的那个面3 q1 w( l4 {- M) p, q1 L2 [8 [3 d7 g

9 z$ c6 y. Q9 P+ m$ {1 S! L或者直接找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: ?. @( G: I. ^& r# }% q" O- N
录制JA , 看看( B& Z9 y3 E4 P/ K& L9 M
: E& e% V) e9 e- s% n$ ?
要么就是通过几何判断了,遍历所有的面,找出比如面的法相是什么,面的类型,面的一些参数 ...

; A* ^6 [  z. |) B/ v$ r& k- V我录制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
2 a6 x- J3 W" ~( Y3 I我录制JA后,出现代码Face *face1(dynamic_cast(block1->FindObject("FACE 4 {(250,100,50) BLOCK(1)}"))) ...

4 P2 Z; S8 n* L. M* n. t对的 最简单的方法就是用UFUN的 UF_OBJ_cylce_by_name 函数0 w1 c) X& I+ v. `  b/ z8 V2 U7 Z

# n+ h0 s" c6 }; j% P) e6 ^NXOpen C++ 没有类似的这个功能 2 A! S5 g$ y+ ]: e0 `6 [
. Y9 s  G' |& K  }+ i
开发时候基本是 ufun + NXopen C++
$ F, h2 R- \9 P单独的 NXOpen C++ 你可能实现所有的要求 * e0 h- v+ }! X; e5 z2 P: s6 u
) s1 b2 c% f- D  A6 D
两个要结合用
上海点团信息科技有限公司,承接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
0 d1 }" ~" v- J! c: K7 x9 }& ?- ~4 z对的 最简单的方法就是用UFUN的 UF_OBJ_cylce_by_name 函数
. U4 k' X& s: N# ~1 d5 `- r
; s' z4 W' S8 Q6 S0 n' S0 I" x- [NXOpen C++ 没有类似的这个功能
* @9 w, s3 L- k! R* C& {; X
123.png 123454.png 你好,我发现在Face类型继承了一个Name()方法,其函数说明的是:Returns the custom name of the object。我就想这个custom name 是否可能是我在UG给那个特定面命名的那个名字。如果用这个方法返回的custom name 和命名的名字相比较,如果是一致,那么我就从把这个面给保存下来,就算找到了。我按照这个思路用下面的代码验证这个思路。
% F- S! G* K  Y& h; C8 {$ r. J7 E& L5 @

  1. 4 C: ]" n1 y, l
  2. <P>Session *theSession = Session::GetSession();
    2 `+ e9 W5 u) E0 z5 U
  3. Part *workPart(theSession->Parts()->Work());
    , q5 }) B/ [5 V& U
  4. Part *displayPart(theSession->Parts()->Display());
    9 V8 Y9 ^8 ~  A+ a- M6 ]- i
  5. BodyCollection *bc=workPart->Bodies();
    8 _6 D- g' j. ^' d
  6. BodyCollection::iterator it = bc->begin();//因为只有一个体,所以第一位置元素赋值给下面的body2 ~: c$ }8 G, ^. J7 ]7 I+ \2 H
  7. Body *body = (*it);  n" P1 w4 F/ @2 H, U% N$ D1 Y( h3 W- j0 J
  8. std::vector<Face*> faces = body->GetFaces();7 I6 Y- O! a6 I9 f: U5 q; W
  9. for(unsigned int j=0;j<faces.size();j++)
    0 `7 r4 y6 B& L; V$ _% y! _3 l- q5 M
  10. {2 _; \: U, w- y9 v

  11. % g& q' Z3 Z/ c1 M4 o  O6 o
  12.       if ((faces[j]->Name().getText())=="FACE1")
    8 V2 V5 C" `- R5 o! C
  13.         {</P>7 [) u5 e3 {$ q/ y
  14. <P>             UI *faceui = UI::GetUI();  u6 X1 t9 P9 G+ }
  15.             faceui->NXMessageBox()->Show("已经找到面",NXMessageBox::DialogTypeInformation,"已经找到特定的面");
    ( S" |# z' v+ K: [: A! M2 H
  16.         }" \' o3 y2 |( q* n7 B( p+ }
  17.     else7 n8 c3 \  Q2 N
  18.        {' Y, a+ ^: Z& H0 q1 t& o" n
  19.            UI *faceui = UI::GetUI();7 D  a6 k1 q+ F& }5 p
  20.            faceui->NXMessageBox()->Show("未找到面",NXMessageBox::DialogTypeInformation,faces[j]->Name().getText());  O8 V' E! l" d3 o* T4 K$ e
  21.        }
    ) J! o/ T, N6 I
  22. }</P>
复制代码

0 B* c+ x0 n, ^6 b  K上述代码能够通过编译。在实际运行中出现了上面图所示的两种结果。从图中看到程序判断,(faces[j]->Name().getText())=="FACE1"结果都为假,所以弹出了6个(6个面)“未找到面”的对话框,由于我估计将对话框内容为Name()返回的custom name。但是有一个对话框中内容就是“FACE1”,其余都是空白。既然有一个是“FACE1”为什么不显示“已经找到面”对话框咧?求指教. Z" L; p6 N: U+ N5 T

0 q, F1 f: T( M5 K; j, U- R* |
% l7 b+ h- F2 f. j; Q8 y

- \$ v1 }, K) ~3 p
+ J4 }2 }. p9 v5 k, 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 编辑
1 v) w' r. J7 B8 Z
小新 发表于 2014-4-8 21:555 k* f+ R9 R$ L: s% L9 l7 V; W
你好,我发现在Face类型继承了一个Name()方法,其函数说明的是:Returns the custom name of the objec ...

7 E( l+ ]6 d+ r' T8 D) l 1414.png 问题已经解决,按照上述思路是可行的。子所以出现上述问题是因为我在if语句判断时候没有处理好,应该用下面代码;

  1. , L$ W3 J  m8 R$ G! v+ A
  2. 通过上述代码确实找到了特定的面了。
    . T+ l, \4 h1 _& Q4 S
  3. [code]Session *theSession = Session::GetSession();0 Z  K" h* V5 J( Q
  4.         Part *workPart(theSession->Parts()->Work());
    2 G( ?" c/ f5 {, i
  5.         Part *displayPart(theSession->Parts()->Display());4 l* K$ w$ t% o& D
  6. $ v5 w% z* f' Q- B: ]3 A
  7.         BodyCollection *bc=workPart->Bodies();6 e! k5 W& g, g" e( N5 m
  8.         BodyCollection::iterator it = bc->begin();//因为只有一个体,所以第一位置元素赋值给下面的body8 Z$ U$ c) B9 C0 j5 k
  9.         Body *body = (*it);  h; S' J1 t  {) [! R
  10.         std::vector<Face*> faces = body->GetFaces();
    ( ~  ]6 n8 n1 |$ B
  11.         for(unsigned int j=0;j<faces.size();j++)
    ! S) W: Q1 O4 z, m/ L
  12.         {. ]) N2 I% ^- P+ c$ m$ h2 P
  13.                 const char *c1="FACE1";
    # Y8 i& z" b2 W7 T
  14.                 const char *c2=faces[j]->Name().GetText();
    $ X9 `" U* P2 X5 T
  15.                 if (!strcmp(c2,c1)); B( R8 ]# N$ i  ?/ A% X
  16.                 {% s% a. v, F) E4 ~7 _, q  N% i
  17.                         UI *faceui = UI::GetUI();+ P0 ^6 N, `9 E" `
  18.                         faceui->NXMessageBox()->Show("已经找到面",NXMessageBox::DialogTypeInformation,"已经找到特定的面");5 z" S5 p  y) q8 R
  19.                        
    7 z/ ~( t( X% y5 G
  20.                 }
    ! T2 h% j+ `4 o
  21.                 else
    7 f$ y/ A6 G' c
  22.                 {
    ( Q, @3 K( P. S( }$ b
  23.                         UI *faceui = UI::GetUI();
    6 d9 K2 |5 ~" ^# i4 V
  24.                         faceui->NXMessageBox()->Show("未找到面",NXMessageBox::DialogTypeInformation,faces[j]->Name().getText());
    8 |* i# X7 e2 _% l& [
  25.                        
    7 a4 ^% ~, E( ~4 ?5 o9 z
  26.                 }
    / ]; F6 R  |4 _) @

  27. 0 @7 D  {0 X7 l& F  A: K9 C

  28. ; A  f; _( {3 _" V
  29.         }
复制代码
+ s5 ?: [1 i' P+ t8 R+ ?, P1 q( p

) b( o# [" h# `, t$ v+ H' q* ]0 V2 ?, D7 i) B
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了