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

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

[复制链接]

2016-12-12 12:24:54 6086 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、选择对象
. \* @/ b$ \3 r( Z% K9 e5 m0 e& H1 G4 |
捕捉# W# V- C$ k# N* ]6 \" m/ G% a
  PointOverlay             是否显示捕捉点2 Q% a* i/ J6 o) K
  SmartUpdateOption        智能更新选项6 g. l# ^! j; |4 B0 N: s2 [
                             Within Modeling   在建模
8 P' C1 @9 @* R3 E# ~4 r. |                             After Modeling    建模后. k$ R( ~% E( G  H9 q) [
                             After Parent Body 实体父后8 v  P, E0 n* {0 v
                             Mixed             混合
5 y  c. Z8 C0 s: r
7 G+ k8 t6 W6 n  SnapPointTypesEnabled    设置捕捉点类型的可见性  K4 ^4 F% S  M5 q& E$ o0 |. Z! u% |
  SnapPointTypesOnDefault  设置捕捉点类型相关的内容被启用
; {8 `$ ?- X7 L% r$ l
8 @* K' H8 G1 k' k常规* b. p' D8 ?; q( W6 e- C$ w
  BlockID  控件id1 y& ^' @: U3 v/ M; L
  Enable   是否可选/禁用控件) p/ J$ X5 X8 @- G5 }
  Group    组: }9 P- B' g0 t; H
  Show     是否可见4 M7 g( r# _# @: O) a! r

3 S9 S9 I+ u! T( _其它
  n7 y  ]. U. F  附着% Q* c* m( j, ?1 t0 T  E" Z" [
    Bottom  底
- X+ v, Z* [8 ~" c/ `/ |1 a    Left    左4 Y% y' Q: D+ Z' Y2 Q
    Right   右
3 P. d. p% X8 N7 E3 @    Top     顶
# d3 b: R9 g4 j; [; n2 i0 r, z' [+ [
特定于块# b3 K; R% x# d( J/ z) y; B7 c& O
  AutomaticProgression     选择后焦点是否自动跳到下一个控件! X/ W" g! n. y8 {% R2 G1 A$ j5 ?
  BalloonTooltipImage      动态提示图片(鼠标移动到控件是显示图片)
0 O' ?7 g" I9 }1 B5 k; y% y  BalloonTooltipLayout     动态提示布局
' @; W4 B6 L4 @9 `  BalloonTooltipText       动态提示文本内容
; v* {! Q5 |8 \; F  Bitmap                   指定图片+ ]. S5 _8 V. ~( I2 T4 |# S+ x* d6 A
  BlendVirtualCurveOverlay 是否显示虚拟交线
, L/ m0 k' M/ _) f: X  CreateInterpartLink      是否显示部件间连接图标在选择条上1 U5 N' l0 R) t* M  `
  Cue                      提示2 I0 c. H( C( ~$ }  e: u: G
6 O$ g+ D% {4 Z6 N1 R) K/ A; }  i
  InterpartSelection       部件间选择设置  g2 W0 L4 s% M7 W; V, L
                             Simple                                           简单
7 D2 {* j) ~: D- h: V6 y5 |$ ]                             Non-associative Interpart Copy Only              只复制部件间非关联
7 A/ D. R/ f- {& t                             Associative and Non-associative Interpart Copy   复制部件间关联和非关联$ b) O: Q8 x# J/ m/ e2 V3 G- [
                             Associative Interpart Copy                       复制部件间关联& S+ Z/ [  W: K5 q$ C

+ v! m' Q5 s. [! T2 n  LabelString              标签标题
+ q& J) a" p$ V9 R7 k/ a: }- |  MaximumScops             设置选择范围7 s! ]- v. k1 w0 M# e& f
                             Entire Assembly                 所有组件/装配
; g. q7 w1 |5 ~/ Y7 g; B8 d6 F                             Within Work Part Only           只是工作部件* Y( u$ v0 ]% H6 F6 I7 p  l
                             Within Work Part and Components 工作部件和组件/装配)
& r- R5 |1 q) R+ B  C8 h1 h) \/ b' O, r- ?: N: d" |
  SelectMode                设置单选/多选
& W! N0 ]4 _' j' y5 z                             Single   单选9 B( K8 m1 ^- d. t, Z. Y
                             Multiple 多选
7 y+ q5 y3 |% I' {) M
* l. W1 u5 K% K7 Y% Q7 P  Q  StepStatus               设置确定和应用按钮什么时候高亮 (Required 必需的时候)(Optional 可选的时候)(Satisfied 满意/满足的时候); x3 Q* y7 A, }1 z) n  N
  Tooltip                  动态提示文本标题(Bitmap指定图片时,鼠标移动到图片时提示文字)
( R! q6 ]+ C# f; c
4 |' Z6 v% A# F) Y) k* i5 V————————————————————————————————————————————
5 u* n" `+ \) T————————————————————————————————————————————
* i) A6 z6 F1 @& E咧子:获得selection0控件选择的对象
, F% k: }$ ?) x      UF_initialize(); 1 x4 ^$ Z" V" _1 m
      std::vector<TaggedObject*>objects=this->selection0->GetProperties()->GetTaggedObjectVector("SelectedObjects");% w; `+ C4 D, Y, K/ [8 D- D" m
      for ( int i=0;i<objects.size();i++) // size 列表长度,这里指的是 对象个数1 a5 d( i) ~. h
      {      
, G6 k, Z" j& c. R         UF_OBJ_set_color(objects[i]->Tag(),1);" {0 ?! a2 o) g! X7 J7 R
      }/ |7 |/ t- l% x; z' N8 q2 }: e4 h
      UF_terminate();
4 p4 G1 Q3 N& S0 j
7 V  q8 u4 L  t) G- n————————————————————————————————————————————
, t& ?% U) N  V: n8 w' w' R# P咧子:对象加入到selection0选择控件的对象列表
, Q8 H" A, e( ~" J4 R6 l
" ?, P) p3 R, c  B      tag_t obj=NULL_TAG;8 t; b+ `8 r+ R- v' ~5 {+ H# B
      double point[3]={0,0,10};
