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

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

[复制链接]

2016-12-12 12:24:54 6083 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- \( }$ p# V( _: ?

1 x! c; Q( ^' [2 L. b  e捕捉) D  V' B9 y% S3 N4 h
  PointOverlay             是否显示捕捉点
: [& n/ T1 ~5 Y: Q3 J* I7 ]& a' @  SmartUpdateOption        智能更新选项
5 I+ u; P) k8 n5 H                             Within Modeling   在建模
. Y. n* Z- t8 A                             After Modeling    建模后
; V9 \/ G3 c; t* H7 J  T                             After Parent Body 实体父后
2 I* |& i/ z, i: B) |                             Mixed             混合
7 h0 P7 k+ b/ V# J
( `/ D6 r1 v0 e+ x  SnapPointTypesEnabled    设置捕捉点类型的可见性
: j9 G' _- L: l( u$ P# c5 x  SnapPointTypesOnDefault  设置捕捉点类型相关的内容被启用3 p, o( l! J% c8 Y. D

6 ?( W5 Z3 k. a# ~, p; C) t- L' J3 C常规
3 N) E$ |! h9 {4 M" @) X% B( d* n  BlockID  控件id- s( q) M6 k+ m- p5 i0 w% S
  Enable   是否可选/禁用控件' w8 D: |+ C6 ~. F6 U& d2 e
  Group    组
+ ~. r8 ~! W6 \& D  C$ {) o: x  Show     是否可见0 W+ _6 [3 j* r. E% b" w
9 k" A5 i, Q' Y9 `3 H
其它
' i2 g" R$ b) I2 B- ~! R9 ~) p  附着& d/ x% I. H1 r5 u4 f
    Bottom  底0 K4 w3 j# K2 z2 c) l" ~$ A
    Left    左1 c9 e) |) N0 z* H: f
    Right   右0 ~6 t! d3 L1 K
    Top     顶
# K6 O' J: A0 ?2 \% M, x1 Q' E  K* o' n9 u% ]' Z
特定于块9 F; H9 \7 ~+ b" A2 y2 j' }
  AutomaticProgression     选择后焦点是否自动跳到下一个控件8 m6 r/ |/ N  E/ j
  BalloonTooltipImage      动态提示图片(鼠标移动到控件是显示图片)' o8 m4 X8 }, k
  BalloonTooltipLayout     动态提示布局
( l9 ^& |0 {9 V2 _. W  j  BalloonTooltipText       动态提示文本内容. [* R& I" ^9 Y: o1 ]* X
  Bitmap                   指定图片7 V) L1 t+ K6 y4 P* s0 K8 b% I  W
  BlendVirtualCurveOverlay 是否显示虚拟交线
+ e2 A; t3 X9 i! x9 T  CreateInterpartLink      是否显示部件间连接图标在选择条上1 S8 J8 p6 W# p- v7 B
  Cue                      提示
) U1 }& x; p6 v) E9 j, E- j1 T$ v
- z' U& O# B3 x: A9 @( s  InterpartSelection       部件间选择设置, c; u8 O/ o; G' M; g. v2 y
                             Simple                                           简单' P9 l2 U8 F1 j
                             Non-associative Interpart Copy Only              只复制部件间非关联
; y6 \- E6 Y2 [7 n3 L, `                             Associative and Non-associative Interpart Copy   复制部件间关联和非关联
: p  b" d& ^6 o4 D# Z3 i4 w/ n                             Associative Interpart Copy                       复制部件间关联
/ g! M/ W2 f0 c: v/ D/ H
6 _+ ~: Q8 W/ @. X& p3 }# {8 J  LabelString              标签标题
( m; m6 m4 m+ p/ n2 ~( n- M  MaximumScops             设置选择范围5 g+ o/ G# C5 \9 M
                             Entire Assembly                 所有组件/装配
* I0 l/ w4 d/ e6 M- u                             Within Work Part Only           只是工作部件
6 r$ t2 I& Q: ]6 }! x                             Within Work Part and Components 工作部件和组件/装配)
  w5 P% c. t$ E: t# e2 {( K
: n' G7 w& T+ J7 Q1 H: Y  SelectMode                设置单选/多选 : [$ @- _2 |; v3 W
                             Single   单选) m1 s) I$ J& C4 M/ @+ L
                             Multiple 多选4 j9 @4 {" q0 j9 j
& R6 j# |" V- y$ S$ q$ o; x
  StepStatus               设置确定和应用按钮什么时候高亮 (Required 必需的时候)(Optional 可选的时候)(Satisfied 满意/满足的时候)" ^( u+ I9 j% t9 t( {
  Tooltip                  动态提示文本标题(Bitmap指定图片时,鼠标移动到图片时提示文字)6 n4 M/ f4 n9 M

$ i, R1 [% @$ r) @8 |————————————————————————————————————————————" R9 D; Y* M& v% p9 X8 f" O: Y
————————————————————————————————————————————1 g) {1 d/ ], N7 E/ w
咧子:获得selection0控件选择的对象- ~' T  G6 }% I* E. h
      UF_initialize();
4 A  @5 T! z6 X      std::vector<TaggedObject*>objects=this->selection0->GetProperties()->GetTaggedObjectVector("SelectedObjects");
$ k& m+ l4 L  W2 I/ `) P' T      for ( int i=0;i<objects.size();i++) // size 列表长度,这里指的是 对象个数% c8 a6 ?7 e! i9 q7 S1 V
      {      
3 A' P* Q+ Z  n& d* S         UF_OBJ_set_color(objects[i]->Tag(),1);# D% D# ~9 \* a
      }) s/ e7 t+ E& y+ Q' s+ D
      UF_terminate();/ d' v3 z+ e  y. n( b( Q

