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

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

[复制链接]

2016-12-12 12:24:54 6337 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、选择对象$ H, R4 e$ e2 c; X! R

9 J: v/ H  V( ?! O- R! d, O捕捉' X$ A% T( B. H* I" t& d
  PointOverlay             是否显示捕捉点' _) ~! A, a7 ]! j. a
  SmartUpdateOption        智能更新选项
3 p# [0 n$ k' o5 M1 k- p! M  s                             Within Modeling   在建模
) W& `) B. n$ U3 O; @2 J4 M                             After Modeling    建模后
1 K" y- L9 g- C% X& y                             After Parent Body 实体父后
! T  h8 C( F# N1 |1 m; M4 E                             Mixed             混合8 ]1 h4 M/ i; ]" ]+ C5 E
( W6 P. u, H) q1 b
  SnapPointTypesEnabled    设置捕捉点类型的可见性
# v/ J& V1 V1 v  SnapPointTypesOnDefault  设置捕捉点类型相关的内容被启用1 y! |% T' G: `7 o, o+ @
6 o$ b1 A, M! i* `0 ]
常规
$ j6 Q2 W/ Y" g. S  i& v+ ?  BlockID  控件id
# H. U% X: P0 {" W% J/ b" K' G  Enable   是否可选/禁用控件
4 e" U$ j) ^% s/ u9 O$ m+ ~  Group    组
6 Y9 x+ s+ b2 j, K& E, _' @  Show     是否可见, g2 L9 n, b0 B* {3 N

) z" B- K3 c( G# n其它 7 m9 z6 }6 s0 S: q0 d; j8 k
  附着
3 B. A3 d# b5 t8 t    Bottom  底
" j1 Y8 s/ x! B  l! i    Left    左
8 w5 o8 {; O+ x6 h; n" c    Right   右- X! G1 H: d& k, H, I- a
    Top     顶( p6 ?" s& ]# X+ m

+ ~0 @8 M0 w# r2 F+ u$ M' n& g特定于块
# |$ ?  e% Q+ V7 E' u8 z" Q9 ^+ \$ Q' @  AutomaticProgression     选择后焦点是否自动跳到下一个控件  e2 ^1 d. t1 J1 j" W
  BalloonTooltipImage      动态提示图片(鼠标移动到控件是显示图片)
, z9 O! E( F* N: r8 \# Y  U5 k; Y  BalloonTooltipLayout     动态提示布局
/ ^& I& {1 Y! t- W! N" Y  BalloonTooltipText       动态提示文本内容
! h" Y+ d+ I/ V9 W  Bitmap                   指定图片7 I. m+ U  s8 ?
  BlendVirtualCurveOverlay 是否显示虚拟交线
4 G& q6 d2 h7 I, A+ \  CreateInterpartLink      是否显示部件间连接图标在选择条上. K2 L9 n# a9 h2 J7 D- L$ _! A
  Cue                      提示/ u2 t2 I) H: `; A' L
! U0 c! F2 G& {
  InterpartSelection       部件间选择设置& t& ]" H. Q( l; y3 g8 c' B
                             Simple                                           简单
# k8 t" M* B7 f0 J- ]5 J7 r& k                             Non-associative Interpart Copy Only              只复制部件间非关联9 {) u: Q' N1 g0 K! i$ @( m
                             Associative and Non-associative Interpart Copy   复制部件间关联和非关联% R+ w/ J8 \4 @( b! r7 H; C- I; l$ i. Q
                             Associative Interpart Copy                       复制部件间关联$ P6 ?) x% E( ?: {
" ^! }3 D2 ^8 x# ~6 S/ z
  LabelString              标签标题5 R- e! U$ |' M
  MaximumScops             设置选择范围* B- F0 F, q% x7 g) K, Y; m3 ^
                             Entire Assembly                 所有组件/装配3 \8 @! W6 q2 ]; m
                             Within Work Part Only           只是工作部件5 d# F/ e( L* \. z; b+ O1 ]. ]
                             Within Work Part and Components 工作部件和组件/装配)
  o; Y& {2 F! z$ u7 E3 m8 `% B) {; o) U- P  j. A
  SelectMode                设置单选/多选 9 P% J" K" j8 b# {& b' O
                             Single   单选4 o5 N$ Z* }/ b, q& Q3 ]
                             Multiple 多选
+ j1 \0 K: ]" n3 C
% Y6 S1 R' b, E7 {: ]7 j5 @2 O  StepStatus               设置确定和应用按钮什么时候高亮 (Required 必需的时候)(Optional 可选的时候)(Satisfied 满意/满足的时候)
; S$ x. N& L9 Z1 B! j/ u  Tooltip                  动态提示文本标题(Bitmap指定图片时,鼠标移动到图片时提示文字)2 _- Z9 T/ a7 r( ~4 H/ e& s
& E; O0 s/ |' o# G, `, w; P
————————————————————————————————————————————, ~' ?$ L) o+ N6 {. T. O
————————————————————————————————————————————
3 V+ @) |; G* b' u咧子:获得selection0控件选择的对象
# U! k+ P7 w$ ?4 D0 J+ m      UF_initialize();
& W* c& g6 }3 M" n5 \4 I      std::vector<TaggedObject*>objects=this->selection0->GetProperties()->GetTaggedObjectVector("SelectedObjects");
# j; V) i$ K% d      for ( int i=0;i<objects.size();i++) // size 列表长度,这里指的是 对象个数
; f# N* O$ x" x( D7 O/ `7 ~/ v      {      
+ u; y: a; H$ x9 {- z2 P         UF_OBJ_set_color(objects[i]->Tag(),1);
' a" n3 J+ b7 a1 ^3 U      }
" P  f; q3 c% s( Q4 I      UF_terminate();
5 A! h: G+ Q& K! a
6 a/ s$ P' i4 V————————————————————————————————————————————
% X2 e6 F. K0 u* }4 ~9 N/ E& M' j咧子:对象加入到selection0选择控件的对象列表
2 n. O: R8 V- e" I. ]1 C) {/ x& V7 W
1 g" ?2 T6 F- h7 S, q9 C      tag_t obj=NULL_TAG;1 S+ ^6 u* p' Q  O# Z# f
      double point[3]={0,0,10};+ L) l* q% ~# y
      double XYZ[3]={60,50,80};, h0 N2 P  e$ I8 N' {; c+ E
      char C[132]="";
