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

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

[复制链接]

2016-12-12 12:24:54 6210 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、选择对象
# z% }& D& W. U; H. O# O" c' P/ `- H0 ~0 P- y0 k) ~- J& ]
捕捉* q' g3 }6 u3 H) d
  PointOverlay             是否显示捕捉点
* u9 }' j3 p1 Z! V; w  SmartUpdateOption        智能更新选项
$ d3 E( i6 ]; ~4 C0 p                             Within Modeling   在建模1 V' n8 u1 j% A9 {
                             After Modeling    建模后
' \; [: d2 k3 j/ ?: {$ [* ^- @9 @                             After Parent Body 实体父后( s- Q$ S+ k1 b8 [
                             Mixed             混合! Z0 _+ X) i8 J# \( T0 t) D* n

4 f9 t6 p: t% I$ Q2 `6 t  SnapPointTypesEnabled    设置捕捉点类型的可见性: o0 d& ]9 w+ Y( V) E! W6 Y3 e. \
  SnapPointTypesOnDefault  设置捕捉点类型相关的内容被启用1 c7 F8 F3 Q6 B5 ^

% B+ z, i8 N& K常规
0 Q  M# B9 b7 h9 R2 H/ ?  BlockID  控件id
; h- c3 S9 q4 o" f4 ]. s4 T  Enable   是否可选/禁用控件
1 a' t& }. K# u" [  Group    组
7 v5 p$ n) p" h' d; M  Show     是否可见: j, J3 F+ [' j* N3 L
$ c! w; T* O' w4 q
其它 0 a/ m  S! y  A# Y) d/ P0 A) @
  附着
* k1 U) f. Z0 }1 l9 _    Bottom  底$ N$ X* }% q$ y) A
    Left    左  W9 z9 u) K* r7 A& P3 C3 Z: V
    Right   右
! N3 @9 |6 _+ P5 L( ]7 I4 G# E    Top     顶2 E9 z. i$ A& _# o/ j8 q

# m# Y; {9 V! k9 c# N特定于块8 T8 ^$ I0 R1 r5 j7 N8 P) j
  AutomaticProgression     选择后焦点是否自动跳到下一个控件  r6 F' h, U* L$ ?
  BalloonTooltipImage      动态提示图片(鼠标移动到控件是显示图片)2 s# e6 X, R6 b5 X. b4 ^0 q
  BalloonTooltipLayout     动态提示布局
0 f9 D+ x) {: d9 [; G  BalloonTooltipText       动态提示文本内容
& r, B5 o$ v) N- _* u- E9 p  Bitmap                   指定图片
/ }% j- Q, }% N0 a& q  BlendVirtualCurveOverlay 是否显示虚拟交线
9 {9 U6 p0 ~! h7 q* y$ n  CreateInterpartLink      是否显示部件间连接图标在选择条上
* |9 _# u$ G9 x, U  Cue                      提示. ~8 X# ^$ W" |2 s+ [5 p
; F; M3 @  P' y( T: c$ |
  InterpartSelection       部件间选择设置
; D# e& y  \: k. i1 Y0 N0 |1 _                             Simple                                           简单6 M/ G  o( D' g7 E: Q# Y5 ]- w# @
                             Non-associative Interpart Copy Only              只复制部件间非关联
2 I7 P5 \" f9 u3 q; v0 _                             Associative and Non-associative Interpart Copy   复制部件间关联和非关联
' D; h* K$ l; l7 Z- r& k2 J                             Associative Interpart Copy                       复制部件间关联
( B2 \# {$ h- _4 r+ m( @$ h
$ M  V& \& e8 D/ g1 F+ s9 ~7 ]  LabelString              标签标题
3 c9 P" R' j) v  MaximumScops             设置选择范围8 w( {' a/ Q, Y0 X9 H! t
                             Entire Assembly                 所有组件/装配
0 c. e0 q' D5 A6 g* H, H: {                             Within Work Part Only           只是工作部件) M. K% Q3 v+ j& V: }% E- `$ o
                             Within Work Part and Components 工作部件和组件/装配)
