Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
2748 IgorA 1
use32
2
	org 0x0
3
	db 'MENUET01' ;идентиф. исполняемого файла всегда 8 байт
4
	dd 0x1
5
	dd start
6
	dd i_end ;размер приложения
7
	dd mem
8
	dd stacktop
9
	dd 0
10
	dd sys_path
11
 
2759 IgorA 12
include '../../../../programs/macros.inc'
13
include '../../../../programs/proc32.inc'
14
include '../../../../programs/develop/libraries/box_lib/load_lib.mac'
2748 IgorA 15
include 'mem.inc'
16
include 'dll.inc'
17
include 'vox_draw.inc'
18
 
19
@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,dll.Load
2759 IgorA 20
caption db 'Voxel editor 12.06.12',0 ;подпись окна
2748 IgorA 21
 
22
struct FileInfoBlock
23
	Function dd ?
24
	Position dd ?
25
	Flags	 dd ?
26
	Count	 dd ?
27
	Buffer	 dd ?
28
		db ?
29
	FileName dd ?
30
ends
31
 
32
run_file_70 FileInfoBlock
33
image_data dd 0 ;указатель на временную память. для нужен преобразования изображения
34
 
35
fn_toolbar db 'toolbar.png',0
36
IMAGE_TOOLBAR_ICON_SIZE equ 16*16*3
37
IMAGE_TOOLBAR_SIZE equ IMAGE_TOOLBAR_ICON_SIZE*14
38
image_data_toolbar dd 0
39
 
40
max_open_file_size equ 64*1024 ;64 Kb
41
 
42
 
43
macro load_image_file path,buf,size { ;макрос для загрузки изображений
44
	;path - может быть переменной или строковым параметром
45
	if path eqtype '' ;проверяем задан ли строкой параметр path
46
		jmp @f
47
			local .path_str
48
			.path_str db path ;формируем локальную переменную
49
			db 0
50
		@@:
51
		;32 - стандартный адрес по которому должен быть буфер с системным путем
52
		copy_path .path_str,[32],file_name,0x0
53
	else
54
		copy_path path,[32],file_name,0x0 ;формируем полный путь к файлу изображения, подразумеваем что он в одной папке с программой
55
	end if
56
 
57
	stdcall mem.Alloc, dword size ;выделяем память для изображения
58
	mov [buf],eax
59
 
60
	mov eax,70 ;70-я функция работа с файлами
61
	mov [run_file_70.Function], 0
62
	mov [run_file_70.Position], 0
63
	mov [run_file_70.Flags], 0
64
	mov [run_file_70.Count], dword size
65
	m2m [run_file_70.Buffer], [buf]
66
	mov byte[run_file_70+20], 0
67
	mov [run_file_70.FileName], file_name
68
	mov ebx,run_file_70
69
	int 0x40 ;загружаем файл изображения
70
	cmp ebx,0xffffffff
71
	je @f
72
		;определяем вид изображения и переводим его во временный буфер image_data
73
		stdcall dword[img_decode], dword[buf],ebx,0
74
		mov dword[image_data],eax
75
		;преобразуем изображение к формату rgb
76
		stdcall dword[img_to_rgb2], dword[image_data],dword[buf]
77
		;удаляем временный буфер image_data
78
		stdcall dword[img_destroy], dword[image_data]
79
	@@:
80
}
81
 
82
OT_MAP_X  equ  0
83
OT_MAP_Y  equ  0
2758 IgorA 84
TILE_SIZE equ 10 ;размер квадратика на плоскости с сечением
85
OT_CAPT_X_COLOR equ  5 ;отступ для подписи цвета
86
OT_CAPT_Y_COLOR equ 30
2748 IgorA 87
 
88
align 4
89
start:
90
	load_libraries l_libs_start,l_libs_end
91
	;проверка на сколько удачно загузилась библиотека
92
	mov	ebp,lib_2
93
	cmp	dword [ebp+ll_struc_size-4],0
94
	jz	@f
95
		mcall -1 ;exit not correct
96
	@@:
97
	mcall 48,3,sc,sizeof.system_colors
98
	mcall 40,0x27
99
	stdcall [OpenDialog_Init],OpenDialog_data ;подготовка диалога
100
 
101
	stdcall [buf2d_create], buf_0 ;создание буфера изображения
102
	stdcall [buf2d_create], buf_0z ;создание буфера глубины
103
	stdcall [buf2d_create], buf_pl ;создание буфера для сечения
104
 
105
	stdcall [buf2d_vox_brush_create], buf_vox, vox_6_7_z
106
 
107
	load_image_file fn_toolbar, image_data_toolbar,IMAGE_TOOLBAR_SIZE
108
 
109
	stdcall mem.Alloc,max_open_file_size
110
	mov dword[open_file_vox],eax
111
 
112
	call but_new_file
113
 
114
align 4
115
red_win:
116
	call draw_window
117
 
118
align 4
119
still:
120
	mcall 10
121
 
122
	cmp al,1
123
	jz red_win
124
	cmp al,2
125
	jz key
126
	cmp al,3
127
	jz button
128
	cmp al,6
129
	jne @f
130
		mcall 9,procinfo,-1
131
		cmp ax,word[procinfo+4]
132
		jne @f ;окно не активно
133
		call mouse
134
	@@:
135
	jmp still
136
 
137
align 4
138
mouse:
139
	pushad
140
	mcall 37,2
2758 IgorA 141
	bt eax,1 ;right button
142
	jnc @f
143
		mcall 37,1 ;get mouse coords
144
		mov ebx,eax
145
		shr ebx,16
146
		and eax,0xffff
147
		stdcall get_buf_color, buf_0
148
		stdcall get_buf_color, buf_pl
149
		jmp .end_f
150
	@@:
2748 IgorA 151
	bt eax,0 ;left button
152
	jnc .end_f
153
		mcall 37,1 ;get mouse coords
154
		mov ebx,eax
2758 IgorA 155
		shr ebx,16
2748 IgorA 156
		and eax,0xffff
157
 
158
		cmp dword[v_pen_mode],2 ;select color
159
		jne .end_2
160
			stdcall get_buf_color, buf_0
161
			stdcall get_buf_color, buf_pl
162
			jmp .end_f
163
		.end_2:
164
 
2758 IgorA 165
 
166
		push eax ebx
167
		mov edx,[v_zoom]
168
		cmp edx,[scaled_zoom]
169
		jle @f
170
		;режим масштабирования изображения
171
		sub edx,[scaled_zoom]
172
		sub ax,word[buf_0.t]
173
		sub bx,word[buf_0.l]
174
		stdcall get_mouse_ev_scale, buf_vox, ebx, eax, [scaled_zoom],edx
175
		cmp eax,0
176
		je @f
177
			mov ebx,eax
178
			and eax,0x3fffffff
179
			rol ebx,2
180
			and ebx,3
181
			dec ebx
182
 
183
			shl ebx,2
184
			add ebx,cam_x
185
			mov dword[ebx],eax ;change [cam_x] or [cam_y] or [cam_z]
186
			call draw_objects
187
 
188
			pop ebx eax
189
			jmp .end_f
190
		@@:
191
		pop ebx eax
