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

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

[复制链接]

2016-12-12 12:24:54 6177 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、选择对象
( Q( F" a& E: _+ O/ _# _
& m# h3 m  T6 K+ s捕捉2 q: H4 [5 W$ Z
  PointOverlay             是否显示捕捉点
( D3 @# m2 ?/ t3 L% l  SmartUpdateOption        智能更新选项- n# O$ E9 a! O3 D
                             Within Modeling   在建模
2 }3 K. D" [( y5 h6 u                             After Modeling    建模后; c4 F& o& N" }2 ?: I
                             After Parent Body 实体父后  q1 f3 u. `2 f5 \; F
                             Mixed             混合
6 B) o) v1 N) o9 T! S+ s: q. ?, B+ ^7 R& q6 p! h3 U1 Z
  SnapPointTypesEnabled    设置捕捉点类型的可见性
0 E9 Q3 B: N$ V1 U: U/ t7 u; ^$ c  SnapPointTypesOnDefault  设置捕捉点类型相关的内容被启用
6 v, B8 b  r" n/ h1 F( g' T
1 \- B* l  o- m- o- C9 f常规
+ y- a1 a' @( n* @1 ?5 N1 ~  BlockID  控件id7 i2 B9 l: k6 @
  Enable   是否可选/禁用控件0 {+ S: A3 u, V, B2 V( Q
  Group    组1 `$ `' m1 A8 t( Y- @- c
  Show     是否可见
. b- k' l1 i8 E% J, U' `+ O$ v/ y7 f
其它
9 v3 c0 R: z/ }2 l$ u* [1 ~  附着/ j6 r/ Y: J% [" n; o2 [' `" z: f/ X
    Bottom  底. d  y, E/ O7 s
    Left    左
4 b) W" R: |% k8 |  m8 G    Right   右
% q, `2 h7 b5 v0 f    Top     顶
' b% b% P! l2 ~. Y+ m1 Z% p
, p& C; y- F/ {+ }2 [特定于块! h' G4 |: B& V3 R
  AutomaticProgression     选择后焦点是否自动跳到下一个控件
2 f, d) J" n9 _+ ]: v( y; v* y  BalloonTooltipImage      动态提示图片(鼠标移动到控件是显示图片)
) a, V9 _. P# _1 V- o$ [+ g  BalloonTooltipLayout     动态提示布局
) ?  X# Y, a( C4 d  BalloonTooltipText       动态提示文本内容
# d; v8 c$ U, e3 U' h: M0 m  Bitmap                   指定图片
' ^% B2 r3 Q" O8 \$ z; o" y  BlendVirtualCurveOverlay 是否显示虚拟交线4 V- S7 ]9 `7 \4 w8 z, i2 q2 W9 O; _
  CreateInterpartLink      是否显示部件间连接图标在选择条上
0 P9 V3 S8 }0 y* J: h4 ~, c/ t  Cue                      提示
& _+ M# Z+ j) e: G+ u% Z4 X/ L: O; l7 |: `1 ^: t; R4 ~
  InterpartSelection       部件间选择设置( X  k- q) K' W) q9 E
                             Simple                                           简单
) v5 K: X% I; |  M' z                             Non-associative Interpart Copy Only              只复制部件间非关联# G# u# F, O& ~2 `4 I. Y& _
                             Associative and Non-associative Interpart Copy   复制部件间关联和非关联0 H9 ^% {: ^; L  B- D, r( V9 g
                             Associative Interpart Copy                       复制部件间关联
- _# T7 s# c' H( X
$ L) x. s9 w5 a$ M- e* `  LabelString              标签标题9 P/ a8 z* O* H4 s
  MaximumScops             设置选择范围  I( K$ {$ F9 L1 u) a, d- t
                             Entire Assembly                 所有组件/装配
: t+ |' j1 w4 z7 r( a+ q                             Within Work Part Only           只是工作部件( b" f8 B6 U& o
                             Within Work Part and Components 工作部件和组件/装配)
* s! {3 U( M( o0 u) o& q; q- {2 A
4 R2 L$ E# h  W, T4 n% q  SelectMode                设置单选/多选
" ^( E. ^" g: Q                             Single   单选
4 w. V! j3 e$ Y) x/ W                             Multiple 多选
) A. U0 _) h4 b! |) |" f
; V! I2 o# F$ g0 y  StepStatus               设置确定和应用按钮什么时候高亮 (Required 必需的时候)(Optional 可选的时候)(Satisfied 满意/满足的时候)
. ^# N$ l5 H! Y, N' @( A4 b' \  Tooltip                  动态提示文本标题(Bitmap指定图片时,鼠标移动到图片时提示文字)
7 A6 [  [8 y2 N1 N1 m2 o4 Q! t' b% r8 h
————————————————————————————————————————————
, X+ h8 ]6 O+ [) S, S" P  A# _————————————————————————————————————————————
+ ~5 J3 q/ |/ e3 z* F! p咧子:获得selection0控件选择的对象
/ P  T3 d% j* ]$ r* u      UF_initialize();
( {) _! [+ J6 d, a      std::vector<TaggedObject*>objects=this->selection0->GetProperties()->GetTaggedObjectVector("SelectedObjects");# Y9 _7 F  p9 F: k" Q
      for ( int i=0;i<objects.size();i++) // size 列表长度,这里指的是 对象个数3 @: f+ w2 u* ?/ }& f4 c
      {      1 k" R( N* e0 s! j5 I- l
         UF_OBJ_set_color(objects[i]->Tag(),1);3 T& M- ~8 I, A% R
      }+ R- X& F1 s2 }! y1 o
      UF_terminate();
* ^- H- T5 S% O: M
* U/ }  O6 n  V$ J* l0 o* Z  ^' H6 I————————————————————————————————————————————
5 P5 z( r; F) d咧子:对象加入到selection0选择控件的对象列表
8 F* J! w- G& K/ g6 G
6 w0 a; }- y( Q" L" d+ t% ^6 o& e2 J      tag_t obj=NULL_TAG;$ V% O5 A: B! X. L' I9 k
      double point[3]={0,0,10};9 T4 G8 Y. s) R9 ~4 V: s. [3 v
      double XYZ[3]={60,50,80};
* U, G% n  U4 l/ S      char C[132]="";" q" [  k" y( B! o, W
      char K[132]="";
& l6 `& A0 `! M      char G[132]="";
, ]4 J- i; a% P      sprintf(C, "%f",XYZ[0]);
3 P  c' t1 h8 o, |( A2 h      sprintf(K, "%f",XYZ[1]);
' r* C0 n) c2 x7 K      sprintf(G, "%f",XYZ[2]); 7 f, i* T  K3 C" }. @: M
      char * edge_len[3]={C,K,G};# r0 d6 @- P' e
      UF_MODL_create_block1(UF_NULLSIGN,point,edge_len,&obj); //创建方
/ Q; w+ g9 X- B6 O% y      UF_MODL_ask_feat_body (obj,&obj); //从特征中取出实体/ Q# `+ n! X9 N! U$ p8 K, y' v
4 u  W6 T% O# L0 I1 M0 P
      Body *body1(dynamic_cast<Body *>(NXObjectManager::Get(obj))); //tag转换给nxopen' o4 C8 t5 `6 o7 B$ t% [  [5 b
      std::vector<TaggedObject*>objects;7 B6 S+ J* C9 P$ A' c
      objects.push_back(body1); //对象加入到selection0选择控件的对象列表
& N" c2 t: i) q3 H7 m      selection0->GetProperties()->SetTaggedObjectVector("SelectedObjects",objects);
: N9 b7 I# ?  x! C# s: m; c1 R————————————————————————————————————————————
  t8 M* i% U; p) r8 E2 |  U$ J- Y- c+ N% [( e$ v' p. U6 f) h. [) q
//清除对象
! m& r( A, m2 ^std::vector<TaggedObject*>objects;
0 d5 h8 L$ }  |$ ~- zobjects.empty();; r# e. M' i% R/ l4 {
selection0->GetProperties()->SetTaggedObjectVector("SelectedObjects",objects);
0 n# r2 q% N3 j7 W1 c0 Q. n/ E( |9 k3 O* Q  K! ?
————————————————————————————————————————————5 p+ h# |, L  ~$ a" O
咧子:只选择面/ Z. k2 U6 `  L. V9 K# g" X
        initialize_cb() 初始化里加代码 或 dialogShown_cb()显示对话框里加代码 可进行对象选择过滤
" j3 A4 e/ O3 t" O( H- ?
3 C6 F# P+ {' [0 n  p        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式' l/ S8 G% x; l) L* j5 j/ h

8 J- O  a! {; M, s4 ?+ _        //对象选择过滤 只能选表面
* x' t% G" |" s        selection0->GetProperties()->SetString("LabelString","选择表面");
. A! X3 U+ v& a$ t4 x& ^        std::vector< NXOpen::Selection::MaskTriple > maskTriple;
; y+ K* R; j* J4 t) z+ x8 J        Selection::MaskTriple mask1(UF_face_type,0,0);2 p) f$ b6 J$ X8 H
        maskTriple.push_back(mask1);" ]1 u/ ^1 {1 F! n) G7 Q6 j# A4 c8 T
        selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);& C9 \5 a3 l! K
  {; i: U# D1 h

/ Z& m. R. W& Z! {6 k咧子:只选择面 【UG本身过滤器跟着变】, ~# Q) E) d" s+ P$ C
        initialize_cb() 初始化里加代码 或 dialogShown_cb()显示对话框里加代码 可进行对象选择过滤    / t( ^5 R  S% j" C

, g2 T" r6 q3 t+ ]  }        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式+ b4 R7 w9 g' _4 D
+ N! H, T3 j2 _( Z$ i- W
        std::vector< NXOpen::Selection::MaskTriple > maskTriple;
+ G' n( I/ }! Y( p1 b        Selection::MaskTriple mask1(UF_face_type,0,0);
% ~, L. @. k+ V: k  d        maskTriple.push_back(mask1);
4 A4 r- R% S4 O8 h! z! Z* J' v& m        NXOpen::BlockStyler:ropertyList *selComponentProps = selection0->GetProperties();8 V+ A% B6 [/ M( g. ?5 j! o8 c4 e% C
        selComponentProps->SetSelectionFilter("SelectionFilter",Selection::SelectionActionClearAndEnableSpecific,maskTriple);
) ~$ _' Z& G$ c2 P        delete selComponentProps;
/ m# M* g8 k( ?6 Q. n/ ]3 t        selComponentProps = NULL;
" }" a) _3 N$ F9 X! ^& D& L
" M: F4 d( [6 P! U2 G, O6 p( g8 C) |
上海点团信息科技有限公司,承接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

列子, H$ l7 a. ]6 C4 I+ T
, B6 @) D6 n; ?9 R; G% S
————————————————————————————————————————————
' L+ v9 u' O: M+ t: _& E————————————————————————————————————————————! C+ f" b( q8 r# t0 O
咧子:只选择 实体边缘 直线和圆弧1 J% I! n) n; g2 N: E

* }: L( B2 }! \  i; {& b( V/ X  initialize_cb() 初始化里加代码 可进行对象选择过滤/ Z- E# z2 W% b7 M# ~) O
1 f1 B: |' k" G: G3 N
        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式
8 J0 y  v5 U, f# X) _                        selection0->GetProperties()->SetString("LabelString","选择边缘");//只选择 实体边缘 直线和圆弧* ?( U# e+ s1 b
                        std::vector< NXOpen::Selection::MaskTriple > maskTriple;
" w  R- Y  d8 \( K                        Selection::MaskTriple mask1(UF_solid_type,UF_solid_edge_subtype,2);3 q1 I, ]( E3 x8 S9 ^0 Y
                        Selection::MaskTriple mask2(UF_solid_type,UF_solid_edge_subtype,3);
0 i% g9 h% N$ R. Z4 _. ^+ R                        maskTriple.push_back(mask1);
$ y  I, h" R6 Q; }. Z' t                        maskTriple.push_back(mask2);
7 v$ H$ e! ~  r2 v5 E. J% H                        selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);1 I8 b! C2 d3 i" i
- N3 k, p2 Z7 W7 [$ B/ s
//过滤无效的边缘
! c, X. m9 y) Vint ML_NX001::filter_cb(NXOpen::BlockStyler::UIBlock* block, NXOpen::TaggedObject* selectObject)
/ w0 D1 E- L) g7 g- R8 }4 b{        ) P5 D3 G6 j8 `' m
    tag_t obj=NULL_TAG;8 x' n1 b, m- P  U; _$ Y
    UF_MODL_ask_edge_body(selectObject->Tag(),&obj);
" d' k  K+ V5 O# a5 T2 @1 H* v    if (obj==NULL_TAG) return(UF_UI_SEL_REJECT); //不加入到对象预览列表
: h2 ^& e+ q5 X' _6 n+ t3 G    return(UF_UI_SEL_ACCEPT);                    //加入到对象预览列表& o) j2 I' _  O
}
* P9 F% ?/ o7 o" T1 ]7 f————————————————————————————————————————————
/ r& h5 U/ j2 x( W+ h( a————————————————————————————————————————————9 O1 X* N; T" O' L  w
咧子:通过枚举控件选项来 时实  分别过滤 边缘、表面、实体
- ^, `0 V* w5 M0 b5 O, [" \8 x. g, y; y
* P/ P% D3 `& m. ~3 G   int enumValue = this->enum01->GetProperties()->GetEnum("Value");
: N" X$ M+ k  D7 K                    if (enumValue==0) 1 j# {  {- `6 }. Q3 F
                    {
) m9 H. h0 I1 d8 p                            selection0->GetProperties()->SetString("LabelString","选择边缘");* F% K# v6 s3 d, o
                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;
( y7 N. n% x, t' U9 \+ L5 M5 f1 |0 w                            Selection::MaskTriple mask1(UF_solid_type,UF_solid_edge_subtype,2);
$ A3 w, b! L  ^' F                            Selection::MaskTriple mask2(UF_solid_type,UF_solid_edge_subtype,3);9 K3 ?. ~4 c* [1 d( k# T+ a5 K' ]
                            maskTriple.push_back(mask1);  g/ ?7 q, }4 n9 W& J, O- S2 W
                            maskTriple.push_back(mask2);
+ }8 p0 H4 \( q& w2 ?) F                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);
7 G1 Z9 Z% c" S% O* R/ D8 S* Y                    }2 B) p4 a) y/ \  l, a0 L
                    if (enumValue==1)