( Q9 t( G) W2 T+ m# d, N5 T. ~6 _————————————————————————————————————————————) a, W1 k0 R) c
咧子:对象加入到selection0选择控件的对象列表
6 {$ x/ _% v1 W  q' S. N& }, P7 I
' W+ J" z& A5 E9 U      tag_t obj=NULL_TAG;
# ~$ ?' I1 U/ Z      double point[3]={0,0,10};' ~% ]8 y% U  G8 r( v0 ?
      double XYZ[3]={60,50,80};' F" b/ K3 b, x+ t% y+ y
      char C[132]="";7 V2 y, }; B) ^2 Y
      char K[132]="";
% t  H/ X" f) }- i0 H8 |  Z      char G[132]="";
  y- P# W1 r, b" L+ C      sprintf(C, "%f",XYZ[0]);# J+ Z/ ?# ]) A5 t: J! a& x
      sprintf(K, "%f",XYZ[1]); - d; U% a6 x# `9 e' v
      sprintf(G, "%f",XYZ[2]);
3 _6 [6 d0 B) f+ H; X: q* `      char * edge_len[3]={C,K,G};
* q1 q. Y1 I/ k8 s2 `8 Z- v5 G$ ]9 U      UF_MODL_create_block1(UF_NULLSIGN,point,edge_len,&obj); //创建方
  I" l( l! X- H% T      UF_MODL_ask_feat_body (obj,&obj); //从特征中取出实体