192
 
193
 
194
		;eax - mouse coord y
195
		;ebx - mouse coord x
2748 IgorA 196
		movzx edx,word[buf_pl.t]
197
		add edx,OT_MAP_Y
198
		cmp eax,edx
199
		jl .end_f
200
			sub eax,edx
201
			xor edx,edx
202
			mov ecx,TILE_SIZE ;H
203
			div ecx
204
		movzx edx,word[buf_pl.l]
205
		add edx,OT_MAP_X
206
		cmp ebx,edx
207
		jl .end_f
208
			call convert_y ;преобразование координаты y
209
			cmp eax,0
210
			jge .end_0 ;ограничение по нижней координате y
211
				cmp eax,-1
212
				jne .end_f
213
				;меняем сечение, попали на квадратик
214
				sub ebx,edx
215
				mov eax,ebx
216
				xor edx,edx
217
				mov ecx,TILE_SIZE ;W
218
				div ecx
219
				mov [n_plane],eax
220
				jmp .end_1
221
			.end_0:
222
			mov [v_cur_y],eax ;Y-coord
223
			sub ebx,edx
224
			mov eax,ebx
225
			xor edx,edx
226
			mov ecx,TILE_SIZE ;W
227
			div ecx
228
			mov [v_cur_x],eax ;X-coord
229
 
230
			cmp dword[v_pen_mode],0
2758 IgorA 231
			jl .end_1
2748 IgorA 232
			cmp dword[v_pen_mode],1
2758 IgorA 233
			jg .end_1
234
				mov eax,[v_cur_x]
235
				mov ebx,[n_plane]
236
				mov edx,[v_cur_y]
237
 
238
				mov ecx,[v_zoom]
239
				cmp ecx,[scaled_zoom]
240
				jle .no_c_coord_0
241
					;преобразование координат, с учетом увеличения
242
					;sub ecx,[scaled_zoom] ;в ecx прирост масштаба (ecx>0)
243
					mov ecx,[scaled_zoom]
244
 
245
					mov edi,[cam_x]
246
					shl edi,cl
247
					add eax,edi
248
					mov edi,[cam_y]
249
					shl edi,cl
250
					add ebx,edi
251
					mov edi,[cam_z]
252
					shl edi,cl
253
					add edx,edi
254
				.no_c_coord_0:
255
 
256
				;отличающийся параметр для функции создания вокселя
257
				cmp dword[v_pen_mode],1
258
				jne @f
259
					push dword[v_color]
260
				@@:
261
 
262
				;вызов общих параметров для функций
263
				push dword[v_zoom]
264
				push edx
265
				push ebx
266
				push eax
267
				push dword[open_file_vox]
268
 
269
				;вызов функций
270
				cmp dword[v_pen_mode],1
271
				jne @f
272
					call buf2d_vox_obj_create_node
273
					;stdcall buf2d_vox_obj_create_node, [open_file_vox], eax,ebx,edx, [v_zoom], [v_color]
274
					jmp .end_1
275
				@@:
276
					call buf2d_vox_obj_delete_node
277
					;stdcall buf2d_vox_obj_delete_node, [open_file_vox], eax,ebx,edx, [v_zoom]
278
 
2748 IgorA 279
			.end_1:
280
			call draw_objects
281
			call draw_pok
282
	.end_f:
283
	popad
284
	ret
285
 
2758 IgorA 286
;input:
287
; eax - coord y
288
; ebx - coord x
2748 IgorA 289
align 4
2758 IgorA 290
proc get_buf_color, buf:dword
291
pushad
2748 IgorA 292
	mov edi,[buf]
293
	cmp ax,buf2d_t
294
	jl .end_f
295
	sub ax,buf2d_t
296
	cmp eax,buf2d_h
297
	jg .end_f
298
	cmp bx,buf2d_l
299
	jl .end_f
300
	sub bx,buf2d_l
301
	cmp ebx,buf2d_w
302
	jg .end_f
303
		stdcall [buf2d_get_pixel], edi,ebx,eax
304
		mov [v_color],eax
2759 IgorA 305
		call on_change_color ;отображаем изменения цвета
2748 IgorA 306
	.end_f:
2758 IgorA 307
popad
2748 IgorA 308
	ret
309
endp
310
 
311
;преобразовываем координату y (значение должно увеличиваться с низу вверх)
312
align 4
313
convert_y:
314
	push ecx edx
315
	mov ecx,[v_zoom]
2758 IgorA 316
	cmp ecx,[scaled_zoom]
317
	jle @f
318
		mov ecx,[scaled_zoom]
319
	@@:
2748 IgorA 320
	mov edx,1
321
	cmp ecx,1
2758 IgorA 322
	jl @f
323
		shl edx,cl
2748 IgorA 324
	@@:
325
	sub edx,eax
326
	dec edx
327
	mov eax,edx
328
	pop edx ecx
329
	ret
330
 
331
align 4
332
draw_window:
333
pushad
334
	mcall 12,1
335
 
336
	; *** рисование главного окна (выполняется 1 раз при запуске) ***
337
	xor eax,eax
2758 IgorA 338
	mov ebx,(20 shl 16)+550
2748 IgorA 339
	mov ecx,(20 shl 16)+415
340
	mov edx,[sc.work]
341
	or  edx,(3 shl 24)+0x30000000
342
	mov edi,caption
343
	int 0x40
344
 
345
	; *** создание кнопок на панель ***
346
	mov eax,8
347
	mov ebx,(5 shl 16)+20
348
	mov ecx,(5 shl 16)+20
349
	mov edx,3
350
	mov esi,[sc.work_button]
351
	int 0x40
352
 
353
	mov ebx,(30 shl 16)+20
354
	mov edx,4
355
	int 0x40
356
	add ebx,25 shl 16
357
	mov edx,5
358
	int 0x40
359
	add ebx,30 shl 16
360
	mov edx,6
361
	int 0x40
362
	add ebx,25 shl 16
363
	mov edx,7
364
	int 0x40
365
	add ebx,25 shl 16
366
	mov edx,8
367
	int 0x40
368
	add ebx,25 shl 16
369
	mov edx,9
370
	int 0x40
371
	add ebx,25 shl 16
372
	mov edx,10
373
	int 0x40
374
	add ebx,25 shl 16
375
	mov edx,11
376
	int 0x40
377
	add ebx,25 shl 16
378
	mov edx,12
379
	int 0x40
380
	add ebx,25 shl 16
381
	mov edx,13
382
	int 0x40
383
	add ebx,25 shl 16
384
	mov edx,14
385
	int 0x40
386
	add ebx,25 shl 16
387
	mov edx,15
388
	int 0x40
389
	add ebx,25 shl 16
390
	mov edx,16
391
	int 0x40
392
 
393
	; *** рисование иконок на кнопках ***
394
	mov eax,7
395
	mov ebx,[image_data_toolbar]
396
	mov ecx,(16 shl 16)+16
397
	mov edx,(7 shl 16)+7 ;icon new
398
	int 0x40
399
 
400
	add ebx,IMAGE_TOOLBAR_ICON_SIZE
401
	add edx,(25 shl 16) ;icon open
402
	int 0x40
