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

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

[复制链接]

2016-12-12 12:24:54 6259 2

heromo 发表于 2015-11-9 08:37:08 来自手机 |阅读模式

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、选择对象4 s' t! c7 l, H0 ]( Y, k- r

+ Q3 l$ X6 D3 ~8 u8 z捕捉1 c! o/ }/ y& b/ l2 j
  PointOverlay             是否显示捕捉点- ?: V2 x$ Q! ^/ V& B
  SmartUpdateOption        智能更新选项
( y1 s3 j% H) H3 ]  ~% x9 v                             Within Modeling   在建模
0 @0 L) g& w1 N                             After Modeling    建模后
! n6 x9 N& H6 R# J, [                             After Parent Body 实体父后
/ U& [. m8 z! ~6 v" ~$ A, Q                             Mixed             混合* ?9 a8 y. W" ?1 Y7 J% B* f3 ]

* H% I6 S& X2 V! O2 b  SnapPointTypesEnabled    设置捕捉点类型的可见性
% r: ?+ ^: a1 @* M% g2 e  SnapPointTypesOnDefault  设置捕捉点类型相关的内容被启用' K  f) E8 j4 {1 R

; E( V8 `. S& `% D: R常规2 r" {* T$ G! F  k2 E, V
  BlockID  控件id+ J2 a# V( E" i, Q& d0 k
  Enable   是否可选/禁用控件& a* I- s( E, ]6 y8 `* S2 e
  Group    组
! }$ |7 u* ~: O$ J  Show     是否可见
/ w$ |$ X( ]7 |0 n! o) l# t1 [: f  s- V
其它
% {: m; j" p9 G. `5 N  附着
' W  X# x% [/ a, M4 J    Bottom  底
7 J1 M' Z- V" r  Z% M4 Q    Left    左
. e" x% `/ V. u/ [, d    Right   右& l# R# |8 z7 Z* k  p
    Top     顶
! V2 `6 m( Z7 m2 [) y' C' L- g, P/ f' x, H: ~7 \4 r& E7 X( X
特定于块- J- h- s* L; V
  AutomaticProgression     选择后焦点是否自动跳到下一个控件- `$ w. M' _) n" X# r+ o
  BalloonTooltipImage      动态提示图片(鼠标移动到控件是显示图片)
. y, i' k6 F  s& ]6 r" R( G  BalloonTooltipLayout     动态提示布局
) z: u" T6 ]: n. u, @6 V; D  BalloonTooltipText       动态提示文本内容
/ k, ], b# u0 k  Bitmap                   指定图片5 e8 L& x! a1 O2 \* u/ ]- n- s( ?' l
  BlendVirtualCurveOverlay 是否显示虚拟交线
4 g: r. j7 x7 G/ k2 a0 F" D  CreateInterpartLink      是否显示部件间连接图标在选择条上
- \4 x+ T9 @; _" Q  Cue                      提示& l5 B3 Q# S$ @; A
( T* ?: I4 x( O* b# }0 y
  InterpartSelection       部件间选择设置. B0 \, H  ]  ~9 T- r
                             Simple                                           简单. T+ \: D/ s. L# _2 f
                             Non-associative Interpart Copy Only              只复制部件间非关联
4 e7 c( Q( ^, _                             Associative and Non-associative Interpart Copy   复制部件间关联和非关联
9 |5 b6 H. ]- r* k+ t& Y% Q                             Associative Interpart Copy                       复制部件间关联
1 `+ _. e4 b+ g8 N- }
% H$ K: v2 ^2 n1 C0 i  LabelString              标签标题" _! j# R# B- T) F7 q4 W3 g' b' |
  MaximumScops             设置选择范围+ s% \$ s! n: d# Z1 {. U. F
                             Entire Assembly                 所有组件/装配9 I  T2 I# s7 y. _( s
                             Within Work Part Only           只是工作部件# g) `, k! e  n; J8 e) K5 B0 z
                             Within Work Part and Components 工作部件和组件/装配)& q6 X& S$ M* h+ e/ Y, e  w

: t; U% {# r3 |& s# I# ^$ w7 _  SelectMode                设置单选/多选 1 j! G8 x) @. m* a; R8 V
                             Single   单选
# g8 n9 u" Y9 b- U                             Multiple 多选
% C& }# c7 }4 H
  T+ O3 |" ^( R4 l  StepStatus               设置确定和应用按钮什么时候高亮 (Required 必需的时候)(Optional 可选的时候)(Satisfied 满意/满足的时候)
; b; R# E, D* W. K9 |; \$ Y( }6 D& M  Tooltip                  动态提示文本标题(Bitmap指定图片时,鼠标移动到图片时提示文字)- y8 a0 M2 q. D1 U1 [3 M" g% [8 s8 Y