' ~8 R: p: E0 P2 _$ U* B
( {/ b! X" t8 q- ^" i, R  B/ X3 U      Body *body1(dynamic_cast<Body *>(NXObjectManager::Get(obj))); //tag转换给nxopen# ~0 x+ F- R! r' ?) v
      std::vector<TaggedObject*>objects;
- g# n# ~6 l, ~/ L% F3 i$ D) j* G      objects.push_back(body1); //对象加入到selection0选择控件的对象列表
3 ?3 g- J* r" l9 Y9 V3 g      selection0->GetProperties()->SetTaggedObjectVector("SelectedObjects",objects);
; t; j& v% B+ S" b1 ], T* q————————————————————————————————————————————
8 \. q5 D- _/ ~  ~  U( |# y9 O9 g. e
//清除对象" B" O7 E2 y3 f5 J; P  M
std::vector<TaggedObject*>objects;
6 P5 z# g- Y6 robjects.empty();
7 E, }2 W; A/ k6 m6 r8 Kselection0->GetProperties()->SetTaggedObjectVector("SelectedObjects",objects);
  @+ T+ H( I# v
$ D' e6 y1 h% D7 ]————————————————————————————————————————————" {* p8 O) ~! e, ^& T7 {
咧子:只选择面
0 {1 V8 d- s! T; l8 \        initialize_cb() 初始化里加代码 或 dialogShown_cb()显示对话框里加代码 可进行对象选择过滤: p+ ~& S# V& ~5 c4 I  y5 L6 h
. E  ^6 N  J, v, X. v5 z1 H
        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式
0 [) h! a8 Q2 L2 R. u! {, q
5 q" u7 I" X8 ~& d6 k* d" j$ ^        //对象选择过滤 只能选表面
6 c& N# X# D; y. a: J        selection0->GetProperties()->SetString("LabelString","选择表面");
9 y$ m% J) t7 a  K& F! u  \. e        std::vector< NXOpen::Selection::MaskTriple > maskTriple;
) p$ G( P0 S, C3 |1 J. Z: h0 W        Selection::MaskTriple mask1(UF_face_type,0,0);$ G9 \. H" d  e! t% a. H% n9 f
        maskTriple.push_back(mask1);1 H, Z6 ^  L% o" u* t0 c- `
        selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);. R. d" f+ ~9 ?, z$ r# j4 q

+ U% v) G  t, I: \7 l7 x5 ?
; ^( R# q& z2 R& G: S2 J咧子:只选择面 【UG本身过滤器跟着变】) F: V0 _1 [/ ^4 ^4 H! w0 Y7 O
        initialize_cb() 初始化里加代码 或 dialogShown_cb()显示对话框里加代码 可进行对象选择过滤    # ^  ]9 R, G5 G6 ~- a0 K! S
8 P5 J" Y# P' @. O7 X; x: E
        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式* ~& M7 T2 _! {
& S7 @' M" x4 W( s; L2 x+ Q: ]
        std::vector< NXOpen::Selection::MaskTriple > maskTriple;
% u4 R  ~6 c* {' E/ \5 U, ]        Selection::MaskTriple mask1(UF_face_type,0,0);
  s: `2 L8 ?$ q/ I) [& U        maskTriple.push_back(mask1);
  ?9 V( ?+ k) J  W, Y$ r& D        NXOpen::BlockStyler:ropertyList *selComponentProps = selection0->GetProperties();9 i: w: @; ]1 E  g0 |
        selComponentProps->SetSelectionFilter("SelectionFilter",Selection::SelectionActionClearAndEnableSpecific,maskTriple);
) d$ I' S+ O7 t' U1 B# f; V        delete selComponentProps;
0 ]; N. y; b0 @& [        selComponentProps = NULL;( w9 {* [8 g9 N& C( s' h" w) I

2 X% I+ R, n- X1 m6 {9 s; i
上海点团信息科技有限公司,承接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

列子
- k! C1 N4 k9 {( @/ B- u. I+ b" V" U9 l9 G5 [
————————————————————————————————————————————$ c, D- j- D" ]2 U% M
————————————————————————————————————————————
0 W- j0 Y- N) r6 Q5 ?9 j- ^3 d咧子:只选择 实体边缘 直线和圆弧
" p& P, z- g/ g8 T, K! t, e' {4 g& M
  initialize_cb() 初始化里加代码 可进行对象选择过滤' p4 c$ x1 \- Y& m$ z  i

+ y6 `6 D* Y# i2 ]        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式2 Y9 t+ i4 x$ E5 e, i9 y+ V
                        selection0->GetProperties()->SetString("LabelString","选择边缘");//只选择 实体边缘 直线和圆弧3 H' g8 V8 b' w' o) R6 q
                        std::vector< NXOpen::Selection::MaskTriple > maskTriple;
) i' e9 j# Q! c/ E" P4 K5 `                        Selection::MaskTriple mask1(UF_solid_type,UF_solid_edge_subtype,2);: P; y( _& U9 o/ v
                        Selection::MaskTriple mask2(UF_solid_type,UF_solid_edge_subtype,3);) `; y* s0 D$ G( z2 P
                        maskTriple.push_back(mask1);
! B0 Z6 I+ c( [                        maskTriple.push_back(mask2);) {* c0 M$ X( ~8 O" j7 l
                        selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);9 e( R7 O1 t/ F7 M. {( K

/ s( V6 Q) e7 C) n  m0 F//过滤无效的边缘
/ B) g0 ?. d0 N9 y" k" b6 v3 cint ML_NX001::filter_cb(NXOpen::BlockStyler::UIBlock* block, NXOpen::TaggedObject* selectObject)2 F8 _3 f2 x; [& p
{       
) ?( H  W" z( f; Z    tag_t obj=NULL_TAG;+ U; y( v) q6 r) k: x
    UF_MODL_ask_edge_body(selectObject->Tag(),&obj);1 ~2 Q& F: I- H
    if (obj==NULL_TAG) return(UF_UI_SEL_REJECT); //不加入到对象预览列表
+ i5 _/ \5 }( f7 K. K5 O    return(UF_UI_SEL_ACCEPT);                    //加入到对象预览列表5 A5 J. `; N" o. Z' j
}
9 P0 ^, e" S2 `( S————————————————————————————————————————————
( g' O1 t2 \; t6 l. D; T. K————————————————————————————————————————————
4 h5 s1 n6 S& ~0 f& O! l- h! q- Y咧子:通过枚举控件选项来 时实  分别过滤 边缘、表面、实体
2 [! ~; s6 o7 U
* I% i& i2 E4 P9 f( K/ g* u' a( j   int enumValue = this->enum01->GetProperties()->GetEnum("Value");6 I" N4 r0 X. A, n
                    if (enumValue==0)
, J+ e# R) T; e) x                    {
) W1 A8 r/ l' r5 p                            selection0->GetProperties()->SetString("LabelString","选择边缘");( s, S$ l  }: ^2 P' R; I' u
                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;1 ]- K+ _9 g" Q- t! p
                            Selection::MaskTriple mask1(UF_solid_type,UF_solid_edge_subtype,2);
9 |9 a- G0 a: {' S6 o% |3 X                            Selection::MaskTriple mask2(UF_solid_type,UF_solid_edge_subtype,3);
% n% o  O: p' I                            maskTriple.push_back(mask1);
9 F) k7 d1 ^" F; z4 \3 j( Z9 P                            maskTriple.push_back(mask2);3 P0 u3 x1 p. H
                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);
0 C4 t  Q) |% y! Y# [6 e                    }
, a7 _/ b0 `) `* K. A                    if (enumValue==1)
9 e9 D+ H5 N3 h9 q/ J; [                    {
' R2 S8 R8 ?& W: s6 C9 V                            selection0->GetProperties()->SetString("LabelString","选择表面");
2 W; q& p# ~% w' \! h0 ?                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;
* z$ P# c1 K/ ?7 A+ t8 |                            Selection::MaskTriple mask1(UF_face_type,0,0);- g+ m4 |6 D. b9 T) I' ?) W$ c' u* B2 T
                            maskTriple.push_back(mask1);9 b! J9 R  D# P4 o+ W5 q
                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);% ?) E) M! W4 a5 I$ {$ V
                    }
