Subversion Repositories Kolibri OS

Rev

Rev 5938 | Rev 5948 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2165 IgorA 1
;
2
; в этом файле собраны функции нужные для создания и
5935 IgorA 3
; работы окна с координатами вершин
2165 IgorA 4
;
5
 
5938 IgorA 6
prop_wnd_width  equ 340 ;ширина окна со свойствами объекта
7
prop_wnd_height equ 460 ;высота окна со свойствами объекта
8
3d_wnd_l equ   5 ;отступ для tinygl буфера слева
9
3d_wnd_t equ  23 ;отступ для tinygl буфера сверху
10
3d_wnd_w equ 320
11
3d_wnd_h equ 240
2165 IgorA 12
SIZE_ONE_FLOAT equ 14
13
MAX_OBJECT_SIZE equ (4+SIZE_ONE_FLOAT*3+1)
14
 
5935 IgorA 15
bit_vertexes equ 0
16
bit_faces equ 1
17
bit_faces_fill equ 2
18
bit_light equ 3
19
 
5938 IgorA 20
ini_name db 'info3ds.ini',0
21
ini_sec_w3d db 'Window 3d',0
22
key_dv  db 'draw_vertices',0
23
key_df  db 'draw_faces',0
24
key_dff db 'draw_faces_fill',0
25
key_dl  db 'draw_light',0
26
key_ox  db 'col_ox',0
27
key_oy  db 'col_oy',0
28
key_oz  db 'col_oz',0
29
key_bk  db 'col_bkgnd',0
30
key_vert db 'col_vertices',0
31
key_face db 'col_faces',0
5944 IgorA 32
key_select db 'col_select',0
5938 IgorA 33
 
2165 IgorA 34
prop_wnd_run db 0 ;переменная следящая за тем что-бы не запускать больше 1-го окна со свойствами одновременно
35
 
2173 IgorA 36
txt_q db '?',0
2165 IgorA 37
txt_space:
38
	db SIZE_ONE_FLOAT dup(' ')
39
.end:
40
	db 0
41
 
5930 IgorA 42
rad_c dd 150 ;для вычисления радиуса
43
 
2165 IgorA 44
obj_point: ;добавляемый объект
45
	dd 0   ;указатель
46
.text:
47
	rb MAX_OBJECT_SIZE
48
 
5944 IgorA 49
if lang eq ru
50
txt_select_vert: db 'Выбрано: '
51
else
52
txt_select_vert: db 'Select: '
53
end if
54
.count:
55
dq 0,0
2165 IgorA 56
 
57
;даное окно (процесс) вызываеться функцией but_wnd_coords
58
align 4
59
prop_start:
60
pushad
61
	mcall 40,0x27 ;маска ожидаемых событий
62
	inc byte[prop_wnd_run]
5930 IgorA 63
	mov dword[w_scr_t3.type],1
5935 IgorA 64
	call prop_wnd_clear_param
2165 IgorA 65
 
66
	stdcall [tl_node_get_data],tree1
67
	xor edx,edx
4332 IgorA 68
	mov dword[capt_p],txt_q
5911 IgorA 69
	cmp eax,0
4332 IgorA 70
	je .no_points
5935 IgorA 71
		mov ebx,[eax] ;получаем значение сдвига выбранного блока
5938 IgorA 72
		add ebx,[open_file_data]
2165 IgorA 73
 
5938 IgorA 74
		cmp word[ebx],CHUNK_OBJBLOCK
75
		jne .end_oblo
76
			mov dword[capt_p],txt_4000
5944 IgorA 77
			stdcall found_block_data, tree1
5938 IgorA 78
			cmp eax,0
79
			je .no_points
80
			mov esi,eax
81
			movzx ecx,byte[esi+2] ;cl - уровень выбранного узла
82
			.cycle_0:
83
				stdcall [tl_node_poi_get_next_info], tree1,esi
84
				cmp eax,0
85
				je .no_points
86
				cmp byte[eax+2],cl
87
				jle .no_points
88
				mov esi,eax
89
				stdcall [tl_node_poi_get_data], tree1,esi
90
				mov ebx,[eax]
91
				add ebx,[open_file_data]
92
				cmp word[ebx],CHUNK_VERTLIST
93
				je .ini_vlist
94
				jmp .cycle_0
95
			jmp .no_points
96
		.end_oblo:
97
		cmp word[ebx],CHUNK_TRIMESH
98
		jne .end_trim
99
			mov dword[capt_p],txt_4100
5944 IgorA 100
			stdcall found_block_data, tree1
5938 IgorA 101
			cmp eax,0
102
			je .no_points
103
			mov esi,eax
104
			movzx ecx,byte[esi+2] ;cl - уровень выбранного узла
105
			.cycle_1:
106
				stdcall [tl_node_poi_get_next_info], tree1,esi
107
				cmp eax,0
108
				je .no_points
109
				cmp byte[eax+2],cl
110
				jle .no_points
111
				mov esi,eax
112
				stdcall [tl_node_poi_get_data], tree1,esi
113
				mov ebx,[eax]
114
				add ebx,[open_file_data]
115
				cmp word[ebx],CHUNK_VERTLIST
116
				je .ini_vlist
117
				jmp .cycle_1
118
			jmp .no_points
119
		.end_trim:
4332 IgorA 120
		cmp word[ebx],CHUNK_VERTLIST
5935 IgorA 121
		jne .end_vlist
5938 IgorA 122
			mov dword[capt_p],txt_4110
123
			.ini_vlist:
4332 IgorA 124
			movzx edx,word[ebx+6] ;колличество точек
125
			add ebx,8
5935 IgorA 126
			;поиск данных для треугольков
5944 IgorA 127
			stdcall found_block_data, tree1
5938 IgorA 128
			cmp eax,0
129
			je .set_points
130
			mov esi,eax
5935 IgorA 131
			;если нашли выбранный узел, то далее пытаемся найти узел с треугольниками
132
			movzx ecx,byte[esi+2] ;cl - уровень выбранного узла
5938 IgorA 133
			.cycle_2:
5935 IgorA 134
				stdcall [tl_node_poi_get_next_info], tree1,esi
135
				cmp eax,0
136
				je .set_points
137
				mov esi,eax
138
				stdcall [tl_node_poi_get_data], tree1,esi
139
				cmp byte[esi+2],cl
140
				jl .set_points
141
				je .found
5938 IgorA 142
				jmp .cycle_2
5935 IgorA 143
			.found: ;если нашли узел тогоже уровня что и выбранный узел
144
				cmp eax,0
145
				je .set_points
146
				mov eax,[eax]
5938 IgorA 147
				add eax,[open_file_data]
5935 IgorA 148
				cmp word[eax],CHUNK_FACELIST
