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

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

[复制链接]

2016-12-12 12:24:54 6269 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、选择对象
, q" p7 a8 H2 ]4 u( c, n  k8 N" _: K* [
捕捉
2 P- d0 g6 D% {4 j4 g  PointOverlay             是否显示捕捉点8 m$ D5 T& x) t4 C6 S! n- X
  SmartUpdateOption        智能更新选项
. E% Q3 U4 I0 J0 ^* f/ ]                             Within Modeling   在建模/ y: {  O( H) r7 w/ H$ O( ]
                             After Modeling    建模后6 |$ Q8 T3 S6 j0 E# d
                             After Parent Body 实体父后
2 j+ {3 w1 k9 ~( H$ B/ s8 z+ `                             Mixed             混合
7 o5 y# Q9 n, D0 C! s% ^; }, |7 i) L
  SnapPointTypesEnabled    设置捕捉点类型的可见性
$ O2 L3 k1 @+ a1 Q* r  SnapPointTypesOnDefault  设置捕捉点类型相关的内容被启用
( M4 v. o2 o( d+ K
" O/ c" k$ V% d8 x9 e+ O常规
) l- U0 i' j  X# p- }6 k" J  BlockID  控件id. Q  A) W! l2 O+ }. g/ A0 Y& Q3 `
  Enable   是否可选/禁用控件. V8 S6 m$ I! ?: K2 i9 W
  Group    组
( z) |4 U& c# H. C! Q# x  Show     是否可见
5 l# D4 O: o$ ?  i
' W- B3 I/ ?5 V' @, p' O其它 - N0 E, T$ w" k" z& s
  附着, C, ]% O. d3 P' i5 w, h
    Bottom  底
( s; p  U2 q/ v    Left    左$ z. U8 l: Y/ h( M8 G$ H2 A
    Right   右
& V4 ~; f) S1 ~% ~* w    Top     顶  ?" i* d* k' ?" S! P5 X: {0 v

  V3 |+ u& _4 n" X8 d, I; G特定于块9 A9 _# P4 \4 h+ O$ ]  m  r
  AutomaticProgression     选择后焦点是否自动跳到下一个控件
7 `* A' n/ R- G; J5 E5 R& \  BalloonTooltipImage      动态提示图片(鼠标移动到控件是显示图片)
4 z0 N; L: D7 c# t  BalloonTooltipLayout     动态提示布局
$ j+ a/ U: ~7 p  BalloonTooltipText       动态提示文本内容
" ?# _9 Q" s3 O- j! O8 q$ S  Bitmap                   指定图片$ F! m3 A2 t# Q, k; l! m+ W- n
  BlendVirtualCurveOverlay 是否显示虚拟交线
: b& j" H1 c0 ^! H+ \# V& N& F  CreateInterpartLink      是否显示部件间连接图标在选择条上
- V9 H3 n' e0 s3 s; T4 Y( j" C1 m  Cue                      提示
( F$ Y$ |5 {0 [2 D" N$ F. ?1 k1 U) i: n1 Z' W# X- R
  InterpartSelection       部件间选择设置0 B8 b+ H; g0 [4 X7 z* U
                             Simple                                           简单4 W' F" Y$ K2 Q  c' u
                             Non-associative Interpart Copy Only              只复制部件间非关联
3 [* ~3 [5 E5 q4 F                             Associative and Non-associative Interpart Copy   复制部件间关联和非关联  C0 ]) e2 Y' j
                             Associative Interpart Copy                       复制部件间关联
7 p0 R6 S! N& s7 r+ n% c% L% g
  j; @  Y! _. Z( k6 x. x: a& p( q  LabelString              标签标题1 n3 h5 c% ^; y$ L$ t- y
  MaximumScops             设置选择范围6 |/ Z# Y+ l5 U+ |
                             Entire Assembly                 所有组件/装配
. N" a- g9 M  l8 Y7 B                             Within Work Part Only           只是工作部件, X# \3 o) C$ n6 {) e! F
                             Within Work Part and Components 工作部件和组件/装配)
: G5 n* Z0 E: r% ~- b* z: `! o- ?1 }& ]8 x3 G* Q; C( G' y
  SelectMode                设置单选/多选
! c$ ?' l# T" u                             Single   单选8 ?! |0 d  w! c+ i/ x- b4 n: f
                             Multiple 多选% u  P  `4 @1 ]( K4 Z+ B
" O- c- b0 f% ~$ F) f4 m! Q# S
  StepStatus               设置确定和应用按钮什么时候高亮 (Required 必需的时候)(Optional 可选的时候)(Satisfied 满意/满足的时候)
. ^+ F4 n0 J$ Y! m5 k+ V5 f  Tooltip                  动态提示文本标题(Bitmap指定图片时,鼠标移动到图片时提示文字)! s& E3 b4 I& E0 h$ n

# V% u- L  w0 F& |————————————————————————————————————————————; W7 l8 m: R2 {$ w' `4 E
————————————————————————————————————————————
' {4 N, Y; [- a/ K+ K% [" O, j2 O咧子:获得selection0控件选择的对象
* y/ K2 Y8 e1 q5 z' s      UF_initialize();
, h# p8 `! s2 v      std::vector<TaggedObject*>objects=this->selection0->GetProperties()->GetTaggedObjectVector("SelectedObjects");
7 t$ z: a2 `* ]" f; ^      for ( int i=0;i<objects.size();i++) // size 列表长度,这里指的是 对象个数
! n: U4 s; D8 w# R0 f      {      
, m8 }5 A# U' V8 I- y         UF_OBJ_set_color(objects[i]->Tag(),1);
# T- Q! E/ e* Q4 T9 w7 L: v* u      }
- \9 q+ A* D* c      UF_terminate();
9 @2 h( @9 O' B0 E, H6 U! b7 w' ?4 x& g  s3 Q5 L6 \
————————————————————————————————————————————: L* L: }7 Q# {( j% z  T$ C$ l. u, K
咧子:对象加入到selection0选择控件的对象列表" ], B9 [  \, g5 g

; W0 \, N5 y; J9 y# h      tag_t obj=NULL_TAG;: P: f3 l, l2 Q. M
      double point[3]={0,0,10};# q. |8 n% U; E1 r6 o6 b7 h: p
      double XYZ[3]={60,50,80};
# |6 |' v9 E6 t- M5 V" _6 }2 a8 y' E      char C[132]="";
7 |( m2 e# M4 H/ q+ D5 J      char K[132]="";$ ~/ d, t. [9 X. \0 F( j( N
      char G[132]="";! n' a4 x1 ~! N7 C) b6 U( {& T! b3 O
      sprintf(C, "%f",XYZ[0]);0 Y. h& _; b" F8 F
      sprintf(K, "%f",XYZ[1]);
. B% x* ^; ]$ p9 }. q3 v, {# Y      sprintf(G, "%f",XYZ[2]);
( A) m$ F+ @# K$ o. C; P2 o      char * edge_len[3]={C,K,G};" D$ {3 A+ c+ n
      UF_MODL_create_block1(UF_NULLSIGN,point,edge_len,&obj); //创建方
1 ^, V4 {+ [5 J      UF_MODL_ask_feat_body (obj,&obj); //从特征中取出实体
3 ]  C- Q0 j/ M3 j8 V5 ^. T! E7 p1 C2 Q. J' J/ }- K
      Body *body1(dynamic_cast<Body *>(NXObjectManager::Get(obj))); //tag转换给nxopen
8 |. w8 G8 k: Z* _7 b( Y7 {      std::vector<TaggedObject*>objects;
- L/ r+ p- p8 I; D' J      objects.push_back(body1); //对象加入到selection0选择控件的对象列表
' y, x2 R- k5 \" I: l. E9 I- c0 `. c, Y      selection0->GetProperties()->SetTaggedObjectVector("SelectedObjects",objects);5 r  g: a9 \2 u4 c" |9 ?4 e6 |
————————————————————————————————————————————
8 h' m1 S; S  m. s8 r
& Q3 T' P" r5 ?2 H//清除对象: d  u3 r8 l# l: I
std::vector<TaggedObject*>objects;% ]: k$ x+ N) L7 I9 A  a) V  W9 }
objects.empty();6 k* [  q" ]3 s- B
selection0->GetProperties()->SetTaggedObjectVector("SelectedObjects",objects);
! g4 x+ k: e9 t  `7 |
8 a9 Q4 Y4 q9 t7 R: B————————————————————————————————————————————
6 h. y$ j  V$ B咧子:只选择面( k& A* [! x2 y
        initialize_cb() 初始化里加代码 或 dialogShown_cb()显示对话框里加代码 可进行对象选择过滤
4 B4 P" v# @! {# l- R8 ~7 f' S; D/ O1 b& k( \7 Q
        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式
! g; \. [) o$ _4 v+ V9 j' q
# ^2 R" p" b* M9 L! w2 ^        //对象选择过滤 只能选表面; P( @# L) \  ^/ L
        selection0->GetProperties()->SetString("LabelString","选择表面");1 v5 }7 @1 Y$ f! ?% n! {
        std::vector< NXOpen::Selection::MaskTriple > maskTriple;) I; F5 K2 \4 j# Z* \/ g& m6 d3 G
        Selection::MaskTriple mask1(UF_face_type,0,0);& t; F- |: J1 ^( L
        maskTriple.push_back(mask1);
: c' ^9 U  O& v, W# c6 v) H" X        selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);1 B# y' ~3 [8 J* T/ v8 w5 ]9 ~% I6 k
! e# Z! o+ u  ?9 i" A' F
3 B& g( J& q9 U% J
咧子:只选择面 【UG本身过滤器跟着变】: x" W  x9 w* I. N% e
        initialize_cb() 初始化里加代码 或 dialogShown_cb()显示对话框里加代码 可进行对象选择过滤    . @2 z( J" V) m1 W+ s
- B! ?- u. @0 B8 S7 j/ F4 w9 N" C
        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式# h( |- L3 ~- O, I2 h8 u0 t

- K$ L- E# n; k* L        std::vector< NXOpen::Selection::MaskTriple > maskTriple;
) Z& J6 h6 j* ?% Q        Selection::MaskTriple mask1(UF_face_type,0,0);
# w( W9 |, C8 x        maskTriple.push_back(mask1);- h2 T) R& ^# R* Q, o
        NXOpen::BlockStyler:ropertyList *selComponentProps = selection0->GetProperties();
3 y# O- d3 ~( \        selComponentProps->SetSelectionFilter("SelectionFilter",Selection::SelectionActionClearAndEnableSpecific,maskTriple);/ u4 `, `% E0 l; N! B. ~0 Y( t" T- f
        delete selComponentProps;1 Y3 s4 l0 H& m0 H
        selComponentProps = NULL;2 {. u) H/ Z$ v. I7 D" ^
; Z) c6 Q( j; x* J- v; a
上海点团信息科技有限公司,承接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

列子) @) ?2 V0 L0 z& ~2 {" c# E

; f; w5 P2 k0 ]4 h————————————————————————————————————————————- [9 f( l/ Z+ I- k! m
————————————————————————————————————————————
3 H8 w, B% ~1 j% Q6 O9 Y. u. [! m咧子:只选择 实体边缘 直线和圆弧- d# u& K8 }; Q7 O. {; b

# k: n. z: a+ f1 u# _4 C& M: g5 B  initialize_cb() 初始化里加代码 可进行对象选择过滤9 V6 L# ^. P3 f  G- V+ M% e& y

8 P, y4 y1 _' i3 |( d7 P  P7 J        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式
/ F" q  q1 |$ C                        selection0->GetProperties()->SetString("LabelString","选择边缘");//只选择 实体边缘 直线和圆弧
* T0 E1 u  w8 P+ [: A                        std::vector< NXOpen::Selection::MaskTriple > maskTriple;
$ r% q: u: u) O$ M" H+ Q2 ^                        Selection::MaskTriple mask1(UF_solid_type,UF_solid_edge_subtype,2);' a7 E; ~9 _; \0 `
                        Selection::MaskTriple mask2(UF_solid_type,UF_solid_edge_subtype,3);
% a1 Y% O' `! q$ G                        maskTriple.push_back(mask1);
" E6 R' a$ c! r                        maskTriple.push_back(mask2);
1 ^# O1 `, f) m, x4 A; l6 T' E                        selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);
& k# r- p% s. o# L/ m5 X
8 k9 A$ N) B' w! A  k. h//过滤无效的边缘& O3 Y) ~" f! [$ c+ N0 a
int ML_NX001::filter_cb(NXOpen::BlockStyler::UIBlock* block, NXOpen::TaggedObject* selectObject)- \, v4 o) V5 ]  s
{       
2 B" U. K1 Y0 v" R3 v! P    tag_t obj=NULL_TAG;5 t1 Y, a3 M: J& ^' K. y, ?9 A& Q
    UF_MODL_ask_edge_body(selectObject->Tag(),&obj);- ]$ k* y, p1 M9 G4 a8 f9 q
    if (obj==NULL_TAG) return(UF_UI_SEL_REJECT); //不加入到对象预览列表/ W1 R! W* W5 n; B1 ?
    return(UF_UI_SEL_ACCEPT);                    //加入到对象预览列表* n  d: K9 B  c2 f6 H* k
}% ~3 a/ z. b& W  t( Z/ S! M
————————————————————————————————————————————
+ Y9 l' e" S! O- }4 K" X8 \————————————————————————————————————————————
3 ~0 B' M1 K) b/ N9 H咧子:通过枚举控件选项来 时实  分别过滤 边缘、表面、实体
2 G* K8 ?+ ^: `  U2 g  k0 ^' Y9 f" ^: _. o- K' l0 G
   int enumValue = this->enum01->GetProperties()->GetEnum("Value");
+ u8 S7 D0 J  a6 |, \                    if (enumValue==0) : d9 i$ k( a  m1 p& d, m: r1 p
                    {5 Z# e/ o. g) v: J/ B: I3 ~( p
                            selection0->GetProperties()->SetString("LabelString","选择边缘");  \2 i( k, E4 q0 T( W$ \
                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;0 e7 m* S9 W+ c* O3 s" S! c+ b
                            Selection::MaskTriple mask1(UF_solid_type,UF_solid_edge_subtype,2);
$ D; j( i, |- \* e! B8 B0 X                            Selection::MaskTriple mask2(UF_solid_type,UF_solid_edge_subtype,3);
3 G# V9 r3 h: i7 m: G# H7 w                            maskTriple.push_back(mask1);
- [" z9 @6 b6 Y. E$ s. V                            maskTriple.push_back(mask2);1 E8 v# i; J. _! X: v
                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);
5 R1 g- n$ u( T# k                    }
5 x9 w4 h9 `) y- x) q7 w2 ]* u# e                    if (enumValue==1) ) W* ^; L( n" C
                    {3 o9 M. q: O) l8 O' O
                            selection0->GetProperties()->SetString("LabelString","选择表面");
