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

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

[复制链接]

2016-12-12 12:24:54 6176 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、选择对象
, m, i9 N, X3 n7 p) Z
( t6 {) `# {2 y! Q2 ?( r' B捕捉7 j, H. y# h7 h& U6 m% m0 h1 j
  PointOverlay             是否显示捕捉点/ Q7 S. E; ?) o$ b6 d2 C* z
  SmartUpdateOption        智能更新选项
  s4 Z5 c& W# J% g6 u, T2 H# U                             Within Modeling   在建模2 j- `! L& ?; j/ k+ t& C7 T. i, x% n) F
                             After Modeling    建模后& `/ j/ z& v- Y+ G
                             After Parent Body 实体父后" {7 H( W% a* i# q: |8 o) r
                             Mixed             混合; u' a% a4 j: Z$ d

1 w! X! |; o' U4 V) a, A  SnapPointTypesEnabled    设置捕捉点类型的可见性
* L- l1 G/ p& d# ?8 M- q3 P  SnapPointTypesOnDefault  设置捕捉点类型相关的内容被启用, r, P& k5 B/ N

( j# b4 ~7 Y, }$ D常规; `' m! l. s! Z+ j' _
  BlockID  控件id/ \0 b& {: k% P6 a- t+ h6 k
  Enable   是否可选/禁用控件
' ^2 @+ O7 Z/ @3 m  Group    组2 H, p2 V+ L5 s0 M
  Show     是否可见
) X( X! u' u* J/ x: D& ^' Z! g1 o4 B- ?
其它 $ V% ]2 u8 |& E8 k5 _
  附着