5938 IgorA 149
				jne .cycle_2
5935 IgorA 150
				movzx ecx,word[eax+6]
151
				mov [obj_tri_count],ecx
152
				add eax,8 ;2+4+2 (chunk+size+count)
153
				mov [obj_tri_data],eax
154
			jmp .set_points
155
		.end_vlist:
156
		cmp word[ebx],CHUNK_TRACKPIVOT
4332 IgorA 157
		jne @f
158
			inc edx
159
			add ebx,6
160
			mov dword[capt_p],txt_b013
5935 IgorA 161
			jmp .set_points
4332 IgorA 162
		@@:
163
		cmp word[ebx],0xb014
164
		jne @f
165
			mov edx,2
166
			add ebx,6
167
			mov dword[capt_p],txt_b014
5935 IgorA 168
			;jmp .set_points
4332 IgorA 169
		@@:
5935 IgorA 170
		.set_points:
171
		mov [obj_poi_data],ebx
172
		mov [obj_poi_count],edx
4332 IgorA 173
	.no_points:
174
 
2165 IgorA 175
	;настройка списка объектов
176
	mov dword[tree3.info_max_count],2
177
	add dword[tree3.info_max_count],edx ;ставим число узлов, равное колличеству точек (+2 на начало и конец списка)
178
	stdcall dword[tl_data_init], tree3
179
	mov eax,dword[icon_tl_sys]
180
	mov dword[tree3.data_img_sys],eax
181
	mov eax,dword[icon_toolbar]
182
	mov dword[tree3.data_img],eax
183
 
4332 IgorA 184
	cmp edx,0
2165 IgorA 185
	je .no_object
2173 IgorA 186
		mov word[NumberSymbolsAD],5
2165 IgorA 187
		finit
188
		.new_point:
189
			mov dword[obj_point],ebx
190
			mov dword[obj_point.text],0
191
			cld
192
			mov ecx,3
193
			@@:
194
				fld dword[ebx]
195
				fstp qword[Data_Double]
196
				call DoubleFloat_to_String
197
				add ebx,4
198
				stdcall str_len, Data_String
199
				mov esi,txt_space
200
				add esi,eax
201
				cmp esi,txt_space.end
202
				jl .normal_size
203
					mov esi,txt_space.end-1 ;минимум 1 пробел нужно добавить, что-бы цифры не слипались
204
				.normal_size:
205
				stdcall str_cat, obj_point.text,esi
206
				stdcall str_cat, obj_point.text,Data_String
207
				loop @b
5944 IgorA 208
			stdcall dword[tl_node_add], tree3,(ID_ICON_POINT shl 16),obj_point
2165 IgorA 209
			stdcall dword[tl_cur_next], tree3
210
			dec edx
211
			cmp edx,0
212
			jg .new_point
213
			stdcall dword[tl_cur_beg], tree3
214
	.no_object:
5930 IgorA 215
	call obj_set_sizes
2173 IgorA 216
	edit_boxes_set_sys_color edit1,editboxes_end,sc ;установка системных цветов
217
	stdcall [edit_box_set_text], edit1, txt_q
218
	stdcall [edit_box_set_text], edit2, txt_q
219
	stdcall [edit_box_set_text], edit3, txt_q
5938 IgorA 220
	mov eax,0xc0c0c0
221
	mov ebx,[color_ox]
222
	shr ebx,2
223
	and ebx,0x3f3f3f
224
	add eax,ebx
225
	mov [edit1.color],eax
226
	mov eax,0xc0c0c0
227
	mov ebx,[color_oy]
228
	shr ebx,2
229
	and ebx,0x3f3f3f
230
	add eax,ebx
231
	mov [edit2.color],eax
232
	mov eax,0xc0c0c0
233
	mov ebx,[color_oz]
234
	shr ebx,2
235
	and ebx,0x3f3f3f
236
	add eax,ebx
237
	mov [edit3.color],eax
5944 IgorA 238
 
239
	mov eax,dword[ctx1] ;eax -> TinyGLContext.GLContext
240
	mov eax,[eax] ;eax -> ZBuffer
241
	mov eax,[eax+offs_zbuf_pbuf] ;eax -> ZBuffer.pbuf
242
	mov dword[buf_ogl],eax
2165 IgorA 243
popad
244
 
5930 IgorA 245
	call prop_red_win
246
 
247
;не отрывать эту функцию от предыдущей
2165 IgorA 248
align 4
5930 IgorA 249
prop_still:
250
	pushad
251
 
5935 IgorA 252
	mcall 23,10
253
	or eax,eax
254
	jnz @f
255
		call prop_timer_funct
256
		jmp .end
257
	@@:
258
 
5930 IgorA 259
	cmp al,1 ;изм. положение окна
260
	jne @f
261
		call prop_red_win
262
		jmp .end
263
	@@:
264
	cmp al,2
265
	jne @f
266
		call prop_key
267
		jmp .end
268
	@@:
269
	cmp al,3
270
	jz prop_button
271
	cmp al,6
272
	jne @f
273
		call prop_mouse
274
	@@:
275
.end:
276
	popad
277
	jmp prop_still
278
 
279
align 4
2165 IgorA 280
prop_red_win:
281
pushad
282
	mcall 12,1
283
 
284
	xor eax,eax
4332 IgorA 285
	mov edi,dword[capt_p] ;children window caption
2165 IgorA 286
	mov bx,word[procinfo.box.left]
287
	add bx,word[buf_0.l]
5930 IgorA 288
	add bx,5 ;ширина боковой рамки
2165 IgorA 289
	shl ebx,16
290
	mov bx,prop_wnd_width
291
	mov cx,word[procinfo.box.top]
2173 IgorA 292
	add cx,word[buf_0.t]
2165 IgorA 293
	shl ecx,16
5930 IgorA 294
	mov cx,prop_wnd_height
5938 IgorA 295
	mov edx,[sc.work]
296
	or  edx,0x33000000
2165 IgorA 297
	int 0x40
298
 
2173 IgorA 299
	mov esi,[sc.work_button]
5935 IgorA 300
	mcall 8, (5 shl 16)+20, (266 shl 16)+20, 3
301
	mcall , (30 shl 16)+20, (266 shl 16)+20, 4
2173 IgorA 302
 
303
	mov ebx,[image_data_toolbar]
5938 IgorA 304
	add ebx,3*IMAGE_TOOLBAR_ICON_SIZE
5935 IgorA 305
	mcall 7, , (16 shl 16)+16, (7 shl 16)+268 ;load
2173 IgorA 306
 
307
	sub ebx,IMAGE_TOOLBAR_ICON_SIZE
5935 IgorA 308
	mov edx,(32 shl 16)+268 ;save
2173 IgorA 309
	int 0x40