" h& Y7 z: }$ s& e) _. X( I5 W5 h% C' o* e/ \
  SelectMode                设置单选/多选
8 O) O( b3 k' H                             Single   单选
# `# v/ T1 g) I% P* v                             Multiple 多选
7 a1 S0 [2 {" C5 B. K1 S% Z
3 k1 q  Y- s; L7 W2 Z  StepStatus               设置确定和应用按钮什么时候高亮 (Required 必需的时候)(Optional 可选的时候)(Satisfied 满意/满足的时候)* [; m2 N$ z' x' |# V+ t* S
  Tooltip                  动态提示文本标题(Bitmap指定图片时,鼠标移动到图片时提示文字)4 Z1 o' c! g4 w; e/ {! ?- F3 s
7 m, t7 O; v1 V7 y
————————————————————————————————————————————
: g# U8 H; j! ?/ f7 P# F————————————————————————————————————————————7 |# ?2 @* M4 I! F+ m  G% ^
咧子:获得selection0控件选择的对象
' `) t; e8 d3 y- n  c7 H; l) V, g4 k      UF_initialize();
2 M  a, }2 R- P0 G      std::vector<TaggedObject*>objects=this->selection0->GetProperties()->GetTaggedObjectVector("SelectedObjects");
1 r$ R8 O( u3 a, S- r& `      for ( int i=0;i<objects.size();i++) // size 列表长度,这里指的是 对象个数
  z2 f% [: h: p% i4 e1 M      {      
7 z5 ?: Y, R/ s" |( A# m9 V         UF_OBJ_set_color(objects[i]->Tag(),1);
4 l2 V2 g) I( j+ d) A      }
8 D: r' x# R2 J# k2 T4 }      UF_terminate();/ i2 o4 {4 }) P: r9 T6 M1 `
) k8 E% Y/ Z* B: `, j) s
————————————————————————————————————————————. M. w: a+ a1 K
咧子:对象加入到selection0选择控件的对象列表3 y6 d1 _7 S% q4 t. L7 J8 J, M& |

1 @! G7 V  x6 ?, n6 c      tag_t obj=NULL_TAG;% |1 _1 v# ]. t9 p0 Q) h
      double point[3]={0,0,10};
7 t4 w1 @0 E. s& ~      double XYZ[3]={60,50,80};
$ W1 L: a2 T8 K7 E. F1 \9 D/ {7 P      char C[132]="";+ j) d$ e7 h. ^! A
      char K[132]="";
6 t  [6 o  O6 J5 W) S      char G[132]="";" `) E) T1 D5 P$ S
      sprintf(C, "%f",XYZ[0]);
5 F. f* [0 X2 ^9 F) b3 c      sprintf(K, "%f",XYZ[1]); 7 ~- o- f' }6 M! I
      sprintf(G, "%f",XYZ[2]); 7 F; ]8 {9 q# ?9 \! E& U
      char * edge_len[3]={C,K,G};1 ]) m8 r1 k0 U( j( S4 ^
      UF_MODL_create_block1(UF_NULLSIGN,point,edge_len,&obj); //创建方
. ^" F" ]) D* ~, U7 c3 q( X2 e      UF_MODL_ask_feat_body (obj,&obj); //从特征中取出实体% N9 n& ~& D: k1 l0 G
5 p, z# ]' ^0 C) B+ p: I" l. G
      Body *body1(dynamic_cast<Body *>(NXObjectManager::Get(obj))); //tag转换给nxopen! h5 {) u( h/ P3 ^0 Q' Q# a% U7 M
      std::vector<TaggedObject*>objects;7 @7 b) ~4 s5 c/ B; k
      objects.push_back(body1); //对象加入到selection0选择控件的对象列表
  j0 H& q- Z" k* l1 A5 @# u1 R      selection0->GetProperties()->SetTaggedObjectVector("SelectedObjects",objects);