0 X1 y( I5 i* ]  U: g/ K3 K! {9 @    Bottom  底
( ]) n, g6 [) _( V2 p0 N    Left    左
/ @# J  T( P7 G) Y5 K    Right   右
8 U# q$ ~& y8 I8 h5 m. d4 R    Top     顶4 x' C: K  i1 U1 K7 g
1 C+ H5 D9 b: D
特定于块
5 r1 I- l, ?( n+ G: b* L9 ?  AutomaticProgression     选择后焦点是否自动跳到下一个控件, U/ G/ b6 g7 B! Z' F3 W) O
  BalloonTooltipImage      动态提示图片(鼠标移动到控件是显示图片)4 [2 U# N4 R8 L1 K: G
  BalloonTooltipLayout     动态提示布局- o7 m9 R0 _% j6 }2 Q2 N
  BalloonTooltipText       动态提示文本内容
3 f1 e( @. e  i0 o  Bitmap                   指定图片
9 b7 u9 X6 J9 T: A  BlendVirtualCurveOverlay 是否显示虚拟交线: X% s( k% ]% V1 \# c: m
  CreateInterpartLink      是否显示部件间连接图标在选择条上
7 y, g  P0 T7 B; r' I# ^4 N& J  Cue                      提示! R/ a! `3 j& V7 M" ?' d- K; R
9 z9 J; K; |8 `( P7 n
  InterpartSelection       部件间选择设置/ _7 ?2 D2 |$ ?' i  v& T
                             Simple                                           简单% l7 W: p  x  Z
                             Non-associative Interpart Copy Only              只复制部件间非关联' ^5 u' O% x  z3 K! c" b) D8 ?9 ^
                             Associative and Non-associative Interpart Copy   复制部件间关联和非关联& ^. q- s4 z* e# ^
                             Associative Interpart Copy                       复制部件间关联0 P. m0 Y# e. c5 ?% M3 g9 k

7 c1 v5 D6 _6 B  LabelString              标签标题# K' E1 i5 ^4 O+ x6 P7 r
  MaximumScops             设置选择范围) F1 h: N7 {, x3 J. y
                             Entire Assembly                 所有组件/装配5 J& j( p; L4 p
                             Within Work Part Only           只是工作部件
2 _! e/ Z$ f+ I8 v  u1 m6 i( ~                             Within Work Part and Components 工作部件和组件/装配)2 H9 S: \8 k" H4 A; J4 d+ q1 \* c

8 I8 L$ g1 I! d% K. m  SelectMode                设置单选/多选 ( b: l+ T3 K' Q# y( h  y4 i
                             Single   单选1 j; J4 y7 n0 m4 E
                             Multiple 多选
- Y# h+ H5 n0 C- ]4 w) a% [+ [0 _$ g9 W) l$ J
  StepStatus               设置确定和应用按钮什么时候高亮 (Required 必需的时候)(Optional 可选的时候)(Satisfied 满意/满足的时候)" {& B' u0 ~1 V) H# ~, ?, L
  Tooltip                  动态提示文本标题(Bitmap指定图片时,鼠标移动到图片时提示文字)
9 {6 r8 H8 {1 @8 ~7 m- L) U9 j" s) @# i2 w0 i
————————————————————————————————————————————
) a8 P! ?+ v' w, z  d. U1 W+ v$ @- u————————————————————————————————————————————1 {4 s- }2 t* X6 d
咧子:获得selection0控件选择的对象
4 A" O* g8 a3 v& r( K1 y. y      UF_initialize();
2 R0 g7 m% t8 i( N) @8 t& s- |      std::vector<TaggedObject*>objects=this->selection0->GetProperties()->GetTaggedObjectVector("SelectedObjects");, @! M0 |- ^8 C1 d
      for ( int i=0;i<objects.size();i++) // size 列表长度,这里指的是 对象个数9 _# X$ y3 ~. S8 C7 l) r1 {
      {        o* U: m3 l9 |
         UF_OBJ_set_color(objects[i]->Tag(),1);
( M; R2 r& U. f$ [7 U0 x      }0 F* `0 B# x' O$ ^& }8 O# l6 i
      UF_terminate();, u! J8 O: h# W% C. I
& e& B* z" L5 Z2 O. V( L
————————————————————————————————————————————
: w' b: H+ d4 D$ \5 E* p0 H% m+ H! O咧子:对象加入到selection0选择控件的对象列表( N: M3 G! C! f+ {4 F

, S4 {! D' @6 C7 Z) i. U      tag_t obj=NULL_TAG;
% M$ `7 R. D& f      double point[3]={0,0,10};
8 }, ^% r( C% N; Z$ c      double XYZ[3]={60,50,80};  G( j7 d' I& w7 B/ ?# f0 k
      char C[132]="";* Y# ?! i6 d; q1 T
      char K[132]="";2 O7 }  w$ [& R- r* c
      char G[132]="";, C3 j& y# G3 @( w( q7 l
      sprintf(C, "%f",XYZ[0]);& ?2 x! a8 k4 M3 D- E% {0 f7 E
      sprintf(K, "%f",XYZ[1]); 2 `, B" L; S+ j& `( p
      sprintf(G, "%f",XYZ[2]);
5 o/ i: |2 K' B5 [1 f$ R, a/ x9 Z      char * edge_len[3]={C,K,G};
& k0 `1 y6 w& U3 n      UF_MODL_create_block1(UF_NULLSIGN,point,edge_len,&obj); //创建方
& t' I% A6 y8 _9 m      UF_MODL_ask_feat_body (obj,&obj); //从特征中取出实体% Y3 L0 V1 f0 O, q) F5 S
# C3 K  ?" K$ x# |( e
      Body *body1(dynamic_cast<Body *>(NXObjectManager::Get(obj))); //tag转换给nxopen
# c: M3 @0 B, d3 q) X1 T3 k* n      std::vector<TaggedObject*>objects;  Z6 N' t; ~* k
      objects.push_back(body1); //对象加入到selection0选择控件的对象列表; q  ]9 v' `$ b5 |
      selection0->GetProperties()->SetTaggedObjectVector("SelectedObjects",objects);$ @; e, f9 F8 I
————————————————————————————————————————————& ^: m0 j) x7 B7 X4 h

/ n) w2 p$ j5 A/ D% v2 B6 C//清除对象2 k) i) d. `/ s! {( g, `
std::vector<TaggedObject*>objects;
# F: U9 w; }* X& Uobjects.empty();
, O% e, g5 u6 [8 eselection0->GetProperties()->SetTaggedObjectVector("SelectedObjects",objects);
' X  v, Q6 k- D' ^9 t
: z1 j; \4 C- N4 @" l————————————————————————————————————————————
; }7 L: f$ w, a9 M; |6 H, g咧子:只选择面
, F& G2 }7 J: t% x" D; N  {0 c: D5 h        initialize_cb() 初始化里加代码 或 dialogShown_cb()显示对话框里加代码 可进行对象选择过滤( B1 [+ f& T3 o& R

* J& Y; X5 v1 u+ }1 i        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式
2 m( t  p' j8 W2 C- L; ]9 p) D: i! W- R5 j
        //对象选择过滤 只能选表面2 n: l2 \, [0 y! ^4 Y8 V  {) D
        selection0->GetProperties()->SetString("LabelString","选择表面");
7 V& k, y$ z. v9 t' g8 c- D        std::vector< NXOpen::Selection::MaskTriple > maskTriple;+ z1 C& V3 A; U( E, Y6 N
        Selection::MaskTriple mask1(UF_face_type,0,0);
0 T9 G% C& n+ U6 t# d' u        maskTriple.push_back(mask1);
0 t) v- r  x/ E' H5 [4 H7 \! {        selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);
8 q7 V" t4 O! X- A( z; m' U0 ~6 H) O: n# o' g% v