310
 
2165 IgorA 311
	mov dword[w_scr_t3.all_redraw],1
312
	stdcall [scrollbar_ver_draw],dword w_scr_t3
313
	stdcall [tl_draw], tree3
2173 IgorA 314
	stdcall [edit_box_draw], edit1
315
	stdcall [edit_box_draw], edit2
316
	stdcall [edit_box_draw], edit3
5930 IgorA 317
 
5935 IgorA 318
	stdcall [kmainmenu_draw], [main_menu]
5930 IgorA 319
	call draw_3d
2165 IgorA 320
	mcall 12,2
321
popad
5930 IgorA 322
	ret
2165 IgorA 323
 
5935 IgorA 324
;установка всех основных переменных по умолчанию
2165 IgorA 325
align 4
5935 IgorA 326
prop_wnd_clear_param:
5938 IgorA 327
	;установка параметров отображения
328
	call mnu_reset_settings
329
 
330
	;обнуление указателей на данные объектов
5935 IgorA 331
	mov dword[obj_poi_data],0
332
	mov dword[obj_poi_count],0
5944 IgorA 333
	mov dword[obj_poi_sel_c],0
5935 IgorA 334
	mov dword[obj_tri_data],0
335
	mov dword[obj_tri_count],0
336
	ret
337
 
5938 IgorA 338
;поиск данных
339
;input:
340
;eax - текущий узел
341
;output:
342
;eax - структура текущего узла (или 0 при неудаче)
343
align 4
5944 IgorA 344
proc found_block_data uses ebx ecx edx, tlist:dword
345
	mov edx,[tlist]
5938 IgorA 346
	mov ecx,eax
5944 IgorA 347
	stdcall [tl_node_poi_get_info], edx,0
5938 IgorA 348
	@@:
349
		mov ebx,eax
5944 IgorA 350
		stdcall [tl_node_poi_get_data], edx,ebx
5938 IgorA 351
		cmp eax,ecx
352
		je @f ;если попали на выбранный узел
5944 IgorA 353
		stdcall [tl_node_poi_get_next_info], edx,ebx
5938 IgorA 354
		cmp eax,0
355
		jne @b
356
		jmp .end
357
	@@:
358
		mov eax,ebx
359
	.end:
360
	ret
5944 IgorA 361
endp
5938 IgorA 362
 
5935 IgorA 363
;установка размеров объекта
364
align 4
5930 IgorA 365
proc obj_set_sizes uses eax ebx esi
5935 IgorA 366
	cmp dword[obj_poi_count],0
5930 IgorA 367
	je .end
368
		finit
5935 IgorA 369
		mov eax,[obj_poi_data]
5930 IgorA 370
		mov ebx,dword[eax]
371
		mov [obj_x_min],ebx
372
		mov [obj_x_max],ebx
373
		mov ebx,dword[eax+4]
374
		mov [obj_y_min],ebx
375
		mov [obj_y_max],ebx
376
		mov ebx,dword[eax+8]
377
		mov [obj_z_min],ebx
378
		mov [obj_z_max],ebx
2165 IgorA 379
 
5935 IgorA 380
	mov ebx,[obj_poi_data]
381
	mov esi,[obj_poi_count]
5930 IgorA 382
align 4
383
	.cycle_0: ;работа с координатой x
384
		fld dword[ebx]
385
		fld dword[obj_x_min]
386
		fcomp
387
		fstsw ax
388
		sahf
389
		jb @f
390
			mov eax,[ebx]
391
			mov [obj_x_min],eax
392
			ffree st0
393
			fincstp
394
			jmp .next_x
395
		@@:
396
		fld dword[obj_x_max]
397
		fcompp
398
		fstsw ax
399
		sahf
400
		ja .next_x
401
			mov eax,[ebx]
402
			mov [obj_x_max],eax
403
		.next_x:
404
 
5935 IgorA 405
		add ebx,12
406
		dec esi
407
		jnz .cycle_0
5930 IgorA 408
 
409
		fld1
410
		fld dword[obj_x_max]
411
		fsub dword[obj_x_min]
412
		fst dword[obj_x_centr]
413
		fdivp ;1/size.x
414
		fstp dword[obj_x_scale]
415
 
416
		fld dword[obj_x_centr]
417
		fld1
418
		fld1
419
		faddp
420
		fdivp ;centr.x = size.x/2
421
		fadd dword[obj_x_min]
422
		fchs
423
		fstp dword[obj_x_centr]
424
 
5935 IgorA 425
	mov ebx,[obj_poi_data]
426
	mov esi,[obj_poi_count]
5930 IgorA 427
align 4
428
	.cycle_1: ;работа с координатой y
429
		fld dword[ebx+4]
430
		fld dword[obj_y_min]
431
		fcomp
432
		fstsw ax
433
		sahf
434
		jb @f
435
			mov eax,[ebx+4]
436
			mov [obj_y_min],eax
437
			ffree st0
438
			fincstp
439
			jmp .next_y
440
		@@:
441
		fld dword[obj_y_max]
442
		fcompp
443
		fstsw ax
444
		sahf
445
		ja .next_y
446
			mov eax,[ebx+4]
447
			mov [obj_y_max],eax
448
		.next_y:
449
 
5935 IgorA 450
		add ebx,12
451
		dec esi
452
		jnz .cycle_1
5930 IgorA 453
 
454
		fld1
455
		fld dword[obj_y_max]
456
		fsub dword[obj_y_min]
457
		fst dword[obj_y_centr]
458
		fdivp ;1/size.y
459
		fstp dword[obj_y_scale]
460
 
461
		fld dword[obj_y_centr]
462
		fld1
463
		fld1
464
		faddp
465
		fdivp ;centr.y = size.y/2
466
		fadd dword[obj_y_min]
467
		fchs
468
		fstp dword[obj_y_centr]
469
 
5935 IgorA 470
	mov ebx,[obj_poi_data]
471
	mov esi,[obj_poi_count]
5930 IgorA 472
align 4
473
	.cycle_2: ;работа с координатой z
474
		fld dword[ebx+8]
475
		fld dword[obj_z_min]
476
		fcomp
477
		fstsw ax
478
		sahf
479
		jb @f
480
			mov eax,[ebx+8]
481
			mov [obj_z_min],eax
482
			ffree st0
483
			fincstp
484
			jmp .next_z
485
		@@:
486
		fld dword[obj_z_max]
487
		fcompp
488
		fstsw ax
489
		sahf
490
		ja .next_z
491
			mov eax,[ebx+8]
492
			mov [obj_z_max],eax
493
		.next_z:
494
 
5935 IgorA 495
		add ebx,12
496
		dec esi
497
		jnz .cycle_2
5930 IgorA 498
 
499
		fld1
