From ff07aa50ca97248b3ad8c60d3879a579c6f71de1 Mon Sep 17 00:00:00 2001 From: IgorA Date: Thu, 13 Sep 2012 19:51:21 +0000 Subject: [PATCH] 'vox_editor' update git-svn-id: svn://kolibrios.org@2974 a494cfbc-eb01-0410-851d-a64ba20cac60 --- programs/media/voxel_editor/trunk/toolbar.png | Bin 5860 -> 6057 bytes .../media/voxel_editor/trunk/voxel_editor.asm | 83 +- .../media/voxel_editor/utilites/build_ru.bat | 3 + .../media/voxel_editor/utilites/toolbar_m.png | Bin 0 -> 4323 bytes .../media/voxel_editor/utilites/vox_mover.asm | 1759 +++++++++++++++++ .../media/voxel_editor/utilites/vox_mover.ini | 12 + 6 files changed, 1847 insertions(+), 10 deletions(-) create mode 100644 programs/media/voxel_editor/utilites/toolbar_m.png create mode 100644 programs/media/voxel_editor/utilites/vox_mover.asm create mode 100644 programs/media/voxel_editor/utilites/vox_mover.ini diff --git a/programs/media/voxel_editor/trunk/toolbar.png b/programs/media/voxel_editor/trunk/toolbar.png index a38f0c8d1dfb181af50c6e985cbd1852f0cf445e..486471c94257f7493b6792023a8b10a3b299bf37 100644 GIT binary patch delta 6014 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 s%Hju5v^)8EBsv|yE&u=k07*qoM6N<$fBt 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 diff --git a/programs/media/voxel_editor/trunk/voxel_editor.asm b/programs/media/voxel_editor/trunk/voxel_editor.asm index 112bca4430..3112e97d21 100644 --- a/programs/media/voxel_editor/trunk/voxel_editor.asm +++ b/programs/media/voxel_editor/trunk/voxel_editor.asm @@ -17,7 +17,7 @@ include 'dll.inc' include 'vox_draw.inc' @use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,dll.Load -caption db 'Voxel editor 23.08.12',0 ;подпись окна +caption db 'Voxel editor 12.09.12',0 ;подпись окна struct FileInfoBlock Function dd ? @@ -34,7 +34,7 @@ image_data dd 0 ;ука fn_toolbar db 'toolbar.png',0 IMAGE_TOOLBAR_ICON_SIZE equ 16*16*3 -IMAGE_TOOLBAR_SIZE equ IMAGE_TOOLBAR_ICON_SIZE*21 +IMAGE_TOOLBAR_SIZE equ IMAGE_TOOLBAR_ICON_SIZE*22 image_data_toolbar dd 0 cursors_count equ 4 IMAGE_CURSORS_SIZE equ 4096*cursors_count ;размер картинки с курсорами @@ -494,6 +494,9 @@ pushad add ebx,25 shl 16 mov edx,23 int 0x40 + add ebx,25 shl 16 + mov edx,24 + int 0x40 ; *** рисование иконок на кнопках *** mov eax,7 @@ -552,6 +555,9 @@ pushad 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 @@ -697,11 +703,11 @@ button: @@: cmp ah,10 jne @f - call but_5 + call but_plane_inc @@: cmp ah,11 jne @f - call but_6 + call but_plane_dec @@: cmp ah,12 jne @f @@ -738,17 +744,21 @@ button: @@: cmp ah,20 jne @f - call but_bru_w_m + call but_brush_clear @@: cmp ah,21 jne @f - call but_bru_w_p + call but_bru_w_m @@: cmp ah,22 jne @f - call but_bru_h_m + call but_bru_w_p @@: cmp ah,23 + jne @f + call but_bru_h_m + @@: + cmp ah,24 jne @f call but_bru_h_p @@: @@ -769,12 +779,14 @@ button: stdcall mem.Free,[open_file_vox] mcall -1 +;данные для инициализации воксельного объекта align 4 vox_new_data: db 2,0,0,0 - db 000b,001b,010b,011b, 100b,101b,110b,111b ;default table + db 0,1,2,3,4,5,6,7 ;default table dd 0 ;null node +;инициализация воксельного объекта align 4 proc but_new_file uses ecx edi esi mov ecx,vox_offs_data+4 @@ -941,7 +953,7 @@ but_4: ;сдвигаем плоскость среза align 4 -but_5: +but_plane_inc: push eax ecx inc dword[n_plane] mov eax,[v_zoom] @@ -984,7 +996,7 @@ pop ecx eax ;сдвигаем плоскость среза align 4 -but_6: +but_plane_dec: dec dword[n_plane] cmp dword[n_plane],0 jge .end_f @@ -1317,6 +1329,57 @@ popad .end_f: ret +align 4 +but_brush_clear: + 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 + stdcall buf2d_vox_obj_delete_node, [open_file_vox], eax,ebx,edx, [v_zoom] + .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 draw_palete: stdcall [buf2d_clear], buf_0, [buf_0.color] ;чистим буфер diff --git a/programs/media/voxel_editor/utilites/build_ru.bat b/programs/media/voxel_editor/utilites/build_ru.bat index f68fc40d53..3ba5ae0c6a 100644 --- a/programs/media/voxel_editor/utilites/build_ru.bat +++ b/programs/media/voxel_editor/utilites/build_ru.bat @@ -1,7 +1,10 @@ if not exist bin mkdir bin if not exist bin\toolbar.png @copy toolbar.png bin\toolbar.png +if not exist bin\toolbar_m.png @copy toolbar_m.png bin\toolbar_m.png if not exist bin\buf2d.obj @fasm.exe -m 16384 ..\..\..\develop\libraries\buf2d\trunk\buf2d.asm bin\buf2d.obj @kpack bin\buf2d.obj @fasm.exe -m 16384 vox_creator.asm bin\vox_creator.kex @kpack bin\vox_creator.kex +@fasm.exe -m 16384 vox_mover.asm bin\vox_mover.kex +@kpack bin\vox_mover.kex pause \ No newline at end of file diff --git a/programs/media/voxel_editor/utilites/toolbar_m.png b/programs/media/voxel_editor/utilites/toolbar_m.png new file mode 100644 index 0000000000000000000000000000000000000000..9f5cf53eb90b41376b625e21be160ea5eefa81e7 GIT binary patch literal 4323 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 2^eax + stdcall [buf2d_vox_obj_draw_pl_scaled], buf_pl, [open_file_vox],\ + OT_MAP_X,OT_MAP_Y,[tile_size], [scaled_zoom], [n_plane], [sc.work_graph],[cam_x],[cam_y],[cam_z],eax + bt dword[mode_light],0 + jnc .end_2 + stdcall [buf2d_vox_obj_draw_3g_shadows], buf_0, buf_0z, buf_vox, 0,0, 0, [scaled_zoom], 3 + .end_2: + .end_0: + pop ecx ebx eax + + call draw_vox_cursor + stdcall [buf2d_draw], buf_0 ;обновляем буфер на экране + stdcall [buf2d_draw], buf_pl ;обновляем буфер на экране + .end_f: + ret + +;рисование курсора +align 4 +draw_vox_cursor: +pushad + mov ecx,[v_zoom] + cmp ecx,[scaled_zoom] + jle @f + mov ecx,[scaled_zoom] + @@: + xor edx,edx + inc edx + shl edx,cl + + mov eax,[v_cur_x] + cmp eax,edx + jge .end_f ;курсор за пределами поля + mov edi,[tile_size] + imul eax,edi + add eax,OT_MAP_X + mov ebx,edx + dec ebx + sub ebx,[v_cur_y] + imul ebx,edi + add ebx,OT_MAP_Y + inc eax + inc ebx + sub edi,2 + stdcall [buf2d_rect_by_size], buf_pl, eax,ebx, edi,edi,[sc.work_graph] + dec ebx + add edi,2 + + ;горизонтальные линии + sub eax,2 + mov ecx,edi + imul edi,edx + shr ecx,1 + add ebx,ecx ;центровка по середине клетки + mov ecx,OT_MAP_X + add edi,ecx + stdcall [buf2d_line], buf_pl, ecx,ebx, eax,ebx,[sc.work_graph] + add eax,[tile_size] + inc eax + cmp eax,edi + jge @f ;если курсор на краю поля + dec edi + stdcall [buf2d_line], buf_pl, eax,ebx, edi,ebx,[sc.work_graph] + @@: + + .end_f: +popad + ret + +if 0 +;input: +; buf - указатель на строку, число должно быть в 10 или 16 ричном виде +;output: +; eax - число +align 4 +proc conv_str_to_int, buf:dword + xor eax,eax + push ebx ecx esi + xor ebx,ebx + mov esi,[buf] + ;определение отрицательных чисел + xor ecx,ecx + inc ecx + cmp byte[esi],'-' + jne @f + dec ecx + inc esi + @@: + + cmp word[esi],'0x' + je .load_digit_16 + + .load_digit_10: ;считывание 10-тичных цифр + mov bl,byte[esi] + cmp bl,'0' + jl @f + cmp bl,'9' + jg @f + sub bl,'0' + imul eax,10 + add eax,ebx + inc esi + jmp .load_digit_10 + jmp @f + + .load_digit_16: ;считывание 16-ричных цифр + add esi,2 + .cycle_16: + mov bl,byte[esi] + cmp bl,'0' + jl @f + cmp bl,'f' + jg @f + cmp bl,'9' + jle .us1 + cmp bl,'A' + jl @f ;отсеиваем символы >'9' и <'A' + .us1: ;составное условие + cmp bl,'F' + jle .us2 + cmp bl,'a' + jl @f ;отсеиваем символы >'F' и <'a' + sub bl,32 ;переводим символы в верхний регистр, для упрощения их последущей обработки + .us2: ;составное условие + sub bl,'0' + cmp bl,9 + jle .cor1 + sub bl,7 ;convert 'A' to '10' + .cor1: + shl eax,4 + add eax,ebx + inc esi + jmp .cycle_16 + @@: + cmp ecx,0 ;если число отрицательное + jne @f + sub ecx,eax + mov eax,ecx + @@: + pop esi ecx ebx + ret +endp +end if + +;input: +; eax = value +; edi = string buffer +;output: +align 4 +convert_int_to_str: + pushad + bt eax,31 + jae @f + ;если число отрицательное + neg eax + ;inc eax + ;clc + mov byte[edi],'-' + inc edi + @@: + 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 +OpenDialog_data: +.type dd 0 ;0 - открыть, 1 - сохранить, 2 - выбрать дтректорию +.procinfo dd procinfo ;+4 +.com_area_name dd communication_area_name ;+8 +.com_area dd 0 ;+12 +.opendir_path dd plugin_path ;+16 +.dir_default_path dd default_dir ;+20 +.start_path dd file_name ;+24 путь к диалогу открытия файлов +.draw_window dd draw_window ;+28 +.status dd 0 ;+32 +.openfile_path dd openfile_path ;+36 путь к открываемому файлу +.filename_area dd filename_area ;+40 +.filter_area dd Filter +.x: +.x_size dw 420 ;+48 ; Window X size +.x_start dw 10 ;+50 ; Window X position +.y: +.y_size dw 320 ;+52 ; Window y size +.y_start dw 10 ;+54 ; Window Y position + +default_dir db '/rd/1',0 + +communication_area_name: + db 'FFFFFFFF_open_dialog',0 +open_dialog_name: + db 'opendial',0 +communication_area_default_path: + db '/rd/1/File managers/',0 + +Filter: +dd Filter.end - Filter ;.1 +.1: +db 'VOX',0 +.end: +db 0 + + + +head_f_i: +head_f_l db 'Системная ошибка',0 + +system_dir_0 db '/sys/lib/' +lib_name_0 db 'proc_lib.obj',0 +err_message_found_lib_0 db 'Не найдена библиотека ',39,'proc_lib.obj',39,0 +err_message_import_0 db 'Ошибка при импорте библиотеки ',39,'proc_lib.obj',39,0 + +system_dir_1 db '/sys/lib/' +lib_name_1 db 'libimg.obj',0 +err_message_found_lib_1 db 'Не найдена библиотека ',39,'libimg.obj',39,0 +err_message_import_1 db 'Ошибка при импорте библиотеки ',39,'libimg.obj',39,0 + +system_dir_2 db '/sys/lib/' +lib_name_2 db 'buf2d.obj',0 +err_msg_found_lib_2 db 'Не найдена библиотека ',39,'buf2d.obj',39,0 +err_msg_import_2 db 'Ошибка при импорте библиотеки ',39,'buf2d',39,0 + +system_dir_3 db '/sys/lib/' +lib_name_3 db 'libini.obj',0 +err_msg_found_lib_3 db 'Не найдена библиотека ',39,'libini.obj',39,0 +err_msg_import_3 db 'Ошибка при импорте библиотеки ',39,'libini',39,0 + +l_libs_start: + lib0 l_libs lib_name_0, sys_path, file_name, system_dir_0,\ + err_message_found_lib_0, head_f_l, proclib_import,err_message_import_0, head_f_i + lib1 l_libs lib_name_1, sys_path, file_name, system_dir_1,\ + err_message_found_lib_1, head_f_l, import_libimg, err_message_import_1, head_f_i + lib_2 l_libs lib_name_2, sys_path, library_path, system_dir_2,\ + err_msg_found_lib_2,head_f_l,import_buf2d,err_msg_import_2,head_f_i + lib_3 l_libs lib_name_3, sys_path, library_path, system_dir_3,\ + err_msg_found_lib_3,head_f_l,import_libini,err_msg_import_3,head_f_i +l_libs_end: + +align 4 +import_libimg: + dd alib_init1 + img_is_img dd aimg_is_img + img_info dd aimg_info + img_from_file dd aimg_from_file + img_to_file dd aimg_to_file + img_from_rgb dd aimg_from_rgb + img_to_rgb dd aimg_to_rgb + img_to_rgb2 dd aimg_to_rgb2 + img_decode dd aimg_decode + img_encode dd aimg_encode + img_create dd aimg_create + img_destroy dd aimg_destroy + img_destroy_layer dd aimg_destroy_layer + img_count dd aimg_count + img_lock_bits dd aimg_lock_bits + img_unlock_bits dd aimg_unlock_bits + img_flip dd aimg_flip + img_flip_layer dd aimg_flip_layer + img_rotate dd aimg_rotate + img_rotate_layer dd aimg_rotate_layer + img_draw dd aimg_draw + + dd 0,0 + alib_init1 db 'lib_init',0 + aimg_is_img db 'img_is_img',0 ;определяет по данным, может ли библиотека сделать из них изображение + aimg_info db 'img_info',0 + aimg_from_file db 'img_from_file',0 + aimg_to_file db 'img_to_file',0 + aimg_from_rgb db 'img_from_rgb',0 + aimg_to_rgb db 'img_to_rgb',0 ;преобразование изображения в данные RGB + aimg_to_rgb2 db 'img_to_rgb2',0 + aimg_decode db 'img_decode',0 ;автоматически определяет формат графических данных + aimg_encode db 'img_encode',0 + aimg_create db 'img_create',0 + aimg_destroy db 'img_destroy',0 + aimg_destroy_layer db 'img_destroy_layer',0 + aimg_count db 'img_count',0 + aimg_lock_bits db 'img_lock_bits',0 + aimg_unlock_bits db 'img_unlock_bits',0 + aimg_flip db 'img_flip',0 + aimg_flip_layer db 'img_flip_layer',0 + aimg_rotate db 'img_rotate',0 + aimg_rotate_layer db 'img_rotate_layer',0 + aimg_draw db 'img_draw',0 + +align 4 +proclib_import: ;описание экспортируемых функций + OpenDialog_Init dd aOpenDialog_Init + OpenDialog_Start dd aOpenDialog_Start +dd 0,0 + aOpenDialog_Init db 'OpenDialog_init',0 + aOpenDialog_Start db 'OpenDialog_start',0 + +align 4 +import_buf2d: + init dd sz_init + buf2d_create dd sz_buf2d_create + buf2d_create_f_img dd sz_buf2d_create_f_img + buf2d_clear dd sz_buf2d_clear + buf2d_draw dd sz_buf2d_draw + buf2d_delete dd sz_buf2d_delete + buf2d_line dd sz_buf2d_line + buf2d_rect_by_size dd sz_buf2d_rect_by_size + buf2d_filled_rect_by_size dd sz_buf2d_filled_rect_by_size + buf2d_circle dd sz_buf2d_circle + buf2d_img_hdiv2 dd sz_buf2d_img_hdiv2 + buf2d_img_wdiv2 dd sz_buf2d_img_wdiv2 + buf2d_conv_24_to_8 dd sz_buf2d_conv_24_to_8 + buf2d_conv_24_to_32 dd sz_buf2d_conv_24_to_32 + buf2d_bit_blt dd sz_buf2d_bit_blt + buf2d_bit_blt_transp dd sz_buf2d_bit_blt_transp + buf2d_bit_blt_alpha dd sz_buf2d_bit_blt_alpha + buf2d_curve_bezier dd sz_buf2d_curve_bezier + buf2d_convert_text_matrix dd sz_buf2d_convert_text_matrix + buf2d_draw_text dd sz_buf2d_draw_text + buf2d_crop_color dd sz_buf2d_crop_color + buf2d_offset_h dd sz_buf2d_offset_h + buf2d_flood_fill dd sz_buf2d_flood_fill + buf2d_set_pixel dd sz_buf2d_set_pixel + buf2d_get_pixel dd sz_buf2d_get_pixel + buf2d_vox_brush_create dd sz_buf2d_vox_brush_create + buf2d_vox_brush_delete dd sz_buf2d_vox_brush_delete + buf2d_vox_obj_get_img_w_3g dd sz_buf2d_vox_obj_get_img_w_3g + buf2d_vox_obj_get_img_h_3g dd sz_buf2d_vox_obj_get_img_h_3g + buf2d_vox_obj_draw_1g dd sz_buf2d_vox_obj_draw_1g + buf2d_vox_obj_draw_3g dd sz_buf2d_vox_obj_draw_3g + buf2d_vox_obj_draw_3g_scaled dd sz_buf2d_vox_obj_draw_3g_scaled + buf2d_vox_obj_draw_3g_shadows dd sz_buf2d_vox_obj_draw_3g_shadows + buf2d_vox_obj_draw_pl dd sz_buf2d_vox_obj_draw_pl + buf2d_vox_obj_draw_pl_scaled dd sz_buf2d_vox_obj_draw_pl_scaled + + dd 0,0 + sz_init db 'lib_init',0 + sz_buf2d_create db 'buf2d_create',0 + sz_buf2d_create_f_img db 'buf2d_create_f_img',0 + sz_buf2d_clear db 'buf2d_clear',0 + sz_buf2d_draw db 'buf2d_draw',0 + sz_buf2d_delete db 'buf2d_delete',0 + sz_buf2d_line db 'buf2d_line',0 + sz_buf2d_rect_by_size db 'buf2d_rect_by_size',0 + sz_buf2d_filled_rect_by_size db 'buf2d_filled_rect_by_size',0 + sz_buf2d_circle db 'buf2d_circle',0 + sz_buf2d_img_hdiv2 db 'buf2d_img_hdiv2',0 + sz_buf2d_img_wdiv2 db 'buf2d_img_wdiv2',0 + sz_buf2d_conv_24_to_8 db 'buf2d_conv_24_to_8',0 + sz_buf2d_conv_24_to_32 db 'buf2d_conv_24_to_32',0 + sz_buf2d_bit_blt db 'buf2d_bit_blt',0 + sz_buf2d_bit_blt_transp db 'buf2d_bit_blt_transp',0 + sz_buf2d_bit_blt_alpha db 'buf2d_bit_blt_alpha',0 + sz_buf2d_curve_bezier db 'buf2d_curve_bezier',0 + sz_buf2d_convert_text_matrix db 'buf2d_convert_text_matrix',0 + sz_buf2d_draw_text db 'buf2d_draw_text',0 + sz_buf2d_crop_color db 'buf2d_crop_color',0 + sz_buf2d_offset_h db 'buf2d_offset_h',0 + sz_buf2d_flood_fill db 'buf2d_flood_fill',0 + sz_buf2d_set_pixel db 'buf2d_set_pixel',0 + sz_buf2d_get_pixel db 'buf2d_get_pixel',0 + sz_buf2d_vox_brush_create db 'buf2d_vox_brush_create',0 + sz_buf2d_vox_brush_delete db 'buf2d_vox_brush_delete',0 + sz_buf2d_vox_obj_get_img_w_3g db 'buf2d_vox_obj_get_img_w_3g',0 + sz_buf2d_vox_obj_get_img_h_3g db 'buf2d_vox_obj_get_img_h_3g',0 + sz_buf2d_vox_obj_draw_1g db 'buf2d_vox_obj_draw_1g',0 + sz_buf2d_vox_obj_draw_3g db 'buf2d_vox_obj_draw_3g',0 + sz_buf2d_vox_obj_draw_3g_scaled db 'buf2d_vox_obj_draw_3g_scaled',0 + sz_buf2d_vox_obj_draw_3g_shadows db 'buf2d_vox_obj_draw_3g_shadows',0 + sz_buf2d_vox_obj_draw_pl db 'buf2d_vox_obj_draw_pl',0 + sz_buf2d_vox_obj_draw_pl_scaled db 'buf2d_vox_obj_draw_pl_scaled',0 + +align 4 +import_libini: + dd alib_init2 + ini_get_str dd aini_get_str + ini_get_int dd aini_get_int + ini_get_color dd aini_get_color +dd 0,0 + alib_init2 db 'lib_init',0 + aini_get_str db 'ini_get_str',0 + aini_get_int db 'ini_get_int',0 + aini_get_color db 'ini_get_color',0 + +mouse_dd dd 0x0 +sc system_colors + +align 16 +procinfo process_information + +;буфер основного изображения +align 4 +buf_0: dd 0 ;указатель на дaные изображения +.l: dw 5 ;+4 left +.t: dw 45 ;+6 top +.w: dd 192+6 ;+8 w +.h: dd 224+7 ;+12 h +.color: dd 0xffffff ;+16 color + db 24 ;+20 bit in pixel + +;буфер глубины основного изображения +align 4 +buf_0z: dd 0 + dw 0 ;+4 left + dw 0 ;+6 top +.w: dd 192+6 ;+8 w +.h: dd 224+7 ;+12 h +.color: dd 0 ;+16 color + db 32 ;+20 bit in pixel + +;буфер для рисования среза объекта +align 4 +buf_pl: dd 0 +.l: dw 15+192+6 ;+4 left +.t: dw 45 ;+6 top +.w: dd 320 ;+8 w +.h: dd 330 ;+12 h +.color: dd 0xffffff ;+16 color + db 24 ;+20 bit in pixel + +;буфер для улучшеного рендера +align 4 +buf_r_img: + rb BUF_STRUCT_SIZE +align 4 +buf_r_z: + rb BUF_STRUCT_SIZE + +align 4 +cursor_pointer dd 0 ;указатель на данные для курсора + + +;данные для создания минимального единичного вокселя +align 4 +vox_6_7_z: +dd 0,0,1,1,0,0,\ + 0,2,2,2,2,0,\ + 2,2,2,2,2,2,\ + 2,3,2,2,3,2,\ + 2,3,3,3,3,2,\ + 0,3,3,3,3,0,\ + 0,0,3,3,0,0 + +align 4 +buf_vox: + db 6,7,4,3 ;w,h,h_osn,n + rb BUF_STRUCT_SIZE*(3+1) + +i_end: + wnd_s_pos: ;место для настроек стартовой позиции окна + rq 0 + rb 4096 ;2048 +stacktop: + sys_path rb 1024 + file_name: + rb 1024 ;4096 + library_path rb 1024 + plugin_path rb 1024 ;4096 + openfile_path rb 1024 ;4096 + filename_area rb 256 +mem: diff --git a/programs/media/voxel_editor/utilites/vox_mover.ini b/programs/media/voxel_editor/utilites/vox_mover.ini new file mode 100644 index 0000000000..40861bff73 --- /dev/null +++ b/programs/media/voxel_editor/utilites/vox_mover.ini @@ -0,0 +1,12 @@ +[Window] +t=10 +l=10 +w=740 +h=535 +buf_w=390 +buf_h=455 +c_background=239,255,255 +[Options] +s_zoom=6 +tile_size=5 +file_size=256 ;максимальный размер файла в Кб \ No newline at end of file