# `) l/ [7 s2 t咧子:只选择面 【UG本身过滤器跟着变】
- w+ r+ H" x; R) D& a2 \        initialize_cb() 初始化里加代码 或 dialogShown_cb()显示对话框里加代码 可进行对象选择过滤   
& U3 R, R$ _- R) ]& c, k- X/ V5 l' |; c
        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式4 `; I! V; O4 y9 d1 v( b
3 q8 \2 U$ r& I. p
        std::vector< NXOpen::Selection::MaskTriple > maskTriple;
: n0 @+ n5 S1 u        Selection::MaskTriple mask1(UF_face_type,0,0);& k. ^! D4 e; }
        maskTriple.push_back(mask1);
! B, V$ `! h0 ~8 `$ q        NXOpen::BlockStyler:ropertyList *selComponentProps = selection0->GetProperties();
- _1 p% \5 x9 Y7 l+ {" `) U        selComponentProps->SetSelectionFilter("SelectionFilter",Selection::SelectionActionClearAndEnableSpecific,maskTriple);
, r" f) }  e8 @6 C        delete selComponentProps;
8 |7 O! q' _% F        selComponentProps = NULL;& c6 d1 L  t3 `9 h9 `/ P3 N

; t* ]' S- e3 Q, ~8 Q8 b) Z/ i
上海点团信息科技有限公司,承接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

列子
9 i6 f! P, f* I: q$ r9 h, Z! d( @) `& Q- a
————————————————————————————————————————————3 |: F2 I, _' g1 M/ e0 d
————————————————————————————————————————————
: S/ R. E2 G7 j6 Z. Z* b" m咧子:只选择 实体边缘 直线和圆弧0 P9 B% t( D* k( J* W& S; [, Y7 `/ G+ m' K

, j) {2 M$ m, ?# @  initialize_cb() 初始化里加代码 可进行对象选择过滤
7 Q# I& w- j7 Y! O7 }+ ~
" ^# N/ R( i# S" D% m) F3 w+ R+ R+ a        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式- f9 ^  S. Q; f4 J3 y* j
                        selection0->GetProperties()->SetString("LabelString","选择边缘");//只选择 实体边缘 直线和圆弧# K  j# h5 `9 V
                        std::vector< NXOpen::Selection::MaskTriple > maskTriple;
7 d2 O/ y: Z! O                        Selection::MaskTriple mask1(UF_solid_type,UF_solid_edge_subtype,2);
: Z/ I  ]& ~+ o4 _( K                        Selection::MaskTriple mask2(UF_solid_type,UF_solid_edge_subtype,3);# _( Y7 o; U7 V$ L
                        maskTriple.push_back(mask1);
5 b9 a( z, [7 `# Q5 `  d2 z                        maskTriple.push_back(mask2);
6 V- B5 G) u+ P  H: r* X                        selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);
7 q# t6 G1 I& W+ Y9 P9 B8 {2 |: \9 w  M- l- a) s
//过滤无效的边缘
  C. C" o  M6 n9 Iint ML_NX001::filter_cb(NXOpen::BlockStyler::UIBlock* block, NXOpen::TaggedObject* selectObject)) a& ?7 f# t* F1 I" \
{        0 g: @$ [& \1 @: u, d
    tag_t obj=NULL_TAG;* ?1 S2 D0 A, z0 q# }4 j6 \5 n
    UF_MODL_ask_edge_body(selectObject->Tag(),&obj);8 Z4 \# d# b2 h, N3 v0 {
    if (obj==NULL_TAG) return(UF_UI_SEL_REJECT); //不加入到对象预览列表
7 m5 s7 U& P+ t" b9 d8 ~7 c    return(UF_UI_SEL_ACCEPT);                    //加入到对象预览列表; N9 ]3 c; |- x2 T( W
}' g+ _! o1 r8 T6 U# O& n  r
————————————————————————————————————————————
% b  B% u' p! v4 Z7 N  F————————————————————————————————————————————% G4 w. p# S' J  p- B' L
咧子:通过枚举控件选项来 时实  分别过滤 边缘、表面、实体. _0 |: g! r0 j0 H
* ]+ a) ~6 A; R3 Y. Y; ^, }
   int enumValue = this->enum01->GetProperties()->GetEnum("Value");/ X: ]4 \/ x& A  H% P
                    if (enumValue==0)
