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

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

  [复制链接]

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

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

小新 楼主

2014-4-7 19:26:05

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

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

x
本帖最后由 小新 于 2014-4-7 19:51 编辑
# v, x+ I5 H& ~+ ^2 h* W) ~: k+ k- f- {: c
我做自动化装配,通过代码定义好其约束关系。但是在具体实现过程中,不知道如何找到定义约束关系的某个实体上的特定的面。如图我想将图上箭头所指的面用于建立约束,但是不知道在代码中如何找到这个面。此外我是想用NX Open C++实现,而不是用UFun函数实现。 123.png 5 r! |- Y: c! f. J  ^. V4 v) \
上海点团信息科技有限公司,承接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 , 看看8 Q  s! s# }$ s3 l

& v# n% D' X; v! i$ n9 L要么就是通过几何判断了,遍历所有的面,找出比如面的法相是什么,面的类型,面的一些参数什么的 最终确定是你选择的那个面
& V1 l: X! v4 m
* f/ Y: c; _1 z0 Z, D& v# f  j或者直接找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* r4 E, O# W7 G& n" _+ j4 Z3 A
录制JA , 看看4 C, g+ E6 W1 w% n* s
- _# K7 N4 x; v# g
要么就是通过几何判断了,遍历所有的面,找出比如面的法相是什么,面的类型,面的一些参数 ...
% w. ?- |/ z4 [7 H
我录制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:215 Z; h# I' U( d- u
我录制JA后,出现代码Face *face1(dynamic_cast(block1->FindObject("FACE 4 {(250,100,50) BLOCK(1)}"))) ...
# }) o# Z! \( T1 ?
对的 最简单的方法就是用UFUN的 UF_OBJ_cylce_by_name 函数
1 b. W! J& v- p3 _/ c1 [7 u' [7 m; [, y% ^
NXOpen C++ 没有类似的这个功能
: R" \8 ^$ P" H" B) B# y- A
% K7 u+ a  ~5 g: ?! Z开发时候基本是 ufun + NXopen C++
* F. g9 j- s: {) ?单独的 NXOpen C++ 你可能实现所有的要求 * n2 e2 z: Y; r% h: x' c% g8 C
* |" ^4 @( F! h* o
两个要结合用
上海点团信息科技有限公司,承接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:591 r; H3 I! E6 ?& x
对的 最简单的方法就是用UFUN的 UF_OBJ_cylce_by_name 函数; {! b. f% ^% h
+ Q* @  e! p* k' m/ d1 i3 L/ {
NXOpen C++ 没有类似的这个功能

! g; w. N; \* ?7 S9 V" S. ~1 t 123.png 123454.png 你好,我发现在Face类型继承了一个Name()方法,其函数说明的是:Returns the custom name of the object。我就想这个custom name 是否可能是我在UG给那个特定面命名的那个名字。如果用这个方法返回的custom name 和命名的名字相比较,如果是一致,那么我就从把这个面给保存下来,就算找到了。我按照这个思路用下面的代码验证这个思路。
- H. {% W+ B( q: L: H' Q
  1. ' x5 Q& n0 S" Q9 [4 Z9 R' n
  2. <P>Session *theSession = Session::GetSession();
    / }0 a  o0 |; ?1 M2 Y9 V  r# S
  3. Part *workPart(theSession->Parts()->Work());
    " ?! p" L7 M1 f. k6 m0 K* X
  4. Part *displayPart(theSession->Parts()->Display());
    / r3 N+ Z/ W3 X7 k$ x& \" y+ D0 k
  5. BodyCollection *bc=workPart->Bodies();( b* D) J4 f( p* t6 Y
  6. BodyCollection::iterator it = bc->begin();//因为只有一个体,所以第一位置元素赋值给下面的body+ e" n+ a5 `2 ^. x% D+ E
  7. Body *body = (*it);
    - j! |" f+ z: [" B* F
  8. std::vector<Face*> faces = body->GetFaces();
    ) ~9 q& z! L( C' G2 ~
  9. for(unsigned int j=0;j<faces.size();j++)
    8 ]1 b9 g& {9 v/ }# J4 k5 K# D
  10. {
    5 l! A3 I, K5 v; W1 k

  11. ) ]2 J& \# L+ [3 Z4 p1 F+ M
  12.       if ((faces[j]->Name().getText())=="FACE1")5 A4 w6 H' ]( M) s# W
  13.         {</P>7 b4 y' D9 z/ q8 J" z
  14. <P>             UI *faceui = UI::GetUI();  Y0 \% u+ ^8 f- }' T" B! ^# u
  15.             faceui->NXMessageBox()->Show("已经找到面",NXMessageBox::DialogTypeInformation,"已经找到特定的面");
    - R1 S) a% E  k: K8 u7 }; I, K
  16.         }# |9 L8 u7 |( o7 t, n8 i
  17.     else
    * [9 Q0 z6 [9 C, `  d
  18.        {. A6 c, W, q# W' F2 @" X
  19.            UI *faceui = UI::GetUI();
    9 ~9 l. f! ~$ q) G! Z  _
  20.            faceui->NXMessageBox()->Show("未找到面",NXMessageBox::DialogTypeInformation,faces[j]->Name().getText());
    # i5 L; b: j1 w: _
  21.        }! S4 G# I: B# ~" t# K! G6 w4 W% ~# B
  22. }</P>
复制代码

+ z! u3 |- g3 N上述代码能够通过编译。在实际运行中出现了上面图所示的两种结果。从图中看到程序判断,(faces[j]->Name().getText())=="FACE1"结果都为假,所以弹出了6个(6个面)“未找到面”的对话框,由于我估计将对话框内容为Name()返回的custom name。但是有一个对话框中内容就是“FACE1”,其余都是空白。既然有一个是“FACE1”为什么不显示“已经找到面”对话框咧?求指教$ `. d8 l- `  F4 B$ k, {5 ^

$ n  V  ~8 j: n0 z. f
! p2 j, q9 o3 U) x1 n" M( S# w* }

: j+ B  r' ?9 A+ _; u
  Z* N) S" B+ j+ U: 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 编辑 # K$ p* C7 f+ m" `1 e& z( ?
小新 发表于 2014-4-8 21:55
' O6 X7 Z4 o# D你好,我发现在Face类型继承了一个Name()方法,其函数说明的是:Returns the custom name of the objec ...
3 ]; j+ R8 B2 Z+ v3 K: H. B/ @. C& h
1414.png 问题已经解决,按照上述思路是可行的。子所以出现上述问题是因为我在if语句判断时候没有处理好,应该用下面代码;

  1. - d( G# T( S5 z1 f$ P) L( F
  2. 通过上述代码确实找到了特定的面了。" g$ u/ f" f% r, j& Z9 y/ O
  3. [code]Session *theSession = Session::GetSession();
    3 s: s, i: z* ^+ u; u# i
  4.         Part *workPart(theSession->Parts()->Work());. H1 w* Q9 t  V
  5.         Part *displayPart(theSession->Parts()->Display());* t# P, ~& L- [! R' L) h0 L

  6. + b5 ~# u. k' a' e
  7.         BodyCollection *bc=workPart->Bodies();
    , [: \: ?. A9 v/ @$ ~- H
  8.         BodyCollection::iterator it = bc->begin();//因为只有一个体,所以第一位置元素赋值给下面的body
    / a) H! T. b' b8 p( j& E
  9.         Body *body = (*it);
    / Y1 B+ x3 i: u! k0 F2 C
  10.         std::vector<Face*> faces = body->GetFaces();
    ! n: g; h3 S$ C* t% u7 p4 ?* z" \
  11.         for(unsigned int j=0;j<faces.size();j++)
    * l( f3 X% i: w- e' s
  12.         {
    # u5 y3 f2 O0 `
  13.                 const char *c1="FACE1";
    1 W" q, Q# M/ J1 Z, ^3 Z; p, y2 ^5 b
  14.                 const char *c2=faces[j]->Name().GetText();
    7 H/ e6 U: ]% A8 y$ _
  15.                 if (!strcmp(c2,c1))
    / P7 E+ ^4 k" A) Y
  16.                 {
    7 v4 V. M; \3 `( p
  17.                         UI *faceui = UI::GetUI();* \5 v* H" @% J) c9 w
  18.                         faceui->NXMessageBox()->Show("已经找到面",NXMessageBox::DialogTypeInformation,"已经找到特定的面");  U4 S' f' ^7 f4 k* T
  19.                         7 k. Z7 L  W( M, K: ?& Q
  20.                 }
    5 a: s0 x8 |) T. N
  21.                 else
    ( h4 x' y: R' v/ ~8 b  f
  22.                 {
    . U0 L2 E5 p8 A6 f7 P# t  `
  23.                         UI *faceui = UI::GetUI();
    6 D+ C+ e. p; w* q. K5 I
  24.                         faceui->NXMessageBox()->Show("未找到面",NXMessageBox::DialogTypeInformation,faces[j]->Name().getText());
    ' M: u. Y' X  M- H( k* b' [' u
  25.                        
    3 c) k/ X+ k. S. z# L
  26.                 }6 ^7 f* W) P& @0 S- w& ^
  27. + c$ ?* {% E8 j

  28. $ _" [0 @" ^8 ?* E  t0 w1 N+ Q
  29.         }
复制代码
, Z  U8 g. i" z; y6 n! B& g& V
; Q7 P) A; w, G3 ?

) E! G3 ~; [5 E) K' K# d/ W
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了