! X" M$ F4 i: C4 ?4 [& I1 }————————————————————————————————————————————
8 y3 T) H( @3 u9 Z6 h% l: P; v$ k* F————————————————————————————————————————————; M2 [7 `6 [/ m6 I: t
咧子:获得selection0控件选择的对象
& q0 t5 t5 V1 w8 y+ i% s- ?, l      UF_initialize(); * R% O; H& R) {9 v6 ^
      std::vector<TaggedObject*>objects=this->selection0->GetProperties()->GetTaggedObjectVector("SelectedObjects");  Q" O, r: h% P; a/ U0 D
      for ( int i=0;i<objects.size();i++) // size 列表长度,这里指的是 对象个数: B) E# V. R. b! F
      {      2 @9 x$ I8 O# N: E& q$ \, f
         UF_OBJ_set_color(objects[i]->Tag(),1);
/ E' n5 k; g% n: ?% l      }" ~% a! G0 @! C9 p
      UF_terminate();6 t# n& V8 h  y
, `- W& x: |" t- ?! C
————————————————————————————————————————————
: A% z" t9 D( L咧子:对象加入到selection0选择控件的对象列表0 |7 k! A- s5 s/ |% n: [$ J

3 X( j7 w5 t. P/ ^      tag_t obj=NULL_TAG;
0 p9 W+ V1 ~0 K2 P8 `- X; e      double point[3]={0,0,10};
/ Y8 m) Y7 ]- b( d3 h' u      double XYZ[3]={60,50,80};
5 u/ i: X0 X* C" T7 M0 F  k* e5 }- V      char C[132]="";4 g: d  q. C( P0 \; ?
      char K[132]="";
" }. \: A' l3 n7 z8 ?+ Q      char G[132]="";
( v4 q, T7 N6 y, u0 c      sprintf(C, "%f",XYZ[0]);! l# e9 ^/ p1 L2 E% q
      sprintf(K, "%f",XYZ[1]);
9 I# M4 k( |" c7 H5 ]# ]; ~      sprintf(G, "%f",XYZ[2]);
. H! j7 u# |2 F0 h4 [+ Z( t  S      char * edge_len[3]={C,K,G};4 v" A! }8 C3 p1 z: Q2 Q2 |+ s
      UF_MODL_create_block1(UF_NULLSIGN,point,edge_len,&obj); //创建方
# S2 x7 Y, ?, N& l# B      UF_MODL_ask_feat_body (obj,&obj); //从特征中取出实体
, B  }5 F' L. C' l2 m7 r; [  _$ d% I! f# f4 ]
      Body *body1(dynamic_cast<Body *>(NXObjectManager::Get(obj))); //tag转换给nxopen
& y. S" o& v, O+ a# m9 x: H      std::vector<TaggedObject*>objects;
+ {: D7 ]3 G; Z2 N: d, r$ n9 {      objects.push_back(body1); //对象加入到selection0选择控件的对象列表
3 Q& ]. n: F/ G      selection0->GetProperties()->SetTaggedObjectVector("SelectedObjects",objects);
! n9 I; d# ?$ W$ x1 R————————————————————————————————————————————' o5 |, r' W3 Y; S+ q
* K" C: P1 r, x" B
//清除对象
. ~% a, v6 {+ istd::vector<TaggedObject*>objects;4 ^+ F' D2 s% L/ H* I. A4 s
objects.empty();
4 t; K8 q4 X" g" D. K* D% |' g9 zselection0->GetProperties()->SetTaggedObjectVector("SelectedObjects",objects);
2 u8 \. x, _) P  \6 K0 C1 @4 s+ u+ f; o
————————————————————————————————————————————
7 b, y# u' W8 q4 E咧子:只选择面6 X& U. X' A' c
        initialize_cb() 初始化里加代码 或 dialogShown_cb()显示对话框里加代码 可进行对象选择过滤
% X1 O, @( @8 R, Q
3 ?: l: _# m6 h7 O        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式8 d/ G  T- f, f1 i' k, s& F
5 K! t: f# n5 @7 A$ d* C5 S) g
        //对象选择过滤 只能选表面
; a% M, J. t+ k! q        selection0->GetProperties()->SetString("LabelString","选择表面");
5 w) o2 n7 ^6 n- Y$ M3 b1 M        std::vector< NXOpen::Selection::MaskTriple > maskTriple;
4 ~9 u7 V9 l# O9 P$ g/ H1 H        Selection::MaskTriple mask1(UF_face_type,0,0);
8 @9 H# l  V/ ?( {6 y8 {5 l        maskTriple.push_back(mask1);
- a. ]; v2 r8 V0 ?' `0 p7 V/ B        selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);6 w+ D1 p8 K1 p% m; O, s
% j9 {9 N3 x; \. {
+ L: f: u, w" o' h( w
咧子:只选择面 【UG本身过滤器跟着变】2 ^. g: E5 }: n  ?$ l! T
        initialize_cb() 初始化里加代码 或 dialogShown_cb()显示对话框里加代码 可进行对象选择过滤   
$ Z% G" m2 Y" K& F/ Y- e! L3 O) W; n9 }1 D. |2 ?
        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式
7 s" L/ K: J# V. Z, B6 W- E' A6 k% s! y; v: b* g
        std::vector< NXOpen::Selection::MaskTriple > maskTriple;
5 R) K: R& M3 [: ~0 X        Selection::MaskTriple mask1(UF_face_type,0,0);
1 b8 d9 i$ g2 t9 B/ L" _, i        maskTriple.push_back(mask1);8 D7 C5 ], q1 R5 Q* L7 f
        NXOpen::BlockStyler:ropertyList *selComponentProps = selection0->GetProperties();, S" [9 c, ?+ w( R* x
        selComponentProps->SetSelectionFilter("SelectionFilter",Selection::SelectionActionClearAndEnableSpecific,maskTriple);, L6 _6 E/ I. i, E5 ]9 E
        delete selComponentProps;# h) N; f3 g2 N4 M
        selComponentProps = NULL;