+ d; I. f/ Q: P                    {  D7 Y/ u$ U9 V3 c% n5 @
                            selection0->GetProperties()->SetString("LabelString","选择边缘");
' g# n6 T: F& B' _                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;
0 n. V7 ^( B: ^% _- s/ h7 E                            Selection::MaskTriple mask1(UF_solid_type,UF_solid_edge_subtype,2);
3 R+ ^3 r" q9 a( U                            Selection::MaskTriple mask2(UF_solid_type,UF_solid_edge_subtype,3);
" G$ U% m6 m* [% D/ d4 Y# S                            maskTriple.push_back(mask1);; A9 j" n  f9 N  ~* B
                            maskTriple.push_back(mask2);6 _4 M- C3 p9 d$ M. g
                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);
2 v1 s' k$ ]) s; {# m, k" @0 k                    }
, v# w4 i2 Z0 G  K; M" s1 c6 @                    if (enumValue==1)
! P- S# @* |/ ~9 e# }% u" l5 R# z& t                    {
# ^3 N# E$ A$ Z  @4 @" G& S& h% r                            selection0->GetProperties()->SetString("LabelString","选择表面");! H. |; ]4 H+ v/ F6 z
                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;* L$ w; ^! K: \6 r. S( L
                            Selection::MaskTriple mask1(UF_face_type,0,0);( Y; |* I# f7 n" q
                            maskTriple.push_back(mask1);+ S2 v9 D( V, k6 v9 S
                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);8 E4 n2 I5 O5 H2 Q$ B' Z: b6 A
                    }5 P' @3 ~* j* C2 V3 A5 a: U) `* z
                    if (enumValue==2) * c( Y/ `8 ^0 A5 a$ w- f
                    {
) f0 O& e# e7 H/ w                            selection0->GetProperties()->SetString("LabelString","选择实体");- n* d; z  ^. p) }# r7 m
                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;
/ k; Z( [) M# R* C1 V) t; E                            Selection::MaskTriple mask1(UF_solid_type,0,0);% D9 [: ?4 n+ x0 r
                            maskTriple.push_back(mask1);" H, B4 p) |2 @- _* b1 K7 G
                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);
, H( e4 D& ]7 r% O7 c                    }
( O7 i' i6 S; T- ^  d6 t- L
2 R) |; ]9 z. J7 q; F0 r/ d9 R# e) G  P; n% ~
//------------------------------------------------------------------------------
; u/ J1 c4 @# @" j0 @//Callback Name: filter_cb 过滤不符合对象0 ]! B  r, n5 r- v! n3 s3 r
//------------------------------------------------------------------------------% W) {8 Q" y- I' x* `  C6 n6 p4 g
int ML_NX001::filter_cb(NXOpen::BlockStyler::UIBlock* block, NXOpen::TaggedObject* selectObject)
! H" F% x, ^5 ]5 k{) @: }/ V8 N5 j, Y' w9 m9 }4 @7 i
        
* P0 I8 \% y1 p8 D4 D        int enumValue = this->enum01->GetProperties()->GetEnum("Value");5 q4 S+ z8 H- j% G- R
        if (enumValue ==0)8 {  F: I! |' A
        {5 w! j( h' z- f: l( [
                 tag_t obj=NULL_TAG;9 N$ E2 B3 U7 A' H
                 int err=UF_MODL_ask_edge_body(selectObject->Tag(),&obj);' S4 d% K) J# a% k# [+ d6 p1 [
                 if (err!=0 && obj==NULL_TAG)
& S% R7 _6 D3 N5 x8 J3 r             return(UF_UI_SEL_REJECT); //不加入到对象预览列表
6 H  s  P9 h4 N0 ~* L3 t- p        }# @5 T" t/ I2 Q7 ?- v
        else if (enumValue ==1)
& P! Z# b- G% F# \' r        {
  a/ Y, @' a; Z# l6 Q1 g6 C                 int type=-1;4 j( B7 p6 e. |$ C" o6 V7 m8 Z' E+ V
                 int err=UF_MODL_ask_face_type(selectObject->Tag(),&type);  Y0 h3 v* @2 W0 M+ u4 k
                 if (err!=0 || type==-1)! l% o9 U  A( K: c
             return(UF_UI_SEL_REJECT); //不加入到对象预览列表
4 Z" @  Q1 Q4 l( J        }4 }2 m  T4 h+ \5 L6 s
        else if (enumValue ==2)* M0 ^) [" S( g6 Q. \$ D
        {3 r/ M- V; e' J
                 int type=-1;; D" P, _+ `# X7 c
                 int err=UF_MODL_ask_body_type(selectObject->Tag(),&type);
5 T1 i; U$ r3 c) g                 if (err!=0 || type==-1)- h4 S7 R' X9 P( ]) [0 d4 ]
             return(UF_UI_SEL_REJECT); //不加入到对象预览列表
4 w3 ?$ o" e- @) Z        }6 D1 U) q; R) R5 v, f7 R8 Z9 E

" B! S/ O5 k3 c; I' ^        return(UF_UI_SEL_ACCEPT); //加入到对象预览列表
  p3 o' e: g, ^. S}, F6 n0 g$ x2 V/ E' c" P0 _$ ?9 E
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了