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

[求助] UG二次开发中,怎么选取特定的面

[复制链接]

2016-12-12 12:24:54 6253 2

heromo 发表于 2015-11-9 08:37:08 PLM之家手机频道 |阅读模式

heromo 楼主

2015-11-9 08:37:08

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

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

x
比如,第一步创建了一个长方体,第二步在其中一个面打沉头孔,那么怎么获取自己想要的面呢
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复

使用道具 举报

全部回复2

15757753770 发表于 2016-12-12 12:24:21

15757753770 沙发

2016-12-12 12:24:21

01、选择对象- W6 D# m! q/ L# B! K5 b) ]% F1 F

4 o- n: S/ N* G# {8 K" ~捕捉
6 T7 z/ v) K" r) D+ q& ?* I  PointOverlay             是否显示捕捉点# n2 z5 i: P' k6 L( q2 f  M
  SmartUpdateOption        智能更新选项# U8 {2 g$ i* r' c8 W' L
                             Within Modeling   在建模( \0 i2 ?3 a% ~' y3 l9 ?
                             After Modeling    建模后: j% C& J# j! b% Z, f
                             After Parent Body 实体父后
" g: j1 p" w! W0 [: H8 h- B$ r                             Mixed             混合- x1 N5 y5 A, w5 Y; X9 |& q3 O
% P9 Q9 v1 K1 R  r% |
  SnapPointTypesEnabled    设置捕捉点类型的可见性* k, b5 }! S, K! s+ j# N
  SnapPointTypesOnDefault  设置捕捉点类型相关的内容被启用
5 u1 N, [6 W/ m& O, O  k9 D$ l3 Y
7 e- l" ~, a5 f" n0 v  \/ q常规+ ?5 E7 h# G; G/ L7 l
  BlockID  控件id( D# G2 i# P  u' i; P; P
  Enable   是否可选/禁用控件! Y; @, i8 m1 E7 X) T
  Group    组1 B/ p: d  ^' u4 [8 R' Y
  Show     是否可见  t/ r. p" K, T: e: f  x, l: \
( H: w' f7 m& u6 a! [
其它
+ O- Y8 M  {/ }- V  附着
! [. ]$ W7 U" J, B6 q% ?5 S    Bottom  底
2 T: t, ^! \' M' r    Left    左
* r& t+ U/ T% G0 i" O* C% E    Right   右( o( N" Q9 Y. M! d4 Y  Z/ p1 B( G
    Top     顶  ^$ n+ Y+ m# g( \

* F; h: N6 o$ q% K& e: x% g: `特定于块
% x3 U" m4 f+ W- D) C+ h  AutomaticProgression     选择后焦点是否自动跳到下一个控件4 V2 D# o. S, C' T
  BalloonTooltipImage      动态提示图片(鼠标移动到控件是显示图片)
0 w# |4 |" H& l2 P2 Y5 a' [- E  BalloonTooltipLayout     动态提示布局4 x0 v! }3 e) r( H3 q' n1 f
  BalloonTooltipText       动态提示文本内容
* ]3 n) p' z4 c) K9 M/ S) ~  Bitmap                   指定图片/ `# A+ a/ S, |3 @- U
  BlendVirtualCurveOverlay 是否显示虚拟交线' M, g( N! T5 y/ j3 k% g! r6 {
  CreateInterpartLink      是否显示部件间连接图标在选择条上" P1 P0 P' Q/ b" ]7 {' [
  Cue                      提示
* F2 P# d8 q+ m9 g; c* a  N
' b7 x" ^( L! Y5 @$ `6 c  InterpartSelection       部件间选择设置, X6 Y/ q, K( ?$ W6 i& K' D! ~
                             Simple                                           简单/ z; Q7 l% k. ]
                             Non-associative Interpart Copy Only              只复制部件间非关联$ S6 d8 l% {& \$ b% s( r5 G
                             Associative and Non-associative Interpart Copy   复制部件间关联和非关联9 j- X$ Y0 s. K
                             Associative Interpart Copy                       复制部件间关联
! ^2 u: }0 N. L1 H' Z. c! g) O
3 [! d" ?3 o4 F  LabelString              标签标题+ y1 \* a/ _! Q2 L8 u% v: f
  MaximumScops             设置选择范围& f' u$ j  |7 C6 U- y$ \  Y
                             Entire Assembly                 所有组件/装配
4 a; n  r3 H- @7 R, L/ P                             Within Work Part Only           只是工作部件
% @1 s  w& y: V                             Within Work Part and Components 工作部件和组件/装配). F$ k' p6 ^: R  y. X+ [& s: g& ?4 O

9 M6 G* v1 p$ o2 f1 @  Z  SelectMode                设置单选/多选
8 h6 N0 P2 a( k. F# h6 d4 o                             Single   单选& m0 Z; i6 X+ M  R" ]) j
                             Multiple 多选9 {9 i2 r. [- Y7 X7 f( \0 Y
1 \2 n) X: z* o) |# @
  StepStatus               设置确定和应用按钮什么时候高亮 (Required 必需的时候)(Optional 可选的时候)(Satisfied 满意/满足的时候)# }5 Y/ ]. p. t: @/ l
  Tooltip                  动态提示文本标题(Bitmap指定图片时,鼠标移动到图片时提示文字)
- _1 }7 t; U0 P( ]( w' y! E/ ]) I( n6 R! c5 j% t
————————————————————————————————————————————
5 `4 c6 A; B6 p6 `" }————————————————————————————————————————————
; Q4 W% U; y) {0 y4 d+ t咧子:获得selection0控件选择的对象1 W6 Y9 C3 h" x$ o& Z. s- h
      UF_initialize(); * f/ H" H- d6 q+ g( p7 u/ ?# I1 B
      std::vector<TaggedObject*>objects=this->selection0->GetProperties()->GetTaggedObjectVector("SelectedObjects");; a4 o" |0 Y4 M3 r1 j. z  ]" ]
      for ( int i=0;i<objects.size();i++) // size 列表长度,这里指的是 对象个数
2 G) V3 P4 A, ~7 U% y      {      / J7 L6 D6 [# i+ {# o+ K/ F, Q" B
         UF_OBJ_set_color(objects[i]->Tag(),1);- x8 A* w9 ?5 \. T
      }( @7 U) D, @: c% i+ g% Z
      UF_terminate();/ C' n7 D6 a9 F7 k! b, v9 I  s; v

1 E8 u/ }: G0 o9 w  @, s% X————————————————————————————————————————————5 I" r) ~5 l+ |, k! w5 \- C
咧子:对象加入到selection0选择控件的对象列表9 A; t1 i- J+ r% R

0 Y/ c- O+ A6 _; }( e: a      tag_t obj=NULL_TAG;2 y  i7 X: f2 a# F& k( L
      double point[3]={0,0,10};7 C9 G6 B2 ?5 _3 Y/ J& K( b, ?4 m1 _
      double XYZ[3]={60,50,80};% R+ a# ^6 z: q, R1 Q( V& N/ P
      char C[132]="";2 z- ?) F/ m4 X: o
      char K[132]="";
3 N5 |2 e3 c- Y. Z) e  l. l      char G[132]="";8 J/ p$ d- x. g- Y
      sprintf(C, "%f",XYZ[0]);
" B2 }/ E: X( z) j, P3 w3 {& J- Q      sprintf(K, "%f",XYZ[1]);
4 o4 x! W' s/ @+ v      sprintf(G, "%f",XYZ[2]); 8 J- @, p5 t# Q( c) x
      char * edge_len[3]={C,K,G};, w3 W. _* R6 T/ b8 O/ {4 m
      UF_MODL_create_block1(UF_NULLSIGN,point,edge_len,&obj); //创建方0 H. V: t8 ^3 }8 l
      UF_MODL_ask_feat_body (obj,&obj); //从特征中取出实体. d) `6 Y9 s( _

7 @1 s9 s( U: ?# [      Body *body1(dynamic_cast<Body *>(NXObjectManager::Get(obj))); //tag转换给nxopen. o+ `7 e9 ^7 |. d( X
      std::vector<TaggedObject*>objects;! @' _5 s3 c) O: L
      objects.push_back(body1); //对象加入到selection0选择控件的对象列表- S- l7 u8 H9 ~$ U
      selection0->GetProperties()->SetTaggedObjectVector("SelectedObjects",objects);2 R9 \% J/ [. ]' }' b, O7 g
————————————————————————————————————————————
  Z/ x  P+ y& [' [4 @( D
0 U3 L. K& O4 w  x2 c//清除对象( ~8 f9 Y0 k5 _, i
std::vector<TaggedObject*>objects;" D# p- w: H. W+ R  R/ w
objects.empty();
! R# a* V2 t* p* ^  y4 sselection0->GetProperties()->SetTaggedObjectVector("SelectedObjects",objects);+ z7 v8 k, a9 ^" l# Z
0 _0 k) X  U* V: B+ z
————————————————————————————————————————————- c. x' I0 m  a1 J
咧子:只选择面
. D( N2 p5 w* D# o; r  l        initialize_cb() 初始化里加代码 或 dialogShown_cb()显示对话框里加代码 可进行对象选择过滤$ @' s1 B( {  [2 W* _( u
6 i# ~' ~! f" ~# x3 l! k% w+ z
        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式- Y# N- T' D/ w, c1 p/ Z3 y1 |, n4 _  s

1 u* Y: s$ C+ c2 o: \, k        //对象选择过滤 只能选表面
. E6 c4 X$ ~2 P  \# a7 |6 z. g0 }% @        selection0->GetProperties()->SetString("LabelString","选择表面");
' m7 i$ P5 ]6 N9 g5 g+ W9 N+ N* O        std::vector< NXOpen::Selection::MaskTriple > maskTriple;2 V( h7 u, i  y: d, I+ J6 u+ R
        Selection::MaskTriple mask1(UF_face_type,0,0);
/ Q2 c9 d* I4 R; O- }: Y8 f& p/ y/ }        maskTriple.push_back(mask1);2 [% N. Y+ ~4 t; c  h5 t8 D: n
        selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);2 f- L) |$ I& y" k2 a+ V% x

3 d$ S" r! r4 H
4 D+ F  _; M% u0 _咧子:只选择面 【UG本身过滤器跟着变】
/ F. q& ^' T+ Z# r5 {  H( e6 b        initialize_cb() 初始化里加代码 或 dialogShown_cb()显示对话框里加代码 可进行对象选择过滤   
7 R  f/ i) z: ?* j2 _3 s
- T* Y  t6 }) f+ M        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式
# r# q% a5 O1 u9 k9 K. F- I
5 D* q" R; ~4 G4 l. s        std::vector< NXOpen::Selection::MaskTriple > maskTriple;
) I6 L7 c9 K- [) u; F) e7 C        Selection::MaskTriple mask1(UF_face_type,0,0);
* A* o0 `- ^# K5 h6 n        maskTriple.push_back(mask1);9 ?/ {- A, p, @  k( Y# i
        NXOpen::BlockStyler:ropertyList *selComponentProps = selection0->GetProperties();3 O9 u8 x; ^' f! f8 c
        selComponentProps->SetSelectionFilter("SelectionFilter",Selection::SelectionActionClearAndEnableSpecific,maskTriple);. i0 b' |! [& G% k7 R# f
        delete selComponentProps;
- M" h! _8 {4 @        selComponentProps = NULL;* M+ w6 c2 v; N) |; o3 o

( }7 @) N  K* c$ e1 U6 n, o; l
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复 支持 反对

使用道具 举报

15757753770 发表于 2016-12-12 12:24:54

15757753770 板凳

2016-12-12 12:24:54

列子
+ {4 n2 Z) {1 b, B3 H' R" e& x9 [0 W) J4 `' F: H5 W" r
————————————————————————————————————————————2 I/ K1 `7 s  I
————————————————————————————————————————————
- e2 b; Y# L1 B% @咧子:只选择 实体边缘 直线和圆弧
! _1 P, c2 J9 l  N  M/ W. U  [4 j% p" A
  initialize_cb() 初始化里加代码 可进行对象选择过滤' e7 g4 R( o5 R2 F3 X; V7 s5 T
3 n. g; Z% e; N0 o6 R
        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式0 O1 m" S5 \5 c/ g( n0 F
                        selection0->GetProperties()->SetString("LabelString","选择边缘");//只选择 实体边缘 直线和圆弧
3 g: Z$ @# z/ `% n7 R                        std::vector< NXOpen::Selection::MaskTriple > maskTriple;: \0 }8 x) ?2 i. E
                        Selection::MaskTriple mask1(UF_solid_type,UF_solid_edge_subtype,2);9 l$ g/ P1 U, \5 `
                        Selection::MaskTriple mask2(UF_solid_type,UF_solid_edge_subtype,3);% d5 K3 [1 Q* Y
                        maskTriple.push_back(mask1);( e! Y& S4 a) `3 F
                        maskTriple.push_back(mask2);
