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

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

[复制链接]

2016-12-12 12:24:54 6246 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、选择对象
- w3 A/ a$ D4 A6 p9 Y& {4 d3 D! S: _. G- ?4 L5 a# e# X
捕捉7 L$ K7 d, t) K* O
  PointOverlay             是否显示捕捉点
( x5 _7 {/ N5 r  SmartUpdateOption        智能更新选项
- L: I6 X9 }4 Y" P+ ?                             Within Modeling   在建模( q4 Z& z# k  {3 B4 Z) d
                             After Modeling    建模后4 F- N4 V& p* k$ ]' _% w
                             After Parent Body 实体父后
/ @4 ?+ E5 T& b: w; W                             Mixed             混合
: Q2 n2 O- q8 E- v
7 @, z+ n) I8 [( u5 `6 D  SnapPointTypesEnabled    设置捕捉点类型的可见性
8 ~6 A1 Z: @4 G6 p9 c* b/ B' q3 _  SnapPointTypesOnDefault  设置捕捉点类型相关的内容被启用7 v/ `+ h5 m& W/ Y

& z; b6 W- C, S( `! q% I( f常规7 }1 E  E3 x' \# b! d7 K+ R
  BlockID  控件id8 l0 S+ Y: i; I  Q5 d
  Enable   是否可选/禁用控件: V( ~. K& h% ~
  Group    组- t$ Y; I  Y2 V7 L+ ?' K
  Show     是否可见
& {4 {" U$ F& W! {
  A) ^8 Y* `3 t. {5 d  n其它
( J7 H' d6 Y% H8 u  附着! Z: F1 h. z) j( U1 K: W7 G
    Bottom  底# Y1 Z8 b6 E0 W7 g
    Left    左
0 K- Z) O8 g, R* N* E" w  f5 X    Right   右
9 S4 U- F" o, b+ x! D    Top     顶" Q' }1 D/ ^9 w9 d- n
4 H, I7 j: |% G8 N. \4 t! D/ F$ M
特定于块: z$ B5 N9 O! d3 q3 h7 `
  AutomaticProgression     选择后焦点是否自动跳到下一个控件+ q+ e% i& ?6 W/ o/ \- Y) w. o
  BalloonTooltipImage      动态提示图片(鼠标移动到控件是显示图片)
: y- G8 h  W  \7 ?. R  BalloonTooltipLayout     动态提示布局
  t; A+ f+ m5 a% c( G/ ~6 k; N  BalloonTooltipText       动态提示文本内容6 q; ?( o( B2 B' ]
  Bitmap                   指定图片
3 m' l2 [, e2 Y/ @) u9 s  BlendVirtualCurveOverlay 是否显示虚拟交线
6 P: I& i5 ~0 n9 a8 P  CreateInterpartLink      是否显示部件间连接图标在选择条上
/ R8 K$ v% c2 p, a  ~  Cue                      提示
6 u8 ^) Z& ~: a, t7 G% P" `! H) v9 t* H
  InterpartSelection       部件间选择设置5 M: H9 Z: M0 W- I
                             Simple                                           简单9 q3 s! A" B! D) }
                             Non-associative Interpart Copy Only              只复制部件间非关联8 W5 c9 h0 Y# J0 ]
                             Associative and Non-associative Interpart Copy   复制部件间关联和非关联1 }7 s2 A, \( ]* @
                             Associative Interpart Copy                       复制部件间关联
/ J# |5 I: o" q
2 e0 S# W! d& W$ K! `  LabelString              标签标题
, R6 k3 j$ r; J1 C( ^$ y  MaximumScops             设置选择范围3 Y4 ~8 ?- b5 a3 h; h
                             Entire Assembly                 所有组件/装配9 P% U* e3 t/ |8 J7 d. q$ Z! v
                             Within Work Part Only           只是工作部件- N4 W6 l, A6 g' {
                             Within Work Part and Components 工作部件和组件/装配)
$ Q+ S6 w4 f' K" v. ?
+ R3 f8 L, H2 b/ H  \" ~8 k  SelectMode                设置单选/多选
* J5 g. z8 q. x  l3 y                             Single   单选7 B. Q( g+ X" m6 U2 e; z
                             Multiple 多选# w- w7 E4 D: C
+ P1 N3 _0 `& m5 y; U
  StepStatus               设置确定和应用按钮什么时候高亮 (Required 必需的时候)(Optional 可选的时候)(Satisfied 满意/满足的时候)
: I+ x; u" ?- j, X. U  Tooltip                  动态提示文本标题(Bitmap指定图片时,鼠标移动到图片时提示文字)
: }2 I" Z5 S2 o) y- D( Y+ e; X- g/ X, n. R" f% L
————————————————————————————————————————————, b# g3 S# x5 J, n+ T
————————————————————————————————————————————
( t; A4 ^; T2 G6 Z7 T7 f5 ?% U咧子:获得selection0控件选择的对象8 N  k7 I: e' {- ]
      UF_initialize(); , H7 [% L% P# L" X, _* l. a5 O
      std::vector<TaggedObject*>objects=this->selection0->GetProperties()->GetTaggedObjectVector("SelectedObjects");
; F; b& @; O( g# _      for ( int i=0;i<objects.size();i++) // size 列表长度,这里指的是 对象个数4 Y% \+ n" _9 {  F3 W/ \$ Z
      {      + E1 f) ]& P; ?6 x& O; K; Z/ S
         UF_OBJ_set_color(objects[i]->Tag(),1);
8 m0 u! V) W/ E6 A      }, X0 M  R9 M3 Z4 U( S/ Z
      UF_terminate();
9 g& m; e+ b' {/ w( p$ S* e7 s+ l* h8 n( a1 F; e" j: ~# C
————————————————————————————————————————————
8 S2 |/ K; X9 M- ^0 ~( Y1 F& n# `咧子:对象加入到selection0选择控件的对象列表. y* P# U. V' d; v: ]" J

) I% @) Q' r! \! f' N      tag_t obj=NULL_TAG;
- h6 r4 Q, r0 y+ V( Z      double point[3]={0,0,10};
- p) a6 Q4 x" ]$ z; `' r/ \$ F9 ^      double XYZ[3]={60,50,80};
! O, P; {. F. S6 o! |6 M" T: ]8 w0 b      char C[132]="";. |, d* _4 j$ {
      char K[132]="";
0 s! t' _0 [. r* ]6 e  y$ H6 v      char G[132]="";1 ~+ v7 z8 Q9 z3 {8 @& y% g# V. {
      sprintf(C, "%f",XYZ[0]);
( W1 W" @& d2 y( Y" k% Q      sprintf(K, "%f",XYZ[1]);
/ c+ `8 O& h# z  ]/ }- \; x      sprintf(G, "%f",XYZ[2]); . f7 {9 Z" R/ [' v* W" L
      char * edge_len[3]={C,K,G};
( f' ]9 `! b+ V6 s' k      UF_MODL_create_block1(UF_NULLSIGN,point,edge_len,&obj); //创建方- ]# ]9 _8 i3 X( o
      UF_MODL_ask_feat_body (obj,&obj); //从特征中取出实体3 I' Q1 z" P$ R1 ]6 N6 M
* H% {1 ]- \  M( F
      Body *body1(dynamic_cast<Body *>(NXObjectManager::Get(obj))); //tag转换给nxopen, e+ q" O8 o9 H7 j! Z$ s& {+ {
      std::vector<TaggedObject*>objects;
3 N4 w3 D8 T# p: z2 b9 m      objects.push_back(body1); //对象加入到selection0选择控件的对象列表
) T  M3 O  e4 j. Q4 |) g1 K0 r      selection0->GetProperties()->SetTaggedObjectVector("SelectedObjects",objects);
; b2 W& O* L. y* F2 _- c. e————————————————————————————————————————————
$ {' V4 d' h2 m' [# Z8 n9 b$ Q% Y$ L
//清除对象
1 j* E" E; _: Z' @! estd::vector<TaggedObject*>objects;
9 t( ~: `4 u% \& yobjects.empty();
9 D2 r8 U/ V+ _selection0->GetProperties()->SetTaggedObjectVector("SelectedObjects",objects);+ {6 e0 o! K- r! V3 }
  A3 p( h( K. @
————————————————————————————————————————————
4 q% r" }! s/ w" `' Y7 U& E咧子:只选择面
8 y/ I4 y8 P( k, ^3 Y  \, m        initialize_cb() 初始化里加代码 或 dialogShown_cb()显示对话框里加代码 可进行对象选择过滤
# J# k  c) {" M% _7 q7 ^) `) ]2 D4 p& i5 ^  x3 K9 M
        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式
; w) F& C! q6 \" m& z( _& ^( ?+ p: Q0 A; ^- L
        //对象选择过滤 只能选表面
; Q) z: y- [9 [8 t. C        selection0->GetProperties()->SetString("LabelString","选择表面");
' {/ k, n& t* [" q& c1 F        std::vector< NXOpen::Selection::MaskTriple > maskTriple;  @; e" D3 Z" K
        Selection::MaskTriple mask1(UF_face_type,0,0);
/ Z8 x2 h- I6 N( ?7 _+ d        maskTriple.push_back(mask1);
$ l1 F: @* x+ |1 v* G" S        selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);) c  n3 d9 q* }  ~# `6 B, x$ u0 ]- a
% Y: L& v# E- W

# m) p7 t; i  K* g0 l咧子:只选择面 【UG本身过滤器跟着变】
/ N0 V0 {" z' {* z        initialize_cb() 初始化里加代码 或 dialogShown_cb()显示对话框里加代码 可进行对象选择过滤   
4 \- B$ M2 M$ G( _3 u
3 K4 e" P- s- P  ~. n3 Q( E( ^        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式
9 C% k8 {* e+ l0 T/ ~7 v- A- W
  a; {: \) f! ~$ _6 a        std::vector< NXOpen::Selection::MaskTriple > maskTriple;
- z5 h2 v( B+ _7 B! e7 Q        Selection::MaskTriple mask1(UF_face_type,0,0);: l$ P' L/ Y$ c: d
        maskTriple.push_back(mask1);
5 f6 }& M) c, Y* S" ~5 a/ {        NXOpen::BlockStyler:ropertyList *selComponentProps = selection0->GetProperties();0 N- o9 x2 ]8 h$ L4 G( n  M
        selComponentProps->SetSelectionFilter("SelectionFilter",Selection::SelectionActionClearAndEnableSpecific,maskTriple);
5 S& z! V/ j6 p! }        delete selComponentProps;
/ U$ T1 @. N2 L        selComponentProps = NULL;
% x8 n1 P0 F. n& S: K4 h! G& C9 `/ @/ e
上海点团信息科技有限公司,承接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

列子
7 u( H, U1 Q5 q1 G' M, l! a. p
# G/ i/ e  u0 Q' D% s* I————————————————————————————————————————————4 [) b. ?& Q) |, Z" q7 `/ D4 p) |, d
————————————————————————————————————————————+ j7 a( `" U. _/ H
咧子:只选择 实体边缘 直线和圆弧7 R* P# n+ ~$ U1 A: Q# ?
+ z; k6 Q& |5 c% z4 g5 z
  initialize_cb() 初始化里加代码 可进行对象选择过滤
) s1 `1 R7 o+ {6 l. z& p+ a8 B6 i& e3 ^1 X, D; E
        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式; n' R1 ?$ \. g4 l( ?3 O5 S) s
                        selection0->GetProperties()->SetString("LabelString","选择边缘");//只选择 实体边缘 直线和圆弧
8 q3 |" e* T3 p                        std::vector< NXOpen::Selection::MaskTriple > maskTriple;1 e+ F- f& E2 e
                        Selection::MaskTriple mask1(UF_solid_type,UF_solid_edge_subtype,2);' V2 d7 V, n% H, r
                        Selection::MaskTriple mask2(UF_solid_type,UF_solid_edge_subtype,3);
# {1 t$ k  v% E( V0 Y9 L* B; [                        maskTriple.push_back(mask1);9 H) G5 T" w7 h
                        maskTriple.push_back(mask2);
- z5 a8 N2 U& o  N8 C; y& R6 r% W7 B+ s" F                        selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);  V( d7 L6 R7 ?# Y' M5 a

; B; j* S' {4 Z; ^: m9 }' n& z" {; j//过滤无效的边缘( J! \- [- U# C3 h, _
int ML_NX001::filter_cb(NXOpen::BlockStyler::UIBlock* block, NXOpen::TaggedObject* selectObject)
. R* Q, A; w$ F# @% k# Z* ?{        " A& i+ |( j; O6 w+ L+ G7 \
    tag_t obj=NULL_TAG;2 J4 V5 {. }$ [: a3 u
    UF_MODL_ask_edge_body(selectObject->Tag(),&obj);: ]( C1 h. j" y" w
    if (obj==NULL_TAG) return(UF_UI_SEL_REJECT); //不加入到对象预览列表
' ?: e2 J/ {. r6 x. h    return(UF_UI_SEL_ACCEPT);                    //加入到对象预览列表
3 |4 P# t4 I0 @% l! _}1 Z$ f/ Q; S) u/ @
————————————————————————————————————————————. t9 b5 _$ u6 n- _
————————————————————————————————————————————+ S4 ]# g( H7 h. ]( y0 N$ L; ~
咧子:通过枚举控件选项来 时实  分别过滤 边缘、表面、实体
1 z1 l4 ~5 l* J- m
# N# E- W5 Y- p- Q   int enumValue = this->enum01->GetProperties()->GetEnum("Value");
4 s6 l% @: v" C7 `& H; `( n                    if (enumValue==0)
9 o. D& m% P- p' W                    {
/ j; C$ P6 Q  U! M                            selection0->GetProperties()->SetString("LabelString","选择边缘");
, w0 Z  A2 D) Q$ w3 h                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;2 J3 u. G8 T% E) Z3 p8 E' G* T: }
                            Selection::MaskTriple mask1(UF_solid_type,UF_solid_edge_subtype,2);
9 i1 C, T! {; I  v1 @                            Selection::MaskTriple mask2(UF_solid_type,UF_solid_edge_subtype,3);
3 J! b" ~& \7 l7 k% G                            maskTriple.push_back(mask1);/ |% e' o" @5 A8 k3 q0 k! C
                            maskTriple.push_back(mask2);2 W* {# Q2 q4 X! B1 ?' v, l
                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);5 Z* f5 P5 T! u
                    }( h8 Y5 p1 e: s7 D# [. s& v
                    if (enumValue==1) 2 Q: [0 z7 x& s4 j; a# d
                    {$ q, e4 D7 L4 {
                            selection0->GetProperties()->SetString("LabelString","选择表面");
0 I/ x! n# ?1 O0 Q  i3 V  K                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;
5 h1 N4 `: E) t; m& `                            Selection::MaskTriple mask1(UF_face_type,0,0);6 W; y2 e7 a" e
                            maskTriple.push_back(mask1);: h4 V5 R6 P8 ]/ `. w3 w) Y' r
                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);
8 n4 J( L. l7 P                    }! j5 I, x" t, R
                    if (enumValue==2) + a" T: {2 `. ^9 w" w2 P( \8 `
                    { 0 u" e3 ]* \6 v! u
                            selection0->GetProperties()->SetString("LabelString","选择实体");9 D3 H5 B1 V, I7 H
                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;) [2 C. t3 ?4 A, U1 ]& b
                            Selection::MaskTriple mask1(UF_solid_type,0,0);
" O, S$ j; n$ V. x6 g6 o9 K0 o3 D" w                            maskTriple.push_back(mask1);3 t6 j! {, L/ U2 K' I  O
                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);
$ w! O: e4 p3 Z7 x                    }
1 z" @+ D# d! _4 j  f/ P) Y' r& E( J; z* U) X
* `: y1 @9 q: M6 g
//------------------------------------------------------------------------------4 T# H% \+ Q1 g+ b/ |3 _2 r3 H
//Callback Name: filter_cb 过滤不符合对象$ \7 g, t& y. i0 {% S9 |
//------------------------------------------------------------------------------
8 e" s$ Q, I7 }" k% K( x! Mint ML_NX001::filter_cb(NXOpen::BlockStyler::UIBlock* block, NXOpen::TaggedObject* selectObject)
! A! E& o% ?9 ^& P9 x{/ I; M* X8 j) E6 ^" d
        ) V& o: g9 S7 L- Y) G2 f
        int enumValue = this->enum01->GetProperties()->GetEnum("Value");
: h8 b' ^9 j7 d* k- x$ x7 {7 O: I        if (enumValue ==0)
8 e/ a, F- y( X0 x8 H        {7 a4 F8 h' V4 g1 Y
                 tag_t obj=NULL_TAG;
7 a1 h1 ~& A' l8 B                 int err=UF_MODL_ask_edge_body(selectObject->Tag(),&obj);
* Y" W$ A* y6 o                 if (err!=0 && obj==NULL_TAG)  ^4 R- R: t7 J1 f% t& m1 K
             return(UF_UI_SEL_REJECT); //不加入到对象预览列表
: H' U$ @9 `! v        }
9 C" Q1 F# S0 D, ]5 P) X        else if (enumValue ==1)
% u. S# P* j0 t3 {        {
6 d- i3 Q- i5 S- X. y( r                 int type=-1;! X5 q$ A+ Z9 C8 Z1 K
                 int err=UF_MODL_ask_face_type(selectObject->Tag(),&type);8 D" C6 e* C3 R6 x  k
                 if (err!=0 || type==-1)% g2 ]* B% z3 Y3 P# D
             return(UF_UI_SEL_REJECT); //不加入到对象预览列表2 L9 }$ R; Q8 _* N1 a
        }9 A3 {9 L! V! K( l4 B7 l8 p2 Z
        else if (enumValue ==2)
( K1 [2 i, Q7 h/ c& E$ i8 Z        {
5 }; T* V2 }, `                 int type=-1;% |; ?9 r: |3 F2 h
                 int err=UF_MODL_ask_body_type(selectObject->Tag(),&type);
, y. g: ]- ?; B1 I! e8 M                 if (err!=0 || type==-1)
) X# J4 b* i5 o3 A- a. E             return(UF_UI_SEL_REJECT); //不加入到对象预览列表
, G. l$ c/ J" k  u        }+ n( ^; [- b( A% g+ F8 @4 t& Q
$ ]1 U- y( ?% B) l7 W
        return(UF_UI_SEL_ACCEPT); //加入到对象预览列表
, m  i) u- o- C  g8 {# r+ @}/ m0 [' Q& o( t  h+ L( g0 @: t; t
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了