8 c4 P) c3 L- t6 e% M. D0 n% n8 }+ F0 X/ 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

列子
' X% ^3 V( l2 b( ^) D5 D  Q' `  W3 x5 Y& }! P
————————————————————————————————————————————+ o, x6 h" N: m% w3 m0 h: ]8 n
————————————————————————————————————————————
8 {2 q* U1 s7 l& h4 n: [$ X7 i3 X咧子:只选择 实体边缘 直线和圆弧
/ G( \0 h* n- o
. H  n$ a! U. I, u, ~5 N  initialize_cb() 初始化里加代码 可进行对象选择过滤
  e$ V& e$ H2 z" O" G* m# g1 x3 n) {2 e0 ^( R
        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式
5 x0 Z* h8 ]" `" j                        selection0->GetProperties()->SetString("LabelString","选择边缘");//只选择 实体边缘 直线和圆弧8 V6 W* ?5 j$ T+ w0 ]6 |9 L
                        std::vector< NXOpen::Selection::MaskTriple > maskTriple;
; |  t" e8 k6 V5 f: ?* T9 g0 k8 E                        Selection::MaskTriple mask1(UF_solid_type,UF_solid_edge_subtype,2);5 A. A1 K1 |  `) W% j
                        Selection::MaskTriple mask2(UF_solid_type,UF_solid_edge_subtype,3);
