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

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

[复制链接]

2016-12-12 12:24:54 6171 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、选择对象
: B4 g* \3 z1 X3 j8 e1 n9 V2 d' o5 D' H6 m3 J) |
捕捉
, i3 x/ n  W0 p7 e- a  PointOverlay             是否显示捕捉点, |; h0 R7 ?& j  _$ M+ P% E
  SmartUpdateOption        智能更新选项3 t/ N: j$ I, Y' O+ P
                             Within Modeling   在建模
0 y3 y# ^; @: G                             After Modeling    建模后. E0 [2 K' Z' X% x
                             After Parent Body 实体父后  E$ r9 O7 a  R8 w, A$ G) E, |
                             Mixed             混合) h5 S5 a( R: Q& {: _# F- ]( Z0 w' g
* T# }# J* }4 r, o
  SnapPointTypesEnabled    设置捕捉点类型的可见性, x! k( m# K" q
  SnapPointTypesOnDefault  设置捕捉点类型相关的内容被启用0 s& {% P  k* V
& V7 Z- Q  h7 z% G
常规# V5 h% p' W8 R* T5 x+ a, z4 _
  BlockID  控件id9 ?; c3 z/ g" T( d% _; H
  Enable   是否可选/禁用控件4 y7 x: t: g, M) k& A4 @5 z
  Group    组. U( |% V$ P* P* E; M9 M) g1 z
  Show     是否可见6 r  R, u7 k# y* k2 M  D
# P' Y& k( s  |. ?/ K1 t+ B1 J  c
其它 + o3 k2 j, ~& A$ H1 q6 w
  附着$ y) G" L8 G* _" U7 V0 _8 o
    Bottom  底
! b0 e0 E1 ^: _7 m    Left    左) h7 R+ s" E0 s$ p; ^2 d) M
    Right   右$ i% u! l: z0 p; f9 ?! \) T
    Top     顶
4 a9 {1 c1 M5 S; X5 i. q5 M! n! Y. Q6 y* o
特定于块- w% O* q" C& Q! R4 x
  AutomaticProgression     选择后焦点是否自动跳到下一个控件! n$ Q2 C. v8 D- _- k; D$ Y
  BalloonTooltipImage      动态提示图片(鼠标移动到控件是显示图片)
! z" S  |& V, M( }  BalloonTooltipLayout     动态提示布局' J. D& U& f1 V/ L0 @
  BalloonTooltipText       动态提示文本内容  [1 |4 q, ~9 M- e0 @; S6 }4 n
  Bitmap                   指定图片
4 ]/ X! `0 c; |$ }  s0 J4 z, z5 z  z  BlendVirtualCurveOverlay 是否显示虚拟交线8 k" U. K0 n3 {8 h% U+ V2 C
  CreateInterpartLink      是否显示部件间连接图标在选择条上
0 k# ~% E1 f) L- _; b4 ?1 J+ r. R1 \  Cue                      提示
, s) `% B, c+ U9 x$ t6 D6 F8 e" |$ R4 M4 H0 ^2 t
  InterpartSelection       部件间选择设置. L4 s9 [. u4 w, q# e5 g0 i
                             Simple                                           简单
! T% H3 E% v, x: \$ k- J8 t! B                             Non-associative Interpart Copy Only              只复制部件间非关联
+ b$ _7 a' J5 C! e1 m1 u( D% n                             Associative and Non-associative Interpart Copy   复制部件间关联和非关联7 t% p8 w( }1 g# D' K
                             Associative Interpart Copy                       复制部件间关联  f. o- e: `+ B  K1 X
3 B) ^3 G+ g! Y0 G' M* F
  LabelString              标签标题; k7 A  M# X- f9 ~
  MaximumScops             设置选择范围
9 S# j4 J! `, ]) s0 ]4 ~: |4 K                             Entire Assembly                 所有组件/装配
- G0 i1 `1 H3 _5 _$ Y- j6 K                             Within Work Part Only           只是工作部件1 P) c8 N3 U/ P1 b* f* Z
                             Within Work Part and Components 工作部件和组件/装配)
. d( `5 B& U; H1 p1 {6 H. n9 e2 a0 I' d  Q1 \& B
  SelectMode                设置单选/多选 ) e% M: d1 v" K0 J: U2 N9 w
                             Single   单选
