Rev 5911 | Rev 5935 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
2165 | IgorA | 1 | ; |
2 | ; в этом файле собраны функции нужные для создания и |
||
3 | ; работы окна с координатами |
||
4 | ; |
||
5 | |||
5930 | IgorA | 6 | prop_wnd_width equ 340 ;ширина окна со свойствами объекта |
7 | prop_wnd_height equ 460 |
||
2165 | IgorA | 8 | SIZE_ONE_FLOAT equ 14 |
9 | MAX_OBJECT_SIZE equ (4+SIZE_ONE_FLOAT*3+1) |
||
10 | |||
11 | prop_wnd_run db 0 ;переменная следящая за тем что-бы не запускать больше 1-го окна со свойствами одновременно |
||
12 | |||
2173 | IgorA | 13 | txt_q db '?',0 |
2165 | IgorA | 14 | txt_space: |
15 | db SIZE_ONE_FLOAT dup(' ') |
||
16 | .end: |
||
17 | db 0 |
||
18 | |||
5930 | IgorA | 19 | rad_c dd 150 ;для вычисления радиуса |
20 | |||
2165 | IgorA | 21 | obj_point: ;добавляемый объект |
22 | dd 0 ;указатель |
||
23 | .text: |
||
24 | rb MAX_OBJECT_SIZE |
||
25 | |||
26 | |||
27 | |||
28 | ;даное окно (процесс) вызываеться функцией but_wnd_coords |
||
29 | align 4 |
||
30 | prop_start: |
||
31 | pushad |
||
32 | mcall 40,0x27 ;маска ожидаемых событий |
||
33 | inc byte[prop_wnd_run] |
||
5930 | IgorA | 34 | mov dword[w_scr_t3.type],1 |
2165 | IgorA | 35 | |
36 | stdcall [tl_node_get_data],tree1 |
||
37 | xor edx,edx |
||
4332 | IgorA | 38 | mov dword[capt_p],txt_q |
5911 | IgorA | 39 | cmp eax,0 |
4332 | IgorA | 40 | je .no_points |
5911 | IgorA | 41 | mov ebx,dword[eax] ;получаем значение сдвига выбранного блока |
2165 | IgorA | 42 | add ebx,dword[open_file_lif] |
43 | |||
4332 | IgorA | 44 | cmp word[ebx],CHUNK_VERTLIST |
45 | jne @f |
||
46 | movzx edx,word[ebx+6] ;колличество точек |
||
47 | add ebx,8 |
||
48 | mov dword[capt_p],txt_4110 |
||
49 | jmp .no_points |
||
50 | @@: |
||
51 | cmp word[ebx],0xb013 |
||
52 | jne @f |
||
53 | inc edx |
||
54 | add ebx,6 |
||
55 | mov dword[capt_p],txt_b013 |
||
56 | jmp .no_points |
||
57 | @@: |
||
58 | cmp word[ebx],0xb014 |
||
59 | jne @f |
||
60 | mov edx,2 |
||
61 | add ebx,6 |
||
62 | mov dword[capt_p],txt_b014 |
||
63 | ;jmp .no_points |
||
64 | @@: |
||
65 | .no_points: |
||
66 | |||
2165 | IgorA | 67 | ;настройка списка объектов |
68 | mov dword[tree3.info_max_count],2 |
||
69 | add dword[tree3.info_max_count],edx ;ставим число узлов, равное колличеству точек (+2 на начало и конец списка) |
||
70 | stdcall dword[tl_data_init], tree3 |
||
71 | mov eax,dword[icon_tl_sys] |
||
72 | mov dword[tree3.data_img_sys],eax |
||
73 | mov eax,dword[icon_toolbar] |
||
74 | mov dword[tree3.data_img],eax |
||
75 | |||
4332 | IgorA | 76 | cmp edx,0 |
2165 | IgorA | 77 | je .no_object |
2173 | IgorA | 78 | mov word[NumberSymbolsAD],5 |
2165 | IgorA | 79 | finit |
80 | .new_point: |
||
81 | mov dword[obj_point],ebx |
||
82 | mov dword[obj_point.text],0 |
||
83 | cld |
||
84 | mov ecx,3 |
||
85 | @@: |
||
86 | fld dword[ebx] |
||
87 | fstp qword[Data_Double] |
||
88 | call DoubleFloat_to_String |
||
89 | add ebx,4 |
||
90 | stdcall str_len, Data_String |
||
91 | mov esi,txt_space |
||
92 | add esi,eax |
||
93 | cmp esi,txt_space.end |
||
94 | jl .normal_size |
||
95 | mov esi,txt_space.end-1 ;минимум 1 пробел нужно добавить, что-бы цифры не слипались |
||
96 | .normal_size: |
||
97 | stdcall str_cat, obj_point.text,esi |
||
98 | stdcall str_cat, obj_point.text,Data_String |
||
99 | loop @b |
||
5911 | IgorA | 100 | stdcall dword[tl_node_add], tree3,(ID_ICON_DATA shl 16),obj_point |
2165 | IgorA | 101 | stdcall dword[tl_cur_next], tree3 |
102 | dec edx |
||
103 | cmp edx,0 |
||
104 | jg .new_point |
||
105 | stdcall dword[tl_cur_beg], tree3 |
||
106 | .no_object: |
||
5930 | IgorA | 107 | call obj_set_sizes |
2173 | IgorA | 108 | edit_boxes_set_sys_color edit1,editboxes_end,sc ;установка системных цветов |
109 | stdcall [edit_box_set_text], edit1, txt_q |
||
110 | stdcall [edit_box_set_text], edit2, txt_q |
||
111 | stdcall [edit_box_set_text], edit3, txt_q |
||
2165 | IgorA | 112 | popad |
113 | |||
5930 | IgorA | 114 | call prop_red_win |
115 | |||
116 | ;не отрывать эту функцию от предыдущей |
||
2165 | IgorA | 117 | align 4 |
5930 | IgorA | 118 | prop_still: |
119 | pushad |
||
120 | mcall 10 |
||
121 | |||
122 | cmp al,1 ;изм. положение окна |
||
123 | jne @f |
||
124 | call prop_red_win |
||
125 | jmp .end |
||
126 | @@: |
||
127 | cmp al,2 |
||
128 | jne @f |
||
129 | call prop_key |
||
130 | jmp .end |
||
131 | @@: |
||
132 | cmp al,3 |
||
133 | jz prop_button |
||
134 | cmp al,6 |
||
135 | jne @f |
||
136 | call prop_mouse |
||
137 | @@: |
||
138 | .end: |
||
139 | popad |
||
140 | jmp prop_still |
||
141 | |||
142 | align 4 |
||
2165 | IgorA | 143 | prop_red_win: |
144 | pushad |
||
145 | mcall 12,1 |
||
146 | |||
147 | xor eax,eax |
||
4332 | IgorA | 148 | mov edi,dword[capt_p] ;children window caption |
2165 | IgorA | 149 | mov bx,word[procinfo.box.left] |
150 | add bx,word[buf_0.l] |
||
5930 | IgorA | 151 | add bx,5 ;ширина боковой рамки |
2165 | IgorA | 152 | shl ebx,16 |
153 | mov bx,prop_wnd_width |
||
154 | mov cx,word[procinfo.box.top] |
||
2173 | IgorA | 155 | add cx,word[buf_0.t] |
2165 | IgorA | 156 | shl ecx,16 |
5930 | IgorA | 157 | mov cx,prop_wnd_height |
158 | mov edx,0xffffd0+0x33000000 |
||
2165 | IgorA | 159 | int 0x40 |
160 | |||
2173 | IgorA | 161 | mov esi,[sc.work_button] |
5930 | IgorA | 162 | mcall 8, (5 shl 16)+20, (246 shl 16)+20, 3 |
163 | mcall , (30 shl 16)+20, (246 shl 16)+20, 4 |
||
2173 | IgorA | 164 | |
165 | mov ebx,[image_data_toolbar] |
||
166 | add ebx,4*IMAGE_TOOLBAR_ICON_SIZE |
||
5930 | IgorA | 167 | mcall 7, , (16 shl 16)+16, (7 shl 16)+247 ;load |
2173 | IgorA | 168 | |
169 | sub ebx,IMAGE_TOOLBAR_ICON_SIZE |
||
5930 | IgorA | 170 | mov edx,(32 shl 16)+247 ;save |
2173 | IgorA | 171 | int 0x40 |
172 | |||
2165 | IgorA | 173 | mov dword[w_scr_t3.all_redraw],1 |
174 | stdcall [scrollbar_ver_draw],dword w_scr_t3 |
||
175 | stdcall [tl_draw], tree3 |
||
2173 | IgorA | 176 | stdcall [edit_box_draw], edit1 |
177 | stdcall [edit_box_draw], edit2 |
||
178 | stdcall [edit_box_draw], edit3 |
||
5930 | IgorA | 179 | |
180 | call draw_3d |
||
2165 | IgorA | 181 | mcall 12,2 |
182 | popad |
||
5930 | IgorA | 183 | ret |
2165 | IgorA | 184 | |
185 | align 4 |
||
5930 | IgorA | 186 | proc obj_set_sizes uses eax ebx esi |
187 | stdcall dword[tl_node_poi_get_info], tree3,0 |
||
188 | cmp eax,0 |
||
189 | je .end |
||
190 | stdcall [tl_node_poi_get_data], tree3,eax |
||
191 | finit |
||
192 | mov eax,[eax] |
||
193 | mov ebx,dword[eax] |
||
194 | mov [obj_x_min],ebx |
||
195 | mov [obj_x_max],ebx |
||
196 | mov ebx,dword[eax+4] |
||
197 | mov [obj_y_min],ebx |
||
198 | mov [obj_y_max],ebx |
||
199 | mov ebx,dword[eax+8] |
||
200 | mov [obj_z_min],ebx |
||
201 | mov [obj_z_max],ebx |
||
2165 | IgorA | 202 | |
5930 | IgorA | 203 | stdcall dword[tl_node_poi_get_info], tree3,0 |
204 | align 4 |
||
205 | .cycle_0: ;работа с координатой x |
||
206 | mov esi,eax |
||
207 | stdcall [tl_node_poi_get_data], tree3,esi |
||
208 | mov ebx,[eax] |
||
209 | |||
210 | fld dword[ebx] |
||
211 | fld dword[obj_x_min] |
||
212 | fcomp |
||
213 | fstsw ax |
||
214 | sahf |
||
215 | jb @f |
||
216 | mov eax,[ebx] |
||
217 | mov [obj_x_min],eax |
||
218 | ffree st0 |
||
219 | fincstp |
||
220 | jmp .next_x |
||
221 | @@: |
||
222 | fld dword[obj_x_max] |
||
223 | fcompp |
||
224 | fstsw ax |
||
225 | sahf |
||
226 | ja .next_x |
||
227 | mov eax,[ebx] |
||
228 | mov [obj_x_max],eax |
||
229 | .next_x: |
||
230 | |||
231 | stdcall dword[tl_node_poi_get_next_info], tree3,esi |
||
232 | cmp eax,0 |
||
233 | jne .cycle_0 |
||
234 | |||
235 | fld1 |
||
236 | fld dword[obj_x_max] |
||
237 | fsub dword[obj_x_min] |
||
238 | fst dword[obj_x_centr] |
||
239 | fdivp ;1/size.x |
||
240 | fstp dword[obj_x_scale] |
||
241 | |||
242 | fld dword[obj_x_centr] |
||
243 | fld1 |
||
244 | fld1 |
||
245 | faddp |
||
246 | fdivp ;centr.x = size.x/2 |
||
247 | fadd dword[obj_x_min] |
||
248 | fchs |
||
249 | fstp dword[obj_x_centr] |
||
250 | |||
251 | stdcall dword[tl_node_poi_get_info], tree3,0 |
||
252 | align 4 |
||
253 | .cycle_1: ;работа с координатой y |
||
254 | mov esi,eax |
||
255 | stdcall [tl_node_poi_get_data], tree3,esi |
||
256 | mov ebx,[eax] |
||
257 | |||
258 | fld dword[ebx+4] |
||
259 | fld dword[obj_y_min] |
||
260 | fcomp |
||
261 | fstsw ax |
||
262 | sahf |
||
263 | jb @f |
||
264 | mov eax,[ebx+4] |
||
265 | mov [obj_y_min],eax |
||
266 | ffree st0 |
||
267 | fincstp |
||
268 | jmp .next_y |
||
269 | @@: |
||
270 | fld dword[obj_y_max] |
||
271 | fcompp |
||
272 | fstsw ax |
||
273 | sahf |
||
274 | ja .next_y |
||
275 | mov eax,[ebx+4] |
||
276 | mov [obj_y_max],eax |
||
277 | .next_y: |
||
278 | |||
279 | stdcall dword[tl_node_poi_get_next_info], tree3,esi |
||
280 | cmp eax,0 |
||
281 | jne .cycle_1 |
||
282 | |||
283 | fld1 |
||
284 | fld dword[obj_y_max] |
||
285 | fsub dword[obj_y_min] |
||
286 | fst dword[obj_y_centr] |
||
287 | fdivp ;1/size.y |
||
288 | fstp dword[obj_y_scale] |
||
289 | |||
290 | fld dword[obj_y_centr] |
||
291 | fld1 |
||
292 | fld1 |
||
293 | faddp |
||
294 | fdivp ;centr.y = size.y/2 |
||
295 | fadd dword[obj_y_min] |
||
296 | fchs |
||
297 | fstp dword[obj_y_centr] |
||
298 | |||
299 | stdcall dword[tl_node_poi_get_info], tree3,0 |
||
300 | align 4 |
||
301 | .cycle_2: ;работа с координатой z |
||
302 | mov esi,eax |
||
303 | stdcall [tl_node_poi_get_data], tree3,esi |
||
304 | mov ebx,[eax] |
||
305 | |||
306 | fld dword[ebx+8] |
||
307 | fld dword[obj_z_min] |
||
308 | fcomp |
||
309 | fstsw ax |
||
310 | sahf |
||
311 | jb @f |
||
312 | mov eax,[ebx+8] |
||
313 | mov [obj_z_min],eax |
||
314 | ffree st0 |
||
315 | fincstp |
||
316 | jmp .next_z |
||
317 | @@: |
||
318 | fld dword[obj_z_max] |
||
319 | fcompp |
||
320 | fstsw ax |
||
321 | sahf |
||
322 | ja .next_z |
||
323 | mov eax,[ebx+8] |
||
324 | mov [obj_z_max],eax |
||
325 | .next_z: |
||
326 | |||
327 | stdcall dword[tl_node_poi_get_next_info], tree3,esi |
||
328 | cmp eax,0 |
||
329 | jne .cycle_2 |
||
330 | |||
331 | fld1 |
||
332 | fld dword[obj_z_max] |
||
333 | fsub dword[obj_z_min] |
||
334 | fst dword[obj_z_centr] |
||
335 | fdivp ;1/size.z |
||
336 | fstp dword[obj_z_scale] |
||
337 | |||
338 | fld dword[obj_z_centr] |
||
339 | fld1 |
||
340 | fld1 |
||
341 | faddp |
||
342 | fdivp ;centr.z = size.z/2 |
||
343 | fadd dword[obj_z_min] |
||
344 | fchs |
||
345 | fstp dword[obj_z_centr] |
||
346 | |||
347 | ;находим радиус для сферы |
||
348 | fld dword[obj_x_max] |
||
349 | fsub dword[obj_x_min] |
||
350 | fld dword[obj_y_max] |
||
351 | fsub dword[obj_y_min] |
||
352 | faddp |
||
353 | fild dword[rad_c] |
||
354 | fdivp ;radius=(size.x+size.y)/rad_c |
||
355 | fstp dword[sph_radius] |
||
356 | .end: |
||
357 | ret |
||
358 | endp |
||
359 | |||
360 | ;рисование точек в 3d |
||
361 | align 4 |
||
362 | draw_3d: |
||
363 | stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT ;очистим буфер цвета и глубины |
||
364 | stdcall [glPushMatrix] |
||
365 | stdcall [glTranslatef], 0.0,0.0,0.5 ;correct for z |
||
366 | stdcall [glScalef], [obj_x_scale],[obj_y_scale],[obj_z_scale] |
||
367 | stdcall [glScalef], 1.0,1.0,0.7 ;correct for z |
||
368 | stdcall [glRotatef], [angle_z],0.0,0.0,1.0 |
||
369 | stdcall [glRotatef], [angle_y],0.0,1.0,0.0 |
||
370 | stdcall [glRotatef], [angle_x],1.0,0.0,0.0 |
||
371 | stdcall [glTranslatef], [obj_x_centr],[obj_y_centr],[obj_z_centr] |
||
372 | |||
373 | stdcall [glColor3f], 1.0,1.0,1.0 |
||
374 | stdcall [glBegin],GL_POINTS |
||
375 | |||
376 | stdcall dword[tl_node_poi_get_info], tree3,0 |
||
2165 | IgorA | 377 | @@: |
5930 | IgorA | 378 | cmp eax,0 |
379 | je @f |
||
380 | mov esi,eax |
||
381 | stdcall [tl_node_poi_get_data], tree3,esi |
||
382 | mov eax,[eax] |
||
383 | stdcall [glVertex3f], [eax],[eax+4],[eax+8] |
||
384 | stdcall dword[tl_node_poi_get_next_info], tree3,esi |
||
385 | jmp @b |
||
2165 | IgorA | 386 | @@: |
5930 | IgorA | 387 | stdcall [glEnd] |
2165 | IgorA | 388 | |
5930 | IgorA | 389 | stdcall [tl_node_get_data],tree3 |
390 | cmp eax,0 |
||
391 | je @f |
||
392 | ;выделение активной точки |
||
393 | mov eax,[eax] |
||
394 | |||
395 | stdcall [glBegin],GL_LINES |
||
396 | stdcall [glColor3f], 1.0, 0.0, 0.0 |
||
397 | stdcall [glVertex3f], [obj_x_min],[eax+4],[eax+8] |
||
398 | stdcall [glVertex3f], [obj_x_max],[eax+4],[eax+8] |
||
399 | stdcall [glColor3f], 0.0, 0.0, 1.0 |
||
400 | stdcall [glVertex3f], [eax],[obj_y_min],[eax+8] |
||
401 | stdcall [glVertex3f], [eax],[obj_y_max],[eax+8] |
||
402 | stdcall [glColor3f], 0.0, 1.0, 0.0 |
||
403 | stdcall [glVertex3f], [eax],[eax+4],[obj_z_min] |
||
404 | stdcall [glVertex3f], [eax],[eax+4],[obj_z_max] |
||
405 | stdcall [glEnd] |
||
406 | |||
407 | stdcall [glColor3f], 1.0, 1.0, 0.0 |
||
408 | stdcall [glTranslatef], [eax],[eax+4],[eax+8] |
||
409 | stdcall [gluSphere], [qObj], [sph_radius], 8,8 |
||
410 | @@: |
||
411 | |||
412 | stdcall [glPopMatrix] |
||
413 | stdcall [kosglSwapBuffers] |
||
414 | ret |
||
415 | |||
2165 | IgorA | 416 | align 4 |
417 | prop_key: |
||
418 | push eax |
||
419 | mcall 2 |
||
5930 | IgorA | 420 | |
421 | test word [edit1.flags],10b ;ed_focus |
||
422 | je @f |
||
423 | stdcall [edit_box_key], edit1 |
||
424 | jmp .end |
||
425 | @@: |
||
426 | test word [edit2.flags],10b |
||
427 | je @f |
||
428 | stdcall [edit_box_key], edit2 |
||
429 | jmp .end |
||
430 | @@: |
||
431 | test word [edit3.flags],10b |
||
432 | je @f |
||
433 | stdcall [edit_box_key], edit3 |
||
434 | jmp .end |
||
435 | @@: |
||
2165 | IgorA | 436 | stdcall [tl_key], tree3 |
5930 | IgorA | 437 | |
438 | cmp ah,178 ;Up |
||
439 | jne @f |
||
440 | fld dword[angle_x] |
||
441 | fadd dword[delt_size] |
||
442 | fstp dword[angle_x] |
||
443 | call draw_3d |
||
444 | jmp .end |
||
445 | @@: |
||
446 | cmp ah,177 ;Down |
||
447 | jne @f |
||
448 | fld dword[angle_x] |
||
449 | fsub dword[delt_size] |
||
450 | fstp dword[angle_x] |
||
451 | call draw_3d |
||
452 | jmp .end |
||
453 | @@: |
||
454 | cmp ah,176 ;Left |
||
455 | jne @f |
||
456 | fld dword[angle_y] |
||
457 | fadd dword[delt_size] |
||
458 | fstp dword[angle_y] |
||
459 | call draw_3d |
||
460 | jmp .end |
||
461 | @@: |
||
462 | cmp ah,179 ;Right |
||
463 | jne @f |
||
464 | fld dword[angle_y] |
||
465 | fsub dword[delt_size] |
||
466 | fstp dword[angle_y] |
||
467 | call draw_3d |
||
468 | ;jmp .end |
||
469 | @@: |
||
470 | .end: |
||
2165 | IgorA | 471 | pop eax |
472 | ret |
||
473 | |||
474 | align 4 |
||
475 | prop_mouse: |
||
476 | ;push ecx edi |
||
477 | stdcall [tl_mouse], tree3 |
||
2173 | IgorA | 478 | stdcall [edit_box_mouse], edit1 |
479 | stdcall [edit_box_mouse], edit2 |
||
480 | stdcall [edit_box_mouse], edit3 |
||
2165 | IgorA | 481 | ;pop edi ecx |
482 | ret |
||
483 | |||
484 | align 4 |
||
485 | prop_button: |
||
486 | mcall 17 ;получить код нажатой кнопки |
||
487 | |||
2173 | IgorA | 488 | cmp ah,3 |
2165 | IgorA | 489 | jne @f |
5930 | IgorA | 490 | call get_point_coords |
491 | call draw_3d |
||
492 | jmp prop_still.end |
||
2165 | IgorA | 493 | @@: |
2173 | IgorA | 494 | cmp ah,4 |
495 | jne @f |
||
5911 | IgorA | 496 | push eax ebx ecx edi esi |
2173 | IgorA | 497 | stdcall [tl_node_get_data],tree3 |
5911 | IgorA | 498 | cmp eax,0 |
2173 | IgorA | 499 | je .no_select_1 |
5911 | IgorA | 500 | mov ebx,[eax] |
2173 | IgorA | 501 | finit |
2165 | IgorA | 502 | |
2173 | IgorA | 503 | mov esi,string1 |
504 | mov edi,Data_String |
||
505 | cld |
||
5930 | IgorA | 506 | mov ecx,8 |
507 | rep movsd |
||
2173 | IgorA | 508 | call String_to_DoubleFloat |
509 | fld qword[Data_Double] ;считываем как double |
||
510 | fstp dword[ebx] ;сохраняем как float |
||
511 | |||
512 | mov esi,string2 |
||
513 | mov edi,Data_String |
||
514 | cld |
||
5930 | IgorA | 515 | mov ecx,8 |
516 | rep movsd |
||
2173 | IgorA | 517 | call String_to_DoubleFloat |
518 | fld qword[Data_Double] ;считываем как double |
||
519 | fstp dword[ebx+4] ;сохраняем как float |
||
520 | |||
521 | mov esi,string3 |
||
522 | mov edi,Data_String |
||
523 | cld |
||
5930 | IgorA | 524 | mov ecx,8 |
525 | rep movsd |
||
2173 | IgorA | 526 | call String_to_DoubleFloat |
527 | fld qword[Data_Double] ;считываем как double |
||
528 | fstp dword[ebx+8] ;сохраняем как float |
||
529 | |||
530 | ;обновление измененного узла в списке tree3 и главного окна (по таймеру) |
||
531 | mov word[NumberSymbolsAD],5 |
||
532 | mov dword[obj_point],ebx |
||
533 | mov dword[obj_point.text],0 |
||
534 | cld |
||
535 | mov ecx,3 |
||
536 | .coord: |
||
537 | fld dword[ebx] |
||
538 | fstp qword[Data_Double] |
||
539 | call DoubleFloat_to_String |
||
540 | add ebx,4 |
||
541 | stdcall str_len, Data_String |
||
542 | mov esi,txt_space |
||
543 | add esi,eax |
||
544 | cmp esi,txt_space.end |
||
545 | jl .normal_size |
||
546 | mov esi,txt_space.end-1 ;минимум 1 пробел нужно добавить, что-бы цифры не слипались |
||
547 | .normal_size: |
||
548 | stdcall str_cat, obj_point.text,esi |
||
549 | stdcall str_cat, obj_point.text,Data_String |
||
550 | loop .coord |
||
5911 | IgorA | 551 | stdcall dword[tl_node_set_data], tree3,obj_point |
2173 | IgorA | 552 | stdcall dword[tl_draw], tree3 |
553 | mov byte[can_save],1 ;для показа кнопки 'Сохранить' |
||
554 | mov dword[offs_last_timer],0 ;для обновления блока в таймере |
||
5930 | IgorA | 555 | call draw_3d |
2173 | IgorA | 556 | .no_select_1: |
5911 | IgorA | 557 | pop esi edi ecx ebx eax |
5930 | IgorA | 558 | jmp prop_still.end |
2173 | IgorA | 559 | @@: |
560 | |||
2165 | IgorA | 561 | cmp ah,1 |
5930 | IgorA | 562 | jne prop_still.end |
2165 | IgorA | 563 | .exit: |
564 | mov dword[tree3.data_img],0 ;чистим указатели на иконки что-бы их не удалил деструктор |
||
565 | mov dword[tree3.data_img_sys],0 ;т. к. они еще используються в других элементах |
||
566 | stdcall dword[tl_data_clear], tree3 |
||
567 | mov byte[prop_wnd_run],0 ;обнуляем счетчик окон |
||
568 | mcall -1 ;выход из программы |
||
569 | |||
5930 | IgorA | 570 | align 4 |
571 | get_point_coords: |
||
572 | ;загрузка координат в editbox-ы |
||
573 | push eax ebx |
||
574 | stdcall [tl_node_get_data],tree3 |
||
575 | cmp eax,0 |
||
576 | je @f |
||
577 | mov ebx,[eax] |
||
578 | mov word[NumberSymbolsAD],8 |
||
579 | finit |
||
580 | fld dword[ebx] |
||
581 | fstp qword[Data_Double] |
||
582 | call DoubleFloat_to_String |
||
583 | stdcall [edit_box_set_text], edit1, Data_String |
||
584 | fld dword[ebx+4] |
||
585 | fstp qword[Data_Double] |
||
586 | call DoubleFloat_to_String |
||
587 | stdcall [edit_box_set_text], edit2, Data_String |
||
588 | fld dword[ebx+8] |
||
589 | fstp qword[Data_Double] |
||
590 | call DoubleFloat_to_String |
||
591 | stdcall [edit_box_set_text], edit3, Data_String |
||
592 | stdcall [edit_box_draw], edit1 |
||
593 | stdcall [edit_box_draw], edit2 |
||
594 | stdcall [edit_box_draw], edit3 |
||
595 | @@: |
||
596 | pop ebx eax |
||
597 | ret |
||
598 | |||
599 | align 4 |
||
600 | sph_radius dd 0 ;радиус сферы для выделения активной точки |
||
601 | obj_x_max dd 0 |
||
602 | obj_x_min dd 0 |
||
603 | obj_x_centr dd 0 |
||
604 | obj_x_scale dd 1.0 |
||
605 | obj_y_max dd 0 |
||
606 | obj_y_min dd 0 |
||
607 | obj_y_centr dd 0 |
||
608 | obj_y_scale dd 1.0 |
||
609 | obj_z_max dd 0 |
||
610 | obj_z_min dd 0 |
||
611 | obj_z_centr dd 0 |
||
612 | obj_z_scale dd 1.0 |
||
613 | |||
4332 | IgorA | 614 | capt_p dd 0 |
615 | |||
2165 | IgorA | 616 | ;дерево с объектами в пользовательском файле |
5930 | IgorA | 617 | tree3 tree_list MAX_OBJECT_SIZE,3, tl_key_no_edit+tl_list_box_mode,\ |
618 | 16,16, 0xffffff,0xb0d0ff,0x400040, 5,270,303,160, 16, 4,0, el_focus,\ |
||
619 | w_scr_t3,get_point_coords |
||
2165 | IgorA | 620 | |
5930 | IgorA | 621 | edit1 edit_box 80, 76, 249, 0xffd0d0, 0xff, 0x80ff, 0, 0x8000, 34, string1, mouse_dd, 0 |
622 | edit2 edit_box 80, 160, 249, 0xd0d0ff, 0xff, 0x80ff, 0, 0x8000, 34, string2, mouse_dd, 0 |
||
623 | edit3 edit_box 80, 244, 249, 0xd0ffd0, 0xff, 0x80ff, 0, 0x8000, 34, string3, mouse_dd, 0 |
||
2173 | IgorA | 624 | editboxes_end: |
625 | |||
626 | string1 rb 34 |
||
627 | string2 rb 34 |
||
628 | string3 rb 34 |
||
629 | |||
2165 | IgorA | 630 | align 4 |
5930 | IgorA | 631 | w_scr_t3 scrollbar 16, 0,0,0, 15, 100,0,0, 0,0,0, 1 |