8 u1 s, X" t$ j5 L+ A+ B/ Q————————————————————————————————————————————6 U  K+ n( Y0 @1 ~
  Z  l1 I/ P6 h
//清除对象- `  x9 s6 J( S/ l' B! p
std::vector<TaggedObject*>objects;
7 u! w# ?$ Y; n" Bobjects.empty();
3 Y  G8 {3 k0 t6 d/ Sselection0->GetProperties()->SetTaggedObjectVector("SelectedObjects",objects);
2 l5 Z% k$ v( j9 }  x! d: `
) V" h9 |% T1 B6 B6 ]4 ^————————————————————————————————————————————/ b# s! e  q  \( t2 U, J
咧子:只选择面
: z$ T( T4 m3 z+ T* z8 ?        initialize_cb() 初始化里加代码 或 dialogShown_cb()显示对话框里加代码 可进行对象选择过滤3 q. ~3 g9 c9 s) _! H$ w; E

& R8 ]1 i/ c9 o        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式
6 Q2 X+ z5 B+ P: k
; u8 t( i2 }8 v$ H" f        //对象选择过滤 只能选表面
0 Q$ k$ Z$ J) S$ \, h& U0 G1 x- h        selection0->GetProperties()->SetString("LabelString","选择表面");* {* _( _6 m" c) P( L7 ^
        std::vector< NXOpen::Selection::MaskTriple > maskTriple;; J1 r3 Z5 J2 \3 y0 g0 j
        Selection::MaskTriple mask1(UF_face_type,0,0);
6 u0 x' a. U2 e' c+ n4 T+ E        maskTriple.push_back(mask1);
5 l$ I9 p0 \& r. v2 ~/ N        selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);
! u5 G' P# y# u* K5 \
& ^; r% m! d7 T: `- j+ i5 u# r4 u+ R+ q1 R' E! E6 m+ [  k* H
咧子:只选择面 【UG本身过滤器跟着变】
, J0 X  J: S( j9 F) \- G) |        initialize_cb() 初始化里加代码 或 dialogShown_cb()显示对话框里加代码 可进行对象选择过滤    2 i8 B$ V6 b* q

6 C! u3 n3 g5 \9 w$ B8 f7 _        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式
: I$ C# q2 D# G7 F4 A/ g; Y# ?/ H$ F' @$ P/ F
        std::vector< NXOpen::Selection::MaskTriple > maskTriple;0 o" z! d0 C- @9 U4 I1 x. L" q$ K
        Selection::MaskTriple mask1(UF_face_type,0,0);
1 }  e3 }+ g) |* {- H3 I! Q7 g        maskTriple.push_back(mask1);% K  X& O$ G& n* a; F
        NXOpen::BlockStyler:ropertyList *selComponentProps = selection0->GetProperties();
0 M; I7 h( z* w" W; m        selComponentProps->SetSelectionFilter("SelectionFilter",Selection::SelectionActionClearAndEnableSpecific,maskTriple);: P" w5 ~: Y3 k( L2 e7 F* V5 x
        delete selComponentProps;% E3 X6 U8 \5 q9 G
        selComponentProps = NULL;
) Q9 O" x- b" r* U$ }6 L3 s) e; H5 g0 j! s0 M
上海点团信息科技有限公司,承接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

列子% ^- N; ?3 N5 K+ p- T3 F

# v1 I+ r$ F0 z) r  m————————————————————————————————————————————1 J: z  I# Y% L' k
————————————————————————————————————————————
* W1 Q/ t9 u7 b9 D' x咧子:只选择 实体边缘 直线和圆弧/ [( e% r4 E& X% y8 a( D8 a: g+ H
" _. Z) H3 y1 |7 S) j% L
  initialize_cb() 初始化里加代码 可进行对象选择过滤' @+ F; T1 B# z