: d) ^7 ~$ V6 `4 a1 E& \3 Y      double XYZ[3]={60,50,80};: ~1 z! R2 u' [" M- x  a' h
      char C[132]="";
' n+ C- n1 e2 k% t6 {  R* q      char K[132]="";* N" G( c; q; u! I7 c
      char G[132]="";
8 U' H' `4 u3 G      sprintf(C, "%f",XYZ[0]);  l6 n% e: T1 c" p; W
      sprintf(K, "%f",XYZ[1]); 0 v1 k# J5 U# x/ B
      sprintf(G, "%f",XYZ[2]); 1 r, s# v4 o1 i. C$ G
      char * edge_len[3]={C,K,G};: z" Y9 T, j" X: k
      UF_MODL_create_block1(UF_NULLSIGN,point,edge_len,&obj); //创建方" |2 T5 h$ {; V4 P/ ~$ s
      UF_MODL_ask_feat_body (obj,&obj); //从特征中取出实体% u, B; U4 V1 z& Y6 k: l" j+ u
2 C- C" J0 Z: G5 ?4 h+ A9 z
      Body *body1(dynamic_cast<Body *>(NXObjectManager::Get(obj))); //tag转换给nxopen7 W& ]& g  h) i! O( D
      std::vector<TaggedObject*>objects;- X, D' E3 `, `4 r, r# `
      objects.push_back(body1); //对象加入到selection0选择控件的对象列表4 d% ?) c0 {# n: ?: _8 e2 d) P
      selection0->GetProperties()->SetTaggedObjectVector("SelectedObjects",objects);" N3 q2 Z! \4 x# q( H/ [