! F# V- U% |) w% m1 r+ w. ?                        selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);
' u' \; B6 y- Q% e0 M5 k! T' O& u2 e0 D2 p
//过滤无效的边缘9 h5 \) `( T1 R" I0 T2 [' @2 ]2 B$ U. x
int ML_NX001::filter_cb(NXOpen::BlockStyler::UIBlock* block, NXOpen::TaggedObject* selectObject)
- o3 K6 Z; u  g( }8 W# e9 r1 X{        $ H: J' I+ p0 m) B
    tag_t obj=NULL_TAG;* J$ Y( V, g/ _0 f  O+ u/ L/ k
    UF_MODL_ask_edge_body(selectObject->Tag(),&obj);: X, c5 g5 A. y0 I/ D
    if (obj==NULL_TAG) return(UF_UI_SEL_REJECT); //不加入到对象预览列表& m  ?" s8 a3 V  L1 F4 T* m
    return(UF_UI_SEL_ACCEPT);                    //加入到对象预览列表+ H- M, I# `% K, x' N3 E) `% p
}
; R4 |+ E# |2 I1 q4 {# _! \————————————————————————————————————————————
$ Z0 D% Q8 _, n* c————————————————————————————————————————————0 W# m6 c! V: `! c
咧子:通过枚举控件选项来 时实  分别过滤 边缘、表面、实体
& o' A& v. u8 L6 @6 X+ Z  v( o' Q$ B8 p
   int enumValue = this->enum01->GetProperties()->GetEnum("Value");
