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

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

[复制链接]

2016-12-12 12:24:54 6213 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, k2 w0 H0 D0 g3 B& P+ [( s0 F
* P- i% M) x/ t1 c' E: e2 s捕捉
8 k. u0 D" \% S7 m4 c  PointOverlay             是否显示捕捉点) d* J4 n- {4 r3 y
  SmartUpdateOption        智能更新选项
" ~* X$ ]0 Y. u7 a                             Within Modeling   在建模
; `3 x$ N" T/ D1 i2 e8 {                             After Modeling    建模后5 U( {. M' R6 s
                             After Parent Body 实体父后
6 k6 h% L) }; g8 ?  Y                             Mixed             混合
  x6 I; D. K; I, Q0 W, w! v! I" D4 U- q0 D0 a1 Q
  SnapPointTypesEnabled    设置捕捉点类型的可见性
% Z1 O+ X$ s+ m& q! B1 e$ R  SnapPointTypesOnDefault  设置捕捉点类型相关的内容被启用0 A& f) S5 A( y+ f# P3 c+ P, j

: e4 l' Z: j) R常规
* k8 U" l8 Q& a! b  BlockID  控件id- }/ P/ k" u- `- S- e' x
  Enable   是否可选/禁用控件+ m$ p" l7 F. d5 ]' ~
  Group    组) I% p# C+ d5 o# r' F% w/ e
  Show     是否可见