! B5 O4 J0 B, e% a
        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式1 Z) V: X$ L( ~) @. N* X- V
                        selection0->GetProperties()->SetString("LabelString","选择边缘");//只选择 实体边缘 直线和圆弧2 o: o( h3 |: v- x# A, O  a
                        std::vector< NXOpen::Selection::MaskTriple > maskTriple;' |$ h! q0 [# }: }! \
                        Selection::MaskTriple mask1(UF_solid_type,UF_solid_edge_subtype,2);
/ }; y/ s9 }: {- V7 r                        Selection::MaskTriple mask2(UF_solid_type,UF_solid_edge_subtype,3);
& @- B! h. y# D2 ~                        maskTriple.push_back(mask1);! P' d  P) B- `' V/ _3 M9 |4 X
                        maskTriple.push_back(mask2);
' a' A5 V! c6 k7 h: }9 y# e, P                        selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);
% k* w$ r% q; ?$ v: d9 u& g* j8 |5 K+ c5 I0 M
//过滤无效的边缘- _0 J( ^2 M+ }' l1 z* _3 w& k
int ML_NX001::filter_cb(NXOpen::BlockStyler::UIBlock* block, NXOpen::TaggedObject* selectObject)
) Y; S! [2 j' t/ L3 E- d{       
" B# n  m. i  m. k    tag_t obj=NULL_TAG;
" c6 k+ k) W: y4 z% D3 M6 a$ Q) p    UF_MODL_ask_edge_body(selectObject->Tag(),&obj);; @- o4 {  L- _/ s6 n6 i
    if (obj==NULL_TAG) return(UF_UI_SEL_REJECT); //不加入到对象预览列表
  k. s7 \( W9 ~2 l    return(UF_UI_SEL_ACCEPT);                    //加入到对象预览列表3 R5 S: ?* ^5 L+ t- O9 D3 O; }* N0 o
}
4 A" c5 }; D4 [, ~5 k6 c$ \8 a————————————————————————————————————————————2 L7 E6 |4 [/ z( B/ h
————————————————————————————————————————————
5 r' d5 w+ ~7 Y咧子:通过枚举控件选项来 时实  分别过滤 边缘、表面、实体
$ T9 L  U* M( I- J
) z1 a4 W3 l$ q% {4 t   int enumValue = this->enum01->GetProperties()->GetEnum("Value");
4 j8 Q6 a. ]2 B0 j* Y                    if (enumValue==0)
) I" p- f) ~2 ^. Z5 T4 ?# a( ?9 P                    {
/ J5 P1 E% S& D' `; A                            selection0->GetProperties()->SetString("LabelString","选择边缘");
% }1 F* d& Z  l( I7 x( b1 V                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;
7 Z! H! f0 ^4 x5 h! X                            Selection::MaskTriple mask1(UF_solid_type,UF_solid_edge_subtype,2);
/ ]: }( U9 i" ?  Z8 h+ Z. E# P                            Selection::MaskTriple mask2(UF_solid_type,UF_solid_edge_subtype,3);1 n. z; B4 m/ \* E6 s
                            maskTriple.push_back(mask1);
0 b: e2 K7 u8 @. _: B" R" y                            maskTriple.push_back(mask2);1 B* S2 v9 z* R3 r
                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);8 l( s* a# k3 j/ y
                    }
