|
我的思路: 选定直线后 取出线的2个端点,根据取出的端点再给定偏置距离得到新的点。 , }6 f5 C! I1 J3 f% e- F
* D$ y9 _; `* J0 ?; |! Q如图:
* a' s: F$ n! p* d5 w6 c r8 e
2 O8 C9 ?. I x3 g( g
看我代码:
. v, C" U. L8 X! Mint CHANGE_action_9_act_cb ( int dialog_id,
# L9 L2 O8 ^' ~5 @9 c void * client_data,
3 _) I9 ]5 O9 J2 \* A+ x UF_STYLER_item_value_type_p_t callback_data)+ H! U2 Y5 z! E2 a. g V7 |
{% i1 j7 i* j9 l$ z
/* Make sure User Function is available. */ , _& S6 m' x+ p% I* d; z
if ( UF_initialize() != 0)
$ b# V& `. g5 P z return ( UF_UI_CB_CONTINUE_DIALOG );) B0 c6 a0 q# L7 L' o! E
/* ---- Enter your callback code here ----- */$ W% [+ ~2 C- b/ s
int err = 0;
8 A: `. i' Z0 j0 p4 R' H char *message = "Select point";* e" k/ T9 v: ? ~3 K
double point_coords[3];- _# W% X# G _. e, F+ E) ^
UF_UI_selection_options_t opts;
; R& N! a2 l, l3 m/ m4 X UF_UI_mask_t mask[1] = {{UF_line_type, 0, 0}};5 `* K# A4 G% P- u' }/ Y6 ]
5 P$ k3 U' L1 i7 V* x int response; v; ?5 a5 N# d/ C& F4 m3 r" [+ H
double cursor[3];
" H4 n6 E c5 L8 d5 k double A[3],B[3];
* U/ J) k& _; ~. o7 S0 k tag_t object, view;
% W) m1 Z) L/ H) I9 f# k) o+ ^' ?! q: G int unhighlight = 0;
2 O) M6 k6 T( E6 F: ^0 v2 B( k UF_CURVE_line_p_t line_coords;- R/ w6 e( W( E9 E$ A, l
tag_t line_tag;0 d4 f" ~+ L$ u1 ]' W
opts.other_options = 0;
% t8 z! V4 y: o& K) ] opts.reserved = NULL;
+ r8 C" w1 D* Y* m opts.num_mask_triples = 1;
) D# f7 o& f# Z2 k opts.mask_triples = mask;
: z6 p2 x( z# b: c5 W8 a6 k opts.scope = UF_UI_SEL_SCOPE_WORK_PART_AND_OCC; // 定义选择范围
8 Z" o3 _2 n* ?6 M$ Y err = UF_UI_select_single(message, &opts, &response, &object, cursor, &view);! M+ Q+ G2 d* _0 v& X% Z5 d
if(err == 0 && response == 4 || response == 5)7 E4 _7 M8 h$ h2 A* W
{6 Q8 `% \! J5 K7 A0 H& W% t
if(object != NULL_TAG)' M. m' Z; v0 s# b
{
( o. L8 b3 p9 ^& B/ @2 M /*extern UFUNEXPORT int UF_CURVE_ask_line_data(tag_t line ,UF_CURVE_line_p_t line_coords)*/ / U! ~- C* s* ]2 ]& F
UF_CURVE_ask_line_data (object, line_coords); // 获取点位置$ x8 M# S5 j' G
//---下面要取出端点 再把端点偏置 但是代码不知道怎么实现了 ------请高人进来!!!!!$ k6 R& i- Y. Z& |8 f, c
A[0]= line_coords->start_point[0];
3 R8 b3 u/ b. Z/ a A[1]= line_coords->start_point[1];/ Y% m! x1 {/ t, E6 ?+ j
A[2]= line_coords->start_point[2];
& j8 m( y/ e6 ]+ P' r //uc1601(info,1);
+ ^! m2 [( I$ w9 `. D& \% \ }; D) f' E3 J, Y- c( W/ Q
// UF_CURVE_create_line(&line_coords,&line_tag);+ X. R7 ^; t- I# P; \& n8 H
}
k- I- \4 l' X- L1 H' ]' Y UF_terminate ();
- E. l5 K3 {$ y1 ]# ~0 @ /* Callback acknowledged, do not terminate dialog */+ ]( L; t- ~& i" w! L, z/ L5 L+ _
return (UF_UI_CB_CONTINUE_DIALOG);
# \: \% }, [ }: T* A/ M} |
|