403
	add ebx,IMAGE_TOOLBAR_ICON_SIZE
404
	add edx,(25 shl 16) ;icon save
405
	int 0x40
406
 
407
	add ebx,IMAGE_TOOLBAR_ICON_SIZE
408
	add edx,(30 shl 16) ;
409
	int 0x40
410
	add ebx,IMAGE_TOOLBAR_ICON_SIZE
411
	add edx,(25 shl 16) ;
412
	int 0x40
413
	add ebx,IMAGE_TOOLBAR_ICON_SIZE
414
	add edx,(25 shl 16) ;
415
	int 0x40
416
	add ebx,IMAGE_TOOLBAR_ICON_SIZE
417
	add edx,(25 shl 16) ;
418
	int 0x40
419
	add ebx,IMAGE_TOOLBAR_ICON_SIZE
420
	add edx,(25 shl 16) ;
421
	int 0x40
422
	add ebx,IMAGE_TOOLBAR_ICON_SIZE
423
	add edx,(25 shl 16) ;
424
	int 0x40
425
	add ebx,IMAGE_TOOLBAR_ICON_SIZE
426
	add edx,(25 shl 16) ;
427
	int 0x40
428
	add ebx,IMAGE_TOOLBAR_ICON_SIZE
429
	add edx,(25 shl 16) ;
430
	int 0x40
431
	add ebx,IMAGE_TOOLBAR_ICON_SIZE
432
	add edx,(25 shl 16) ;
433
	int 0x40
434
	add ebx,IMAGE_TOOLBAR_ICON_SIZE
435
	add edx,(25 shl 16) ;
436
	int 0x40
437
	add ebx,IMAGE_TOOLBAR_ICON_SIZE
438
	add edx,(25 shl 16) ;
439
	int 0x40
440
 
441
	; *** рисование буферов ***
442
	call draw_objects
443
	call draw_pok
444
 
445
	mcall 12,2
446
popad
447
	ret
448
 
449
align 4
450
draw_pok:
451
	mov eax,4 ;рисование текста
452
	mov ebx,(365 shl 16)+5
453
	mov ecx,[sc.work_text]
454
	or  ecx,0x80000000 ;or (1 shl 30)
455
	mov edx,txt_zoom
456
	;mov edi,[sc.work]
457
	int 0x40
458
	add bx,9
459
	mov edx,txt_cur_x
460
	int 0x40
461
	add bx,9
462
	mov edx,txt_cur_y
463
	int 0x40
464
	add bx,9
465
	mov edx,txt_n_plane
466
	int 0x40
467
 
468
	mov eax,47
469
	mov ecx,[v_zoom]
2759 IgorA 470
	mov ebx,(3 shl 16)+(1 shl 31)
2748 IgorA 471
	mov edx,((365+6*9) shl 16)+5
472
	mov esi,[sc.work_button_text]
473
	or  esi,(1 shl 30)
474
	mov edi,[sc.work_button]
475
	int 0x40 ;масштаб
476
	mov ecx,[v_cur_x]
477
	add edx,(6*2)*65536+9
478
	int 0x40 ;
479
	mov ecx,[v_cur_y]
480
	add edx,(6*0)*65536+9
481
	int 0x40 ;
482
	mov ecx,[n_plane]
483
	add edx,(6*0)*65536+9
2759 IgorA 484
	int 0x40 ;номер сечения
2748 IgorA 485
 
2758 IgorA 486
	mov eax,4 ;рисование текста
487
	mov ebx,(OT_CAPT_X_COLOR shl 16)+OT_CAPT_Y_COLOR+2
488
	mov ecx,[sc.work_text]
489
	or  ecx,0x80000000 ;or (1 shl 30)
490
	mov edx,txt_color
491
	int 0x40
492
 
2759 IgorA 493
	call on_change_color
494
	ret
495
 
496
align 4
497
on_change_color:
498
pushad
2758 IgorA 499
	mov ebx,((OT_CAPT_X_COLOR+35) shl 16)+16 ;по оси x
500
	mov ecx,(OT_CAPT_Y_COLOR shl 16)+12 ;по оси y
501
	mov edx,[v_color]
502
	mcall 13
2759 IgorA 503
 
504
	mov ebx,(1 shl 8)+(6 shl 16)
505
	mov ecx,edx
506
	mov edx,((OT_CAPT_X_COLOR+55) shl 16)+OT_CAPT_Y_COLOR+2
507
	mov esi,[sc.work_text]
508
	add esi,(1 shl 30)
509
	mov edi,[sc.work]
510
	mcall 47
511
popad
2748 IgorA 512
	ret
513
 
514
align 4
515
key:
516
	mcall 2
517
	jmp still
518
 
519
 
520
align 4
521
button:
522
	mcall 17
523
	cmp ah,3
524
	jne @f
525
		call but_new_file
526
		call draw_objects
527
		call draw_pok
528
	@@:
529
	cmp ah,4
530
	jne @f
531
		call but_open_file
532
	@@:
533
	cmp ah,5
534
	jne @f
535
		call but_save_file
536
	@@:
537
	cmp ah,6
538
	jne @f
2759 IgorA 539
		call but_zoom_p
2748 IgorA 540
	@@:
541
	cmp ah,7
542
	jne @f
2759 IgorA 543
		call but_zoom_m
2748 IgorA 544
	@@:
545
	cmp ah,8
546
	jne @f
547
		call but_3
548
	@@:
549
	cmp ah,9
550
	jne @f
551
		call but_4
552
	@@:
553
	cmp ah,10
554
	jne @f
555
		call but_5
556
	@@:
557
	cmp ah,11
558
	jne @f
559
		call but_6
560
	@@:
561
	cmp ah,12
562
	jne @f
563
		call but_7
564
	@@:
565
	cmp ah,13
566
	jne @f
567
		call but_8
568
	@@:
569
	cmp ah,14
570
	jne @f
571
		mov dword[v_pen_mode],2 ;select color
572
		call draw_palete
573
	@@:
574
	cmp ah,15
575
	jne @f
576
		call but_light
577
	@@:
578
	cmp ah,16
579
	jne @f
580
		call but_rend_2_2
581
	@@:
582
	cmp ah,1
583
	jne still
584
.exit:
585
	stdcall [buf2d_delete],buf_0
586
	stdcall [buf2d_delete],buf_0z
587
	cmp dword[buf_r_img],0
588
	je @f
589
		stdcall [buf2d_delete],buf_r_img
590
		stdcall [buf2d_delete],buf_r_z
591
	@@:
592
	stdcall [buf2d_vox_brush_delete], buf_vox
593
	stdcall mem.Free,[image_data_toolbar]
594
	stdcall mem.Free,[open_file_vox]
595
	mcall -1
596
 
597
align 4
598
vox_new_data:
599
	db 2,0,0,0
600
	db 000b,001b,010b,011b, 100b,101b,110b,111b ;default table
601
	dd 0 ;null node
602
 
603
align 4
604
proc but_new_file uses ecx edi esi
605
	mov ecx,vox_offs_data+4
606
	mov esi,vox_new_data
607
	mov edi,[open_file_vox]
608
	cld
609
	rep movsb
610
	ret
611
endp
612
 