2 I* }: Z- [7 A                    if (enumValue==1) * Q2 R* V0 S( \# B
                    {
) i! s0 E6 G+ Q" o3 B$ s                            selection0->GetProperties()->SetString("LabelString","选择表面");
0 c: k( M5 [0 U3 X/ g3 [7 u) ^                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;* C8 t8 _/ q; a6 y. l; N; Z* @
                            Selection::MaskTriple mask1(UF_face_type,0,0);5 Z/ x  \* R8 {, I5 C
                            maskTriple.push_back(mask1);
& k7 C+ f4 q9 J9 U4 {& ~% X: M                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);: W9 C8 A) E8 \3 B6 U
                    }
; k  F: C6 W5 s; C- }  u4 H                    if (enumValue==2)
, L1 p, H+ N6 T1 B) x# ]9 w                    {
0 e' d# F( m0 _. W5 u                            selection0->GetProperties()->SetString("LabelString","选择实体");
9 g6 M3 A: x' j: c. ~& {5 N                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;/ a+ T) v. a0 o/ P/ F! R/ v
                            Selection::MaskTriple mask1(UF_solid_type,0,0);) o  s9 @; C" n) {
                            maskTriple.push_back(mask1);
; z& D* }3 `! B. k1 [  Z% Y8 R                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);
5 R" \5 F. g& v9 G5 L7 ~                    }
/ E) `6 ^  j1 T2 _
. d5 V+ o5 O( S. H6 n% Q. j7 O5 E' A, o+ C# ?1 o8 w2 V
//------------------------------------------------------------------------------
8 D. W( i/ \/ z7 I- t//Callback Name: filter_cb 过滤不符合对象& S5 o# ~. K" k  r, a1 K  C9 I# }$ B! i
//------------------------------------------------------------------------------) f  ^4 N; S$ r' s$ @; Z* _
int ML_NX001::filter_cb(NXOpen::BlockStyler::UIBlock* block, NXOpen::TaggedObject* selectObject)" p2 }& n! D6 [" Z4 Z! ^5 h
{3 G3 k  @) t# |; ]& ~
        
* D8 g3 j! f2 T9 E: B        int enumValue = this->enum01->GetProperties()->GetEnum("Value");) b% T1 _* ?( _; G6 i' U0 C% E
        if (enumValue ==0)% w/ \6 f; W6 J2 ?: K) I
        {/ s) R) ?4 F2 d$ V% n+ Q
                 tag_t obj=NULL_TAG;. i9 \5 N4 X/ A" o' ]8 t
                 int err=UF_MODL_ask_edge_body(selectObject->Tag(),&obj);2 u# [% p9 q: W6 v6 V) v) H
                 if (err!=0 && obj==NULL_TAG)( r0 s+ J  {: l( A
             return(UF_UI_SEL_REJECT); //不加入到对象预览列表$ s! C' Y  E# T& o: L" `
        }1 E) o. ]& E( J/ c5 K+ X
        else if (enumValue ==1)0 p0 [# C: j/ j' y
        {( K, `' f4 }2 W7 J' z
                 int type=-1;
9 B$ s) d: _3 P# {: A                 int err=UF_MODL_ask_face_type(selectObject->Tag(),&type);$ Y" D; H8 K9 z
                 if (err!=0 || type==-1)
1 j8 {) H; ~3 A! g9 M             return(UF_UI_SEL_REJECT); //不加入到对象预览列表+ T, K. T4 M7 {: e
        }0 ~* W! \3 n6 ?+ d5 a
        else if (enumValue ==2)
# @. G0 [, u# u+ e- _7 X' R% v1 i        {# [- Y4 U+ `# K7 t: a
                 int type=-1;* m9 g; h6 ~! ^' @8 y4 O
                 int err=UF_MODL_ask_body_type(selectObject->Tag(),&type);
6 m1 m: L: x0 J8 O8 [/ s+ s                 if (err!=0 || type==-1): ^  K# g6 }4 L- v5 J2 L
             return(UF_UI_SEL_REJECT); //不加入到对象预览列表8 x4 C& t) w( o! s- [1 y2 l" e
        }
( E& m5 y4 m! P! T$ |( y' Y
5 h9 n2 I# @/ C        return(UF_UI_SEL_ACCEPT); //加入到对象预览列表
. ]1 Z+ R3 Q7 d, ^2 p( L}
2 H! R! R( u- ?- }; J
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了