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

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

[复制链接]

2016-12-12 12:24:54 6336 2

1

主题

10

回帖

125

积分

注册会员

积分
125
发表于 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.doteam.tech
回复

使用道具 举报

全部回复2

8

主题

10

回帖

146

积分

注册会员

积分
146
QQ
发表于 2016-12-12 12:24:21 | 显示全部楼层
01、选择对象$ _; `8 E7 q- e# q8 I( n
! q2 c( m6 i( i
捕捉. E* P8 z, T) Y2 r) y
  PointOverlay             是否显示捕捉点  C4 m6 o/ P4 K& ^2 ^+ S
  SmartUpdateOption        智能更新选项# C3 j0 ?; L" A: n5 T8 f% }
                             Within Modeling   在建模$ i- s/ B: L( l5 m
                             After Modeling    建模后: ~' `6 |, J2 x- m1 h7 m
                             After Parent Body 实体父后6 y7 h* ?1 R/ m1 N- ^8 h  h* c
                             Mixed             混合
; [! R" t0 H1 a# \
! d8 L+ j; a8 x! h1 x2 A" X  SnapPointTypesEnabled    设置捕捉点类型的可见性( I0 v2 Q) B" C' C" W# N
  SnapPointTypesOnDefault  设置捕捉点类型相关的内容被启用
" G" y% W6 ]6 Y! ]9 O3 U! @+ D2 B  _) R
常规
+ F* n- U" o: ~) V3 I  BlockID  控件id
7 C) l3 \; x0 m  Enable   是否可选/禁用控件7 V' S" \& a1 d) k3 u  U
  Group    组/ O$ i0 H3 C" A! w( a" S$ [) z1 S
  Show     是否可见* z+ y2 f5 k5 }/ K& w/ Z
8 j; N) p# b5 \) P) W2 w! @/ K; y
其它
! p9 `$ s$ C1 E5 L  N" w% y  附着% C8 l3 Q* J% J$ K* C
    Bottom  底8 w0 {& m. G4 V! Z% E' D& B  @! ^
    Left    左4 v7 i) M2 Y4 G5 y3 [; ~4 y6 _
    Right   右
+ U7 ~0 o% I- E    Top     顶: i, T+ D$ G- Z6 ?

/ w: P+ X3 a3 C/ G8 B7 \特定于块
) {6 W) R' V: L! k1 q  AutomaticProgression     选择后焦点是否自动跳到下一个控件
+ c! i7 M+ x1 P. q  BalloonTooltipImage      动态提示图片(鼠标移动到控件是显示图片)
3 M/ B7 |5 s! ?+ M  E, @  B- t  BalloonTooltipLayout     动态提示布局6 q/ j/ C% S! j- }5 z8 D, j
  BalloonTooltipText       动态提示文本内容2 A: T5 o" ^5 s! T$ y
  Bitmap                   指定图片
! [" z8 W8 P: Z, y5 k/ I  BlendVirtualCurveOverlay 是否显示虚拟交线
  j# a) y5 _/ Y/ O1 t1 `  p; }1 z  CreateInterpartLink      是否显示部件间连接图标在选择条上
, a! }8 E. r# O+ r( d  Cue                      提示  M* Y9 _2 P* z" y

9 ^* L' v8 A8 f( R9 k7 j& G  InterpartSelection       部件间选择设置
" `. }9 y5 n# g7 d1 Q                             Simple                                           简单
6 R" l2 [: S0 h) Y$ S                             Non-associative Interpart Copy Only              只复制部件间非关联4 c6 P# K8 l3 U4 d. N) C! l
                             Associative and Non-associative Interpart Copy   复制部件间关联和非关联- N' B) }% w  ]5 Q
                             Associative Interpart Copy                       复制部件间关联! U5 G! K  g" b2 o6 a
+ J' {7 H5 K1 E, C) D
  LabelString              标签标题3 \4 R+ r' b& K9 e, V
  MaximumScops             设置选择范围# L/ l" m9 s4 O; s. p
                             Entire Assembly                 所有组件/装配