, q* ~+ l) [' F  }; l; G                        maskTriple.push_back(mask1);8 a" w8 j0 ]# x+ m3 G
                        maskTriple.push_back(mask2);
7 `# b' m( O/ v                        selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);* T$ x, z; d: Y" n  f
9 P9 j  Y; _3 t& x0 a8 Z: ^
//过滤无效的边缘
; _' ^( x0 E2 o. E  h: }, Fint ML_NX001::filter_cb(NXOpen::BlockStyler::UIBlock* block, NXOpen::TaggedObject* selectObject)( X% n0 }- u6 D2 N* z/ A  M3 C0 W
{       
- N' j5 J$ P0 m( r( E9 }) ^3 }( A1 h" ^    tag_t obj=NULL_TAG;
+ Z1 a6 M, O2 y, @2 l    UF_MODL_ask_edge_body(selectObject->Tag(),&obj);
: h" Y0 X$ h) ^* O7 V6 Z. b( K    if (obj==NULL_TAG) return(UF_UI_SEL_REJECT); //不加入到对象预览列表" Y' p- q0 l7 y0 F
    return(UF_UI_SEL_ACCEPT);                    //加入到对象预览列表
5 ?* R6 x; T. g7 \7 Q$ \}
8 B' Z* w) t0 W6 p4 j7 {————————————————————————————————————————————* N& U7 k3 X0 j& Z$ P6 y4 T
————————————————————————————————————————————
3 \  B" N5 Q: E咧子:通过枚举控件选项来 时实  分别过滤 边缘、表面、实体
3 R9 y3 v5 G7 J' B
; q# B, z9 s& D/ |4 F8 V2 ?& H3 ^   int enumValue = this->enum01->GetProperties()->GetEnum("Value");
: E; g3 \! X" F% n6 h; U# Y) m+ D. ~                    if (enumValue==0) 7 e; I6 ?# B9 H
                    {5 I% c* n( t' Q8 C( P4 p
                            selection0->GetProperties()->SetString("LabelString","选择边缘");4 n. q; l- [2 \( |
                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;+ h3 F/ _" s/ ?/ h6 @. h
                            Selection::MaskTriple mask1(UF_solid_type,UF_solid_edge_subtype,2);5 J; M" o) W2 o$ `1 K, ~9 w" X
                            Selection::MaskTriple mask2(UF_solid_type,UF_solid_edge_subtype,3);) p! K# f) g7 ]  P# T) T
                            maskTriple.push_back(mask1);/ L: b$ n( A  o7 v
                            maskTriple.push_back(mask2);
) ~* H+ T$ J& X& V& J  K; |                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);  ]# f3 ^: o4 x0 ]# a1 b
                    }8 D2 F, U0 f$ q
                    if (enumValue==1) 4 G! X+ k: R+ {0 g' I) @" c  R8 ?
                    {
, y% ~7 E" U& b; L/ W                            selection0->GetProperties()->SetString("LabelString","选择表面");
% L4 _% n# k' {, q                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;( b& E) G6 x7 u
                            Selection::MaskTriple mask1(UF_face_type,0,0);
' J. y1 F7 G# I! ~                            maskTriple.push_back(mask1);
+ j" h; j' v/ h5 I! S- W                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);
/ s8 M! |) u3 a& c) x# g* _                    }
6 z, r% q* `6 L( z                    if (enumValue==2)
5 O& P4 d2 v4 X* l7 N2 a                    {
; J3 v7 {2 Z+ X8 p7 D; u( g                            selection0->GetProperties()->SetString("LabelString","选择实体");
& W5 X0 W7 ]$ h% x                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;
* y$ q$ c& s/ B( G$ Z                            Selection::MaskTriple mask1(UF_solid_type,0,0);
/ g; X7 \* n1 s1 _8 v                            maskTriple.push_back(mask1);
+ F4 N" m/ ~6 D6 W* E4 L- S/ G                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);' C0 p8 X( X- Y  i% G; f
                    }  [& k" P4 y# U

) l8 p6 t4 t7 t0 c$ a4 X: C5 q9 Z* s+ d
//------------------------------------------------------------------------------: P% R  O- {9 I+ G) V
//Callback Name: filter_cb 过滤不符合对象+ G2 Y. b2 l4 w6 i( r# d% o% Z  N, o
//------------------------------------------------------------------------------
. ?( W7 ]# |" P6 A" E5 _int ML_NX001::filter_cb(NXOpen::BlockStyler::UIBlock* block, NXOpen::TaggedObject* selectObject): L2 E2 H8 h- G  ^0 O, [2 G' ~
{3 Z% E4 V# [5 P7 Z/ E7 J
        
% l+ P* h7 G; `, k) m/ `# J        int enumValue = this->enum01->GetProperties()->GetEnum("Value");
; U& i0 w) D- i) l" t        if (enumValue ==0). ?4 u8 x8 W8 E  C: ^- M+ n
        {
, m) I2 ?$ o3 w$ E5 l2 J                 tag_t obj=NULL_TAG;
& @  m# w6 R- n. V  L6 q+ J                 int err=UF_MODL_ask_edge_body(selectObject->Tag(),&obj);
* E/ k- C. j5 i- p' J                 if (err!=0 && obj==NULL_TAG); r, c3 ]1 h, O+ m) F/ f$ I! H
             return(UF_UI_SEL_REJECT); //不加入到对象预览列表0 a0 S( ^$ T$ K' x. X
        }
! q! f! H4 Q% q% z( L) e8 m( n        else if (enumValue ==1)
; K& q: `$ J% ?: O        {$ |4 i- k, |) w2 h) J
                 int type=-1;4 c9 U4 M1 Q  U) R, S! W: V
                 int err=UF_MODL_ask_face_type(selectObject->Tag(),&type);
/ w0 G* B( u. I# Y                 if (err!=0 || type==-1)
! N! a' e, o4 D% D- o% Q             return(UF_UI_SEL_REJECT); //不加入到对象预览列表" W$ N6 s, v" O
        }
2 Y) G3 {: G  s- I2 m        else if (enumValue ==2)( b* [5 a8 S* h/ k/ ~% F
        {
/ K8 \9 g: l3 E- z7 ^7 y$ S; `( `9 Q                 int type=-1;5 ~4 C8 J. c7 Q7 @1 T% ~$ ^  j# d! Y
                 int err=UF_MODL_ask_body_type(selectObject->Tag(),&type);
$ ?# f9 z4 T+ F  o/ N" V, h; m                 if (err!=0 || type==-1)! L8 P5 [7 w$ a/ C6 S. ^
             return(UF_UI_SEL_REJECT); //不加入到对象预览列表; _1 l; ]/ l+ K: h; T
        }
, S' c! h" u; B7 k' e
' X7 ]% J; ?  Y        return(UF_UI_SEL_ACCEPT); //加入到对象预览列表2 b, ]9 z: M8 }9 T
}& E2 B8 {2 F# l7 p0 n+ _; y) t
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了