PLM之家PLMHome-工业软件与AI结合践行者

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

[复制链接]

2016-12-12 12:24:54 6282 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、选择对象( i# \: Q, w: d; s$ ~

2 |: a" @% _' i9 `捕捉( _$ {$ y0 ?0 g/ S/ a
  PointOverlay             是否显示捕捉点
2 ~# {. _7 j/ _  SmartUpdateOption        智能更新选项
- T! V* _, O/ t, W+ V' S5 ]) n                             Within Modeling   在建模/ v& g; R# ?$ k! t- Z
                             After Modeling    建模后1 f* ]6 ?% a+ M9 i' O$ C" `% I3 ^
                             After Parent Body 实体父后
5 P$ v9 e  V, m- k$ @. g                             Mixed             混合
2 g' m# \) [( s. n: a
' T1 S+ s; C* _8 i2 P6 b. s" n  SnapPointTypesEnabled    设置捕捉点类型的可见性2 h  w# F7 j: i
  SnapPointTypesOnDefault  设置捕捉点类型相关的内容被启用) _* M3 r' `9 W) ]

  j7 H* r9 x1 Y5 M2 L* D常规9 K9 N' c4 C2 _) L1 ^$ c* n
  BlockID  控件id% c1 T! L6 Z) _; D2 Z6 T
  Enable   是否可选/禁用控件
. S* n& o2 y! C& \& q4 q1 Y5 ^  Group    组, U# K+ o. P+ k4 b- c
  Show     是否可见
. T& [3 U7 L. V
  ~4 h! }/ w$ H, ^7 Z其它
8 D& H. u: |' b! Y6 H: I! N  附着
! |+ _) G( [! o& h# p- `8 R# Y    Bottom  底
" X' I7 @9 s' u; x. s    Left    左' N1 t! C. R7 U' _6 t
    Right   右/ Q$ d3 n- z% V& R
    Top     顶
( Z! o" ~% P# W8 \  l( ^$ t
9 s/ R- |: K- K* O特定于块
; e& y* q0 D3 ^  AutomaticProgression     选择后焦点是否自动跳到下一个控件0 u* L) o5 _/ s. J2 f9 F; @( w- g
  BalloonTooltipImage      动态提示图片(鼠标移动到控件是显示图片)
- N& _/ i1 Y4 T0 t) E9 o4 j& K  W  BalloonTooltipLayout     动态提示布局% |, o; @. \; p) \/ ]  j
  BalloonTooltipText       动态提示文本内容
! H4 p( J9 |  R: ^1 ]" B) x' J  Bitmap                   指定图片: t9 @7 v8 {' A! k9 d) G8 O
  BlendVirtualCurveOverlay 是否显示虚拟交线
+ w  C" O7 O- f  P" H6 o: ?  CreateInterpartLink      是否显示部件间连接图标在选择条上3 M1 I! D* q) G* l) ^9 H3 I
  Cue                      提示- F7 Z7 l- \) u6 U& u# z

7 ^0 m3 K3 w: O4 F7 \1 W0 a" T" A  InterpartSelection       部件间选择设置! ]) W  _7 s0 B( m6 U' U% e
                             Simple                                           简单: Y: x3 e# G# v" N9 }9 R! z
                             Non-associative Interpart Copy Only              只复制部件间非关联: W" {- y" c$ E4 ]) z% d" U' j
                             Associative and Non-associative Interpart Copy   复制部件间关联和非关联# Z+ D( Q1 D& X( P6 n: o
                             Associative Interpart Copy                       复制部件间关联
$ j' H3 s1 g& Z, m+ ^% n; {  {( T: y. |2 C6 T2 E
  LabelString              标签标题
