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

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

[复制链接]

2016-12-12 12:24:54 6313 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、选择对象2 u3 i: ?0 j6 x* Q) H
' t8 m3 }6 `/ j/ L+ M0 v0 W
捕捉
5 E, e- \( L  R  PointOverlay             是否显示捕捉点
9 O) b# k3 D4 H1 B  SmartUpdateOption        智能更新选项0 [& p# u3 A+ W; _6 R
                             Within Modeling   在建模7 g( A4 |! b, l  o! o+ l
                             After Modeling    建模后
) o1 n/ g# _/ ^7 r# G7 A) d( k                             After Parent Body 实体父后4 C" b$ F7 I/ y3 D# i
                             Mixed             混合8 ?8 P& \9 V' J, x- F: Z; n: s& @
% J1 e. ^; a% I: {
  SnapPointTypesEnabled    设置捕捉点类型的可见性
; ^7 |5 l5 b# Q: `$ ?  SnapPointTypesOnDefault  设置捕捉点类型相关的内容被启用0 Z& i' d8 w( P; f

9 g5 d' o1 @) W# r3 r常规3 ?8 G3 g. }# _( ?* s9 {( Q
  BlockID  控件id
% l& d# Z( d) k$ M6 [/ l  Enable   是否可选/禁用控件( {+ H1 }+ C" }1 G* ~. k" `
  Group    组
: P, _; O) |  z+ b* x- e5 j  Show     是否可见
8 T3 ^* i( R+ i2 O. U/ K
( ]  _- `( i% D( C$ ^3 `0 k其它
: T% X1 a3 Q. P  `' n  附着* z: U1 k/ Z6 D2 E% V, Z/ `
    Bottom  底' [; G% F, T# [9 u
    Left    左8 u1 y8 _" Q7 Y' j2 C3 W
    Right   右' q, a6 S! H) c
    Top     顶
3 X. C1 ^- z! Y+ k- @9 E4 ]3 W0 G  ~3 H9 j/ m
特定于块
1 m2 S# l' ~. m& @: N  AutomaticProgression     选择后焦点是否自动跳到下一个控件
0 A& M7 a- z/ `- h  O. T  BalloonTooltipImage      动态提示图片(鼠标移动到控件是显示图片)& T- f& c# }3 }
  BalloonTooltipLayout     动态提示布局
8 A; }( L0 p9 |4 k  BalloonTooltipText       动态提示文本内容: }3 ]- N- U7 ~) H* W6 R
  Bitmap                   指定图片
4 j% ~/ s0 ]3 U4 @  BlendVirtualCurveOverlay 是否显示虚拟交线
3 D2 I+ |1 Q4 P% @9 r0 w  CreateInterpartLink      是否显示部件间连接图标在选择条上
7 P& g8 c* B, m2 ^( Q  Cue                      提示
# {1 v& e. |6 r: F* k2 ~  K; p3 w, Q3 t: n' d% g1 s
  InterpartSelection       部件间选择设置& X2 n% ?5 Q& p; L& G
                             Simple                                           简单
( ^' a  c* T4 h. T# Q! P. U+ G' k1 U                             Non-associative Interpart Copy Only              只复制部件间非关联
3 t- D1 \" m- V+ j! J                             Associative and Non-associative Interpart Copy   复制部件间关联和非关联, B7 K& \5 g) v1 j! n% Z
                             Associative Interpart Copy                       复制部件间关联& o2 [- ^6 i  s- n2 r$ ^' ^
5 Q8 y2 V- o9 l% }- f2 ?
  LabelString              标签标题
+ U. y% j3 Y' r4 A, Y; e5 O  MaximumScops             设置选择范围
9 q0 S4 |' l# K: ]8 i                             Entire Assembly                 所有组件/装配# f5 W+ e# R# v! X
                             Within Work Part Only           只是工作部件
- h# o" l* o  K& D. A- k/ k                             Within Work Part and Components 工作部件和组件/装配)
- `5 ?' L0 j- i: ?+ {+ `  t& w! U* ?2 m# n, j
  SelectMode                设置单选/多选 ! c& a8 U1 D3 v+ `3 ~
                             Single   单选# I( v/ |: U" x0 |+ L
                             Multiple 多选
4 ?. }( H# h5 B) b1 K) _0 M) u/ U
9 P. K* P# y" t8 e3 A; R$ X  StepStatus               设置确定和应用按钮什么时候高亮 (Required 必需的时候)(Optional 可选的时候)(Satisfied 满意/满足的时候)3 b/ j  G* j  z/ }3 j7 B
  Tooltip                  动态提示文本标题(Bitmap指定图片时,鼠标移动到图片时提示文字)9 m0 p: B2 ^7 s* A, b

* _9 T% F1 t8 F) g8 i% Y% {! _) _————————————————————————————————————————————: c2 `9 F1 f7 a! Z- I. Z
————————————————————————————————————————————
2 |1 L5 P* P7 d6 D咧子:获得selection0控件选择的对象
, W/ E& c7 D% G' t! C4 a  B      UF_initialize(); ' d1 D2 O. L! H. u; @
      std::vector<TaggedObject*>objects=this->selection0->GetProperties()->GetTaggedObjectVector("SelectedObjects");
  K( e/ ?8 k# D0 \      for ( int i=0;i<objects.size();i++) // size 列表长度,这里指的是 对象个数
; Y3 w0 f( ^' l      {      
$ `1 @5 ]! P/ H+ ]7 C7 t4 L& e/ m         UF_OBJ_set_color(objects[i]->Tag(),1);
  o$ Q: `0 i, e  U$ Y' ]      }
9 B( I  G9 }1 n$ Z+ n5 g      UF_terminate();+ }  c, m% G7 G1 ^' M
( w/ i. e9 v* X; M
————————————————————————————————————————————
7 P" S# y9 X' {7 B+ C咧子:对象加入到selection0选择控件的对象列表
) t4 }: X; R+ Z. Z' H
* s  x" h+ ~9 m# @      tag_t obj=NULL_TAG;
& R1 x! m% ^6 R4 i0 o9 q      double point[3]={0,0,10};
  D+ n! Y; u9 t1 D      double XYZ[3]={60,50,80};- D$ Y, L$ \1 @- d) ^
      char C[132]="";
