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

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

[复制链接]

2016-12-12 12:24:54 6170 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、选择对象9 [# e& ?! h+ J* q

* v, c5 o8 J% s, ^捕捉
3 ], ~8 ?2 b' J  P  PointOverlay             是否显示捕捉点2 C  n2 G5 b8 \) f6 s
  SmartUpdateOption        智能更新选项8 d2 {' K7 [' `8 J  L* q: K
                             Within Modeling   在建模
+ E/ c' \3 f8 k                             After Modeling    建模后% I8 [3 p5 t- u/ E- R! X: [8 ]
                             After Parent Body 实体父后% r( Q  O$ ]& }# l- B( f
                             Mixed             混合
( ?8 ~+ x) h1 ^7 E$ q2 I7 e- y0 t2 w2 [; q( g0 s( k
  SnapPointTypesEnabled    设置捕捉点类型的可见性
0 ~- J% D; _0 |  SnapPointTypesOnDefault  设置捕捉点类型相关的内容被启用
( ?6 `) \! ?/ E: l' ?, r* Z1 p2 p$ X2 h" O2 J# N
常规: F; p) a4 o0 R) a5 u* f; E' \
  BlockID  控件id
! f  N$ c$ a# D( K  Enable   是否可选/禁用控件5 Y0 T* m' D8 B0 I
  Group    组
( m  V! D/ j# D+ N) l  Show     是否可见
" ]+ v; v2 X" D4 o* s* Z. Y/ m4 \9 b* Y6 t0 n9 o. j
其它 + j+ T; V4 R; j' h0 N
  附着- t, k4 A" a4 X9 W, o& @
    Bottom  底
% r, N, ~, z" A4 G  T    Left    左6 `7 A) P% @3 y0 _
    Right   右2 N8 n' q, J# q; B  {
    Top     顶
0 Q. z0 A& f* x- |# l; e; }2 v; a+ q2 r7 j3 p, v! p( m$ j
特定于块6 ]8 \! |, I* _+ @/ B3 y
  AutomaticProgression     选择后焦点是否自动跳到下一个控件8 D0 S6 O* G* o% x3 w1 Y6 ?
  BalloonTooltipImage      动态提示图片(鼠标移动到控件是显示图片)! V% P6 n' d$ N
  BalloonTooltipLayout     动态提示布局. z9 x3 B, U2 S3 ?3 i
  BalloonTooltipText       动态提示文本内容
' w5 r- N" H! a: @* y1 e  Bitmap                   指定图片
# Q) @) g/ P% P+ c; q5 v  BlendVirtualCurveOverlay 是否显示虚拟交线
; U+ M7 `8 U0 R5 z  CreateInterpartLink      是否显示部件间连接图标在选择条上1 }% a; T" d9 K" B, o5 Z  }
  Cue                      提示
/ |5 A" i. N; A- G$ d
/ S$ ?' B% A9 }, ]; u1 c  InterpartSelection       部件间选择设置
3 i3 y0 A$ `! v! k! x% _                             Simple                                           简单, w( [1 ^6 D% O, Y+ a3 g& R/ n
                             Non-associative Interpart Copy Only              只复制部件间非关联+ @+ f$ D! Q; ^) A& p4 J
                             Associative and Non-associative Interpart Copy   复制部件间关联和非关联
0 I0 u& S% ]" [' t  z$ {1 r                             Associative Interpart Copy                       复制部件间关联; H" y* ~. ?& d) q) v0 ^
5 f9 x0 u5 F( ^9 i' U, H3 E, z
  LabelString              标签标题
* r- a. j) w% o! O4 T$ _) O( T  MaximumScops             设置选择范围
* O. `0 a% f+ e2 ]                             Entire Assembly                 所有组件/装配+ Y9 w9 F/ E; C# Q) E
                             Within Work Part Only           只是工作部件
/ H% k2 s2 [3 K% J/ P6 _# e; S. Z                             Within Work Part and Components 工作部件和组件/装配)# ^# `- y. }0 ?/ j+ S- K! z
3 X  P7 Z  e) h: n$ |5 r
  SelectMode                设置单选/多选