————————————————————————————————————————————% K$ Z- ~( f1 ]# P: P6 x! w1 a1 |

4 E2 W" F. h+ L* J; l1 B( h' e//清除对象% h! X0 y' B* P0 b) p
std::vector<TaggedObject*>objects;
1 u; @6 S& k' F5 J1 wobjects.empty();  n) T, D. c( V% _
selection0->GetProperties()->SetTaggedObjectVector("SelectedObjects",objects);
- w* C' [4 f: a# N% p7 E
3 B- a# D( O( W# x2 x( u————————————————————————————————————————————
6 i1 V; e2 _' j# t3 F咧子:只选择面; Y) l: z% b* F
        initialize_cb() 初始化里加代码 或 dialogShown_cb()显示对话框里加代码 可进行对象选择过滤
, }6 w9 M' u  a- q7 c: }( ]* q% u
# l5 ^! d; e8 U/ I* ]: m9 B5 E' R  y5 L        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式: w! V; B0 |0 y) q0 x
! [! u2 [" E) a( ], @! @
        //对象选择过滤 只能选表面0 I" i" q2 Y4 `* f; Y
        selection0->GetProperties()->SetString("LabelString","选择表面");' o0 l/ W/ ^* I, V* Z0 `
        std::vector< NXOpen::Selection::MaskTriple > maskTriple;
$ Z+ D- Q/ h5 K        Selection::MaskTriple mask1(UF_face_type,0,0);5 R8 g- f6 z+ l8 Z7 c, L4 J
        maskTriple.push_back(mask1);
  T# o: u" I% T* M2 l; L  t2 Y        selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);1 m2 @& {% L6 D1 L+ l  F- g' `
* L# U* m6 P3 D  `* j0 a

, \4 W, d1 v. @: }) V+ u+ h3 |咧子:只选择面 【UG本身过滤器跟着变】$ [3 [" Z$ b6 D$ ~: h6 f9 H+ L
        initialize_cb() 初始化里加代码 或 dialogShown_cb()显示对话框里加代码 可进行对象选择过滤    . n/ s9 S+ Q4 ^& ?# M
; y5 r$ `& G/ K5 o* N  p
        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式
9 P2 H( v9 X3 n
/ ^# \+ D/ J4 r. v8 m* e( W$ Y        std::vector< NXOpen::Selection::MaskTriple > maskTriple;
5 s; T6 S6 m3 @: R- \% u% ?  e" z! Q0 b        Selection::MaskTriple mask1(UF_face_type,0,0);
: r6 W  A4 E  }' S' e        maskTriple.push_back(mask1);8 b0 `5 y4 `4 K8 P
        NXOpen::BlockStyler:ropertyList *selComponentProps = selection0->GetProperties();
, Z9 \. w' ^: m        selComponentProps->SetSelectionFilter("SelectionFilter",Selection::SelectionActionClearAndEnableSpecific,maskTriple);  t! c% \$ G$ t! V  _# V  D
        delete selComponentProps;
. |+ c. o+ }& Y2 s5 z0 s        selComponentProps = NULL;# c7 N4 p, ]. T" E

; F" \1 k  v4 M$ U5 ^8 v" S& h4 V
上海点团信息科技有限公司,承接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

列子
& W& b2 u# D+ `$ P4 V) F
' g4 F& Q: I% o2 ]& i' N$ @/ o————————————————————————————————————————————8 h) E" w! I0 A  X/ C
————————————————————————————————————————————
- _. T6 T' f1 P$ C( \咧子:只选择 实体边缘 直线和圆弧
: q$ q+ k% y5 R* B/ B
# H' ], I- s0 S8 [* f: t  initialize_cb() 初始化里加代码 可进行对象选择过滤: i& X, G$ k0 T' o: l% Q- M