4 o2 o: P1 b6 i: L% w/ S# z; y5 p  P# D
其它
4 F& E! E* P3 _0 F  附着
2 o; [/ y# w* R: _; T+ t: R    Bottom  底8 k" P2 o. Q+ a. [9 W; g+ {
    Left    左
* [. O; w$ O  _; K% L6 \* i    Right   右/ ~4 V" n$ I) M! K  ?7 G4 K5 s  s
    Top     顶2 C/ F9 K9 s/ j) C9 d. ?- D

, t& q7 z/ {7 T8 s- Q$ V特定于块, F& A) G! d: X9 A$ y4 q$ H
  AutomaticProgression     选择后焦点是否自动跳到下一个控件
1 f2 z, k) d; Y5 r- O) i4 V; Z  BalloonTooltipImage      动态提示图片(鼠标移动到控件是显示图片). W0 m1 Y: \( [8 t# w7 O+ C' y6 ]
  BalloonTooltipLayout     动态提示布局4 h) c. N  O" w- w9 v1 K* h0 l% H
  BalloonTooltipText       动态提示文本内容& v& ~! a2 w. f" M
  Bitmap                   指定图片
- `1 r! M' g8 {1 ?1 q* e* x  BlendVirtualCurveOverlay 是否显示虚拟交线
# ]% s, C" ~' y# b7 j7 L" }  CreateInterpartLink      是否显示部件间连接图标在选择条上
$ W4 Z4 f& `  o  Cue                      提示
4 A' R) y3 [# ^2 ?9 W0 U8 G% |" n0 p. z7 _- ?
  InterpartSelection       部件间选择设置& G4 _8 |% D9 y1 z9 |
                             Simple                                           简单1 |' W- O8 O, [8 H  [
                             Non-associative Interpart Copy Only              只复制部件间非关联
  b& ^# H% }. T% F( I$ Q! f                             Associative and Non-associative Interpart Copy   复制部件间关联和非关联4 j; r( M( q) K% K# J$ x" s, C* Q9 g- T, v
                             Associative Interpart Copy                       复制部件间关联
( Q' ~' ]+ c% ]/ F6 q! `5 J+ j/ I
8 x- c/ \' o) a" G( o$ |  LabelString              标签标题
  T/ b) Z  N/ N" y3 }  MaximumScops             设置选择范围
  M& d* M  o  H- q6 H                             Entire Assembly                 所有组件/装配
, b4 G+ C3 x9 W! e9 F                             Within Work Part Only           只是工作部件$ m; h9 @( h# [0 `
                             Within Work Part and Components 工作部件和组件/装配)
) f+ _$ ]- E5 {3 v' ?; p8 P0 L2 x* P7 J( F, ?( ]
  SelectMode                设置单选/多选
7 t* M# }9 u2 r# t# n                             Single   单选8 K$ H  A+ N" e, X9 Z
                             Multiple 多选
3 S' N9 W, F% X( v* q6 {9 l# w% }! X% I: C2 }' W
  StepStatus               设置确定和应用按钮什么时候高亮 (Required 必需的时候)(Optional 可选的时候)(Satisfied 满意/满足的时候). D; H# B" b$ H4 M% |5 |
  Tooltip                  动态提示文本标题(Bitmap指定图片时,鼠标移动到图片时提示文字)
  P4 q3 X% |, o! y& F
/ Q* @; o1 L* W8 m! y4 O, j————————————————————————————————————————————
( z. ^1 w( N0 c, E) F: X————————————————————————————————————————————5 Q* i4 `& k' U% b- [
咧子:获得selection0控件选择的对象
9 H) W$ V  Q, G2 A9 C3 c1 V      UF_initialize();
! j7 d2 Z7 J/ e& {      std::vector<TaggedObject*>objects=this->selection0->GetProperties()->GetTaggedObjectVector("SelectedObjects");
% I9 W" Q; ]+ w. e1 S3 [+ L5 ]      for ( int i=0;i<objects.size();i++) // size 列表长度,这里指的是 对象个数; A' D; ]& S0 W$ m3 s% d
      {      9 v' M' h3 A9 ^$ X9 {- i
         UF_OBJ_set_color(objects[i]->Tag(),1);
3 @; H* Z& g1 A, [& Z9 k      }
0 U' ~/ c( w( r6 L! p- v5 b      UF_terminate();8 S1 r2 g, r6 ~2 X; R
' [' t8 W& }, w1 r+ N* D
————————————————————————————————————————————* d5 X7 O! Q) E6 Q' y' K, t; h
咧子:对象加入到selection0选择控件的对象列表3 h- G* r% O5 g# z

# L+ V; r: Z& x0 @- Z8 ]      tag_t obj=NULL_TAG;
7 T) |8 e$ H" V0 X, Y9 x      double point[3]={0,0,10};
* F& d( K: O* Y$ k      double XYZ[3]={60,50,80};
/ \1 Q4 q$ V6 ^9 x      char C[132]="";+ |. ^- R2 L6 \4 j# \
      char K[132]="";
+ d$ P  I( }. b; {6 d) a      char G[132]="";
) |% P& O: h1 c( u3 I& D1 q      sprintf(C, "%f",XYZ[0]);
+ ~& U7 C2 P- J2 J1 o      sprintf(K, "%f",XYZ[1]);
, g! y8 E. X" d& w- E$ k      sprintf(G, "%f",XYZ[2]); 7 q0 ?5 U" x& u
      char * edge_len[3]={C,K,G};. N0 N. W$ }: E- Q6 N5 o& p
      UF_MODL_create_block1(UF_NULLSIGN,point,edge_len,&obj); //创建方& ]9 @1 b3 P" V( d. c/ [
      UF_MODL_ask_feat_body (obj,&obj); //从特征中取出实体+ g4 h  X3 U: D6 U' s9 F

9 y0 S  o/ e/ M8 t+ O8 E      Body *body1(dynamic_cast<Body *>(NXObjectManager::Get(obj))); //tag转换给nxopen
$ b  G. d1 J0 T3 A      std::vector<TaggedObject*>objects;
! m  t! H- w$ ^! g( G      objects.push_back(body1); //对象加入到selection0选择控件的对象列表
" m; V& U7 Z! E( N0 B* b, J      selection0->GetProperties()->SetTaggedObjectVector("SelectedObjects",objects);
2 ~# M  E; i& K/ Y5 {. \2 }8 o& T————————————————————————————————————————————7 K6 B* m* l5 [3 x
  l' v; M/ |' U  t1 ]
//清除对象
" u: r# @' n9 w+ Wstd::vector<TaggedObject*>objects;
9 m+ [2 m* d$ F! ]+ ^objects.empty();# u9 y& @. j# ^+ y! K
selection0->GetProperties()->SetTaggedObjectVector("SelectedObjects",objects);% x# [0 K! v3 g) m3 }
, O0 f! g. g" T& I2 i1 y
————————————————————————————————————————————
: ^- O- {8 L: J/ {& w9 `咧子:只选择面2 l9 b8 P3 L' Q
        initialize_cb() 初始化里加代码 或 dialogShown_cb()显示对话框里加代码 可进行对象选择过滤9 X: m# V% x( P4 g) |, ^
6 A2 B1 h( g% m; @. w0 i
        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式
3 z3 \) _0 F0 T  k; `
7 V* b% b. S/ W  a* m        //对象选择过滤 只能选表面
" w; `  v& ?$ l+ D7 H' i. ^( j        selection0->GetProperties()->SetString("LabelString","选择表面");
' R9 `: w  [0 v        std::vector< NXOpen::Selection::MaskTriple > maskTriple;
" h, i) F# E; |        Selection::MaskTriple mask1(UF_face_type,0,0);
2 u# X4 B' B# m+ B2 O        maskTriple.push_back(mask1);
) E# |0 N' H9 r- D        selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);  R6 P9 S! u' f6 C2 |  u: t8 R) \

" u% b. p/ P; F! m. b2 C, `* v7 r$ s) H
咧子:只选择面 【UG本身过滤器跟着变】; ]( n. V& q' N2 [/ I
        initialize_cb() 初始化里加代码 或 dialogShown_cb()显示对话框里加代码 可进行对象选择过滤    5 l9 f+ ~7 C' B+ b3 b3 O

, R  m$ W! _+ K+ }0 O  l; O        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式
0 ~( K" C& I* b4 W" K2 z5 t. O' {: ^
        std::vector< NXOpen::Selection::MaskTriple > maskTriple;6 \0 t. }/ P7 e
        Selection::MaskTriple mask1(UF_face_type,0,0);
