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

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

[复制链接]

2016-12-12 12:24:54 6214 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、选择对象
' n: n* t! D) i; k: [6 J& m( o1 E' K
2 i  `+ Y' M3 a捕捉
, b# `" `6 H: q  PointOverlay             是否显示捕捉点* f6 i4 J' n$ p) b& E  @
  SmartUpdateOption        智能更新选项
. c0 n7 e: b5 I                             Within Modeling   在建模+ y3 x6 v7 m8 |& _7 T& f. ?
                             After Modeling    建模后
. a" ?: g% a; r) Q6 h# l/ e                             After Parent Body 实体父后
" c/ J5 D  c5 r7 B) I( t                             Mixed             混合/ D0 s6 Z" @& f

! {) _8 J3 \" ?  SnapPointTypesEnabled    设置捕捉点类型的可见性
" i3 p3 S* o( G; u* L  SnapPointTypesOnDefault  设置捕捉点类型相关的内容被启用/ ?4 H! O( V* {8 d& D7 b
6 I4 Z# N% |1 G* i7 B) ]
常规5 e" a- L  |8 Y$ p" b
  BlockID  控件id# `( d! d' X( }* X
  Enable   是否可选/禁用控件5 e8 w2 r  ^) I" g
  Group    组" ^4 P- N5 K  x8 {+ k
  Show     是否可见0 _9 [, Z1 h: K* W( z/ e

& `& s2 H/ i; H9 Z  ]0 t+ l其它
% I8 p4 Y, ^% a7 ]  附着+ I$ L0 y& a& ?
    Bottom  底% e5 u4 Z! R5 k! A
    Left    左
& l, T+ m1 p+ D* [    Right   右
' z3 B' ?; V% D& i    Top     顶( P+ s0 @& D  q

  ?. k) G* O3 l特定于块
7 e. V9 X# G* W* ^, z& i  AutomaticProgression     选择后焦点是否自动跳到下一个控件
7 o: e$ Z' N! \3 U# ]  BalloonTooltipImage      动态提示图片(鼠标移动到控件是显示图片)7 R' B7 }6 Q0 O6 S4 r
  BalloonTooltipLayout     动态提示布局; ]; a; C; a6 I7 f( {& a+ [/ y; Y3 V
  BalloonTooltipText       动态提示文本内容
2 p0 E5 _1 D' A( |  Bitmap                   指定图片
/ s6 w, g8 R/ v4 U) ^  s- G2 O  BlendVirtualCurveOverlay 是否显示虚拟交线
( ]9 ]7 e3 [' X( s  CreateInterpartLink      是否显示部件间连接图标在选择条上. h8 r& \" }4 Z3 [+ T6 p
  Cue                      提示+ J" c8 G! ?/ q- E0 o7 E9 w  |/ X
: h4 T9 M& i3 B, f: ?, Q& J6 J0 R
  InterpartSelection       部件间选择设置4 ?/ f- v6 d5 i4 b, y5 c9 ?
                             Simple                                           简单% l4 R2 m- I- O: S6 H
                             Non-associative Interpart Copy Only              只复制部件间非关联2 a1 }( U( `$ p7 M5 b+ X4 G# Z
                             Associative and Non-associative Interpart Copy   复制部件间关联和非关联
% d# B6 P7 h7 _5 r: `                             Associative Interpart Copy                       复制部件间关联
) b& ^8 u8 m  `+ b# \2 \) }% a8 N
  LabelString              标签标题
) n& h9 `# `& I  ^7 K% W  MaximumScops             设置选择范围
; F4 @$ M7 ^9 b0 b5 u5 F$ K0 o* A                             Entire Assembly                 所有组件/装配
9 o, ~7 x/ I' q                             Within Work Part Only           只是工作部件* e: r" T8 M& Q, ^. C6 G
                             Within Work Part and Components 工作部件和组件/装配)