/ t' f  t3 c6 Z* o0 [                    if (enumValue==0) 1 X$ M5 y' L. B
                    {/ o- |. `: ~. H3 l; t6 a
                            selection0->GetProperties()->SetString("LabelString","选择边缘");
; ~5 Z# L0 O8 C6 B  l                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;
6 P. Y7 A8 W( Q8 C* L$ u. T                            Selection::MaskTriple mask1(UF_solid_type,UF_solid_edge_subtype,2);: h" _: S3 U$ ]: p
                            Selection::MaskTriple mask2(UF_solid_type,UF_solid_edge_subtype,3);
: d  [) B. y) k1 q# v5 `                            maskTriple.push_back(mask1);
7 Z; l3 k0 R. l: h5 M6 D. p% t                            maskTriple.push_back(mask2);
+ {8 W1 Y, V; E3 ~$ x                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);
/ B  o" i& E! [9 |4 i                    }5 R8 A+ @+ c# ^, O& z4 p  \
                    if (enumValue==1)
# g, b" m& b* w* Q6 _                    {
8 D# K2 R8 V0 X' b) h" J% S                            selection0->GetProperties()->SetString("LabelString","选择表面");
1 Z8 z* i1 [4 }) _8 A7 g5 _                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;% g4 V$ {, C! q; R
                            Selection::MaskTriple mask1(UF_face_type,0,0);
' H+ |: X1 |7 ]. [                            maskTriple.push_back(mask1);; g, d# L( v& w, R  f: @5 m7 k
                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);