1 V. z- R' {8 \3 L2 U                             Multiple 多选$ t5 @2 S+ {' [: m
( H- l  E8 N0 X. }! J
  StepStatus               设置确定和应用按钮什么时候高亮 (Required 必需的时候)(Optional 可选的时候)(Satisfied 满意/满足的时候)
' Z- ?' J& @" Q+ t  Tooltip                  动态提示文本标题(Bitmap指定图片时,鼠标移动到图片时提示文字)
% a8 a% x/ _7 Y2 v& d( H- W, k0 ]) p5 q+ b
————————————————————————————————————————————' b: v/ y$ _% T- w2 J9 A" [
————————————————————————————————————————————3 }8 i1 J4 e' C& t
咧子:获得selection0控件选择的对象
0 w4 N, M: Z, S9 Z8 \  X* w      UF_initialize();
9 h! o4 q  c3 X$ K      std::vector<TaggedObject*>objects=this->selection0->GetProperties()->GetTaggedObjectVector("SelectedObjects");
8 b! u  e* n  S      for ( int i=0;i<objects.size();i++) // size 列表长度,这里指的是 对象个数5 o, _% j+ D4 P. v0 b" n/ _
      {      2 ~- ?" F: D) G2 I- B* n& H
         UF_OBJ_set_color(objects[i]->Tag(),1);2 p' H9 l  }9 A3 u
      }
# O/ ~; O! ]- g      UF_terminate();. W# P/ S7 }# m3 [, Z0 ?3 V
) _$ N8 Z- R* d1 m: Y  P; ?# s/ U( @
————————————————————————————————————————————
0 K" y% F/ _7 n& J: `咧子:对象加入到selection0选择控件的对象列表9 H+ [* d" @: p0 U

