'voxel_editor' add new instrument and docs

git-svn-id: svn://kolibrios.org@2883 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
IgorA 2012-07-19 19:06:06 +00:00
parent a105ce8fd8
commit 7a6facbbcf
23 changed files with 576 additions and 53 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

View File

@ -0,0 +1,111 @@
<html>
<head>
<title>Оглавление</title>
<meta http-equiv="content-type" content="text/html; charset=WINDOWS-1251">
<style>
body
{
font-size: 15px;
font-family: "Bookman Old Style";
color: black;
text-align: justify;
}
h1 { color: green; font-size: 23px; }
h2 { color: green; font-size: 21px; }
h3 { color: green; font-size: 19px; }
h4 { color: #803f00; font-size: 17px; }
i { color: #0099cc; }
b { color: #0099cc; }
p {
text-indent: 1em;
margin-top: 3px;
margin-bottom: 2px;
margin-left: 0px;
margin-right: 0px;
}
ol, ul, dl{
margin-top: 3px;
margin-bottom: 2px;
}
pre
{
padding: 2px;
padding-left: 20px;
margin-top: 5px;
margin-bottom: 5px;
margin-left: 0px;
margin-right: 0px;
font-family: "Courier New";
font-size: 15px;
color: #004000;
background-color: #ffd0ff;
}
table
{
font-size: 15px;
}
</style>
</head>
<body>
<h1>Редактор воксельной графики версия от 19.07.2012</h1>
<p>Оглавление</p>
<ul>
<li><a href="#about">О программе</a></li>
<li><a href="#algor">Работа с программой</a>
<ul>
<li>Описание панели инструментов</li>
<li>Изменение текущего цвета карадаша</li>
<li>Работа с кистью</li>
</ul>
</li>
<li>Автор</li>
</ul>
<h2><a name="about">О программе</a></h2>
<p>Программа для создания и редактирования 3-х мерной воксельной графики.</p>
<p><img src="about.png"></p>
<p>Внешний вид программы.</p>
<p>Окно программы содержит панель инструментов, текстовые подписи, буфер с изображением 3-х мерного объекта и сечение этого объекта. Через буфер с сечением объекта можно редактировать изображение. В текстовых подписях указано: текущий цвет карандаша, позиция курсора, размер кисти, масштаб и номер сечения. Изображения сохраняются в бинарный файл с расширением <b>*.vox</b>.</p>
<p>Лицензия свободная.</p>
<h2><a name="algor">Работа с программой</a></h2>
<h3>Описание панели инструментов</h3>
<p><img src="tb_new.png"> - создание нового файла.</p>
<p><img src="tb_open.png"> - открытие файлов с помощью диалогового окна.</p>
<p><img src="tb_save.png"> - сохранение файлов.</p>
<p><img src="tb_zoom_p.png">, <img src="tb_zoom_m.png"> - увеличение и уменьшение масштаба.</p>
<p><img src="tb_rot_1.png">, <img src="tb_rot_2.png"> - повороты изображения.</p>
<p><img src="tb_pl_p.png">, <img src="tb_pl_m.png"> - сдвиг плоскости сечения.</p>
<p><img src="tb_pen.png"> - установка режима рисования вокселей.</p>
<p><img src="tb_brush.png"> - установка режима рисования с использованием кисти.</p>
<p><img src="tb_eraser.png"> - установка режима стирания вокселей.</p>
<p><img src="tb_color.png"> - установка режима выбора цвета.</p>
<p><img src="tb_light.png"> - включение и отключение режима освещения при прорисовке изображения.</p>
<p><img src="tb_r_2_2.png"> - прорисовка изображения с улучшеным качеством.</p>
<p><img src="tb_br_copy.png"> - создание кисти из выделенной области на изображении.</p>
<p><img src="tb_br_paste.png"> - рисование кистью на изображении.</p>
<p><img src="tb_br_size.png"> - определение размеров для инструмента кисть.</p>
<h3>Изменение текущего цвета карадаша</h3>
<p>Цвет карандаша можно поменять вызвав для этого палитру стандартных цветов кнопкой <img src="tb_color.png">.</p>
<p>Также цвет карандаша можно поменять и без палитры нажав на ПКМ в одном из 2-х буферов. Цвет будет определен в зависимости от места нажатия.</p>
<h3>Работа с кистью</h3>
<p>Кисть может использоваться для создания изображений с повторяющимися похожими друг на друа частями. Для копирования определенной части изображения выполните такие действия:</p>
<ul>
<li>откройте или нарисуйте изображение, часть которого нужно копировать</li>
<li>выберите инструмент кисть (кнопка <img src="tb_brush.png">)</li>
<li>нажмите на плоскости сечения в область, которая будет использована как образец для создания кисти</li>
<li>при необходимости измените размер области кнопками <img src="tb_br_size.png"> (максимальный размер кисти 32*32)</li>
<li>нажмите кнопку <img src="tb_br_copy.png"> для запоминания выделенной области</li>
<li>выберите на плоскости сечения новую позицию для вставки запомненного образца, нажмите <img src="tb_br_paste.png"></li>
</ul>
<p>Если необходимо создать несколько копий образца то последний шаг может повторятся много раз.</p>
<p>Если при копировании в выделенной области цвет вокселей совпадет с текущим цветом карандаша, то при изменении цвета карандаша воксели с данным цветом при вставке будут также с измененным цветом. Потому кисть также можно использовать для замены цвета.</p>
<h2>Автор</h2>
<p>Игорь А. (IgorA) - разработка программы.</p>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 504 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 542 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 461 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 734 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 650 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 618 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 403 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 707 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 513 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 448 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 453 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 242 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 294 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 261 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 536 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 596 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 565 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 5.7 KiB

View File

@ -321,6 +321,60 @@ popad
ret ret
endp endp
; ¢§ïâì 梥⠢®ªá¥«ï ¢ 2 íâ ¯ :
; 1) ¨é¥¬ ¬¥áâ® ¢ áâàãªâãॠ¤¥à¥¢ , £¤¥ ¥áâì 㧥« (¥á«¨ ¢¥â¢ì ­¥ áãé¥áâ¢ã¥â, ¢ë室¨¬ ¨§ ä㭪樨)
; 2) ¡¥à¥¬ 梥⠢®ªá¥«ï
;output:
; eax - 梥⠢®ªá¥«ï
align 4
proc buf2d_vox_obj_node_get_color, v_obj:dword,coord_x:dword,coord_y:dword,\
coord_z:dword,k_scale:dword
push ebx ecx edi esi
locals
p_node dd 0 ;த¨â¥«ì᪨© 㧥«
endl
mov edi,[v_obj]
add edi,vox_offs_data
mov esi,[k_scale]
cmp esi,1
jl .end_2
; *** (1) ***
.found:
stdcall vox_obj_get_node_position, [v_obj],[coord_x],[coord_y],[coord_z],esi
movzx bx,byte[edi+3]
mov [p_node],edi
add edi,4
cmp eax,0
je .end_1
mov ecx,eax
cld
@@: ;横« ¤«ï ¯à®¯ã᪠ ¯à¥¤ë¤ãé¨å ¯®¤¤¥à¥¢ì¥¢ ¢ 㧫¥
bt bx,0 ;¯à®¢¥à塞 ¥áâì «¨ ¤®ç¥à­¨¥ 㧫ë
jnc .end_0
xor eax,eax
stdcall vox_obj_rec0 ;¢ eax ¢ëç¨á«ï¥âáï ç¨á«® ¤®ç¥à­¨å 㧫®¢, ¢ ¤ ­­®© ¢¥â¢¨
.end_0:
shr bx,1
loop @b
.end_1:
bt bx,0
jnc .end_2 ;¥á«¨ ¯®¤¤¥à¥¢  ­¥ áãé¥áâ¢ã¥â
dec esi
cmp esi,0
jg .found
; *** (2) ***
;get
mov eax,dword[edi]
and eax,0xffffff
jmp .end_3
.end_2:
mov eax,1 shl 31
.end_3:
pop esi edi ecx ebx
ret
endp
; ᤢ¨£ ¥â ã§«ë ¤«ï ¤®¡ ¢«¥­¨ï ­®¢ëå 㧫®¢ ; ᤢ¨£ ¥â ã§«ë ¤«ï ¤®¡ ¢«¥­¨ï ­®¢ëå 㧫®¢
;input: ;input:
; p_insert - ¯®§¨æ¨ï ¤«ï ¢áâ ¢ª¨ ; p_insert - ¯®§¨æ¨ï ¤«ï ¢áâ ¢ª¨

View File

@ -17,7 +17,7 @@ include 'dll.inc'
include 'vox_draw.inc' include 'vox_draw.inc'
@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,dll.Load @use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,dll.Load
caption db 'Voxel editor 17.07.12',0 ;¯®¤¯¨áì ®ª­  caption db 'Voxel editor 19.07.12',0 ;¯®¤¯¨áì ®ª­ 
struct FileInfoBlock struct FileInfoBlock
Function dd ? Function dd ?
@ -34,7 +34,7 @@ image_data dd 0 ;㪠
fn_toolbar db 'toolbar.png',0 fn_toolbar db 'toolbar.png',0
IMAGE_TOOLBAR_ICON_SIZE equ 16*16*3 IMAGE_TOOLBAR_ICON_SIZE equ 16*16*3
IMAGE_TOOLBAR_SIZE equ IMAGE_TOOLBAR_ICON_SIZE*14 IMAGE_TOOLBAR_SIZE equ IMAGE_TOOLBAR_ICON_SIZE*21
image_data_toolbar dd 0 image_data_toolbar dd 0
;§­ ç¥­¨ï § ¤ ¢ ¥¬ë¥ ¯® 㬮«ç ­¨î, ¡¥§ ini ä ©«  ;§­ ç¥­¨ï § ¤ ¢ ¥¬ë¥ ¯® 㬮«ç ­¨î, ¡¥§ ini ä ©« 
@ -105,6 +105,7 @@ OT_MAP_X equ 0
OT_MAP_Y equ 0 OT_MAP_Y equ 0
OT_CAPT_X_COLOR equ 5 ;®âáâ㯠¤«ï ¯®¤¯¨á¨ æ¢¥â  OT_CAPT_X_COLOR equ 5 ;®âáâ㯠¤«ï ¯®¤¯¨á¨ 梥â 
OT_CAPT_Y_COLOR equ 30 OT_CAPT_Y_COLOR equ 30
PEN_MODE_SELECT_COLOR equ 2 ;०¨¬ ¢ë¡®à  梥â 
align 4 align 4
start: start:
@ -221,7 +222,7 @@ mouse:
shr ebx,16 shr ebx,16
and eax,0xffff and eax,0xffff
cmp dword[v_pen_mode],2 ;select color cmp dword[v_pen_mode],PEN_MODE_SELECT_COLOR
jne .end_2 jne .end_2
stdcall get_buf_color, buf_0 stdcall get_buf_color, buf_0
stdcall get_buf_color, buf_pl stdcall get_buf_color, buf_pl
@ -452,6 +453,27 @@ pushad
add ebx,25 shl 16 add ebx,25 shl 16
mov edx,16 mov edx,16
int 0x40 int 0x40
add ebx,25 shl 16
mov edx,17
int 0x40
add ebx,25 shl 16
mov edx,18
int 0x40
add ebx,25 shl 16
mov edx,19
int 0x40
add ebx,25 shl 16
mov edx,20
int 0x40
add ebx,25 shl 16
mov edx,21
int 0x40
add ebx,25 shl 16
mov edx,22
int 0x40
add ebx,25 shl 16
mov edx,23
int 0x40
; *** à¨á®¢ ­¨¥ ¨ª®­®ª ­  ª­®¯ª å *** ; *** à¨á®¢ ­¨¥ ¨ª®­®ª ­  ª­®¯ª å ***
mov eax,7 mov eax,7
@ -468,37 +490,58 @@ pushad
int 0x40 int 0x40
add ebx,IMAGE_TOOLBAR_ICON_SIZE add ebx,IMAGE_TOOLBAR_ICON_SIZE
add edx,(30 shl 16) ; add edx,(30 shl 16) ;㢥«¨ç. ¬ áèâ ¡
int 0x40 int 0x40
add ebx,IMAGE_TOOLBAR_ICON_SIZE add ebx,IMAGE_TOOLBAR_ICON_SIZE
add edx,(25 shl 16) ; add edx,(25 shl 16) ;㬥­ìè. ¬ áèâ ¡
int 0x40 int 0x40
add ebx,IMAGE_TOOLBAR_ICON_SIZE add ebx,IMAGE_TOOLBAR_ICON_SIZE
add edx,(25 shl 16) ; add edx,(25 shl 16) ;¯®¢®à®â 1
int 0x40 int 0x40
add ebx,IMAGE_TOOLBAR_ICON_SIZE add ebx,IMAGE_TOOLBAR_ICON_SIZE
add edx,(25 shl 16) ; add edx,(25 shl 16) ;¯®¢®à®â 2
int 0x40 int 0x40
add ebx,IMAGE_TOOLBAR_ICON_SIZE add ebx,IMAGE_TOOLBAR_ICON_SIZE
add edx,(25 shl 16) ; add edx,(25 shl 16) ;ᤢ¨£ ¯«®áª®á⨠+
int 0x40 int 0x40
add ebx,IMAGE_TOOLBAR_ICON_SIZE add ebx,IMAGE_TOOLBAR_ICON_SIZE
add edx,(25 shl 16) ; add edx,(25 shl 16) ;ᤢ¨£ ¯«®áª®á⨠-
int 0x40 int 0x40
add ebx,IMAGE_TOOLBAR_ICON_SIZE add ebx,IMAGE_TOOLBAR_ICON_SIZE
add edx,(25 shl 16) ; add edx,(25 shl 16) ;¨­áâà㬥­â ª à ­¤ è
int 0x40 int 0x40
add ebx,IMAGE_TOOLBAR_ICON_SIZE add ebx,IMAGE_TOOLBAR_ICON_SIZE
add edx,(25 shl 16) ; add edx,(25 shl 16) ;¨­áâà㬥­â ª¨áâì
int 0x40 int 0x40
add ebx,IMAGE_TOOLBAR_ICON_SIZE add ebx,IMAGE_TOOLBAR_ICON_SIZE
add edx,(25 shl 16) ; add edx,(25 shl 16) ;¨­áâà㬥­â § â¨à çª 
int 0x40 int 0x40
add ebx,IMAGE_TOOLBAR_ICON_SIZE add ebx,IMAGE_TOOLBAR_ICON_SIZE
add edx,(25 shl 16) ; add edx,(25 shl 16) ;¢ë¡®à 梥â 
int 0x40 int 0x40
add ebx,IMAGE_TOOLBAR_ICON_SIZE add ebx,IMAGE_TOOLBAR_ICON_SIZE
add edx,(25 shl 16) ; add edx,(25 shl 16) ;®á¢¥é¥­¨¥
int 0x40
add ebx,IMAGE_TOOLBAR_ICON_SIZE
add edx,(25 shl 16) ;७¤¥à 2*2
int 0x40
add ebx,IMAGE_TOOLBAR_ICON_SIZE
add edx,(25 shl 16) ;ᮧ¤ âì ª¨áâì
int 0x40
add ebx,IMAGE_TOOLBAR_ICON_SIZE
add edx,(25 shl 16) ;­ à¨á®¢ âì ª¨áâì
int 0x40
add ebx,IMAGE_TOOLBAR_ICON_SIZE
add edx,(25 shl 16) ;è¨à¨­  ª¨á⨠-1
int 0x40
add ebx,IMAGE_TOOLBAR_ICON_SIZE
add edx,(25 shl 16) ;è¨à¨­  ª¨á⨠+1
int 0x40
add ebx,IMAGE_TOOLBAR_ICON_SIZE
add edx,(25 shl 16) ;¢ëá®â  ª¨á⨠-1
int 0x40
add ebx,IMAGE_TOOLBAR_ICON_SIZE
add edx,(25 shl 16) ;¢ëá®â  ª¨á⨠+1
int 0x40 int 0x40
; *** à¨á®¢ ­¨¥ ¡ãä¥à®¢ *** ; *** à¨á®¢ ­¨¥ ¡ãä¥à®¢ ***
@ -511,41 +554,42 @@ popad
align 4 align 4
draw_pok: draw_pok:
mov eax,4 ;à¨á®¢ ­¨¥ ⥪áâ 
mov ebx,(365 shl 16)+5
mov ecx,[sc.work_text]
or ecx,0x80000000 ;or (1 shl 30)
mov edx,txt_zoom
;mov edi,[sc.work]
int 0x40
add bx,9
mov edx,txt_cur_x
int 0x40
add bx,9
mov edx,txt_cur_y
int 0x40
add bx,9
mov edx,txt_n_plane
int 0x40
mov eax,47 mov eax,47
mov ecx,[v_zoom] mov ecx,[v_zoom]
mov ebx,(3 shl 16)+(1 shl 31) mov ebx,(3 shl 16)+(1 shl 31)
mov edx,((365+6*9) shl 16)+5 mov edx,((350+6*9) shl 16)+OT_CAPT_Y_COLOR+2
mov esi,[sc.work_button_text] mov esi,[sc.work_button_text]
or esi,(1 shl 30) or esi,(1 shl 30)
mov edi,[sc.work_button] mov edi,[sc.work_button]
int 0x40 ;¬ áèâ ¡ int 0x40 ;¬ áèâ ¡
mov ecx,[v_cur_x]
add edx,9
int 0x40 ;ªãàá®à x
mov ecx,[v_cur_y]
add edx,9
int 0x40 ;ªãàá®à y
mov ecx,[n_plane] mov ecx,[n_plane]
add edx,9 add edx,115 shl 16 ;9
int 0x40 ;­®¬¥à á¥ç¥­¨ï int 0x40 ;­®¬¥à á¥ç¥­¨ï
;®¡­®¢«¥­¨¥ ¯ à ¬¥â஢ ªãàá®à 
mov dword[txt_curor.size],0
mov eax,dword[v_cur_x]
mov edi,txt_curor.size
call convert_int_to_str
stdcall str_cat, edi,txt_mull
mov eax,dword[v_cur_y]
mov edi,txt_buf
call convert_int_to_str
stdcall str_cat, txt_curor.size,edi
stdcall str_cat, txt_curor.size,txt_space ;§ ¢¥àè î騩 ¯à®¡¥«
;®¡­®¢«¥­¨¥ ¯ à ¬¥â஢ ª¨áâ¨
mov dword[txt_brush.size],0
mov eax,dword[brush_w]
mov edi,txt_brush.size
call convert_int_to_str
stdcall str_cat, edi,txt_mull
mov eax,dword[brush_h]
mov edi,txt_buf
call convert_int_to_str
stdcall str_cat, txt_brush.size,edi
stdcall str_cat, txt_brush.size,txt_space ;§ ¢¥àè î騩 ¯à®¡¥«
mov eax,4 ;à¨á®¢ ­¨¥ ⥪áâ  mov eax,4 ;à¨á®¢ ­¨¥ ⥪áâ 
mov ebx,(OT_CAPT_X_COLOR shl 16)+OT_CAPT_Y_COLOR+2 mov ebx,(OT_CAPT_X_COLOR shl 16)+OT_CAPT_Y_COLOR+2
mov ecx,[sc.work_text] mov ecx,[sc.work_text]
@ -553,6 +597,24 @@ draw_pok:
mov edx,txt_color mov edx,txt_color
int 0x40 int 0x40
mov edx,txt_curor
add ebx,115 shl 16
or ecx,(1 shl 30)
mov edi,[sc.work]
int 0x40
mov edx,txt_brush
add ebx,115 shl 16
int 0x40
mov edx,txt_zoom
add ebx,115 shl 16
int 0x40
mov edx,txt_n_plane
add ebx,115 shl 16
int 0x40
call on_change_color call on_change_color
ret ret
@ -623,25 +685,53 @@ button:
@@: @@:
cmp ah,12 cmp ah,12
jne @f jne @f
call but_7 call but_mode_pen
@@: @@:
cmp ah,13 cmp ah,13
jne @f jne @f
call but_8 call but_mode_brush
@@: @@:
cmp ah,14 cmp ah,14
jne @f jne @f
mov dword[v_pen_mode],2 ;select color call but_mode_clear
call draw_palete
@@: @@:
cmp ah,15 cmp ah,15
jne @f jne @f
call but_light mov dword[v_pen_mode],PEN_MODE_SELECT_COLOR
call draw_palete
@@: @@:
cmp ah,16 cmp ah,16
jne @f
call but_light
@@:
cmp ah,17
jne @f jne @f
call but_rend_2_2 call but_rend_2_2
@@: @@:
cmp ah,18
jne @f
call but_brush_copy
@@:
cmp ah,19
jne @f
call but_brush_draw
@@:
cmp ah,20
jne @f
call but_bru_w_m
@@:
cmp ah,21
jne @f
call but_bru_w_p
@@:
cmp ah,22
jne @f
call but_bru_h_m
@@:
cmp ah,23
jne @f
call but_bru_h_p
@@:
cmp ah,1 cmp ah,1
jne still jne still
.exit: .exit:
@ -907,11 +997,11 @@ pop ecx eax
ret ret
align 4 align 4
but_7: but_mode_pen:
push eax push eax
mov eax,dword[v_pen_mode] mov eax,dword[v_pen_mode]
mov dword[v_pen_mode],1 ;draw mov dword[v_pen_mode],1 ;pen
cmp eax,2 cmp eax,PEN_MODE_SELECT_COLOR
jne @f jne @f
call draw_objects call draw_objects
@@: @@:
@ -919,11 +1009,23 @@ but_7:
ret ret
align 4 align 4
but_8: but_mode_brush:
push eax
mov eax,dword[v_pen_mode]
mov dword[v_pen_mode],3 ;brush
cmp eax,PEN_MODE_SELECT_COLOR
jne @f
call draw_objects
@@:
pop eax
ret
align 4
but_mode_clear:
push eax push eax
mov eax,dword[v_pen_mode] mov eax,dword[v_pen_mode]
mov dword[v_pen_mode],0 ;clear mov dword[v_pen_mode],0 ;clear
cmp eax,2 cmp eax,PEN_MODE_SELECT_COLOR
jne @f jne @f
call draw_objects call draw_objects
@@: @@:
@ -1027,6 +1129,172 @@ pop edi
stdcall [buf2d_draw], buf_0 ;®¡­®¢«ï¥¬ ¡ãä¥à ­  íªà ­¥ stdcall [buf2d_draw], buf_0 ;®¡­®¢«ï¥¬ ¡ãä¥à ­  íªà ­¥
ret ret
;㬥­ìè ¥¬ è¨à¨­ã ª¨áâ¨
align 4
but_bru_w_m:
cmp dword[brush_w],1
jle @f
dec dword[brush_w]
pushad
call draw_pok
call draw_vox_cursor
stdcall [buf2d_draw], buf_pl ;®¡­®¢«ï¥¬ ¡ãä¥à ­  íªà ­¥
popad
@@:
ret
;㢥«¨ç¨¢ ¥¬ è¨à¨­ã ª¨áâ¨
align 4
but_bru_w_p:
cmp dword[brush_w],32
jge @f
inc dword[brush_w]
pushad
call draw_pok
call draw_vox_cursor
stdcall [buf2d_draw], buf_pl ;®¡­®¢«ï¥¬ ¡ãä¥à ­  íªà ­¥
popad
@@:
ret
;㬥­ìè ¥¬ ¢ëá®âã ª¨áâ¨
align 4
but_bru_h_m:
cmp dword[brush_h],1
jle @f
dec dword[brush_h]
pushad
call draw_pok
call draw_vox_cursor
stdcall [buf2d_draw], buf_pl ;®¡­®¢«ï¥¬ ¡ãä¥à ­  íªà ­¥
popad
@@:
ret
;㢥«¨ç¨¢ ¥¬ ¢ëá®âã ª¨áâ¨
align 4
but_bru_h_p:
cmp dword[brush_h],32
jge @f
inc dword[brush_h]
pushad
call draw_pok
call draw_vox_cursor
stdcall [buf2d_draw], buf_pl ;®¡­®¢«ï¥¬ ¡ãä¥à ­  íªà ­¥
popad
@@:
ret
align 4
but_brush_copy:
cmp dword[v_pen_mode],3
jne .end_f
pushad
mov eax,[v_cur_x]
mov ebx,[n_plane]
mov edx,[v_cur_y]
mov ecx,[v_zoom]
cmp ecx,[scaled_zoom]
jle @f
;¯à¥®¡à §®¢ ­¨¥ ª®®à¤¨­ â, á ãç¥â®¬ 㢥«¨ç¥­¨ï
;sub ecx,[scaled_zoom] ;¢ ecx ¯à¨à®áâ ¬ áèâ ¡  (ecx>0)
mov ecx,[scaled_zoom]
mov edi,[cam_x]
shl edi,cl
add eax,edi
mov edi,[cam_y]
shl edi,cl
add ebx,edi
mov edi,[cam_z]
shl edi,cl
add edx,edi
@@:
cld
mov edi,brush_data
mov esi,edx
sub esi,[brush_h]
.cycle_0:
mov ecx,[brush_w]
@@:
push eax
stdcall buf2d_vox_obj_node_get_color, [open_file_vox], eax,ebx,edx, [v_zoom]
cmp eax,[v_color]
jne .end_0
mov eax,1 shl 30
.end_0:
mov dword[edi],eax ;color
pop eax
inc eax
add edi,4
loop @b
dec edx
sub eax,[brush_w]
cmp edx,esi
jg .cycle_0
call draw_objects
popad
.end_f:
ret
align 4
but_brush_draw:
cmp dword[v_pen_mode],3
jne .end_f
pushad
mov eax,[v_cur_x]
mov ebx,[n_plane]
mov edx,[v_cur_y]
mov ecx,[v_zoom]
cmp ecx,[scaled_zoom]
jle @f
;¯à¥®¡à §®¢ ­¨¥ ª®®à¤¨­ â, á ãç¥â®¬ 㢥«¨ç¥­¨ï
;sub ecx,[scaled_zoom] ;¢ ecx ¯à¨à®áâ ¬ áèâ ¡  (ecx>0)
mov ecx,[scaled_zoom]
mov edi,[cam_x]
shl edi,cl
add eax,edi
mov edi,[cam_y]
shl edi,cl
add ebx,edi
mov edi,[cam_z]
shl edi,cl
add edx,edi
@@:
cld
mov edi,brush_data
mov esi,edx
sub esi,[brush_h]
.cycle_0:
mov ecx,[brush_w]
@@:
bt dword[edi],31 ;¡¨â ¯à®§à ç­®áâ¨
jc .end_2
bt dword[edi],30 ;¡¨â ⥪ã饣® 梥â 
jnc .end_0
push dword[v_color]
jmp .end_1
.end_0:
push dword[edi]
.end_1:
stdcall buf2d_vox_obj_create_node, [open_file_vox], eax,ebx,edx, [v_zoom] ;, color
.end_2:
inc eax
add edi,4
loop @b
dec edx
sub eax,[brush_w]
cmp edx,esi
jg .cycle_0
call draw_objects
popad
.end_f:
ret
align 4 align 4
draw_palete: draw_palete:
stdcall [buf2d_clear], buf_0, [buf_0.color] ;ç¨á⨬ ¡ãä¥à stdcall [buf2d_clear], buf_0, [buf_0.color] ;ç¨á⨬ ¡ãä¥à
@ -1034,6 +1302,7 @@ draw_palete:
stdcall [buf2d_draw], buf_0 ;®¡­®¢«ï¥¬ ¡ãä¥à ­  íªà ­¥ stdcall [buf2d_draw], buf_0 ;®¡­®¢«ï¥¬ ¡ãä¥à ­  íªà ­¥
ret ret
align 4
v_zoom dd 3 ;⥪ã騩 ¬ áèâ ¡ v_zoom dd 3 ;⥪ã騩 ¬ áèâ ¡
v_cur_x dd 0 ;ª®®à¤¨­ â  ªãàá®à  x v_cur_x dd 0 ;ª®®à¤¨­ â  ªãàá®à  x
v_cur_y dd 0 ;ª®®à¤¨­ â  ªãàá®à  y (­® ®áì ¢ ®¡ê¥ªâ¥ z) v_cur_y dd 0 ;ª®®à¤¨­ â  ªãàá®à  y (­® ®áì ¢ ®¡ê¥ªâ¥ z)
@ -1047,12 +1316,25 @@ cam_z dd 0
scaled_zoom dd 5 ;¬ áèâ ¡ ¯®á«¥ ª®â®à®£® ­ ç¨­ ¥âáï à¨á®¢ ­¨¥ ç á⨠¨§®¡à ¦¥­¨ï scaled_zoom dd 5 ;¬ áèâ ¡ ¯®á«¥ ª®â®à®£® ­ ç¨­ ¥âáï à¨á®¢ ­¨¥ ç á⨠¨§®¡à ¦¥­¨ï
tile_size dd ? ;à §¬¥à ª¢ ¤à â¨ª  ­  ¯«®áª®á⨠á á¥ç¥­¨¥¬ tile_size dd ? ;à §¬¥à ª¢ ¤à â¨ª  ­  ¯«®áª®á⨠á á¥ç¥­¨¥¬
max_open_file_size dd ? max_open_file_size dd ?
brush_w dd 5 ;è¨à¨­  ª¨áâ¨
brush_h dd 5 ;¢ëá®â  ª¨áâ¨
brush_data dd 1 shl 31,1 shl 30,1 shl 30,1 shl 30,1 shl 31
dd 1 shl 30,1 shl 30,1 shl 30,1 shl 30,1 shl 30
dd 1 shl 30,1 shl 30,1 shl 30,1 shl 30,1 shl 30
dd 1 shl 30,1 shl 30,1 shl 30,1 shl 30,1 shl 30
dd 1 shl 31,1 shl 30,1 shl 30,1 shl 30,1 shl 31
rd 999 ;32*32-25
txt_zoom db 'Œ áèâ ¡:',0 txt_zoom db 'Œ áèâ ¡:',0
txt_cur_x db 'x:',0 txt_curor: db 'Šãàá®à: '
txt_cur_y db 'y:',0 .size: rb 10
txt_n_plane db '‘¥ç¥­¨¥:',0 txt_n_plane db '‘¥ç¥­¨¥:',0
txt_color db '–¢¥â:',0 txt_color db '–¢¥â:',0
txt_brush: db 'Š¨áâì: '
.size: rb 10
txt_mull db '*',0
txt_space db ' ',0
txt_buf rb 16
align 4 align 4
draw_objects: draw_objects:
@ -1060,7 +1342,7 @@ draw_objects:
stdcall [buf2d_clear], buf_0z, 0 ;ç¨á⨬ ¡ãä¥à stdcall [buf2d_clear], buf_0z, 0 ;ç¨á⨬ ¡ãä¥à
stdcall [buf2d_clear], buf_pl, [buf_pl.color] ;ç¨á⨬ ¡ãä¥à stdcall [buf2d_clear], buf_pl, [buf_pl.color] ;ç¨á⨬ ¡ãä¥à
cmp dword[v_pen_mode],2 cmp dword[v_pen_mode],PEN_MODE_SELECT_COLOR
jne @f jne @f
call draw_palete call draw_palete
jmp .end_f jmp .end_f
@ -1146,6 +1428,9 @@ pushad
dec ebx dec ebx
add edi,2 add edi,2
cmp dword[v_pen_mode],3
je .brush
;£®à¨§®­â «ì­ë¥ «¨­¨¨ ;£®à¨§®­â «ì­ë¥ «¨­¨¨
sub eax,2 sub eax,2
mov ecx,edi mov ecx,edi
@ -1162,6 +1447,18 @@ pushad
dec edi dec edi
stdcall [buf2d_line], buf_pl, eax,ebx, edi,ebx,[sc.work_graph] stdcall [buf2d_line], buf_pl, eax,ebx, edi,ebx,[sc.work_graph]
@@: @@:
jmp .end_f
;à ¬ª  ¤«ï ª¨áâ¨
.brush:
dec eax
mov ecx,[brush_w]
imul ecx,[tile_size]
;mov edi,eax
mov edi,ecx
mov esi,[brush_h]
imul esi,[tile_size]
stdcall [buf2d_rect_by_size], buf_pl, eax,ebx, edi,esi,[sc.work_graph]
.end_f: .end_f:
popad popad
@ -1242,6 +1539,67 @@ proc conv_str_to_int, buf:dword
endp endp
end if end if
;input:
; eax = value
; edi = string buffer
;output:
align 4
convert_int_to_str:
pushad
mov dword[edi+1],0
mov word[edi+5],0
call .str
popad
ret
align 4
.str:
mov ecx,0x0a ;§ ¤ ¥âáï á¨á⥬  áç¨á«¥­¨ï ¨§¬¥­ïîâáï ॣ¨áâàë ebx,eax,ecx,edx ¢å®¤­ë¥ ¯ à ¬¥âàë eax - ç¨á«®
;¯à¥à¥¢®¤ ç¨á«  ¢ ASCII áâப㠢§®¤­ë¥ ¤ ­­ë¥ ecx=á¨á⥬  áç¨á«¥­ï edi  ¤à¥á ªã¤  § ¯¨á뢠âì, ¡ã¤¥¬ áâபã, ¯à¨ç¥¬ ª®­¥æ ¯¥à¥¬¥­­®©
cmp eax,ecx ;áà ¢­¨âì ¥á«¨ ¢ eax ¬¥­ìè¥ ç¥¬ ¢ ecx â® ¯¥à¥©â¨ ­  @@-1 â.¥. ­  pop eax
jb @f
xor edx,edx ;®ç¨áâ¨âì edx
div ecx ;à §¤¥«¨âì - ®áâ â®ª ¢ edx
push edx ;¯®«®¦¨âì ¢ á⥪
;dec edi ;ᬥ饭¨¥ ­¥®¡å®¤¨¬®¥ ¤«ï § ¯¨á¨ á ª®­æ  áâப¨
call .str ;¯¥à¥©â¨ ­  á ¬ã ᥡï â.¥. ¢ë§¢ âì á ¬ã á¥¡ï ¨ â ª ¤® ⮣® ¬®¬¥­â  ¯®ª  ¢ eax ­¥ áâ ­¥â ¬¥­ìè¥ ç¥¬ ¢ ecx
pop eax
@@: ;cmp al,10 ;¯à®¢¥à¨âì ­¥ ¬¥­ìè¥ «¨ §­ ç¥­¨¥ ¢ al 祬 10 (¤«ï á¨á⥬ë áç¨á«¥­ï 10 ¤ ­­ ï ª®¬ ­¤  - «¨è­ ï))
or al,0x30 ;¤ ­­ ï ª®¬ ­¤  ª®à®ç¥ 祬 ¤¢¥ ¢ëè¥
stosb ;§ ¯¨á âì í«¥¬¥­â ¨§ ॣ¨áâà  al ¢ ï祪㠯 ¬ï⨠es:edi
ret ;¢¥à­ãâìáï ç¥­ì ¨­â¥à¥á­ë© 室 â.ª. ¯®ª  ¢ á⥪¥ åà ­¨âìáï ª®«-¢® ¢ë§®¢®¢ â® á⮫쪮 à § ¬ë ¨ ¡ã¤¥¬ ¢ë§ë¢ âìáï
align 4
proc str_cat, str1:dword, str2:dword
push eax ecx edi esi
mov esi,dword[str2]
stdcall str_len,esi
mov ecx,eax
inc ecx
mov edi,dword[str1]
stdcall str_len,edi
add edi,eax
cld
repne movsb
pop esi edi ecx eax
ret
endp
;output:
; eax = strlen
align 4
proc str_len, str1:dword
mov eax,[str1]
@@:
cmp byte[eax],0
je @f
inc eax
jmp @b
@@:
sub eax,[str1]
ret
endp
;¤ ­­ë¥ ¤«ï ¤¨ «®£  ®âªàëâ¨ï ä ©«®¢ ;¤ ­­ë¥ ¤«ï ¤¨ «®£  ®âªàëâ¨ï ä ©«®¢
align 4 align 4
OpenDialog_data: OpenDialog_data: