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

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

[复制链接]

2016-12-12 12:24:54 6339 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、选择对象4 i# m  d$ H% {+ s
# X* M$ s5 @  c3 _
捕捉# k* s  _, G" x$ P1 I+ ?2 A
  PointOverlay             是否显示捕捉点" q* ?) v8 C2 Y  f/ _/ R! ?
  SmartUpdateOption        智能更新选项! m3 W7 `" |+ |% `$ h! c$ }3 b
                             Within Modeling   在建模! @4 f% i' r+ ~: K, S9 a
                             After Modeling    建模后- w3 ~2 U& \: z/ Z8 @* O0 u8 ^
                             After Parent Body 实体父后
) l1 @7 e" l8 U7 ~4 o: N( m0 X$ N                             Mixed             混合
; z1 I5 p; ]7 r
" a2 \2 X- l" |+ ~; r* L, Q5 \  SnapPointTypesEnabled    设置捕捉点类型的可见性3 \) X! c+ I- k: ?
  SnapPointTypesOnDefault  设置捕捉点类型相关的内容被启用
8 Z$ m: j0 \/ l0 N# ^1 F* F; b# K! l4 F2 j  o
常规* \1 }0 o2 Z* S4 X( {0 b' }+ d
  BlockID  控件id! I$ I& ^5 B3 z6 n/ h( e
  Enable   是否可选/禁用控件+ h+ h) T4 q( J. G8 u
  Group    组
" ^3 y' y! }; l2 J  E0 f  Show     是否可见# U) v: j3 Y# h& T" T: q4 K4 J
  D$ P) c, Z1 f9 w. G
其它 ! I+ M* X9 f1 a$ M6 F
  附着5 m. _1 R& W( F8 m4 m! C
    Bottom  底/ E. q! P/ O, X( Z; L% Z; i
    Left    左) a% Z* m- g$ U6 o6 c: Q- L
    Right   右
) I, X* F9 B8 J% q* I    Top     顶2 `8 ^+ ^# b; h8 K& [! N& e# R2 X! V
3 z/ J- ]& c* W, l+ N7 r5 K3 |& C
特定于块
8 G2 |0 _- h4 Q9 h  AutomaticProgression     选择后焦点是否自动跳到下一个控件
7 I$ E) _/ O. j+ F: p* ~  BalloonTooltipImage      动态提示图片(鼠标移动到控件是显示图片)
9 E; V6 P8 f* F0 x3 i! O! z  BalloonTooltipLayout     动态提示布局* e+ ^+ _. k) h5 N
  BalloonTooltipText       动态提示文本内容' i/ O8 m; {- P0 E! ]  I0 Z" u
  Bitmap                   指定图片- y$ G0 {8 Z" D5 E$ `
  BlendVirtualCurveOverlay 是否显示虚拟交线
! u' P' w- C$ M! ^9 v( B- l* n  CreateInterpartLink      是否显示部件间连接图标在选择条上
. M6 f% J$ \" w; l3 N$ ?: {  Cue                      提示
; c6 Q$ g  L- [+ Y5 k
1 a8 q4 }/ y$ B& k  InterpartSelection       部件间选择设置4 o* L" f! h- Q. j0 c5 e
                             Simple                                           简单
) S; E$ s  B# G  @+ y                             Non-associative Interpart Copy Only              只复制部件间非关联
4 n1 M5 L/ u4 ?" O; j                             Associative and Non-associative Interpart Copy   复制部件间关联和非关联
: o- y4 b% \# ?/ [+ e                             Associative Interpart Copy                       复制部件间关联
( ~' j1 k5 p7 k
# A' [! t6 ~/ C0 F. m  u  LabelString              标签标题- q7 B' f! D7 ~/ }. C  T: U
  MaximumScops             设置选择范围
+ g5 A. |* M5 z& i0 X4 n/ s                             Entire Assembly                 所有组件/装配
: M/ }. z) {5 A8 X# `                             Within Work Part Only           只是工作部件/ Q) e8 O9 V" U0 f
                             Within Work Part and Components 工作部件和组件/装配)
( p& W6 R- S1 x: q8 O; t4 P" C& A+ f3 B/ V
  SelectMode                设置单选/多选
7 ~# P% l  @2 m                             Single   单选0 O6 W* c$ @8 U
                             Multiple 多选+ w+ `6 A2 U1 c

- y. P3 W3 k) \  StepStatus               设置确定和应用按钮什么时候高亮 (Required 必需的时候)(Optional 可选的时候)(Satisfied 满意/满足的时候)+ @' N: g: l7 ~3 L
  Tooltip                  动态提示文本标题(Bitmap指定图片时,鼠标移动到图片时提示文字)+ J; \, p8 N( E0 P" x
4 t8 J  B+ b. o; v4 O9 N
————————————————————————————————————————————5 K6 D. k, m6 C5 n, C" z
————————————————————————————————————————————
& _' s- ~; G$ N咧子:获得selection0控件选择的对象5 e& q- `* D$ l" ^7 n* \
      UF_initialize(); & x8 K9 o. e9 {6 o3 {! e
      std::vector<TaggedObject*>objects=this->selection0->GetProperties()->GetTaggedObjectVector("SelectedObjects");
) A* ?2 E$ L: A! s* a      for ( int i=0;i<objects.size();i++) // size 列表长度,这里指的是 对象个数
& u" t# B( V$ Y& r9 n1 r# V      {      ' q- z3 m$ j4 r& Q3 G5 [' b
         UF_OBJ_set_color(objects[i]->Tag(),1);- }. s6 O; @5 X+ O/ l2 Y
      }
