Subversion Repositories Kolibri OS

Rev

Rev 5944 | Rev 6022 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

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