PLM之家精品课程培训

PLM之家精品课程培训

联系电话:18301858168   |   QQ咨询:939801026
NX二次开发培训

NX二次开发培训

UFUN/NXOpen C++和实战案例

适合初级入门或想深入了解二次开发的工程师,本培训结合ufun,NXOpen C++,大量的实例及官方内部的开发技术。
公众号二维码

关注公众号

点击扫描二维码免费在线高清教程

课程详情
Catia二次开发培训

Catia二次开发培训

市场需求大,掌握核心技术前景广阔

Catia二次开发的市场需求大,人才稀缺。掌握开发技能潜力巨大,随着经验积累将在汽车、航空等领域有所作为。
B站二维码

在线原创B站视频

点击关注工业软件传道士主页

课程详情
Teamcenter培训

Teamcenter培训

全方位培训,从基础应用到高级开发全覆盖

涵盖用户应用基础培训、管理员基础培训、管理员高级培训及二次开发培训等全方位内容,由多年经验讲师打造。
QQ群二维码

加入同行交流

点击扫描二维码加入QQ群

课程详情
×

PLM之家plmhome公众号

课程涵盖: PLM之家所有原创视频

×

关注B站视频

所有高清视频一览无余,全部在线播放学习

×

加入PLM之家QQ群

同行交流,疑问解答,更多互助

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

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

  [复制链接]

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

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

小新 楼主

2014-4-7 19:26:05

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

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

x
本帖最后由 小新 于 2014-4-7 19:51 编辑
$ y% O- T% A! P$ L
! n2 o, L( L% q5 k1 V我做自动化装配,通过代码定义好其约束关系。但是在具体实现过程中,不知道如何找到定义约束关系的某个实体上的特定的面。如图我想将图上箭头所指的面用于建立约束,但是不知道在代码中如何找到这个面。此外我是想用NX Open C++实现,而不是用UFun函数实现。 123.png
! u0 ]6 F7 ?# n  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 , 看看
& J; j) {4 z. V3 ~% C4 ]2 a
. c/ _" \/ S2 P; R) E0 X9 G- _要么就是通过几何判断了,遍历所有的面,找出比如面的法相是什么,面的类型,面的一些参数什么的 最终确定是你选择的那个面7 O. h6 e7 K# C  Y% E
) B; I- t/ e) K4 F/ `2 p
或者直接找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:205 I  a1 j) K4 p; Y$ j3 f0 q! g+ M
录制JA , 看看
2 t7 w' ?2 b" p* a$ v
8 T  a2 `' N/ `3 N要么就是通过几何判断了,遍历所有的面,找出比如面的法相是什么,面的类型,面的一些参数 ...
% d6 B# u+ A/ ?/ i
我录制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: m( S, g5 S) b) ?我录制JA后,出现代码Face *face1(dynamic_cast(block1->FindObject("FACE 4 {(250,100,50) BLOCK(1)}"))) ...

% m2 f' r& z) Q  U, k对的 最简单的方法就是用UFUN的 UF_OBJ_cylce_by_name 函数
% F, W% U# U5 ?% V2 z8 I" K3 H( @  i) K# G, M5 m
NXOpen C++ 没有类似的这个功能 5 B, s1 s) T# n( W/ ~5 Q- i5 C7 @
0 W/ p3 R6 _8 l6 [
开发时候基本是 ufun + NXopen C++% I8 y) Q$ m3 i: [$ f! r* j
单独的 NXOpen C++ 你可能实现所有的要求
) W- F# B8 g( k
9 S3 A5 I$ W7 i. p$ r& d5 l两个要结合用
上海点团信息科技有限公司,承接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:591 g- `" y: v. [& k% b5 N( u4 o- P
对的 最简单的方法就是用UFUN的 UF_OBJ_cylce_by_name 函数
8 r/ D7 L7 ]5 o# V$ g8 g4 z% o
" E. \3 j- T  X9 _) S) _( dNXOpen C++ 没有类似的这个功能
( D0 _& c6 }& t. \; P# [' `. O; [
123.png 123454.png 你好,我发现在Face类型继承了一个Name()方法,其函数说明的是:Returns the custom name of the object。我就想这个custom name 是否可能是我在UG给那个特定面命名的那个名字。如果用这个方法返回的custom name 和命名的名字相比较,如果是一致,那么我就从把这个面给保存下来,就算找到了。我按照这个思路用下面的代码验证这个思路。6 Y4 K! X% @7 |3 w- \9 N4 {! i
  1. 7 m6 b3 H' d* L
  2. <P>Session *theSession = Session::GetSession();
    5 e7 y& E4 i+ O9 u9 h# \7 O; G
  3. Part *workPart(theSession->Parts()->Work());
    2 u5 |" S5 ?% r, k) ^7 H
  4. Part *displayPart(theSession->Parts()->Display());
    - u3 `# K  D$ P+ l! _
  5. BodyCollection *bc=workPart->Bodies();4 s/ b9 {' R+ |6 O7 k& n  i9 J
  6. BodyCollection::iterator it = bc->begin();//因为只有一个体,所以第一位置元素赋值给下面的body7 A) H. Z2 t( N4 p5 B
  7. Body *body = (*it);
    9 n% T& w9 \) k' f* g% X" ?
  8. std::vector<Face*> faces = body->GetFaces();
    $ v. Q: e# S0 r- D. V( T' `
  9. for(unsigned int j=0;j<faces.size();j++)9 o, a0 E' t& [0 E5 O0 L. `' c
  10. {
    ) w7 T& w$ l0 h# c" O

  11. ! V: W/ r" u1 F9 X0 Y: @3 t+ F
  12.       if ((faces[j]->Name().getText())=="FACE1"), l  g- h1 @6 n# f: R9 f1 f" J4 O1 p4 s
  13.         {</P>9 j. z# h- d8 [: E! t" {% @2 J
  14. <P>             UI *faceui = UI::GetUI();
    * O5 i$ Q$ t/ i; S
  15.             faceui->NXMessageBox()->Show("已经找到面",NXMessageBox::DialogTypeInformation,"已经找到特定的面");- E7 r6 }4 H) r3 I: M
  16.         }
    $ b- u9 {) n3 }+ }
  17.     else: }8 p3 R4 U; E1 C
  18.        {
    " z9 K- s0 U9 c6 I& |" v! C: C; D+ U
  19.            UI *faceui = UI::GetUI();
    ; T* e6 [6 Z. P/ b
  20.            faceui->NXMessageBox()->Show("未找到面",NXMessageBox::DialogTypeInformation,faces[j]->Name().getText());6 s1 m) F2 z. x+ {9 V1 C
  21.        }$ y5 x# m2 `+ f0 @' e
  22. }</P>
