PLM之家PLMHome-工业软件与AI结合践行者

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

[复制链接]

2016-12-12 12:24:54 6273 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、选择对象
4 L8 ?/ Y- L5 s  v  B$ |8 O' W) s  B* T
捕捉
% v- J; k7 ?3 [" Y) l8 X) R2 J4 O  PointOverlay             是否显示捕捉点, e# z6 b: `# n; t$ ?
  SmartUpdateOption        智能更新选项
2 q0 B6 g! P# s. [7 r                             Within Modeling   在建模
+ m6 |. i0 z: m! R' i                             After Modeling    建模后
5 u" ^1 n# k/ K9 ]4 P, A! E                             After Parent Body 实体父后
: }5 g" \. r) d8 Y4 N8 H% W                             Mixed             混合
: p+ Y' v# `5 y' ^- c( \& b( O2 G3 b3 T
  SnapPointTypesEnabled    设置捕捉点类型的可见性$ O+ L! t* t1 b9 A% g
  SnapPointTypesOnDefault  设置捕捉点类型相关的内容被启用
' n, l4 B* e" @- M, O9 `! j+ u  M+ }4 m- e+ ^" s- w
常规
# R# H+ a! N( D5 t  BlockID  控件id( U6 ?# u3 j* F
  Enable   是否可选/禁用控件
: t  x* O! K) [- a) z  Group    组
# C1 `  i$ p2 Z0 U* E  Show     是否可见1 M8 t4 x3 `& z" q4 F; m( z

1 C# S, O' C  f. a# u" V7 f其它
+ k. m. U0 `  Z, k  附着
$ H" f( A1 a) d" U$ U% u# K    Bottom  底
. [+ M# V9 |# R6 e% h& Y) j# k    Left    左; \1 h& K( u% h) @4 H1 V3 J
    Right   右4 s0 ^2 L8 |. i# a8 y" Y3 W/ g
    Top     顶
* q4 {$ s4 d( V4 ^& N; H0 h2 i- c  I: n8 ]
特定于块
5 w' q: P0 r4 [( p5 s( E, Y4 S  AutomaticProgression     选择后焦点是否自动跳到下一个控件
1 V  _: M! b3 E9 r; S4 i  BalloonTooltipImage      动态提示图片(鼠标移动到控件是显示图片)1 s7 D' ]: D# G8 J& P7 u
  BalloonTooltipLayout     动态提示布局
: E: H; x7 G$ x" Z3 G3 C$ _  BalloonTooltipText       动态提示文本内容
- L- c6 t; Y" e* F9 p  Bitmap                   指定图片
' K% _! M$ X2 I6 v8 K  BlendVirtualCurveOverlay 是否显示虚拟交线9 s9 k% r+ W. n- |& R% M0 ]# ?" X
  CreateInterpartLink      是否显示部件间连接图标在选择条上
1 E. B4 U$ e, H- F5 L. g) N. c  Cue                      提示% x: C! a  H& y/ @: ~- q8 @
" H; d2 P0 Z: z1 e. \3 w6 u: L
  InterpartSelection       部件间选择设置
* n- n% l5 |: f6 ?% h                             Simple                                           简单9 L8 n2 T- v+ _* O$ @" z/ M
                             Non-associative Interpart Copy Only              只复制部件间非关联2 C& \; _& q* X& G
                             Associative and Non-associative Interpart Copy   复制部件间关联和非关联
/ P/ Q- J' c! s% J( D# C' S! E                             Associative Interpart Copy                       复制部件间关联9 |1 R( b+ e4 b4 c  Q! R4 L

; y( S- }1 A& D9 H, u  LabelString              标签标题
7 {3 a: c4 E3 @# n& z' L& S* d. T9 U6 V  MaximumScops             设置选择范围8 U' V6 F8 Z/ {' a3 h
                             Entire Assembly                 所有组件/装配  k; w4 c! I8 \4 M  [
                             Within Work Part Only           只是工作部件! f, W# F. ?$ p' ]
                             Within Work Part and Components 工作部件和组件/装配)
! w. C( {. D* B5 i7 Y3 ^+ K& j6 N& A# a- B  }2 |
  SelectMode                设置单选/多选 9 N- D4 Y/ Z! z* S' F
                             Single   单选& X( n! R. J, P5 X) G6 F! l
                             Multiple 多选1 I- [3 j8 Q! F! ?$ a8 m4 d3 b
2 x# |3 s+ O# E0 b& \
  StepStatus               设置确定和应用按钮什么时候高亮 (Required 必需的时候)(Optional 可选的时候)(Satisfied 满意/满足的时候)' I) J8 l+ h5 r: N
  Tooltip                  动态提示文本标题(Bitmap指定图片时,鼠标移动到图片时提示文字)
: _( C. u: j0 X, T' I) G+ y$ C; D6 k
2 J, u3 g* ^$ l& B5 w# [————————————————————————————————————————————
6 S9 p# B4 Y, _————————————————————————————————————————————
/ r7 l5 O4 A3 k咧子:获得selection0控件选择的对象/ a, W1 P. }) h5 |1 i
      UF_initialize();
! M2 m7 U2 {  V/ x3 e0 i- @3 C      std::vector<TaggedObject*>objects=this->selection0->GetProperties()->GetTaggedObjectVector("SelectedObjects");
. [5 \1 {+ X4 p& K      for ( int i=0;i<objects.size();i++) // size 列表长度,这里指的是 对象个数
7 i/ P/ F. ~0 S- _8 Q' h1 j6 U- ?      {      / Q9 y4 [' R! r$ U2 n  i" x+ ]
         UF_OBJ_set_color(objects[i]->Tag(),1);! q5 g6 c  F9 Y& X1 \% `, b
      }8 Z- n" @3 P3 _$ u$ B
      UF_terminate();$ A  s! x% [8 K  o" D
9 @5 d4 j4 n' [1 B% e" R/ j
————————————————————————————————————————————9 F) N! P1 A3 @) K1 q) m; |
咧子:对象加入到selection0选择控件的对象列表
& k& F7 w) ~- Z, I- H7 b
( W2 p, r+ r9 ?4 R6 Z+ n      tag_t obj=NULL_TAG;
3 ^9 v$ H+ v: Q. d& b/ h8 }/ J      double point[3]={0,0,10};
' r& I% V2 g/ ^  X      double XYZ[3]={60,50,80};
, \+ F1 T% b& z" @) A- r      char C[132]="";' X$ F0 o$ i5 v
      char K[132]="";
