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

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

[复制链接]

2016-12-12 12:24:54 6252 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、选择对象
) T$ m; H# D2 z5 {7 w4 V9 G" X0 X7 }& |
捕捉
: ?  N4 x1 Q  g& W% K' P, {' N  PointOverlay             是否显示捕捉点
3 c. E* l; t. \6 N% J. S  SmartUpdateOption        智能更新选项/ x+ D: w' }" H; |# [$ y5 l" n6 X
                             Within Modeling   在建模1 e' _' V8 z: [% c1 a) }2 m8 H
                             After Modeling    建模后
: W8 q5 H6 M/ `3 Y2 S. k                             After Parent Body 实体父后
7 u; {; |; H- i, F: ]& D                             Mixed             混合
" s: d& F: l, u. Z' ]  m+ S5 C
( A; K% S( K0 }$ |" [  SnapPointTypesEnabled    设置捕捉点类型的可见性
2 q5 c# e, L9 f8 Z  SnapPointTypesOnDefault  设置捕捉点类型相关的内容被启用
8 O' z; k6 \! S" \/ f, k; C% K! p. l% Z2 ?/ l  T6 L4 P" B! d
常规8 h9 Y1 P/ Z) P
  BlockID  控件id
  D# k. N: A5 P. W- q  Enable   是否可选/禁用控件0 p% n( N3 p9 B$ ?
  Group    组" \$ `- \% d- G, \0 ?' C+ T
  Show     是否可见* K  \' p, \. o5 L' m1 x
$ H; P( C1 h( C
其它 1 b3 e* i) @! v# _" c$ M- T; d  r% g
  附着
/ x8 b0 G( P5 B" `* G1 P7 F! G    Bottom  底# E2 r- v: @: W% f9 G# e# H7 F
    Left    左
7 F. v) b7 h& X# t, |    Right   右
+ B* t3 M1 K- U5 e# a- j5 U    Top     顶% E+ A$ h$ F, [! E0 e% N

7 |6 L4 f) ]  _% V. W$ j+ V特定于块. `1 Z. `2 _. _1 C' v! G# n( [
  AutomaticProgression     选择后焦点是否自动跳到下一个控件; u, M3 H4 w4 w  @
  BalloonTooltipImage      动态提示图片(鼠标移动到控件是显示图片)9 @; f. T/ r8 t; ^
  BalloonTooltipLayout     动态提示布局. h$ J3 `8 W  k( z
  BalloonTooltipText       动态提示文本内容
% e! `8 Z$ w1 n) w* x  Bitmap                   指定图片
3 s$ B+ @" U: o+ S+ n  BlendVirtualCurveOverlay 是否显示虚拟交线3 v8 b# Q2 J# z6 ~6 e$ N! c' b- r2 t# `
  CreateInterpartLink      是否显示部件间连接图标在选择条上