1 }3 s: U, n! c) }4 z6 o        selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式0 P  \/ O# c6 S
                        selection0->GetProperties()->SetString("LabelString","选择边缘");//只选择 实体边缘 直线和圆弧
- u/ T5 Z, f: ?- O& ^, S6 [6 m+ K: u                        std::vector< NXOpen::Selection::MaskTriple > maskTriple;9 X% c" W+ G) T
                        Selection::MaskTriple mask1(UF_solid_type,UF_solid_edge_subtype,2);
  L5 H( u5 [3 X4 V& j                        Selection::MaskTriple mask2(UF_solid_type,UF_solid_edge_subtype,3);
9 K2 ^: W; B) R9 P1 u                        maskTriple.push_back(mask1);
. G5 s2 m; m7 d: h9 H6 P* n                        maskTriple.push_back(mask2);
4 |/ t) @' k2 ?9 G                        selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);
* A+ v, g7 f1 ^) E0 b+ o3 Z
$ z5 R) Q, @- x9 p3 m/ W  [//过滤无效的边缘! _2 y7 K+ l* F2 e' b
int ML_NX001::filter_cb(NXOpen::BlockStyler::UIBlock* block, NXOpen::TaggedObject* selectObject)
' i* q2 L- e0 c& M{       
4 M  n/ ~! O5 P* M/ T" |    tag_t obj=NULL_TAG;3 \$ \) ?7 ?+ @8 I  j3 K0 `
    UF_MODL_ask_edge_body(selectObject->Tag(),&obj);
1 U% U7 `, Y0 v    if (obj==NULL_TAG) return(UF_UI_SEL_REJECT); //不加入到对象预览列表4 Z4 S9 }& q9 a& h" z
    return(UF_UI_SEL_ACCEPT);                    //加入到对象预览列表
8 H7 }+ `# t4 s8 J4 t( h* T}
$ c4 g$ v/ o5 t4 F————————————————————————————————————————————7 r, k0 S! }/ q1 R1 Q6 v
————————————————————————————————————————————
/ s8 m# {8 e* X咧子:通过枚举控件选项来 时实  分别过滤 边缘、表面、实体$ r3 D% x* }/ j1 {; y  l
5 S: T0 f( }) Q$ {' X! v1 U
   int enumValue = this->enum01->GetProperties()->GetEnum("Value");
  k$ c/ d( A) N# O+ U8 C                    if (enumValue==0) 1 g" C, x& |/ O: b; t
                    {, i3 Q# t& {, D# ?0 j
                            selection0->GetProperties()->SetString("LabelString","选择边缘");
! k5 \2 ], B7 Z5 }5 e7 m                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;) X$ J" o( k+ d6 _) [
                            Selection::MaskTriple mask1(UF_solid_type,UF_solid_edge_subtype,2);
  Y+ j8 l3 r  O0 ], U/ `  [: M! P                            Selection::MaskTriple mask2(UF_solid_type,UF_solid_edge_subtype,3);% i* A$ m& ^. c; ^+ N, E
                            maskTriple.push_back(mask1);
: ~6 _2 E8 Q3 Y4 W/ g' |                            maskTriple.push_back(mask2);1 g  G7 M% ^  M' R6 N; Z0 k1 ?
                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);
* l; G) q! ]7 s' O" I' b( ~' q, n                    }$ e2 t" s- \3 B0 ^
                    if (enumValue==1)
: G$ H8 w$ z$ e5 A; O* a2 S                    {1 v* S5 l; l: a
                            selection0->GetProperties()->SetString("LabelString","选择表面");/ Q# h. y, ]# z) X$ H+ ~* J( n
                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;3 O. \1 ?/ L) m9 [' C; C
                            Selection::MaskTriple mask1(UF_face_type,0,0);
5 P& b) t+ m1 u0 Y2 H: I: ~                            maskTriple.push_back(mask1);' F1 ]& @- P. r1 p; ^# k' R, s
                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);
- r( D# P& w9 @* L) Z                    }
- {2 F& k6 n0 h+ B; P                    if (enumValue==2) . i8 ^7 o- G; @3 g
                    {
, p) {/ D/ ?) o* u                            selection0->GetProperties()->SetString("LabelString","选择实体");
: v# q, Z! k  l3 G% n1 D7 i                            std::vector< NXOpen::Selection::MaskTriple > maskTriple;2 C' I( q. p' |# X3 i, L
                            Selection::MaskTriple mask1(UF_solid_type,0,0);5 f9 }  E! J. W* b4 ?6 M
                            maskTriple.push_back(mask1);
6 q# q- n( l. g; i                            selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);
% [4 C% k1 a- p0 W                    }
% t2 J1 |  K* A3 a; [9 R6 K/ H6 `& N3 ]# q$ g