500
		fld dword[obj_z_max]
501
		fsub dword[obj_z_min]
502
		fst dword[obj_z_centr]
503
		fdivp ;1/size.z
504
		fstp dword[obj_z_scale]
505
 
506
		fld dword[obj_z_centr]
507
		fld1
508
		fld1
509
		faddp
510
		fdivp ;centr.z = size.z/2
511
		fadd dword[obj_z_min]
512
		fchs
513
		fstp dword[obj_z_centr]
514
 
515
		;находим радиус для сферы
516
		fld dword[obj_x_max]
517
		fsub dword[obj_x_min]
518
		fld dword[obj_y_max]
519
		fsub dword[obj_y_min]
520
		faddp
521
		fild dword[rad_c]
522
		fdivp ;radius=(size.x+size.y)/rad_c
523
		fstp dword[sph_radius]
524
	.end:
525
	ret
526
endp
527
 
528
;рисование точек в 3d
529
align 4
530
draw_3d:
5935 IgorA 531
	cmp dword[obj_poi_count],2
532
	jl .end_f
5930 IgorA 533
	stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT ;очистим буфер цвета и глубины
534
	stdcall [glPushMatrix]
5935 IgorA 535
	bt dword[draw_mode],bit_light
536
	jnc @f
537
		call SetLight
538
		jmp .end_l
539
	@@:
540
		stdcall [glDisable],GL_LIGHTING
541
	.end_l:
5930 IgorA 542
	stdcall [glTranslatef], 0.0,0.0,0.5 ;correct for z
543
	stdcall [glScalef], [obj_x_scale],[obj_y_scale],[obj_z_scale]
544
	stdcall [glScalef], 1.0,1.0,0.7 ;correct for z
545
	stdcall [glRotatef], [angle_z],0.0,0.0,1.0
546
	stdcall [glRotatef], [angle_y],0.0,1.0,0.0
547
	stdcall [glRotatef], [angle_x],1.0,0.0,0.0
548
	stdcall [glTranslatef], [obj_x_centr],[obj_y_centr],[obj_z_centr]
549
 
5935 IgorA 550
	;рисование точек
551
	bt dword[draw_mode],bit_vertexes
552
	jnc .end_points
5938 IgorA 553
		stdcall [glColor3ub],[color_vert+2],[color_vert+1],[color_vert]
5935 IgorA 554
		stdcall [glBegin],GL_POINTS
555
		mov eax,[obj_poi_data]
556
		mov ebx,[obj_poi_count]
557
		@@:
558
			stdcall [glVertex3f], [eax],[eax+4],[eax+8]
559
			add eax,12
560
			dec ebx
561
			jnz @b
562
		stdcall [glEnd]
563
	.end_points:
5930 IgorA 564
 
5944 IgorA 565
	;рисование активной точки
5930 IgorA 566
	stdcall [tl_node_get_data],tree3
567
	cmp eax,0
568
	je @f
569
		;выделение активной точки
570
		mov eax,[eax]
571
 
572
		stdcall [glBegin],GL_LINES
5938 IgorA 573
		stdcall [glColor3ub],[color_ox+2],[color_ox+1],[color_ox]
5930 IgorA 574
		stdcall [glVertex3f], [obj_x_min],[eax+4],[eax+8]
575
		stdcall [glVertex3f], [obj_x_max],[eax+4],[eax+8]
5938 IgorA 576
		stdcall [glColor3ub],[color_oy+2],[color_oy+1],[color_oy]
5930 IgorA 577
		stdcall [glVertex3f], [eax],[obj_y_min],[eax+8]
578
		stdcall [glVertex3f], [eax],[obj_y_max],[eax+8]
5938 IgorA 579
		stdcall [glColor3ub],[color_oz+2],[color_oz+1],[color_oz]
5930 IgorA 580
		stdcall [glVertex3f], [eax],[eax+4],[obj_z_min]
581
		stdcall [glVertex3f], [eax],[eax+4],[obj_z_max]
582
		stdcall [glEnd]
583
 
5944 IgorA 584
		stdcall [glColor3ub],[color_select+2],[color_select+1],[color_select]
5935 IgorA 585
		stdcall [glPushMatrix]
586
			stdcall [glTranslatef], [eax],[eax+4],[eax+8]
587
			stdcall [gluSphere], [qObj], [sph_radius], 8,8
588
		stdcall [glPopMatrix]
5930 IgorA 589
	@@:
590
 
5944 IgorA 591
	;рисование выделенных точек
592
	cmp dword[obj_poi_sel_c],0
593
	je .end_select
594
		mov ecx,dword[obj_poi_sel_c]
595
		stdcall [glColor3ub],[color_select+2],[color_select+1],[color_select]
596
		stdcall dword[tl_node_poi_get_info], tree3,0
597
		@@:
598
			cmp eax,0
599
			je .end_select
600
			mov ebx,eax
601
			cmp word[ebx],ID_ICON_POINT_SEL
602
			jne .next_sel
603
			stdcall [tl_node_poi_get_data], tree3,ebx
604
			mov eax,[eax]
605
			stdcall [glPushMatrix]
606
				stdcall [glTranslatef], [eax],[eax+4],[eax+8]
607
				stdcall [gluSphere], [qObj], [sph_radius], 4,4
608
			stdcall [glPopMatrix]
609
			dec ecx
610
			jz .end_select
611
			.next_sel:
612
			stdcall dword[tl_node_poi_get_next_info], tree3,ebx
613
			jmp @b
614
    .end_select:
615
 
5935 IgorA 616
	;рисование граней
617
	bt dword[draw_mode],bit_faces
618
	jnc .end_triangles
619
	cmp dword[obj_tri_count],0
620
	je .end_triangles
621
	cmp dword[obj_poi_count],0
622
	je .end_triangles
5938 IgorA 623
		bt dword[draw_mode],bit_faces_fill
624
		jc @f
625
			push GL_LINE
626
			jmp .end_0
627
		@@:
628
			push GL_FILL
629
		.end_0:
630
		stdcall [glPolygonMode], GL_FRONT_AND_BACK ;mode - уже в стеке
631
		stdcall [glColor3ub],[color_face+2],[color_face+1],[color_face]
5935 IgorA 632
		stdcall [glBegin],GL_TRIANGLES
633
		mov eax,[obj_tri_data]
634
		mov ecx,[obj_tri_count]
635
		@@:
636
			movzx ebx,word[eax] ;1-я вершина
637
			imul ebx,12
638
			add ebx,[obj_poi_data]
639
			stdcall [glVertex3f], [ebx],[ebx+4],[ebx+8]
640
			movzx ebx,word[eax+2] ;2-я вершина
641
			imul ebx,12
642
			add ebx,[obj_poi_data]
