PLM之家PLMHome-工业软件与AI结合践行者

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

[复制链接]

2016-12-12 12:24:54 6270 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) l7 [5 a$ }9 Y9 r2 x+ z8 c0 G

. ]* u+ X0 R8 |1 ?* _2 e8 ^捕捉
. T5 m) b- e4 F  H  PointOverlay             是否显示捕捉点
  l  |+ q% K0 Q8 J; c3 V  SmartUpdateOption        智能更新选项* c( Y# t! T8 U/ V3 k9 R. Y
                             Within Modeling   在建模
0 j. u2 R! a$ s; s; T) ?                             After Modeling    建模后
/ F7 y, Q' t2 k                             After Parent Body 实体父后4 g, [% L2 o7 |& m; u" I6 r% E% ?* S( W
                             Mixed             混合
' l% O- K+ O- ]0 U& P
- Q5 O* n' x3 r4 Z! Y' C  SnapPointTypesEnabled    设置捕捉点类型的可见性2 c& \+ {$ e4 n# p  L
  SnapPointTypesOnDefault  设置捕捉点类型相关的内容被启用
8 I! S# t; {* |6 {3 o
. U2 b, j1 o/ ^4 q常规0 x: J3 o5 T  ^+ M& ]# S' m
  BlockID  控件id
; v/ r, I% v+ b0 B* h1 O& W  Enable   是否可选/禁用控件2 z$ H( x, q9 r, }. a3 l& r
  Group    组