613
align 4
614
open_file_vox dd 0 ;указатель на область для открытия файлов
615
 
616
align 4
617
but_open_file:
618
	pushad
619
	copy_path open_dialog_name,communication_area_default_path,file_name,0
620
	mov [OpenDialog_data.type],0
621
	stdcall [OpenDialog_Start],OpenDialog_data
622
	cmp [OpenDialog_data.status],2
623
	je .end_open_file
624
	;код при удачном открытии диалога
625
 
626
	mov eax,70 ;70-я функция работа с файлами
627
	mov [run_file_70.Function], 0
628
	mov [run_file_70.Position], 0
629
	mov [run_file_70.Flags], 0
630
	mov dword[run_file_70.Count], max_open_file_size
631
	m2m [run_file_70.Buffer], [open_file_vox]
632
	mov byte[run_file_70+20], 0
633
	mov dword[run_file_70.FileName], openfile_path
634
	mov ebx,run_file_70
635
	int 0x40 ;загружаем файл изображения
636
	cmp ebx,0xffffffff
637
	je .end_open_file
638
 
639
	add ebx,[open_file_vox]
640
	mov byte[ebx],0 ;на случай если ранее был открыт файл большего размера чистим конец буфера с файлом
641
	mcall 71,1,openfile_path
642
 
643
	;---
644
	;
645
	mov eax,[open_file_vox]
646
	movzx eax,byte[eax]
647
	and eax,0xff ;берем масштаб по умолчанию
648
	mov dword[v_zoom],eax ;берем масштаб по умолчанию
2759 IgorA 649
	mov dword[cam_x],0
650
	mov dword[cam_y],0
651
	mov dword[cam_z],0
2748 IgorA 652
	call draw_objects
653
	.end_open_file:
654
	popad
655
	ret
656
 
657
align 4
658
but_save_file:
659
	pushad
660
		copy_path open_dialog_name,communication_area_default_path,file_name,0
661
		mov [OpenDialog_data.type],1
662
		stdcall [OpenDialog_Start],OpenDialog_data
663
		cmp [OpenDialog_data.status],2
664
		je .end_save_file
665
		;код при удачном открытии диалога
666
 
667
		mov eax,dword[v_zoom] ;задаем масштаб по умолчанию
668
		mov ebx,[open_file_vox]
669
		mov byte[ebx],al
670
 
671
		stdcall buf2d_vox_obj_get_size, ebx
672
		mov dword[run_file_70.Count], eax ;размер файла
673
		mov eax,70 ;70-я функция работа с файлами
674
		mov [run_file_70.Function], 2
675
		mov [run_file_70.Position], 0
676
		mov [run_file_70.Flags], 0
677
		mov ebx, dword[open_file_vox]
678
		mov [run_file_70.Buffer], ebx
679
		mov byte[run_file_70+20], 0
680
		mov dword[run_file_70.FileName], openfile_path
681
		mov ebx,run_file_70
682
		int 0x40 ;загружаем файл изображения
683
		cmp ebx,0xffffffff
684
		je .end_save_file
685
 
686
		.end_save_file:
687
	popad
688
	ret
689
 
2758 IgorA 690
;увеличение масштаба
2748 IgorA 691
align 4
2759 IgorA 692
but_zoom_p:
2758 IgorA 693
	cmp dword[v_zoom],10 ;максимальный размер, до которого можно увеличить 2^10=1024
2748 IgorA 694
	jge @f
695
		inc dword[v_zoom]
696
		shl dword[n_plane],1
2758 IgorA 697
		push eax
698
		mov eax,[v_zoom]
699
		cmp eax,[scaled_zoom]
700
		jl .end_0
2759 IgorA 701
			push ecx
702
			mov ecx,[scaled_zoom]
703
			xor eax,eax
704
			inc eax
705
			shl eax,cl
2758 IgorA 706
			shl dword[cam_x],1
707
			shl dword[cam_y],1
708
			shl dword[cam_z],1
2759 IgorA 709
			cmp eax,[n_plane]
710
			jg .end_1
711
				;коректировка ползунка
712
				sub [n_plane],eax
713
				inc dword[cam_y]
714
			.end_1:
715
			pop ecx
2758 IgorA 716
		.end_0:
717
		pop eax
2748 IgorA 718
		call draw_objects
719
		call draw_pok
720
	@@:
721
	ret
722
 
2758 IgorA 723
;уменьшение масштаба
2748 IgorA 724
align 4
2759 IgorA 725
but_zoom_m:
726
	cmp dword[v_zoom],1
2748 IgorA 727
	jl @f
728
		dec dword[v_zoom]
729
		shr dword[n_plane],1
2758 IgorA 730
		push eax
731
		mov eax,[v_zoom]
732
		cmp eax,[scaled_zoom]
733
		jl .end_0
734
			shr dword[cam_x],1
735
			shr dword[cam_y],1
2759 IgorA 736
			jnc .end_1
737
				;коректировка ползунка
738
				push ecx
739
				mov ecx,[scaled_zoom]
740
				dec ecx
741
				xor eax,eax
742
				inc eax
743
				shl eax,cl
744
				add [n_plane],eax
745
				pop ecx
746
			.end_1:
2758 IgorA 747
			shr dword[cam_z],1
748
		.end_0:
749
		pop eax
2748 IgorA 750
		call draw_objects
751
		call draw_pok
752
	@@:
753
	ret
754
 
755
align 4
756
but_3:
757
	stdcall vox_obj_rot_z, [open_file_vox]
758
	call draw_objects
759
	ret
760
 
761
align 4
762
but_4:
763
	stdcall vox_obj_rot_x, [open_file_vox]
764
	call draw_objects
765
	ret
766
 
2759 IgorA 767
;сдвигаем плоскость среза
2748 IgorA 768
align 4
769
but_5:
2759 IgorA 770
push eax ecx
2748 IgorA 771
	inc dword[n_plane]
2759 IgorA 772
	mov eax,[v_zoom]
773
	cmp eax,[scaled_zoom]
774
	jle .end_0
775
		;происходит масштабирование
776
		mov ecx,[scaled_zoom]
777
		xor eax,eax
778
		inc eax
779
		shl eax,cl
780
		cmp eax,[n_plane]
781
		jg @f
782
			mov dword[n_plane],0
783
			inc dword[cam_y] ;переходим в соседний куб
784
			neg ecx
785
			;inc ecx
786
			add ecx,[v_zoom]
787
			xor eax,eax
788
			inc eax
789
			shl eax,cl
790
			cmp eax,[cam_y]
791
			jg @f
792
				mov dword[cam_y],0 ;зацикливаем если вылезли за пределы последнего куба
793
		@@:
794
		jmp .end_1
795
	.end_0:
796
		;масштабирование не происходит
797
		mov ecx,eax
798
		xor eax,eax
799
		inc eax
800
		shl eax,cl
801
		cmp eax,[n_plane]
802
		jg .end_1
803
			mov dword[n_plane],0
804
	.end_1:
2748 IgorA 805
	call draw_objects
806
	call draw_pok
2759 IgorA 807
pop ecx eax
2748 IgorA 808
	ret
809
 