6 k; _5 N4 X. \- ~+ d( L! M
% i( P0 A* p* S9 C& n  SelectMode                设置单选/多选 + l: p9 B" a& }$ j9 r  K( ?% y! u
                             Single   单选2 M" q& Q- h( T9 x
                             Multiple 多选
7 B- t" k" \+ l% ?" C: @4 x5 j8 |+ E; z* d7 S2 f/ n
  StepStatus               设置确定和应用按钮什么时候高亮 (Required 必需的时候)(Optional 可选的时候)(Satisfied 满意/满足的时候)
  f0 m& Y' a3 }% g  t! h  Tooltip                  动态提示文本标题(Bitmap指定图片时,鼠标移动到图片时提示文字)
& F3 @; U3 F2 Z  N; x7 f6 H' w6 R3 i: p; w# r# l" B7 x
————————————————————————————————————————————- P1 i0 @9 ?3 I1 `
————————————————————————————————————————————4 T, ]; h: L1 O4 P+ P
咧子:获得selection0控件选择的对象
8 b3 I, h9 P" I$ `, n7 ]( G      UF_initialize(); ; B' h9 T0 H) Q+ r+ L, l8 r
      std::vector<TaggedObject*>objects=this->selection0->GetProperties()->GetTaggedObjectVector("SelectedObjects");% X$ G& c6 s% }! g
      for ( int i=0;i<objects.size();i++) // size 列表长度,这里指的是 对象个数
/ D* Y, M  c7 `! Y      {      
5 V) u0 L5 d2 ?& p4 K& `7 _$ \         UF_OBJ_set_color(objects[i]->Tag(),1);
) m: R! H4 g' W      }( Z" @' J, D3 A
      UF_terminate();
0 w. t$ u: _& @# W5 _+ k$ I: q- n+ Z  K* A) r$ J$ G  ^: n
————————————————————————————————————————————
; h+ ~3 l1 L" X3 v4 o咧子:对象加入到selection0选择控件的对象列表
; ^7 C2 z) \/ s& f/ ^
2 h% \2 Y% N. C1 K# q0 b0 ~      tag_t obj=NULL_TAG;  x: G& o2 S7 @% j' B7 n& @. G
      double point[3]={0,0,10};
! }: J; `& L. l8 Y. q      double XYZ[3]={60,50,80};( a! e  }& c) h: |, k
      char C[132]="";  x3 H1 N, p0 {% x% W$ s
      char K[132]="";
2 Z3 g0 @/ I7 s3 D      char G[132]="";: s4 O" O. Y( G- _
      sprintf(C, "%f",XYZ[0]);
( z6 s4 H* {, S  \4 ^( w  q      sprintf(K, "%f",XYZ[1]); ! {" C+ r+ B1 R( t: @# [5 ]  D
      sprintf(G, "%f",XYZ[2]); + M5 |4 t& R- R, z, |2 n
      char * edge_len[3]={C,K,G};; F' i" n9 A$ G4 i: D
      UF_MODL_create_block1(UF_NULLSIGN,point,edge_len,&obj); //创建方8 q; f/ \* e, o) a
      UF_MODL_ask_feat_body (obj,&obj); //从特征中取出实体3 }3 n7 q, U4 ~. `0 ]0 A
$ L: X6 }! ]% P) ]
      Body *body1(dynamic_cast<Body *>(NXObjectManager::Get(obj))); //tag转换给nxopen8 b9 h4 \( e1 E' v" ?! h
      std::vector<TaggedObject*>objects;, i1 p' \- {6 ]. S! X1 u8 z/ G* j+ u
      objects.push_back(body1); //对象加入到selection0选择控件的对象列表3 f' Y& _5 h! T; G! j" I& M
      selection0->GetProperties()->SetTaggedObjectVector("SelectedObjects",objects);0 ?" y7 ^$ z6 ^! {0 u/ @5 m
————————————————————————————————————————————! k: b% m5 E! h" f

