PLM之家精品课程培训,联系电话:18301858168 QQ: 939801026

  • NX二次开培训

    NX二次开培训

    适合初级入门或想深入了解二次开发的工程师,本培训结合ufun,NXOpen C++,大量的实例及官方内部的开发技术对于老鸟也值得借鉴!.

    NX CAM二次开发培训报名 NX二次开发基础培训报名
  • PLM之家Catia CAA二次开发培训

    Catia二次开发培训

    Catia二次开发的市场大,这方面开发人才少,难度大。所以只要你掌握了开发,那么潜力巨大,随着时间的积累,你必将有所用武之地!

  • PLM之Teamcenter最佳学习方案

    Teamcenter培训

    用户应用基础培训,管理员基础培训,管理员高级培训,二次开发培训应有尽有,只要你感兴趣肯学习,专业多年经验大师级打造!

  • PLM之Tecnomatix制造领域培训

    Tecnomatix培训

    想了解制造领域数字化吗?想了解工厂,生产线设计吗?数字化双胞胎,工业4.0吗?我们的课程虚位以待!

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

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

  [复制链接]

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

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

小新 楼主

2014-4-7 19:26:05

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

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

x
本帖最后由 小新 于 2014-4-7 19:51 编辑
- n& |+ R2 S5 z: @2 y" q/ \# N! Z6 Y
我做自动化装配,通过代码定义好其约束关系。但是在具体实现过程中,不知道如何找到定义约束关系的某个实体上的特定的面。如图我想将图上箭头所指的面用于建立约束,但是不知道在代码中如何找到这个面。此外我是想用NX Open C++实现,而不是用UFun函数实现。 123.png 1 E8 `0 ^5 m# c: L; 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 , 看看" a( R+ s( g, Q0 ]3 k0 O
2 S% O) D9 R, G8 o# m* ?9 @
要么就是通过几何判断了,遍历所有的面,找出比如面的法相是什么,面的类型,面的一些参数什么的 最终确定是你选择的那个面+ Y6 F- j: g5 f, ~: N* z3 ?$ M1 Z
: ?+ D9 q4 @: M! L2 ]
或者直接找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
( t8 D* v( ~! O录制JA , 看看
% I4 K- ]3 G0 q, P7 H
! l  v3 E. ^% g( z3 O要么就是通过几何判断了,遍历所有的面,找出比如面的法相是什么,面的类型,面的一些参数 ...
  ?' d& J& B) a/ Z0 R& {8 |; _+ K% G
我录制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:211 R  ?  _5 o- A, g, R- K
我录制JA后,出现代码Face *face1(dynamic_cast(block1->FindObject("FACE 4 {(250,100,50) BLOCK(1)}"))) ...

8 H; D5 I4 G) r4 ~对的 最简单的方法就是用UFUN的 UF_OBJ_cylce_by_name 函数% ]5 C/ y" Q' _& a* u
/ I. w# s# v6 q- M. S2 k- {
NXOpen C++ 没有类似的这个功能 * L2 J: ^  R4 ]4 X

5 _, l# R# J, J' m开发时候基本是 ufun + NXopen C+++ A) h1 \0 G! v# P
单独的 NXOpen C++ 你可能实现所有的要求
6 P; m/ D7 `4 \2 H' \, [& y" I
0 u5 _: y  u& V5 @+ I两个要结合用
上海点团信息科技有限公司,承接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/ G$ v8 q, H5 l
对的 最简单的方法就是用UFUN的 UF_OBJ_cylce_by_name 函数
$ |0 Y* b& Z9 d/ I9 R. a
2 S9 ]( c6 F$ e9 S* s: \8 ENXOpen C++ 没有类似的这个功能

8 j$ b7 m( g- r3 K/ t, M 123.png 123454.png 你好,我发现在Face类型继承了一个Name()方法,其函数说明的是:Returns the custom name of the object。我就想这个custom name 是否可能是我在UG给那个特定面命名的那个名字。如果用这个方法返回的custom name 和命名的名字相比较,如果是一致,那么我就从把这个面给保存下来,就算找到了。我按照这个思路用下面的代码验证这个思路。
0 T, P! R( \# Z6 s( V# T

  1. 0 ]% |/ q' ?: Z) T% h3 t
  2. <P>Session *theSession = Session::GetSession();
    0 q6 x; j' s( [5 g( E2 W- e
  3. Part *workPart(theSession->Parts()->Work());
    : X9 S. y! y, L8 k' q6 ~6 k( I# r, {
  4. Part *displayPart(theSession->Parts()->Display());
    ) F+ {" Z1 [& ~* G4 D
  5. BodyCollection *bc=workPart->Bodies();
    - a" Q# r( O& r$ g2 j
  6. BodyCollection::iterator it = bc->begin();//因为只有一个体,所以第一位置元素赋值给下面的body
    : Y! e/ \7 w5 r$ k
  7. Body *body = (*it);$ e! X5 r) P& ]5 d6 [. ?6 Z
  8. std::vector<Face*> faces = body->GetFaces();( x  {& E0 ]0 V, w
  9. for(unsigned int j=0;j<faces.size();j++); Y8 m3 R8 K- Q3 q! M
  10. {& E/ Q0 ?3 R# a. r0 d2 Z, D

  11. 3 O1 H: g+ g2 Q' p1 _+ T1 ~
  12.       if ((faces[j]->Name().getText())=="FACE1")
    / B1 I) A; D' e- S2 }* V. a* c
  13.         {</P>
    * ~% t" _, H; h$ ]) k
  14. <P>             UI *faceui = UI::GetUI();
    6 f; Q! l, \. s: m, `
  15.             faceui->NXMessageBox()->Show("已经找到面",NXMessageBox::DialogTypeInformation,"已经找到特定的面");
    % S- I* s6 f8 L( n8 T
  16.         }$ o5 K6 `, \: R9 M
  17.     else
    7 k- E3 ^) j7 d
  18.        {
    0 K! l$ h) P" @( Z- m! y: s
  19.            UI *faceui = UI::GetUI();6 }; K# a: N* ]2 z" o
  20.            faceui->NXMessageBox()->Show("未找到面",NXMessageBox::DialogTypeInformation,faces[j]->Name().getText());
    ) M% q) W# w9 F) u
  21.        }# n- ^8 B5 j- Y$ ~% r( J' W
  22. }</P>