: Y: J4 f7 G9 U3 T) P+ w" R7 s        maskTriple.push_back(mask1);
) T* I$ ?: ^1 t7 R' G& ^        NXOpen::BlockStyler:ropertyList *selComponentProps = selection0->GetProperties();
, g9 u8 N; H; K0 E$ j        selComponentProps->SetSelectionFilter("SelectionFilter",Selection::SelectionActionClearAndEnableSpecific,maskTriple);7 a! S  \; s: R4 t# o$ ~. }
        delete selComponentProps;0 }1 Q- _! E; g/ D1 g) [
        selComponentProps = NULL;
1 ~! [  d% T# y
9 y" z7 X. j# P: c
上海点团信息科技有限公司,承接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

列子* ]8 q; H; k( d/ E' I
, B6 b- d2 ^7 w
————————————————————————————————————————————
' m$ v' m3 v1 T& L2 W+ H5 l7 K————————————————————————————————————————————
) E% S2 T3 R$ C4 H  `咧子:只选择 实体边缘 直线和圆弧
1 \! q: `8 D( w; o/ l# G. U# L, C9 H& Z
  initialize_cb() 初始化里加代码 可进行对象选择过滤
" \( N, C5 Z8 e: w' f8 X, }) }* ?/ l
        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式
; i6 P5 `7 v' P1 ]& [) t6 v: ]                        selection0->GetProperties()->SetString("LabelString","选择边缘");//只选择 实体边缘 直线和圆弧+ x* Y5 G, m6 o/ x( S* s6 `7 y
                        std::vector< NXOpen::Selection::MaskTriple > maskTriple;" Y4 y% j/ U/ ~# \
                        Selection::MaskTriple mask1(UF_solid_type,UF_solid_edge_subtype,2);
" T. L. U' q5 t" E' r                        Selection::MaskTriple mask2(UF_solid_type,UF_solid_edge_subtype,3);! J5 ~  n9 }* E$ O
                        maskTriple.push_back(mask1);
; q& C6 F+ E8 Z' L. ]% j                        maskTriple.push_back(mask2);
. y' [# C# b' P, w2 e- w                        selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);; I4 j1 d6 U0 t. L" V2 _
/ c' ]# j6 L0 V6 U0 `) V1 y
//过滤无效的边缘6 x) F! I- Q7 r/ f( w; K1 \; o
int ML_NX001::filter_cb(NXOpen::BlockStyler::UIBlock* block, NXOpen::TaggedObject* selectObject)
9 q  q) Q! N7 U; t$ ~" ^9 |{        * u* B+ i8 S( y7 z
    tag_t obj=NULL_TAG;1 e$ Z7 W) R. \+ |' F+ g3 s6 s- H
    UF_MODL_ask_edge_body(selectObject->Tag(),&obj);* l2 n# t8 ?% H3 o. m. B! e
    if (obj==NULL_TAG) return(UF_UI_SEL_REJECT); //不加入到对象预览列表( Y3 @- w, V- t, s2 M3 s
    return(UF_UI_SEL_ACCEPT);                    //加入到对象预览列表% z: i: _* o2 h! \6 X: x) t( _
}1 n6 _" f) B6 b/ p0 i+ |) E
————————————————————————————————————————————% m6 W. l7 Q1 y1 b7 a
————————————————————————————————————————————
/ s6 C4 c% ~3 m3 X# C% l咧子:通过枚举控件选项来 时实  分别过滤 边缘、表面、实体. G: v* H+ k7 N# K# A8 I) o
& \  w! j8 K& Y: Z  r% Y
   int enumValue = this->enum01->GetProperties()->GetEnum("Value");# E- Y# z8 L0 e5 F% h1 t8 x. i& {# g
                    if (enumValue==0) 6 b! Z/ n' n: q% c
                    {
3 Z' l1 ?' @4 m5 m% k; g6 H2 ^, k5 f                            selection0->GetProperties()->SetString("LabelString","选择边缘");9 w% i7 {" t1 g4 Y) i: K0 v# \# S
                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;2 A1 s+ C' B, n3 U# O
                            Selection::MaskTriple mask1(UF_solid_type,UF_solid_edge_subtype,2);3 E. i/ W: _3 V- M" q
                            Selection::MaskTriple mask2(UF_solid_type,UF_solid_edge_subtype,3);
/ `, _! k0 S/ D: ]                            maskTriple.push_back(mask1);+ X3 K. g2 B2 D1 n% m+ J
                            maskTriple.push_back(mask2);2 q9 t+ N) v) T& M! T
                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);
& S- E: i$ H7 g! A' g6 T                    }: X9 k! O, e6 x! \: x9 J
                    if (enumValue==1)
4 a7 U: [( Y$ x                    {
2 u. L+ n* N9 i# z5 ]' J6 X) x( {) E                            selection0->GetProperties()->SetString("LabelString","选择表面");
# q$ F5 K2 u+ l7 t+ J) l                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;
) i. g/ F' H4 ~" T" t                            Selection::MaskTriple mask1(UF_face_type,0,0);7 J1 U5 E% i/ d/ X& Y% E
                            maskTriple.push_back(mask1);1 _, u4 k# f- z7 D/ m. p
                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);* _9 W& u, k) s; H7 W
                    }
1 W: `0 k$ @: @8 C. ]4 v                    if (enumValue==2)
6 }, G7 W, L: F+ y6 |                    {
- Y9 d0 O" t. s5 {9 s/ _                            selection0->GetProperties()->SetString("LabelString","选择实体");# ^; }5 J% g5 H5 X6 p/ u
                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;
% [* i4 x8 L" s8 k3 P3 M+ ?+ G                            Selection::MaskTriple mask1(UF_solid_type,0,0);! F, l: X% v" k0 b& ?
                            maskTriple.push_back(mask1);
4 {% H% k' h: z8 I( x, B/ h0 \1 b: I                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);
( `* ~8 @$ G& P, m5 E0 d. l' _                    }9 _5 k3 a/ I3 l. @' a# P: O
' E+ P1 ^# m8 X6 [7 L& Y( M

- N. P8 B% d2 O$ {- S//------------------------------------------------------------------------------* G- @( f  k4 x$ X* {$ R5 u# k1 v
//Callback Name: filter_cb 过滤不符合对象7 _! b0 e( v& t* e
//------------------------------------------------------------------------------
! u' S2 w: d+ O* ~5 ]2 Gint ML_NX001::filter_cb(NXOpen::BlockStyler::UIBlock* block, NXOpen::TaggedObject* selectObject); Y/ L1 }4 \4 k; j( O
{" _7 L$ G6 I5 ]( L' U' k7 g
        
( B$ i! b5 W/ }0 ?% e4 ^6 D1 s        int enumValue = this->enum01->GetProperties()->GetEnum("Value");
  Z+ x2 l0 ]! w; m  r& R        if (enumValue ==0)( {- j$ R" H" M2 C
        {2 j) M  A2 G! l6 `) d' V' a3 I
                 tag_t obj=NULL_TAG;
' O5 h* ?0 H! S3 h3 I                 int err=UF_MODL_ask_edge_body(selectObject->Tag(),&obj);
" d, y9 m; |- V/ ^! }" X) f2 k                 if (err!=0 && obj==NULL_TAG)3 N; Z! q/ F) E0 \) F6 i: [' W
             return(UF_UI_SEL_REJECT); //不加入到对象预览列表
8 i8 Y9 G  l- x' N2 d0 d* N        }
2 u# P3 f& p( j3 ~  a* v6 j        else if (enumValue ==1)" U( w/ D; K5 Z: e( c7 {7 u7 w) A$ N/ Q
        {
0 v5 S. t( }! Y! k                 int type=-1;
- J, \: T$ \3 k                 int err=UF_MODL_ask_face_type(selectObject->Tag(),&type);
# N# }  u) [! h$ q4 G7 U) W4 a                 if (err!=0 || type==-1)
, u$ c0 v% v3 j0 q$ W/ j             return(UF_UI_SEL_REJECT); //不加入到对象预览列表% j1 J1 a( I' M
        }4 U2 N# W- Z1 r# m" y
        else if (enumValue ==2)
4 F& N! J1 {; o" @# ]- m  a        {: K! ~2 S4 ?0 {1 t, ]# P$ N
                 int type=-1;; D! A7 G$ k# L2 _
                 int err=UF_MODL_ask_body_type(selectObject->Tag(),&type);( h# X: n7 C- j2 s
                 if (err!=0 || type==-1)
. `( U- a& [$ p" {+ B% r& r             return(UF_UI_SEL_REJECT); //不加入到对象预览列表0 T% y  A, p2 L: Y  Z
        }' h( Q* ~8 D5 Q' ^% i; Z5 w! _

* H' n+ N0 f; o3 T" L/ A6 m  [        return(UF_UI_SEL_ACCEPT); //加入到对象预览列表
1 K# e4 ]% L: K1 l) n* D}
1 t) ^( P" d7 x7 [
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了