2759 IgorA 810
;сдвигаем плоскость среза
2748 IgorA 811
align 4
812
but_6:
2759 IgorA 813
	dec dword[n_plane]
2748 IgorA 814
	cmp dword[n_plane],0
2759 IgorA 815
	jge .end_f
816
push eax ecx
817
	mov ecx,[scaled_zoom]
818
	xor eax,eax
819
	inc eax
820
	shl eax,cl
821
	dec eax
822
	mov dword[n_plane],eax
823
 
824
	mov eax,[v_zoom]
825
	cmp eax,[scaled_zoom]
826
	jle .end_0
827
		;происходит масштабирование
828
		dec dword[cam_y] ;переходим в соседний куб
829
		cmp dword[cam_y],0
830
		jge .end_0
831
 
832
		mov ecx,eax
833
		sub ecx,[scaled_zoom]
834
		xor eax,eax
835
		inc eax
836
		shl eax,cl
837
		dec eax
838
		mov dword[cam_y],eax ;если номер куба оказался меньше 0 исправляем на максимальное значение
839
	.end_0:
840
pop ecx eax
841
	.end_f:
842
	call draw_objects
843
	call draw_pok
2748 IgorA 844
	ret
845
 
846
align 4
847
but_7:
848
	push eax
849
	mov eax,dword[v_pen_mode]
850
	mov dword[v_pen_mode],1 ;draw
851
	cmp eax,2
852
	jne @f
853
		call draw_objects
854
	@@:
855
	pop eax
856
	ret
857
 
858
align 4
859
but_8:
860
	push eax
861
	mov eax,dword[v_pen_mode]
862
	mov dword[v_pen_mode],0 ;clear
863
	cmp eax,2
864
	jne @f
865
		call draw_objects
866
	@@:
867
	pop eax
868
	ret
869
 
870
align 4
871
but_light:
872
	xor dword[mode_light],1
873
	call draw_objects
874
	ret
875
 
876
align 4
877
but_rend_2_2:
878
push edi
879
	cmp dword[buf_r_img],0
880
	jne @f
881
		;создание буфера для рендера
882
		push ecx esi
883
		mov edi,buf_r_img
884
		mov esi,buf_0
885
		mov ecx,BUF_STRUCT_SIZE
886
		cld
887
		rep movsb ;копируем все параметры с основного буфера
888
		mov edi,buf_r_img
889
		mov buf2d_data,0
890
		shl buf2d_w,1 ;увеличиваем размер буфера
891
		shl buf2d_h,1
892
		stdcall [buf2d_create],buf_r_img
893
 
894
		mov edi,buf_r_z
895
		mov esi,buf_0z
896
		mov ecx,BUF_STRUCT_SIZE
897
		cld
898
		rep movsb ;копируем все параметры с основного буфера
899
		mov edi,buf_r_z
900
		mov buf2d_data,0
901
		shl buf2d_w,1 ;увеличиваем размер буфера
902
		shl buf2d_h,1
903
		stdcall [buf2d_create],buf_r_z
904
		pop esi ecx
905
	@@:
906
	stdcall [buf2d_clear], buf_r_img, [buf_0.color] ;чистим буфер
907
	stdcall [buf2d_clear], buf_r_z, 0 ;чистим буфер
908
 
909
	push eax ebx ecx
910
		mov eax,[v_zoom]
2758 IgorA 911
		cmp eax,[scaled_zoom]
912
		jle .end_scaled
913
			;рендер увеличенной части объекта
914
			mov ebx,[scaled_zoom]
915
			sub eax,ebx
916
			inc ebx
917
			stdcall [buf2d_vox_obj_draw_3g_scaled], buf_r_img, buf_r_z, buf_vox, [open_file_vox], 0,0, 0, ebx, [cam_x],[cam_y],[cam_z],eax, 0xd080d0
918
			bt dword[mode_light],0
919
			jnc @f
920
				stdcall [buf2d_vox_obj_draw_3g_shadows], buf_r_img, buf_r_z, buf_vox, 0,0, 0, ebx, 3
921
			@@:
922
			xor ebx,ebx
923
			xor ecx,ecx
924
			mov edi,buf_r_img
925
			stdcall [buf2d_img_hdiv2], edi
926
			shr buf2d_h,1
927
			stdcall [buf2d_img_wdiv2], edi
928
			shr buf2d_w,1
929
			jmp .show
930
		.end_scaled:
931
 
2748 IgorA 932
		inc eax
2758 IgorA 933
		stdcall [buf2d_vox_obj_draw_3g], buf_r_img, buf_r_z, buf_vox, [open_file_vox], 0,0, 0, eax
2748 IgorA 934
		bt dword[mode_light],0
935
		jnc @f
2758 IgorA 936
			stdcall [buf2d_vox_obj_draw_3g_shadows], buf_r_img, buf_r_z, buf_vox, 0,0, 0, eax, 3
2748 IgorA 937
		@@:
938
 
939
		mov edi,buf_r_img
940
		stdcall [buf2d_img_hdiv2], edi
941
		shr buf2d_h,1
942
		stdcall [buf2d_img_wdiv2], edi
943
		shr buf2d_w,1
944
 
2758 IgorA 945
		stdcall [buf2d_vox_obj_get_img_w_3g], buf_vox,[v_zoom]
2748 IgorA 946
		mov ebx,[buf_0.w]
947
		sub ebx,eax
948
		shr ebx,1 ;ebx - для центровки маленьких изображений по горизонтали
2758 IgorA 949
		stdcall [buf2d_vox_obj_get_img_h_3g], buf_vox,[v_zoom]
2748 IgorA 950
		cmp eax,[buf_0.h]
951
		jg @f
952
			mov ecx,[buf_0.h]
953
			sub ecx,eax
2758 IgorA 954
			shr ecx,1 ;ecx - для центровки маленьких изображений по вертикали
955
		@@:
956
		.show:
2748 IgorA 957
		stdcall [buf2d_bit_blt], buf_0, ebx,ecx, edi
958
		shl buf2d_h,1
959
		shl buf2d_w,1
960
	pop ecx ebx eax
961
pop edi
962
	stdcall [buf2d_draw], buf_0 ;обновляем буфер на экране
963
	ret
964
 
965
align 4
966
draw_palete:
967
	stdcall [buf2d_clear], buf_0, [buf_0.color] ;чистим буфер
2758 IgorA 968
	stdcall buf2d_draw_palete, buf_0, 5,3, 9,6, 18, 512
2748 IgorA 969
	stdcall [buf2d_draw], buf_0 ;обновляем буфер на экране
970
	ret
971
 
2758 IgorA 972
v_zoom dd 3 ;текущий масштаб
2748 IgorA 973
v_cur_x dd 0 ;координата курсора x
974
v_cur_y dd 0 ;координата курсора y (но ось в объекте z)
975
n_plane dd 0 ;плоскость сечения
976
v_color dd 0xff ;цвет карандаша
977
v_pen_mode dd 1 ;режим: 0-стирания, 1-рисования
978
mode_light dd 1 ;режим освещения
2758 IgorA 979
cam_x dd 0
980
cam_y dd 0
981
cam_z dd 0
982
scaled_zoom dd 5 ;масштаб после которого начинается рисование части изображения
2748 IgorA 983
 