8 K. Y0 x5 ]% i2 M      tag_t obj=NULL_TAG;
1 ~& E% {( j- G* w      double point[3]={0,0,10};6 k" f5 T  Z& }7 X
      double XYZ[3]={60,50,80};9 \3 {/ i7 Q% G& B  I/ O# T
      char C[132]="";
+ l9 w; z8 |" M8 C9 q- h/ {      char K[132]="";9 c3 e" k- S% j
      char G[132]="";6 z4 t( ~. w+ i2 S1 S2 q$ _- F8 g5 s8 x
      sprintf(C, "%f",XYZ[0]);
! \" k2 E; y% ~* O% q3 x: I; i      sprintf(K, "%f",XYZ[1]); 7 O. C1 b, N# K8 I7 {
      sprintf(G, "%f",XYZ[2]); & u- @- u( }1 j( ^, ^* P
      char * edge_len[3]={C,K,G};  l2 i8 Z3 K( `
      UF_MODL_create_block1(UF_NULLSIGN,point,edge_len,&obj); //创建方, h5 ~# c% P0 S" Z& \
      UF_MODL_ask_feat_body (obj,&obj); //从特征中取出实体
1 W6 }9 k2 B/ u8 H; C
# a7 B# f; J! f1 ]( D4 P      Body *body1(dynamic_cast<Body *>(NXObjectManager::Get(obj))); //tag转换给nxopen
5 d8 Z3 z! c: B' }      std::vector<TaggedObject*>objects;6 [8 ?' J) c- c+ z8 p
      objects.push_back(body1); //对象加入到selection0选择控件的对象列表; l( J: M' V3 z: P
      selection0->GetProperties()->SetTaggedObjectVector("SelectedObjects",objects);6 u; ~4 d) x3 ?0 @; y  ~6 O
————————————————————————————————————————————
4 t: Q9 W% K. T0 k/ v$ x3 k4 g! E
//清除对象2 J2 j! f1 C+ a9 O% {
std::vector<TaggedObject*>objects;8 \, J0 x  a! p( E* F# l7 B; }
objects.empty();4 \0 S# d' R: e" Q" Q  B% ~
selection0->GetProperties()->SetTaggedObjectVector("SelectedObjects",objects);
) c. k# M" W8 \: U- x9 @$ E
4 G+ N/ g0 u8 p! Z( P————————————————————————————————————————————
+ O# ]' o; o7 u8 ?; ^' e, D% w咧子:只选择面
& N4 `% Q1 n2 H) L3 V        initialize_cb() 初始化里加代码 或 dialogShown_cb()显示对话框里加代码 可进行对象选择过滤
9 c( P! w1 I7 J" @
! @' l, o0 n5 C+ p" V        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式
# r% Q; U( G7 {( w2 k: o, r* O7 M6 E4 R' \/ O# ~' z- V( ]
        //对象选择过滤 只能选表面
+ I/ e/ G1 R' y4 J% u* B3 j        selection0->GetProperties()->SetString("LabelString","选择表面");; d; _8 l5 l: p
        std::vector< NXOpen::Selection::MaskTriple > maskTriple;+ G1 P+ z" ?% ?, X+ j2 |! s
        Selection::MaskTriple mask1(UF_face_type,0,0);0 n% p  q- F0 A# f9 C; F1 q
        maskTriple.push_back(mask1);( ~) s8 z/ y3 I- Z# S& [% u
        selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);
1 w3 S8 L! r1 W& F  d$ E
; `# m  T2 a3 @( w9 [4 B0 `2 I" q1 Z. l. h/ l* z( |
咧子:只选择面 【UG本身过滤器跟着变】- R0 ^% _5 x  g# h
        initialize_cb() 初始化里加代码 或 dialogShown_cb()显示对话框里加代码 可进行对象选择过滤    5 `# L! `: k- G! K% t2 I
# f+ u5 S( O2 U# ^& b
        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式( ^8 H3 U2 E" y4 |6 h! T
% C9 Z* y* c$ i8 v, b, L* N
        std::vector< NXOpen::Selection::MaskTriple > maskTriple;6 j5 G4 `( ?7 ~5 h6 V2 {. u4 e
        Selection::MaskTriple mask1(UF_face_type,0,0);
# ?5 `3 \/ N4 t# t        maskTriple.push_back(mask1);# E; @2 w7 [  j7 {, j' `/ P" D
        NXOpen::BlockStyler:ropertyList *selComponentProps = selection0->GetProperties();
- _& ~2 Z8 N" m9 R# k/ Q; f7 s4 i        selComponentProps->SetSelectionFilter("SelectionFilter",Selection::SelectionActionClearAndEnableSpecific,maskTriple);$ B. C' o+ T) y: R' X) x
        delete selComponentProps;
5 i9 e6 V, C+ r$ _. t$ H        selComponentProps = NULL;( [6 q% W  L: e- P. D

+ o/ q5 [4 r8 s* V
上海点团信息科技有限公司,承接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

列子; k4 u$ `, p, C# f2 d9 c8 P  T2 s

6 x3 i/ u. C- f, q7 W2 v" V————————————————————————————————————————————/ N" z2 A) f1 T
————————————————————————————————————————————' r' v. G3 j9 S4 O
咧子:只选择 实体边缘 直线和圆弧
% g, [* W8 l, \- S, x$ L/ ?
; v# o- e6 m: K  initialize_cb() 初始化里加代码 可进行对象选择过滤
' C  q: I. Y4 Y5 k" s7 q, U: x& V
        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式
* Z: f% ]6 R( h0 Y+ a8 M* F; \! [                        selection0->GetProperties()->SetString("LabelString","选择边缘");//只选择 实体边缘 直线和圆弧
. N* z- b4 X+ ~5 s+ {) Y' l1 c3 v                        std::vector< NXOpen::Selection::MaskTriple > maskTriple;
1 c/ R  y5 c" m. Y2 S+ u/ N) P0 b- b: Q                        Selection::MaskTriple mask1(UF_solid_type,UF_solid_edge_subtype,2);+ f+ f5 @& L0 v5 _
                        Selection::MaskTriple mask2(UF_solid_type,UF_solid_edge_subtype,3);$ f5 D5 m. _% P' ]: A( T* p  `" I
                        maskTriple.push_back(mask1);
" h. s/ }9 x! u                        maskTriple.push_back(mask2);6 P1 ^! o0 C% L
                        selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);
) O5 A7 X6 V  C/ }1 X6 l) [: ^2 J! L
//过滤无效的边缘
7 t" o1 X- {& D8 B6 Mint ML_NX001::filter_cb(NXOpen::BlockStyler::UIBlock* block, NXOpen::TaggedObject* selectObject): k& x8 C% z+ A) |  l/ U- `
{        2 c0 p$ K/ K% i* O. X4 o' m
    tag_t obj=NULL_TAG;& j8 ~1 g  e! u1 }. f& V+ p, t3 H
    UF_MODL_ask_edge_body(selectObject->Tag(),&obj);3 h: F& G# Y% h% T& {* ^7 E7 |
    if (obj==NULL_TAG) return(UF_UI_SEL_REJECT); //不加入到对象预览列表  K& E# s) o3 h
    return(UF_UI_SEL_ACCEPT);                    //加入到对象预览列表; b! x+ [; ^; v- R" F; R7 E
}8 e9 R! M* d  L. Z$ g5 a  K( i
————————————————————————————————————————————
+ v, r% k5 h+ ]8 T————————————————————————————————————————————
" R/ [7 R2 N  F* j咧子:通过枚举控件选项来 时实  分别过滤 边缘、表面、实体0 a0 h# s$ x" ?2 d& u/ ]. q

$ }# v  ?2 i1 B" m3 C' e& _$ h' z, w2 F   int enumValue = this->enum01->GetProperties()->GetEnum("Value");, |5 J$ v& Y& R2 |4 }7 o5 Z
                    if (enumValue==0) 2 g9 g" s! S  A$ X: W4 j
                    {- z8 u, L& J2 i& w1 c$ t
                            selection0->GetProperties()->SetString("LabelString","选择边缘");% _5 E1 B( }( W+ m  R1 X- \
                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;
" u! l$ X6 c- s4 q  f' O. ?                            Selection::MaskTriple mask1(UF_solid_type,UF_solid_edge_subtype,2);
* ~. v7 _7 s0 i9 G  t' m; K                            Selection::MaskTriple mask2(UF_solid_type,UF_solid_edge_subtype,3);
  o4 M* N6 j" g                            maskTriple.push_back(mask1);; e, I  s# |% h+ S" }
                            maskTriple.push_back(mask2);, q; z/ {$ t9 D4 O" ^) m
                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);7 N  {" R1 B. S* o1 W% G5 X
                    }
) i$ b! R3 c8 W                    if (enumValue==1)
- N4 o3 V7 b1 t- |4 J                    {/ M8 z3 h$ s3 y$ s/ l  ]/ y
                            selection0->GetProperties()->SetString("LabelString","选择表面");/ U$ U1 Y! ?) p
                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;: C( f; F/ i2 s; c" k
                            Selection::MaskTriple mask1(UF_face_type,0,0);4 L5 _  S5 v7 R5 b" x7 @
                            maskTriple.push_back(mask1);. _3 f; o' Q5 g* h$ W7 n3 x
                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);7 }) T' j" h8 F  `- L- e- A
                    }