# S3 N! b3 B" F- p1 Z+ \) d  [* n8 Z//清除对象+ Z0 _! V3 Q" {" O
std::vector<TaggedObject*>objects;
$ L0 Y. d# B( f8 c5 I  q( sobjects.empty();
$ n$ J/ S; L7 G* Jselection0->GetProperties()->SetTaggedObjectVector("SelectedObjects",objects);" B2 P6 V% N7 m; }- s2 C

8 J/ s; |1 S& }% `: {" L————————————————————————————————————————————$ g) N+ g, P! S9 E) v4 E# n; Y
咧子:只选择面- T) R) x' o. B) n5 b
        initialize_cb() 初始化里加代码 或 dialogShown_cb()显示对话框里加代码 可进行对象选择过滤6 x2 a+ p( s$ d& f. m1 ^$ _
5 q, X: u  g* g& h$ w5 O8 d# K2 V4 V0 I5 k
        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式
2 M; E  r* H2 o3 b  x2 }% p4 Y4 ?
8 U2 X2 W4 e3 d& O        //对象选择过滤 只能选表面
, q  G  v; i. d- C        selection0->GetProperties()->SetString("LabelString","选择表面");4 N1 W6 r( a& b+ C! a! Y2 J8 h
        std::vector< NXOpen::Selection::MaskTriple > maskTriple;6 _" R* h* B' g& l; q$ h% P9 o
        Selection::MaskTriple mask1(UF_face_type,0,0);0 w) U: J1 r/ L, ]+ a3 u9 \  Q
        maskTriple.push_back(mask1);
: K2 r8 a3 @7 F2 O        selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);. ?4 C2 ~8 U+ t

1 C4 t: o" _$ y5 @7 B9 f5 s+ M1 X1 Q3 B$ y4 q- R8 c
咧子:只选择面 【UG本身过滤器跟着变】, E! N& k( M8 b4 \  K: v
        initialize_cb() 初始化里加代码 或 dialogShown_cb()显示对话框里加代码 可进行对象选择过滤   
2 f0 I5 c' a0 D7 C  v+ t( \( ~) m# a6 W! L" _, R
        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式
( a& K. w. T& i' M- u$ O
8 C. C* u, |2 u9 B2 T8 f        std::vector< NXOpen::Selection::MaskTriple > maskTriple;
1 j4 v. N. |5 F9 M  I5 B6 ^$ g! e        Selection::MaskTriple mask1(UF_face_type,0,0);
4 I$ v# c- t% u) g8 W3 D  l: p; K+ v        maskTriple.push_back(mask1);
# Z% N3 U' G* w% D        NXOpen::BlockStyler:ropertyList *selComponentProps = selection0->GetProperties();1 b" A6 W- n4 B: M. {& R* l
        selComponentProps->SetSelectionFilter("SelectionFilter",Selection::SelectionActionClearAndEnableSpecific,maskTriple);
3 ?3 {$ Q$ C3 M; c8 P* l9 h        delete selComponentProps;
/ I, O2 g2 s* I3 M        selComponentProps = NULL;
6 Z) L$ j6 E% g. b5 K- s; L
  Q$ k: c/ j3 Z0 W3 K1 `" m
上海点团信息科技有限公司,承接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