984
txt_zoom db 'Масштаб:',0
985
txt_cur_x db 'x:',0
986
txt_cur_y db 'y:',0
987
txt_n_plane db 'Сечение:',0
2758 IgorA 988
txt_color db 'Цвет:',0
2748 IgorA 989
 
990
align 4
991
draw_objects:
992
	stdcall [buf2d_clear], buf_0, [buf_0.color] ;чистим буфер
993
	stdcall [buf2d_clear], buf_0z, 0 ;чистим буфер
994
	stdcall [buf2d_clear], buf_pl, [buf_pl.color] ;чистим буфер
995
 
996
	cmp dword[v_pen_mode],2
997
	jne @f
998
		call draw_palete
999
		jmp .end_f
1000
	@@:
2758 IgorA 1001
	push eax ebx ecx
1002
	stdcall [buf2d_vox_obj_get_img_w_3g], buf_vox,[v_zoom]
1003
	mov ebx,[buf_0.w]
1004
	sub ebx,eax
1005
	shr ebx,1 ;ebx - для центровки маленьких изображений по горизонтали
2748 IgorA 1006
 
2758 IgorA 1007
	xor ecx,ecx
1008
	stdcall [buf2d_vox_obj_get_img_h_3g], buf_vox,[v_zoom]
1009
	cmp eax,[buf_0.h]
1010
	jg @f
1011
		mov ecx,[buf_0.h]
1012
		sub ecx,eax
1013
		shr ecx,1 ;ecx - для центровки маленьких изображений по
1014
	@@:
2748 IgorA 1015
 
2758 IgorA 1016
	mov eax,[v_zoom]
1017
	cmp eax,[scaled_zoom]
1018
	jg @f
1019
		;обычный режим изображения
2759 IgorA 1020
		stdcall [buf2d_vox_obj_draw_3g], buf_0, buf_0z, buf_vox,\
1021
			[open_file_vox], ebx,ecx, 0, eax
1022
		stdcall [buf2d_vox_obj_draw_pl], buf_pl, [open_file_vox],\
1023
			OT_MAP_X,OT_MAP_Y,TILE_SIZE, [v_zoom], [n_plane], [sc.work_graph]
2748 IgorA 1024
		bt dword[mode_light],0
2758 IgorA 1025
		jnc .end_1
1026
			stdcall [buf2d_vox_obj_draw_3g_shadows], buf_0, buf_0z, buf_vox, ebx,ecx, 0, eax, 3
1027
		.end_1:
1028
		jmp .end_0
1029
	@@:
1030
		;режим масштабирования изображения
1031
		sub eax,[scaled_zoom]
1032
		stdcall [buf2d_vox_obj_draw_3g_scaled], buf_0, buf_0z, buf_vox,\
1033
			[open_file_vox], 0,0, 0, [scaled_zoom], [cam_x],[cam_y],[cam_z],eax, [sc.work_graph] ;scroll -> 2^eax
1034
		stdcall [buf2d_vox_obj_draw_pl_scaled], buf_pl, [open_file_vox],\
1035
			OT_MAP_X,OT_MAP_Y,TILE_SIZE, [scaled_zoom], [n_plane], [sc.work_graph],[cam_x],[cam_y],[cam_z],eax
1036
		bt dword[mode_light],0
1037
		jnc .end_2
1038
			stdcall [buf2d_vox_obj_draw_3g_shadows], buf_0, buf_0z, buf_vox, 0,0, 0, [scaled_zoom], 3
1039
		.end_2:
2748 IgorA 1040
	.end_0:
1041
 
2758 IgorA 1042
	pop ecx ebx eax
2748 IgorA 1043
 
1044
	stdcall [buf2d_draw], buf_0 ;обновляем буфер на экране
1045
	stdcall [buf2d_draw], buf_pl ;обновляем буфер на экране
1046
	.end_f:
1047
	ret
1048
 
1049
if 0
1050
;input:
1051
; buf - указатель на строку, число должно быть в 10 или 16 ричном виде
1052
;output:
1053
; eax - число
1054
align 4
1055
proc conv_str_to_int, buf:dword
1056
	xor eax,eax
1057
	push ebx ecx esi
1058
	xor ebx,ebx
1059
	mov esi,[buf]
1060
	;определение отрицательных чисел
1061
	xor ecx,ecx
1062
	inc ecx
1063
	cmp byte[esi],'-'
1064
	jne @f
1065
		dec ecx
1066
		inc esi
1067
	@@:
1068
 
1069
	cmp word[esi],'0x'
1070
	je .load_digit_16
1071
 
1072
	.load_digit_10: ;считывание 10-тичных цифр
1073
		mov bl,byte[esi]
1074
		cmp bl,'0'
1075
		jl @f
1076
		cmp bl,'9'
1077
		jg @f
1078
			sub bl,'0'
1079
			imul eax,10
1080
			add eax,ebx
1081
			inc esi
1082
			jmp .load_digit_10
1083
	jmp @f
1084
 
1085
	.load_digit_16: ;считывание 16-ричных цифр
1086
		add esi,2
1087
	.cycle_16:
1088
		mov bl,byte[esi]
1089
		cmp bl,'0'
1090
		jl @f
1091
		cmp bl,'f'
1092
		jg @f
1093
		cmp bl,'9'
1094
		jle .us1
1095
			cmp bl,'A'
1096
			jl @f ;отсеиваем символы >'9' и <'A'
1097
		.us1: ;составное условие
1098
		cmp bl,'F'
1099
		jle .us2
1100
			cmp bl,'a'
1101
			jl @f ;отсеиваем символы >'F' и <'a'
1102
			sub bl,32 ;переводим символы в верхний регистр, для упрощения их последущей обработки
1103
		.us2: ;составное условие
1104
			sub bl,'0'
1105
			cmp bl,9
1106
			jle .cor1
1107
				sub bl,7 ;convert 'A' to '10'
1108
			.cor1:
1109
			shl eax,4
1110
			add eax,ebx
1111
			inc esi
1112
			jmp .cycle_16
1113
	@@:
1114
	cmp ecx,0 ;если число отрицательное
1115
	jne @f
1116
		sub ecx,eax
1117
		mov eax,ecx
1118
	@@:
1119
	pop esi ecx ebx
1120
	ret
1121
endp
1122
end if
1123
 
1124
;данные для диалога открытия файлов
1125
align 4
1126
OpenDialog_data:
1127
.type			dd 0 ;0 - открыть, 1 - сохранить, 2 - выбрать дтректорию
1128
.procinfo		dd procinfo	;+4
1129
.com_area_name		dd communication_area_name	;+8
1130
.com_area		dd 0	;+12
1131
.opendir_path		dd plugin_path	;+16
1132
.dir_default_path	dd default_dir ;+20
1133
.start_path		dd file_name ;+24 путь к диалогу открытия файлов
1134
.draw_window		dd draw_window	;+28
1135
.status 		dd 0	;+32
1136
.openfile_path		dd openfile_path	;+36 путь к открываемому файлу
1137
.filename_area		dd filename_area	;+40
1138
.filter_area		dd Filter
1139
.x:
1140
.x_size 		dw 420 ;+48 ; Window X size
1141
.x_start		dw 10 ;+50 ; Window X position
1142
.y:
1143
.y_size 		dw 320 ;+52 ; Window y size
1144
.y_start		dw 10 ;+54 ; Window Y position
1145
 