: B" ?$ P3 \* M6 \) P) Q! ?9 B  F                    if (enumValue==2) * u4 K( {, _2 g% |' F
                    { * k9 m& J' v; \( Z
                            selection0->GetProperties()->SetString("LabelString","选择实体");
4 {' Q* W2 B! _* |  z9 _- g                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;+ U- l. C& W3 d( @/ T' N
                            Selection::MaskTriple mask1(UF_solid_type,0,0);) o  v2 B7 I1 [( j$ w# x! H
                            maskTriple.push_back(mask1);5 b  @5 U/ u; a7 `& ?+ J8 {
                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);
& ?/ Z" ^/ l5 i5 n1 w6 N2 D                    }1 U8 p+ h9 x4 g2 e$ @. F. k7 G0 x

) @9 T- K3 l+ O) D; m+ ~* }0 E1 I9 R' j- \* o$ s; p. _
//------------------------------------------------------------------------------. w, |, K! Y( t% Z( q9 D/ D) C: m4 s: c
//Callback Name: filter_cb 过滤不符合对象
. X3 T9 {1 _: z' ?+ e//------------------------------------------------------------------------------
5 L  z  E! m. v+ E; D) nint ML_NX001::filter_cb(NXOpen::BlockStyler::UIBlock* block, NXOpen::TaggedObject* selectObject). P. u7 s* u9 E& V6 U
{6 u9 o  I  d1 x: Z
        
' c. P7 }" f# ?- u2 G5 u8 l. G        int enumValue = this->enum01->GetProperties()->GetEnum("Value");, M/ o+ q& ?: \/ M
        if (enumValue ==0)
, |5 k6 G7 Z! J. E6 [; {        {
! t, L, z6 H" U% b" L                 tag_t obj=NULL_TAG;4 ?" R+ ~. w5 y: ?. n+ W0 b1 s+ N
                 int err=UF_MODL_ask_edge_body(selectObject->Tag(),&obj);# Z% ?4 ^7 E7 P5 n+ P; U
                 if (err!=0 && obj==NULL_TAG)4 I$ ~% o9 a+ X1 E0 d
             return(UF_UI_SEL_REJECT); //不加入到对象预览列表& D) A4 m- p7 K, x# _7 T, C
        }  {2 \2 a" n+ ^8 C6 t( y
        else if (enumValue ==1)
6 ^1 [4 z( _% z! G+ B4 b4 u        {
) h! O* q0 a" O                 int type=-1;
  t/ d' |+ l# C3 C$ u; M$ |                 int err=UF_MODL_ask_face_type(selectObject->Tag(),&type);: [( B/ s8 f% d$ {- k, \7 ~
                 if (err!=0 || type==-1)! S- q5 ~- R! Z* Z
             return(UF_UI_SEL_REJECT); //不加入到对象预览列表3 E1 e1 g" o4 s" X( W: j
        }
9 A& }+ S" c. k+ x) ~: ^        else if (enumValue ==2), W$ `& b+ t) S5 A& L( C
        {: W9 h* |$ q8 m/ _6 {/ G9 l
                 int type=-1;& V7 ^2 C8 L$ e% B
                 int err=UF_MODL_ask_body_type(selectObject->Tag(),&type);
2 j# k5 c  ]7 ?6 o4 a. g: i                 if (err!=0 || type==-1)
7 d% J  @, {, P; M% s             return(UF_UI_SEL_REJECT); //不加入到对象预览列表6 u. O9 U0 X. e7 C% C! @
        }
  L1 P4 M( V) r: t0 X  i% p7 r# [" I1 D( h, a& \7 V
        return(UF_UI_SEL_ACCEPT); //加入到对象预览列表
  T$ i* p; Q6 J# x+ {. w9 \' S}( G2 \" G0 t/ t7 Z
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了