2 ^+ c9 S( |* {, S7 C$ r7 p' T                    if (enumValue==2) ( S" a4 M  o: g4 `0 c
                    { * F6 P& ~9 g* b1 W
                            selection0->GetProperties()->SetString("LabelString","选择实体");
/ f$ k, m& P' u3 @7 ]& E2 r. M. i7 @                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;
; Z- m- ~* l/ O/ H! K. c                            Selection::MaskTriple mask1(UF_solid_type,0,0);9 j4 j: B) R: l: t5 O
                            maskTriple.push_back(mask1);% v/ Z: O  @' |! Q6 R- O4 f4 s: _
                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);. U* i+ j- |" I: b$ q. A8 I
                    }4 R$ d# P5 H  H8 y% M: s$ N/ t
5 ]: X: Y9 O& P/ J7 I
& e7 T5 ]- J7 p' u* I9 s1 t
//------------------------------------------------------------------------------0 o: v, J; |% j* v/ n8 e
//Callback Name: filter_cb 过滤不符合对象
2 S. s" _& ^" D9 v//------------------------------------------------------------------------------/ o; k$ G' `& w) U7 }1 F( Y
int ML_NX001::filter_cb(NXOpen::BlockStyler::UIBlock* block, NXOpen::TaggedObject* selectObject)
/ G& O$ ?) a! }- E% Z! _( w{1 I3 M. ~) L2 i. p' Q: o
        ' P! v( ^- V) s- W/ a
        int enumValue = this->enum01->GetProperties()->GetEnum("Value");" Y" ~( Q& a2 s: o. E! Q! m) V
        if (enumValue ==0)
" v2 ~6 w: M/ s$ A        {
* a( V. U* S- i& A) F                 tag_t obj=NULL_TAG;0 U8 w# O6 L; V3 z$ }. i
                 int err=UF_MODL_ask_edge_body(selectObject->Tag(),&obj);
; \' @2 G  P* T6 Z                 if (err!=0 && obj==NULL_TAG)( B1 K* c! h5 |
             return(UF_UI_SEL_REJECT); //不加入到对象预览列表) E1 X6 K' f  I* |4 j7 J- t+ r
        }/ n# B2 a  u( u6 n
        else if (enumValue ==1)
1 `# K# Q0 m( ?# ^        {
! Q& w: w8 A4 |( H6 `0 S4 v0 @7 c                 int type=-1;7 K% l* o" [+ g  k8 y  H- R
                 int err=UF_MODL_ask_face_type(selectObject->Tag(),&type);# x. W* v: O6 q6 M9 N2 Z
                 if (err!=0 || type==-1)
  I. q, d9 y+ n9 I# U             return(UF_UI_SEL_REJECT); //不加入到对象预览列表( c' C! f) _& }  s! R& v) i
        }0 ^6 t2 o1 f, L* l
        else if (enumValue ==2)+ c5 K1 b6 S  V
        {
. p/ F7 L8 U4 ?- b6 [                 int type=-1;
  e% ]- w8 B7 {                 int err=UF_MODL_ask_body_type(selectObject->Tag(),&type);
) b$ V  [( i$ `. P* _. E                 if (err!=0 || type==-1)8 |! S* j/ w* I7 {/ I* r. [% [) q
             return(UF_UI_SEL_REJECT); //不加入到对象预览列表, T6 d" t! N2 X0 m
        }; m4 u3 O% A+ m( ~; n/ A- \) i) ?: V
6 M5 @  C% W3 W) ~2 F
        return(UF_UI_SEL_ACCEPT); //加入到对象预览列表
9 }/ K# O6 Z, ^( D  p2 `}
( N3 D; \' |4 V0 |2 C  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二次开发专题模块培训报名开始啦

    我知道了