|
我的思路: 选定直线后 取出线的2个端点,根据取出的端点再给定偏置距离得到新的点。 2 K5 O- k! p$ I. n- ?) H; i
6 t1 s: }# i" c) d" ?如图:
/ Y# o0 }& c+ [! A
5 `4 Y( W X Q1 N8 F% |' h* R
看我代码:1 ~' `# h9 [$ G$ v7 |+ X. N
int CHANGE_action_9_act_cb ( int dialog_id,* {7 H/ L* W% E! _* O( b
void * client_data,, T5 K, p, I4 W) t" A
UF_STYLER_item_value_type_p_t callback_data)
. Y9 T j- J1 [7 F) c$ F{8 e! V( r; Y1 f
/* Make sure User Function is available. */ , Q ~2 Q- [' d
if ( UF_initialize() != 0) + j$ ` {- D; l. H* H& y
return ( UF_UI_CB_CONTINUE_DIALOG );
% t. x& Y" A- R( P /* ---- Enter your callback code here ----- */
* ^) b" ]2 f5 ^1 G: d" ` int err = 0;
) p) Z; ?# X) n char *message = "Select point";7 v+ h! B! A9 ]% S: @; S: x
double point_coords[3];
# t; s% D/ `5 s3 K UF_UI_selection_options_t opts;
6 ^% _/ e0 g! v7 c9 ]- A9 i UF_UI_mask_t mask[1] = {{UF_line_type, 0, 0}};3 Q/ s! _% t, t) M2 V* M) H/ r W# D
3 }$ ]: Y3 D' [# Y int response;! b) P4 a6 K, T: e# n0 a3 H: W
double cursor[3];$ f" a. c9 C; X9 P; {+ D' a
double A[3],B[3];
1 H6 J9 V5 _! \* I tag_t object, view;# B- {' N8 J+ o' K
int unhighlight = 0;
* y4 y# G0 K' y8 A* E2 A UF_CURVE_line_p_t line_coords;
6 o& W g+ `0 A tag_t line_tag;% t2 g0 w: B: @) N/ S
opts.other_options = 0;# N! a: }7 v" H) h0 O
opts.reserved = NULL;
, P7 N$ }" J0 J" }1 V* K' W opts.num_mask_triples = 1;
& f j! P6 l/ j7 I opts.mask_triples = mask;
0 t+ ]1 \+ [/ d# E opts.scope = UF_UI_SEL_SCOPE_WORK_PART_AND_OCC; // 定义选择范围
) T* ^+ ~& A" l6 I2 m/ q err = UF_UI_select_single(message, &opts, &response, &object, cursor, &view);
5 r: |: B, z7 j# P; b# M if(err == 0 && response == 4 || response == 5)
- Y7 V, R& j8 N1 l4 k% e% M {/ {. K# ^$ e) i9 Z" _' }* p
if(object != NULL_TAG)
9 x8 E4 {: X) N: F# ^9 c5 B {
% D/ T3 g$ h. f" { /*extern UFUNEXPORT int UF_CURVE_ask_line_data(tag_t line ,UF_CURVE_line_p_t line_coords)*/
/ j$ r; x! f: q9 \ UF_CURVE_ask_line_data (object, line_coords); // 获取点位置9 u5 o9 i/ o* L! x
//---下面要取出端点 再把端点偏置 但是代码不知道怎么实现了 ------请高人进来!!!!!
- f6 @0 c- H: u6 T$ R A[0]= line_coords->start_point[0];
( P: M2 e( O- s6 {7 y) B" I A[1]= line_coords->start_point[1];
$ d7 w8 [' ]0 H3 Q1 } A[2]= line_coords->start_point[2];' k* Y: [: n4 X5 O: K
//uc1601(info,1); ; j' O F/ u* _1 h+ R8 Z! h9 D
}7 a8 T9 e5 V. h8 m
// UF_CURVE_create_line(&line_coords,&line_tag);
& u5 u! j& U, H/ o2 l }) N0 b/ G6 p6 C* X7 I+ D8 @
UF_terminate ();
! j8 Q; k) e4 T q /* Callback acknowledged, do not terminate dialog */
3 D5 C/ j3 W. `1 o# q% o return (UF_UI_CB_CONTINUE_DIALOG); % {+ H( P1 ]. I- l
} |
|