- ^% J" K  O2 m1 n      UF_terminate();
7 }2 I# \& p! D2 }/ L9 C. E( c
9 t0 n5 Y' d' [————————————————————————————————————————————5 \( Y3 A, |1 N# S/ j
咧子:对象加入到selection0选择控件的对象列表; X, E- E: R5 p1 e9 ?& i* r4 M9 w
' c. A0 j' E0 G- h8 ~7 b
      tag_t obj=NULL_TAG;
( H, b  o+ B8 W9 S      double point[3]={0,0,10};
$ Y$ |7 V7 K) w; ]      double XYZ[3]={60,50,80};
# v3 y- Z: G( m: R      char C[132]="";# u5 Y$ {- l  l$ H7 l, j
      char K[132]="";- {  X: w% F, q/ w
      char G[132]="";! e' `" C. `: k" l
      sprintf(C, "%f",XYZ[0]);. {" ]2 x- A! \  O' X# u
      sprintf(K, "%f",XYZ[1]);
* ]" T* R. `: `* I, ^3 I      sprintf(G, "%f",XYZ[2]);
' r2 Y# k; G6 v- |      char * edge_len[3]={C,K,G};3 P1 O$ `, Q+ S( t' T0 ~$ J' M
      UF_MODL_create_block1(UF_NULLSIGN,point,edge_len,&obj); //创建方
4 M  D1 C: g0 K      UF_MODL_ask_feat_body (obj,&obj); //从特征中取出实体
* \# s+ ]  ~: b" U$ k8 A' s+ N
' U0 x+ M8 Z' S      Body *body1(dynamic_cast<Body *>(NXObjectManager::Get(obj))); //tag转换给nxopen# R8 y3 w2 J9 ]8 y- C/ ]7 {
      std::vector<TaggedObject*>objects;
6 {+ o# S+ ]. T* |5 U% ]      objects.push_back(body1); //对象加入到selection0选择控件的对象列表8 o; {# C' y- e- z
      selection0->GetProperties()->SetTaggedObjectVector("SelectedObjects",objects);
2 Q- f+ q2 J2 I! ]  P8 T* J3 S————————————————————————————————————————————
0 @, ]  K: K! O& v3 F1 ?5 A
0 s" }4 I  q  P$ ?: t9 Q$ `6 W//清除对象3 |* Y* G8 T7 u, K
std::vector<TaggedObject*>objects;
4 K. L  s! \' P6 G* gobjects.empty();
# A3 F9 ^+ _- A7 w  O: S5 @selection0->GetProperties()->SetTaggedObjectVector("SelectedObjects",objects);5 x' D" S5 c2 b: X0 D4 {
! z4 N  o6 y0 Q+ S
————————————————————————————————————————————( ]/ ^0 Z9 q6 q* o- e4 H" u
咧子:只选择面
  A8 h+ A) ~; S2 ~1 a, A$ r8 `1 M        initialize_cb() 初始化里加代码 或 dialogShown_cb()显示对话框里加代码 可进行对象选择过滤+ P  X! d, l, p- S8 Y
) e/ S$ b* ]4 j
        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式
5 u! E$ t+ h% R/ o- z3 S8 `* y; \( Y. o8 |# B) M4 {
        //对象选择过滤 只能选表面3 |0 H) ]1 g) g+ j6 r; [
        selection0->GetProperties()->SetString("LabelString","选择表面");1 O* `+ W' O5 o  K' e6 K4 }- s
        std::vector< NXOpen::Selection::MaskTriple > maskTriple;* K4 O! Z# f1 _& ?
        Selection::MaskTriple mask1(UF_face_type,0,0);7 W8 }% {3 i) e- O
        maskTriple.push_back(mask1);- y9 c! g" S# r3 u
        selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);
( _8 k% b4 H7 Q  b! l/ u
8 V8 U6 q* h0 j+ g4 {5 r% D- [0 t0 a5 q$ U: H
咧子:只选择面 【UG本身过滤器跟着变】
; E- e; i. `' z* h4 j/ K1 o7 ~, W        initialize_cb() 初始化里加代码 或 dialogShown_cb()显示对话框里加代码 可进行对象选择过滤   
! B3 A- U6 K. g! o. m7 a8 S$ M- c9 c
        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式1 P/ {% e9 I, F. G
' \  _/ r% l' u+ v
        std::vector< NXOpen::Selection::MaskTriple > maskTriple;
$ k1 |  d" V/ r! J7 F        Selection::MaskTriple mask1(UF_face_type,0,0);" x" W$ Z: W4 y
        maskTriple.push_back(mask1);
& f3 r* W, E0 n% l9 n/ F# M: L        NXOpen::BlockStyler:ropertyList *selComponentProps = selection0->GetProperties();, j3 x/ I8 f  X2 e6 i
        selComponentProps->SetSelectionFilter("SelectionFilter",Selection::SelectionActionClearAndEnableSpecific,maskTriple);
; x& A8 G4 m. D/ D6 K% {' z" v$ Z0 y5 V        delete selComponentProps;. x* U# h6 Q, v5 S& h
        selComponentProps = NULL;
3 z0 b- x, G: P7 a* Y
' i% ]  J, x$ P% k  ?: f+ ?8 C
上海点团信息科技有限公司,承接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 | 显示全部楼层
列子
. W' b" u0 M8 x' M6 h& k3 P5 Q* q
6 ]) a! H: Z0 }# N4 {! s+ O. M————————————————————————————————————————————- ]) H: K* w1 m% F) i& g( u
————————————————————————————————————————————& C% }5 G, t" `. `  s( M3 p: N
咧子:只选择 实体边缘 直线和圆弧
* k0 i: Q  S' Y0 R* W" x9 h
' \5 g$ O# t5 @/ E0 b* O  initialize_cb() 初始化里加代码 可进行对象选择过滤& Z9 [  Z% I% G! a8 H% t% X
# v  Q0 s/ K; r
        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式