+ P! q/ m% Z! c/ A. u  o      char K[132]="";
; H7 F" p# z/ ~6 Y# ]$ ~. X      char G[132]="";
% S) B% N+ M9 M      sprintf(C, "%f",XYZ[0]);
+ X" D  ]; x9 B  o) B9 k' y      sprintf(K, "%f",XYZ[1]); 2 f# t+ S4 ]' z- f# C/ ?+ w
      sprintf(G, "%f",XYZ[2]); " F, p; w! r0 o6 d$ H8 x
      char * edge_len[3]={C,K,G};
6 K' l2 U2 l2 @" N2 F      UF_MODL_create_block1(UF_NULLSIGN,point,edge_len,&obj); //创建方
6 p- c6 a% a) c- k      UF_MODL_ask_feat_body (obj,&obj); //从特征中取出实体
) w! d& q1 `7 Z% V9 r1 r+ a
: ^. Y4 o$ }7 @% Y* h5 @4 b, p/ F      Body *body1(dynamic_cast<Body *>(NXObjectManager::Get(obj))); //tag转换给nxopen( k) Z1 z. i9 m7 k& K
      std::vector<TaggedObject*>objects;
' p( y; Q2 j+ i; e6 O; C& ~      objects.push_back(body1); //对象加入到selection0选择控件的对象列表
; i* m+ F, M# n5 d9 O; i- T" ?+ W      selection0->GetProperties()->SetTaggedObjectVector("SelectedObjects",objects);: }9 T' i: G7 I) J
————————————————————————————————————————————+ f0 `2 W& y- {$ b

* R" p" r0 t! G, @; G: P0 X//清除对象& Y5 ^3 H* d, d5 o6 _2 R3 ]/ @! M
std::vector<TaggedObject*>objects;
0 _2 X: Q& W; ~& o! C: Tobjects.empty();; D; b1 Q, o" q. d$ O" S* z4 I1 R' {
selection0->GetProperties()->SetTaggedObjectVector("SelectedObjects",objects);
9 C2 ~8 J# O' O: F6 f( }: \
1 y( d. @7 ?' h————————————————————————————————————————————. f) `/ e* [# N6 r- j
咧子:只选择面1 ?2 y0 G* r' c
        initialize_cb() 初始化里加代码 或 dialogShown_cb()显示对话框里加代码 可进行对象选择过滤
' c( o) Y& s. ~0 l# I  @3 y- s; c) I) i0 U) w" d
        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式
- x) F$ _- \1 e9 Y& o
* F) C1 J; U% a: k8 e. R0 Z, {        //对象选择过滤 只能选表面
( ?" y5 L+ k# F  ]# S        selection0->GetProperties()->SetString("LabelString","选择表面");& K5 i9 G' p6 i  }: G+ m( ?' b
        std::vector< NXOpen::Selection::MaskTriple > maskTriple;; l) m) c: u( l; B+ c- @
        Selection::MaskTriple mask1(UF_face_type,0,0);, X, l! o4 S) E# ]
        maskTriple.push_back(mask1);