643
			stdcall [glVertex3f], [ebx],[ebx+4],[ebx+8]
644
			movzx ebx,word[eax+4] ;3-я вершина
645
			imul ebx,12
646
			add ebx,[obj_poi_data]
647
			stdcall [glVertex3f], [ebx],[ebx+4],[ebx+8]
648
			add eax,8 ;размер треугольника = (3 вершины (по 2б) + свойства (2б))
649
			dec ecx
650
			jnz @b
651
		stdcall [glEnd]
652
	.end_triangles:
653
 
5930 IgorA 654
	stdcall [glPopMatrix]
5944 IgorA 655
	cmp dword[obj_poi_sel_c],0
656
	je @f
657
		stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_select_vert,5,3,[color_select]
658
	@@:
5930 IgorA 659
	stdcall [kosglSwapBuffers]
5935 IgorA 660
	.end_f:
5930 IgorA 661
	ret
662
 
2165 IgorA 663
align 4
5935 IgorA 664
SetLight:
665
	stdcall [glLightfv], GL_LIGHT0, GL_POSITION, light_position
666
	stdcall [glLightfv], GL_LIGHT0, GL_SPOT_DIRECTION, light_dir
667
 
668
	stdcall [glLightfv], GL_LIGHT0, GL_DIFFUSE, white_light
669
	stdcall [glLightfv], GL_LIGHT0, GL_SPECULAR, white_light
670
 
671
	stdcall [glEnable], GL_COLOR_MATERIAL
672
	stdcall [glColorMaterial], GL_FRONT, GL_AMBIENT_AND_DIFFUSE
673
	stdcall [glMaterialfv], GL_FRONT, GL_SPECULAR, mat_specular
674
	stdcall [glMaterialf], GL_FRONT, GL_SHININESS, mat_shininess
675
	stdcall [glLightModelfv], GL_LIGHT_MODEL_AMBIENT, lmodel_ambient
676
 
677
	stdcall [glEnable],GL_LIGHTING
678
	stdcall [glEnable],GL_LIGHT0
679
	ret
680
 
681
align 4
682
proc prop_key uses eax ebx
2165 IgorA 683
	mcall 2
5930 IgorA 684
 
685
	test word [edit1.flags],10b ;ed_focus
686
	je @f
687
		stdcall [edit_box_key], edit1
688
		jmp .end
689
	@@:
690
	test word [edit2.flags],10b
691
	je @f
692
		stdcall [edit_box_key], edit2
693
		jmp .end
694
	@@:
695
	test word [edit3.flags],10b
696
	je @f
697
		stdcall [edit_box_key], edit3
698
		jmp .end
699
	@@:
5935 IgorA 700
	cmp dword[el_focus], tree3
701
	jne @f
702
		stdcall [tl_key], tree3
703
		jmp .end
704
	@@:
5930 IgorA 705
 
706
	cmp ah,178 ;Up
707
	jne @f
708
		fld dword[angle_x]
709
		fadd dword[delt_size]
710
		fstp dword[angle_x]
711
		call draw_3d
712
		jmp .end
713
	@@:
714
	cmp ah,177 ;Down
715
	jne @f
716
		fld dword[angle_x]
717
		fsub dword[delt_size]
718
		fstp dword[angle_x]
719
		call draw_3d
720
		jmp .end
721
	@@:
722
	cmp ah,176 ;Left
723
	jne @f
724
		fld dword[angle_y]
725
		fadd dword[delt_size]
726
		fstp dword[angle_y]
727
		call draw_3d
728
		jmp .end
729
	@@:
730
	cmp ah,179 ;Right
731
	jne @f
732
		fld dword[angle_y]
733
		fsub dword[delt_size]
734
		fstp dword[angle_y]
735
		call draw_3d
736
		;jmp .end
737
	@@:
738
	.end:
2165 IgorA 739
	ret
5935 IgorA 740
endp
2165 IgorA 741
 
742
align 4
743
prop_mouse:
5938 IgorA 744
	push eax ebx
745
	mcall 37,3
746
	bt eax,0
747
	jnc .end_m
748
		;mouse l. but. move
749
		cmp dword[mouse_drag],1
750
		jne .end_m
751
		mcall 37,1 ;get mouse coords
752
		mov ebx,eax
753
		shr ebx,16 ;mouse.x
754
		cmp ebx,3d_wnd_l
755
		jg @f
756
			mov ebx,3d_wnd_l
757
		@@:
758
		sub ebx,3d_wnd_l
759
		cmp ebx,3d_wnd_w
760
		jle @f
761
			mov ebx,3d_wnd_w
762
		@@:
763
		and eax,0xffff ;mouse.y
764
		cmp eax,3d_wnd_t
765
		jg @f
766
			mov eax,3d_wnd_t
767
		@@:
768
		sub eax,3d_wnd_t
769
		cmp eax,3d_wnd_h
770
		jle @f
771
			mov eax,3d_wnd_h
772
		@@:
773
		finit
774
		fild dword[mouse_y]
775
		mov [mouse_y],eax
776
		fisub dword[mouse_y]
777
		fdiv dword[angle_dxm] ;если курсор движется по оси y (вверх или вниз) то поворот делаем вокруг оси x
778
		fadd dword[angle_x]
779
		fstp dword[angle_x]
780
 
781
		fild dword[mouse_x]
782
		mov [mouse_x],ebx
783
		fisub dword[mouse_x]
784
		fdiv dword[angle_dym] ;если курсор движется по оси x (вверх или вниз) то поворот делаем вокруг оси y
785
		fadd dword[angle_y]
786
		fstp dword[angle_y]
787
 
788
		call draw_3d
789
		jmp .end_d
790
	.end_m:
791
	bt eax,16
792
	jnc @f
793
		;mouse l. but. up
794
		mov dword[mouse_drag],0
795
		jmp .end_d
796
	@@:
797
	bt eax,8
798
	jnc .end_d
799
		;mouse l. but. press
800
		mcall 37,1 ;get mouse coords
801
		mov ebx,eax
802
		shr ebx,16 ;mouse.x
803
		cmp ebx,3d_wnd_l
804
		jl .end_d
805
		sub ebx,3d_wnd_l
806
		cmp ebx,3d_wnd_w
807
		jg .end_d
808
		and eax,0xffff ;mouse.y
809
		cmp eax,3d_wnd_t
810
		jl .end_d
811
		sub eax,3d_wnd_t
812
		cmp eax,3d_wnd_h
813
		jg .end_d
814
		mov dword[mouse_drag],1
815
		mov dword[mouse_x],ebx
816
		mov dword[mouse_y],eax
817
	.end_d:
818
 
5935 IgorA 819
	stdcall [kmainmenu_dispatch_cursorevent], [main_menu]
