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

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

[复制链接]

2016-12-12 12:24:54 6091 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、选择对象) ?  u, S5 z4 a+ r/ o+ v, j+ D
- N8 i  C% F2 F3 s% q
捕捉
1 @& |2 u" M; \2 x/ M6 O! T7 _  PointOverlay             是否显示捕捉点
3 ~6 Z- Q3 g2 k  SmartUpdateOption        智能更新选项" H/ m/ ~* N7 u# u3 o
                             Within Modeling   在建模
; G/ y3 O, u" M+ M: {  N# s% O                             After Modeling    建模后
3 J" Q' V3 }1 ^# _3 {# \# r                             After Parent Body 实体父后% S! }- `3 u  F
                             Mixed             混合
0 u, Y" H& y) G, s$ j% f, l- r7 V
5 p# T( \2 s( w! H, U, ]  SnapPointTypesEnabled    设置捕捉点类型的可见性; b" @- `6 b% a2 a3 [% E, c2 b
  SnapPointTypesOnDefault  设置捕捉点类型相关的内容被启用, h6 D: k9 v- X4 |% b3 ^
; N9 C5 O# K% M# ]. n: D+ f
常规1 ?7 q3 H- \; G0 Y7 ~
  BlockID  控件id/ E* t- ]2 r/ d8 _9 v/ D
  Enable   是否可选/禁用控件
' U* o. f, ?3 J# a  a) v7 V, a  Group    组
6 i- {1 b- C) y- m' c" x. L  Show     是否可见: e) {; i. x+ z6 r+ n7 Y; ^
7 L& D  z; C6 L" I% Q' t2 A0 p
其它 + e- W/ a9 _* e2 m# q: U$ i2 z
  附着
" S" o# @. ]% ~, e    Bottom  底
! G, N4 W4 _3 y    Left    左& q9 N1 o+ }" T/ X: Q/ X5 U, N
    Right   右8 o" b$ T) e& W! a, W6 B( z+ ?
    Top     顶
& E; J5 U! e- ]* m  l1 ]) ]1 a7 g& `  a5 h/ @. T1 @
特定于块
4 z5 d& A5 G  S& v' c2 O/ _  AutomaticProgression     选择后焦点是否自动跳到下一个控件' J4 }0 f* X' W2 F
  BalloonTooltipImage      动态提示图片(鼠标移动到控件是显示图片)" d4 |% O$ j: W" r) c8 ?1 o
  BalloonTooltipLayout     动态提示布局# b2 c4 h/ q# d& [) Z
  BalloonTooltipText       动态提示文本内容6 k# L  @& J" n' o1 e1 t% `
  Bitmap                   指定图片
