|
我的思路: 选定直线后 取出线的2个端点,根据取出的端点再给定偏置距离得到新的点。
7 s9 s. q2 S- p" l" M$ X7 z, a/ {% D
如图:
! M/ f: L5 l& B
+ Z5 S: ~3 j% |* W% P8 z
看我代码:
+ v$ H L& ?' I) n$ N6 o% d) Kint CHANGE_action_9_act_cb ( int dialog_id, U+ ]& C$ F X- p5 F; I( f
void * client_data,7 _4 a4 @) i2 y& Z
UF_STYLER_item_value_type_p_t callback_data)
" N$ x* t, [7 \# J5 j, i{ A" }" V3 A: l( l) q
/* Make sure User Function is available. */
' {/ }$ F1 s" d6 \) X- n" c if ( UF_initialize() != 0) % F4 ~9 e4 D' ]) I( p0 v
return ( UF_UI_CB_CONTINUE_DIALOG );2 k' O. N- b/ L: u! a3 J
/* ---- Enter your callback code here ----- */
$ B4 V2 a/ X- V P" z9 W" f int err = 0;' L) g* }5 t% N1 i
char *message = "Select point";
! B( N4 U8 d9 Q# E4 e) x! k2 g double point_coords[3];
: G5 H6 z1 f* N* g UF_UI_selection_options_t opts;
- u2 u/ i: d8 A9 n0 T UF_UI_mask_t mask[1] = {{UF_line_type, 0, 0}};
. w2 A* f* v6 F2 G1 b
) }5 M; H' W! Y& A% y1 {7 a& H+ t int response;, F. k |" u- x9 P9 ^
double cursor[3];
. E; S( S: m; G- x! ~ double A[3],B[3];
9 _0 u' O% H0 z5 M! T tag_t object, view;
: @$ Z( {7 L2 h2 l2 S* W D4 L- R int unhighlight = 0;
: L. I0 i9 C: j- ?8 C UF_CURVE_line_p_t line_coords;# d: k2 `4 Q( A# k
tag_t line_tag;
" G# J6 ~* p4 A0 s) G% o9 q opts.other_options = 0;$ \# Y/ p0 [0 c5 f( S
opts.reserved = NULL;
/ a, e6 q" c0 ]0 o opts.num_mask_triples = 1;
3 D r, }4 g2 M5 X! ^ opts.mask_triples = mask;* Y$ F. X0 ~3 k# f. G
opts.scope = UF_UI_SEL_SCOPE_WORK_PART_AND_OCC; // 定义选择范围
- H& z5 n$ T" _5 f err = UF_UI_select_single(message, &opts, &response, &object, cursor, &view);6 ^/ j& f& G. a; q* {" x
if(err == 0 && response == 4 || response == 5): C+ B) i0 Z. i; A5 @' E1 J- z/ Y+ c
{/ z7 w# w" i1 w# y
if(object != NULL_TAG)# ~: p/ M& r. y$ k
{ ; q" O+ F8 m; Q- e3 @2 `
/*extern UFUNEXPORT int UF_CURVE_ask_line_data(tag_t line ,UF_CURVE_line_p_t line_coords)*/ * F$ U: d9 k; d0 M1 V. _
UF_CURVE_ask_line_data (object, line_coords); // 获取点位置: x* g& P! }- g8 z6 z
//---下面要取出端点 再把端点偏置 但是代码不知道怎么实现了 ------请高人进来!!!!!
, ?2 Z; O% L9 @ A[0]= line_coords->start_point[0];+ {3 M6 e3 A5 g6 F
A[1]= line_coords->start_point[1];% L. h# Z2 n) ] n5 w. s
A[2]= line_coords->start_point[2];$ v1 s- K- l0 H3 M' j5 q$ j0 c$ b
//uc1601(info,1); . [: e) N: f0 x
}
% M1 c2 j3 a; F // UF_CURVE_create_line(&line_coords,&line_tag);3 j$ o1 C- m0 {. W2 Y
}) _$ e2 b5 ]! Q* y, k+ Q6 a$ f
UF_terminate ();. z, |3 A* r0 ?! D4 @
/* Callback acknowledged, do not terminate dialog */5 M3 O0 s% }8 D6 n/ w! p- E: |
return (UF_UI_CB_CONTINUE_DIALOG); ) [5 P, q" L6 k, A
} |
|