( d$ u+ v( h5 }, l      char K[132]="";0 a9 O% O# u: s) @$ R9 H& r/ P
      char G[132]="";
- L4 W! h- H  J: c      sprintf(C, "%f",XYZ[0]);5 @9 n) o( P$ a; i/ A
      sprintf(K, "%f",XYZ[1]);
) {& a! J, v0 K+ X' J7 U+ |" K3 B      sprintf(G, "%f",XYZ[2]); $ ]0 g3 U( ]/ p5 ]7 l. s: i4 B: D/ d& o
      char * edge_len[3]={C,K,G};
2 r, u/ _. p+ L/ O) }1 e      UF_MODL_create_block1(UF_NULLSIGN,point,edge_len,&obj); //创建方: n7 t. |! K6 B6 w& P3 z, j% Q: I
      UF_MODL_ask_feat_body (obj,&obj); //从特征中取出实体
$ o- y5 L6 o$ b3 A5 k& y3 t* W) @* Z: Q% u1 ?
      Body *body1(dynamic_cast<Body *>(NXObjectManager::Get(obj))); //tag转换给nxopen$ H/ L. R7 R7 ?3 ?
      std::vector<TaggedObject*>objects;! a% Q9 D! y0 \+ |
      objects.push_back(body1); //对象加入到selection0选择控件的对象列表
8 N! u7 Z+ U! r# d% V: O7 o+ Q& u- `      selection0->GetProperties()->SetTaggedObjectVector("SelectedObjects",objects);- w4 \5 U' K/ F% _+ x* m: x
————————————————————————————————————————————
- ~: f% y" \* |3 T5 Z9 |& m8 x$ N. `# r: w. o  A+ m$ {0 ^8 r
//清除对象
7 E$ O8 a% b5 G4 ^) O1 E, Pstd::vector<TaggedObject*>objects;. D) }$ O# c5 R8 @
objects.empty();
  I  k* t5 Z! P2 U1 l4 `selection0->GetProperties()->SetTaggedObjectVector("SelectedObjects",objects);
) q' B& ^1 u3 u; X  M
0 b3 W2 b6 |# ?- W————————————————————————————————————————————$ V6 G7 I5 m  ]- Q( x3 o
咧子:只选择面
# h3 J! F0 Z8 W) A% T6 J        initialize_cb() 初始化里加代码 或 dialogShown_cb()显示对话框里加代码 可进行对象选择过滤
/ `/ G+ L+ j& ], S/ `' L
/ y% S. ~9 M& z4 W9 B' H7 c4 y        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式
( Z& [! |' z1 q
2 m9 f" W! e9 m! z% r: O3 V! P        //对象选择过滤 只能选表面
$ s) P% t# _- P: k9 ~% v3 N        selection0->GetProperties()->SetString("LabelString","选择表面");& t$ T* e, Z: t: B, k" O! G0 z
        std::vector< NXOpen::Selection::MaskTriple > maskTriple;
) Y+ L' ~- H4 J  v# f7 W0 R6 L        Selection::MaskTriple mask1(UF_face_type,0,0);" @. c! ~2 j1 ~, a
        maskTriple.push_back(mask1);! N3 Q( A/ O/ u5 W9 }. X3 n* L8 A2 i
        selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);
" H  D1 i$ o( S/ M' j" }  u6 X
. |. [1 e9 J0 R$ M1 o. F  D! T' c- }
咧子:只选择面 【UG本身过滤器跟着变】
" ?9 j6 }9 c4 j5 U        initialize_cb() 初始化里加代码 或 dialogShown_cb()显示对话框里加代码 可进行对象选择过滤    $ O2 C' R: F+ p( @2 [6 N

( `7 |7 G# U7 h7 X+ j' ^/ _        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式8 e3 F  X) b. x* v* S% P& G