1146
default_dir db '/rd/1',0
1147
 
1148
communication_area_name:
1149
	db 'FFFFFFFF_open_dialog',0
1150
open_dialog_name:
1151
	db 'opendial',0
1152
communication_area_default_path:
1153
	db '/rd/1/File managers/',0
1154
 
1155
Filter:
1156
dd Filter.end - Filter ;.1
1157
.1:
1158
db 'VOX',0
1159
.end:
1160
db 0
1161
 
1162
 
1163
 
1164
head_f_i:
1165
head_f_l db 'Системная ошибка',0
1166
 
1167
system_dir_0 db '/sys/lib/'
1168
lib_name_0 db 'proc_lib.obj',0
1169
err_message_found_lib_0 db 'Не найдена библиотека ',39,'proc_lib.obj',39,0
1170
err_message_import_0 db 'Ошибка при импорте библиотеки ',39,'proc_lib.obj',39,0
1171
 
1172
system_dir_1 db '/sys/lib/'
1173
lib_name_1 db 'libimg.obj',0
1174
err_message_found_lib_1 db 'Не найдена библиотека ',39,'libimg.obj',39,0
1175
err_message_import_1 db 'Ошибка при импорте библиотеки ',39,'libimg.obj',39,0
1176
 
1177
system_dir_2 db '/sys/lib/'
1178
lib_name_2 db 'buf2d.obj',0
1179
err_msg_found_lib_2 db 'Не найдена библиотека ',39,'buf2d.obj',39,0
1180
err_msg_import_2 db 'Ошибка при импорте библиотеки ',39,'buf2d',39,0
1181
 
1182
l_libs_start:
1183
	lib0 l_libs lib_name_0, sys_path, file_name, system_dir_0,\
1184
		err_message_found_lib_0, head_f_l, proclib_import,err_message_import_0, head_f_i
1185
	lib1 l_libs lib_name_1, sys_path, file_name, system_dir_1,\
1186
		err_message_found_lib_1, head_f_l, import_libimg, err_message_import_1, head_f_i
1187
	lib_2 l_libs lib_name_2, sys_path, library_path, system_dir_2,\
1188
		err_msg_found_lib_2,head_f_l,import_buf2d,err_msg_import_2,head_f_i
1189
l_libs_end:
1190
 
1191
align 4
1192
import_libimg:
1193
	dd alib_init1
1194
	img_is_img  dd aimg_is_img
1195
	img_info    dd aimg_info
1196
	img_from_file dd aimg_from_file
1197
	img_to_file dd aimg_to_file
1198
	img_from_rgb dd aimg_from_rgb
1199
	img_to_rgb  dd aimg_to_rgb
1200
	img_to_rgb2 dd aimg_to_rgb2
1201
	img_decode  dd aimg_decode
1202
	img_encode  dd aimg_encode
1203
	img_create  dd aimg_create
1204
	img_destroy dd aimg_destroy
1205
	img_destroy_layer dd aimg_destroy_layer
1206
	img_count   dd aimg_count
1207
	img_lock_bits dd aimg_lock_bits
1208
	img_unlock_bits dd aimg_unlock_bits
1209
	img_flip    dd aimg_flip
1210
	img_flip_layer dd aimg_flip_layer
1211
	img_rotate  dd aimg_rotate
1212
	img_rotate_layer dd aimg_rotate_layer
1213
	img_draw    dd aimg_draw
1214
 
1215
	dd 0,0
1216
	alib_init1   db 'lib_init',0
1217
	aimg_is_img  db 'img_is_img',0 ;определяет по данным, может ли библиотека сделать из них изображение
1218
	aimg_info    db 'img_info',0
1219
	aimg_from_file db 'img_from_file',0
1220
	aimg_to_file db 'img_to_file',0
1221
	aimg_from_rgb db 'img_from_rgb',0
1222
	aimg_to_rgb  db 'img_to_rgb',0 ;преобразование изображения в данные RGB
1223
	aimg_to_rgb2 db 'img_to_rgb2',0
1224
	aimg_decode  db 'img_decode',0 ;автоматически определяет формат графических данных
1225
	aimg_encode  db 'img_encode',0
1226
	aimg_create  db 'img_create',0
1227
	aimg_destroy db 'img_destroy',0
1228
	aimg_destroy_layer db 'img_destroy_layer',0
1229
	aimg_count   db 'img_count',0
1230
	aimg_lock_bits db 'img_lock_bits',0
1231
	aimg_unlock_bits db 'img_unlock_bits',0
1232
	aimg_flip    db 'img_flip',0
1233
	aimg_flip_layer db 'img_flip_layer',0
1234
	aimg_rotate  db 'img_rotate',0
1235
	aimg_rotate_layer db 'img_rotate_layer',0
1236
	aimg_draw    db 'img_draw',0
1237
 
1238
align 4
1239
proclib_import: ;описание экспортируемых функций
1240
	OpenDialog_Init dd aOpenDialog_Init
1241
	OpenDialog_Start dd aOpenDialog_Start
1242
dd 0,0
1243
	aOpenDialog_Init db 'OpenDialog_init',0
1244
	aOpenDialog_Start db 'OpenDialog_start',0
1245
 
1246
align 4
1247
import_buf2d:
1248
	init dd sz_init
1249
	buf2d_create dd sz_buf2d_create
1250
	buf2d_create_f_img dd sz_buf2d_create_f_img
1251
	buf2d_clear dd sz_buf2d_clear
1252
	buf2d_draw dd sz_buf2d_draw
1253
	buf2d_delete dd sz_buf2d_delete
1254
	buf2d_line dd sz_buf2d_line
1255
	buf2d_rect_by_size dd sz_buf2d_rect_by_size
1256
	buf2d_filled_rect_by_size dd sz_buf2d_filled_rect_by_size
1257
	buf2d_circle dd sz_buf2d_circle
1258
	buf2d_img_hdiv2 dd sz_buf2d_img_hdiv2
1259
	buf2d_img_wdiv2 dd sz_buf2d_img_wdiv2
1260
	buf2d_conv_24_to_8 dd sz_buf2d_conv_24_to_8
1261
	buf2d_conv_24_to_32 dd sz_buf2d_conv_24_to_32
1262
	buf2d_bit_blt dd sz_buf2d_bit_blt
1263
	buf2d_bit_blt_transp dd sz_buf2d_bit_blt_transp
1264
	buf2d_bit_blt_alpha dd sz_buf2d_bit_blt_alpha
1265
	buf2d_curve_bezier dd sz_buf2d_curve_bezier
1266
	buf2d_convert_text_matrix dd sz_buf2d_convert_text_matrix
1267
	buf2d_draw_text dd sz_buf2d_draw_text
1268
	buf2d_crop_color dd sz_buf2d_crop_color
1269
	buf2d_offset_h dd sz_buf2d_offset_h
1270
	buf2d_flood_fill dd sz_buf2d_flood_fill