# _; z- `5 C" T" ~$ b3 s9 M        selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);! |, K. W7 P' Z' P( }+ N3 W
: f: ]% K" n2 x" U. `( ?

, {0 j3 S4 d4 Q" n% C2 V# V8 f4 H8 B2 f咧子:只选择面 【UG本身过滤器跟着变】
) {- L/ K/ |( q: }" g1 C        initialize_cb() 初始化里加代码 或 dialogShown_cb()显示对话框里加代码 可进行对象选择过滤    7 F' D9 s" |# k

1 Y8 S: V* H$ M7 B( ^  l        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式
1 g) C& E6 [7 y% ?: C. E8 v2 V+ l. T; b% b# c! o% C: d# e
        std::vector< NXOpen::Selection::MaskTriple > maskTriple;7 [" q% C: [8 x. U8 ]9 X
        Selection::MaskTriple mask1(UF_face_type,0,0);
6 M* j$ Z( w8 ]* g1 [8 |        maskTriple.push_back(mask1);
( W% C$ Z" T# U( K        NXOpen::BlockStyler:ropertyList *selComponentProps = selection0->GetProperties();
7 {3 w2 Q) Z  v+ t0 G) \        selComponentProps->SetSelectionFilter("SelectionFilter",Selection::SelectionActionClearAndEnableSpecific,maskTriple);
* T% N; F& m' x        delete selComponentProps;/ h0 C7 t2 Y/ j, y" q$ i
        selComponentProps = NULL;7 _- s, y( j% J$ F; a% H$ i

8 i0 x  u' U! F0 ?7 l) [$ ^4 ~
上海点团信息科技有限公司,承接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

列子: d7 ?& Y) l! T, p: y& D
- @- Q0 N: Z( O; M+ J9 I
————————————————————————————————————————————' L3 T, M) G5 ]  V- v
————————————————————————————————————————————
* A7 b, _' |( P: m# T* ?咧子:只选择 实体边缘 直线和圆弧2 i& |" C  [3 R% U- E5 @
+ r9 {. w$ q+ R/ E7 L
  initialize_cb() 初始化里加代码 可进行对象选择过滤
6 n7 P1 w' H3 n" B5 W9 H' i! x# \
4 Z* `* o2 ?$ Y) y7 p        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式
4 }( N% C! T4 K+ I                        selection0->GetProperties()->SetString("LabelString","选择边缘");//只选择 实体边缘 直线和圆弧
. g3 b! Q8 |, V4 Z- o: d                        std::vector< NXOpen::Selection::MaskTriple > maskTriple;
% [- H3 G+ l" K  @( R- U% M+ i) U                        Selection::MaskTriple mask1(UF_solid_type,UF_solid_edge_subtype,2);4 |( \3 h- r1 o7 C5 l8 h/ }
                        Selection::MaskTriple mask2(UF_solid_type,UF_solid_edge_subtype,3);
# t9 \. q$ O# R) P  ]% U                        maskTriple.push_back(mask1);% J% v4 M( @4 y! {, H! T
                        maskTriple.push_back(mask2);
" N8 G. A$ b8 A3 T/ l$ m4 l% z                        selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);# O' d  `1 Y! M4 j- u

8 z, [& r% k+ g1 O3 B$ K- V" U//过滤无效的边缘
7 p( x2 @7 _) Eint ML_NX001::filter_cb(NXOpen::BlockStyler::UIBlock* block, NXOpen::TaggedObject* selectObject)  Z) U/ }& G7 ~6 o8 D/ @6 ?' o
{       
2 @: j5 j3 W& B# [) b  ?% F7 W    tag_t obj=NULL_TAG;
2 b* D" |6 c& z5 `, W/ W    UF_MODL_ask_edge_body(selectObject->Tag(),&obj);
9 b8 s4 z- G# D% F    if (obj==NULL_TAG) return(UF_UI_SEL_REJECT); //不加入到对象预览列表5 Z# y5 {% A  ^  T4 C
    return(UF_UI_SEL_ACCEPT);                    //加入到对象预览列表% v! \) ?3 y' m9 M' J) r
}1 e, M4 k) R8 r* W& B6 H- o
————————————————————————————————————————————
$ E  ]+ N1 |; j  i. ^, b————————————————————————————————————————————
2 x( K! e' Z6 O$ q1 x6 f咧子:通过枚举控件选项来 时实  分别过滤 边缘、表面、实体
; X" _  y; `: v7 p/ J) k" V' g
7 G+ I6 _& O4 s" v   int enumValue = this->enum01->GetProperties()->GetEnum("Value");7 _3 B- }5 K1 Y0 P
                    if (enumValue==0)
* U: E$ g/ n1 m& z                    {
" y- W. I# D% G! u                            selection0->GetProperties()->SetString("LabelString","选择边缘");
2 s6 d8 c! M- U! T7 \$ y4 X                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;
6 a  |% r- ?2 c% h, }! N. K                            Selection::MaskTriple mask1(UF_solid_type,UF_solid_edge_subtype,2);+ A/ R- w" X( K9 ]& N1 d
                            Selection::MaskTriple mask2(UF_solid_type,UF_solid_edge_subtype,3);9 P9 \3 R' E7 N' J6 @) V& X  Q
                            maskTriple.push_back(mask1);0 D% _# @1 t0 x. P+ r. z" E
                            maskTriple.push_back(mask2);