复制代码
6 M! ]! t$ h- q% [" }0 I/ y! G6 v
上述代码能够通过编译。在实际运行中出现了上面图所示的两种结果。从图中看到程序判断,(faces[j]->Name().getText())=="FACE1"结果都为假,所以弹出了6个(6个面)“未找到面”的对话框,由于我估计将对话框内容为Name()返回的custom name。但是有一个对话框中内容就是“FACE1”,其余都是空白。既然有一个是“FACE1”为什么不显示“已经找到面”对话框咧?求指教
5 O. Z5 h( x- Q4 [* g9 q' ]2 m& k: K% `6 G3 X
: g4 P$ b$ v3 T# x; ^

9 O( N- a( I# Z# T" d+ G( p
( ~( ]( h" q2 ~$ G5 V
上海点团信息科技有限公司,承接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 编辑
3 `* {$ ^+ L/ i5 l% [, t' l
小新 发表于 2014-4-8 21:55
! M9 C# Y" U3 U, Z你好,我发现在Face类型继承了一个Name()方法,其函数说明的是:Returns the custom name of the objec ...

$ T) X1 i/ g# ] 1414.png 问题已经解决,按照上述思路是可行的。子所以出现上述问题是因为我在if语句判断时候没有处理好,应该用下面代码;

  1. 1 D5 X. n* B) x0 f
  2. 通过上述代码确实找到了特定的面了。
      G: Y) f8 u7 o0 p) B! |9 k
  3. [code]Session *theSession = Session::GetSession();
    $ G5 j8 X4 _- Z2 G8 S5 T
  4.         Part *workPart(theSession->Parts()->Work());  N3 q: u3 R* E8 }3 q
  5.         Part *displayPart(theSession->Parts()->Display());
    . W* _$ U$ W5 w
  6. , v/ d% {; }1 }; T; Q! h
  7.         BodyCollection *bc=workPart->Bodies();
    5 r6 U2 A' c  n7 g# W% B
  8.         BodyCollection::iterator it = bc->begin();//因为只有一个体,所以第一位置元素赋值给下面的body: c* ]% M# J; C0 E
  9.         Body *body = (*it);
    ' L$ d" n7 a8 g% k5 l
  10.         std::vector<Face*> faces = body->GetFaces();* w' E! S/ s& ]) ?5 R) h" U
  11.         for(unsigned int j=0;j<faces.size();j++)
    % D7 }, {: B: l  I* J7 u5 ~
  12.         {6 z* T, O8 H/ |
  13.                 const char *c1="FACE1";. G- ]/ W  @/ m& x
  14.                 const char *c2=faces[j]->Name().GetText();
    : A. R* B! _7 L
  15.                 if (!strcmp(c2,c1))
    ( [: T7 ^( Z" H" j9 g) |1 U
  16.                 {
    . P/ _0 z: Z& s. f
  17.                         UI *faceui = UI::GetUI();
    6 e6 R% b7 |; z. w
  18.                         faceui->NXMessageBox()->Show("已经找到面",NXMessageBox::DialogTypeInformation,"已经找到特定的面");
    1 v  j! s6 ?, Y  X3 `+ L
  19.                        
    ; r9 z( A( U3 ]9 y) J* w+ p  b/ i
  20.                 }  k8 f# [- a8 j1 I
  21.                 else
    $ ~: j+ ?, x0 R; \! M- d8 c
  22.                 {
    0 A% u+ W& q  F& ^- o2 N+ s
  23.                         UI *faceui = UI::GetUI();% b' O6 S& }* P  F2 |# N; D* |( s
  24.                         faceui->NXMessageBox()->Show("未找到面",NXMessageBox::DialogTypeInformation,faces[j]->Name().getText());! o% L& t2 I! Y9 a9 @& }
  25.                        
    $ u7 U- p# `! M
  26.                 }
    8 D9 V& l) F  i# F  P
  27. 5 g# a" P7 y, z7 V: `- }. u& M

  28. ( e* ~2 ?4 L3 T* _/ g4 d
  29.         }
复制代码
5 M0 I0 s7 }/ \' B8 g# k

! L% ?1 \0 k" e% l! \4 l( N% F4 J, {6 [" x; z
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了