/ R/ z9 Z- O: R                        selection0->GetProperties()->SetString("LabelString","选择边缘");//只选择 实体边缘 直线和圆弧8 q) }; V4 N- ^: C4 y
                        std::vector< NXOpen::Selection::MaskTriple > maskTriple;
4 P1 U; r- W5 S- D; ]' O: Z( s                        Selection::MaskTriple mask1(UF_solid_type,UF_solid_edge_subtype,2);
: |; r, B* P. L1 L& b5 W3 D                        Selection::MaskTriple mask2(UF_solid_type,UF_solid_edge_subtype,3);
3 B+ D, _7 c) R/ @                        maskTriple.push_back(mask1);; t2 ^# F) g& O# J" V2 M
                        maskTriple.push_back(mask2);9 ^6 }* \0 q; W" U) O
                        selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);
) Z. ~- i( F& T1 t: i6 i
3 `; v$ O( b) X) k7 w* I//过滤无效的边缘
; T; P* |- }) `! Z  k% fint ML_NX001::filter_cb(NXOpen::BlockStyler::UIBlock* block, NXOpen::TaggedObject* selectObject)
9 M9 s2 k$ k2 F8 H{       
4 T+ L8 @) E- |4 h    tag_t obj=NULL_TAG;
- {' t* {- o- u1 ]    UF_MODL_ask_edge_body(selectObject->Tag(),&obj);2 i+ `* U# l0 z- c3 t6 m* `( F
    if (obj==NULL_TAG) return(UF_UI_SEL_REJECT); //不加入到对象预览列表
6 Z; B% T5 u9 p2 z    return(UF_UI_SEL_ACCEPT);                    //加入到对象预览列表) A7 K$ x; L& r8 x. W. |' X
}+ k  H$ k. Z4 e& {
————————————————————————————————————————————
" Q& N  M/ }( A) l————————————————————————————————————————————
6 o8 }" j$ o: P- M, j咧子:通过枚举控件选项来 时实  分别过滤 边缘、表面、实体
! {  m5 |2 D/ t( _2 X5 z
& F/ _9 d+ [1 j$ ^+ m   int enumValue = this->enum01->GetProperties()->GetEnum("Value");+ i2 r9 [  c4 o8 l; F
                    if (enumValue==0) ! P7 F4 s# M$ m/ r- U9 F
                    {; \& y3 I, U5 o# ]3 U% y
                            selection0->GetProperties()->SetString("LabelString","选择边缘");
- e( I1 Y, J4 H& ~) @" Z' [                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;# f5 V; ?2 c/ T% w/ y% W+ b  a8 x
                            Selection::MaskTriple mask1(UF_solid_type,UF_solid_edge_subtype,2);* W1 K* k9 Z1 Q' k) t& ?- X
                            Selection::MaskTriple mask2(UF_solid_type,UF_solid_edge_subtype,3);. o/ ^" s9 n! R
                            maskTriple.push_back(mask1);
; v, E  v& J5 ^# V                            maskTriple.push_back(mask2);
8 l% D9 P* x6 j* X0 O                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);0 ?8 N* R7 [# u- \' J
                    }5 l! G1 ?" p( T3 I
                    if (enumValue==1) & D0 A  H  E6 p' ^" Z: g
                    {
. c, @2 B/ j1 b                            selection0->GetProperties()->SetString("LabelString","选择表面");
5 {( G7 C) ]+ U7 P                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;" @8 e2 L. F" P2 j5 u9 `
                            Selection::MaskTriple mask1(UF_face_type,0,0);' A( f$ J2 X: L8 j% w: W
                            maskTriple.push_back(mask1);
6 c$ l( X& X6 H5 S* N0 m- a+ Z$ I                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);5 R9 R' A  }: b0 f* \
                    }
/ T# a& R$ O  \4 Y: c                    if (enumValue==2)
5 Y  s6 j0 F4 W- \7 i6 f                    {
. F6 n  {% Q7 Q( O                            selection0->GetProperties()->SetString("LabelString","选择实体");# l" }* j6 u4 B% b# R; L, k
                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;0 G+ T9 B' O1 b. h& ?
                            Selection::MaskTriple mask1(UF_solid_type,0,0);
/ X: ~8 u. t! I7 X2 X                            maskTriple.push_back(mask1);6 U% Y% U1 `% B* E% |& z8 {
                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);: v. ]$ [1 {% s, @* o
                    }3 F8 _" m8 B# B  d0 _! z9 j" S  s
4 E% p1 w( y! B& ^
) A/ ^, R* [# d1 e8 h/ @9 J8 i( `
//------------------------------------------------------------------------------
2 ^+ Z$ _8 d7 o. C4 b, P0 h( L+ h//Callback Name: filter_cb 过滤不符合对象
# i) g+ y! e, M4 Q//------------------------------------------------------------------------------
  [7 H- @+ M1 N0 Kint ML_NX001::filter_cb(NXOpen::BlockStyler::UIBlock* block, NXOpen::TaggedObject* selectObject)
. n( g% w* _' d! O+ Q3 u{
" u* [8 }* T( F; x0 v* p        ) }2 p* g, y! o0 z9 }/ u& [
        int enumValue = this->enum01->GetProperties()->GetEnum("Value");
0 A0 p$ A( b: k* b, P, X* E1 E+ Q/ _        if (enumValue ==0)* ~2 m( D( s/ v2 u7 u0 r- @* V: F
        {  U# r# |% Z4 O2 u$ q0 g5 ^
                 tag_t obj=NULL_TAG;  {3 \( m/ w: ]8 {
                 int err=UF_MODL_ask_edge_body(selectObject->Tag(),&obj);! D* i) y% N& U' t
                 if (err!=0 && obj==NULL_TAG)8 f3 }2 ]1 k5 H# z6 _0 {) p; _
             return(UF_UI_SEL_REJECT); //不加入到对象预览列表
' ?$ g& ~. c2 R) I6 m9 _        }
. v$ E* p. n+ e# @/ k1 o) D        else if (enumValue ==1)" f. n. W# `) {7 Y3 g& b+ R
        {- M) l; k6 q' h! n5 W1 k7 D
                 int type=-1;
/ n! z  H8 N+ s) O. O# S+ K1 B                 int err=UF_MODL_ask_face_type(selectObject->Tag(),&type);
5 `) E' ~! w- V/ D1 i                 if (err!=0 || type==-1)" _* V: T: O, b* W
             return(UF_UI_SEL_REJECT); //不加入到对象预览列表
8 f: u8 p! {& f. Y2 ?9 h        }
$ C1 h/ q: D2 }        else if (enumValue ==2)5 `; g* D; f5 `6 C0 }& e) b( k
        {
4 v$ d1 {  e7 G* g$ K7 t" I                 int type=-1;' O8 I0 D; F4 G7 o- E- b
                 int err=UF_MODL_ask_body_type(selectObject->Tag(),&type);
) W# Y, W' E, h7 }* m4 o* q$ b* I3 w                 if (err!=0 || type==-1); i; X4 k# _& {2 |, X" U4 S
             return(UF_UI_SEL_REJECT); //不加入到对象预览列表3 D& S: ^$ J% i- D; {
        }/ ^, }7 ?" T- |+ A9 G
5 g  a* r* T/ K
        return(UF_UI_SEL_ACCEPT); //加入到对象预览列表
2 M  p! i7 Z2 R: b; g( O* z  ^}+ x; z: @9 B7 O7 y/ r4 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二次开发专题模块培训报名开始啦

    我知道了