|
我的思路: 选定直线后 取出线的2个端点,根据取出的端点再给定偏置距离得到新的点。
9 [4 ? T T' ]+ e+ _
8 j. [6 h3 r# r7 {5 k3 e; d$ Q( |如图:
9 R( V+ q6 T5 l) ~
) r3 a4 W4 g! |( i2 i J! k
看我代码:+ x R' b% R1 ^+ `# E$ Q
int CHANGE_action_9_act_cb ( int dialog_id,$ s1 u Q+ E4 z8 L" O
void * client_data,
# E- z6 w) B: ] UF_STYLER_item_value_type_p_t callback_data)
" n. S0 | q/ n5 O" {{
% L3 \ z' z6 `; d/ q; j+ a /* Make sure User Function is available. */
# |+ t0 M+ [% S& D if ( UF_initialize() != 0)
8 g% R8 G3 T& h* W" [' z1 N return ( UF_UI_CB_CONTINUE_DIALOG );( l# d2 b7 w0 [* [: p0 P) h9 b
/* ---- Enter your callback code here ----- */- W4 V( |& D# j
int err = 0;" P) j% y- F+ e2 w9 P$ F: N5 U
char *message = "Select point";
7 G+ ^2 B* p9 Q: c" x# J* p double point_coords[3];
4 q1 ?1 z5 P! j8 v N1 b UF_UI_selection_options_t opts;5 T4 P4 J% I% ^& \7 y$ u
UF_UI_mask_t mask[1] = {{UF_line_type, 0, 0}};
, l0 b/ ?1 G& n
4 x' q6 L" C" U5 u, e7 y int response;& b5 _# [, N6 Q% g7 M% ~( D$ m
double cursor[3];
4 g1 b5 g$ B2 G/ L1 Z4 n; D double A[3],B[3];
) k, V9 a$ X: d' J; S4 u tag_t object, view;, d/ A2 j) L- U8 k
int unhighlight = 0;/ `7 _- S6 t2 s
UF_CURVE_line_p_t line_coords;* G1 t; {0 q, X- F9 J
tag_t line_tag;
- K1 d. o1 @( V" w" J( E opts.other_options = 0;" y6 z' F' F, u* w1 q1 Z5 [
opts.reserved = NULL;
) \5 m/ b# s" j( z- u" u v opts.num_mask_triples = 1;
/ H/ u+ o% `" | opts.mask_triples = mask;1 w: O' R/ T0 b; C g) G* d
opts.scope = UF_UI_SEL_SCOPE_WORK_PART_AND_OCC; // 定义选择范围2 U( T& ~; } ?; L
err = UF_UI_select_single(message, &opts, &response, &object, cursor, &view);% a* h. E& D: A/ _
if(err == 0 && response == 4 || response == 5) u0 M& l _$ b* I3 ^( z
{. |8 |, N4 q- T; |) q; o5 J! W& l. T
if(object != NULL_TAG)
8 N" x7 O) O- ^' x {
; T. Y8 X8 v( ~5 H /*extern UFUNEXPORT int UF_CURVE_ask_line_data(tag_t line ,UF_CURVE_line_p_t line_coords)*/
1 X% J$ i# Q M" P2 R# |0 R UF_CURVE_ask_line_data (object, line_coords); // 获取点位置2 B! P# m1 X% b# |1 O
//---下面要取出端点 再把端点偏置 但是代码不知道怎么实现了 ------请高人进来!!!!!
- ^/ H/ t9 p- s0 o& O. g W2 | A[0]= line_coords->start_point[0];! M( n; z O3 \4 z2 T5 P
A[1]= line_coords->start_point[1];
, d! \$ r) d5 a) y, |) M# b& z; N A[2]= line_coords->start_point[2];4 H k: Q5 `2 u5 s2 ?
//uc1601(info,1); : U5 k4 B& X, u/ u$ A G$ T- v5 }
}% Q$ {0 }( D4 n
// UF_CURVE_create_line(&line_coords,&line_tag);
6 \2 |: `4 C& o/ C; @. W9 t }0 S6 ~% n8 W" P! K- ~& p
UF_terminate ();
z6 S# o/ d1 m3 ~- ?) W /* Callback acknowledged, do not terminate dialog */
% A% I. [/ H6 O8 U7 S# h# C return (UF_UI_CB_CONTINUE_DIALOG);
) f8 ^' i+ D4 c9 G4 o8 {+ o} |
|