3 v9 M: e5 h: C  Show     是否可见
2 N) j, P$ p; k" I  Q5 O+ R" y) l# i8 y9 i
其它 0 ?2 H5 k$ [3 v% y/ r1 t" n
  附着
! u# d0 ?% r( [, Z5 ?& H, i2 l    Bottom  底
* j$ e$ P; Y( z' P: s- i. B    Left    左
( T4 |4 l/ W+ a$ ?1 J5 Y& {    Right   右1 y: i' ~: }, r" X8 m; L
    Top     顶
# h, E& Z9 G6 U. y+ T; D' o7 d& k) `5 k( X
特定于块
0 O, C" A! D  j! i% ~  AutomaticProgression     选择后焦点是否自动跳到下一个控件* S1 \6 f/ ?- }* U/ b
  BalloonTooltipImage      动态提示图片(鼠标移动到控件是显示图片)2 {6 l0 G+ v. O9 I9 t
  BalloonTooltipLayout     动态提示布局% G/ u- y$ Q0 M6 E2 K
  BalloonTooltipText       动态提示文本内容
" d: v& Q* \& _8 W  Bitmap                   指定图片! W$ b1 W) ~& p  ^
  BlendVirtualCurveOverlay 是否显示虚拟交线
6 Z4 @. \$ @; t. C6 T0 e' W, U  CreateInterpartLink      是否显示部件间连接图标在选择条上
7 P  g: e5 _3 m' ^5 a1 z  Cue                      提示
& ^7 {8 B- q2 m* W% y. a0 H) f" m- n% J" h6 ~( G8 n: y- N7 Y5 m
  InterpartSelection       部件间选择设置
4 N. }' V& `& r8 {5 ?; K                             Simple                                           简单; }5 J1 }3 x, s
                             Non-associative Interpart Copy Only              只复制部件间非关联( p. m# v9 u$ e
                             Associative and Non-associative Interpart Copy   复制部件间关联和非关联; o0 t5 ]; ^* g/ T" Z- f
                             Associative Interpart Copy                       复制部件间关联
2 |) [* y. J1 z2 D  m! P# b8 h" n  H: U& p: N+ E; `7 C& g
  LabelString              标签标题4 f* Y. D7 ~' y) l  v
  MaximumScops             设置选择范围1 N9 Q6 l$ {# M  ~, F
                             Entire Assembly                 所有组件/装配( w3 |) F1 |5 X9 X+ b9 ^
                             Within Work Part Only           只是工作部件: b, ?9 g, T- E7 v: x9 f' B
                             Within Work Part and Components 工作部件和组件/装配)
6 N8 J; V  h' I5 N
; i% Q0 R  ~3 f+ r9 p. Q  SelectMode                设置单选/多选   u2 ~4 W0 h$ O: Q
                             Single   单选
. b/ S; t8 L1 v3 N5 a- J2 X2 j  t                             Multiple 多选
/ Q: m+ r8 u8 ?5 T# j( d6 W! }% F# {- a9 q: K/ O. q! n! S  q
  StepStatus               设置确定和应用按钮什么时候高亮 (Required 必需的时候)(Optional 可选的时候)(Satisfied 满意/满足的时候), `- H0 G& O, m" L8 i
  Tooltip                  动态提示文本标题(Bitmap指定图片时,鼠标移动到图片时提示文字). r& C) T2 `/ H/ D% ]

/ h) F- q. k6 G; @1 A4 L  p————————————————————————————————————————————4 `' |: w% r: ?$ [* p
————————————————————————————————————————————: k' q. u% ~; [0 o6 H% N2 D6 |+ Y
咧子:获得selection0控件选择的对象, Z; U& {( K1 }: @0 m8 `0 h9 u
      UF_initialize();
; j$ N2 u5 s+ o3 L      std::vector<TaggedObject*>objects=this->selection0->GetProperties()->GetTaggedObjectVector("SelectedObjects");' m1 e, c- k$ q" Q7 ]6 K
      for ( int i=0;i<objects.size();i++) // size 列表长度,这里指的是 对象个数
" O* g% I. V/ y+ T) G# p4 n      {      
! T  A% p0 l/ q" E         UF_OBJ_set_color(objects[i]->Tag(),1);
  m. O/ k+ U, g, T: B: V* Y+ V      }; U- Y3 E; [& N: H: i8 e" h
      UF_terminate();5 S& `( i# B: }: g0 h. D
  ?  {3 c3 A. ^# H
————————————————————————————————————————————) q" J. s7 F/ V5 M
咧子:对象加入到selection0选择控件的对象列表
( L; [+ k1 L/ @, X* ]1 U6 b5 x/ n
* J: c" c+ m5 \5 E3 e& Q3 z5 U      tag_t obj=NULL_TAG;
) L' `- e* C  g) K4 L, ?. I/ N      double point[3]={0,0,10};$ J' Y5 h8 P0 i8 l! V
      double XYZ[3]={60,50,80};
+ l, N- |4 }9 e/ _) c8 O, X      char C[132]="";% g. `. s4 z7 @8 |& p
      char K[132]="";) f0 @" f# E; Y/ ?& q
      char G[132]="";& _& L+ i( n2 ^% Q/ S* f2 M1 G
      sprintf(C, "%f",XYZ[0]);. ]. R/ S5 X0 \& x+ O
      sprintf(K, "%f",XYZ[1]); # R8 q* y6 K: w) l- \" J
      sprintf(G, "%f",XYZ[2]); 4 n0 B6 E% d$ l3 d: w
      char * edge_len[3]={C,K,G};/ o8 P& ], ^6 Y' g3 F- w
      UF_MODL_create_block1(UF_NULLSIGN,point,edge_len,&obj); //创建方
0 ]4 x- w7 c* j7 S      UF_MODL_ask_feat_body (obj,&obj); //从特征中取出实体
& i! b6 q5 C, q/ N1 X8 }7 I8 z
( l5 k6 q3 B4 O; u      Body *body1(dynamic_cast<Body *>(NXObjectManager::Get(obj))); //tag转换给nxopen
. b5 @1 t& r& {7 o# k, N: Q      std::vector<TaggedObject*>objects;
$ R7 N$ @) r8 k  F) ^      objects.push_back(body1); //对象加入到selection0选择控件的对象列表
& s6 F/ s7 I6 R$ j      selection0->GetProperties()->SetTaggedObjectVector("SelectedObjects",objects);
  n( j% J9 ?8 D' v————————————————————————————————————————————
6 E: p" W4 o7 c/ p2 L9 p) d! J% y7 P- O. B8 E5 K
//清除对象
7 Y: e% U: r/ f: h( f. [1 v( t7 ]std::vector<TaggedObject*>objects;, S) f8 b! ^& a* d9 {& ^$ m
objects.empty();
: o5 l; B2 J' e: v# o. mselection0->GetProperties()->SetTaggedObjectVector("SelectedObjects",objects);3 r# m) |  W4 S" z
$ Q7 j8 a2 S& I  ^4 Z, b
————————————————————————————————————————————
3 f- e3 @" Y- R% g8 q6 V( p& H8 O咧子:只选择面
6 e( \6 a; G) b: I        initialize_cb() 初始化里加代码 或 dialogShown_cb()显示对话框里加代码 可进行对象选择过滤5 m; ^+ J1 c4 o# p

4 f5 L/ Z# V  R& G        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式
: }9 H0 ?& A) B
+ B: [9 m# k2 G/ L3 x0 ~0 P        //对象选择过滤 只能选表面9 g% Y8 w8 k* c& A0 Q
        selection0->GetProperties()->SetString("LabelString","选择表面");
! N% D0 Q, o$ R4 F+ W        std::vector< NXOpen::Selection::MaskTriple > maskTriple;/ |( A# F( ^1 W' j
        Selection::MaskTriple mask1(UF_face_type,0,0);; d; J9 r, m  _; o' ^' x* z6 p/ P
        maskTriple.push_back(mask1);- ]% {/ K. G6 V' O5 c8 U# Q
        selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);
4 f6 _5 r) p/ k% `9 x
! M9 w' D8 q1 |8 r( @0 }3 \# k5 k  h% [4 u: M% g8 U/ |; V: r. ?
咧子:只选择面 【UG本身过滤器跟着变】
7 d7 ~- \# i# o+ E: c: d1 `        initialize_cb() 初始化里加代码 或 dialogShown_cb()显示对话框里加代码 可进行对象选择过滤   
7 Y+ ?- U9 H( A/ B
* e$ E6 C) q# `+ S) n6 ^. d% ]( p        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式* J, P6 S: c& M0 s6 h9 w' |9 ?
1 s" }) @7 h6 b
        std::vector< NXOpen::Selection::MaskTriple > maskTriple;' r' T: F3 f( ]$ G0 B  X9 b
        Selection::MaskTriple mask1(UF_face_type,0,0);* ^8 D& e- o' f4 p2 {- Z# b7 E
        maskTriple.push_back(mask1);4 Y! P, @( k5 z: `1 X; N3 W2 j# w7 G
        NXOpen::BlockStyler:ropertyList *selComponentProps = selection0->GetProperties();6 r/ K1 i8 z$ H) y, y: x7 R$ O
        selComponentProps->SetSelectionFilter("SelectionFilter",Selection::SelectionActionClearAndEnableSpecific,maskTriple);
1 a1 }0 p. O+ J' b/ I        delete selComponentProps;
$ J! ]2 k2 A. O1 h2 w8 p# b3 H        selComponentProps = NULL;) c% C  T5 ]; ~0 J
, f4 S! r; ~1 s) W( o+ k
上海点团信息科技有限公司,承接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

列子
+ b  p5 B- X1 o( l" k# E$ r3 s! Y4 h
————————————————————————————————————————————# R6 i: L; F  a0 b7 V
————————————————————————————————————————————# a) Y4 M% t! _/ [& }
咧子:只选择 实体边缘 直线和圆弧
4 H. D8 d' N$ x% m1 @, C/ I' b/ [0 L2 S" M5 Y" X: C6 {% E
  initialize_cb() 初始化里加代码 可进行对象选择过滤
4 h2 W- R. z2 h; o
2 \1 G" r) e. j  G; E6 {/ D, k" v+ p0 O& v        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式
# g6 P- i% F, U( _  f$ C8 G) R                        selection0->GetProperties()->SetString("LabelString","选择边缘");//只选择 实体边缘 直线和圆弧
7 f! Z9 e! ]# X& {1 ?5 e  z                        std::vector< NXOpen::Selection::MaskTriple > maskTriple;( p$ d' K$ G/ w+ z$ U
                        Selection::MaskTriple mask1(UF_solid_type,UF_solid_edge_subtype,2);7 y6 z& \2 E+ p" ?$ H! K
                        Selection::MaskTriple mask2(UF_solid_type,UF_solid_edge_subtype,3);' L" M9 m( P) z# S2 a
                        maskTriple.push_back(mask1);
3 c6 H8 Q$ a% U5 |3 x                        maskTriple.push_back(mask2);
" `  z: W7 ]9 n  g  [                        selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);
0 N# ?* p% [& w' d. T: E
' I9 j% b- X% Z//过滤无效的边缘
. ~" Q% i+ r5 O* o6 h- S3 c" h" |$ r% nint ML_NX001::filter_cb(NXOpen::BlockStyler::UIBlock* block, NXOpen::TaggedObject* selectObject)
; C5 B7 W+ @; R{        * G! X  x$ h1 C, J' [; \3 S: l3 Y
    tag_t obj=NULL_TAG;8 Z" k5 V8 G* L' X( L' N& Z) G
    UF_MODL_ask_edge_body(selectObject->Tag(),&obj);
; I! `6 I8 `: _( C, y4 _9 k7 J9 s5 |    if (obj==NULL_TAG) return(UF_UI_SEL_REJECT); //不加入到对象预览列表
; p* z# c# k) a6 ~* m7 |* q9 `    return(UF_UI_SEL_ACCEPT);                    //加入到对象预览列表0 T0 P! f' `! c. I/ I; S0 q
}% A1 ]: L# ]0 I, H! @# @' [
————————————————————————————————————————————# z$ ~3 g3 p6 p! R) s: I$ x9 p
————————————————————————————————————————————, a! {+ ]( Y3 u) [# r7 Z! `
咧子:通过枚举控件选项来 时实  分别过滤 边缘、表面、实体
" e/ Y9 e& ?1 h2 B' K# ?0 v
. I5 h: w* Z5 Q& @   int enumValue = this->enum01->GetProperties()->GetEnum("Value");
( T1 M4 z4 m4 W$ \                    if (enumValue==0)
) L5 u7 J2 x) p/ j; T, b, C! j7 I                    {& q& {9 k1 h. U9 |# g& E: G) R
                            selection0->GetProperties()->SetString("LabelString","选择边缘");) p# q% M/ r1 `7 o+ [' ^" f
                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;1 ]- J: M2 E; y  m% V* ~
                            Selection::MaskTriple mask1(UF_solid_type,UF_solid_edge_subtype,2);
