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 4426 6

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

小新 楼主

2014-4-7 19:26:05

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

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

x
本帖最后由 小新 于 2014-4-7 19:51 编辑
4 ?2 F0 |, J& o9 c" z6 A  y9 T+ c% B( w7 f0 y3 z3 B- A
我做自动化装配,通过代码定义好其约束关系。但是在具体实现过程中,不知道如何找到定义约束关系的某个实体上的特定的面。如图我想将图上箭头所指的面用于建立约束,但是不知道在代码中如何找到这个面。此外我是想用NX Open C++实现,而不是用UFun函数实现。 123.png 8 z& n+ x  F# m8 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 , 看看
2 ~1 A) M' i" g9 x4 j$ d
% ?% q; y2 |1 l0 Z% F$ e+ [% z要么就是通过几何判断了,遍历所有的面,找出比如面的法相是什么,面的类型,面的一些参数什么的 最终确定是你选择的那个面, T2 o& B: b9 o' f( ^6 L

8 M. L$ D2 ^2 d  ^' V& H! o+ {或者直接找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
. j# v  ~+ M% M4 X录制JA , 看看& o5 R# O4 f6 w  h( @& w: ^( b2 F
4 \8 L, n* X  K! z% ]
要么就是通过几何判断了,遍历所有的面,找出比如面的法相是什么,面的类型,面的一些参数 ...
) m0 ^  k. m) e7 `8 ~, G/ C
我录制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
& L- h' U5 R8 M我录制JA后,出现代码Face *face1(dynamic_cast(block1->FindObject("FACE 4 {(250,100,50) BLOCK(1)}"))) ...

, k* ~& _9 A# m2 K( @对的 最简单的方法就是用UFUN的 UF_OBJ_cylce_by_name 函数
0 z1 p  w. o& f4 u& R2 d4 d6 g9 N$ I1 c; U
NXOpen C++ 没有类似的这个功能
0 i/ m) _  g+ M' K/ K3 f3 \6 w& U) K2 A4 P9 d8 e
开发时候基本是 ufun + NXopen C++
0 ~' R: K8 ?5 Q' D$ p单独的 NXOpen C++ 你可能实现所有的要求 , }9 V, N) v& F. E* w1 N) [
/ Y7 ~9 Z0 B: I; M( _* 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 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% R( U, ?& [& E( y1 M  P
对的 最简单的方法就是用UFUN的 UF_OBJ_cylce_by_name 函数
4 Z) a  e6 h1 v+ [6 t+ K1 |) d3 ~. D* O7 N' C# \7 I
NXOpen C++ 没有类似的这个功能
1 ~8 X. [, d" b" W" ]2 g
123.png 123454.png 你好,我发现在Face类型继承了一个Name()方法,其函数说明的是:Returns the custom name of the object。我就想这个custom name 是否可能是我在UG给那个特定面命名的那个名字。如果用这个方法返回的custom name 和命名的名字相比较,如果是一致,那么我就从把这个面给保存下来,就算找到了。我按照这个思路用下面的代码验证这个思路。' V0 P" b- V' H

  1. 0 |. R& S1 |2 |5 d* `
  2. <P>Session *theSession = Session::GetSession();3 \4 m- r- S; n$ G
  3. Part *workPart(theSession->Parts()->Work());, t& K, _0 I7 Q- y' P$ c6 Z
  4. Part *displayPart(theSession->Parts()->Display());5 F+ ]9 E# T# X5 |! c" B; y
  5. BodyCollection *bc=workPart->Bodies();/ I5 l" Q* Y0 c
  6. BodyCollection::iterator it = bc->begin();//因为只有一个体,所以第一位置元素赋值给下面的body
    $ w$ v& K4 t$ [" i  f4 L+ p
  7. Body *body = (*it);
    / y) V. k5 v) K! B
  8. std::vector<Face*> faces = body->GetFaces();7 V) s  _; P; U7 e" L8 Z% ?
  9. for(unsigned int j=0;j<faces.size();j++)
    / {) L* C4 M; ]1 L
  10. {( }! m( k8 m: L

  11. : @; h0 H; [1 p+ |' W
  12.       if ((faces[j]->Name().getText())=="FACE1")
    * V2 T4 b: i4 S. w6 ~, q8 p- i
  13.         {</P>6 Q+ `4 L  X4 r# r
  14. <P>             UI *faceui = UI::GetUI();: l, o* S; r3 B. c% z" m- ~8 x8 ]  s
  15.             faceui->NXMessageBox()->Show("已经找到面",NXMessageBox::DialogTypeInformation,"已经找到特定的面");9 }* c( p9 K$ g" F8 X8 S6 t
  16.         }! _. R8 {& V/ U& f2 D' A# P
  17.     else. H8 s) I$ e1 {) j% M% I
  18.        {
    . ?3 c: B: X; k
  19.            UI *faceui = UI::GetUI();
    ' Z7 n. |. ^8 M. n; E" S! [) E
  20.            faceui->NXMessageBox()->Show("未找到面",NXMessageBox::DialogTypeInformation,faces[j]->Name().getText());6 q. T# J6 o! y
  21.        }
    ' Z& G  X4 }% C9 Q+ |( ~
  22. }</P>
复制代码

' b  q) u: [" a- V) y& o上述代码能够通过编译。在实际运行中出现了上面图所示的两种结果。从图中看到程序判断,(faces[j]->Name().getText())=="FACE1"结果都为假,所以弹出了6个(6个面)“未找到面”的对话框,由于我估计将对话框内容为Name()返回的custom name。但是有一个对话框中内容就是“FACE1”,其余都是空白。既然有一个是“FACE1”为什么不显示“已经找到面”对话框咧?求指教5 l7 D/ r0 q) U
9 t( {4 t7 [3 Z/ Y/ a

5 v6 g$ [3 d+ F! S* E6 j6 _
2 T- g0 l8 R$ }% Q

% L( b; \) o0 @
上海点团信息科技有限公司,承接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 编辑 ) w- U* D0 q3 Y: u
小新 发表于 2014-4-8 21:555 H0 m# m, G* z6 a
你好,我发现在Face类型继承了一个Name()方法,其函数说明的是:Returns the custom name of the objec ...

( |9 v6 |; {1 T; Y 1414.png 问题已经解决,按照上述思路是可行的。子所以出现上述问题是因为我在if语句判断时候没有处理好,应该用下面代码;
  1. 6 [6 A3 v3 ~' p$ Q" g) V
  2. 通过上述代码确实找到了特定的面了。
    9 A) h1 b0 H9 \1 I! v, o/ V# `
  3. [code]Session *theSession = Session::GetSession();
      e6 `# i1 b, _# L
  4.         Part *workPart(theSession->Parts()->Work());
    5 g; }& p/ @  M; ^" }
  5.         Part *displayPart(theSession->Parts()->Display());
    6 d$ @/ i* v* |# x- i  \

  6. $ j$ K; o( q! p* d+ B9 \
  7.         BodyCollection *bc=workPart->Bodies();/ ]- A$ y- l$ U+ `0 G$ W5 \# a
  8.         BodyCollection::iterator it = bc->begin();//因为只有一个体,所以第一位置元素赋值给下面的body
    ; R5 I, j$ \; C
  9.         Body *body = (*it);
      w1 i5 e( ~9 m& a' |6 d+ q! {, k
  10.         std::vector<Face*> faces = body->GetFaces();
    + \/ A8 ~0 F- g. V' S4 i+ e8 t0 E
  11.         for(unsigned int j=0;j<faces.size();j++), ]: p" }. C) G9 d
  12.         {, a/ z$ m) e$ x) u
  13.                 const char *c1="FACE1";
    : F' I8 l+ f  Y3 F' _/ {6 v+ s7 |
  14.                 const char *c2=faces[j]->Name().GetText();4 O  a! p- `0 b" X) M9 N4 ^
  15.                 if (!strcmp(c2,c1))  \. M- t; I' ^" i& Q' _: Q& H
  16.                 {
    , v: g7 Y1 [8 r, `* ]! Z8 }9 s
  17.                         UI *faceui = UI::GetUI();
    ) }& C( ~: p+ p  p  ^! T
  18.                         faceui->NXMessageBox()->Show("已经找到面",NXMessageBox::DialogTypeInformation,"已经找到特定的面");* j. b! A  Y! I% c9 M+ H* S9 A
  19.                        
    : D  ~6 `: o1 r" Z5 n& A6 g2 @
  20.                 }
    ! q4 }. Q% ~2 m& Q
  21.                 else
    ( p/ }2 {0 Q; |  m% L4 k
  22.                 {
    ) A% g' C* }8 I$ L/ Q" {
  23.                         UI *faceui = UI::GetUI();
    " v8 O& ^$ T' d* q; U# F- F/ m' K
  24.                         faceui->NXMessageBox()->Show("未找到面",NXMessageBox::DialogTypeInformation,faces[j]->Name().getText());5 @/ L3 ^* Q/ u- t' l5 U# H
  25.                         # X5 z9 d8 O! M5 T; r, w# ]
  26.                 }
    , f" o: U6 ]$ p
  27. 3 c$ U8 d) `- l$ L# j9 E+ {
  28. , D9 O4 j/ h6 y. {8 |' V* Y
  29.         }
复制代码

1 i9 {" G% @8 b; j6 `) B3 @+ I: {* H& Z" ~5 x& h' f
* D- P/ k$ B4 g+ E7 C$ h- A
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了