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

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

  [复制链接]

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

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

小新 楼主

2014-4-7 19:26:05

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

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

x
本帖最后由 小新 于 2014-4-7 19:51 编辑 $ p$ w4 k9 q7 L' H$ B9 X
0 {" A. ]4 ^( ]$ W# B) l  w
我做自动化装配,通过代码定义好其约束关系。但是在具体实现过程中,不知道如何找到定义约束关系的某个实体上的特定的面。如图我想将图上箭头所指的面用于建立约束,但是不知道在代码中如何找到这个面。此外我是想用NX Open C++实现,而不是用UFun函数实现。 123.png ; _2 w" @6 L! O9 [( A% b. e& J
上海点团信息科技有限公司,承接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 , 看看
, d; ~( V$ R% `) ~( u7 f! ]% b& c7 F
) H. @, R8 ~3 F$ W/ b+ ]  W要么就是通过几何判断了,遍历所有的面,找出比如面的法相是什么,面的类型,面的一些参数什么的 最终确定是你选择的那个面$ o3 @  F0 c% y. |8 e0 h
/ m- F) S% G" v2 s. o
或者直接找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
! H  a0 o: |' v1 L9 x3 H' B0 M7 C录制JA , 看看8 n, O: [" V: G( K; r, z
) F! O/ o, T$ [
要么就是通过几何判断了,遍历所有的面,找出比如面的法相是什么,面的类型,面的一些参数 ...
' J1 r  F( _) r
我录制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* \0 z! F+ D( f+ g  J
我录制JA后,出现代码Face *face1(dynamic_cast(block1->FindObject("FACE 4 {(250,100,50) BLOCK(1)}"))) ...
- z9 {6 C1 t8 }$ M/ ^- H, a
对的 最简单的方法就是用UFUN的 UF_OBJ_cylce_by_name 函数) T: p. z; s1 P  w! @

/ P& D$ Q9 w% e5 g) l5 Q. _NXOpen C++ 没有类似的这个功能
% K. U, o2 c0 o. f, |; {) z- T, ^# }4 u4 [7 D3 u
开发时候基本是 ufun + NXopen C++& t$ E5 J. o! C9 b8 l! l
单独的 NXOpen C++ 你可能实现所有的要求
! m+ j1 \! a  |9 u# p0 @- {4 q0 j6 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
6 v- ]8 i; u1 i8 {对的 最简单的方法就是用UFUN的 UF_OBJ_cylce_by_name 函数* N* D; b1 r5 m+ Z7 ^) B9 [
6 x0 `: I' l+ Z1 q& n% G2 ]/ ]/ B
NXOpen C++ 没有类似的这个功能
8 ?7 J% C1 r. E! L, a# H
123.png 123454.png 你好,我发现在Face类型继承了一个Name()方法,其函数说明的是:Returns the custom name of the object。我就想这个custom name 是否可能是我在UG给那个特定面命名的那个名字。如果用这个方法返回的custom name 和命名的名字相比较,如果是一致,那么我就从把这个面给保存下来,就算找到了。我按照这个思路用下面的代码验证这个思路。- \$ T5 Z% s$ M5 e8 d% \" I
  1. 6 j! U; n8 V8 X: m
  2. <P>Session *theSession = Session::GetSession();% H1 u* T5 a5 |  G3 C3 b
  3. Part *workPart(theSession->Parts()->Work());: L! ]4 K0 H6 u: |! e' B  V
  4. Part *displayPart(theSession->Parts()->Display());
    . @& C$ T) Y2 M! Q
  5. BodyCollection *bc=workPart->Bodies();
    5 O- \' n  X* k7 x! }; }0 U/ f# W
  6. BodyCollection::iterator it = bc->begin();//因为只有一个体,所以第一位置元素赋值给下面的body
    . Z9 k0 j& }  C* A4 q; c
  7. Body *body = (*it);
    4 d" |/ o; w2 H: H$ p" V2 k
  8. std::vector<Face*> faces = body->GetFaces();- A  C6 N- A, q, `' y% ?
  9. for(unsigned int j=0;j<faces.size();j++)
    : J: u/ o; K; h) s2 c
  10. {
    / y/ i7 |4 v8 p5 k5 A; ]
  11. + N' [, f" L2 |! y9 Z" z
  12.       if ((faces[j]->Name().getText())=="FACE1")
    2 K8 l. c- x) I
  13.         {</P>5 G  m. J, ^, ?8 L$ x
  14. <P>             UI *faceui = UI::GetUI();
    ) @8 E' V( x3 W
  15.             faceui->NXMessageBox()->Show("已经找到面",NXMessageBox::DialogTypeInformation,"已经找到特定的面");
    6 c, Z( r/ f5 m& M% v4 |
  16.         }" c7 S; b9 E# |. C# S* z- Z
  17.     else
    ! l! J% p9 r5 n" A( D9 a' W& R
  18.        {
    5 z$ K* D6 {8 |5 j
  19.            UI *faceui = UI::GetUI();
    7 N1 R7 N, ]% l# l  P: D
  20.            faceui->NXMessageBox()->Show("未找到面",NXMessageBox::DialogTypeInformation,faces[j]->Name().getText());8 ^, {& E% W# R% Q# T4 n
  21.        }
    - d) z4 l- t3 e  O* j: k! n
  22. }</P>
复制代码
+ u3 y# G0 ?3 ]/ ~* }
上述代码能够通过编译。在实际运行中出现了上面图所示的两种结果。从图中看到程序判断,(faces[j]->Name().getText())=="FACE1"结果都为假,所以弹出了6个(6个面)“未找到面”的对话框,由于我估计将对话框内容为Name()返回的custom name。但是有一个对话框中内容就是“FACE1”,其余都是空白。既然有一个是“FACE1”为什么不显示“已经找到面”对话框咧?求指教
! u5 j, t% h; w4 o" K+ N/ e9 b8 C5 T& U* A1 p

; x, O9 R+ D1 u3 Y+ @

: N; m( J( K8 v

+ I- E( a2 }2 }
上海点团信息科技有限公司,承接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 编辑
$ u$ Q8 R% ]8 P" R
小新 发表于 2014-4-8 21:55- s7 B! W" }. U/ W! E
你好,我发现在Face类型继承了一个Name()方法,其函数说明的是:Returns the custom name of the objec ...

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

  1. + Q9 T. q2 Z" M% \8 t  K( a
  2. 通过上述代码确实找到了特定的面了。
    6 [/ ?. h0 N$ f/ j6 [% b* Y7 e
  3. [code]Session *theSession = Session::GetSession();
    1 r/ K9 |0 U! q4 y) }
  4.         Part *workPart(theSession->Parts()->Work());4 L( W+ z  Z* f' z8 z$ @' X
  5.         Part *displayPart(theSession->Parts()->Display());8 W2 C1 {, l  s. E: `5 w' s
  6. 7 N5 k3 u' @0 J* z/ Z8 u% \
  7.         BodyCollection *bc=workPart->Bodies();
    # C) }4 x! A- M! Y, m
  8.         BodyCollection::iterator it = bc->begin();//因为只有一个体,所以第一位置元素赋值给下面的body  e) A, J/ c6 G" i! B
  9.         Body *body = (*it);
    ! ?0 q& S4 d0 ~2 v5 C! k/ G
  10.         std::vector<Face*> faces = body->GetFaces();' S8 U! G4 A* {' B5 \. k" n+ |9 H
  11.         for(unsigned int j=0;j<faces.size();j++)
    4 _0 k; d, B) D( N& Y) I
  12.         {) c$ p3 z, p" z/ [- ]$ m3 J
  13.                 const char *c1="FACE1";; G3 N! U! q# L4 i) K6 V
  14.                 const char *c2=faces[j]->Name().GetText();
    + N! A) g1 }5 O! a. z" Y+ I
  15.                 if (!strcmp(c2,c1))
    + {+ V) t* ~; p% K, G+ r
  16.                 {+ s" i' H+ u. I: K1 @
  17.                         UI *faceui = UI::GetUI();& b. ~3 D, G" S
  18.                         faceui->NXMessageBox()->Show("已经找到面",NXMessageBox::DialogTypeInformation,"已经找到特定的面");
    5 ?: W* g8 s2 {6 L, Z
  19.                        
    / x) v0 I  H8 p) ~: ~
  20.                 }* i) F, N. d4 i$ E2 U
  21.                 else
    0 j  b" z. Q- H+ ?) X
  22.                 {4 y; h2 i- k/ v0 R/ {
  23.                         UI *faceui = UI::GetUI();9 u4 y" O) J  J5 l$ W8 @* \
  24.                         faceui->NXMessageBox()->Show("未找到面",NXMessageBox::DialogTypeInformation,faces[j]->Name().getText());
    , I! N- s) t. b  ~& I
  25.                        
    & o9 }+ P! T; p+ d
  26.                 }
    $ r0 B& e9 `/ k

  27. 1 m) l. Q) l5 r- X  O
  28. . ~; X, \$ D5 T( F+ I
  29.         }
复制代码
1 F8 s. p0 D( b4 F

2 z& \( x0 P" ~& q+ i
! ?6 H0 k; j' X! M4 L
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了