! E4 A+ }3 @: A9 k3 I% S) q                    {0 @2 @5 _. c2 C' i
                            selection0->GetProperties()->SetString("LabelString","选择表面");
, x& A/ x/ y. R+ P. x: E                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;0 S8 t( Q. x6 X5 T# |& N6 O
                            Selection::MaskTriple mask1(UF_face_type,0,0);
) |% [' B3 P6 m2 t                            maskTriple.push_back(mask1);
( z; L) i9 t$ v/ i7 T                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);
; P5 }$ d/ g+ t" K  N                    }: M) h! I/ P2 B9 J/ j. y  g0 V' n2 T
                    if (enumValue==2) % r6 o2 E4 m+ M' J  B
                    {
7 {' F5 Z8 e5 D                            selection0->GetProperties()->SetString("LabelString","选择实体");
$ B, D6 |" I: s4 M3 e( u% F" u                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;
, ~: {- \/ m' ?" k% G                            Selection::MaskTriple mask1(UF_solid_type,0,0);* F2 {  x0 ~) R* j' }9 _( G. @
                            maskTriple.push_back(mask1);
: t  {0 D9 R6 }5 @2 ^: h. m, l# X1 y                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);. x6 q7 [' H2 P  K1 z8 Y. Q  v
                    }7 D1 j2 p: n$ A1 g1 I
# T, D" l7 r+ W* F! T5 c

) Y3 R- R# r; x9 R//------------------------------------------------------------------------------
5 z9 @) k) c8 X0 j0 p5 H//Callback Name: filter_cb 过滤不符合对象2 i% N, w% T% _( F
//------------------------------------------------------------------------------
2 k# I- h2 z# x* X- ~1 Hint ML_NX001::filter_cb(NXOpen::BlockStyler::UIBlock* block, NXOpen::TaggedObject* selectObject)' {2 |0 j8 ^+ a/ n* n2 T
{
5 B% ~* E& [+ d3 N4 B        0 V# k; m- v( F+ w8 @, @) I4 F) |
        int enumValue = this->enum01->GetProperties()->GetEnum("Value");
2 M' o7 q5 i) k, k& q0 {        if (enumValue ==0)- c0 [+ X: G7 J1 ^
        {+ F; E6 _4 V: R4 c! @: W  m
                 tag_t obj=NULL_TAG;
8 M! c+ P, h  q5 i7 r                 int err=UF_MODL_ask_edge_body(selectObject->Tag(),&obj);0 @5 C( D; v$ t
                 if (err!=0 && obj==NULL_TAG)
. V& y! X& R& [+ l             return(UF_UI_SEL_REJECT); //不加入到对象预览列表2 N9 s4 [8 F. o4 G, I) f7 Q! z
        }
7 |% @" a0 E% u* E9 g) q; i: q        else if (enumValue ==1)
3 u$ C+ l  h; q& ~" S' K( e, I        {- B/ G, d5 G% g; r0 H5 ]( \
                 int type=-1;
  {( H! \  H* X3 j7 {3 `/ Z; L, m                 int err=UF_MODL_ask_face_type(selectObject->Tag(),&type);
9 U! Y$ }3 ^- c4 b. U                 if (err!=0 || type==-1)+ }% C2 R, D) i: T
             return(UF_UI_SEL_REJECT); //不加入到对象预览列表
0 v2 ^0 D  m( x" U        }4 i, [2 Q/ j: Z, D: Y: d& Q
        else if (enumValue ==2)
# d2 U7 y/ a+ |. r+ d; t        {
6 w" _6 Q4 i( @3 r: V( d                 int type=-1;
4 n, A9 r& B, u: r0 A/ h                 int err=UF_MODL_ask_body_type(selectObject->Tag(),&type);
5 h0 f; S, ?# X: h' G( ]                 if (err!=0 || type==-1)
# ]6 R6 n) _4 u             return(UF_UI_SEL_REJECT); //不加入到对象预览列表
2 y# N" F/ t7 m1 s# d7 ~5 E: k        }/ I% p! L2 ?3 O; m9 k
3 V. ~+ u% B' d' t1 P7 }! g4 A0 j- X
        return(UF_UI_SEL_ACCEPT); //加入到对象预览列表
! ^. |& Z7 |3 \3 d# r& v}
$ H: n/ ^) S' I2 ^/ t& N& k
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了