列子) O$ b) {/ Q0 F: ~% P1 W8 |
3 O! r: g7 F: E( a3 ~# d5 N% G
————————————————————————————————————————————$ U( D( u3 l) f. X* \
————————————————————————————————————————————2 ~9 Q$ D& b$ r% x
咧子:只选择 实体边缘 直线和圆弧$ B  [4 X/ `' [

1 g+ f# Q) s9 g  initialize_cb() 初始化里加代码 可进行对象选择过滤( y+ @& [3 e1 P; Y6 L

' y& p6 S8 z3 T( U/ M4 _& {5 q) b: q        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式
* y! t+ |" {" H5 A! ^* Z- K/ I                        selection0->GetProperties()->SetString("LabelString","选择边缘");//只选择 实体边缘 直线和圆弧. g3 }" i$ H! k7 B5 F2 ^
                        std::vector< NXOpen::Selection::MaskTriple > maskTriple;% ~/ z; U; L9 z1 X) m/ E0 M
                        Selection::MaskTriple mask1(UF_solid_type,UF_solid_edge_subtype,2);
6 H; G& g. X" U5 ?& }' t! |                        Selection::MaskTriple mask2(UF_solid_type,UF_solid_edge_subtype,3);
9 {6 r8 _& J9 H                        maskTriple.push_back(mask1);" V7 T! R2 |$ L5 B4 q! P5 K
                        maskTriple.push_back(mask2);
8 J6 A/ f9 R' B& k& I9 H                        selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);. B. e& _0 R% O
7 h9 t  K- N  p+ l6 @8 I9 K. G. F
//过滤无效的边缘
/ Q  J$ s, n$ K- U4 m: w/ |9 d' o* uint ML_NX001::filter_cb(NXOpen::BlockStyler::UIBlock* block, NXOpen::TaggedObject* selectObject)
  m0 M" O6 e6 y{       
5 F1 l" f& O( j0 ?+ H  P- J" A    tag_t obj=NULL_TAG;
1 b' e( _% C- o8 `; k    UF_MODL_ask_edge_body(selectObject->Tag(),&obj);
( e! M; M% ~6 \4 U    if (obj==NULL_TAG) return(UF_UI_SEL_REJECT); //不加入到对象预览列表- y1 [& f/ O4 ~) b
    return(UF_UI_SEL_ACCEPT);                    //加入到对象预览列表
1 m% V2 E2 S6 S* U' F}
% t8 L) V1 i  p————————————————————————————————————————————# _) T, {, M3 N# e. {1 J9 C
————————————————————————————————————————————1 _3 _+ {' b5 o% N
咧子:通过枚举控件选项来 时实  分别过滤 边缘、表面、实体9 I8 c0 X) [9 B; b7 s
8 H8 J( ?" ?5 F9 s  b, T+ |% a
   int enumValue = this->enum01->GetProperties()->GetEnum("Value");) R" r- Z( e* T- e: }, K. e
                    if (enumValue==0)
* w, |. `: Q# y3 V0 ?& y. j) a0 s0 g                    {
7 j- B0 S) `7 L+ |/ [                            selection0->GetProperties()->SetString("LabelString","选择边缘");
" _$ n- ^2 L8 w( O3 F7 h                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;
( ]- ^. g4 K; ^& N1 m4 K- u, q                            Selection::MaskTriple mask1(UF_solid_type,UF_solid_edge_subtype,2);
$ e; a6 V! `; g2 f                            Selection::MaskTriple mask2(UF_solid_type,UF_solid_edge_subtype,3);
+ L6 Y, A" f. o7 m5 P                            maskTriple.push_back(mask1);
$ Y0 y5 s1 Y' m* Z% c" C% X' ?8 u3 X                            maskTriple.push_back(mask2);
9 L" G0 c0 ~# a; D4 d7 s                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);) F: D6 m+ F% V% y- ~' k
                    }
9 A' |0 n+ j- P0 I$ ^; R; z                    if (enumValue==1) 8 q/ f( W& E' b
                    {8 q' D1 L6 U( J) A6 |) T
                            selection0->GetProperties()->SetString("LabelString","选择表面");& m- j6 l7 u5 |! }1 _, ]
                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;
& p' u- V  w$ {: l; m                            Selection::MaskTriple mask1(UF_face_type,0,0);
5 |: c% {# E7 |/ j5 H6 q+ t# \! @1 R( \                            maskTriple.push_back(mask1);& }6 S4 S( H6 n/ x. d
                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);
* Z+ w4 w. `" \* c) Q                    }
3 ~* j- t5 L- o% V' L( P9 g7 \" l                    if (enumValue==2)
: m# A6 g& |- N9 _0 W2 V: y7 Z' ?* y                    { * C" Y+ {/ \! ~9 l
                            selection0->GetProperties()->SetString("LabelString","选择实体");; g& N4 D6 ?0 }6 H7 X6 U+ k3 Q
                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;) j1 h- e( b" g- S
                            Selection::MaskTriple mask1(UF_solid_type,0,0);
# s1 p" Z: V" e: ]. o+ {& k* B                            maskTriple.push_back(mask1);3 T5 C* e) ?3 P6 @- q
                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);* o! ?- k+ Y* B" P
                    }
+ Y0 _* V8 C% }) a: R/ o( w( k7 p9 x! n0 {  |) m$ T+ B$ {0 `" d9 ~5 O
6 t0 k- Q, a# `9 |" G( C9 ~* W
//------------------------------------------------------------------------------
' }: h3 f+ A# o, D7 C2 y9 e% g" {//Callback Name: filter_cb 过滤不符合对象
2 E) M* i- _8 j! g+ Q//------------------------------------------------------------------------------
- Q7 B. s0 S( _+ R8 Q8 Y% yint ML_NX001::filter_cb(NXOpen::BlockStyler::UIBlock* block, NXOpen::TaggedObject* selectObject)" U' q# D2 |' w0 f" w
{
4 Z% [2 Z7 j+ j* o        
3 q) }/ R" W7 _- A        int enumValue = this->enum01->GetProperties()->GetEnum("Value");( X7 K/ H4 G% z* v# t
        if (enumValue ==0)
  t+ q; i& g$ @; {        {
. R0 S! L$ w! `& `4 M$ k" U' h5 m                 tag_t obj=NULL_TAG;
1 b0 ^) R7 D4 o( E* ?, x2 y                 int err=UF_MODL_ask_edge_body(selectObject->Tag(),&obj);) F- R9 f! }: C# U' \
                 if (err!=0 && obj==NULL_TAG)
( `( T/ K- z! W" j, i/ G             return(UF_UI_SEL_REJECT); //不加入到对象预览列表: ]1 l) g  n* E/ }* B) `1 Y
        }
& G- t. O; h) Y3 L4 ?2 x        else if (enumValue ==1)
! l$ B; q- {7 N, ~* L3 d0 g        {5 g. G, I2 Z/ v9 I) Z. H
                 int type=-1;
+ P8 P1 m' H! x9 X, N4 J+ G. I# B                 int err=UF_MODL_ask_face_type(selectObject->Tag(),&type);
3 K1 E9 T. o1 d* s                 if (err!=0 || type==-1)9 v9 @  n, J- b1 k# V
             return(UF_UI_SEL_REJECT); //不加入到对象预览列表
% {% o! e! y' [6 H5 F( a; \: v* z        }) V1 ^  _0 a, b9 E5 t: }
        else if (enumValue ==2)
! M  U  q) W, T2 c# Q        {
; D& Z; C; B2 B, d                 int type=-1;
' I# ]( s8 f  q                 int err=UF_MODL_ask_body_type(selectObject->Tag(),&type);
. m0 ~5 |: J/ w2 N4 k' {8 L                 if (err!=0 || type==-1)
$ p; ?, t$ ^6 \4 r: a: V& {             return(UF_UI_SEL_REJECT); //不加入到对象预览列表
8 x; O2 R0 r7 s  U4 [; `8 ~" D        }
) B0 l) {+ h$ o: C' L; K1 L; U# d) q0 C+ x: t$ d6 o0 d
        return(UF_UI_SEL_ACCEPT); //加入到对象预览列表
7 u* m# Y/ d3 H/ |( T" Y1 X7 \, Q}
0 s( p+ v, R7 K, J
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了