1 N+ |4 P9 T8 l" Y8 {  MaximumScops             设置选择范围
, q! S& o- n+ ?0 S                             Entire Assembly                 所有组件/装配
! f" n! E/ @, O% U! F/ \+ ]# E: }                             Within Work Part Only           只是工作部件
3 A- L$ Z+ d/ o0 p, C4 W3 J" D                             Within Work Part and Components 工作部件和组件/装配)
4 A% ~- v1 L7 t/ F2 I8 y4 `- X  A- a# h3 {" }4 ~
  SelectMode                设置单选/多选 - }- F  u0 u! ~0 q& x  K
                             Single   单选8 ]. T5 s' H; N0 Z
                             Multiple 多选& Y6 F+ {' v  ]

! n7 I- A# l+ O& _& @  StepStatus               设置确定和应用按钮什么时候高亮 (Required 必需的时候)(Optional 可选的时候)(Satisfied 满意/满足的时候)( c7 C2 h+ H1 ?+ I
  Tooltip                  动态提示文本标题(Bitmap指定图片时,鼠标移动到图片时提示文字)  z7 P) r# d; C
3 [( C" ?  O$ n+ k1 I/ `8 T7 M/ z5 K
————————————————————————————————————————————. N& t: W8 b" q* ?6 r% C
————————————————————————————————————————————
# ^7 k8 J/ T. r  s! V咧子:获得selection0控件选择的对象
7 d( \7 X- |, `$ m      UF_initialize();
+ s/ z3 \' @% ]0 O( W      std::vector<TaggedObject*>objects=this->selection0->GetProperties()->GetTaggedObjectVector("SelectedObjects");
3 }* T% q# P7 N4 A# p" S! Q9 Y      for ( int i=0;i<objects.size();i++) // size 列表长度,这里指的是 对象个数0 A* H1 T. T* x: A
      {      
0 S$ e* B( c2 V7 Y  d9 A/ `6 K2 e         UF_OBJ_set_color(objects[i]->Tag(),1);. C! h. `7 ]0 g1 ^$ I
      }
2 R% B  Z) ]4 v) z3 n, n5 I- \      UF_terminate();
% \( t& Z( |1 L
5 f0 X8 M7 ~; J3 e  a————————————————————————————————————————————
, K3 T% d% d: ~8 U$ p/ m咧子:对象加入到selection0选择控件的对象列表
: i; I$ t: z. g- j, {6 S) _- q% R. U) k
      tag_t obj=NULL_TAG;
: |  i. }/ }7 v7 E7 c      double point[3]={0,0,10};
$ ^/ i5 ?+ A' o/ J! C. J3 }) j      double XYZ[3]={60,50,80};1 p. g( f, ^8 i9 a0 W
      char C[132]="";
1 h8 g, H9 b. V9 @1 `% e* M      char K[132]="";
, Z, I: a1 [. N4 C) j" a& H      char G[132]="";
7 K; D- I4 L/ k4 Y: w- m/ N      sprintf(C, "%f",XYZ[0]);
( G4 G5 d# \  b: ~. M      sprintf(K, "%f",XYZ[1]);
& w9 \/ q  p1 H      sprintf(G, "%f",XYZ[2]); " ~/ g$ Y1 a7 f/ z) ]4 ?) |
      char * edge_len[3]={C,K,G};
( I+ T3 W9 m8 [$ Z" I      UF_MODL_create_block1(UF_NULLSIGN,point,edge_len,&obj); //创建方" F" ?5 s6 Y! }
      UF_MODL_ask_feat_body (obj,&obj); //从特征中取出实体' x/ c9 |# ~3 g; r

2 D2 O( a9 F0 A: x      Body *body1(dynamic_cast<Body *>(NXObjectManager::Get(obj))); //tag转换给nxopen
- l  Q' I: L: t1 B2 g      std::vector<TaggedObject*>objects;  i) C6 m& B1 G3 J+ a
      objects.push_back(body1); //对象加入到selection0选择控件的对象列表
4 X7 j" g- l; x" W) F, X      selection0->GetProperties()->SetTaggedObjectVector("SelectedObjects",objects);2 q" j1 T  i0 r
————————————————————————————————————————————
2 o& f- K. O0 C* K
- l. t0 A7 B$ R6 \, D5 V//清除对象
4 T( A3 x8 X! u, D( s. bstd::vector<TaggedObject*>objects;$ f! k  Q2 o* N
objects.empty();* s. t' P7 s" L+ q
selection0->GetProperties()->SetTaggedObjectVector("SelectedObjects",objects);
: ~: T9 P5 h+ J& x4 V& ^8 L
5 D4 M  _7 ]* H( W( v5 o) h% G————————————————————————————————————————————
3 `1 K. \' B/ b, k" y9 o: ?咧子:只选择面
: l- {7 g8 K  ?! G1 y        initialize_cb() 初始化里加代码 或 dialogShown_cb()显示对话框里加代码 可进行对象选择过滤
" e/ [' v, W5 U" }
! ]% ^; D4 o2 E+ ^        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式
( n$ S1 v& S# [5 R+ O& P6 g3 |) K3 L* W% G, _% {5 c& p  v" y
        //对象选择过滤 只能选表面# D! E7 X1 T; x/ @
        selection0->GetProperties()->SetString("LabelString","选择表面");( h% i3 S, m, W2 E4 Y6 M# f
        std::vector< NXOpen::Selection::MaskTriple > maskTriple;; Q) K3 G1 K6 G' r! G4 [0 j
        Selection::MaskTriple mask1(UF_face_type,0,0);$ b+ o) Z' ]4 f
        maskTriple.push_back(mask1);
3 z4 |1 k, S! c# h4 z. X+ w  `        selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);
3 x/ K2 E5 h3 v# t( Q( L5 Q) Q4 }7 A/ j/ m4 y/ @5 `
& L5 w3 A/ o3 F! }6 n7 K
咧子:只选择面 【UG本身过滤器跟着变】0 C6 T  n& T# C2 C
        initialize_cb() 初始化里加代码 或 dialogShown_cb()显示对话框里加代码 可进行对象选择过滤   
4 d" ?" C2 w5 q# ?2 V& g3 o5 V! ~& R$ ~% a! \/ i4 _8 _3 S
        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式( ?* Z4 M- ?& P1 g* o3 z
4 k  b0 p* ^1 V8 X7 \
        std::vector< NXOpen::Selection::MaskTriple > maskTriple;
1 U! g+ T% o2 R4 f& P/ S        Selection::MaskTriple mask1(UF_face_type,0,0);
: v! i8 v4 r) p; p* p2 Z. Z. @' H        maskTriple.push_back(mask1);
; h' `8 b2 f, Q( G) K        NXOpen::BlockStyler:ropertyList *selComponentProps = selection0->GetProperties();4 w6 g% ^% t. D! M2 Q0 f" x
        selComponentProps->SetSelectionFilter("SelectionFilter",Selection::SelectionActionClearAndEnableSpecific,maskTriple);( S7 `# l3 B4 e
        delete selComponentProps;
5 ~' J# i" |+ g0 b; Q* l) q        selComponentProps = NULL;: _' Q! D! n8 [, R* Y3 H
8 m0 r* X6 ^+ ?, A. B
上海点团信息科技有限公司,承接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 `- \: g4 H8 p5 |; m

0 n. e5 g* w; H0 A6 w2 I6 x9 Y9 G————————————————————————————————————————————
- U' f3 Z+ t, l$ f————————————————————————————————————————————
" J# V5 C& d- n7 y& e0 l& \8 M咧子:只选择 实体边缘 直线和圆弧1 G( U+ U- S$ u' p

- K7 E3 _# C, C; u- t; O  initialize_cb() 初始化里加代码 可进行对象选择过滤
/ |4 A* j( d/ g9 V* ]' q! f
0 O9 o( b  ~. f: Z        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式
+ l' R$ }5 y5 v4 F5 E* _, Q/ e                        selection0->GetProperties()->SetString("LabelString","选择边缘");//只选择 实体边缘 直线和圆弧
1 x  a3 `' E( Q                        std::vector< NXOpen::Selection::MaskTriple > maskTriple;* v$ s% ?. D; z" q# o# D- W
                        Selection::MaskTriple mask1(UF_solid_type,UF_solid_edge_subtype,2);! i, [+ h6 h# ~7 U$ M
                        Selection::MaskTriple mask2(UF_solid_type,UF_solid_edge_subtype,3);( J$ m' [- X# L& ?- ~
                        maskTriple.push_back(mask1);1 k. D" O8 _& _0 M7 i1 W
                        maskTriple.push_back(mask2);
$ @2 g) M# r! Q4 i( O+ E                        selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);8 H7 J; k) e7 ]  ]- p

1 ~( |  b) `4 j$ y//过滤无效的边缘
# N( C+ O/ B( ]5 I  nint ML_NX001::filter_cb(NXOpen::BlockStyler::UIBlock* block, NXOpen::TaggedObject* selectObject)$ I/ l' _! p9 f' K5 I" P$ Q
{        7 ^% H& M' z2 ^% T$ I
    tag_t obj=NULL_TAG;
8 l  T( D- G% C' `& U    UF_MODL_ask_edge_body(selectObject->Tag(),&obj);
1 b4 c/ @) A+ x3 q) N* g    if (obj==NULL_TAG) return(UF_UI_SEL_REJECT); //不加入到对象预览列表$ m- X8 {+ [/ t* H% i! s& _+ j
    return(UF_UI_SEL_ACCEPT);                    //加入到对象预览列表
) o" C, U& C8 O3 O: p2 [9 k# r}: Q3 @. ]( |: @8 k  X) ~
————————————————————————————————————————————  @8 Q' H9 @7 d& n
————————————————————————————————————————————
: @+ U8 J- T6 b4 W/ S2 ~咧子:通过枚举控件选项来 时实  分别过滤 边缘、表面、实体+ L8 }' ]$ D( W  P' H

- b. e% \0 ]  ]   int enumValue = this->enum01->GetProperties()->GetEnum("Value");8 @3 a/ b: w. m- ~; x+ P, K2 z
                    if (enumValue==0)
/ O( n& }( {, Z9 \+ u                    {
- T2 s7 K& l, w/ l# L                            selection0->GetProperties()->SetString("LabelString","选择边缘");/ i' P2 P" q/ p; L
                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;
* _: E. ]7 Z) E2 p; S) P                            Selection::MaskTriple mask1(UF_solid_type,UF_solid_edge_subtype,2);
& u8 v; ~, |" \; w- W; h                            Selection::MaskTriple mask2(UF_solid_type,UF_solid_edge_subtype,3);, t, p! L3 ?5 _' B, m5 _% ?  v
                            maskTriple.push_back(mask1);
2 n) {5 r; R; S. N* ^                            maskTriple.push_back(mask2);8 J! w3 D% Z" x# R
                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);3 O  L8 @. {- |  j: N- E% K
                    }
" ^" ?' M5 g5 J/ m( c& [                    if (enumValue==1)
6 h& H+ v% K8 k                    {# I) T7 A( U3 F* {6 R1 f7 Y
                            selection0->GetProperties()->SetString("LabelString","选择表面");. K1 a1 H$ G1 T3 S% I# T
                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;; |3 ~* c" q; p# f+ \5 e9 j
                            Selection::MaskTriple mask1(UF_face_type,0,0);
+ \* U6 d3 U! }) E! v                            maskTriple.push_back(mask1);4 h9 S* s% {& R8 f
                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);& a/ s' A  v3 {8 u6 N
                    }
