PLM之家PLMHome-工业软件践行者

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

  [复制链接]

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

7

主题

28

回帖

173

积分

注册会员

积分
173
发表于 2014-4-7 19:26:05 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 小新 于 2014-4-7 19:51 编辑
& }; e" x( S( w  K, a5 G- w3 Q% Z  n2 P+ L$ [6 ~
我做自动化装配,通过代码定义好其约束关系。但是在具体实现过程中,不知道如何找到定义约束关系的某个实体上的特定的面。如图我想将图上箭头所指的面用于建立约束,但是不知道在代码中如何找到这个面。此外我是想用NX Open C++实现,而不是用UFun函数实现。 123.png
$ A8 Q3 V, s& |
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复

使用道具 举报

全部回复6

2470

主题

1275

回帖

8万

积分

管理员

PLM之家站长

积分
82162
QQ
发表于 2014-4-8 11:20:06 | 显示全部楼层
录制JA , 看看
7 m8 G. H6 E) Q4 D7 O  }% I6 S  a! C( P, n4 m
要么就是通过几何判断了,遍历所有的面,找出比如面的法相是什么,面的类型,面的一些参数什么的 最终确定是你选择的那个面
& w( q- a' a9 ?; J! Y: _
% C4 l4 q# Y# A$ N/ }+ t/ a或者直接找tag
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 doTeam.tech
回复 支持 反对

使用道具 举报

7

主题

28

回帖

173

积分

注册会员

积分
173
 楼主| 发表于 2014-4-8 15:21:21 | 显示全部楼层
admin 发表于 2014-4-8 11:208 n- _# k8 G  {7 c- G" _
录制JA , 看看' A- k! r) f% N) y7 e7 h7 e* o# [

) F" p, R, z" T3 r* e7 c要么就是通过几何判断了,遍历所有的面,找出比如面的法相是什么,面的类型,面的一些参数 ...

' V* q" a: I4 U$ m( @) A3 W我录制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.doteam.tech
回复 支持 反对

使用道具 举报

2470

主题

1275

回帖

8万

积分

管理员

PLM之家站长

积分
82162
QQ
发表于 2014-4-8 19:59:47 | 显示全部楼层
小新 发表于 2014-4-8 07:21
! _. k+ @  E6 M$ W我录制JA后,出现代码Face *face1(dynamic_cast(block1->FindObject("FACE 4 {(250,100,50) BLOCK(1)}"))) ...
  G# [( g2 a; |% b- F7 ~9 y/ y
对的 最简单的方法就是用UFUN的 UF_OBJ_cylce_by_name 函数% n: G2 O7 c# T! f1 P& U

; i* T, O4 v- N' D3 lNXOpen C++ 没有类似的这个功能 ; C* @( h6 d9 r8 j

7 i2 f* m  x9 [开发时候基本是 ufun + NXopen C++3 r- e) p$ g( Y4 G2 x
单独的 NXOpen C++ 你可能实现所有的要求
" F+ r& ?0 T& f+ t; J% _% V
  I. Y6 O+ y! P1 g! x& Q% L6 j两个要结合用
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 doTeam.tech
回复 支持 反对

使用道具 举报

3

主题

51

回帖

278

积分

中级会员

积分
278
发表于 2014-4-8 21:01:01 | 显示全部楼层
楼主说的有道理,顶一个
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复 支持 反对

使用道具 举报

7

主题

28

回帖

173

积分

注册会员

积分
173
 楼主| 发表于 2014-4-8 21:55:15 | 显示全部楼层
admin 发表于 2014-4-8 19:59
. h2 b7 v' W0 @& P对的 最简单的方法就是用UFUN的 UF_OBJ_cylce_by_name 函数
/ ]9 R; [/ T1 n) L# A4 |) N- j+ o! _. F2 S( u
NXOpen C++ 没有类似的这个功能

5 v/ I) J3 A+ \, e3 ]! a 123.png 123454.png 你好,我发现在Face类型继承了一个Name()方法,其函数说明的是:Returns the custom name of the object。我就想这个custom name 是否可能是我在UG给那个特定面命名的那个名字。如果用这个方法返回的custom name 和命名的名字相比较,如果是一致,那么我就从把这个面给保存下来,就算找到了。我按照这个思路用下面的代码验证这个思路。# ^% V. i$ N: y

  1. ' a& k) Q( R* o. \
  2. <P>Session *theSession = Session::GetSession();
    8 N9 ?; ^& W4 r9 N; i% w
  3. Part *workPart(theSession->Parts()->Work());
    " L4 Y" x4 t2 k' j+ w  s0 |
  4. Part *displayPart(theSession->Parts()->Display());
    1 S4 u. B2 H+ l- P' s" [
  5. BodyCollection *bc=workPart->Bodies();
    ; w1 ?: N4 u' n
  6. BodyCollection::iterator it = bc->begin();//因为只有一个体,所以第一位置元素赋值给下面的body
    2 x8 s/ q6 o: y' g- A0 S
  7. Body *body = (*it);5 q( d' J/ j, e4 i3 w4 |2 D6 s
  8. std::vector<Face*> faces = body->GetFaces();
    $ L4 b' r3 g- ~
  9. for(unsigned int j=0;j<faces.size();j++)
    : w( Y* w5 Q1 I
  10. {5 Y* H# E' G5 Y+ D& \

  11. 6 _( \- a9 H& ?! H+ j* ^
  12.       if ((faces[j]->Name().getText())=="FACE1")
    9 x) e! ~; g5 c; n9 m# \
  13.         {</P>5 z) C' B) `- I8 |/ ~
  14. <P>             UI *faceui = UI::GetUI();
    ( M/ ]+ F- ^  l; t3 H- y' z
  15.             faceui->NXMessageBox()->Show("已经找到面",NXMessageBox::DialogTypeInformation,"已经找到特定的面");
    ' B+ W$ D6 ?1 n1 Q# j
  16.         }
    3 s, Y4 I( k! ~  K
  17.     else
    * t' q; Z9 a! \" ^! A% u
  18.        {
    & L7 \) Y. t  l6 o9 Y& p
  19.            UI *faceui = UI::GetUI();
    * d/ k& d4 x+ ?6 W/ R# j7 b" b
  20.            faceui->NXMessageBox()->Show("未找到面",NXMessageBox::DialogTypeInformation,faces[j]->Name().getText());
    * |" [3 i0 J/ W' ]6 W6 k" F1 F
  21.        }
    # X3 d+ C' V1 N& R
  22. }</P>
复制代码

* `7 l4 d4 B7 X* m  r上述代码能够通过编译。在实际运行中出现了上面图所示的两种结果。从图中看到程序判断,(faces[j]->Name().getText())=="FACE1"结果都为假,所以弹出了6个(6个面)“未找到面”的对话框,由于我估计将对话框内容为Name()返回的custom name。但是有一个对话框中内容就是“FACE1”,其余都是空白。既然有一个是“FACE1”为什么不显示“已经找到面”对话框咧?求指教
# C* t: r9 U) Z: [
  |- w1 w9 \7 H. j3 a8 g4 m: ?0 m& u" S
' }; u2 |8 }8 y" m% |( ~$ N2 n
% h+ e# W; v% I- B+ L9 l/ B
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复 支持 反对

使用道具 举报

7

主题

28

回帖

173

积分

注册会员

积分
173
 楼主| 发表于 2014-4-8 22:22:41 | 显示全部楼层
本帖最后由 小新 于 2014-4-9 10:35 编辑
# x1 G+ c. Y) d  A% b
小新 发表于 2014-4-8 21:55
8 Z% G0 Y9 [; t: F( d+ p) ^7 w你好,我发现在Face类型继承了一个Name()方法,其函数说明的是:Returns the custom name of the objec ...

) k7 V7 z# e" E5 e- K 1414.png 问题已经解决,按照上述思路是可行的。子所以出现上述问题是因为我在if语句判断时候没有处理好,应该用下面代码;

  1. ) p8 u$ \2 q% I+ ^! w" o0 a
  2. 通过上述代码确实找到了特定的面了。  _9 M' O" ^" s$ ]3 D/ a
  3. [code]Session *theSession = Session::GetSession();
    $ p0 O3 J2 B& H+ f  U/ Z/ p
  4.         Part *workPart(theSession->Parts()->Work());
    3 ~0 Q; O+ M* A( p; z
  5.         Part *displayPart(theSession->Parts()->Display());4 s; o9 n0 F- t2 b+ |
  6. 6 h, N2 }& p" |* H' P0 z5 e* z
  7.         BodyCollection *bc=workPart->Bodies();, J( f. v% [: D7 M" H6 s
  8.         BodyCollection::iterator it = bc->begin();//因为只有一个体,所以第一位置元素赋值给下面的body# [2 o* q1 [; z5 i+ g! U" I. h
  9.         Body *body = (*it);8 U) s$ E/ Z# p/ q( E& c
  10.         std::vector<Face*> faces = body->GetFaces();
    & Q( M$ a6 J% l
  11.         for(unsigned int j=0;j<faces.size();j++)" M* z7 T! F! P
  12.         {+ E! `- r$ B6 F0 Y; Q& `: Q6 ]  Y! E
  13.                 const char *c1="FACE1";, W3 _4 J% Y/ u" X9 q1 z
  14.                 const char *c2=faces[j]->Name().GetText();& Z  o, @8 O7 `2 s
  15.                 if (!strcmp(c2,c1))
    & t( c  J! C! @. t6 ]7 Z
  16.                 {) T5 t9 M$ @% R9 E0 K. m! `
  17.                         UI *faceui = UI::GetUI();8 y7 f0 Z7 u  q5 i) m+ K4 f
  18.                         faceui->NXMessageBox()->Show("已经找到面",NXMessageBox::DialogTypeInformation,"已经找到特定的面");! E9 B( [9 }' k4 e/ U- G- F
  19.                        
      K2 k. D5 ~: ]* ]9 q$ R( u
  20.                 }
    + z7 `0 Z* A9 ~6 m; P, Y
  21.                 else
    # l$ l0 V$ t9 ~! q" F" G/ x
  22.                 {; Q9 J- Z6 S$ k! ]+ x& r1 N  K* Y  s
  23.                         UI *faceui = UI::GetUI();
    / A# Y9 v4 ^  G
  24.                         faceui->NXMessageBox()->Show("未找到面",NXMessageBox::DialogTypeInformation,faces[j]->Name().getText());3 B8 P2 W( @; p/ d6 [
  25.                         , [+ {5 D: g1 p6 h; m2 u* I# |
  26.                 }
    , ]3 n7 A; y$ o$ W! U

  27. ' e  ?; o. q6 n( L

  28. " Z; L& o, [' C7 ]( J1 }7 A
  29.         }
复制代码
; S6 I9 U7 w" I; o7 f

" z; {0 N$ [# }1 G1 u, M  }9 J- \9 ^, |0 k" K
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复 支持 反对

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 注册

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

    本网站(plmhome.com)为PLM之家工业软件学习官网站

    展示的视频材料全部免费,需要高清和特殊技术支持请联系 QQ: 939801026

    PLM之家NX CAM二次开发专题模块培训报名开始啦

    我知道了