6 v% R) Q+ b8 p5 E8 H0 |: A                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;
# I3 ]" _3 q+ O2 y. Y% j3 R/ e7 z                            Selection::MaskTriple mask1(UF_face_type,0,0);% y5 ]5 ~5 A. S1 w9 S
                            maskTriple.push_back(mask1);
! f) j& j$ E! n0 n1 Y7 r2 w6 Z5 L                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);  U9 m( d8 Y8 A
                    }# E! q0 z8 J" b' }/ [% H$ L/ i/ Y
                    if (enumValue==2)
0 o+ @' j2 q/ J5 c9 R3 c$ B) b- d4 m                    { 3 P5 ~9 ^! D0 Q& h) d- t
                            selection0->GetProperties()->SetString("LabelString","选择实体");7 \8 l& |+ Y. }) Y5 Y' P' R- e
                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;: a0 B3 U+ @& h6 U% R
                            Selection::MaskTriple mask1(UF_solid_type,0,0);
6 W; G! n! k5 r9 M! w5 ~" {                            maskTriple.push_back(mask1);
& ?8 D) g( N1 V/ f7 A7 r                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);9 Q+ ^# x+ C& x3 i
                    }0 Q, `7 C1 P+ i: h/ k; \1 X
# v- G' r8 [8 \$ A
; v+ [8 V6 _) U/ Y- _
//------------------------------------------------------------------------------- B( W. ~0 K3 |$ a: |" w
//Callback Name: filter_cb 过滤不符合对象) t% c; T2 I8 M' k  G
//------------------------------------------------------------------------------4 I" R- h0 j1 ~6 x7 ~
int ML_NX001::filter_cb(NXOpen::BlockStyler::UIBlock* block, NXOpen::TaggedObject* selectObject)
5 r  k2 n. |! R5 h{
. n9 W/ i9 D/ N/ K5 S- {        
0 N# {$ b! r6 [0 |        int enumValue = this->enum01->GetProperties()->GetEnum("Value");! m& Z8 x3 \  F
        if (enumValue ==0)
  C6 ]6 G- K) y3 Y% l0 w& w        {9 C8 W, @* }# ^3 a$ K* B2 X) N* ]
                 tag_t obj=NULL_TAG;: _) Q- a$ ]$ ]
                 int err=UF_MODL_ask_edge_body(selectObject->Tag(),&obj);5 K0 G* i. l2 b- D; p3 y. G4 _
                 if (err!=0 && obj==NULL_TAG)) j  I6 a. y2 j. _
             return(UF_UI_SEL_REJECT); //不加入到对象预览列表& f* B5 E; U: c" p
        }
- l+ ?  g; R. z' p8 e- Y        else if (enumValue ==1)
# ?$ }  l0 ~3 i5 @1 s        {
, x6 n5 _/ [$ h$ O. a" x) G                 int type=-1;4 T. }4 H* Y4 T8 v! ~
                 int err=UF_MODL_ask_face_type(selectObject->Tag(),&type);
% Q' v3 T- C. S# X: R2 @% n/ m                 if (err!=0 || type==-1)
. p2 `8 `0 E, i             return(UF_UI_SEL_REJECT); //不加入到对象预览列表- @: R: Z5 j; l& e2 ]
        }- |) r( X0 V1 t% \0 Q9 N# G
        else if (enumValue ==2)+ j) A- d( ]/ S4 R" A# P( U9 e
        {
2 H4 s. v) ]0 M" m2 }3 n# W                 int type=-1;
; L8 O0 k- y3 x, E                 int err=UF_MODL_ask_body_type(selectObject->Tag(),&type);
# h7 Q  v1 f) d                 if (err!=0 || type==-1)
) e8 f$ b1 `- M' M8 T) h6 |: q( G             return(UF_UI_SEL_REJECT); //不加入到对象预览列表
( ?7 ?7 m& U: p1 V" ]) E        }
; U! y0 `4 v# t- f# i0 F
" ]1 k5 l' f" c" O        return(UF_UI_SEL_ACCEPT); //加入到对象预览列表2 {( W- g8 f' R/ q9 Y
}8 M8 B4 p6 n9 ^9 a4 ~
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了