2165 IgorA 820
	stdcall [tl_mouse], tree3
2173 IgorA 821
	stdcall [edit_box_mouse], edit1
822
	stdcall [edit_box_mouse], edit2
823
	stdcall [edit_box_mouse], edit3
5938 IgorA 824
	pop ebx eax
2165 IgorA 825
	ret
826
 
827
align 4
828
prop_button:
829
	mcall 17 ;получить код нажатой кнопки
830
 
2173 IgorA 831
	cmp ah,3
2165 IgorA 832
	jne @f
5930 IgorA 833
		call get_point_coords
834
		call draw_3d
835
		jmp prop_still.end
2165 IgorA 836
	@@:
2173 IgorA 837
	cmp ah,4
838
	jne @f
5911 IgorA 839
		push eax ebx ecx edi esi
2173 IgorA 840
		stdcall [tl_node_get_data],tree3
5911 IgorA 841
		cmp eax,0
2173 IgorA 842
		je .no_select_1
5911 IgorA 843
			mov ebx,[eax]
2173 IgorA 844
			finit
2165 IgorA 845
 
2173 IgorA 846
			mov esi,string1
847
			mov edi,Data_String
848
			cld
5930 IgorA 849
			mov ecx,8
850
			rep movsd
2173 IgorA 851
			call String_to_DoubleFloat
852
			fld  qword[Data_Double] ;считываем как double
853
			fstp dword[ebx] ;сохраняем как float
854
 
855
			mov esi,string2
856
			mov edi,Data_String
857
			cld
5930 IgorA 858
			mov ecx,8
859
			rep movsd
2173 IgorA 860
			call String_to_DoubleFloat
861
			fld  qword[Data_Double] ;считываем как double
862
			fstp dword[ebx+4] ;сохраняем как float
863
 
864
			mov esi,string3
865
			mov edi,Data_String
866
			cld
5930 IgorA 867
			mov ecx,8
868
			rep movsd
2173 IgorA 869
			call String_to_DoubleFloat
870
			fld  qword[Data_Double] ;считываем как double
871
			fstp dword[ebx+8] ;сохраняем как float
872
 
873
			;обновление измененного узла в списке tree3 и главного окна (по таймеру)
874
			mov word[NumberSymbolsAD],5
875
			mov dword[obj_point],ebx
876
			mov dword[obj_point.text],0
877
			cld
878
			mov ecx,3
879
			.coord:
880
				fld dword[ebx]
881
				fstp qword[Data_Double]
882
				call DoubleFloat_to_String
883
				add ebx,4
884
				stdcall str_len, Data_String
885
				mov esi,txt_space
886
				add esi,eax
887
				cmp esi,txt_space.end
888
				jl .normal_size
889
					mov esi,txt_space.end-1 ;минимум 1 пробел нужно добавить, что-бы цифры не слипались
890
				.normal_size:
891
				stdcall str_cat, obj_point.text,esi
892
				stdcall str_cat, obj_point.text,Data_String
893
				loop .coord
5944 IgorA 894
			mov byte[obj_point.text],'*' ;отмечаем что вершина изменялась
5911 IgorA 895
			stdcall dword[tl_node_set_data], tree3,obj_point
2173 IgorA 896
			stdcall dword[tl_draw], tree3
897
			mov byte[can_save],1 ;для показа кнопки 'Сохранить'
898
			mov dword[offs_last_timer],0 ;для обновления блока в таймере
5930 IgorA 899
			call draw_3d
2173 IgorA 900
		.no_select_1:
5911 IgorA 901
		pop esi edi ecx ebx eax
5930 IgorA 902
		jmp prop_still.end
2173 IgorA 903
	@@:
5935 IgorA 904
	cmp ah,5
905
	jne @f
906
		call mnu_vertexes_on_off
907
		jmp prop_still.end
908
	@@:
909
	cmp ah,6
910
	jne @f
911
		call mnu_faces_on_off
912
		jmp prop_still.end
913
	@@:
914
	cmp ah,7
915
	jne @f
5938 IgorA 916
		call mnu_faces_fill_on_off
917
		jmp prop_still.end
918
	@@:
919
	cmp ah,8
920
	jne @f
5935 IgorA 921
		call mnu_light_on_off
922
		jmp prop_still.end
923
	@@:
5938 IgorA 924
	cmp ah,9
925
	jne @f
926
		call mnu_reset_settings
927
		jmp prop_still.end
928
	@@:
5944 IgorA 929
	cmp ah,10
930
	jne @f
931
		call mnu_vertexes_select
932
		jmp prop_still.end
933
	@@:
934
	cmp ah,11
935
	jne @f
936
		call mnu_vertexes_deselect
937
		jmp prop_still.end
938
	@@:
939
	cmp ah,12
940
	jne @f
941
		call mnu_reset_average_x
942
		jmp prop_still.end
943
	@@:
944
	cmp ah,13
945
	jne @f
946
		call mnu_reset_average_y
947
		jmp prop_still.end
948
	@@:
949
	cmp ah,14
950
	jne @f
951
		call mnu_reset_average_z
952
		jmp prop_still.end
953
	@@:
2173 IgorA 954
 
2165 IgorA 955
	cmp ah,1
5930 IgorA 956
	jne prop_still.end
2165 IgorA 957
.exit:
958
	mov dword[tree3.data_img],0 ;чистим указатели на иконки что-бы их не удалил деструктор
959
	mov dword[tree3.data_img_sys],0 ;т. к. они еще используються в других элементах
960
	stdcall dword[tl_data_clear], tree3
961
	mov byte[prop_wnd_run],0 ;обнуляем счетчик окон
962
	mcall -1 ;выход из программы
963
 
5930 IgorA 964
align 4
965
get_point_coords:
966
	;загрузка координат в editbox-ы
967
	push eax ebx
968
	stdcall [tl_node_get_data],tree3
969
	cmp eax,0
970
	je @f
971
		mov ebx,[eax]
972
		mov word[NumberSymbolsAD],8
973
		finit
974
		fld dword[ebx]
975
		fstp qword[Data_Double]
976
		call DoubleFloat_to_String
977
		stdcall [edit_box_set_text], edit1, Data_String
978
		fld dword[ebx+4]
979
		fstp qword[Data_Double]
980
		call DoubleFloat_to_String
981
		stdcall [edit_box_set_text], edit2, Data_String
982
		fld dword[ebx+8]
983
		fstp qword[Data_Double]
984
		call DoubleFloat_to_String
985
		stdcall [edit_box_set_text], edit3, Data_String
986
		stdcall [edit_box_draw], edit1
987
		stdcall [edit_box_draw], edit2
988
		stdcall [edit_box_draw], edit3
989
	@@:
990
	pop ebx eax