; P0 @6 G3 J$ C7 v/ Z//------------------------------------------------------------------------------( v0 ~7 R" R# C: y' Y$ F9 ?
//Callback Name: filter_cb 过滤不符合对象. p0 x4 n8 |* Z2 @. [0 k5 f
//------------------------------------------------------------------------------
8 v# W' u2 s  G5 A( m& T6 Tint ML_NX001::filter_cb(NXOpen::BlockStyler::UIBlock* block, NXOpen::TaggedObject* selectObject)
" T8 o; }. h8 Z5 g! z1 I" G" W9 R{2 h- @# r  s2 h2 ?) B, N+ z+ p5 c
        
, r* d4 k+ `' s2 x# G* E        int enumValue = this->enum01->GetProperties()->GetEnum("Value");9 [* H- N( Y, k9 k+ l% Z
        if (enumValue ==0)
: [) o0 U: S; g2 H; t2 O        {
& r2 x1 ]2 g, o8 o6 u) W6 n3 O- c                 tag_t obj=NULL_TAG;
( [  Q8 ~) j1 @& ^                 int err=UF_MODL_ask_edge_body(selectObject->Tag(),&obj);
; l0 p( F. J8 G, ^6 Y: X" S                 if (err!=0 && obj==NULL_TAG)
, J. g5 ~) J0 h             return(UF_UI_SEL_REJECT); //不加入到对象预览列表9 [% E7 Z5 E4 ]6 k8 h0 v3 D
        }
- I, K5 B% [5 A; Z        else if (enumValue ==1)
' f  `; E9 f' N* j3 B# {' T2 S8 _; d: T        {
# f/ C" Y8 ^% B                 int type=-1;
4 F  c6 M2 E( V8 F# O                 int err=UF_MODL_ask_face_type(selectObject->Tag(),&type);- ^+ F+ `2 m0 |8 L( z# V
                 if (err!=0 || type==-1)' N7 h4 l; o* S2 z1 K+ C$ f
             return(UF_UI_SEL_REJECT); //不加入到对象预览列表
# t0 @) K$ ?# P        }/ @$ ^! x& T2 t0 F4 R/ n
        else if (enumValue ==2)
: z7 h; G+ V# ^% I+ Q0 F        {
/ \# W, }4 I& F. L& @8 _. L                 int type=-1;
# k4 v. Q2 {+ E( v/ C, g6 Y                 int err=UF_MODL_ask_body_type(selectObject->Tag(),&type);" u; M% w. l& R6 H8 x6 l' L$ D, \
                 if (err!=0 || type==-1)  A' ~2 o6 T3 \7 ~4 Q7 C
             return(UF_UI_SEL_REJECT); //不加入到对象预览列表2 v  G/ w. B( }, O+ @
        }  j. e; b, W8 I; ?$ I: C
' V% c/ m2 x& ~' C" H! \7 B
        return(UF_UI_SEL_ACCEPT); //加入到对象预览列表! ^" ?  x! l# u: U
}
7 F9 q% G0 D, i; o
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了