" y4 o% [1 Y" Y  [$ F4 ^) r                             Single   单选
& L% n9 M+ V5 i, c/ `, A8 ?- L                             Multiple 多选  R- I/ i( r: l" z: S  p: n

6 ~4 U# A% }. [5 Q  StepStatus               设置确定和应用按钮什么时候高亮 (Required 必需的时候)(Optional 可选的时候)(Satisfied 满意/满足的时候)& _+ G. |  T# t4 j+ p: V
  Tooltip                  动态提示文本标题(Bitmap指定图片时,鼠标移动到图片时提示文字)( z& L; S! U2 [( V* j3 i$ \

- g6 q1 D' [* n4 U7 X————————————————————————————————————————————! f5 S' d8 _( ~" F: B4 D
————————————————————————————————————————————
2 w' T8 t9 u! {* U6 c% g咧子:获得selection0控件选择的对象
* C2 P, `+ Q! N  }9 E      UF_initialize(); & |# \6 Q# k- w' w
      std::vector<TaggedObject*>objects=this->selection0->GetProperties()->GetTaggedObjectVector("SelectedObjects");5 p- ?0 Z6 a/ e; ^  C1 c/ V
      for ( int i=0;i<objects.size();i++) // size 列表长度,这里指的是 对象个数: F5 r" s; u4 k7 S) V
      {      
; A8 v' m) a. v  j         UF_OBJ_set_color(objects[i]->Tag(),1);
" C' p4 G- ]& ?      }
. C* t; B8 B- x) H  r( G      UF_terminate();
. V; f% O/ _% n& @8 L) h3 F" Z3 n& B7 \9 U
————————————————————————————————————————————
! O5 c7 c. g, T0 w% h# q! \$ ~咧子:对象加入到selection0选择控件的对象列表: v* ^) T" i* e. R0 u/ C, @. X5 n
" d" S# Y" u/ ~8 o
      tag_t obj=NULL_TAG;, w" ]1 R7 j% W# J' j  F
      double point[3]={0,0,10};
1 ^  s6 x+ R' e- W$ w0 l% Y      double XYZ[3]={60,50,80};5 t! \1 h& d. m1 ~2 t8 A0 \% V
      char C[132]="";  X2 E1 z: F6 i' L" d$ [0 L/ c, Z
      char K[132]="";* Y" @; g' M3 @8 Q" v
      char G[132]="";
) x+ |; }' q: r) |& L  G" l" X      sprintf(C, "%f",XYZ[0]);0 K1 H& \+ l3 R6 p# M
      sprintf(K, "%f",XYZ[1]); # A/ P+ T& {2 A8 B' f7 f; E% E
      sprintf(G, "%f",XYZ[2]); % d) {! J/ w0 p2 W6 W  Y$ h
      char * edge_len[3]={C,K,G};2 |) e# }  R& l8 H. A
      UF_MODL_create_block1(UF_NULLSIGN,point,edge_len,&obj); //创建方
  y/ S$ X& A& t" v0 u& c      UF_MODL_ask_feat_body (obj,&obj); //从特征中取出实体2 w1 \$ |0 g- }* b

8 G4 a' x6 r0 J* b2 s, P$ N      Body *body1(dynamic_cast<Body *>(NXObjectManager::Get(obj))); //tag转换给nxopen
% f+ L8 O$ b% v. R      std::vector<TaggedObject*>objects;
( \0 w+ Y, h+ h" g      objects.push_back(body1); //对象加入到selection0选择控件的对象列表5 K" G# b6 y' C8 ~
      selection0->GetProperties()->SetTaggedObjectVector("SelectedObjects",objects);" K2 T! ]" ]8 e6 D4 I
————————————————————————————————————————————4 F: A  }% k' n0 x9 B
5 t9 V9 y: X% _: x7 {" G
//清除对象9 f  f( A, T4 c9 }, N% E
std::vector<TaggedObject*>objects;0 M, G# ^7 n/ M  k/ a3 [+ S; h$ X
objects.empty();- D  b3 X6 e  u9 d. M( c
selection0->GetProperties()->SetTaggedObjectVector("SelectedObjects",objects);" U' F# U  N$ X: E5 `) Q
; i, M9 F4 ?+ o7 z! x  `9 S
————————————————————————————————————————————
% J6 N4 F, o- [' ~5 N5 y+ v+ t& H4 B咧子:只选择面  Y( D3 H0 _% a
        initialize_cb() 初始化里加代码 或 dialogShown_cb()显示对话框里加代码 可进行对象选择过滤
1 t  o" P( k9 U& s# w9 y
, W& h5 x. n% D1 [6 q# Y! O        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式
& s$ a* j1 t& n% X9 s; U" w$ l- Z
$ o  F' m. z; \/ m        //对象选择过滤 只能选表面* o. w8 v7 n+ P$ n! l
        selection0->GetProperties()->SetString("LabelString","选择表面");+ G6 s+ M8 ~1 k  |0 V
        std::vector< NXOpen::Selection::MaskTriple > maskTriple;
0 c* }+ S1 a3 u( q7 m2 J        Selection::MaskTriple mask1(UF_face_type,0,0);
1 x) p! H* m. t9 ^: K3 i5 Y        maskTriple.push_back(mask1);' q: z: W3 S, m' V
        selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);
. C# B" e( P' g+ n( c4 P  A# _" l5 H
2 r' ?' p# i' E  y0 |! J. Z1 B( {" a3 R. ?" {* q" W. L0 Q1 f! ?( v
咧子:只选择面 【UG本身过滤器跟着变】% H  e* G# A5 r, ^- s
        initialize_cb() 初始化里加代码 或 dialogShown_cb()显示对话框里加代码 可进行对象选择过滤   
& n% \; c5 G- f) `0 r; [0 [( q: ]5 v
        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式. W4 G; Z5 }- d. N8 ?) h

$ }$ C+ j, p, E% i) Q) e- d        std::vector< NXOpen::Selection::MaskTriple > maskTriple;
4 E* Y0 O1 R+ B: S, M* L$ F! h        Selection::MaskTriple mask1(UF_face_type,0,0);' O3 f  X9 C1 z5 l
        maskTriple.push_back(mask1);