. k/ }1 W& I1 k- X- D" U  Cue                      提示
: T7 X8 P" _3 O7 n: D0 s+ s- j& [: [
& B2 P, e2 S. O. ~  InterpartSelection       部件间选择设置
- u7 ]0 E; v! R: C" w8 z4 u0 }                             Simple                                           简单. \7 h6 g. \% |' E. l1 v2 p$ W; F
                             Non-associative Interpart Copy Only              只复制部件间非关联# b3 z' X2 g* j) w0 W6 }% E& O& m1 k0 {
                             Associative and Non-associative Interpart Copy   复制部件间关联和非关联
  F( P/ ~; t' Z  x) b  H1 u' A! l                             Associative Interpart Copy                       复制部件间关联- w; r% M+ i  o
3 T8 C, k' P/ G- t1 z: ?  l
  LabelString              标签标题
5 D& @6 f( }6 m, I  MaximumScops             设置选择范围0 X9 h& V8 _& {# `! V
                             Entire Assembly                 所有组件/装配+ \- [7 u/ [7 u; V
                             Within Work Part Only           只是工作部件5 [- J6 I) o: n* U! \
                             Within Work Part and Components 工作部件和组件/装配)
- v& r+ o" u3 C- t. T8 v& Y, w5 W" m3 a+ k( e' C4 `
  SelectMode                设置单选/多选 ! G1 D* c& L( Z7 y# E
                             Single   单选! C$ @' ]( Q/ z2 N/ A
                             Multiple 多选$ D8 `% W/ k9 w2 U; [" q

2 Q; [6 @( g) c6 p$ ^  StepStatus               设置确定和应用按钮什么时候高亮 (Required 必需的时候)(Optional 可选的时候)(Satisfied 满意/满足的时候)+ w/ A# y8 E% n; a
  Tooltip                  动态提示文本标题(Bitmap指定图片时,鼠标移动到图片时提示文字)
( t) o% z8 n, H" M% r8 Q' @; e
' b9 K6 k, S/ y0 b: l3 }————————————————————————————————————————————
- d2 v: ^0 ~  A) u————————————————————————————————————————————
# l& h) T! m! I+ x6 i! O咧子:获得selection0控件选择的对象
# j0 D0 Y/ V8 A; w. [% u      UF_initialize();
& i# d) N* P; M6 T* H$ I% m! e      std::vector<TaggedObject*>objects=this->selection0->GetProperties()->GetTaggedObjectVector("SelectedObjects");
( E) \6 @9 k7 |6 ]      for ( int i=0;i<objects.size();i++) // size 列表长度,这里指的是 对象个数
: U1 Y; l7 u  W! Y9 |, z1 M8 s' o      {      
$ x+ c5 E% @+ g1 q         UF_OBJ_set_color(objects[i]->Tag(),1);
& e0 `% |5 t, p( @      }4 I& M8 V3 H+ i" q/ Y- T, t* ]
      UF_terminate();+ x( M: R; S& e# n: Q
7 S( s) e: ]' e7 X0 u, F
————————————————————————————————————————————
2 z3 t5 }" j' E: r咧子:对象加入到selection0选择控件的对象列表
; X8 P9 o5 |- X, D9 T7 a7 V
7 z7 B3 r& O" I- h; h4 a      tag_t obj=NULL_TAG;
& u$ n6 @1 D) C) H      double point[3]={0,0,10};
. ~( ]2 V: k0 s9 j5 b8 |$ E      double XYZ[3]={60,50,80};
( ]( x, g5 j% I, E      char C[132]="";" H; q: Z3 N' F2 L( W
      char K[132]="";3 S8 R" F. {; o6 I7 K
      char G[132]="";
8 ]/ {! ~5 X% x6 I9 W      sprintf(C, "%f",XYZ[0]);. X( Q  Z) w. E' ?
      sprintf(K, "%f",XYZ[1]);
$ L  R8 j1 \5 D: X; d      sprintf(G, "%f",XYZ[2]); 1 I# k0 h. ]7 D/ F/ U8 l; }
      char * edge_len[3]={C,K,G};. ^# S4 \# m( T( T- f- b/ A
      UF_MODL_create_block1(UF_NULLSIGN,point,edge_len,&obj); //创建方7 J$ v8 k5 b; {( M: j  r* _9 j/ ]
      UF_MODL_ask_feat_body (obj,&obj); //从特征中取出实体
( a+ l3 T' x. f& k& K
+ J& P! `# T" M! ~" u8 O      Body *body1(dynamic_cast<Body *>(NXObjectManager::Get(obj))); //tag转换给nxopen+ Q& v  R5 T) t( S" W9 j
      std::vector<TaggedObject*>objects;
0 W+ ]8 U( I- _. F9 |8 k      objects.push_back(body1); //对象加入到selection0选择控件的对象列表
& f& n$ U7 L/ L; v5 H. S      selection0->GetProperties()->SetTaggedObjectVector("SelectedObjects",objects);! l2 c  q/ M1 Y: G# y7 L' S
————————————————————————————————————————————
( w$ f4 J. i" L' y' W! `' j( c: C, A* Q
//清除对象
( Q' e( z3 |; m: X3 b" k( ?std::vector<TaggedObject*>objects;: _5 F7 z  T: r- \& I2 b& ^- y: A' K
objects.empty();) V$ N$ F" ~% f$ I0 w+ r
selection0->GetProperties()->SetTaggedObjectVector("SelectedObjects",objects);5 T& s# n2 Z# ^& M0 y/ i
3 R& G, |1 n" `1 |" R
————————————————————————————————————————————
3 i7 E- T% r' d; X2 O* _* }咧子:只选择面3 a& \8 U! `. Q: q5 N9 k* C
        initialize_cb() 初始化里加代码 或 dialogShown_cb()显示对话框里加代码 可进行对象选择过滤" p. M8 ^  E, `, @% p

# [6 {/ ]8 [9 ]% q# p) n3 e0 p        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式6 \8 E" p& m0 B: e! w. _

1 W. L7 C3 b' R8 o        //对象选择过滤 只能选表面
. g! u1 D! F" V% S! W( N$ r        selection0->GetProperties()->SetString("LabelString","选择表面");. X4 j1 h0 o. z3 a
        std::vector< NXOpen::Selection::MaskTriple > maskTriple;8 c) A. _5 n6 V7 t, H: r8 ~8 `
        Selection::MaskTriple mask1(UF_face_type,0,0);, i& ]" E$ S, Y' s1 k2 a  [/ r
        maskTriple.push_back(mask1);
6 }# g7 q8 Q) o( r& W( r7 Z        selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);6 a; [7 L$ Q0 S# `, V6 X. \

) J# T/ N" C! M: j( ]
. t- Y. g6 j7 Q. V2 K- g3 T. ^, `咧子:只选择面 【UG本身过滤器跟着变】
3 ]- v* g7 D# {. l        initialize_cb() 初始化里加代码 或 dialogShown_cb()显示对话框里加代码 可进行对象选择过滤    & _- _* `2 I5 {4 T* w( V1 w- A/ L# \

# ~) d( D4 t5 f" E/ Y        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式
5 I( p. l& z4 |- M/ A, M
, C3 y4 f- Z' f# x        std::vector< NXOpen::Selection::MaskTriple > maskTriple;
  W* `. w# ^' G" D; z( D, F- E        Selection::MaskTriple mask1(UF_face_type,0,0);
3 S6 x% y- l# c1 X( h        maskTriple.push_back(mask1);
6 z. l+ X$ Q/ n/ h+ C: |* x/ Y        NXOpen::BlockStyler:ropertyList *selComponentProps = selection0->GetProperties();
- c  @  f/ B, V/ _6 S: g( v        selComponentProps->SetSelectionFilter("SelectionFilter",Selection::SelectionActionClearAndEnableSpecific,maskTriple);
% @' w+ R) M1 \6 z' J! ]- a0 F        delete selComponentProps;* a5 }2 |4 f) |9 T
        selComponentProps = NULL;
! V) c: e& i0 ]/ g( @) B/ z2 x6 [+ ]
上海点团信息科技有限公司,承接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

列子+ p8 N9 f# {+ y$ f# c

8 h* {: l5 u( }————————————————————————————————————————————
8 f! {4 q& ?% H————————————————————————————————————————————
7 X. a/ U. O% o% R) V$ l咧子:只选择 实体边缘 直线和圆弧
7 E9 g- n/ N5 Y- {( k/ M- r% X) o/ ~+ t6 ^
  initialize_cb() 初始化里加代码 可进行对象选择过滤
% w+ a6 L8 L2 G1 H- y. ~$ ^  Q, ]6 u  ~) d3 Y  I) Q. A. _
        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式' S5 ?# E& p- K" J, E
                        selection0->GetProperties()->SetString("LabelString","选择边缘");//只选择 实体边缘 直线和圆弧
- q8 z. H8 c) a7 D                        std::vector< NXOpen::Selection::MaskTriple > maskTriple;/ ~' Z0 m8 d$ Y  e
                        Selection::MaskTriple mask1(UF_solid_type,UF_solid_edge_subtype,2);: |* w4 ]9 A8 p5 U: m
                        Selection::MaskTriple mask2(UF_solid_type,UF_solid_edge_subtype,3);
: v3 Z' _) y1 ~& j                        maskTriple.push_back(mask1);; v) A5 d2 e1 z* H
                        maskTriple.push_back(mask2);) r# s  f. W/ B& e
                        selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);
7 `: K! x" P& i. m, M: ]8 I( B" C6 _, V
//过滤无效的边缘* `/ o9 ~/ J3 a+ _
int ML_NX001::filter_cb(NXOpen::BlockStyler::UIBlock* block, NXOpen::TaggedObject* selectObject)
0 |2 ]- Z3 Y& v% R- `1 M3 T{       
8 B/ T" E3 x  s9 N    tag_t obj=NULL_TAG;
- a& \( X2 M# U3 N4 M5 u    UF_MODL_ask_edge_body(selectObject->Tag(),&obj);
7 }1 v1 Y* t" m# U/ E. ]6 F    if (obj==NULL_TAG) return(UF_UI_SEL_REJECT); //不加入到对象预览列表
  k4 D. S+ K/ R, Y5 G: [    return(UF_UI_SEL_ACCEPT);                    //加入到对象预览列表5 I' e' i0 H* A6 S5 y
}( h; z4 {# L8 k1 M6 J
————————————————————————————————————————————
; I' ]- B/ T2 @# b) X" i————————————————————————————————————————————8 h/ T( `% U, W/ S# o
咧子:通过枚举控件选项来 时实  分别过滤 边缘、表面、实体1 q" n( n5 {, o2 b( E, N6 S0 ?8 H
( b9 X4 m# V& y! w' k0 D
   int enumValue = this->enum01->GetProperties()->GetEnum("Value");
% o; A) t% c. k) n  ]7 p" ?, O                    if (enumValue==0)
4 q( W: g3 \8 |) D8 k, s. f2 I                    {
9 {* q& f, f' T3 D% f  E& B                            selection0->GetProperties()->SetString("LabelString","选择边缘");
- M; o- K7 M. k$ j# W3 t# V  W2 H- R                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;
% |/ {' M9 }9 T, s1 D                            Selection::MaskTriple mask1(UF_solid_type,UF_solid_edge_subtype,2);3 I4 r  n) k2 ~0 M# e  P
                            Selection::MaskTriple mask2(UF_solid_type,UF_solid_edge_subtype,3);
" R4 _! O! }. O/ C2 D0 o" H                            maskTriple.push_back(mask1);
6 q) W! z# }2 w6 T/ }3 e7 }3 w0 ^2 d                            maskTriple.push_back(mask2);
2 f! o0 ^0 _" w1 y* i2 r) }7 {                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);
  }3 ]' J, m$ S3 e  }                    }
+ k' l4 g) V& @3 P# Q                    if (enumValue==1)
% F% Q$ C8 \/ c. u- t$ `8 W                    {$ j# W0 i3 T( j2 j9 R$ r
                            selection0->GetProperties()->SetString("LabelString","选择表面");
  ], h& {2 I  W' L  j8 w' W( I# g                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;
. E/ l; k, Y/ d# r) a5 Y. [1 q                            Selection::MaskTriple mask1(UF_face_type,0,0);
2 Z0 q6 ?, e) i$ C5 i                            maskTriple.push_back(mask1);
8 f+ e1 u: P/ \+ {# ~: y$ _                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);& P6 q1 f5 `- Q! R$ v: v
                    }
4 j# T; a! }( G/ i( d: C                    if (enumValue==2) ; j, p7 v- i0 P  U( r
                    { % M) ~1 f1 X1 U& I  z' p; H
                            selection0->GetProperties()->SetString("LabelString","选择实体");
6 U- l3 b  i3 D) v8 J0 r                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;( {4 m. c. u# L" X2 Q
                            Selection::MaskTriple mask1(UF_solid_type,0,0);
6 D* s- l  i  Z( ~                            maskTriple.push_back(mask1);2 x- m& _! w$ @3 O9 ^1 E' Z
                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);5 R3 U. ~: ~+ b) B6 L$ o
                    }
