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

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

[复制链接]

2016-12-12 12:24:54 6338 2

1

主题

10

回帖

125

积分

注册会员

积分
125
发表于 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.doteam.tech
回复

使用道具 举报

全部回复2

8

主题

10

回帖

146

积分

注册会员

积分
146
QQ
发表于 2016-12-12 12:24:21 | 显示全部楼层
01、选择对象
* i$ d' U0 n6 r& Y* A- q
# r0 w1 A$ Y+ E& J0 i6 c" N+ W7 t# n( f捕捉) N3 k/ V5 x+ E3 C5 s$ k7 Z
  PointOverlay             是否显示捕捉点
: {$ P2 s" {0 k, Y  SmartUpdateOption        智能更新选项4 a0 d: @0 d6 c) h
                             Within Modeling   在建模. F7 i  N, Z" q6 t4 N+ `
                             After Modeling    建模后. g) O3 n, D* l: {% R
                             After Parent Body 实体父后
6 S% j1 ]/ p$ d1 [# x% U2 J+ ?                             Mixed             混合
' S! Z+ C' W0 U' c+ e+ E
) H! w" {1 S% `* g- a  SnapPointTypesEnabled    设置捕捉点类型的可见性
& g! \3 o3 X* ]" ^& \  SnapPointTypesOnDefault  设置捕捉点类型相关的内容被启用
3 }! l6 X5 K3 H% w& c) J9 K/ H& P! E, b5 m, C" T
常规
9 V7 H# }" W( G0 h) m  BlockID  控件id
( Q0 N# |& ~" a$ P! E( Z* A  Enable   是否可选/禁用控件! u! A( x) O! w" c% t$ z) [
  Group    组( f6 G& ^% b0 t' r/ [4 l: f
  Show     是否可见
$ h9 d, g8 i( n# r0 O3 K3 n% T. X. K, j# R9 @" v  L8 r& x
其它
) d- h1 n& J! \# Z  附着
$ y+ V* h% Q% a# D    Bottom  底+ A2 ?" T: z1 C" V0 d
    Left    左3 E4 y$ [2 Q- i- ]9 A, b) Z0 X
    Right   右
& s* X. Y% i' V# l    Top     顶
% X' F) ^! H1 V3 @, I4 w9 k2 H6 {9 J7 ?# f' c/ \7 G0 ^" e
特定于块
( D, F6 y4 |3 {4 e  AutomaticProgression     选择后焦点是否自动跳到下一个控件' v+ Q8 |# r2 M- a
  BalloonTooltipImage      动态提示图片(鼠标移动到控件是显示图片)1 h& F! e5 d1 W
  BalloonTooltipLayout     动态提示布局
* A: Y- E. c& b4 z3 o: D" f" s* f  BalloonTooltipText       动态提示文本内容1 e( r! o! y& g1 D# H
  Bitmap                   指定图片
5 @0 C: k3 }8 @1 C& q1 a$ X  BlendVirtualCurveOverlay 是否显示虚拟交线, [6 G/ G- d8 n: n
  CreateInterpartLink      是否显示部件间连接图标在选择条上
8 k3 m4 P  U  g# ~9 Z. ?- O+ F/ ~  Cue                      提示
9 R7 `+ V, h7 R5 |% T; W
/ w' J& c" L8 h, z  c) p  InterpartSelection       部件间选择设置
- c& w/ a& C# A; g7 y  Z& ]: r. I                             Simple                                           简单
  y0 B3 g7 J& |2 {                             Non-associative Interpart Copy Only              只复制部件间非关联
8 f  x- v  I. x+ g3 P. f                             Associative and Non-associative Interpart Copy   复制部件间关联和非关联7 K& M" o% V! a+ f. D
                             Associative Interpart Copy                       复制部件间关联2 H6 E% x; z+ _/ }' n+ e% i2 t& y

& x1 m% g' z5 N/ ~  LabelString              标签标题
6 R* a/ {  z6 {# Y/ S7 N* v  MaximumScops             设置选择范围! ?0 w9 n7 y7 N  h2 D# o
                             Entire Assembly                 所有组件/装配
# ]% f4 u  H4 x$ S. c' ~2 }' E3 i                             Within Work Part Only           只是工作部件" D4 u3 p5 M! @
                             Within Work Part and Components 工作部件和组件/装配)
# f3 R8 K( x, N+ P' e  t3 x
0 s  ]: b1 n" q; V: |: O  K7 E. ^  SelectMode                设置单选/多选 3 O' u2 ^! i+ R" [) J
                             Single   单选3 P: W1 G+ r0 [
                             Multiple 多选
+ g: ^8 g6 I5 b1 j5 B" |( }+ V$ [1 Z
! t! }; \1 Q0 K8 _% B( \7 Q; @  StepStatus               设置确定和应用按钮什么时候高亮 (Required 必需的时候)(Optional 可选的时候)(Satisfied 满意/满足的时候)
6 ]; v- ^* `- t1 R  Tooltip                  动态提示文本标题(Bitmap指定图片时,鼠标移动到图片时提示文字)/ Q) D0 ^/ k# M7 m' _
/ R0 W% e" ]& u; @6 o% Q  k
————————————————————————————————————————————
! n+ p- l& ]2 y& g7 S' }————————————————————————————————————————————8 Z+ e. i9 `. B; H$ A/ b8 _
咧子:获得selection0控件选择的对象
1 y/ n( f/ m$ p$ I      UF_initialize(); & J' K5 C6 Q. P; ]8 D. D/ T0 ?
      std::vector<TaggedObject*>objects=this->selection0->GetProperties()->GetTaggedObjectVector("SelectedObjects");. I$ J: L5 _1 _; V. B
      for ( int i=0;i<objects.size();i++) // size 列表长度,这里指的是 对象个数( O; ]2 p; c6 n+ h4 L  s
      {      
! N5 Y4 m- c2 W1 {         UF_OBJ_set_color(objects[i]->Tag(),1);
7 y0 e- o5 r& Z/ `      }; r; C  Z: Y2 [/ B5 |9 O' @4 ]+ W
      UF_terminate();" X/ w) j. q7 U8 F

0 b9 K/ w1 d8 z7 j6 U————————————————————————————————————————————
& L2 h, f+ |! f6 z咧子:对象加入到selection0选择控件的对象列表
  \4 a% Y' ?& g1 Y
- x* v! s, `' i: \      tag_t obj=NULL_TAG;
! F' C: B$ E0 W      double point[3]={0,0,10};
! k% D$ u6 ~2 @& X* I- A4 Y. |      double XYZ[3]={60,50,80};
5 Z0 Y/ K0 G. [      char C[132]="";
3 E% V' l6 M2 h, L  k2 M      char K[132]="";! Y+ ~% {( i# F: D0 W7 ?
      char G[132]="";
7 V$ o/ _& o9 i8 B      sprintf(C, "%f",XYZ[0]);. U, _) M" o3 p; ], K, Q4 |
      sprintf(K, "%f",XYZ[1]); 6 h  M+ F$ B$ G3 L! l
      sprintf(G, "%f",XYZ[2]);
2 U$ @" I0 I3 Z      char * edge_len[3]={C,K,G};4 j9 k  @& u/ v7 W  V
      UF_MODL_create_block1(UF_NULLSIGN,point,edge_len,&obj); //创建方
# m1 e& |% F( c5 O) d      UF_MODL_ask_feat_body (obj,&obj); //从特征中取出实体: v3 G% b, [9 D2 L. Z% P2 Q
4 O8 x$ V4 l. A" W8 b" C+ @/ Y
      Body *body1(dynamic_cast<Body *>(NXObjectManager::Get(obj))); //tag转换给nxopen
. [1 y! V& g! q3 K8 ~: q  r      std::vector<TaggedObject*>objects;" J- N! _9 {! K5 L  Y
      objects.push_back(body1); //对象加入到selection0选择控件的对象列表
: }. N6 c, i1 ?* B      selection0->GetProperties()->SetTaggedObjectVector("SelectedObjects",objects);
% J+ W' t8 I- u! V————————————————————————————————————————————( M1 D" n! k. Q) [

/ |* i  ~4 @4 Y//清除对象
( U3 ^, _4 \6 e- z0 d6 u$ ^std::vector<TaggedObject*>objects;" V$ W! k* Z' l- @8 Z" K$ k% m9 z
objects.empty();8 b* g" L* B+ a
selection0->GetProperties()->SetTaggedObjectVector("SelectedObjects",objects);9 L3 S3 S; r. x. B$ h; t# a: |

0 m0 S: j0 r: c% d9 }————————————————————————————————————————————
: H+ R0 Y% y* i' R' z6 j+ m咧子:只选择面# F5 t2 G2 z/ P2 ~
        initialize_cb() 初始化里加代码 或 dialogShown_cb()显示对话框里加代码 可进行对象选择过滤
# e4 i2 {% b) F) |
4 g5 x: q5 h  C6 G- z( p        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式5 G; {1 y' q) Z' W. [& m8 Z

3 Q" o' g7 j. r% f5 S0 q5 F        //对象选择过滤 只能选表面# F* r7 I- d0 F# z# B
        selection0->GetProperties()->SetString("LabelString","选择表面");
( ~) H' g% P' K+ {        std::vector< NXOpen::Selection::MaskTriple > maskTriple;
5 h/ L/ \3 X3 Q/ w- w        Selection::MaskTriple mask1(UF_face_type,0,0);% \1 P! l* b7 w5 ]# k8 B7 t
        maskTriple.push_back(mask1);
) B, ^; {; c& |+ @0 c. f! N; ]( c. D: b        selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);' @9 F; J0 p* q
2 Y& o  d% W% g' P# g, V) _* P
8 f# o3 M  W$ M  E' Z* }! q2 D
咧子:只选择面 【UG本身过滤器跟着变】
+ d5 B3 e: R8 _. o6 b3 t        initialize_cb() 初始化里加代码 或 dialogShown_cb()显示对话框里加代码 可进行对象选择过滤    + F) P2 c+ q: U) q

, a7 i9 I% z" z        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式
; `1 y6 _8 E$ M. k: n6 F
- A$ _3 f) Z" S6 h' V) q        std::vector< NXOpen::Selection::MaskTriple > maskTriple;# Y6 e# a- @# S! _0 ]* W; b% I
        Selection::MaskTriple mask1(UF_face_type,0,0);
; h' F3 g6 A, T# Y  c        maskTriple.push_back(mask1);
" x, d4 Z- n' M: a        NXOpen::BlockStyler:ropertyList *selComponentProps = selection0->GetProperties();
$ z" w2 p; u) N8 w5 E        selComponentProps->SetSelectionFilter("SelectionFilter",Selection::SelectionActionClearAndEnableSpecific,maskTriple);; H/ y( ~& J# ~9 F/ k% {
        delete selComponentProps;
0 p7 T5 L0 a: d+ t+ l4 U5 D* H9 d        selComponentProps = NULL;
" q3 b! O( C" J
; ^: ^  [( K$ L; m/ ~0 T5 X
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复 支持 反对

使用道具 举报

8

主题

10

回帖

146

积分

注册会员

积分
146
QQ
发表于 2016-12-12 12:24:54 | 显示全部楼层
列子
$ G2 I8 e$ }& G! C; v5 `; ~' B5 D4 z% z$ e; x) j$ j1 f* |
————————————————————————————————————————————
$ S8 S1 L6 I2 x0 G: u. R. q: O————————————————————————————————————————————! {6 k8 b, M+ [3 X) k  V
咧子:只选择 实体边缘 直线和圆弧' T, P6 Y1 s+ X1 R: z) \, Z
( @* p+ Y  Z4 a8 X( ]+ C2 }
  initialize_cb() 初始化里加代码 可进行对象选择过滤
3 I" R9 j8 N" u# I1 m5 b+ Q8 J$ b, P# B/ d4 g* i" S  R0 R' {
        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式
) a3 l& C& B3 K. V2 G                        selection0->GetProperties()->SetString("LabelString","选择边缘");//只选择 实体边缘 直线和圆弧& L0 v" u; N, M8 o- Y, U
                        std::vector< NXOpen::Selection::MaskTriple > maskTriple;
- J+ h- k3 R3 w/ u% e( H                        Selection::MaskTriple mask1(UF_solid_type,UF_solid_edge_subtype,2);: z. j0 J: ]" y
                        Selection::MaskTriple mask2(UF_solid_type,UF_solid_edge_subtype,3);
% u% K6 |2 j* m0 J( ~9 |                        maskTriple.push_back(mask1);- t8 @) o; S% ^, H8 {, z
                        maskTriple.push_back(mask2);
8 }7 O* e5 g) f8 F3 `3 {                        selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);3 L, I6 }' n. ]5 g

. k9 H: N. \# w9 K( D# ]/ u//过滤无效的边缘
8 C- {/ ?  c' }/ Wint ML_NX001::filter_cb(NXOpen::BlockStyler::UIBlock* block, NXOpen::TaggedObject* selectObject)
1 a& q  D- m' Z  G9 z5 S{       
  E' M4 ~; q1 e. [  J/ j, Z    tag_t obj=NULL_TAG;
/ B' T* D# K9 S, }( y. ?3 S* U    UF_MODL_ask_edge_body(selectObject->Tag(),&obj);7 _9 q3 g+ Q  c- ?5 w# Q
    if (obj==NULL_TAG) return(UF_UI_SEL_REJECT); //不加入到对象预览列表1 V0 r. w8 u7 l9 y. o5 Z# D% k! P* ~
    return(UF_UI_SEL_ACCEPT);                    //加入到对象预览列表( a2 T: l( k1 r
}
+ N7 X# @( n6 N: k6 n————————————————————————————————————————————. T* z0 J2 `" q/ f# E  U
————————————————————————————————————————————3 r) l; i% E% U. U! Q" Q$ O3 ~
咧子:通过枚举控件选项来 时实  分别过滤 边缘、表面、实体
4 a' Q6 P8 U  `9 I' L$ {- t# @9 W/ K: v: I
   int enumValue = this->enum01->GetProperties()->GetEnum("Value");
/ F: t- X( |/ S8 J                    if (enumValue==0) % S: V' p$ [$ h* D0 {2 u
                    {
# ~- u% G$ ~" p# S                            selection0->GetProperties()->SetString("LabelString","选择边缘");
$ L8 Z, H  G6 @2 V                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;
  @6 i! r7 p/ W/ n3 f# W+ R                            Selection::MaskTriple mask1(UF_solid_type,UF_solid_edge_subtype,2);5 P* a. w+ K8 x, ^6 l4 w
                            Selection::MaskTriple mask2(UF_solid_type,UF_solid_edge_subtype,3);
6 S9 L' n; V4 a5 Z* j- m                            maskTriple.push_back(mask1);
; K' y6 K% ]3 B% ]                            maskTriple.push_back(mask2);! y6 ?* O9 @& ?
                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);
$ r8 x5 w7 r: `                    }
8 r) J  k5 s7 j9 J9 Y% s( G                    if (enumValue==1) ' G/ [4 A5 \9 }$ M% v
                    {  M& m. o2 P. U7 }% B' i
                            selection0->GetProperties()->SetString("LabelString","选择表面");
  }' l% h8 D6 f) a7 T                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;& H: V$ W; s/ c
                            Selection::MaskTriple mask1(UF_face_type,0,0);- V) [- X- c. s( i/ ^' t7 j) W
                            maskTriple.push_back(mask1);
7 b4 N8 Z' q7 k" m/ I3 H9 ]                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);
7 e9 a) j' a9 I% D: t! h9 v: l                    }+ g# _4 O0 X2 S# F
                    if (enumValue==2)
6 \/ \, [/ D8 H  W5 _& C                    {
2 Y( R) \( _% e1 W) \" H+ J                            selection0->GetProperties()->SetString("LabelString","选择实体");
) L$ B. R, J9 N, B6 q& N: i                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;
- P( Z9 i" j' A' F, P1 d- E; e                            Selection::MaskTriple mask1(UF_solid_type,0,0);
& |  Q5 `2 x% ?- ?* X                            maskTriple.push_back(mask1);
9 |* }& f5 f& `6 b! k; ^                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);/ y! b# C$ K7 K8 N4 d
                    }* U0 |8 u/ V7 [' j% B6 A
7 O. q8 H) I- @& |; x
6 h/ I1 M# f* [" t$ \" O
//------------------------------------------------------------------------------" N' U+ ]' h0 V& n" K
//Callback Name: filter_cb 过滤不符合对象  y- K' C$ R* @9 e9 N# P& F. w5 d8 ?
//------------------------------------------------------------------------------
! v; ~( G3 J) C6 V3 b4 A& \1 Lint ML_NX001::filter_cb(NXOpen::BlockStyler::UIBlock* block, NXOpen::TaggedObject* selectObject)8 E9 i+ y/ ~/ Q2 v- n
{! u+ d% q1 P* M* ^! e2 F* _  Q
        , q) I( h7 k  i1 T* e: F5 o
        int enumValue = this->enum01->GetProperties()->GetEnum("Value");3 |  B- a) z# }7 K0 {
        if (enumValue ==0)( |  e' \: I* G' ]
        {( N$ L5 a0 b1 @$ B6 Z1 R. T0 ?; s
                 tag_t obj=NULL_TAG;
. h' P2 S2 i5 X8 R  t                 int err=UF_MODL_ask_edge_body(selectObject->Tag(),&obj);
7 Z5 ~" I$ `: U8 ^/ Q4 j                 if (err!=0 && obj==NULL_TAG)
$ I' B- ]* J9 k- N             return(UF_UI_SEL_REJECT); //不加入到对象预览列表
) E2 }8 |) X$ Q! h3 S4 |        }
0 v* }$ u2 e0 h; N% p5 a7 ]1 B5 R        else if (enumValue ==1)
, T6 N, w4 o: Z        {
4 A) @, H; h( f: Z% u+ f8 g                 int type=-1;# v+ n$ O0 ~8 L8 t0 Z3 ~
                 int err=UF_MODL_ask_face_type(selectObject->Tag(),&type);3 t/ u* @' n* @! n
                 if (err!=0 || type==-1)1 ^2 e  k4 `4 I
             return(UF_UI_SEL_REJECT); //不加入到对象预览列表: C" h. R0 s2 S7 _( k
        }: E# W: N  O' @* {. o( l
        else if (enumValue ==2)
' r( U$ K* M) f) X/ v        {5 [+ m7 @8 T; t5 f2 n1 w4 D
                 int type=-1;9 o1 C9 b+ @0 S8 |9 T; G
                 int err=UF_MODL_ask_body_type(selectObject->Tag(),&type);- K2 g. c* }; q" `( B# C" g
                 if (err!=0 || type==-1)( }' C) t9 v! _. P' N) ~
             return(UF_UI_SEL_REJECT); //不加入到对象预览列表
# m) t0 f0 G9 B" N  z$ T+ L$ J        }
% w, E% h# w, y3 w, S- e+ }  |- F' o. P2 c* x0 L/ @$ q/ z, U
        return(UF_UI_SEL_ACCEPT); //加入到对象预览列表% @" \' W' m- D* |/ q5 F; Z0 ?
}+ M; }, T: x9 \
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复 支持 反对

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 注册

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

    本网站(plmhome.com)为PLM之家工业软件学习官网站

    展示的视频材料全部免费,需要高清和特殊技术支持请联系 QQ: 939801026

    PLM之家NX CAM二次开发专题模块培训报名开始啦

    我知道了