5 S# y* o3 Q; f7 ~+ N" P# Z        NXOpen::BlockStyler:ropertyList *selComponentProps = selection0->GetProperties();2 [. D  a8 q. c7 `# M8 W3 {
        selComponentProps->SetSelectionFilter("SelectionFilter",Selection::SelectionActionClearAndEnableSpecific,maskTriple);
9 b8 O2 h7 ^, J  V/ E$ k, U# k        delete selComponentProps;
' C' H# X1 _+ u5 c* A2 }2 o. _% j        selComponentProps = NULL;
" x' A0 b0 R3 c
# w6 X- z% H  r0 Q- c  q" t& H
上海点团信息科技有限公司,承接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

列子
2 o1 K# j6 P* J7 j
/ {( ^  t7 O, @1 V/ r# S& k, [9 K————————————————————————————————————————————
/ D& n6 A, i( X% D# b————————————————————————————————————————————
( s. |- N+ W# V* l) z( m7 {咧子:只选择 实体边缘 直线和圆弧
2 W0 j' N1 p) Z1 A1 Z6 b0 x# {; c7 Z/ ~. x% l; {
  initialize_cb() 初始化里加代码 可进行对象选择过滤  @, f, R0 x3 Z! H1 y/ c

; \; x# D! h7 i; m        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式5 P5 K& K3 p, H6 w( O# K% ~; D: e$ W
                        selection0->GetProperties()->SetString("LabelString","选择边缘");//只选择 实体边缘 直线和圆弧
+ ]2 |. E: A4 W) c! r6 _                        std::vector< NXOpen::Selection::MaskTriple > maskTriple;
2 z0 J2 D# v  U3 A; H5 J                        Selection::MaskTriple mask1(UF_solid_type,UF_solid_edge_subtype,2);
" {0 p- Z& c2 D$ V                        Selection::MaskTriple mask2(UF_solid_type,UF_solid_edge_subtype,3);
- `$ R, O' g! U4 S  [9 a                        maskTriple.push_back(mask1);
$ D8 p# H# H" g4 l                        maskTriple.push_back(mask2);
  q/ K# g4 t% \/ Q* I                        selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);
3 L$ f2 \  s3 ^- T  b( f) \' y0 u! ]8 A( u
//过滤无效的边缘% I; [8 x: J3 i& n5 U
int ML_NX001::filter_cb(NXOpen::BlockStyler::UIBlock* block, NXOpen::TaggedObject* selectObject)
# i$ I4 p% ?) z7 `9 c; U5 T{       
7 d* E3 G% E3 f    tag_t obj=NULL_TAG;3 C7 V  _) T- p" M( S, }- D' W
    UF_MODL_ask_edge_body(selectObject->Tag(),&obj);
2 ?6 R& A8 ]( D: I* L0 D& Y7 J    if (obj==NULL_TAG) return(UF_UI_SEL_REJECT); //不加入到对象预览列表
) G& A7 D. H: Z0 u    return(UF_UI_SEL_ACCEPT);                    //加入到对象预览列表
+ G4 X$ W5 D# F1 `; e. @# Z: l}& X6 q/ }7 Z4 o/ e' I
————————————————————————————————————————————6 H- L0 P) }6 e& S. K, n" Q2 A
————————————————————————————————————————————
6 i$ e) f' `- d# `. ~咧子:通过枚举控件选项来 时实  分别过滤 边缘、表面、实体
# I7 g6 e( _' H! m' X! S
8 x& A2 f. U0 g" `9 K5 k" D   int enumValue = this->enum01->GetProperties()->GetEnum("Value");$ L' a* _  b1 X! k0 P% t) n% m
                    if (enumValue==0) 2 M! j, }6 H! W  X+ \1 \
                    {
7 z8 z# W2 E8 }8 u7 M, }1 a( J                            selection0->GetProperties()->SetString("LabelString","选择边缘");
( X* N2 {0 E9 U, Z                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;2 d# F% S7 I8 M4 L
                            Selection::MaskTriple mask1(UF_solid_type,UF_solid_edge_subtype,2);
) ^  W/ u- V; U2 T: g6 Y                            Selection::MaskTriple mask2(UF_solid_type,UF_solid_edge_subtype,3);! O) y- M1 r5 K& h
                            maskTriple.push_back(mask1);5 D3 z- m) @* {, @6 F
                            maskTriple.push_back(mask2);
; X  p" |( Y* W/ M( R0 u. Z  g: c9 x* W                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);9 T- U5 ?, N0 f& k* j& g$ N
                    }
