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

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

[复制链接]

2016-12-12 12:24:54 6335 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、选择对象8 d! t, `/ P1 V: F; \  @7 p
& a+ N, w( S8 }2 K( T
捕捉
* F4 W" `( {% t' x& n) h. Q2 e4 F  PointOverlay             是否显示捕捉点
8 r9 Y) e, ^( [$ S! B  W; N9 i  SmartUpdateOption        智能更新选项4 c9 G) B# o: ?
                             Within Modeling   在建模
7 F( X4 L. Z/ `, P2 W0 R  p/ w8 V& f                             After Modeling    建模后# G% {3 T: m+ y5 I
                             After Parent Body 实体父后% _7 k; @3 S# q+ d" G
                             Mixed             混合
% y8 z( _+ M; {7 a* \
/ f3 e0 j& b5 X) O  SnapPointTypesEnabled    设置捕捉点类型的可见性0 K* Q2 X* A: s' Z: [* X3 f
  SnapPointTypesOnDefault  设置捕捉点类型相关的内容被启用- G; i% O& C; E* Q( U# s

4 ]* q4 ~/ V% ]0 |9 i" h常规" D9 y& b% u- k
  BlockID  控件id
0 Y" O7 o( W, V9 I1 }- W9 g  Enable   是否可选/禁用控件" y8 p! I7 M" [  F8 y1 p9 h: z5 V+ o
  Group    组
8 S* l# `9 S9 A/ ~) |  Show     是否可见
& D8 ^* ?5 ^8 g3 o$ C3 w$ M" c+ K, G8 B: ]
其它 3 t& n! f7 H- j0 u" u: {* c) D
  附着
0 @2 g( ^4 Y1 O; f    Bottom  底8 [6 ^( h" i8 H5 V
    Left    左% p  a8 x! {; K% n
    Right   右
& h$ e) a) d* A' c! Z4 i, r  m9 Q    Top     顶# j# V0 Z7 K  I! H) @' n7 d! o  u

' m5 f8 }6 f- Q; [5 N# |特定于块& I1 ?; m- b: _( l. w1 E2 c; v  u
  AutomaticProgression     选择后焦点是否自动跳到下一个控件
9 C1 |$ D/ L4 d* U" ~4 g  BalloonTooltipImage      动态提示图片(鼠标移动到控件是显示图片)
! w$ l$ B3 o' f+ Q3 S( ?$ I  BalloonTooltipLayout     动态提示布局
% r3 J9 e+ |5 X* u  BalloonTooltipText       动态提示文本内容
' \0 t4 a$ o& k8 \  Bitmap                   指定图片
& K' f" ^) x) k  BlendVirtualCurveOverlay 是否显示虚拟交线
9 J$ _! i! l9 m; k; e* R" f  CreateInterpartLink      是否显示部件间连接图标在选择条上$ i( _. i/ |. @- L  c3 K4 u0 h( P
  Cue                      提示
' ~* Z( t- m  A$ U7 f, {* y% }9 u
  InterpartSelection       部件间选择设置2 F, Q* q# _8 Y5 Y- N: V, @. [
                             Simple                                           简单
# F1 Q( E: C) G, s5 y5 E& k                             Non-associative Interpart Copy Only              只复制部件间非关联9 L9 E3 n6 L* ^: E2 A0 @  M
                             Associative and Non-associative Interpart Copy   复制部件间关联和非关联
, h5 Q% {( ~3 T9 x) I                             Associative Interpart Copy                       复制部件间关联+ q+ [5 q8 s' ]5 a1 [0 m7 t) e
: }$ n1 l; }7 p, q
  LabelString              标签标题1 F- q6 q' V1 D7 d  `3 i9 C4 i
  MaximumScops             设置选择范围- O7 m; D& w! S6 U2 n, `
                             Entire Assembly                 所有组件/装配& e' ]1 v  B  a
                             Within Work Part Only           只是工作部件4 o% m# X+ X9 X6 ^, H2 J  ]
                             Within Work Part and Components 工作部件和组件/装配)
8 V; @  c9 p* q& ?; Y& L+ s) v# {! ]& I, A: C
  SelectMode                设置单选/多选 , W# F. _3 a1 R" [6 a
                             Single   单选
- w8 {5 Y1 C. m8 M, I                             Multiple 多选. `: s. l8 \; b: H  u5 B* h& M4 i+ O

  H, K1 y/ J0 C/ X; ^! f  StepStatus               设置确定和应用按钮什么时候高亮 (Required 必需的时候)(Optional 可选的时候)(Satisfied 满意/满足的时候)& V" A% J9 _& t4 W# g" |5 p
  Tooltip                  动态提示文本标题(Bitmap指定图片时,鼠标移动到图片时提示文字)
/ g& I2 W) W  [6 R: L" {! u
! s2 |8 d- `) X, z* l" Q————————————————————————————————————————————3 ]4 y4 h7 n% P5 n
————————————————————————————————————————————+ M5 B2 D) _& [+ S9 l
咧子:获得selection0控件选择的对象" Q5 W( g! F! K; a2 |
      UF_initialize();
6 h1 u! _, A( i% C% S* H      std::vector<TaggedObject*>objects=this->selection0->GetProperties()->GetTaggedObjectVector("SelectedObjects");& _' f3 k$ Z; [0 S
      for ( int i=0;i<objects.size();i++) // size 列表长度,这里指的是 对象个数
1 o% P. j5 Q- d% r  K$ U4 Q+ _      {      $ g: y, j# u6 S2 l
         UF_OBJ_set_color(objects[i]->Tag(),1);8 F% H7 n5 {2 H( E8 d$ ?
      }
/ A  y% y8 a+ y; k1 G, k2 u      UF_terminate();
& H" I9 m0 n- _7 ?5 g5 c1 R: T5 ?" _! W: [- V; D
————————————————————————————————————————————
$ w  w* {" a( d. @3 |! M( _3 l咧子:对象加入到selection0选择控件的对象列表
- s" ^. p9 N2 ]7 V: j' n9 n7 {; h; r* @2 h3 S' w% Y, \- u- D
      tag_t obj=NULL_TAG;
: B, W  g) U' T* M) E      double point[3]={0,0,10};
5 f( \0 S2 t$ j. Y# ~      double XYZ[3]={60,50,80};
# J' O0 M/ {# \, ^3 t% a      char C[132]="";' ^5 |( a% x+ r6 {' d7 S3 z% x
      char K[132]="";
2 Y0 n8 e* f, ]7 j3 [' D      char G[132]="";$ Q5 g! e! p4 d. Q
      sprintf(C, "%f",XYZ[0]);
3 {, P$ B7 [7 M' O9 b      sprintf(K, "%f",XYZ[1]);
3 y( G& k/ ^) d) p+ |) R! }* B      sprintf(G, "%f",XYZ[2]); + m4 {5 M! O7 `& R9 z: s2 J3 J
      char * edge_len[3]={C,K,G};( }# W9 T; _6 W' o3 Q  i- L
      UF_MODL_create_block1(UF_NULLSIGN,point,edge_len,&obj); //创建方0 [: z6 o- k' _9 e
      UF_MODL_ask_feat_body (obj,&obj); //从特征中取出实体
5 y( Z' e2 w/ j+ {2 {' O
" \# L& e, ?; T; b) o9 q      Body *body1(dynamic_cast<Body *>(NXObjectManager::Get(obj))); //tag转换给nxopen
: w# T6 C+ @5 y9 J4 o( @4 |7 f' H0 [      std::vector<TaggedObject*>objects;
' A: J$ }1 g" v$ A  ~      objects.push_back(body1); //对象加入到selection0选择控件的对象列表6 N$ |, c  E# i, p! f6 |8 W$ B
      selection0->GetProperties()->SetTaggedObjectVector("SelectedObjects",objects);( Q6 Y+ V# H" _& V
————————————————————————————————————————————
2 \3 A8 w) @% B5 ]; x
" a3 T6 d  a$ M2 L- i* y//清除对象
6 X5 \, C* h% ?8 _. Jstd::vector<TaggedObject*>objects;
! G, [8 y2 k( s5 G6 ~  ~2 j& S! u0 uobjects.empty();9 ~3 Y- d0 Y/ Y8 e+ b8 J9 ~
selection0->GetProperties()->SetTaggedObjectVector("SelectedObjects",objects);- i) G7 [+ ]4 t% v6 m& l9 F6 f; {* y+ c

* H+ G4 M# k- R# n9 m* ~————————————————————————————————————————————
/ C8 R  h' X' w2 X咧子:只选择面4 V5 Y, t0 u( v# K; _8 @" F4 B
        initialize_cb() 初始化里加代码 或 dialogShown_cb()显示对话框里加代码 可进行对象选择过滤3 `# L) o, e& N3 R4 C+ K

+ r" T# L9 v% p7 u        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式
! x+ U3 Q) p$ y
" ~8 y0 {9 z1 [0 Q        //对象选择过滤 只能选表面
) t, a& d2 F5 h5 d        selection0->GetProperties()->SetString("LabelString","选择表面");
; Z2 c7 A& W9 c9 v" O  l; H3 ]        std::vector< NXOpen::Selection::MaskTriple > maskTriple;( g8 `9 V/ [8 D7 j, h, M, l
        Selection::MaskTriple mask1(UF_face_type,0,0);7 o7 c! T6 m7 z
        maskTriple.push_back(mask1);8 q" n  D4 C& }1 n! @
        selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);
4 M, ^  }7 u3 |3 V0 X
1 A0 q$ p* o1 e
9 Q& ]. R. X7 |* X1 @9 ]8 i咧子:只选择面 【UG本身过滤器跟着变】
+ v" j! y7 g5 |3 R9 H$ ^        initialize_cb() 初始化里加代码 或 dialogShown_cb()显示对话框里加代码 可进行对象选择过滤   
3 o) w( v4 ^: k  k7 {- D, L2 L% @1 g
        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式
8 T3 r8 X5 |% f% B! |% H( E3 }2 l6 i: @- |( `' M* Z0 r% L9 z/ Q
        std::vector< NXOpen::Selection::MaskTriple > maskTriple;! q9 k5 S' [/ ^3 ^$ X3 e! M% g
        Selection::MaskTriple mask1(UF_face_type,0,0);
% B/ v3 C5 r0 u' R! A" V+ i        maskTriple.push_back(mask1);
' w7 P7 `: [, ^! r% v        NXOpen::BlockStyler:ropertyList *selComponentProps = selection0->GetProperties();7 H4 E/ F; L" Q7 _
        selComponentProps->SetSelectionFilter("SelectionFilter",Selection::SelectionActionClearAndEnableSpecific,maskTriple);6 j7 T% N# H8 m$ N! ?* T
        delete selComponentProps;- ^9 ^# k9 U9 x* }2 A* b* [- ?7 i
        selComponentProps = NULL;
% h& E, \+ Y3 h/ n0 D8 P5 i: s. }  w4 E5 T; o1 k6 {1 g( S7 R- Z
上海点团信息科技有限公司,承接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 | 显示全部楼层
列子
0 j# }, [, e3 a  W! v" d: S# D1 T" J% e5 m  X' ?6 F* ]
————————————————————————————————————————————
2 [8 \; @( p! Y! G* p, {9 B* C! m————————————————————————————————————————————
  [) d6 f2 s" ^8 V+ u咧子:只选择 实体边缘 直线和圆弧" s: d" g; X; z& b7 o- P1 Z
5 F9 Q! N6 z' R* `5 x
  initialize_cb() 初始化里加代码 可进行对象选择过滤
% H9 h) C+ {: J
6 W& ^7 a( o7 F9 P9 w: J# Z# F5 x6 _( G        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式/ w! O6 _* F+ x0 j. r! Q
                        selection0->GetProperties()->SetString("LabelString","选择边缘");//只选择 实体边缘 直线和圆弧
9 L  d* g: |) z$ C, \                        std::vector< NXOpen::Selection::MaskTriple > maskTriple;
1 Z5 f# ]2 G  m. g                        Selection::MaskTriple mask1(UF_solid_type,UF_solid_edge_subtype,2);: N2 C3 |4 M: z
                        Selection::MaskTriple mask2(UF_solid_type,UF_solid_edge_subtype,3);
2 Y) {6 z4 }* R+ k$ |, N( ]8 R                        maskTriple.push_back(mask1);2 g8 T, x: Y8 e
                        maskTriple.push_back(mask2);/ x  T# n1 V/ O
                        selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);4 K/ @3 F: C; v5 r6 M7 L- y
" }: D! x2 a$ Y# K1 w: |
//过滤无效的边缘: _9 C0 |  B/ l, K/ B. X8 q8 o1 ]
int ML_NX001::filter_cb(NXOpen::BlockStyler::UIBlock* block, NXOpen::TaggedObject* selectObject): I; s; Y- e7 Q: b1 A; e+ {% N
{        2 z1 t! l7 ?! Y5 y) i) U6 L- \$ k
    tag_t obj=NULL_TAG;6 f+ N$ ~: k4 O) S" `& d& F( O
    UF_MODL_ask_edge_body(selectObject->Tag(),&obj);
  ]$ Q( p7 a# \& g6 P/ C4 n7 t2 ^    if (obj==NULL_TAG) return(UF_UI_SEL_REJECT); //不加入到对象预览列表
  H" p* I! K6 q7 X" Z    return(UF_UI_SEL_ACCEPT);                    //加入到对象预览列表
$ u1 `, z" U$ s" H4 f7 g}/ N2 t. b  Z3 C' d( M. F
————————————————————————————————————————————
7 v0 F. A' ?! N" L! b& `7 i* B————————————————————————————————————————————& q3 k0 j$ u3 K: O6 g2 H* z
咧子:通过枚举控件选项来 时实  分别过滤 边缘、表面、实体9 n8 ]& ^2 n* p! v. K! Z* |6 P( q

  g4 r/ L' X1 t   int enumValue = this->enum01->GetProperties()->GetEnum("Value");
0 E1 K5 \) E0 h8 V& M                    if (enumValue==0)
) q% K$ j6 q1 c: }: p                    {
. B9 k3 D( V5 }$ f% s, C                            selection0->GetProperties()->SetString("LabelString","选择边缘");( N# e9 ]* J8 p8 g) b
                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;
: E) N4 r. y  o3 x; ?/ L4 f                            Selection::MaskTriple mask1(UF_solid_type,UF_solid_edge_subtype,2);$ ~& r0 q  B5 r
                            Selection::MaskTriple mask2(UF_solid_type,UF_solid_edge_subtype,3);* _# }6 J+ A8 b: l4 O
                            maskTriple.push_back(mask1);6 p& p( H$ w5 X- J" N' v
                            maskTriple.push_back(mask2);9 j* T2 x  e% n; `
                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);
% m" f! S$ J: x! Z                    }% a# P6 X) [$ E' c6 C# I
                    if (enumValue==1)   e0 f3 @+ p8 V, U, P: c, F  L
                    {
8 M. w8 Z! r" i9 u& d                            selection0->GetProperties()->SetString("LabelString","选择表面");
* i9 l: H( \: r! n                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;2 ~9 k) F: W) p  `4 a
                            Selection::MaskTriple mask1(UF_face_type,0,0);# ~- y7 s+ Z  ^  S. j
                            maskTriple.push_back(mask1);$ a7 _" [# \0 \: n  M
                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);, J. {" Y; B! d% |
                    }1 J9 }, o8 d! {5 R4 y2 C
                    if (enumValue==2)
, L4 p3 p- b3 G9 @, F                    {
7 i0 k" m  z- f4 f$ W5 M                            selection0->GetProperties()->SetString("LabelString","选择实体");
5 r' V7 ^( }- ^) x2 z* u                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;  n$ X) M7 [& X8 D
                            Selection::MaskTriple mask1(UF_solid_type,0,0);& a* D& E& B7 ^, N
                            maskTriple.push_back(mask1);
; ?' Y6 T# \9 n4 g- q5 S                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);
0 [% M0 V) a6 r  D0 A) n5 U                    }$ C, u: ?1 ]1 R! @. n

& R7 j# ?0 }# M: T7 h
4 c- I' j, t. u% e  d# Y( \( J3 A//------------------------------------------------------------------------------
. T4 O' D. d" {/ g//Callback Name: filter_cb 过滤不符合对象
% ~/ P% {# K+ t. w  ]; J/ W//------------------------------------------------------------------------------8 Z7 W2 c7 J3 @
int ML_NX001::filter_cb(NXOpen::BlockStyler::UIBlock* block, NXOpen::TaggedObject* selectObject)! Y  w! d8 s; F9 F  i$ P
{3 C' y9 D  e" }; i  T0 e  A7 N
        
2 q% ^( b: `& Q        int enumValue = this->enum01->GetProperties()->GetEnum("Value");( D" x: _- a) A" t" r- N
        if (enumValue ==0). C% E: X' Q, [
        {
& e1 `, P- k9 {% e9 h2 ^4 A* o                 tag_t obj=NULL_TAG;' i9 j! O+ z! g2 c/ @! `$ {6 j
                 int err=UF_MODL_ask_edge_body(selectObject->Tag(),&obj);; {9 g5 a& h# D2 j% b1 F
                 if (err!=0 && obj==NULL_TAG)
4 J- r, Y1 x( [( P# e! y             return(UF_UI_SEL_REJECT); //不加入到对象预览列表
6 f9 `( r  m: V8 H1 x        }' `' Y+ ^7 ^+ ~8 ~* y- y9 ]: Y
        else if (enumValue ==1)
8 y' L/ p2 N- O% w        {6 A  s: |3 r. @% B; R2 A% t
                 int type=-1;2 b$ R, P6 w# q9 m9 `2 c
                 int err=UF_MODL_ask_face_type(selectObject->Tag(),&type);. n6 t. L; `) R4 r  `# O) m
                 if (err!=0 || type==-1)
' p7 \& l3 c6 w5 r             return(UF_UI_SEL_REJECT); //不加入到对象预览列表1 N  b, S0 v( N" d
        }" M5 z3 M) `0 y: _( z
        else if (enumValue ==2)7 S1 L% n. T, d; o" y: c! e
        {' H7 m" a# f" O$ k
                 int type=-1;) V: r& G; x# b4 n, H: U) p, a3 i
                 int err=UF_MODL_ask_body_type(selectObject->Tag(),&type);
6 O/ x0 c& _1 F6 j5 \6 B+ [                 if (err!=0 || type==-1)8 F6 P6 v$ r+ v* }
             return(UF_UI_SEL_REJECT); //不加入到对象预览列表
$ Z/ m/ q$ E4 V9 H& w2 ~7 I        }* C( x6 x3 n8 d+ B
4 z8 {5 L6 ?. \: Z, m7 A
        return(UF_UI_SEL_ACCEPT); //加入到对象预览列表! l/ }8 _5 I  e/ |$ P7 ]
}
( r  ~$ ?5 C/ B- G, Y
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了