( f2 A, |& g- b, k        std::vector< NXOpen::Selection::MaskTriple > maskTriple;7 T1 v/ x3 B) _" T( e
        Selection::MaskTriple mask1(UF_face_type,0,0);6 o- ^0 V  t: ~( {8 j1 o1 M
        maskTriple.push_back(mask1);( N: t2 y9 S6 C$ V2 J9 d
        NXOpen::BlockStyler:ropertyList *selComponentProps = selection0->GetProperties();. j: J5 @+ S& c7 p6 ?% X! c* r4 [
        selComponentProps->SetSelectionFilter("SelectionFilter",Selection::SelectionActionClearAndEnableSpecific,maskTriple);2 y/ ^* |$ Z. y
        delete selComponentProps;/ o$ z9 k0 w7 x5 q5 H
        selComponentProps = NULL;
! ]( O) x6 M; r3 L" J/ e9 N1 w0 k3 t5 s" `7 d
上海点团信息科技有限公司,承接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 | 显示全部楼层
列子$ v+ P: y" P+ W* I
/ k4 l; B. r, d* c
————————————————————————————————————————————' {& L; g# r+ F
————————————————————————————————————————————
9 O3 E4 k3 B2 y) w7 z6 b9 k咧子:只选择 实体边缘 直线和圆弧
, q; b, s8 \" B
5 b- X6 j1 A" C; r& t( H  initialize_cb() 初始化里加代码 可进行对象选择过滤
7 q' [1 V6 R+ b/ O. [4 r- I$ g" t; m% K& X, X
        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式* B( ?+ H- s7 F) [  b
                        selection0->GetProperties()->SetString("LabelString","选择边缘");//只选择 实体边缘 直线和圆弧
2 W0 u% \( G0 O% O- S                        std::vector< NXOpen::Selection::MaskTriple > maskTriple;
% ~' p1 H  X- r* u  ~9 Q1 A6 x. a0 L                        Selection::MaskTriple mask1(UF_solid_type,UF_solid_edge_subtype,2);2 U4 }7 U! l0 \
                        Selection::MaskTriple mask2(UF_solid_type,UF_solid_edge_subtype,3);# T- p( m2 O. K7 t3 y! q: T
                        maskTriple.push_back(mask1);
) A4 V. W3 Z% n6 Y& b                        maskTriple.push_back(mask2);
" z! d7 N5 j7 b                        selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);- Q& |" _0 K1 l5 C

4 v( }$ b# ~0 l/ p; W' f  T//过滤无效的边缘
( Y2 S, k9 I4 p% g; N( T5 O& Tint ML_NX001::filter_cb(NXOpen::BlockStyler::UIBlock* block, NXOpen::TaggedObject* selectObject)
' g( j( `6 d6 D! q0 r1 d- X{       
' ~' c+ R( s6 p1 s& H4 l! D    tag_t obj=NULL_TAG;
& C  B, H  O1 g) D$ G: w    UF_MODL_ask_edge_body(selectObject->Tag(),&obj);' [# ]1 t; p; P' c6 ?
    if (obj==NULL_TAG) return(UF_UI_SEL_REJECT); //不加入到对象预览列表6 ]9 A" {! }# X7 C' O  {- {9 C
    return(UF_UI_SEL_ACCEPT);                    //加入到对象预览列表+ n" G5 ~- ?- r
}
% Y, R1 J% S  b" O" B& ?: p2 Z) y————————————————————————————————————————————+ t- d! E: A/ b5 Y
————————————————————————————————————————————% x% |3 n3 w, ^1 s) x6 I5 P! ^5 k
咧子:通过枚举控件选项来 时实  分别过滤 边缘、表面、实体( S6 J% W' J" v8 i/ _' p% d$ n

# l! |. r5 Y! m   int enumValue = this->enum01->GetProperties()->GetEnum("Value");
% y/ r' g; }. e                    if (enumValue==0)
1 t. U  c7 X  f2 e) i2 U                    {
/ D% v7 G) j- I' `" w                            selection0->GetProperties()->SetString("LabelString","选择边缘");
% B( s! \' M! G% {. U& @                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;
3 v4 H) d+ K& ~! `8 u. N                            Selection::MaskTriple mask1(UF_solid_type,UF_solid_edge_subtype,2);7 t- x! k. R& ?4 H6 t& z
                            Selection::MaskTriple mask2(UF_solid_type,UF_solid_edge_subtype,3);
  |8 Q7 e0 J: s: f$ m                            maskTriple.push_back(mask1);
1 t; x: L1 E7 e7 @$ N: O                            maskTriple.push_back(mask2);9 j( x8 I" h# w. S6 A
                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);
3 x& Y( M$ S$ f6 o5 O                    }; I$ w+ P! A! g& u7 T
                    if (enumValue==1)
+ |; a* Y* {6 o8 s- s                    {
# A  _$ n& y. p                            selection0->GetProperties()->SetString("LabelString","选择表面");1 B  {# j" a9 Y7 g/ z
                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;( H6 O* _& I+ |  z8 H% p0 H
                            Selection::MaskTriple mask1(UF_face_type,0,0);; S0 H% M- }' c! c
                            maskTriple.push_back(mask1);" `6 g- B5 A7 h3 Z$ J4 e% a+ z
                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);! ]5 x3 ~" t2 B) ~- l, x" e
                    }