; ?& h+ W; z/ m  g, g' |! P                    if (enumValue==1) - h# x$ H8 y2 R) t/ b
                    {
3 e& S1 f6 z* o! U                            selection0->GetProperties()->SetString("LabelString","选择表面");' r( U% V, r2 E' l: X2 z
                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;3 F. t* b, B. l2 I; I
                            Selection::MaskTriple mask1(UF_face_type,0,0);  U' e; F7 v! C$ P
                            maskTriple.push_back(mask1);+ o7 C# x6 `9 z/ |
                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);
! x' J  {% P  Q2 c                    }* `' ~6 H  Z1 i( o9 D
                    if (enumValue==2)
6 A& ]/ S1 N/ ~" s                    {
- ^- q9 m) @3 m( b4 D* I: W                            selection0->GetProperties()->SetString("LabelString","选择实体");
" w% \) K+ ?/ ]; @1 o- _- k. L                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;8 e( x* _6 P- d
                            Selection::MaskTriple mask1(UF_solid_type,0,0);/ k6 e. t3 w) F  Z4 Y0 G$ ]
                            maskTriple.push_back(mask1);
( R4 L% I1 ^( ?  Y                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);
( X0 M1 k# h: b0 r. y) x                    }, f( i- T2 g) @8 a; \
5 B' F! r" U. @- H
% i5 L: P5 r+ q. O' _  s( F
//------------------------------------------------------------------------------
& C; D: `! J' ]! A! _! S- D//Callback Name: filter_cb 过滤不符合对象
6 M( s5 h. l3 [+ }! |. c//------------------------------------------------------------------------------. i# [  z6 M3 Z: x) v  a
int ML_NX001::filter_cb(NXOpen::BlockStyler::UIBlock* block, NXOpen::TaggedObject* selectObject)6 O$ L  B  _% H5 {# @# t
{
; {" Z" }0 z3 R0 w& j2 \; z        
( H' @) n* \3 c; R: D        int enumValue = this->enum01->GetProperties()->GetEnum("Value");
3 [( s: g; X. t+ t; s, Y0 L; {! ?        if (enumValue ==0). t/ U8 g" p4 @
        {
( ?& T* l* x( l/ G1 a2 l                 tag_t obj=NULL_TAG;+ y" i: l1 E: T4 F8 N* L
                 int err=UF_MODL_ask_edge_body(selectObject->Tag(),&obj);! L5 `/ ?( V) Z6 K% q2 W* H
                 if (err!=0 && obj==NULL_TAG): t# Z) P: s3 ]# e
             return(UF_UI_SEL_REJECT); //不加入到对象预览列表
$ m7 M6 o  }. y8 s' r        }/ b5 b- D0 d/ z: \& }
        else if (enumValue ==1)
. v+ Y8 E; i- d  g        {
# B1 P7 I+ l, w8 j' R) `                 int type=-1;! m' _; {, d- C& w
                 int err=UF_MODL_ask_face_type(selectObject->Tag(),&type);- E1 h  P& P7 ^
                 if (err!=0 || type==-1)
7 q, ~8 k5 y( v             return(UF_UI_SEL_REJECT); //不加入到对象预览列表* h/ p! @. h9 I) Z9 P
        }
& r; h' x/ Z0 a: s! H  k0 V9 v        else if (enumValue ==2)
+ ?; ]/ e$ ?" z' r# T0 i        {! v% \8 O5 j7 Z% L+ F- \: p
                 int type=-1;8 T- s4 f+ t5 K- L% l2 Z) }. w
                 int err=UF_MODL_ask_body_type(selectObject->Tag(),&type);
( E* ]( o% a$ b9 I! s' x- c# S                 if (err!=0 || type==-1)( L" ~0 p/ y) V6 x) e
             return(UF_UI_SEL_REJECT); //不加入到对象预览列表# n% p/ ]0 Y% B# b& F, a+ o) T4 W) `
        }
* n$ x, V8 V! E- N3 n8 F
( S- L6 `) c: c        return(UF_UI_SEL_ACCEPT); //加入到对象预览列表
% m/ G( B! w- \) b1 G}
! q/ P+ D- E- m* g* n# H
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了