5 `- _. K% c4 l- C8 \9 q1 L                    if (enumValue==2)
) s: y# M6 i# [' b* o                    {
$ O5 Y' o/ h/ @8 D! _                            selection0->GetProperties()->SetString("LabelString","选择实体");
# Y4 F7 P/ }8 ^) E                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;, k/ N  Z. z5 U; Z5 Q1 H
                            Selection::MaskTriple mask1(UF_solid_type,0,0);) t% u9 [7 \( X( c& x9 x
                            maskTriple.push_back(mask1);, w* Z/ m* ^# Z9 u4 c3 y1 X
                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);
+ E9 }/ B7 d& `                    }  F( @7 z+ b7 K9 r7 I
8 o0 D. J# V1 }8 T9 f

  Q% I! G  a5 T3 d1 h3 ]4 |//------------------------------------------------------------------------------
& h2 Z# }6 _; h0 j2 s) P& ]//Callback Name: filter_cb 过滤不符合对象8 a& o9 i7 V; B+ p
//------------------------------------------------------------------------------. R: e7 i% ^6 C( y' a
int ML_NX001::filter_cb(NXOpen::BlockStyler::UIBlock* block, NXOpen::TaggedObject* selectObject)4 O& F! K5 K) V2 J
{0 L* M- I1 l8 h# O" b
        7 R$ S8 o5 R: ]* J4 p4 p( b6 M
        int enumValue = this->enum01->GetProperties()->GetEnum("Value");) I' M! P& w. W& b3 }
        if (enumValue ==0)