! m5 s: h* D  A" g2 K                    if (enumValue==2)
% Q+ `1 n; Z& k5 e6 H                    { 3 K) d! [3 B: R
                            selection0->GetProperties()->SetString("LabelString","选择实体");7 e( \  ^1 b8 y9 E. F
                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;
6 A. ?0 u: U8 ]! f; V0 S7 y9 \! ~                            Selection::MaskTriple mask1(UF_solid_type,0,0);
3 `) e0 T! @( Y  R$ j2 E' e+ N                            maskTriple.push_back(mask1);* n, @5 `9 P/ b+ ~. {+ ?
                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);
  C6 F0 r- o; m, e8 k                    }, m5 a3 A6 B( `- I, v7 w

- D# I' X) W! O+ ~: T$ L1 Q* z3 P3 |7 l/ r
//------------------------------------------------------------------------------
* u$ i8 h) D9 b# }//Callback Name: filter_cb 过滤不符合对象+ Y. X1 b& W, r, Q" f% {
//------------------------------------------------------------------------------
% s. \& B' E' k- o3 Lint ML_NX001::filter_cb(NXOpen::BlockStyler::UIBlock* block, NXOpen::TaggedObject* selectObject)6 V. A5 j; l  h6 U5 l* S, g! A: y
{
- t  b. ^' ?6 V6 r; U- V        4 U3 X1 c& P7 b! [
        int enumValue = this->enum01->GetProperties()->GetEnum("Value");3 X9 c. N2 q" k; q3 H- \
        if (enumValue ==0)  e4 G8 E/ Q: H1 v
        {" ?& ]: u; I8 T. S
                 tag_t obj=NULL_TAG;; Q# e5 m' O$ p
                 int err=UF_MODL_ask_edge_body(selectObject->Tag(),&obj);8 J* F2 o" u; W# ?/ Q
                 if (err!=0 && obj==NULL_TAG)
1 r$ O9 I- W' ~  @             return(UF_UI_SEL_REJECT); //不加入到对象预览列表/ K- `, R; y0 ~: R- \. ]6 h
        }% V0 C+ y$ z0 @, |. [
        else if (enumValue ==1)
! f' K6 u( b/ Q0 @% g% A        {4 Y6 V5 x& O' f0 M, T
                 int type=-1;
, \7 B4 l% B4 @0 X  Z! K5 J4 I                 int err=UF_MODL_ask_face_type(selectObject->Tag(),&type);
2 O3 j0 O: \: _3 {                 if (err!=0 || type==-1)
+ F" v$ ]- t; Y7 @9 F) S; ?( [             return(UF_UI_SEL_REJECT); //不加入到对象预览列表$ [% c/ }! B3 \0 O: w
        }/ i* J/ V/ K9 p3 Z6 T2 {
        else if (enumValue ==2)
5 U9 n' X5 _6 y        {
2 t% u( I" A# d8 I1 h0 h                 int type=-1;
3 \1 V* P- D  c/ {7 \6 X( q' S6 R                 int err=UF_MODL_ask_body_type(selectObject->Tag(),&type);/ h# K  f) M( p0 F0 @
                 if (err!=0 || type==-1)7 w4 O* }% Z7 i! p1 K* K( A$ y
             return(UF_UI_SEL_REJECT); //不加入到对象预览列表
8 G& u$ `# H6 u- d        }
! m4 S8 ], L: [( K5 T" z% R; x
0 o9 d$ F' q' W' K. Z) f        return(UF_UI_SEL_ACCEPT); //加入到对象预览列表4 y1 U' ~) n* y) X  T
}" y2 _6 H; ~( T4 C
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了