# X' u6 H! M# z- l                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);
6 s0 R" y+ Q/ V4 }                    }
: m: m6 o! F8 C6 c: y                    if (enumValue==1) 5 T8 Y5 A& x$ Z6 A% g! N' S
                    {
2 C; R7 E9 I; e4 p" F  W                            selection0->GetProperties()->SetString("LabelString","选择表面");
5 {6 r5 N8 ?5 o" j! f- i                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;6 N0 M3 Q) i& O, `. ?
                            Selection::MaskTriple mask1(UF_face_type,0,0);; l9 ?- p, r. O
                            maskTriple.push_back(mask1);
  m7 X' t. R# \4 P6 r4 S% A" T3 `                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);( s6 i; v: q' T: @" r
                    }
  y! Z7 e: o1 L! ?. g                    if (enumValue==2)
+ G- H/ R2 @3 o) {                    {
4 e$ \) C- s% K6 m# b                            selection0->GetProperties()->SetString("LabelString","选择实体");
1 `7 \9 H4 z8 {& B                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;* X% V& H7 S% h3 q
                            Selection::MaskTriple mask1(UF_solid_type,0,0);# V6 s$ o8 W  _- M( [# d% O
                            maskTriple.push_back(mask1);
8 r$ M7 n' h- |4 l                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);
4 X9 d, {  t" o. `% @: \6 d# @6 `6 M* b' i                    }
: c7 s. ]' j9 A: O. o& q6 ]( O8 ]; T
2 s, X0 F* t0 L1 u
//------------------------------------------------------------------------------
$ ?& c# L' h+ u//Callback Name: filter_cb 过滤不符合对象- Y" C" }" J/ Q
//------------------------------------------------------------------------------1 i( {' k4 o; \9 m; N& Z0 O
int ML_NX001::filter_cb(NXOpen::BlockStyler::UIBlock* block, NXOpen::TaggedObject* selectObject)0 E* q) ~9 [2 l+ B( G$ g( k% j
{
( v  E3 w6 y4 ?, T2 B) v        ( F+ D6 |" _: \0 [, ]: T+ B# S
        int enumValue = this->enum01->GetProperties()->GetEnum("Value");+ n2 {( H1 Q" n, V7 G; c/ i
        if (enumValue ==0)
4 s6 p% u2 A3 j8 s        {" K& Y9 s* A7 u+ b4 E
                 tag_t obj=NULL_TAG;
' M* z( B6 p  d# h- {* c" y% D                 int err=UF_MODL_ask_edge_body(selectObject->Tag(),&obj);- ~' ]$ R8 K4 O8 H
                 if (err!=0 && obj==NULL_TAG)
) f7 I8 q; a3 `+ A* l% w             return(UF_UI_SEL_REJECT); //不加入到对象预览列表7 v. T2 }0 H/ Z; ^3 g
        }, a0 u' ], @. F" |& o8 H5 r: y
        else if (enumValue ==1)
+ [7 ^7 D+ D* C2 s3 p        {( Q/ v, f! f9 @' k( M
                 int type=-1;7 r0 U  x6 h+ l9 F
                 int err=UF_MODL_ask_face_type(selectObject->Tag(),&type);# X1 a* ?& }+ A
                 if (err!=0 || type==-1)
0 U: Q- [" P3 x( V             return(UF_UI_SEL_REJECT); //不加入到对象预览列表) Y9 E: h' ?/ q1 f
        }$ o! z% y5 a' e
        else if (enumValue ==2)/ Y8 ^& v% W% H5 U# ?9 r! Q
        {
9 I" b0 h9 u# z0 ]# r0 o+ c                 int type=-1;( S, F5 U/ \) S& G
                 int err=UF_MODL_ask_body_type(selectObject->Tag(),&type);8 p- p3 J( v, e( x
                 if (err!=0 || type==-1)  E* C, f# t! g4 v3 O% u1 ?0 i: U
             return(UF_UI_SEL_REJECT); //不加入到对象预览列表6 G4 }# e9 N4 i
        }
8 v* o% _7 m0 \# a) f# I/ H
/ z: [: O* F, A4 w. v$ p        return(UF_UI_SEL_ACCEPT); //加入到对象预览列表, T8 E" {& ]  |: Y8 N
}* @5 c5 f; ^5 p+ 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二次开发专题模块培训报名开始啦

    我知道了