: p, d  ?7 D. O' w+ @& |
3 f: l0 j# h6 p) _+ X/ Q$ `' e
0 C* u+ u1 F5 d4 B1 A* z//------------------------------------------------------------------------------- P' Z: |8 T4 [
//Callback Name: filter_cb 过滤不符合对象& w- ?+ U. X( ?; x. |7 T/ C$ F3 j
//------------------------------------------------------------------------------
$ K3 u& o/ \# R# Q9 @2 L2 Sint ML_NX001::filter_cb(NXOpen::BlockStyler::UIBlock* block, NXOpen::TaggedObject* selectObject)
- _7 Z8 S4 K7 l5 f$ ^- k* }{& R9 k; G6 U8 Q: T4 k
        - S! |% X- `: T$ A- T
        int enumValue = this->enum01->GetProperties()->GetEnum("Value");
8 a; }) U) |7 b! A1 x        if (enumValue ==0)# Z& _) ~: X8 u& L4 B
        {8 e* s2 ~* f- Q
                 tag_t obj=NULL_TAG;
3 @8 t! }+ m# G. l% e/ R                 int err=UF_MODL_ask_edge_body(selectObject->Tag(),&obj);8 D+ L0 k2 t0 w. |. E; X
                 if (err!=0 && obj==NULL_TAG)
- K" A- B8 _( L             return(UF_UI_SEL_REJECT); //不加入到对象预览列表( y& l, S8 M+ g4 X/ W
        }
) s7 v3 d7 I$ K, ~! s/ q        else if (enumValue ==1)
4 Q3 g6 ]& F( e/ H" {        {
8 J+ J! i+ O  ]% H                 int type=-1;
0 W) l. _2 K% J* @3 R0 b) T3 j                 int err=UF_MODL_ask_face_type(selectObject->Tag(),&type);
' A& G& W/ K" ]6 o0 u                 if (err!=0 || type==-1)+ S) n' f! D! L& v- i9 R
             return(UF_UI_SEL_REJECT); //不加入到对象预览列表
* u' K- |4 J0 {6 J        }
% h* b( ^3 ^5 [- D8 }5 S        else if (enumValue ==2)
& ~! O( B; U/ b. H) j        {: ]! Z5 Z4 g% M1 B
                 int type=-1;- P$ `; B+ K' y: _: A
                 int err=UF_MODL_ask_body_type(selectObject->Tag(),&type);
$ G0 |! y  T1 @  @5 Y                 if (err!=0 || type==-1)
. ]' S; y2 V+ s1 i             return(UF_UI_SEL_REJECT); //不加入到对象预览列表% `  r" w. H& R3 @+ ^6 u, Q" d
        }
% D& O* w  `. e* e8 @& ]" y
1 e- _$ ^! {$ [# S        return(UF_UI_SEL_ACCEPT); //加入到对象预览列表
" i4 _: w9 j* o. ^}; H0 \& p( G/ w6 c; f2 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二次开发专题模块培训报名开始啦

    我知道了