+ G) g& x6 n, e: X- X        {
: F  d+ k7 M( @0 z3 s                 tag_t obj=NULL_TAG;2 E4 U6 h- |1 k  x. O: r8 W# w  A# Y
                 int err=UF_MODL_ask_edge_body(selectObject->Tag(),&obj);2 I# v& \: r& a
                 if (err!=0 && obj==NULL_TAG)9 w# h/ |5 t" X6 [
             return(UF_UI_SEL_REJECT); //不加入到对象预览列表
0 z, C+ I/ F" T/ h3 Y! g; x        }
* q& B* ^- J9 K        else if (enumValue ==1)
& m* `# P: |! E* N6 {        {. u4 Y- l8 T$ [4 j1 m* L! P: Z
                 int type=-1;! @" g: D/ S. c" {, C' _
                 int err=UF_MODL_ask_face_type(selectObject->Tag(),&type);
! ?3 s6 ~7 Z" S" j5 W                 if (err!=0 || type==-1)
' g9 b1 r# E+ X9 Q7 E$ A; R- a             return(UF_UI_SEL_REJECT); //不加入到对象预览列表' v6 `1 l* i: s' ^+ a
        }# |) c8 M8 Z- z, N8 X( Q
        else if (enumValue ==2)
% R( t( x# [; ?  y) {        {
1 D3 [+ v. l& B, Q3 o3 e2 s                 int type=-1;; ?. D7 H" q* m$ N- q' T8 c8 }
                 int err=UF_MODL_ask_body_type(selectObject->Tag(),&type);: U: p6 R' R+ v9 O+ p7 c1 W
                 if (err!=0 || type==-1)
6 E! k2 v3 J5 G, z1 R. ~2 _% [             return(UF_UI_SEL_REJECT); //不加入到对象预览列表7 z9 U7 W4 @$ L5 E& _4 }. Q: M
        }# V- M9 t$ ?; v& {( y* J7 Z

8 Y: r5 S' t3 ~  ?6 E        return(UF_UI_SEL_ACCEPT); //加入到对象预览列表' z, C0 ^  e5 p- x+ N" m
}
* b/ H8 q* [6 D( d. s, a& T. s8 P( N
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了