4 H" J' u; b+ ^# l* R) g8 L* [                             Within Work Part Only           只是工作部件
/ z& k( ]5 o8 ^. L' Z3 O" A                             Within Work Part and Components 工作部件和组件/装配)
+ h& |4 [/ i9 r; A1 S8 l
4 Y" x# C! r* B- d* D& ^) k  SelectMode                设置单选/多选
+ h5 ~$ ?( y% x+ t  @                             Single   单选2 J% @/ a. S$ Y0 [# ]3 B
                             Multiple 多选, A6 A) y5 @) R

  B. ^) W& Q) z  Q0 v4 ^: j  StepStatus               设置确定和应用按钮什么时候高亮 (Required 必需的时候)(Optional 可选的时候)(Satisfied 满意/满足的时候)& x% b2 f4 n* O; k( y% Y0 y2 D, [
  Tooltip                  动态提示文本标题(Bitmap指定图片时,鼠标移动到图片时提示文字)! X/ D" P+ V% T  G! p
, K" z' F) J8 v/ `/ i* E8 B
————————————————————————————————————————————
% I7 D( J. e9 e  G+ }- x/ n5 ^$ ]0 V————————————————————————————————————————————1 z0 O  |0 b* }5 F; B# d
咧子:获得selection0控件选择的对象
6 l% @* ~3 K/ [3 u      UF_initialize();
% s) X: j* M$ V! O) P      std::vector<TaggedObject*>objects=this->selection0->GetProperties()->GetTaggedObjectVector("SelectedObjects");
& [2 f  x5 ]. s+ q5 K/ \      for ( int i=0;i<objects.size();i++) // size 列表长度,这里指的是 对象个数+ t0 e9 z$ I6 _# d
      {      
5 F+ {0 o6 O/ L1 _/ q6 r# V         UF_OBJ_set_color(objects[i]->Tag(),1);* U# b) x: b' W: F: f
      }' W" g7 F7 ~- Z; J
      UF_terminate();2 N) N8 T- q& o( ~. G" `! N/ K

* K9 d. `# Z! w0 y, u; q+ P& m————————————————————————————————————————————9 g& q) L) D$ p5 |8 _/ J
咧子:对象加入到selection0选择控件的对象列表
5 v0 M7 J5 y2 H0 I  A) A% v' c* W
! m2 s0 I# x! y. `/ e- o) @# r      tag_t obj=NULL_TAG;! E$ @1 {1 S; ^
      double point[3]={0,0,10};
  p- N3 d- V  R# p8 S      double XYZ[3]={60,50,80};
8 U0 U' j( }0 H- B8 r2 U+ ~      char C[132]="";
, t" x5 {+ z$ D" y3 ^% M! |+ u- m      char K[132]="";
8 ^& q: I8 g! T. w; O' U" t( d# l      char G[132]="";. H4 g4 P2 ^( _7 Y$ m& g# B
      sprintf(C, "%f",XYZ[0]);" r* |9 e, V( h: t
      sprintf(K, "%f",XYZ[1]);