( z% F( K+ s, C4 Y( ~  BlendVirtualCurveOverlay 是否显示虚拟交线" n! X! N, l& L8 @
  CreateInterpartLink      是否显示部件间连接图标在选择条上/ {7 a3 _1 y. R  ?# y
  Cue                      提示
9 o# ^; O3 B& d! s# v7 R
) g& W( T9 S2 F2 q  InterpartSelection       部件间选择设置: N! `0 s  p( e1 E/ s
                             Simple                                           简单
- }' k( y: l9 k  K                             Non-associative Interpart Copy Only              只复制部件间非关联" Q/ A' b/ g- Q, T$ }# H5 F9 \
                             Associative and Non-associative Interpart Copy   复制部件间关联和非关联
; r  P5 n! m# h$ e                             Associative Interpart Copy                       复制部件间关联
7 n! k6 _* z, n6 y" K: f& p" x$ l
) |! A8 |5 I, M+ J  LabelString              标签标题2 Q; |+ h# k5 |9 f4 Q# B* j
  MaximumScops             设置选择范围* [% `8 {2 m. M
                             Entire Assembly                 所有组件/装配
/ a. l3 F! C+ d+ S  n2 N2 e3 h                             Within Work Part Only           只是工作部件
- d" O7 e0 J( D6 ]; b$ w- p# }( _                             Within Work Part and Components 工作部件和组件/装配)$ b* l+ F7 a$ s* J: T$ i( J3 \
& P/ j5 ^3 a, M3 P# k- \' O
  SelectMode                设置单选/多选 + p! H* [% ^3 P- ~$ R, f& E
                             Single   单选
: F& L1 E  D3 g" D) v, J2 J3 _                             Multiple 多选
0 Z- m( z. R  {
* k8 F3 D" y8 r- J; U7 l- ]( _  StepStatus               设置确定和应用按钮什么时候高亮 (Required 必需的时候)(Optional 可选的时候)(Satisfied 满意/满足的时候)
/ {  ^5 t* x/ `/ `; A# U, N9 C; C  Tooltip                  动态提示文本标题(Bitmap指定图片时,鼠标移动到图片时提示文字)
1 w; x/ r/ O, h5 a+ X, g! O3 v+ F
' b1 P7 B; O8 f. S3 B7 ?; `$ l————————————————————————————————————————————
8 f; G. x9 I( ?; v* o2 ?. s————————————————————————————————————————————) S$ S. c$ q' v) k
咧子:获得selection0控件选择的对象
$ \0 b; F% Q8 O  e& P/ s/ _      UF_initialize(); ; w$ J5 h6 {0 a0 ?' Z8 ^& F9 Q
      std::vector<TaggedObject*>objects=this->selection0->GetProperties()->GetTaggedObjectVector("SelectedObjects");& L7 J/ E1 l  y0 A. a
      for ( int i=0;i<objects.size();i++) // size 列表长度,这里指的是 对象个数# l% `& v; Z  j, A8 e: R
      {      
, X  V! S' j$ r6 Q  z         UF_OBJ_set_color(objects[i]->Tag(),1);8 Q: B' K% Y/ r3 B" X" P
      }
% ~; f; a2 v) c8 b+ v      UF_terminate();
3 I$ A+ g0 E$ R
: B) ]' ^# h; K' r5 O8 W# v————————————————————————————————————————————
! \7 S0 _5 F5 E  N# m+ Z; A5 l# O9 b咧子:对象加入到selection0选择控件的对象列表* e" ]/ S* S' ?: O& V' ?) d: n
2 }: I$ w: n- C. F4 q  G6 S& ^
      tag_t obj=NULL_TAG;
  K* F# T+ n" p( k4 V/ Y      double point[3]={0,0,10};$ G" H# s1 c+ M- q- N7 S0 {* W3 n
      double XYZ[3]={60,50,80};  x  N0 t; ~9 I: Z7 M
      char C[132]="";! p3 U! \, T% q
      char K[132]="";! q7 s; b; T& Y2 _9 n/ K. W, [
      char G[132]="";0 U# v) V. y# J3 D; F) d
      sprintf(C, "%f",XYZ[0]);6 _# g* O$ k& Y& [  [, f8 B6 x
      sprintf(K, "%f",XYZ[1]);
  d% e; c: O7 S1 _      sprintf(G, "%f",XYZ[2]);
1 k% h  x+ B; |! I0 n, t      char * edge_len[3]={C,K,G};
: T: B! w3 u. t/ J      UF_MODL_create_block1(UF_NULLSIGN,point,edge_len,&obj); //创建方* C/ Z, z' E) E& b" D, U2 T$ D' M
      UF_MODL_ask_feat_body (obj,&obj); //从特征中取出实体& s* ~+ e7 O( E7 y) p0 u  u

' ^! v) |+ x2 V6 U" c8 H2 I2 m      Body *body1(dynamic_cast<Body *>(NXObjectManager::Get(obj))); //tag转换给nxopen
. E2 A- X* J4 y      std::vector<TaggedObject*>objects;
  B! q8 s2 F  E3 q      objects.push_back(body1); //对象加入到selection0选择控件的对象列表! J) m+ [: ^8 d$ b
      selection0->GetProperties()->SetTaggedObjectVector("SelectedObjects",objects);8 p5 y0 F; }' T: L& M
————————————————————————————————————————————
. t- y' [& r$ T* q/ Z" C! S' k4 l/ p7 p- P& j: E8 C+ T
//清除对象
2 `: X, N, d$ C) c% t( {5 m1 |std::vector<TaggedObject*>objects;
! q2 x  t4 ?* v/ O, x9 Kobjects.empty();( _5 z+ F2 @, n/ `
selection0->GetProperties()->SetTaggedObjectVector("SelectedObjects",objects);
9 m9 ?+ g) G  E$ J
% J9 `1 T5 s/ `————————————————————————————————————————————* S& X( h' C/ D& Y8 |- l4 y' r
咧子:只选择面
8 Y& @8 m* R2 T& _4 W        initialize_cb() 初始化里加代码 或 dialogShown_cb()显示对话框里加代码 可进行对象选择过滤
, j! L8 _+ r0 |+ s; F  v; `+ f4 _+ H' f% }
        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式/ U) r; }) N7 D8 b0 ^- ^
- ~$ f6 ]( C3 P
        //对象选择过滤 只能选表面
& z" n" M, z! F- C+ o" k        selection0->GetProperties()->SetString("LabelString","选择表面");. J9 h' e+ b7 C# e
        std::vector< NXOpen::Selection::MaskTriple > maskTriple;" ?5 D8 u9 Q* G2 V; V
        Selection::MaskTriple mask1(UF_face_type,0,0);  {; ]- j  [) y; Y' ^+ g) S; X/ A
        maskTriple.push_back(mask1);* Q7 j: o5 S8 k
        selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);  P' S4 S1 _/ S3 Q6 h9 e5 s

+ i+ x) U- H6 v( q3 R7 e1 I0 E* Z
; K$ J! Q! K: V2 g咧子:只选择面 【UG本身过滤器跟着变】
+ D- ~* P  E  h: P" k+ t        initialize_cb() 初始化里加代码 或 dialogShown_cb()显示对话框里加代码 可进行对象选择过滤   
6 L/ z+ s& x3 o0 I/ j% B8 A# @( }# Q/ N9 r
        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式
8 p  ~5 |) l# e! I3 I' p+ \. L4 J+ \5 g& o6 R6 R$ E$ l
        std::vector< NXOpen::Selection::MaskTriple > maskTriple;
" R3 C. X4 T- k4 G) C" p        Selection::MaskTriple mask1(UF_face_type,0,0);3 o+ R( e5 v6 d* b4 A
        maskTriple.push_back(mask1);
3 N) p$ Y( f8 C        NXOpen::BlockStyler:ropertyList *selComponentProps = selection0->GetProperties();7 K( v6 A. U0 P; b& m  `0 ?% r3 A" {
        selComponentProps->SetSelectionFilter("SelectionFilter",Selection::SelectionActionClearAndEnableSpecific,maskTriple);
! `) y: j/ Z& Y        delete selComponentProps;- J5 i* e; X2 o5 b8 F
        selComponentProps = NULL;
( G: V; p3 T, V$ m# M7 D" |! `- F9 W% r* S% v+ H, e6 T) i' n
上海点团信息科技有限公司,承接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

列子' M' E; j9 i2 U* o/ z  S7 ?

; a8 H' l6 p& R& e5 I————————————————————————————————————————————
  o; a  G7 q# V————————————————————————————————————————————4 K0 c7 a0 ?8 l* ~* B1 q* v
咧子:只选择 实体边缘 直线和圆弧* u6 p0 E: v: k7 ~3 b/ ~
7 ^; m/ w# n8 B3 r! \0 c
  initialize_cb() 初始化里加代码 可进行对象选择过滤
3 n& [5 B' w6 S7 E2 V8 J1 [' {/ n" U* a5 A4 \, G3 z0 P
        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式
" A" b# a1 r0 S/ Q. ]                        selection0->GetProperties()->SetString("LabelString","选择边缘");//只选择 实体边缘 直线和圆弧
2 W% b) z+ K+ ^7 F* e' c                        std::vector< NXOpen::Selection::MaskTriple > maskTriple;
- F# I. u" U! P. ?                        Selection::MaskTriple mask1(UF_solid_type,UF_solid_edge_subtype,2);
! P# N0 p. J5 l                        Selection::MaskTriple mask2(UF_solid_type,UF_solid_edge_subtype,3);
) q' e" P9 k+ U0 A                        maskTriple.push_back(mask1);
2 s7 w* n9 K- B3 H2 v                        maskTriple.push_back(mask2);' e6 O% C3 j( M
                        selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);
. S* v4 w8 W9 |8 p9 x' H3 R6 J& T( G0 R+ |
//过滤无效的边缘
' E+ W% B, R1 b- S' X& N# l6 pint ML_NX001::filter_cb(NXOpen::BlockStyler::UIBlock* block, NXOpen::TaggedObject* selectObject)  U" W, }3 }$ z" m
{        9 S( j4 @1 D  A$ V
    tag_t obj=NULL_TAG;
# `2 y; |# ~3 D1 j$ @; z    UF_MODL_ask_edge_body(selectObject->Tag(),&obj);
- a  {) U# ~- j2 R- P( w    if (obj==NULL_TAG) return(UF_UI_SEL_REJECT); //不加入到对象预览列表( J) g6 d+ _' c$ ]! }
    return(UF_UI_SEL_ACCEPT);                    //加入到对象预览列表
6 L% v+ G1 H4 n2 o$ M' G( M}
( r: H, z# l5 O4 k1 I/ q( }————————————————————————————————————————————
+ ?' u0 ]5 N+ U( l————————————————————————————————————————————/ [+ K) K2 ]7 Z
咧子:通过枚举控件选项来 时实  分别过滤 边缘、表面、实体; A% i4 k  e- J: _" {. J
/ ]7 v2 e9 f1 J" G; |
   int enumValue = this->enum01->GetProperties()->GetEnum("Value");
  A/ |& _8 ]: U* u9 W                    if (enumValue==0) : O* b' [/ R: }7 Y5 U$ R( S- @2 h/ l
                    {3 ?* _! Z( r# Q- T% i$ Q- j
                            selection0->GetProperties()->SetString("LabelString","选择边缘");0 T: q+ y# I. y) T' U- i/ }" {
                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;% F  e7 O; _9 k1 H0 e3 j
                            Selection::MaskTriple mask1(UF_solid_type,UF_solid_edge_subtype,2);
/ V( E+ x3 R7 {8 H% m9 _                            Selection::MaskTriple mask2(UF_solid_type,UF_solid_edge_subtype,3);
9 |" x3 d8 X! y- T1 x                            maskTriple.push_back(mask1);
( x" l5 e& d+ h0 \* s4 i0 ~' P" d                            maskTriple.push_back(mask2);! T6 |6 J+ I! H+ ]; Q6 [
                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);# m* P( R7 v, y+ s, e
                    }
' K: p  n: m7 ?& h: j                    if (enumValue==1)
* I0 M% z" y' J+ v. v7 T                    {
& C) b7 M) l6 ]2 X7 b) M                            selection0->GetProperties()->SetString("LabelString","选择表面");
4 g( Q! P- \9 S. J( C" o( D                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;" l; W8 ?% |+ Z9 D: V4 N" _# ]4 @
                            Selection::MaskTriple mask1(UF_face_type,0,0);
' F$ z! v8 n  u# E3 v                            maskTriple.push_back(mask1);
# ~" H1 d( h. q. Z+ \5 E7 F3 }( y: M: a                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);* k, A" T2 j- Y( W9 Y
                    }
" B3 f* K# c6 x" F0 k' z  ^                    if (enumValue==2)
$ ?# E# ]# \- H8 p9 h: @2 a0 a* f8 x  ]" k                    { ; C+ l2 `) W* l- r
                            selection0->GetProperties()->SetString("LabelString","选择实体");
! r/ D& T. s0 g9 z7 b$ }                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;/ h- }- ]5 {1 H& m3 f; M
                            Selection::MaskTriple mask1(UF_solid_type,0,0);; N; c7 H3 L& M6 s  i8 F7 _: X+ l
                            maskTriple.push_back(mask1);
7 v! R0 e( f/ C                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);9 K5 d6 _0 @6 G$ W
                    }
6 c6 ^- z6 J' G- D* }6 p. i3 |6 {* A& f5 [  o/ ]

! ]( }5 ~% C7 S& o  b( P4 Y//------------------------------------------------------------------------------
- ]  O: D2 P7 \  Z; a) B/ b//Callback Name: filter_cb 过滤不符合对象' }" ?4 _8 x8 a* M# n
//------------------------------------------------------------------------------
& s! I3 ~' u  n" `int ML_NX001::filter_cb(NXOpen::BlockStyler::UIBlock* block, NXOpen::TaggedObject* selectObject)
! F+ x; V+ k0 y8 S( U8 W{
) K! e) k6 X! q        + `: K# b* i# j* }
        int enumValue = this->enum01->GetProperties()->GetEnum("Value");+ {3 p1 J/ i# S* Q  Q/ {3 T5 S5 c# x
        if (enumValue ==0); s1 \$ @- s2 W$ O" F2 z; L
        {7 g: Y! I1 s" g2 E
                 tag_t obj=NULL_TAG;! E) I: v, o7 }; f$ F+ X
                 int err=UF_MODL_ask_edge_body(selectObject->Tag(),&obj);
; d, K& N8 S- j4 U1 Q, D. z                 if (err!=0 && obj==NULL_TAG)
. @- b# h; d5 V! D% g             return(UF_UI_SEL_REJECT); //不加入到对象预览列表8 K  Q& v$ M8 w% A8 ~: Y3 v
        }
* N# p9 v$ e  s  ^3 n% @        else if (enumValue ==1)
3 y1 K+ P# \( f* S$ C4 X        {  w5 m$ A, f% j4 f
                 int type=-1;
4 z: ?9 q) H& [+ _2 j7 U3 l                 int err=UF_MODL_ask_face_type(selectObject->Tag(),&type);
, L8 S  `$ Y0 p, k* ]3 W( b                 if (err!=0 || type==-1)5 r! u9 C% I  x4 y! H4 k
             return(UF_UI_SEL_REJECT); //不加入到对象预览列表
5 n. ~& |1 @( @$ L. G        }
2 l7 e" l# t) d5 x2 q% g7 h. S- M. q        else if (enumValue ==2)' j5 o$ }, P4 s  r8 J! \' T% N& F- C% S
        {5 h! |5 }& j3 |6 e5 V+ y) |6 Z
                 int type=-1;
' z$ Q. l$ K7 b                 int err=UF_MODL_ask_body_type(selectObject->Tag(),&type);
) V+ R# [2 R: J8 e) v                 if (err!=0 || type==-1)- N$ p, }' P0 ]3 f3 \: K: o
             return(UF_UI_SEL_REJECT); //不加入到对象预览列表
" \5 @; w' Q* n" T        }$ Q+ z, P$ l3 d; G" W

- D+ Z; w6 S( K& P        return(UF_UI_SEL_ACCEPT); //加入到对象预览列表
8 H- e- X: f/ P' D) ]' C% F1 Q}
8 A5 z5 \" i% s3 G! V& f  x
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了