1271
	buf2d_set_pixel dd sz_buf2d_set_pixel
1272
	buf2d_get_pixel dd sz_buf2d_get_pixel
1273
	buf2d_vox_brush_create dd sz_buf2d_vox_brush_create
1274
	buf2d_vox_brush_delete dd sz_buf2d_vox_brush_delete
2758 IgorA 1275
	buf2d_vox_obj_get_img_w_3g dd sz_buf2d_vox_obj_get_img_w_3g
1276
	buf2d_vox_obj_get_img_h_3g dd sz_buf2d_vox_obj_get_img_h_3g
1277
	buf2d_vox_obj_draw_3g dd sz_buf2d_vox_obj_draw_3g
1278
	buf2d_vox_obj_draw_3g_scaled dd sz_buf2d_vox_obj_draw_3g_scaled
2759 IgorA 1279
	buf2d_vox_obj_draw_3g_shadows dd sz_buf2d_vox_obj_draw_3g_shadows
2758 IgorA 1280
	buf2d_vox_obj_draw_pl dd sz_buf2d_vox_obj_draw_pl
1281
	buf2d_vox_obj_draw_pl_scaled dd sz_buf2d_vox_obj_draw_pl_scaled
2759 IgorA 1282
 
2748 IgorA 1283
	dd 0,0
1284
	sz_init db 'lib_init',0
1285
	sz_buf2d_create db 'buf2d_create',0
1286
	sz_buf2d_create_f_img db 'buf2d_create_f_img',0
1287
	sz_buf2d_clear db 'buf2d_clear',0
1288
	sz_buf2d_draw db 'buf2d_draw',0
1289
	sz_buf2d_delete db 'buf2d_delete',0
1290
	sz_buf2d_line db 'buf2d_line',0
1291
	sz_buf2d_rect_by_size db 'buf2d_rect_by_size',0
1292
	sz_buf2d_filled_rect_by_size db 'buf2d_filled_rect_by_size',0
1293
	sz_buf2d_circle db 'buf2d_circle',0
1294
	sz_buf2d_img_hdiv2 db 'buf2d_img_hdiv2',0
1295
	sz_buf2d_img_wdiv2 db 'buf2d_img_wdiv2',0
1296
	sz_buf2d_conv_24_to_8 db 'buf2d_conv_24_to_8',0
1297
	sz_buf2d_conv_24_to_32 db 'buf2d_conv_24_to_32',0
1298
	sz_buf2d_bit_blt db 'buf2d_bit_blt',0
1299
	sz_buf2d_bit_blt_transp db 'buf2d_bit_blt_transp',0
1300
	sz_buf2d_bit_blt_alpha db 'buf2d_bit_blt_alpha',0
1301
	sz_buf2d_curve_bezier db 'buf2d_curve_bezier',0
1302
	sz_buf2d_convert_text_matrix db 'buf2d_convert_text_matrix',0
1303
	sz_buf2d_draw_text db 'buf2d_draw_text',0
1304
	sz_buf2d_crop_color db 'buf2d_crop_color',0
1305
	sz_buf2d_offset_h db 'buf2d_offset_h',0
1306
	sz_buf2d_flood_fill db 'buf2d_flood_fill',0
1307
	sz_buf2d_set_pixel db 'buf2d_set_pixel',0
1308
	sz_buf2d_get_pixel db 'buf2d_get_pixel',0
1309
	sz_buf2d_vox_brush_create db 'buf2d_vox_brush_create',0
1310
	sz_buf2d_vox_brush_delete db 'buf2d_vox_brush_delete',0
2758 IgorA 1311
	sz_buf2d_vox_obj_get_img_w_3g db 'buf2d_vox_obj_get_img_w_3g',0
1312
	sz_buf2d_vox_obj_get_img_h_3g db 'buf2d_vox_obj_get_img_h_3g',0
1313
	sz_buf2d_vox_obj_draw_3g db 'buf2d_vox_obj_draw_3g',0
1314
	sz_buf2d_vox_obj_draw_3g_scaled db 'buf2d_vox_obj_draw_3g_scaled',0
2759 IgorA 1315
	sz_buf2d_vox_obj_draw_3g_shadows db 'buf2d_vox_obj_draw_3g_shadows',0
2758 IgorA 1316
	sz_buf2d_vox_obj_draw_pl db 'buf2d_vox_obj_draw_pl',0
1317
	sz_buf2d_vox_obj_draw_pl_scaled db 'buf2d_vox_obj_draw_pl_scaled',0
2748 IgorA 1318
 
1319
mouse_dd dd 0x0
1320
sc system_colors
1321
 
1322
align 16
1323
procinfo process_information
1324
 
1325
;буфер основного изображения
1326
align 4
1327
buf_0: dd 0 ;указатель на дaные изображения
1328
.l: dw 5 ;+4 left
1329
.t: dw 45 ;+6 top
2758 IgorA 1330
.w: dd 192+6 ;+8 w
1331
.h: dd 224+7 ;+12 h
2748 IgorA 1332
.color: dd 0xffffff ;+16 color
1333
	db 24 ;+20 bit in pixel
1334
 
1335
;буфер глубины основного изображения
1336
align 4
1337
buf_0z: dd 0
1338
	dw 0 ;+4 left
1339
	dw 0 ;+6 top
2758 IgorA 1340
.w: dd 192+6 ;+8 w
1341
.h: dd 224+7 ;+12 h
2748 IgorA 1342
.color: dd 0 ;+16 color
1343
	db 32 ;+20 bit in pixel
1344
 
1345
;буфер для рисования среза объекта
1346
align 4
1347
buf_pl: dd 0
2758 IgorA 1348
.l: dw 15+192+6 ;+4 left
2748 IgorA 1349
.t: dw 45 ;+6 top
1350
.w: dd 320 ;+8 w
1351
.h: dd 330 ;+12 h
1352
.color: dd 0xffffff ;+16 color
1353
	db 24 ;+20 bit in pixel
1354
 
1355
;буфер для улучшеного рендера
1356
align 4
1357
buf_r_img:
1358
	rb BUF_STRUCT_SIZE
1359
align 4
1360
buf_r_z:
1361
	rb BUF_STRUCT_SIZE
1362
 
1363
;данные для создания минимального единичного вокселя
1364
align 4
1365
vox_6_7_z:
1366
dd 0,0,1,1,0,0,\
1367
   0,2,2,2,2,0,\
1368
   2,2,2,2,2,2,\
1369
   2,3,2,2,3,2,\
1370
   2,3,3,3,3,2,\
1371
   0,3,3,3,3,0,\
1372
   0,0,3,3,0,0
1373
 
1374
align 4
1375
buf_vox:
1376
	db 6,7,4,3 ;w,h,h_osn,n
1377
	rb BUF_STRUCT_SIZE*(2+1)
1378
 
1379
 
1380
i_end:
1381
	rb 2048
1382
stacktop:
1383
	sys_path rb 1024
1384
	file_name:
1385
		rb 1024 ;4096
1386
	library_path rb 1024
1387
	plugin_path rb 4096
1388
	openfile_path rb 4096
1389
	filename_area rb 256
1390
mem: