青华模具培训学校

 找回密码
 注册

QQ登录

只需一步,快速开始

青华模具培训学院
查看: 1818|回复: 0

[分享] ui界面带选择功能的方法

[复制链接]
发表于 2015-11-1 13:52 | 显示全部楼层 |阅读模式
ui界面 带选择功能源代码
# R) C/ n$ B7 |2 O8 ^6 L* ?( Y4 k! V+ Y  s9 c3 D; c4 {
梅雷制作QQ1821117007
; m2 N- E, @: W! W- C# w5 Z, w( z# \" [6 X/ @, K$ f
ug二次开发论坛. y1 p0 e3 T1 m: Q% z
http://www.gripshy.com/2 Z, p% I8 ~4 i* G# q( ~8 ^, }
# ?* S1 k1 }* x4 L% B
带选择功能的ui styler dialog
& D7 ^9 ^6 K3 t# |
6 i! \2 P" M1 U- G4 sUG中,自己制作的ui styler dialog有时候需要与ug 图形窗口交互来选择对象,5 t; R1 N# F8 \: r0 F* r
这是时候需要我们在制作dialog的时候,选择->类型单个->【√选择】  【√取消】 【√单个位置】) w) s, |% u, j$ P

+ N* `2 L1 q" }  M5 \+ d! `1 K" C" y. T0 V
//头文件与参数定义1 l3 y, W: ?2 f2 I3 G! y. K
#include <uf_obj.h>
, O" I5 L6 o; p( @7 K$ s#include <uf_modl.h>
  {  v8 N! q$ }" dUF_STYLER_item_value_type_t sel_data;