复制代码
$ t; `3 T0 y' G* N, G  v
上述代码能够通过编译。在实际运行中出现了上面图所示的两种结果。从图中看到程序判断,(faces[j]->Name().getText())=="FACE1"结果都为假,所以弹出了6个(6个面)“未找到面”的对话框,由于我估计将对话框内容为Name()返回的custom name。但是有一个对话框中内容就是“FACE1”,其余都是空白。既然有一个是“FACE1”为什么不显示“已经找到面”对话框咧?求指教" l' d  _9 U, m- `/ l$ Y

5 K! Y7 m! W9 q9 C2 \) |, ~$ ?$ k: g8 ~7 x) K) ?! W

. |4 F& |6 ^: O: s* ~4 d2 }

: S$ s( H" e, Q3 |5 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 22:22:41

小新 7#

2014-4-8 22:22:41

本帖最后由 小新 于 2014-4-9 10:35 编辑
$ a: O: E7 }' K8 n3 V  m7 A: c7 A
小新 发表于 2014-4-8 21:55
! r( ^& w7 _5 y8 w, K+ l- R你好,我发现在Face类型继承了一个Name()方法,其函数说明的是:Returns the custom name of the objec ...
2 N3 t. w7 \! t. g: y) N0 q2 Q
1414.png 问题已经解决,按照上述思路是可行的。子所以出现上述问题是因为我在if语句判断时候没有处理好,应该用下面代码;
  1. 9 ]& d* y3 J7 T
  2. 通过上述代码确实找到了特定的面了。
    ) h; \' }# @: F; L# L* B
  3. [code]Session *theSession = Session::GetSession();8 _6 P6 D4 I4 h! x
  4.         Part *workPart(theSession->Parts()->Work());
    0 v9 z+ R* B% b% e# i
  5.         Part *displayPart(theSession->Parts()->Display());
    , h, M: `+ E* M& b8 K$ h

  6.   i4 T$ d  E' W7 V" d# Z9 N
  7.         BodyCollection *bc=workPart->Bodies();: ]& K4 s- ?( _* \
  8.         BodyCollection::iterator it = bc->begin();//因为只有一个体,所以第一位置元素赋值给下面的body
    ; [* S: ^* V/ @9 r# G: ?2 s- s
  9.         Body *body = (*it);
    1 U5 e& C! p0 N. m& g
  10.         std::vector<Face*> faces = body->GetFaces();
    - y* ~2 [( L  d+ K5 Y" {  p
  11.         for(unsigned int j=0;j<faces.size();j++)1 q0 k2 H' Z+ [) ~- R( B
  12.         {* B4 R8 }0 g) ?" x
  13.                 const char *c1="FACE1";
    $ l' z/ x1 g. |/ [9 G
  14.                 const char *c2=faces[j]->Name().GetText();; J; i) V9 Z5 W) T0 P4 R7 K7 Z
  15.                 if (!strcmp(c2,c1))
    # |8 C9 X* a* ?. M) F
  16.                 {9 b7 _: C8 ^6 ]  S1 U. f5 C
  17.                         UI *faceui = UI::GetUI();
    + {, a0 h0 V0 w) _
  18.                         faceui->NXMessageBox()->Show("已经找到面",NXMessageBox::DialogTypeInformation,"已经找到特定的面");' t- `4 k# O$ Y9 `' K" k6 G4 X4 T
  19.                        
    4 _; h- ?* s; e" z$ k' L- G
  20.                 }. |) S) e+ ~) y
  21.                 else0 e1 [! r' T8 d$ v* Y5 s
  22.                 {8 f& [: c" \2 t$ }( n
  23.                         UI *faceui = UI::GetUI();- X; u0 l; @( d8 f% K- z
  24.                         faceui->NXMessageBox()->Show("未找到面",NXMessageBox::DialogTypeInformation,faces[j]->Name().getText());
    ( C- d5 @9 N/ W
  25.                        
    & x* s  s& }; t
  26.                 }# C5 P$ {, g3 i& g$ A
  27. % {- ~' D" j: K: ~

  28. ) D0 S9 s/ |9 q2 X( K5 g
  29.         }
复制代码

; _) D- T3 o2 ~" V# v
6 M) X8 r. ?: E6 m7 I, t9 s
) Y* X) Q: X2 d$ x% I9 J  p; [- D
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了