Subversion Repositories Kolibri OS

Rev

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

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