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

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

[复制链接]

2016-12-12 12:24:54 6314 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、选择对象
5 Y8 [2 L( k) [; T
8 G- |1 J% M; T4 F/ F捕捉
4 A% w# L) F& Y& w7 C; Q. x0 V  PointOverlay             是否显示捕捉点; x7 \4 x* {6 R# Q8 j" ~
  SmartUpdateOption        智能更新选项" E& V: A# R. Q+ x% N  {
                             Within Modeling   在建模
, _; J3 ^2 g# z4 c6 K5 c                             After Modeling    建模后
0 v$ o$ B2 `5 G, N& S1 x  C                             After Parent Body 实体父后
" b; N( O* j4 {9 L                             Mixed             混合( K6 @' ^( N" `1 Z3 G

! j+ d7 @4 n+ ?: F; `  SnapPointTypesEnabled    设置捕捉点类型的可见性
' ?+ I& a& f( }5 A5 I6 D. S) m  SnapPointTypesOnDefault  设置捕捉点类型相关的内容被启用, R" d: \5 e" Y; E; E

# _* {' H. ?( a, y& p6 n% Y4 ^4 L常规
  {/ t+ Y; u0 U0 @  BlockID  控件id# h8 p2 d4 K1 G, {4 Q- m" f
  Enable   是否可选/禁用控件
. j7 H5 Y9 t- l# q: @) R" T  Group    组
  F$ u# D& e! H3 y- ~1 X' V7 @  Show     是否可见# n) F/ [" e  g( B

$ h2 B4 q: z8 j' m6 M  |; l其它 # x6 K0 _7 P1 t, T2 e
  附着
) c) i: }, B" V: V    Bottom  底! H0 `; \8 s( C: E& D
    Left    左/ B1 X# b8 `& }3 D' D) I8 r- k7 i) A
    Right   右
3 q; j! k! H( M4 z' i    Top     顶
% p1 |2 C: s+ x: K- ?9 G% r  K0 |6 H- X: ~- X
特定于块
, r3 d4 P; e* a' L5 g( c1 L$ k  AutomaticProgression     选择后焦点是否自动跳到下一个控件
  d  K7 z" J. u2 `5 Z  BalloonTooltipImage      动态提示图片(鼠标移动到控件是显示图片)
( ]2 d( a$ Z+ E5 k8 w% k8 U, J  BalloonTooltipLayout     动态提示布局
6 |( m% ^2 j# D8 p. ]3 m  BalloonTooltipText       动态提示文本内容, E3 A! P- O' h
  Bitmap                   指定图片3 Q% L6 r. A7 T9 [9 U
  BlendVirtualCurveOverlay 是否显示虚拟交线* S- j9 f) x* I7 r, G8 a5 a
  CreateInterpartLink      是否显示部件间连接图标在选择条上
" x0 M8 C, d* V  Cue                      提示
/ ~7 r. W7 K5 e0 Q% D
% l1 e9 d, p: x: N; I  InterpartSelection       部件间选择设置( \; R  r0 X. ], d- H( i! h
                             Simple                                           简单
! l9 N8 j1 x+ `                             Non-associative Interpart Copy Only              只复制部件间非关联! O) _. d$ Z9 n- s
                             Associative and Non-associative Interpart Copy   复制部件间关联和非关联
# x( t' f, l; P$ A7 P& E. j                             Associative Interpart Copy                       复制部件间关联. k2 g$ S5 h' O7 z* g
0 |1 t. h; l/ v9 i; J
  LabelString              标签标题) E8 l% f; G6 j/ t- _! s" {! Y1 Z
  MaximumScops             设置选择范围
7 v& |1 `/ f$ e- W                             Entire Assembly                 所有组件/装配
+ v9 |; O% N, t6 n4 {0 m1 ^                             Within Work Part Only           只是工作部件
" _5 H. W1 l$ _" s1 V4 ]0 J( j                             Within Work Part and Components 工作部件和组件/装配)# z9 c7 {7 c0 ]" f* W9 q8 H
) k3 z5 n' I9 N5 k5 e/ A5 _; c
  SelectMode                设置单选/多选
9 ^" o6 n7 x7 q1 A                             Single   单选# Y- a5 G9 x6 D
                             Multiple 多选' E( ?5 {/ q1 M: R3 @
) z; t- q( J6 W: ]0 W% k7 K% y. U
  StepStatus               设置确定和应用按钮什么时候高亮 (Required 必需的时候)(Optional 可选的时候)(Satisfied 满意/满足的时候)
+ Q0 o: y3 m0 P3 Q* n  Tooltip                  动态提示文本标题(Bitmap指定图片时,鼠标移动到图片时提示文字)
! `! e; e$ J2 p9 i5 P- m6 J2 s1 d8 P( `% G' L2 ?( j
————————————————————————————————————————————
' {1 g! C* J1 T$ I9 Q  }————————————————————————————————————————————0 a" p/ @! R5 I& ]7 v
咧子:获得selection0控件选择的对象
7 y9 t, z* |! ~* t! \0 [. O5 k+ t      UF_initialize();
2 b0 [2 y" y; {- }' x+ o      std::vector<TaggedObject*>objects=this->selection0->GetProperties()->GetTaggedObjectVector("SelectedObjects");
, M+ y$ e) L, T      for ( int i=0;i<objects.size();i++) // size 列表长度,这里指的是 对象个数
5 h& G1 v  J, h% ~  N! E6 Z8 Z      {      
7 P( d" S0 H' z9 r% F  w         UF_OBJ_set_color(objects[i]->Tag(),1);
+ N% s5 q; z5 N" i      }% [: J5 [9 P/ h; s1 o2 J
      UF_terminate();2 L- N5 V8 o2 n9 S- a
2 j& X7 L: W) r
————————————————————————————————————————————+ ]- W& R% B3 |  l9 n1 c+ e
咧子:对象加入到selection0选择控件的对象列表
5 _/ h# x9 ?0 v
$ u% p% t. q+ [9 o- [; \      tag_t obj=NULL_TAG;
1 R& E9 s7 a5 C3 e; U! _/ j      double point[3]={0,0,10};
" k7 _* S8 B2 ~; o8 _, w' ?      double XYZ[3]={60,50,80};
( x$ ?2 n  {1 |. q% l2 g$ R, ^      char C[132]="";
# `- G: H+ L6 _) E8 ?4 j; v' O& x      char K[132]="";
& S- E9 s! `8 j8 t      char G[132]="";7 I* t2 [# }3 w0 y; e6 q
      sprintf(C, "%f",XYZ[0]);
. `! G1 U9 [6 `; \) h; x      sprintf(K, "%f",XYZ[1]);
3 ~6 A# X  Z8 A+ D$ Z, N      sprintf(G, "%f",XYZ[2]); + w& I9 A8 D* v: y2 E3 Y* `' ]
      char * edge_len[3]={C,K,G};% N4 ^/ R: ~7 g. N+ U
      UF_MODL_create_block1(UF_NULLSIGN,point,edge_len,&obj); //创建方
/ }# S! P" J9 S      UF_MODL_ask_feat_body (obj,&obj); //从特征中取出实体
& z# S# Z: u0 T/ Y' u: |" v/ x6 Z8 M5 E0 K) ~# m8 g4 {3 J- J
      Body *body1(dynamic_cast<Body *>(NXObjectManager::Get(obj))); //tag转换给nxopen
' @' D3 u# `! B4 E- V      std::vector<TaggedObject*>objects;& g$ F' L' F& G; P
      objects.push_back(body1); //对象加入到selection0选择控件的对象列表
( o6 c7 A. A; {5 v* |% s* S" b      selection0->GetProperties()->SetTaggedObjectVector("SelectedObjects",objects);9 o# y1 o3 U! A
————————————————————————————————————————————$ h# o- T% j: ]+ }6 c( P# u

, u. n! D! i  ^2 w" V//清除对象, B3 j) B5 ?6 d8 ?5 S
std::vector<TaggedObject*>objects;( d- X' Q$ P3 U& P- z- r4 R$ W
objects.empty();
6 Z8 n+ S8 ^: Q) j4 \selection0->GetProperties()->SetTaggedObjectVector("SelectedObjects",objects);
: v$ r* {3 c9 U: }( c8 w0 s" B) J- c0 |- D$ }# s. \& t5 X# \: o
————————————————————————————————————————————
0 ^4 d; l7 B5 Z% N7 U$ A$ @咧子:只选择面
$ i0 Y% t+ d8 L5 B2 u/ o        initialize_cb() 初始化里加代码 或 dialogShown_cb()显示对话框里加代码 可进行对象选择过滤
& P& h# y5 W2 D6 |4 `# ^4 N
. T, R% c1 o: _" B4 @        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式
+ L( z1 z8 L+ b0 {; R) S  y5 L: K6 W# z4 l- ^8 B
        //对象选择过滤 只能选表面
6 f+ \+ o/ G4 r7 a- D2 s7 @  v        selection0->GetProperties()->SetString("LabelString","选择表面");' ]7 S. b+ a! i7 K; l
        std::vector< NXOpen::Selection::MaskTriple > maskTriple;
( P. H# u& O3 e3 {        Selection::MaskTriple mask1(UF_face_type,0,0);7 k+ L: \  o9 V6 O
        maskTriple.push_back(mask1);0 t9 _$ J7 C! g$ I$ P. @
        selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);
4 B, b# Y+ R) j- _" e. f8 }- T+ p/ V+ l/ u/ v2 a8 L& n
4 n5 O5 q- t5 j: C, L
咧子:只选择面 【UG本身过滤器跟着变】
2 v; H# M+ L' C( l/ }" q        initialize_cb() 初始化里加代码 或 dialogShown_cb()显示对话框里加代码 可进行对象选择过滤    ' b. Q. f! |0 u0 T( I* q0 l
3 r( p& P- Q$ @3 `
        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式$ T- R6 O' \. P' W8 [! p1 ]+ p- p" \3 U! U
0 ?7 ]: |# i. C$ m& F$ C
        std::vector< NXOpen::Selection::MaskTriple > maskTriple;/ ~9 d! R* p  w* a3 _9 ~8 F9 v
        Selection::MaskTriple mask1(UF_face_type,0,0);7 P  a5 T3 M1 A, K7 o& c$ v4 H
        maskTriple.push_back(mask1);# _$ g) f. s! e; h: X; U  ?
        NXOpen::BlockStyler:ropertyList *selComponentProps = selection0->GetProperties();, ^4 J- B3 @5 \8 o& ~4 G
        selComponentProps->SetSelectionFilter("SelectionFilter",Selection::SelectionActionClearAndEnableSpecific,maskTriple);( O( t' a$ s  p, D* j/ ^6 E
        delete selComponentProps;& E- T6 e$ J) a; ~  r, o( i$ q
        selComponentProps = NULL;  S! ~, Q# M* U9 t; ?" v! c
9 O( n  W! `& t  O( t& f/ a
上海点团信息科技有限公司,承接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 | 显示全部楼层
列子4 O/ y& [$ c8 |, O8 G7 N

$ C0 w% c0 R% t$ e————————————————————————————————————————————
2 l7 S, j) ~% d" Y————————————————————————————————————————————
; I5 ?1 r5 q8 X3 J- m* m咧子:只选择 实体边缘 直线和圆弧
# m( l2 ^6 Q  H) f* s* G) x, N8 {
! x2 j0 w/ h( g* F) @1 s  initialize_cb() 初始化里加代码 可进行对象选择过滤
7 e8 u3 ^5 T2 b9 i! _" m7 G5 P# K; I- a, u8 J1 R" e% O- _" s) c# a+ g! f
        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式+ b& f5 b0 G+ P2 v; S- p
                        selection0->GetProperties()->SetString("LabelString","选择边缘");//只选择 实体边缘 直线和圆弧
3 v! B) f6 O/ e+ L                        std::vector< NXOpen::Selection::MaskTriple > maskTriple;/ i* l5 i; P6 V" Z7 @
                        Selection::MaskTriple mask1(UF_solid_type,UF_solid_edge_subtype,2);6 T) K  C" I* Y0 t
                        Selection::MaskTriple mask2(UF_solid_type,UF_solid_edge_subtype,3);& b8 I" h3 F& {, [2 p( k( t
                        maskTriple.push_back(mask1);
  N; D8 u9 v( K# S/ p. B                        maskTriple.push_back(mask2);& c, Z' ~( }* J
                        selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);
0 x8 V( I! x% S5 b: S2 \
+ V+ Q% C  S' q) Q//过滤无效的边缘
2 q9 m" @0 {9 d! y5 mint ML_NX001::filter_cb(NXOpen::BlockStyler::UIBlock* block, NXOpen::TaggedObject* selectObject)5 B1 S* F7 n2 y+ C
{        0 a7 z. j1 |' p
    tag_t obj=NULL_TAG;2 Z7 n7 z! Y7 |1 Y: s- j
    UF_MODL_ask_edge_body(selectObject->Tag(),&obj);# ?5 W8 o2 z9 F; N) V3 i  ]
    if (obj==NULL_TAG) return(UF_UI_SEL_REJECT); //不加入到对象预览列表7 L( T5 i" S4 q1 s
    return(UF_UI_SEL_ACCEPT);                    //加入到对象预览列表8 b" @5 r7 P' w" B6 e9 W! _
}
3 M/ i1 C' B$ I; I! o5 j& ?————————————————————————————————————————————
/ G; l( G: f; f————————————————————————————————————————————
# {& C2 C2 Y/ p9 O6 J( {咧子:通过枚举控件选项来 时实  分别过滤 边缘、表面、实体
- Q; I* x1 k" k: `/ {4 e0 H
6 V5 a- q) c9 |5 G3 A   int enumValue = this->enum01->GetProperties()->GetEnum("Value");$ V( H) s% p# G1 A- e  i1 u1 o
                    if (enumValue==0) ( L0 I/ ~5 m5 q/ S
                    {1 @8 X5 Y- n( \9 R
                            selection0->GetProperties()->SetString("LabelString","选择边缘");
+ _4 V, Y- V+ {6 e2 V3 W0 j                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;
5 I5 V- v3 R0 X5 v                            Selection::MaskTriple mask1(UF_solid_type,UF_solid_edge_subtype,2);
2 z- X( i; P4 M. T: v8 Y5 h                            Selection::MaskTriple mask2(UF_solid_type,UF_solid_edge_subtype,3);
- H( q1 ~- Q$ w/ W3 H1 x. o! r                            maskTriple.push_back(mask1);, q% t" c2 x+ m3 O. L: Y
                            maskTriple.push_back(mask2);0 E: T$ y4 Q& a7 q0 O
                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);
5 O8 c& s; _% L$ a                    }4 v) B* K. u; b8 U1 f) N
                    if (enumValue==1)
& o1 Q" }. q3 n4 b# R+ Y/ t                    {
  a/ S: F2 u6 _0 K- C1 U1 z                            selection0->GetProperties()->SetString("LabelString","选择表面");
& ~5 s+ I6 I+ h$ F                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;3 b- m' Y5 _6 {! A7 l
                            Selection::MaskTriple mask1(UF_face_type,0,0);
7 `6 ^+ `0 L4 @+ Q                            maskTriple.push_back(mask1);
5 a. Y1 i1 _6 \/ H                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);
) k& O  I3 q( D: m* F3 w. `4 f                    }4 x4 q. @7 r8 M
                    if (enumValue==2)
. Q: d& X$ u, U- x                    { . i+ J* F: H6 h- {( Q8 O
                            selection0->GetProperties()->SetString("LabelString","选择实体");% b+ y5 ~* Z% V: Q( z
                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;) p- _# `3 V. E! l8 Y$ [$ c7 v
                            Selection::MaskTriple mask1(UF_solid_type,0,0);& U0 E, x; B* d$ W
                            maskTriple.push_back(mask1);
4 @" K" {: w4 y2 |' [4 G: r                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);6 u) q4 i' {% b4 G
                    }
/ W( O" K9 v# ]" G6 p7 f
1 U1 R8 J( a( L  R
4 H5 E& X# D$ B//------------------------------------------------------------------------------
8 L1 c1 d2 E  T0 I- ^7 a$ L0 v//Callback Name: filter_cb 过滤不符合对象
/ Y* [# z6 J& _: {$ a1 X//------------------------------------------------------------------------------
3 f) S5 c6 z% f3 {4 `int ML_NX001::filter_cb(NXOpen::BlockStyler::UIBlock* block, NXOpen::TaggedObject* selectObject)
: E9 S/ u# N. k, I6 ^& b6 v+ n{, n: I" o1 z! E3 u
        
2 |! u% `& I6 @* ?6 X8 S! h        int enumValue = this->enum01->GetProperties()->GetEnum("Value");3 c- T9 [: h% \8 b
        if (enumValue ==0)0 K, m( n( Y: K, y7 q' V/ y* x0 z
        {0 G. X/ ^& p% q% \% `6 j
                 tag_t obj=NULL_TAG;
3 ^2 H7 \7 n  l! }: I3 S( ^                 int err=UF_MODL_ask_edge_body(selectObject->Tag(),&obj);. b- L0 h, Y* x5 b. q  A9 n
                 if (err!=0 && obj==NULL_TAG)
0 ^* N' `$ J! y* I( w% g/ t+ p             return(UF_UI_SEL_REJECT); //不加入到对象预览列表
! ?* ?! N9 s2 G8 e        }
) k8 |* a, l! D9 ~" Z        else if (enumValue ==1)2 q% S6 m  k. j
        {9 q3 G: K+ A8 C9 A: Y" z
                 int type=-1;
9 b4 z$ n4 ]2 @9 h: A8 j                 int err=UF_MODL_ask_face_type(selectObject->Tag(),&type);8 _+ V$ |9 b( {$ t% t0 r" ^
                 if (err!=0 || type==-1)
0 s6 B6 I( l: `6 ^             return(UF_UI_SEL_REJECT); //不加入到对象预览列表
2 @4 f1 V4 K7 p- G6 I        }
3 ]3 l/ |* t" [# Y& H+ m) H        else if (enumValue ==2), R$ Y5 g3 Y' c$ G# y. Q5 b
        {6 _' N0 [9 H* E' i' R6 C
                 int type=-1;
" S/ c) t! q/ L6 ^4 b; w9 T" D                 int err=UF_MODL_ask_body_type(selectObject->Tag(),&type);8 g" G6 p7 }# o8 f+ o7 r% {
                 if (err!=0 || type==-1)
; t7 K9 f- r! N. g             return(UF_UI_SEL_REJECT); //不加入到对象预览列表8 u5 O6 n" G, |+ x
        }) R; t' C- g% X0 x0 |
: Z7 h/ D. P0 f; C$ q
        return(UF_UI_SEL_ACCEPT); //加入到对象预览列表1 R0 _- v3 Z/ f* k. `$ x4 y; L
}
' e" f' ?5 @: Y3 @: R! p4 V
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了