1 `7 X+ x* d' s' r3 x9 P! z  F      sprintf(G, "%f",XYZ[2]);
1 C2 l. C, o" u: N! u: h0 u* f      char * edge_len[3]={C,K,G};. s: g" @/ b' F4 A% T
      UF_MODL_create_block1(UF_NULLSIGN,point,edge_len,&obj); //创建方5 z7 B. O, e5 m6 l2 q4 J3 i
      UF_MODL_ask_feat_body (obj,&obj); //从特征中取出实体) J2 o# o* Y! s3 W$ L$ y
- X7 q( B4 x5 l: z+ F, m0 |
      Body *body1(dynamic_cast<Body *>(NXObjectManager::Get(obj))); //tag转换给nxopen
: T" x$ Y" z- P; j& Z! @& Z      std::vector<TaggedObject*>objects;6 U2 b9 A  Z1 |6 K, y! D2 P
      objects.push_back(body1); //对象加入到selection0选择控件的对象列表: r0 g4 p: \8 k; x" e
      selection0->GetProperties()->SetTaggedObjectVector("SelectedObjects",objects);* c) W3 w# X" T2 B/ d: y+ ^# ~
————————————————————————————————————————————
8 K8 b6 W. I6 s3 J9 z2 _( p# @" v" p$ `$ |
//清除对象
, w$ p0 q5 v* Mstd::vector<TaggedObject*>objects;
, ~6 H- N/ s1 X) Z" a$ M$ Vobjects.empty();
! X4 z  ?6 v- aselection0->GetProperties()->SetTaggedObjectVector("SelectedObjects",objects);
$ b4 T" p7 A2 t8 i3 G7 m! B- p# {" ^2 a6 [4 F  `4 h
————————————————————————————————————————————
2 z' z0 Y, J1 C" c* z' |$ F+ r( d咧子:只选择面
# `9 k( |, u$ a$ L        initialize_cb() 初始化里加代码 或 dialogShown_cb()显示对话框里加代码 可进行对象选择过滤
0 x+ N7 D; D4 X9 Z
) A: X, w* F( y) {0 V        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式
2 L0 x, |  v9 E1 r# _8 u7 ^
$ V  B% l* T$ G# J* ?' y8 x        //对象选择过滤 只能选表面1 a+ w" z. k- r2 A( W
        selection0->GetProperties()->SetString("LabelString","选择表面");
( q9 l: C1 B! s7 e: p1 l        std::vector< NXOpen::Selection::MaskTriple > maskTriple;
& V  H$ X; u/ t' R9 I: M5 q! E        Selection::MaskTriple mask1(UF_face_type,0,0);
/ P) R: Y5 q! R; }# Y# k6 B        maskTriple.push_back(mask1);
7 i5 i8 }6 A2 c5 y* Q        selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);
# P, L; ^. V% u2 ^8 r! n4 u1 t2 r
6 \/ ^: }& Z; t/ q
咧子:只选择面 【UG本身过滤器跟着变】
/ X- \0 m' q& b3 w  M! f6 k2 d4 v. `        initialize_cb() 初始化里加代码 或 dialogShown_cb()显示对话框里加代码 可进行对象选择过滤   
+ H, z9 k  o6 q6 W0 v7 ?0 s9 F8 r1 g$ {2 y
        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式' k0 O" J1 _, k5 m7 M8 `0 N# W

2 [; P& B% [2 \8 w9 Z        std::vector< NXOpen::Selection::MaskTriple > maskTriple;  r8 R, _: V3 E
        Selection::MaskTriple mask1(UF_face_type,0,0);
; i7 \* C) W! X8 J0 @" P; w        maskTriple.push_back(mask1);: P6 g# S6 r/ g* f
        NXOpen::BlockStyler:ropertyList *selComponentProps = selection0->GetProperties();1 A2 J# I  c1 p: `; h) C
        selComponentProps->SetSelectionFilter("SelectionFilter",Selection::SelectionActionClearAndEnableSpecific,maskTriple);
) W4 N4 t" Y1 I4 o/ u3 ^: o  c: }+ E        delete selComponentProps;6 U2 `% b0 F0 R3 ?' j/ ]
        selComponentProps = NULL;
4 Z5 J" R! ~" f/ K8 k* q" B+ o- b" J5 l* n
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复 支持 反对

使用道具 举报

8

主题

10

回帖

146

积分

注册会员

积分
146
QQ
发表于 2016-12-12 12:24:54 | 显示全部楼层
列子
  e6 X) ~$ a& d+ n/ T( G! \: \( t) v2 w$ D+ l% ^9 i
————————————————————————————————————————————& |+ `/ g8 S+ B5 r) W. R* F% w
————————————————————————————————————————————# r0 n0 G: a9 i/ K$ X
咧子:只选择 实体边缘 直线和圆弧
1 k: a! \$ {7 j- x8 ^5 C: ?( f; K; H2 U& e  B
  initialize_cb() 初始化里加代码 可进行对象选择过滤
! j, S/ V" @' t" p' v5 z) a1 f) I' d' w* O- j; x0 P& |
        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式
' G7 [- @9 a2 i1 O/ P; d, z/ t                        selection0->GetProperties()->SetString("LabelString","选择边缘");//只选择 实体边缘 直线和圆弧* X( [* h) ^. y/ ^
                        std::vector< NXOpen::Selection::MaskTriple > maskTriple;
- b6 M; V' F* ~9 n1 d9 ]2 b* O                        Selection::MaskTriple mask1(UF_solid_type,UF_solid_edge_subtype,2);
7 }+ O% C9 l6 \% b# d7 R2 k                        Selection::MaskTriple mask2(UF_solid_type,UF_solid_edge_subtype,3);0 Q  h, B5 d0 J9 ]: g
                        maskTriple.push_back(mask1);
  A0 q( l6 |, K, `  i6 E* S- v                        maskTriple.push_back(mask2);
  n6 m" [2 X6 Y                        selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);( P& o& |5 q- G" ]  S, j0 H4 J  E