991
	ret
992
 
993
align 4
5935 IgorA 994
proc prop_timer_funct uses eax
995
	;просматриваем выделенную координату
996
	stdcall [tl_node_get_data],tree3
997
	cmp [cursor_last_draw],eax
998
	je @f
999
		mov [cursor_last_draw],eax
1000
		call draw_3d
1001
	@@:
1002
	ret
1003
endp
1004
 
5938 IgorA 1005
;изменяем режим рисования вершин
5935 IgorA 1006
align 4
1007
mnu_vertexes_on_off:
1008
	xor dword[draw_mode], 1 shl bit_vertexes
1009
	ret
1010
 
5938 IgorA 1011
;изменяем режим рисования граней
5935 IgorA 1012
align 4
1013
mnu_faces_on_off:
1014
	xor dword[draw_mode], 1 shl bit_faces
1015
	ret
1016
 
5938 IgorA 1017
;изменяем каркасные или сплошные грани
5935 IgorA 1018
align 4
5938 IgorA 1019
mnu_faces_fill_on_off:
1020
	xor dword[draw_mode], 1 shl bit_faces_fill
1021
	or  dword[draw_mode], 1 shl bit_faces ;включаем режим рисования граней (если вдруг был отключен)
1022
	ret
1023
 
1024
;включаем или отключаем освещение
1025
align 4
5935 IgorA 1026
mnu_light_on_off:
1027
	xor dword[draw_mode], 1 shl bit_light
1028
	ret
1029
 
1030
align 4
5938 IgorA 1031
mnu_reset_settings:
1032
	mov dword[angle_x],0.0
1033
	mov dword[angle_y],0.0
1034
	mov dword[angle_z],0.0
1035
	m2m dword[draw_mode],dword[def_dr_mode]
1036
	ret
1037
 
1038
align 4
5944 IgorA 1039
proc mnu_vertexes_select uses eax ebx
1040
	stdcall [tl_node_get_data],tree3
1041
	cmp eax,0
1042
	je .no_points
1043
	stdcall found_block_data,tree3
1044
	cmp eax,0
1045
	je .no_points
1046
		mov bx,word[eax]
1047
		cmp bx,ID_ICON_POINT_SEL
1048
		je @f
1049
			mov word[eax],ID_ICON_POINT_SEL
1050
			inc dword[obj_poi_sel_c]
1051
			jmp .change
1052
		@@:
1053
			mov word[eax],ID_ICON_POINT
1054
			dec dword[obj_poi_sel_c]
1055
		.change:
1056
			mov eax,[obj_poi_sel_c]
1057
			stdcall convert_int_to_str, txt_select_vert.count,16
1058
	.no_points:
1059
	ret
1060
endp
1061
 
1062
align 4
1063
proc mnu_vertexes_deselect uses eax
1064
	cmp dword[obj_poi_sel_c],0
1065
	je .no_points
1066
	mov dword[obj_poi_sel_c],0
1067
	stdcall [tl_node_poi_get_info], tree3,0
1068
	cmp eax,0
1069
	je .no_points
1070
	@@:
1071
		mov word[eax],ID_ICON_POINT
1072
		stdcall [tl_node_poi_get_next_info], tree3,eax
1073
		cmp eax,0
1074
		jne @b
1075
	.no_points:
1076
	ret
1077
endp
1078
 
1079
align 4
1080
proc mnu_reset_average_x uses eax ebx ecx edx edi
1081
	cmp dword[obj_poi_sel_c],2
1082
	jl .end_select
1083
		finit
1084
		fldz
1085
		mov ecx,dword[obj_poi_sel_c]
1086
		stdcall dword[tl_node_poi_get_info], tree3,0
1087
		@@:
1088
			cmp eax,0
1089
			je .end_select
1090
			mov ebx,eax
1091
			cmp word[ebx],ID_ICON_POINT_SEL
1092
			jne .next_sel0
1093
				stdcall [tl_node_poi_get_data], tree3,ebx
1094
				mov eax,[eax]
1095
				fadd dword[eax]
1096
				dec ecx
1097
				jz @f
1098
			.next_sel0:
1099
			stdcall dword[tl_node_poi_get_next_info], tree3,ebx
1100
			jmp @b
1101
		@@:
1102
		fidiv dword[obj_poi_sel_c]
1103
		fstp dword[eax]
1104
		mov edx,[eax]
1105
		mov ecx,dword[obj_poi_sel_c]
1106
		stdcall dword[tl_node_poi_get_info], tree3,0
1107
		@@:
1108
			cmp eax,0
1109
			je .end_select
1110
			mov ebx,eax
1111
			cmp word[ebx],ID_ICON_POINT_SEL
1112
			jne .next_sel1
1113
				stdcall [tl_node_poi_get_data], tree3,ebx
1114
				mov edi,eax
1115
				mov eax,[eax]
1116
				mov [eax],edx
1117
				stdcall update_tree, edi
1118
				dec ecx
1119
				jz @f
1120
			.next_sel1:
1121
			stdcall dword[tl_node_poi_get_next_info], tree3,ebx
1122
			jmp @b
1123
		@@:
1124
    .end_select:
1125
	ret
1126
endp
1127
 
1128
align 4
1129
proc mnu_reset_average_y uses eax ebx ecx edx edi
1130
	cmp dword[obj_poi_sel_c],2
1131
	jl .end_select
1132
		finit
1133
		fldz
1134
		mov ecx,dword[obj_poi_sel_c]
1135
		stdcall dword[tl_node_poi_get_info], tree3,0
1136
		@@:
1137
			cmp eax,0
1138
			je .end_select
1139
			mov ebx,eax
1140
			cmp word[ebx],ID_ICON_POINT_SEL
1141
			jne .next_sel0
1142
				stdcall [tl_node_poi_get_data], tree3,ebx
1143
				mov eax,[eax]
1144
				fadd dword[eax+4]
1145
				dec ecx
1146
				jz @f
1147
			.next_sel0:
1148
			stdcall dword[tl_node_poi_get_next_info], tree3,ebx
1149
			jmp @b
1150
		@@:
1151
		fidiv dword[obj_poi_sel_c]
1152
		fstp dword[eax+4]
1153
		mov edx,[eax+4]
1154
		mov ecx,dword[obj_poi_sel_c]
1155
		stdcall dword[tl_node_poi_get_info], tree3,0
1156
		@@:
1157
			cmp eax,0
1158
			je .end_select
1159
			mov ebx,eax
1160
			cmp word[ebx],ID_ICON_POINT_SEL
1161
			jne .next_sel1
1162
				stdcall [tl_node_poi_get_data], tree3,ebx
1163
				mov edi,eax
1164
				mov eax,[eax]
1165
				mov [eax+4],edx
