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

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

[复制链接]

2016-12-12 12:24:54 6340 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、选择对象
$ a2 v7 q" r8 U" N; K' I) J% K, z4 J4 h
捕捉+ x& m2 k- U3 V& W; S3 @* F
  PointOverlay             是否显示捕捉点
% |% m0 p* {# G' p  SmartUpdateOption        智能更新选项
1 F7 v  M. ]; ~  J! Y) @: S                             Within Modeling   在建模
; ^% S% G$ x( i# U1 F) O3 R+ `& }                             After Modeling    建模后/ F+ P, _. b" ?* n+ r# u- x
                             After Parent Body 实体父后- A. d% |0 j1 T1 x+ P$ f
                             Mixed             混合( h% q1 e( c% k- ?* W
) c6 ~* J( g: P5 J! S; s! D
  SnapPointTypesEnabled    设置捕捉点类型的可见性
# F' i- u8 q* D# F  SnapPointTypesOnDefault  设置捕捉点类型相关的内容被启用
2 s( O3 b: C/ t; C2 h& D* H" t) `8 V
常规9 W- [8 d8 K0 L, h
  BlockID  控件id
" G7 A* L& ~" t) X% J+ \$ q  Enable   是否可选/禁用控件7 J" `1 A& f2 Y/ N% S
  Group    组2 V# m" B  `% l+ n# x
  Show     是否可见+ F/ }* i( u9 @' J

0 z- j& w* {4 D  S+ J  X* r) X其它
4 ?1 i8 K0 L+ E3 V: F7 ~; d, j  附着* f' y3 c0 @% [2 V5 S. G6 }' T
    Bottom  底
# i% u2 ~7 N* Z, m9 m    Left    左  V$ N8 y# M1 {" N$ ?
    Right   右8 l1 Y+ U4 v. D% D! P, I; b, A
    Top     顶( U6 n+ {" g5 }; `. `% V
# z+ a8 A& G6 x
特定于块
% C2 |, @! ~4 J, g+ w' r, P' c  AutomaticProgression     选择后焦点是否自动跳到下一个控件
( v* ^% `7 }& g% Q; P3 N  BalloonTooltipImage      动态提示图片(鼠标移动到控件是显示图片)
1 B1 X7 H& }$ v3 z: U* F, I  BalloonTooltipLayout     动态提示布局
6 L2 D- c* B# |, w4 l9 s  BalloonTooltipText       动态提示文本内容0 e: W0 _. \& s2 I, c
  Bitmap                   指定图片- f) u9 u* M: F  ]( G4 n  i/ y  W8 v/ y
  BlendVirtualCurveOverlay 是否显示虚拟交线
* ]7 |1 c" o& {5 h- T+ V  CreateInterpartLink      是否显示部件间连接图标在选择条上
( j$ L+ R9 p! F& P1 o; Q  Cue                      提示
0 m0 P  r: d; Q2 D' _' A7 r2 m0 ^) N# @& i0 v
  InterpartSelection       部件间选择设置/ }5 y1 J, ?. \$ f6 Z) I
                             Simple                                           简单  \# z% s& n* L; R3 ]' p
                             Non-associative Interpart Copy Only              只复制部件间非关联
2 Z6 Q' f& T; x9 R4 ^( ~                             Associative and Non-associative Interpart Copy   复制部件间关联和非关联
# @. P" G3 r: A8 v                             Associative Interpart Copy                       复制部件间关联6 }# y$ o$ [/ y" b6 o; l  u; t
$ m$ |. }+ U4 ?7 W) ]9 v
  LabelString              标签标题# U2 ^3 j: l& W" _+ Y% d
  MaximumScops             设置选择范围/ [9 |) I+ E: M. o) V
                             Entire Assembly                 所有组件/装配
8 W( X0 C; \. S7 y. V0 Y7 T3 }                             Within Work Part Only           只是工作部件
. \& }6 C5 Y! z+ s6 i- b! C) P                             Within Work Part and Components 工作部件和组件/装配)% Z2 p8 T9 r2 G' F& ^8 S$ L: M, ]

& R$ ^' w4 t$ L& S( A  SelectMode                设置单选/多选 " e( l# h+ q* h$ [6 {
                             Single   单选
6 d1 |- \3 {& s( l/ ^  e, @                             Multiple 多选
0 D' b: o6 E) Y) A  V5 k% E5 B/ P4 ]4 i- z
  StepStatus               设置确定和应用按钮什么时候高亮 (Required 必需的时候)(Optional 可选的时候)(Satisfied 满意/满足的时候)
( X! j2 s% ~1 `' P4 c5 \, V$ B  Tooltip                  动态提示文本标题(Bitmap指定图片时,鼠标移动到图片时提示文字)
" Y% X: a' V% ~" R% Z' c
3 R5 p4 f* t- N% ?————————————————————————————————————————————. p& P/ G# b; r, Q  U  W
————————————————————————————————————————————
: g# @! V- p; ~' A  Z咧子:获得selection0控件选择的对象2 x1 c* m5 M9 \- ?$ z7 S  s% @
      UF_initialize(); ; y2 `0 k2 v3 G. ?' V
      std::vector<TaggedObject*>objects=this->selection0->GetProperties()->GetTaggedObjectVector("SelectedObjects");
1 D$ @2 X' C6 y( p8 U      for ( int i=0;i<objects.size();i++) // size 列表长度,这里指的是 对象个数: m7 J* s2 P$ e0 g
      {      
: H# A: n) `6 Y, k; w) p+ i         UF_OBJ_set_color(objects[i]->Tag(),1);/ @. g* ?$ t, P# s
      }" @. V4 d% o% N/ y
      UF_terminate();
2 [$ [$ ]+ `* @( `% y) ~6 |8 c4 n* y, E4 v6 J6 w6 f1 P9 D% r
————————————————————————————————————————————8 q4 C) k7 D/ T- A- r: P( K
咧子:对象加入到selection0选择控件的对象列表- o  B+ B8 y' ^7 p) l) k9 x
3 y+ q0 m! R5 K% W1 N- T
      tag_t obj=NULL_TAG;
. H) j! o- |+ F6 v) {4 ]" D1 t      double point[3]={0,0,10};
" k9 a6 b9 C9 T9 A; S      double XYZ[3]={60,50,80};
7 o2 ]% b3 x) d# U1 ?' e2 S9 j; {      char C[132]="";% g1 C4 s, D3 Y$ V( K
      char K[132]="";6 Z& ~, S; s: M7 t: w4 ^
      char G[132]="";  j# p; H/ L' U3 f
      sprintf(C, "%f",XYZ[0]);7 b' c7 D3 J9 f: I9 N. N
      sprintf(K, "%f",XYZ[1]);
+ L( m! I% h' V1 I2 j      sprintf(G, "%f",XYZ[2]); * V2 d  D5 f' R8 |" B0 I* b% E% a9 u
      char * edge_len[3]={C,K,G};
4 A% v( {- E" v5 a" B) ?1 {7 n      UF_MODL_create_block1(UF_NULLSIGN,point,edge_len,&obj); //创建方
1 Z' N1 D  i8 e. J2 `& @8 _! k) a) ^      UF_MODL_ask_feat_body (obj,&obj); //从特征中取出实体
4 Z" _) x0 p* X9 Y' _- P. L- d9 R6 C! L/ n: K7 y2 r) V  T
      Body *body1(dynamic_cast<Body *>(NXObjectManager::Get(obj))); //tag转换给nxopen% U# A# Z' _  V6 e6 f
      std::vector<TaggedObject*>objects;( `& o, X* K4 h9 q8 {6 Y
      objects.push_back(body1); //对象加入到selection0选择控件的对象列表
6 P3 P# a+ K- L& F/ p      selection0->GetProperties()->SetTaggedObjectVector("SelectedObjects",objects);& Z# w& P( _1 _  a" l
————————————————————————————————————————————6 Z- i; l5 l# m' N4 \$ t9 [& B8 w
% N; V9 ~" m" K6 z( q" a
//清除对象
" t8 h; i+ X" A2 i0 zstd::vector<TaggedObject*>objects;$ |1 Z% |8 d; o% ]2 c7 S! A
objects.empty();9 e7 {% m, Z1 n$ o! y. l# s
selection0->GetProperties()->SetTaggedObjectVector("SelectedObjects",objects);' p& h2 X6 J( D' E1 R- F
9 l! u& ]8 E' B/ i' P8 x
————————————————————————————————————————————
  E- E2 _0 `. S) i% [咧子:只选择面
  g4 \6 S0 ^$ I3 }) {2 [6 N        initialize_cb() 初始化里加代码 或 dialogShown_cb()显示对话框里加代码 可进行对象选择过滤
0 [, j1 m, c4 S2 B! g0 h$ G2 h; S8 O5 {$ |
        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式, N$ L) B( u% L
- s0 {* |+ D1 [, ~6 e* O
        //对象选择过滤 只能选表面
* J4 U# g& F/ H6 b/ r' Q$ }. Y        selection0->GetProperties()->SetString("LabelString","选择表面");
2 T+ {' i& U/ \; s: i: C        std::vector< NXOpen::Selection::MaskTriple > maskTriple;
$ J( z) j  E) F% k        Selection::MaskTriple mask1(UF_face_type,0,0);# e& Q4 Z5 P. P, E% L# }2 Y
        maskTriple.push_back(mask1);3 I3 n2 D- {# }
        selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);
6 U" C% _% F9 D
( G0 t/ \2 H; l2 H6 N) Z% g( c' a! u) E7 L  s
咧子:只选择面 【UG本身过滤器跟着变】0 z0 u8 o3 L. ^# l) q( k1 {' [
        initialize_cb() 初始化里加代码 或 dialogShown_cb()显示对话框里加代码 可进行对象选择过滤    9 h" r! l4 S9 u7 T; \

3 |8 c" Y+ ?# i9 c  S        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式
3 L: I- J/ i& ]5 E; o
' R/ T5 `6 ]1 S8 O        std::vector< NXOpen::Selection::MaskTriple > maskTriple;$ r. i! y" N7 T  F) A# n- z
        Selection::MaskTriple mask1(UF_face_type,0,0);
$ i7 Y3 X2 q' \# I0 ]        maskTriple.push_back(mask1);* Y6 G. o" }* W
        NXOpen::BlockStyler:ropertyList *selComponentProps = selection0->GetProperties();' F8 J; v  o" t. K$ y
        selComponentProps->SetSelectionFilter("SelectionFilter",Selection::SelectionActionClearAndEnableSpecific,maskTriple);
0 q: [, I7 \" L/ ^- ^        delete selComponentProps;
5 L1 s) x- K% p5 C# b        selComponentProps = NULL;
6 R7 R/ p+ R! v2 z2 r! m- ?
. {3 `3 Y- b( D) a6 ^! d7 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 | 显示全部楼层
列子
+ o) f& K7 O! [. N8 ~5 b* U3 U; w. I7 Y( H/ _& @
————————————————————————————————————————————* u  x$ j! e! D7 j! b* C
————————————————————————————————————————————/ U1 i0 \5 o% ~9 c% u; [% y, x7 q
咧子:只选择 实体边缘 直线和圆弧' U/ F3 g9 d9 q  b; j& o

: h4 E* G" L6 ^8 N$ b+ \& g, z  initialize_cb() 初始化里加代码 可进行对象选择过滤3 E) e% l" O* n( M7 S" c, x

, G: c2 X; s. a1 h5 P7 ~4 f        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式2 F# }- C  a4 M
                        selection0->GetProperties()->SetString("LabelString","选择边缘");//只选择 实体边缘 直线和圆弧* e( k1 X. Y- D9 b
                        std::vector< NXOpen::Selection::MaskTriple > maskTriple;* O# ~5 e1 @2 a8 [6 q$ n/ t- n
                        Selection::MaskTriple mask1(UF_solid_type,UF_solid_edge_subtype,2);' g( Y; h% v, M5 O: T
                        Selection::MaskTriple mask2(UF_solid_type,UF_solid_edge_subtype,3);# b3 T; I; ~: I- `- n: U
                        maskTriple.push_back(mask1);
% B: V5 E# l4 @' g                        maskTriple.push_back(mask2);
* R  V3 S; h4 E: g2 j3 ~3 ?5 b                        selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);
! a1 S6 L  f$ ]5 S* j& o/ M. j1 n
6 w6 L- B1 c0 H//过滤无效的边缘
' \! n, d0 T% @, Dint ML_NX001::filter_cb(NXOpen::BlockStyler::UIBlock* block, NXOpen::TaggedObject* selectObject)" |. s. ?( w, B# |# ^
{       
+ N$ T- |# b7 S! x- ?9 _7 A    tag_t obj=NULL_TAG;! y4 g4 |9 ?1 L+ C3 Q$ B
    UF_MODL_ask_edge_body(selectObject->Tag(),&obj);
1 e" M6 u) C+ r    if (obj==NULL_TAG) return(UF_UI_SEL_REJECT); //不加入到对象预览列表
" f) p' Y! S1 d. ]) p    return(UF_UI_SEL_ACCEPT);                    //加入到对象预览列表
$ }. k  x. _; [3 H  v}
; q! z- z+ R6 W& ~7 E+ L- H% |————————————————————————————————————————————- C5 F6 p& a" E/ h3 `
————————————————————————————————————————————
# T$ ]4 N% ?% H' s, D咧子:通过枚举控件选项来 时实  分别过滤 边缘、表面、实体. d0 ^# H! K; f

8 ~$ p9 r2 N9 f& }! B- @   int enumValue = this->enum01->GetProperties()->GetEnum("Value");
! }, s. q( j# V! O3 {" E                    if (enumValue==0) / z- o4 L9 }1 }: C
                    {5 M1 b( P/ v$ P7 D
                            selection0->GetProperties()->SetString("LabelString","选择边缘");
8 |7 L, U1 F4 b" M/ _+ e                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;
6 A  H# b2 Z6 v/ Q                            Selection::MaskTriple mask1(UF_solid_type,UF_solid_edge_subtype,2);# G* T" B. }' B$ }/ ^9 g  K
                            Selection::MaskTriple mask2(UF_solid_type,UF_solid_edge_subtype,3);4 c- a! {4 y5 i- T! p$ v6 J
                            maskTriple.push_back(mask1);' C9 B% f  z- y& O0 f7 p
                            maskTriple.push_back(mask2);% X' ?9 o1 e! }- K1 q# Y  _
                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);, v; L8 J- \. A" j$ O
                    }4 t* X# d; F9 p- o% K# [
                    if (enumValue==1) ; X2 ]4 S( t. t- n) ~& x3 v5 u9 J
                    {
. F' q/ p" W5 a- F6 `8 X                            selection0->GetProperties()->SetString("LabelString","选择表面");+ _, |$ M( u' l$ X/ \3 }( n9 Z
                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;
, _( _* F+ N3 j% i                            Selection::MaskTriple mask1(UF_face_type,0,0);- H, z9 \5 c/ W8 R: [
                            maskTriple.push_back(mask1);
: t! C. z7 w1 M                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);
  {7 A' b6 S: E                    }
% w' b- }/ t' b% S3 T$ H$ B                    if (enumValue==2)
; D7 {  @" Y, L+ t7 w  r                    { % g1 N' b* D6 ~2 ~# ]+ r
                            selection0->GetProperties()->SetString("LabelString","选择实体");7 d4 c/ W; s3 \' M
                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;
: n. U' \7 ~' l$ p0 y                            Selection::MaskTriple mask1(UF_solid_type,0,0);: _0 X) L7 j( w- ], m
                            maskTriple.push_back(mask1);
- S. d& C4 T1 ]                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);5 A2 t- Z: j3 X/ g
                    }& z2 J5 ^# {3 a6 x6 m" z

: ?6 S" c' K2 d9 e: z+ p/ W6 n1 O. t& V$ ^+ ?* e
//------------------------------------------------------------------------------
# Q% V! R0 X* e: G* s8 ^//Callback Name: filter_cb 过滤不符合对象" K( U. _  F) x& r, l
//------------------------------------------------------------------------------: A  r5 b. F6 t9 B4 U- O" x$ j
int ML_NX001::filter_cb(NXOpen::BlockStyler::UIBlock* block, NXOpen::TaggedObject* selectObject)
. B$ p: |* @  F5 z0 n9 }{# R" l4 M3 z/ [
        , P# S+ v# |7 C& `, E4 Q
        int enumValue = this->enum01->GetProperties()->GetEnum("Value");- A, d* G) B2 }5 v
        if (enumValue ==0)
" E3 M8 N( v, t  L# b' d( C( {        {
( X9 L* [6 \+ ?4 I. K9 ~                 tag_t obj=NULL_TAG;  Q, n0 U& D  \6 }# G' v8 y& \
                 int err=UF_MODL_ask_edge_body(selectObject->Tag(),&obj);
' D! q. _. x& e% r9 N9 J                 if (err!=0 && obj==NULL_TAG)
6 |% s8 A3 d4 h" a( D             return(UF_UI_SEL_REJECT); //不加入到对象预览列表
7 L. C& y# k. t+ A7 e* \        }& s2 I. ~# Q5 u  ~+ j* T8 u" _
        else if (enumValue ==1)3 }# N8 m- u1 w+ e7 o% n
        {  U8 E- d( U8 _  f1 \) V% ~8 b
                 int type=-1;$ u2 R% @$ U) {# A! l0 S
                 int err=UF_MODL_ask_face_type(selectObject->Tag(),&type);8 O( |2 J7 a1 U! H9 s3 x! G
                 if (err!=0 || type==-1); T9 K% t- d( ~
             return(UF_UI_SEL_REJECT); //不加入到对象预览列表0 [+ e* l9 ^$ g7 g# \& z
        }
) c/ F2 \0 w8 L: V        else if (enumValue ==2)
% |+ L4 e& g$ }6 f/ ^. a        {
  X9 {0 k+ X& u7 Y                 int type=-1;4 ]. R5 {8 n# V3 [) x8 X
                 int err=UF_MODL_ask_body_type(selectObject->Tag(),&type);
5 {, t, t$ ~6 u3 f8 @                 if (err!=0 || type==-1)
; {) C$ d( q- _$ p& E- p             return(UF_UI_SEL_REJECT); //不加入到对象预览列表" ~, Y6 S6 j# a
        }* N' _9 P7 d3 B& S  \8 u& P

+ D, w  D0 K: \# L! ]) z        return(UF_UI_SEL_ACCEPT); //加入到对象预览列表
1 J/ O1 Q! |) v, O+ e}* V. [( {+ j$ R& I! r
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了