青华模具培训学校

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
发表于 2015-11-1 13:52 | 显示全部楼层 |阅读模式
ui界面 带选择功能源代码 : d0 r, \0 u2 n6 g
9 \3 z9 D6 z" n+ e
梅雷制作QQ1821117007
% y9 I1 `1 w2 v/ @7 c4 @
) t% D. |1 W) Q7 B- @4 K, xug二次开发论坛. e/ ~+ e2 a# ^; @) e1 e
http://www.gripshy.com/& }7 G) @7 |1 S" a7 m, U8 v* a- \4 `

7 ~2 n2 ]5 u5 r: D* I. f带选择功能的ui styler dialog" e1 \4 i( x  x2 D. M( f/ Y! f
0 P1 y4 E  g7 a% z
UG中,自己制作的ui styler dialog有时候需要与ug 图形窗口交互来选择对象,
1 o. I7 |- f: F2 X) a/ H( U这是时候需要我们在制作dialog的时候,选择->类型单个->【√选择】  【√取消】 【√单个位置】* @: H# l% E5 J" e$ ~
' \# k2 S2 y9 u, t) t

# a- U" P0 O4 e//头文件与参数定义/ L0 ~9 L+ i+ I% Y; D
#include <uf_obj.h>
& t/ x0 U9 `: u. F& T. a1 _3 A- _#include <uf_modl.h>
# Z1 F# d& @% J4 O+ ?9 CUF_STYLER_item_value_type_t sel_data;; ^0 t9 h$ m3 a! V

' n$ \* I% a# |  s$ o( q, f2 B- Y7 X8 i0 d
一、 回调函数:
! g3 t9 o' K- ~! y
3 p2 d- q9 D& [& n% F( m# X// Filter proc
  O& ~; R  q) B% `static int filter_face_cb( tag_t object, int type[3], void *user_data, UF_UI_selection_p_t select)) [) |, C% Z; e! h# L% d
{
3 o# s# x2 y2 t% J8 K1 a$ p- i return (UF_UI_SEL_ACCEPT);
! Q/ x! \7 ^2 z' I- \8 R; v: c$ `' i}1 J6 |6 f. d/ ]8 f" S8 W
//初始化
1 V1 S  ^+ W9 ~" g: _5 `# vstatic int init_proc(UF_UI_selection_p_t select,void *user_data)! o3 E; E: ^# _
{
' q1 z/ B0 T* |: N& N  X if((UF_UI_set_sel_procs(select, filter_face_cb,NULL,user_data)) == 0)2 M8 o$ p  u' Z  ^9 T' _
    {, R- n) K; N; i/ b+ p3 t$ y3 @# o
        return (UF_UI_SEL_SUCCESS);
& l3 l/ B5 j+ J) g& i; ^    }
6 D# y( Y; @2 C0 ]6 U6 k; a    else
8 P- i6 B) d; G0 W    {
9 W, G) i8 t3 e. B. y& f        return (UF_UI_SEL_FAILURE);
) ^$ |1 f* D2 ^8 i    }
7 T" h' S' O- S9 n7 {0 Y/ l}
! A) e( l" p; v- f- x: S, J: l$ s2 ]; X& }
//selection 回调函数* w' Q) d: k1 `  n  ?3 W
static int sel_face_cb(int num_selected,   tag_p_t selected_objects,' D# C( \( ?- z% r- Q& v5 H' i
        int  num_deselected, tag_p_t deselected_objects,
' u$ M; [) E7 S        void *user_data,     UF_UI_selection_p_t selection). |5 p& Q/ W( j8 b9 C
{ % M+ U0 m! L1 {" |
return (UF_UI_CB_CONTINUE_DIALOG);% U/ H, c. y3 {- @8 \* m2 H% D8 Z& K
}
8 v# A) ~# J4 k( f+ K+ U. O/ G1 ^2 O6 v" q6 A* x$ \
二、在对话框【构造函数】中初始化,使得本对话框在ug中显示后能够在图形窗口交互选择对象
* m/ Q/ {. \) Z' N( e; H! L) {. n5 N  S# X( e) N% {! S" {
//获得对话框的selection对象
7 J+ t* h* ~4 j* C- mUF_UI_mask_t face_mask[1] = {UF_face_type, 0, 0};5 B: F' T1 p4 H* s" m
sel_data.item_id = UF_STYLER_DIALOG_INDEX;
6 z% y& H: k0 H6 Asel_data.item_attr = UF_STYLER_SELECTION;' p' `; K- B+ h. Z
UF_CALL(UF_STYLER_ask_value(dialog_id, &sel_data));
, g, p, h, |5 _4 ?9 |- I4 ?//设置selection 对象,选择类型,选择MASK类型,
( d6 p5 Z8 ^) B$ p# {) f3 k: X4 p6 aUF_UI_set_sel_type(sel_data.value.selection, UF_UI_SEL_TYPE_SINGLE_SELECTION | UF_UI_SEL_TYPE_SINGLE_DESELECTION);
' n! p6 [: D7 l+ c) X: Y) qUF_CALL(UF_UI_set_sel_mask(sel_data.value.selection,//selection" y3 r1 ~' y) x
                          UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,//all type in mask are allowed
. X: ^1 a7 k, h0 i2 ]" Z                          1, //number of mask
6 `. c$ c# K  @( k! @( X: l                          face_mask));//mask types
" M2 B) R" ~5 A/ z$ I, f3 c3 jUF_UI_set_sel_procs(sel_data.value.selection, filter_face_cb,  //Filter proc# p( ~* Y6 F# h5 m& H; R; ^: |
                  sel_face_cb,  //selection proc$ j1 i  q5 e1 p+ _% J* F- N1 }
                  NULL); //user data
- F- W+ W! u( y. E/ x8 N0 w1 Y+ O5 N9 u6 O: t5 r
/ n2 m! M# @4 A$ S2 x5 i" _
三、选择好后,获得所选择对象 【ok函数】9 @1 B8 A; t6 z- P5 J6 \
//得到所选对象的objs //得到选择对象的数量count* S  e$ N/ l' ]0 F
tag_p_t objs = NULL;
' ^  _( u, [4 b8 r) e/ f int count = 0;: c% e$ M) n' q; ^/ [) Q7 @
UF_UI_ask_sel_object_list(sel_data.value.selection,&count,&objs);; v- G1 p0 W( y- g* W
6 ]2 K: ]5 S7 p" D/ n2 x5 _
& @" g* a& k; O" w3 p7 B6 D
char msg[64];
! Q) ~5 ]+ q/ a( {: wsprintf(msg, "%d",count); //数字转字符串 ! f0 B) {2 T' [2 n; r7 K
uc1601(msg,1);        //弹出框 显示 选择的对象数量
" Q5 p* v, w7 P' ?* s
( ?5 U: d' l" @) n$ w* j+ I// 其它操作 ——————————————————————  \5 f  b& K& T! }
# K3 F' W( h% Q; ]. w& a7 u5 ?
// 分析面
) X! }+ W3 T; b/ Vint type=0;
" n1 ~" V- M* v7 |0 Pint norm_dir=0;9 j2 v5 `2 t& K) i
double point[3];9 M& T" j" l& Y5 ]/ s; j; g
double dir[3];
3 g1 M. q+ p% c, f% p( j* q5 gdouble box[6];: c$ I4 P  \) P; z
double radius[1];
+ w4 F0 Y$ v% p+ @  Mdouble rad_data[1];
. s# z: c0 f* v9 i3 wUF_MODL_ask_face_data (
$ X9 T/ R# h$ Q) ^* o( v5 T; Zobjs[0], //输入面
1 F5 m( Z6 t- Z9 ?0 D, f&type,      //判断面类型
3 l4 B; R. O0 t0 x; X+ V! [; ]2 Jpoint,      //轴中心 点
: A* l, G# m9 h, w! p. q1 G" `  Qdir,        //轴方向$ n, `/ [  p) ^; J; `/ G
box,        //极点坐标( [( ?6 Y% `' B: h
radius,     //半径 圆锥=最小半径 + 最大半径 /2
; c4 v: h6 ?+ T6 U# [0 `$ Urad_data,   //0 l+ N& }2 F4 w% z( \& k9 v# f0 Y) V
&norm_dir); //面法向* b+ o' ~# d  T! P# v# W  j7 n% v! p+ L1 B
//判断面类型 type值
# H) S0 r! N7 |" n+ U' @3 b* b//16 =圆柱
8 @, {, R0 Y. M( }( y( w' X+ a//17 =圆锥) \. m0 {, v6 i$ q; \$ d
//18 =球
* c) d# ^/ L( s* I+ z//19 =旋转(环形)
& `8 I% s5 T2 s5 \# C//20 =挤压
6 Q  {4 H. p5 m9 _8 f' v6 ^//22 =有界平面7 i9 R$ X$ G1 {4 x% k7 p, a
//23 =角(物)
# U9 y* l7 A& n2 x- k//43 = b级表面# h% [4 ^" o5 Z( t" W
//65 =偏移曲面) E: @" C9 u: @* q3 [
//66 =外表面
& i7 P3 T# U$ e2 F6 A* R% _: t8 y: e2 a. C& J+ k6 @: ]8 X3 w
sprintf(msg, "%d",type); //数字转字符串 1 }0 L6 A2 `+ C) n) {
uc1601(msg,1);            //弹出框 显示 选择的对象数量1 j5 [; |9 p0 j- P% o6 ?
4 P& ]- h% E1 R+ {
: p/ ?+ k- g! L/ u5 E: L& @7 \
UF_free(objs);
% Z  r, ~& l* z& a
3 y2 ]3 I. P1 L8 Y/ H+ b/ T" X( M" V+ I# D6 r- X: P
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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