8 {; d% ?  k& Q1 Q/ w1 Z      char G[132]="";
8 A! K4 d" Z9 j; ]      sprintf(C, "%f",XYZ[0]);
( ^6 c7 i9 y" Y: p; [      sprintf(K, "%f",XYZ[1]);
+ T0 g" p. V$ w6 w+ B$ L      sprintf(G, "%f",XYZ[2]);
1 H8 K) b! q: A+ U  L3 f      char * edge_len[3]={C,K,G};
, {  e5 W+ h! N6 _      UF_MODL_create_block1(UF_NULLSIGN,point,edge_len,&obj); //创建方
  ]9 E1 a4 C/ o7 z4 A      UF_MODL_ask_feat_body (obj,&obj); //从特征中取出实体
: U9 g3 u7 R$ `# O; l+ U
; S3 ?, L/ h6 B% A# R5 n: o6 [      Body *body1(dynamic_cast<Body *>(NXObjectManager::Get(obj))); //tag转换给nxopen9 @3 [/ Y" C  L! a9 t' n5 L) l
      std::vector<TaggedObject*>objects;& M. d8 t: V" k8 k( _- h5 M3 |+ C
      objects.push_back(body1); //对象加入到selection0选择控件的对象列表
0 _. w: T1 ?9 O( o2 J7 Q      selection0->GetProperties()->SetTaggedObjectVector("SelectedObjects",objects);) c  D8 b& ?  i7 I
————————————————————————————————————————————( k. P( x4 S$ f/ q' W& T
/ M; g4 P: ]0 ]  K) s+ r+ Z* `
//清除对象( Z3 p& Y. @( y, E* ~
std::vector<TaggedObject*>objects;# [, |* T9 J2 d- k* L+ p7 J
objects.empty();8 W3 N5 v" y. A" Z% O
selection0->GetProperties()->SetTaggedObjectVector("SelectedObjects",objects);3 Y! k0 f3 `, x
$ [/ M6 v; A; ~2 _( U+ @  O% ?
————————————————————————————————————————————
) d- D' B( H; e# Z咧子:只选择面
  b6 F  V! e0 W+ P+ u        initialize_cb() 初始化里加代码 或 dialogShown_cb()显示对话框里加代码 可进行对象选择过滤& A$ t/ M$ `- i" i4 b; t

: s- j5 a# o! l  l        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式% r+ N5 o! W5 B0 P! ~  ]' ~

" H7 W; |+ A0 J- D9 [1 B        //对象选择过滤 只能选表面5 U8 G+ d5 O) A; e9 V
        selection0->GetProperties()->SetString("LabelString","选择表面");
6 w7 q( w5 b! j  D2 H7 s        std::vector< NXOpen::Selection::MaskTriple > maskTriple;
& p9 j+ g/ x( i0 G9 g5 n        Selection::MaskTriple mask1(UF_face_type,0,0);
. h6 k% B7 j9 H        maskTriple.push_back(mask1);( z% F! j! q* C/ p6 r& o" x
        selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);
3 i% y& e1 v  g( i. z. {) O  ^+ }; c% S, L& s$ l1 Q
( l9 f* ?1 I* F' m/ V: R
咧子:只选择面 【UG本身过滤器跟着变】& P1 [3 w' J+ {, {  f
        initialize_cb() 初始化里加代码 或 dialogShown_cb()显示对话框里加代码 可进行对象选择过滤    6 m9 \; P9 v6 |! I# B

, @9 |3 j  E% l: G" p& t        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式2 [% m  v! X8 u
  `/ \9 C$ ^& O4 w
        std::vector< NXOpen::Selection::MaskTriple > maskTriple;& p8 x- S/ U$ h
        Selection::MaskTriple mask1(UF_face_type,0,0);, w' O* @/ z* s2 u1 U
        maskTriple.push_back(mask1);
  V) Y3 K. W. i! Y( L/ i        NXOpen::BlockStyler:ropertyList *selComponentProps = selection0->GetProperties();
" Z" t- S- N* J3 H) g; f% N        selComponentProps->SetSelectionFilter("SelectionFilter",Selection::SelectionActionClearAndEnableSpecific,maskTriple);0 z. ^: U7 P. d# m% R; ]7 H( Y
        delete selComponentProps;
, N6 E$ U3 R  B2 W        selComponentProps = NULL;
) C  f* [5 m! }% c5 F3 V
* p" `8 v' E. [! a1 |- x. G2 p. l
上海点团信息科技有限公司,承接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

列子
; i1 @$ Q, ]% H2 [$ X
% u4 Q2 ~$ C2 Z8 l0 G————————————————————————————————————————————
0 [/ W# E# B* ^8 g) K  y  C6 N————————————————————————————————————————————
! J3 o8 x, i3 p  h咧子:只选择 实体边缘 直线和圆弧, m( w5 C3 `5 I, M& P

* w" L: @& B* a6 z  initialize_cb() 初始化里加代码 可进行对象选择过滤
  r4 g  C' F4 X4 Z
5 n9 V# i; N; ?; _, d8 K        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式
2 v. e8 w$ Q0 l: K7 L6 n  O# m                        selection0->GetProperties()->SetString("LabelString","选择边缘");//只选择 实体边缘 直线和圆弧/ ~! s7 A  o. p0 q) Y
                        std::vector< NXOpen::Selection::MaskTriple > maskTriple;
, U2 K# Z1 b" N. \* y                        Selection::MaskTriple mask1(UF_solid_type,UF_solid_edge_subtype,2);" T$ c3 O+ z  Y7 p4 T! v: P% M
                        Selection::MaskTriple mask2(UF_solid_type,UF_solid_edge_subtype,3);
, i' C1 @/ ~1 [! e. w                        maskTriple.push_back(mask1);2 {! X/ b( l4 H0 L* W
                        maskTriple.push_back(mask2);$ h8 e& I: V, j. x1 Q
                        selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);
0 }: T4 p6 N# W: n* b( a" Q% h$ F& o* v* j$ w6 ]7 Q: [
//过滤无效的边缘7 @7 D( O2 t/ f% }# G, R5 Q6 S2 N
int ML_NX001::filter_cb(NXOpen::BlockStyler::UIBlock* block, NXOpen::TaggedObject* selectObject)
* p" }- [/ o1 H8 V/ g- \{       
# Y9 U8 \' P, j- ?7 |    tag_t obj=NULL_TAG;
. [+ Y. o, U" r1 A    UF_MODL_ask_edge_body(selectObject->Tag(),&obj);
: `9 j6 g6 Q0 V( L* y    if (obj==NULL_TAG) return(UF_UI_SEL_REJECT); //不加入到对象预览列表
4 j& I: z9 R- W0 d! G3 U  e+ |    return(UF_UI_SEL_ACCEPT);                    //加入到对象预览列表
9 e2 k& M( `) M2 g' n* o}1 X1 Q2 D5 X( T
————————————————————————————————————————————
. n7 V% \7 ]9 Z————————————————————————————————————————————0 |# [5 s5 O( r6 Z4 {
咧子:通过枚举控件选项来 时实  分别过滤 边缘、表面、实体6 X$ d. ~) m# o7 v, z  a
  |1 k, p! G# l; P' Y. V
   int enumValue = this->enum01->GetProperties()->GetEnum("Value");
6 O5 z, k) ~' L- b, g9 u1 a                    if (enumValue==0) + [% d8 a% w! P. H  A# w
                    {' W3 T* }% D) _. ~
                            selection0->GetProperties()->SetString("LabelString","选择边缘");
$ H6 C: x) u/ g. P! e                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;; W* Q- o! H2 n1 ~
                            Selection::MaskTriple mask1(UF_solid_type,UF_solid_edge_subtype,2);
( p* I, h; w  j" k, D                            Selection::MaskTriple mask2(UF_solid_type,UF_solid_edge_subtype,3);
) [0 K# a- T$ z) u' [: S/ A5 J                            maskTriple.push_back(mask1);3 O$ A. x+ W* b
                            maskTriple.push_back(mask2);
0 j# q8 ?+ N' x0 H                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);
7 z  k* I/ `( v0 W5 f+ N7 A! L                    }
6 [, L: G! f/ m9 M+ g9 W                    if (enumValue==1) - }! w  }% O6 t$ W4 t$ x0 v5 r
                    {& j; x. q0 m/ A( N5 a
                            selection0->GetProperties()->SetString("LabelString","选择表面");
5 k1 l+ A/ Z( S+ M1 h                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;
$ w6 _  p4 ~+ S' }6 y8 g4 p                            Selection::MaskTriple mask1(UF_face_type,0,0);/ D6 o" k# Z: ?( a5 z5 a
                            maskTriple.push_back(mask1);& r. M- A. G6 l1 x* J0 L6 u
                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);. q  S1 n& O9 z- j$ P
                    }
: P: U) Q/ w) x. {                    if (enumValue==2) & X3 s* n+ ]# I4 R
                    {
  ~9 n9 a5 h, u. G8 S# l                            selection0->GetProperties()->SetString("LabelString","选择实体");
) {1 C6 J0 g) L, z                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;
9 u& G0 i2 a4 X2 F* z& l                            Selection::MaskTriple mask1(UF_solid_type,0,0);
3 V. _! e+ I2 n! L0 e5 A8 T. K                            maskTriple.push_back(mask1);
0 h. y1 x5 S2 C                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);
; T) Z$ K- k; I/ g                    }
/ C5 c9 r: R' V" ]) D; X
5 p; M) H( S9 @8 p2 o3 |
! a$ }% d7 K# V& {% j" }% k& k//------------------------------------------------------------------------------% \$ B$ w7 D& C+ G* x; p# U
//Callback Name: filter_cb 过滤不符合对象
5 U* g/ E, d! I- F//------------------------------------------------------------------------------
0 |9 C+ [, O- s8 Pint ML_NX001::filter_cb(NXOpen::BlockStyler::UIBlock* block, NXOpen::TaggedObject* selectObject)& e! ~9 z2 {1 S5 {2 X# s7 l6 n
{1 h& u$ h0 Y" f. H% X
        7 N7 w2 ?7 W/ C, S! `2 k. F# x" I; o
        int enumValue = this->enum01->GetProperties()->GetEnum("Value");
# `- c9 U1 g% Z        if (enumValue ==0)& L, v9 o: A9 u# N6 K
        {
" B) g( q% g9 X, q                 tag_t obj=NULL_TAG;
( v' j3 Z+ D1 C" d- U* ^                 int err=UF_MODL_ask_edge_body(selectObject->Tag(),&obj);! c( e! c3 G. \, Q
                 if (err!=0 && obj==NULL_TAG)3 `/ b' ?! ]9 y% k
             return(UF_UI_SEL_REJECT); //不加入到对象预览列表* i. @9 i5 @& f' ]; I4 l, N
        }& {$ d$ f* A8 w8 y# V: i2 k
        else if (enumValue ==1)% \! R& u$ m8 l4 |' w2 g
        {5 d2 Q$ K4 R, ^/ {9 @
                 int type=-1;- s/ g- x+ O8 d: i
                 int err=UF_MODL_ask_face_type(selectObject->Tag(),&type);
" ?# m! T* G! R$ w- M: U" g                 if (err!=0 || type==-1)4 Q, Y/ c, s2 D& I; S* h, H: y/ d
             return(UF_UI_SEL_REJECT); //不加入到对象预览列表
7 R( r/ r2 q4 `0 b. H$ R! h        }
5 C1 b8 r3 b/ ]3 z2 [        else if (enumValue ==2)
, R2 |+ h: O* n/ y! z        {: m* l  z, k2 @4 x) q8 x
                 int type=-1;
' j. n# N0 C1 {) D0 U; ^. u3 A% E                 int err=UF_MODL_ask_body_type(selectObject->Tag(),&type);
  Z% K0 j+ m' t# v                 if (err!=0 || type==-1)
0 z) q4 w- j+ a2 F: y7 x2 _             return(UF_UI_SEL_REJECT); //不加入到对象预览列表& J: Y. ]) Q7 B1 J/ [
        }
& V; I* N" A' m( J! K: C' p
( P3 s! j. V+ Z: H3 G& c* v        return(UF_UI_SEL_ACCEPT); //加入到对象预览列表. `8 ]% m* C: o) G
}$ g9 c7 E8 J* O! u
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了