青华模具培训学校

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
发表于 2015-11-1 13:52 | 显示全部楼层 |阅读模式
ui界面 带选择功能源代码 . ?5 }* D( T& X1 ?" I
7 p8 W$ u# F& T
梅雷制作QQ1821117007/ M8 N, \" e, S! n" d; v
: V, _2 @! S% B+ E% v" _3 L
ug二次开发论坛
% y' h( M/ {; H* a- `+ ~5 e9 ihttp://www.gripshy.com/1 R1 D0 t$ W" ?

; p  c) D  b! o- E/ i9 d( W带选择功能的ui styler dialog
5 T0 W$ H. H) k! j* G0 O  r
7 n3 Z. I- \# q! m/ M1 BUG中,自己制作的ui styler dialog有时候需要与ug 图形窗口交互来选择对象,. `4 N, \/ ^- E! M" D
这是时候需要我们在制作dialog的时候,选择->类型单个->【√选择】  【√取消】 【√单个位置】
0 p4 ?1 ~# z/ N$ d( V) g5 Z. C* \
, V0 x( i5 q: N3 f9 U! ^3 h1 p2 K) V. U6 f9 J
//头文件与参数定义
  ~$ L3 L8 B, Y/ M- j0 d#include <uf_obj.h>
% q4 [. Q5 }9 C#include <uf_modl.h> & i! k, C( o& e- ^0 S5 l: y5 n
UF_STYLER_item_value_type_t sel_data;
; \4 t$ F" L0 L! c5 ^
' g6 a5 T: k% \' v3 r* u+ }' s- g5 s5 \
一、 回调函数:1 o3 B9 z8 k; ^7 U
: V" D- A  M! R! {) M
// Filter proc
2 o, n- d0 ^/ z! k* ^6 Bstatic int filter_face_cb( tag_t object, int type[3], void *user_data, UF_UI_selection_p_t select)
" l2 q; [4 P+ m1 I1 x, P& s{$ |( S9 K2 Z4 x
return (UF_UI_SEL_ACCEPT);* N# u, B: Z7 @4 N2 F
}  a4 }0 r! L8 [- J( h
//初始化
( ~- R! ]5 D$ \* }0 U3 c6 X1 Mstatic int init_proc(UF_UI_selection_p_t select,void *user_data)
0 t7 ~' q7 E5 h3 e0 n{
) u9 z0 g+ b# W if((UF_UI_set_sel_procs(select, filter_face_cb,NULL,user_data)) == 0)
- z3 Z* O' G* H3 u7 b: s    {: x7 D4 L. g0 V# K
        return (UF_UI_SEL_SUCCESS);' ?# ?+ z& B; q% T* B! {( J
    }; ~: L2 U! v5 l; [( |
    else; d0 T8 k7 C3 [* i- E
    {
4 ]( Y1 @+ ]* ^- b; }- X9 J        return (UF_UI_SEL_FAILURE);8 `7 I5 X; C9 v7 r" i
    }; u" a/ r8 T, X
}/ `  ~5 [9 y$ _# G0 A, F
6 D. v6 N) X: H2 O
//selection 回调函数7 u, K/ }) D/ w+ f( e7 j
static int sel_face_cb(int num_selected,   tag_p_t selected_objects,
8 w1 g, @- c/ S+ R        int  num_deselected, tag_p_t deselected_objects,% f. \9 I8 ^% e/ K% F2 I2 t
        void *user_data,     UF_UI_selection_p_t selection)
( e+ {9 ?4 {# R: z9 j{ " B+ A% C6 T3 o5 j" D
return (UF_UI_CB_CONTINUE_DIALOG);
' `0 p: l8 O' |& b6 G  R* O; e8 Q}
0 m+ T0 C! Q% @+ H. Y
- n+ X  F" D9 J4 H5 }" z二、在对话框【构造函数】中初始化,使得本对话框在ug中显示后能够在图形窗口交互选择对象4 Y9 M# m+ Q" {5 \+ E  f- H
) _# |2 z( }( c$ n8 D
//获得对话框的selection对象
5 R, ~* c, D& _; N/ hUF_UI_mask_t face_mask[1] = {UF_face_type, 0, 0};2 n5 l- i4 U8 }. y2 a+ Y4 U* _+ A
sel_data.item_id = UF_STYLER_DIALOG_INDEX;( O' W6 T2 D2 S  o8 [7 Y+ v- [1 _2 M
sel_data.item_attr = UF_STYLER_SELECTION;
% Q4 z. }/ \$ y: A$ d8 v7 X$ EUF_CALL(UF_STYLER_ask_value(dialog_id, &sel_data));+ s: |. p1 R! A$ `9 D4 ~1 @
//设置selection 对象,选择类型,选择MASK类型,+ }; ^1 d0 a( W4 e# }6 |+ y
UF_UI_set_sel_type(sel_data.value.selection, UF_UI_SEL_TYPE_SINGLE_SELECTION | UF_UI_SEL_TYPE_SINGLE_DESELECTION);
, K( L7 H2 A+ H. U5 z8 Q" M) ZUF_CALL(UF_UI_set_sel_mask(sel_data.value.selection,//selection' ^( X' h; n% E! ?# S" y+ w$ V
                          UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,//all type in mask are allowed
; w. @* _6 H( Z                          1, //number of mask
' H0 K$ O- P9 ]/ [# m: o) P' @9 I                          face_mask));//mask types. u0 z2 P4 b8 T2 v5 K/ d& d
UF_UI_set_sel_procs(sel_data.value.selection, filter_face_cb,  //Filter proc
2 a6 x8 ~0 z6 v# l5 ~6 U                  sel_face_cb,  //selection proc
% c! O+ k* s" z! F4 [                  NULL); //user data6 ~5 e) H. U, n- R4 R7 l, f

' g2 L# k3 j  B2 o$ {
8 l) G6 |. r* T+ P" N% P4 t: J# |三、选择好后,获得所选择对象 【ok函数】% [. i) t6 ^: m2 ^+ t, A; {' H
//得到所选对象的objs //得到选择对象的数量count/ X2 E5 e: O9 G1 Y
tag_p_t objs = NULL;
; N8 w0 a* X# \! n4 R  d int count = 0;; T% U0 [6 A+ |9 u0 r
UF_UI_ask_sel_object_list(sel_data.value.selection,&count,&objs);
$ B% m# L( |1 h+ o+ A; o
) d* r4 T, W. a/ O4 F8 N
7 y; i8 n5 v2 j$ ]7 o, [4 ^0 b8 echar msg[64];. ^9 `! ^: p% T
sprintf(msg, "%d",count); //数字转字符串
9 S" z7 j5 P* d! L7 ouc1601(msg,1);        //弹出框 显示 选择的对象数量- R! Y5 N6 x5 [! p; Y
: f. o2 }7 j) ?' ?3 b
// 其它操作 ——————————————————————
7 d$ k& O4 i' |# `) `
$ p  ~8 U) f& @: V4 s7 k) R// 分析面6 ~8 t% z4 V. s7 V2 ]6 Z7 K
int type=0;' e$ z! x5 v: Y2 Z6 d7 M% N% `) Z
int norm_dir=0;
9 Q' s& ^, b4 d6 q  Fdouble point[3];2 O$ d' z! {! H  c/ U& u; H
double dir[3];6 M. i* F% o5 Y* ^+ W( z# O
double box[6];- n' I" ]8 R1 L& \8 v# f; b
double radius[1];- t" d" \; [1 o
double rad_data[1];
, D( O5 O! I2 }' PUF_MODL_ask_face_data (
) ]$ `& B' ^8 J7 eobjs[0], //输入面
- o& E; n0 `* \( ^! u+ `- u2 ?&type,      //判断面类型6 ^4 W* l! Y( J- h
point,      //轴中心 点: b: c- x  O2 Z
dir,        //轴方向: b" a& P  k: J) i
box,        //极点坐标+ Y  a9 @0 ^5 C% A
radius,     //半径 圆锥=最小半径 + 最大半径 /26 R$ C$ V7 Y4 a" n2 r; r8 |
rad_data,   //7 m1 N+ C7 \8 T7 Y. x1 Q
&norm_dir); //面法向9 u( K0 {  f$ ^7 k
//判断面类型 type值4 }, ^8 z9 n9 W6 v8 }
//16 =圆柱$ k8 N8 W# r4 M/ M; P
//17 =圆锥* _1 ]6 f- W3 U( e# B
//18 =球
. a% H- G4 j0 V( w. S//19 =旋转(环形)$ a- n3 X& l! F9 |
//20 =挤压: L# J- v7 X+ j! t6 ^
//22 =有界平面
7 F1 K! l2 _; _6 K: X5 b( b//23 =角(物)) L  q6 c* p5 t; ?7 K& y
//43 = b级表面
% P8 z' h( ^0 a5 G% Z//65 =偏移曲面
0 O( I( x# {8 s, M8 ^//66 =外表面
2 e7 p! v0 `8 A. C4 q( r' g) t2 E" Y4 J' i) l4 Z( I3 t
sprintf(msg, "%d",type); //数字转字符串 # a7 V4 b8 H1 {# R+ R+ q0 D" T
uc1601(msg,1);            //弹出框 显示 选择的对象数量
. B' J# i  p0 Y6 P% p! `/ v0 Z. E% {& E
8 }2 v( e4 n+ n+ |) Z
UF_free(objs);& k1 ^2 ?% O* e- R

6 _6 d. v" |$ q+ a+ D  L
: c8 d0 _* r6 {1 c
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-6-5 23:50 , Processed in 0.050771 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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