1166
				stdcall update_tree, edi
1167
				dec ecx
1168
				jz @f
1169
			.next_sel1:
1170
			stdcall dword[tl_node_poi_get_next_info], tree3,ebx
1171
			jmp @b
1172
		@@:
1173
    .end_select:
1174
	ret
1175
endp
1176
 
1177
align 4
1178
proc mnu_reset_average_z uses eax ebx ecx edx edi
1179
	cmp dword[obj_poi_sel_c],2
1180
	jl .end_select
1181
		finit
1182
		fldz
1183
		mov ecx,dword[obj_poi_sel_c]
1184
		stdcall dword[tl_node_poi_get_info], tree3,0
1185
		@@:
1186
			cmp eax,0
1187
			je .end_select
1188
			mov ebx,eax
1189
			cmp word[ebx],ID_ICON_POINT_SEL
1190
			jne .next_sel0
1191
				stdcall [tl_node_poi_get_data], tree3,ebx
1192
				mov eax,[eax]
1193
				fadd dword[eax+8]
1194
				dec ecx
1195
				jz @f
1196
			.next_sel0:
1197
			stdcall dword[tl_node_poi_get_next_info], tree3,ebx
1198
			jmp @b
1199
		@@:
1200
		fidiv dword[obj_poi_sel_c]
1201
		fstp dword[eax+8]
1202
		mov edx,[eax+8]
1203
		mov ecx,dword[obj_poi_sel_c]
1204
		stdcall dword[tl_node_poi_get_info], tree3,0
1205
		@@:
1206
			cmp eax,0
1207
			je .end_select
1208
			mov ebx,eax
1209
			cmp word[ebx],ID_ICON_POINT_SEL
1210
			jne .next_sel1
1211
				stdcall [tl_node_poi_get_data], tree3,ebx
1212
				mov edi,eax
1213
				mov eax,[eax]
1214
				mov [eax+8],edx
1215
				stdcall update_tree, edi
1216
				dec ecx
1217
				jz @f
1218
			.next_sel1:
1219
			stdcall dword[tl_node_poi_get_next_info], tree3,ebx
1220
			jmp @b
1221
		@@:
1222
    .end_select:
1223
	ret
1224
endp
1225
 
1226
align 4
1227
proc update_tree h_mem:dword
1228
pushad
1229
	mov edi,[h_mem]
1230
	mov ebx,[edi]
1231
	finit
1232
 
1233
	;обновление измененного узла в списке tree3 и главного окна (по таймеру)
1234
	mov word[NumberSymbolsAD],5
1235
	mov dword[obj_point.text],0
1236
	cld
1237
	mov ecx,3
1238
	.coord:
1239
		fld dword[ebx]
1240
		fstp qword[Data_Double]
1241
		call DoubleFloat_to_String
1242
		add ebx,4
1243
		stdcall str_len, Data_String
1244
		mov esi,txt_space
1245
		add esi,eax
1246
		cmp esi,txt_space.end
1247
		jl .normal_size
1248
			mov esi,txt_space.end-1 ;минимум 1 пробел нужно добавить, что-бы цифры не слипались
1249
		.normal_size:
1250
		stdcall str_cat, obj_point.text,esi
1251
		stdcall str_cat, obj_point.text,Data_String
1252
		loop .coord
1253
	mov esi,obj_point.text
1254
	mov byte[esi],'*' ;отмечаем что вершина изменялась
1255
	mov byte[can_save],1 ;для показа кнопки 'Сохранить'
1256
	add edi,4
1257
	mov ecx,MAX_OBJECT_SIZE-4
1258
	rep movsb
1259
popad
1260
	ret
1261
endp
1262
 
1263
align 4
5938 IgorA 1264
def_dr_mode dd 0 ;режим рисования по умолчанию
1265
delt_size dd 3.0 ;изменение углов при поворотах с кливиатуры
1266
mouse_drag dd 0 ;режим поворота сцены от перемещении курсора мыши
1267
mouse_x dd 0
1268
mouse_y dd 0
1269
angle_dxm dd 1.7775 ;~ 3d_wnd_w/180 - прибавление углов поворота сцены при вращении мышей
1270
angle_dym dd 1.3335 ;~ 3d_wnd_h/180
1271
;angle_dzm dd ?
1272
draw_mode dd 0 ;режим рисования объекта
5935 IgorA 1273
obj_poi_data dd 0 ;указатель на координаты вершин
1274
obj_poi_count dd 0 ;колличество вершин
5944 IgorA 1275
obj_poi_sel_c dd 0 ;колличество выделенных вершин
5935 IgorA 1276
obj_tri_data dd 0 ;указатель на данные треугольников
1277
obj_tri_count dd 0 ;колличество треугольников
1278
cursor_last_draw dd 0 ;положение курсора при последней прорисовке 3d окна
5930 IgorA 1279
sph_radius dd 0 ;радиус сферы для выделения активной точки
1280
obj_x_max dd 0
1281
obj_x_min dd 0
1282
obj_x_centr dd 0
1283
obj_x_scale dd 1.0
1284
obj_y_max dd 0
1285
obj_y_min dd 0
1286
obj_y_centr dd 0
1287
obj_y_scale dd 1.0
1288
obj_z_max dd 0
1289
obj_z_min dd 0
1290
obj_z_centr dd 0
1291
obj_z_scale dd 1.0
1292
 
4332 IgorA 1293
capt_p dd 0
1294
 
2165 IgorA 1295
;дерево с объектами в пользовательском файле
5930 IgorA 1296
tree3 tree_list MAX_OBJECT_SIZE,3, tl_key_no_edit+tl_list_box_mode,\
5935 IgorA 1297
	16,16, 0xffffff,0xb0d0ff,0x400040, 5,290,303,140, 16, 4,0, el_focus,\
5930 IgorA 1298
	w_scr_t3,get_point_coords
2165 IgorA 1299
 
5935 IgorA 1300
edit1 edit_box 80,  76, 269, 0xffd0d0, 0xff, 0x80ff, 0, 0x8000, 34, string1, mouse_dd, 0
1301
edit2 edit_box 80, 160, 269, 0xd0d0ff, 0xff, 0x80ff, 0, 0x8000, 34, string2, mouse_dd, 0
1302
edit3 edit_box 80, 244, 269, 0xd0ffd0, 0xff, 0x80ff, 0, 0x8000, 34, string3, mouse_dd, 0
2173 IgorA 1303
editboxes_end:
1304
 
1305
string1 rb 34
1306
string2 rb 34
1307
string3 rb 34
1308
 
2165 IgorA 1309
align 4
5930 IgorA 1310
w_scr_t3 scrollbar 16, 0,0,0, 15, 100,0,0, 0,0,0, 1