( m7 N. m6 d4 ~' h; E                            Selection::MaskTriple mask2(UF_solid_type,UF_solid_edge_subtype,3);
  n  J+ V  ?6 @* H4 O! K& T( D6 g5 M9 v                            maskTriple.push_back(mask1);
- N$ N  s! E$ v( i: F                            maskTriple.push_back(mask2);
* w* _5 u; ?+ m3 Y* |* H; }                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);
3 W4 a9 O# A. I6 Y% f4 N! {0 I                    }* H1 I# e- ?$ r. M" H9 o; d
                    if (enumValue==1) 9 u4 z  P, U. c/ \
                    {* m, n0 o$ K6 \2 z7 S& B
                            selection0->GetProperties()->SetString("LabelString","选择表面");
7 D0 A" h  b) W5 `                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;: x; z3 _- O# }% ?% l3 @- h
                            Selection::MaskTriple mask1(UF_face_type,0,0);
$ d, `9 M/ h/ r1 v4 x0 a                            maskTriple.push_back(mask1);' I# ]1 b0 u9 b* R1 u5 `
                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);
% v- s# j3 o/ L                    }" Y6 }, D* z+ ]- Y
                    if (enumValue==2) $ E4 L0 w- J8 u/ q! e) w
                    { : U  t3 ~( K, |* R
                            selection0->GetProperties()->SetString("LabelString","选择实体");
5 C3 f) {# ]1 A3 w% E: ^4 C! i                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;
6 M3 U  z' x  S+ B& B7 I) L7 A                            Selection::MaskTriple mask1(UF_solid_type,0,0);  Z* H: w+ m7 @- k) H% l
                            maskTriple.push_back(mask1);, i1 W) m- z# E" p0 T
                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);9 P( w3 [7 M( g5 I9 v
                    }
1 I% v( D0 ], q2 i7 J  R7 r5 V* d  k# s  E5 h. u/ X# K2 c# b

' x2 w9 j9 W2 c. }7 ]' F6 k& W//------------------------------------------------------------------------------
9 U) H; |' H0 L9 T. t  K//Callback Name: filter_cb 过滤不符合对象% {5 E8 |9 Z: q  G0 O* w6 s8 h
//------------------------------------------------------------------------------5 h7 E5 l- @6 M. d
int ML_NX001::filter_cb(NXOpen::BlockStyler::UIBlock* block, NXOpen::TaggedObject* selectObject)
# r' x! n( U1 `4 o, `/ V. P) ^{
/ x0 l5 ^! n; q% @        # y1 z6 _" [( J& ]8 s
        int enumValue = this->enum01->GetProperties()->GetEnum("Value");( O6 {. c8 t9 X( L* c7 [
        if (enumValue ==0)
/ u: C4 T7 X+ }9 ^        {9 Y+ _8 p2 ?! H* l7 D
                 tag_t obj=NULL_TAG;
) h7 W7 u: n5 f5 H% A                 int err=UF_MODL_ask_edge_body(selectObject->Tag(),&obj);- O8 E4 P7 ?. k& q  z) A
                 if (err!=0 && obj==NULL_TAG)
6 W+ O+ F* D9 e9 q0 ^4 S+ ~7 V             return(UF_UI_SEL_REJECT); //不加入到对象预览列表
9 n0 P' d" P" R, n; y5 Z        }
( h3 V0 o# d4 |! _) y        else if (enumValue ==1)
9 D9 f7 u3 J/ S) I: H5 x3 N  r9 G! G1 c        {
' }( @8 W. u! h4 Y5 Z+ b( n                 int type=-1;, ~! E  Q6 N$ P( A% R6 B7 v
                 int err=UF_MODL_ask_face_type(selectObject->Tag(),&type);* t+ X7 q, D: y! b- g# N" p' U
                 if (err!=0 || type==-1)1 f2 g$ ?# w0 D5 e9 b3 Y
             return(UF_UI_SEL_REJECT); //不加入到对象预览列表2 h9 ]* l9 J! A# Q. }* f
        }+ K3 ^. u- F9 @
        else if (enumValue ==2)$ K2 |! M/ y- S; w5 [' R  ]
        {8 P8 ^8 y: Q- H  I
                 int type=-1;
$ u  y. A$ P& B  l: g3 @8 Y                 int err=UF_MODL_ask_body_type(selectObject->Tag(),&type);
6 [+ [! M3 g: @2 I( o! \' t. h                 if (err!=0 || type==-1)
& B4 h" p6 ~! h; l1 p) u+ a             return(UF_UI_SEL_REJECT); //不加入到对象预览列表
' R/ t7 Z1 Z+ N8 Z! T        }
0 h* K" F+ E* z6 H: b1 _
! d8 j4 S. A, I4 S        return(UF_UI_SEL_ACCEPT); //加入到对象预览列表' {" Q% y9 l8 a9 F+ H
}: h) N. N- N( ~- n
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了