0 |- Y* P9 H8 E* k9 r2 o$ i//过滤无效的边缘& g/ z" Q& C( Y
int ML_NX001::filter_cb(NXOpen::BlockStyler::UIBlock* block, NXOpen::TaggedObject* selectObject)
9 C) I& ]) }0 A7 O; J* E{       
  g, D# W# t; Y# [    tag_t obj=NULL_TAG;
. E: y, B# j) u  ?    UF_MODL_ask_edge_body(selectObject->Tag(),&obj);
8 G9 C& q$ U% x. J: b4 U$ o& }    if (obj==NULL_TAG) return(UF_UI_SEL_REJECT); //不加入到对象预览列表
& I. k1 F$ ?' Y' M  c    return(UF_UI_SEL_ACCEPT);                    //加入到对象预览列表
2 H, D1 o0 @" g- h) U/ m4 R7 e}
' h  Q7 P6 R8 Q0 G————————————————————————————————————————————
0 A2 k  n, I1 ~4 u2 g————————————————————————————————————————————
# M" h0 ?3 W0 j9 ?3 R咧子:通过枚举控件选项来 时实  分别过滤 边缘、表面、实体, M8 Z2 Q0 B6 f
& S' W! ^: y& P; _+ ]$ u8 _5 ~/ ?
   int enumValue = this->enum01->GetProperties()->GetEnum("Value");
& N3 [. z8 d, d: ]! f2 ?' B  l" S2 `                    if (enumValue==0)
! M9 L5 {+ a! A1 z$ L- s# D6 t8 {8 @; ^                    {
1 Y5 w6 h+ \* k1 W. [& n  R                            selection0->GetProperties()->SetString("LabelString","选择边缘");
: |7 ~/ w% u+ Q0 Y2 L% T. b                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;! [4 p1 L' a6 J
                            Selection::MaskTriple mask1(UF_solid_type,UF_solid_edge_subtype,2);
1 v& \5 I3 `5 z+ q/ p, K6 R                            Selection::MaskTriple mask2(UF_solid_type,UF_solid_edge_subtype,3);
% L" k2 L2 Q0 B1 I8 Y) J                            maskTriple.push_back(mask1);' G3 r& T4 K0 H+ i& x
                            maskTriple.push_back(mask2);
0 g$ ~& c* w# n8 O& V' P/ P                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);7 @3 Q6 }7 P' J+ k. N! c! ]
                    }
6 P4 B6 r+ F+ q* p- c' w: o" B6 ]                    if (enumValue==1) 6 ~1 n( S2 E+ `7 h+ h8 P  b
                    {
( s2 Q6 t- r) V  P                            selection0->GetProperties()->SetString("LabelString","选择表面");
& m3 y- F7 O2 h& f5 p& p% W  H                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;$ h0 X9 E; c$ M: e5 }, _1 Z3 n
                            Selection::MaskTriple mask1(UF_face_type,0,0);' D4 b& X3 X! S2 q! N3 }
                            maskTriple.push_back(mask1);
& W# R8 s+ i! E9 e* ^; b                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);' n1 j2 k# r5 ~: ~7 m
                    }
, Q  @. J- Z+ ~; o                    if (enumValue==2)
; [) K2 ]/ i2 ]' L3 o: U- z                    { 6 Q! J4 @& x8 I
                            selection0->GetProperties()->SetString("LabelString","选择实体");