( ]6 G- X' a9 n                    }
4 q7 }& R4 e( t1 P                    if (enumValue==2) % p; i* X( q5 u
                    { & s+ A: e2 H, U5 T2 v. O
                            selection0->GetProperties()->SetString("LabelString","选择实体");
* p6 R/ r* l9 f9 I                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;1 S; m% t0 s. S
                            Selection::MaskTriple mask1(UF_solid_type,0,0);9 H- {( u1 e# ^
                            maskTriple.push_back(mask1);% x- l1 C: V$ w& _" o
                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);
! n3 f* f8 Z8 `* l6 R; K                    }
$ `4 [2 O" y& p6 ?/ D
, j0 r, U& y" E! N* H- Y8 V* J" N. w9 }" ]6 u
//------------------------------------------------------------------------------
. c+ M# r3 H4 @$ g5 b* y//Callback Name: filter_cb 过滤不符合对象
, i8 [% h7 u$ y& y! n//------------------------------------------------------------------------------
, i; y# N2 b. r, ~int ML_NX001::filter_cb(NXOpen::BlockStyler::UIBlock* block, NXOpen::TaggedObject* selectObject)9 |4 X, Y! ~' z- [! V
{( O0 G( f' a* m/ [
        
3 d) L2 o* M! U0 ?8 ~        int enumValue = this->enum01->GetProperties()->GetEnum("Value");
$ d1 |9 K: _, D. p6 _( T/ z        if (enumValue ==0)
% L$ S, B& H  c6 F# r) U2 u        {5 ?3 P. v, A. ?* D5 s" I
                 tag_t obj=NULL_TAG;; q& P" Q- M2 _& J+ ?; }
                 int err=UF_MODL_ask_edge_body(selectObject->Tag(),&obj);
% q/ r9 x( H. D7 p2 ^                 if (err!=0 && obj==NULL_TAG)2 U" W/ w! ~! p  ^1 Z
             return(UF_UI_SEL_REJECT); //不加入到对象预览列表
  c9 R7 S6 r1 [3 K& o3 P        }7 c  k/ l* G+ g; d, x4 f3 q  B' _3 f
        else if (enumValue ==1)
9 ~: R5 j& Y$ L8 Q        {
3 |/ L3 `( l7 G2 h& A                 int type=-1;
0 u. s& ~) ], o                 int err=UF_MODL_ask_face_type(selectObject->Tag(),&type);8 s- }5 r" L/ z5 {+ n
                 if (err!=0 || type==-1)
, \" w! ~& H" y( i3 ]             return(UF_UI_SEL_REJECT); //不加入到对象预览列表
5 |, p; a; |. Z7 g/ H  W) g        }
4 q! L9 ~6 G! J8 B& c* K        else if (enumValue ==2)* [1 z3 B0 R' i& p1 ]+ X2 B* j
        {5 E9 M; M" e$ |, t1 c
                 int type=-1;" a* [0 j' P  ?& k- h# G# I: d. m$ d: n! ]
                 int err=UF_MODL_ask_body_type(selectObject->Tag(),&type);. `" U: M2 v( i
                 if (err!=0 || type==-1)
6 ]- g& q, h( D( s% @/ c/ }: s             return(UF_UI_SEL_REJECT); //不加入到对象预览列表8 Y4 P8 R( Z9 R- r! j& @$ E8 k& E* _
        }
. A" P6 H! s' E* e! P) h9 ?0 H( v" |5 Y: S
        return(UF_UI_SEL_ACCEPT); //加入到对象预览列表/ i8 R9 s, x8 F
}" l1 [: e0 H! X& A9 B2 C
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了