: W! o9 U3 S$ e4 d8 Q4 U
$ }: q; ^, w7 Z: D+ v( h! A3 \9 d, b5 |! O
一、 回调函数:* y" R4 m, N4 U& @: X+ @% t9 k

2 V# g2 s7 l5 O1 \$ S// Filter proc
% |4 v0 \( o; d! ?static int filter_face_cb( tag_t object, int type[3], void *user_data, UF_UI_selection_p_t select)
6 C' t8 t8 X2 {% F6 E{/ g- V. B( \, C! u
return (UF_UI_SEL_ACCEPT);/ [0 V+ q' H( `! w) @
}' b- u! D  `( ?; D
//初始化9 G/ n6 ~# w8 @4 ]. D
static int init_proc(UF_UI_selection_p_t select,void *user_data)
' W1 M  b' H7 Z{' K+ F% v0 b  i' |7 c- Y" M  U
if((UF_UI_set_sel_procs(select, filter_face_cb,NULL,user_data)) == 0)( h% \) @8 K  j
    {& j9 Y  m; B$ x
        return (UF_UI_SEL_SUCCESS);
: L5 D& \2 C7 p) K    }; G- l" o5 L! f9 I( x; }, s
    else
7 ~* c# P1 r# G$ o! C# H4 H    {
3 I" J% z: N. q- e        return (UF_UI_SEL_FAILURE);# B1 w/ O& k- u  z# ~3 J% a9 Z6 w- f
    }
. b, A3 j8 @- ?$ f" U3 J}
7 d1 Z( I$ S% ]. @# z$ c) x" _2 q, r0 w$ B) J5 y0 E
//selection 回调函数
$ ^: l$ i4 m+ E8 Ystatic int sel_face_cb(int num_selected,   tag_p_t selected_objects,. d6 [3 h- y2 \8 B" M+ T( `) ?# T0 R
        int  num_deselected, tag_p_t deselected_objects,) V' m8 j! K6 _" @
        void *user_data,     UF_UI_selection_p_t selection)
/ K; `& o1 m" p" k" y{
% V( E/ E. ?: \6 z return (UF_UI_CB_CONTINUE_DIALOG);
' s1 f9 U4 t0 H* S}& F( P# n5 e8 K# M$ {$ ]

8 U0 c  G5 Z2 g6 a) B# y3 t二、在对话框【构造函数】中初始化,使得本对话框在ug中显示后能够在图形窗口交互选择对象8 Y, t) f9 l) P. ]% w! ^
; C6 M/ |: j( X- B* I
//获得对话框的selection对象
0 D( d' _8 _: k% O! T& U7 LUF_UI_mask_t face_mask[1] = {UF_face_type, 0, 0};
1 ]  D" L/ k( J6 g- O0 Vsel_data.item_id = UF_STYLER_DIALOG_INDEX;
, n9 o/ q0 D* n+ t, Psel_data.item_attr = UF_STYLER_SELECTION;9 j1 ~5 C/ a$ [" K, e7 p
UF_CALL(UF_STYLER_ask_value(dialog_id, &sel_data));
& J, k) |" X% ^1 M//设置selection 对象,选择类型,选择MASK类型,# a" {5 V: Q3 l0 j
UF_UI_set_sel_type(sel_data.value.selection, UF_UI_SEL_TYPE_SINGLE_SELECTION | UF_UI_SEL_TYPE_SINGLE_DESELECTION);
. g5 p' q: G. F. A" Q. L6 R, d' X+ RUF_CALL(UF_UI_set_sel_mask(sel_data.value.selection,//selection
2 n( m) m+ F. H  A2 L                          UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,//all type in mask are allowed! H$ X4 s9 w0 w
                          1, //number of mask+ B; J3 p) I; B$ _; p7 y
                          face_mask));//mask types4 B6 v3 A" k1 l/ }, F9 J
UF_UI_set_sel_procs(sel_data.value.selection, filter_face_cb,  //Filter proc
+ ~% M# U* n: x) d                  sel_face_cb,  //selection proc
* n9 f5 w7 R# y; S                  NULL); //user data
1 U5 Q" ^+ o6 U6 B" H1 }+ N/ I; K' r/ a& F
: F* Y2 ?3 s  w9 z- K
三、选择好后,获得所选择对象 【ok函数】  ]% c, E3 {6 N9 q) j* a4 Q
//得到所选对象的objs //得到选择对象的数量count
% N1 }' t0 X3 J( | tag_p_t objs = NULL;
2 Z9 G" ~0 [2 Q1 v% B int count = 0;! E1 }  C  ~+ v: t' i
UF_UI_ask_sel_object_list(sel_data.value.selection,&count,&objs);6 s: d* f$ m# J  \$ u" F
# B0 T5 _& R) h4 l
- Q' p) M, V& T7 ?
char msg[64];
+ i4 x0 J. }: s( d% Xsprintf(msg, "%d",count); //数字转字符串 . T1 [; j0 X# Z* I9 b
uc1601(msg,1);        //弹出框 显示 选择的对象数量
4 ^+ m5 U" L5 `# i; I- `! K' b2 G
// 其它操作 ——————————————————————
( \! e  F" x) L8 N6 H& L; }) V& r% s" a
// 分析面+ f0 {( @1 k5 j2 f! v+ Z, d2 t
int type=0;
" k* u0 a, R( f, pint norm_dir=0;
. \  G' f8 t- j8 o% Fdouble point[3];6 ~' W1 G! k8 C% _3 i5 {  C6 S
double dir[3];
- {6 v+ Z6 P; S! o: P+ Tdouble box[6];3 }+ Q% {& o5 q; G
double radius[1];
% i! t, f- J1 W. x* G5 vdouble rad_data[1];2 L4 Y8 f: l. _4 a$ d
UF_MODL_ask_face_data (7 S* C1 Y8 P8 d3 Y; n# C+ V
objs[0], //输入面1 r- ]6 C" k" {) G' [' w  f4 O
&type,      //判断面类型1 E$ k3 F  Y2 n$ B: d' z
point,      //轴中心 点) G0 k+ A0 N# M. A1 [. f, w! F
dir,        //轴方向2 H$ a/ {- I/ Y& p7 s+ B) W5 J6 c
box,        //极点坐标7 B; i. {" p6 V
radius,     //半径 圆锥=最小半径 + 最大半径 /2
* I7 [+ c" h0 c% `) mrad_data,   //& ^6 u5 Q, F- d7 p! C
&norm_dir); //面法向
0 s; G: `0 P6 J( G$ [' j( C7 ~8 L) N//判断面类型 type值7 s- G8 N& @4 b% O, N
//16 =圆柱
' g/ p. @! m) ~9 f) q//17 =圆锥
. e: \& i% B& X5 X" c7 N: \6 L//18 =球
. T' u3 |' U  L8 \* W0 E//19 =旋转(环形)! R5 k; H% s5 L  {
//20 =挤压
) e$ w( r1 x* b# d0 m( `//22 =有界平面
% L, D) Z+ b2 G: B. M' [) B) p. M//23 =角(物)/ G! ]3 N0 O( y: F; Y
//43 = b级表面
6 G% M  E" ~9 h$ ]3 g4 p, j$ e//65 =偏移曲面
, S, Z" B6 W9 ^" G* |//66 =外表面
' g9 @% c( t1 _* \! d2 e. {  A
- [& O- N: Y0 x' ^! H+ y; b' N' W. m sprintf(msg, "%d",type); //数字转字符串 9 [1 a; z! @% g% |
uc1601(msg,1);            //弹出框 显示 选择的对象数量
; y* }! }# _, r) g8 @, M& r; z2 [% V0 ^

: G' r2 j3 K7 s, D* t, U UF_free(objs);6 T. D( X0 F8 C1 ], c
4 D) l9 y. n  ?6 e6 [" g2 l

1 I1 l+ E/ Y( S' E2 p8 J3 Q" d
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|关于我们|sitemap|小黑屋|Archiver|手机版|UG网-UG技术论坛-青华数控模具培训学校 ( 粤ICP备15108561号 )

GMT+8, 2025-7-2 04:38 , Processed in 0.135110 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表