9 ]4 f/ h* m' A( q  f! V. b                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;
, X2 G# h/ Z6 X( [8 c3 h7 ~3 m  C                            Selection::MaskTriple mask1(UF_solid_type,0,0);/ A: m) h3 e( T$ C4 {9 K
                            maskTriple.push_back(mask1);
0 A1 ^9 ]& W4 ]! e7 w                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);% d% z# ^) y0 s# {: y' }: T: |
                    }
# c1 r7 [- p% y0 I: y) ~' k
1 I3 j) X9 w' l/ f0 Q
: E7 e) b2 _- r1 m  n//------------------------------------------------------------------------------
- T/ E8 T$ N; \7 r( a//Callback Name: filter_cb 过滤不符合对象$ w6 r) N/ S" J% u8 P% ], U# A  D
//------------------------------------------------------------------------------( L3 q- H3 c4 V% w
int ML_NX001::filter_cb(NXOpen::BlockStyler::UIBlock* block, NXOpen::TaggedObject* selectObject)
, K5 w6 s; H4 C  ^+ |$ N! G{
" n) J3 B: ?% Z) f2 p; a, u; ~5 X        
; L5 B  c" P7 [/ O1 w        int enumValue = this->enum01->GetProperties()->GetEnum("Value");
& ]' a( m$ T4 P; T8 p( q& a% X        if (enumValue ==0)
* f0 R. L( L& t$ q8 u8 z' }        {+ h  X2 k* W) q) m% N0 }# |
                 tag_t obj=NULL_TAG;6 h0 n& n7 z  t: p) c9 J
                 int err=UF_MODL_ask_edge_body(selectObject->Tag(),&obj);
; G' R6 I* r+ {& u4 v                 if (err!=0 && obj==NULL_TAG)
* z9 h8 m  C$ j8 C$ L4 B: `             return(UF_UI_SEL_REJECT); //不加入到对象预览列表( v# L/ A) v3 b+ t
        }. o5 g0 x  Q* ~# s, o% N) r) w
        else if (enumValue ==1)% Y8 g6 p/ Z5 y& i
        {( S9 Z2 T# m9 |0 }( A4 X
                 int type=-1;' o( D& P5 \9 o9 Q! N
                 int err=UF_MODL_ask_face_type(selectObject->Tag(),&type);: b3 a4 c) u7 Y2 _
                 if (err!=0 || type==-1)' {  l( @: p& z) \7 k0 J6 W/ [
             return(UF_UI_SEL_REJECT); //不加入到对象预览列表
$ o, O! W. d" h' N/ ?& ?0 w" ~2 d        }
9 l* @- t3 K% c. h9 n) o        else if (enumValue ==2)1 a2 \& z4 |! u( k! [  ]3 x, ?
        {7 x3 j- X+ l5 f; K1 g) _
                 int type=-1;% Q: p8 H0 {$ V7 k3 t) Y
                 int err=UF_MODL_ask_body_type(selectObject->Tag(),&type);
0 E  T, q9 }6 }7 g8 M( z- S                 if (err!=0 || type==-1)5 A) b) K: m! E% a9 M
             return(UF_UI_SEL_REJECT); //不加入到对象预览列表2 G/ K8 B! M+ Q
        }6 B  Z9 Y+ M& h0 |

+ X, i( a( D: T: P. @        return(UF_UI_SEL_ACCEPT); //加入到对象预览列表
! R; X$ ?# Y% G! M# z- V}2 B8 y3 r* `6 s
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了