Subversion Repositories Kolibri OS

Rev

Rev 5938 | Rev 5948 | 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.         .end:
  525.         ret
  526. endp
  527.  
  528. ;à¨á®¢ ­¨¥ â®ç¥ª ¢ 3d
  529. align 4
  530. draw_3d:
  531.         cmp dword[obj_poi_count],2
  532.         jl .end_f
  533.         stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT ;®ç¨á⨬ ¡ãä¥à æ¢¥â  ¨ £«ã¡¨­ë
  534.         stdcall [glPushMatrix]
  535.         bt dword[draw_mode],bit_light
  536.         jnc @f
  537.                 call SetLight
  538.                 jmp .end_l
  539.         @@:
  540.                 stdcall [glDisable],GL_LIGHTING
  541.         .end_l:
  542.         stdcall [glTranslatef], 0.0,0.0,0.5 ;correct for z
  543.         stdcall [glScalef], [obj_x_scale],[obj_y_scale],[obj_z_scale]
  544.         stdcall [glScalef], 1.0,1.0,0.7 ;correct for z
  545.         stdcall [glRotatef], [angle_z],0.0,0.0,1.0
  546.         stdcall [glRotatef], [angle_y],0.0,1.0,0.0
  547.         stdcall [glRotatef], [angle_x],1.0,0.0,0.0
  548.         stdcall [glTranslatef], [obj_x_centr],[obj_y_centr],[obj_z_centr]
  549.  
  550.         ;à¨á®¢ ­¨¥ â®ç¥ª
  551.         bt dword[draw_mode],bit_vertexes
  552.         jnc .end_points
  553.                 stdcall [glColor3ub],[color_vert+2],[color_vert+1],[color_vert]
  554.                 stdcall [glBegin],GL_POINTS
  555.                 mov eax,[obj_poi_data]
  556.                 mov ebx,[obj_poi_count]
  557.                 @@:
  558.                         stdcall [glVertex3f], [eax],[eax+4],[eax+8]
  559.                         add eax,12
  560.                         dec ebx
  561.                         jnz @b
  562.                 stdcall [glEnd]
  563.         .end_points:
  564.  
  565.         ;à¨á®¢ ­¨¥  ªâ¨¢­®© â®çª¨
  566.         stdcall [tl_node_get_data],tree3
  567.         cmp eax,0
  568.         je @f
  569.                 ;¢ë¤¥«¥­¨¥  ªâ¨¢­®© â®çª¨
  570.                 mov eax,[eax]
  571.  
  572.                 stdcall [glBegin],GL_LINES
  573.                 stdcall [glColor3ub],[color_ox+2],[color_ox+1],[color_ox]
  574.                 stdcall [glVertex3f], [obj_x_min],[eax+4],[eax+8]
  575.                 stdcall [glVertex3f], [obj_x_max],[eax+4],[eax+8]
  576.                 stdcall [glColor3ub],[color_oy+2],[color_oy+1],[color_oy]
  577.                 stdcall [glVertex3f], [eax],[obj_y_min],[eax+8]
  578.                 stdcall [glVertex3f], [eax],[obj_y_max],[eax+8]
  579.                 stdcall [glColor3ub],[color_oz+2],[color_oz+1],[color_oz]
  580.                 stdcall [glVertex3f], [eax],[eax+4],[obj_z_min]
  581.                 stdcall [glVertex3f], [eax],[eax+4],[obj_z_max]
  582.                 stdcall [glEnd]
  583.  
  584.                 stdcall [glColor3ub],[color_select+2],[color_select+1],[color_select]
  585.                 stdcall [glPushMatrix]
  586.                         stdcall [glTranslatef], [eax],[eax+4],[eax+8]
  587.                         stdcall [gluSphere], [qObj], [sph_radius], 8,8
  588.                 stdcall [glPopMatrix]
  589.         @@:
  590.  
  591.         ;à¨á®¢ ­¨¥ ¢ë¤¥«¥­­ëå â®ç¥ª
  592.         cmp dword[obj_poi_sel_c],0
  593.         je .end_select
  594.                 mov ecx,dword[obj_poi_sel_c]
  595.                 stdcall [glColor3ub],[color_select+2],[color_select+1],[color_select]
  596.                 stdcall dword[tl_node_poi_get_info], tree3,0
  597.                 @@:
  598.                         cmp eax,0
  599.                         je .end_select
  600.                         mov ebx,eax
  601.                         cmp word[ebx],ID_ICON_POINT_SEL
  602.                         jne .next_sel
  603.                         stdcall [tl_node_poi_get_data], tree3,ebx
  604.                         mov eax,[eax]
  605.                         stdcall [glPushMatrix]
  606.                                 stdcall [glTranslatef], [eax],[eax+4],[eax+8]
  607.                                 stdcall [gluSphere], [qObj], [sph_radius], 4,4
  608.                         stdcall [glPopMatrix]
  609.                         dec ecx
  610.                         jz .end_select
  611.                         .next_sel:
  612.                         stdcall dword[tl_node_poi_get_next_info], tree3,ebx
  613.                         jmp @b
  614.     .end_select:
  615.  
  616.         ;à¨á®¢ ­¨¥ £à ­¥©
  617.         bt dword[draw_mode],bit_faces
  618.         jnc .end_triangles
  619.         cmp dword[obj_tri_count],0
  620.         je .end_triangles
  621.         cmp dword[obj_poi_count],0
  622.         je .end_triangles
  623.                 bt dword[draw_mode],bit_faces_fill
  624.                 jc @f
  625.                         push GL_LINE
  626.                         jmp .end_0
  627.                 @@:
  628.                         push GL_FILL
  629.                 .end_0:
  630.                 stdcall [glPolygonMode], GL_FRONT_AND_BACK ;mode - 㦥 ¢ á⥪¥
  631.                 stdcall [glColor3ub],[color_face+2],[color_face+1],[color_face]
  632.                 stdcall [glBegin],GL_TRIANGLES
  633.                 mov eax,[obj_tri_data]
  634.                 mov ecx,[obj_tri_count]
  635.                 @@:
  636.                         movzx ebx,word[eax] ;1-ï ¢¥à設 
  637.                         imul ebx,12
  638.                         add ebx,[obj_poi_data]
  639.                         stdcall [glVertex3f], [ebx],[ebx+4],[ebx+8]
  640.                         movzx ebx,word[eax+2] ;2-ï ¢¥à設 
  641.                         imul ebx,12
  642.                         add ebx,[obj_poi_data]
  643.                         stdcall [glVertex3f], [ebx],[ebx+4],[ebx+8]
  644.                         movzx ebx,word[eax+4] ;3-ï ¢¥à設 
  645.                         imul ebx,12
  646.                         add ebx,[obj_poi_data]
  647.                         stdcall [glVertex3f], [ebx],[ebx+4],[ebx+8]
  648.                         add eax,8 ;à §¬¥à âà¥ã£®«ì­¨ª  = (3 ¢¥à設ë (¯® 2¡) + ᢮©á⢠ (2¡))
  649.                         dec ecx
  650.                         jnz @b
  651.                 stdcall [glEnd]
  652.         .end_triangles:
  653.  
  654.         stdcall [glPopMatrix]
  655.         cmp dword[obj_poi_sel_c],0
  656.         je @f
  657.                 stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_select_vert,5,3,[color_select]
  658.         @@:
  659.         stdcall [kosglSwapBuffers]
  660.         .end_f:
  661.         ret
  662.  
  663. align 4
  664. SetLight:
  665.         stdcall [glLightfv], GL_LIGHT0, GL_POSITION, light_position
  666.         stdcall [glLightfv], GL_LIGHT0, GL_SPOT_DIRECTION, light_dir
  667.  
  668.         stdcall [glLightfv], GL_LIGHT0, GL_DIFFUSE, white_light
  669.         stdcall [glLightfv], GL_LIGHT0, GL_SPECULAR, white_light
  670.  
  671.         stdcall [glEnable], GL_COLOR_MATERIAL
  672.         stdcall [glColorMaterial], GL_FRONT, GL_AMBIENT_AND_DIFFUSE
  673.         stdcall [glMaterialfv], GL_FRONT, GL_SPECULAR, mat_specular
  674.         stdcall [glMaterialf], GL_FRONT, GL_SHININESS, mat_shininess
  675.         stdcall [glLightModelfv], GL_LIGHT_MODEL_AMBIENT, lmodel_ambient
  676.  
  677.         stdcall [glEnable],GL_LIGHTING
  678.         stdcall [glEnable],GL_LIGHT0
  679.         ret
  680.  
  681. align 4
  682. proc prop_key uses eax ebx
  683.         mcall 2
  684.  
  685.         test word [edit1.flags],10b ;ed_focus
  686.         je @f
  687.                 stdcall [edit_box_key], edit1
  688.                 jmp .end
  689.         @@:
  690.         test word [edit2.flags],10b
  691.         je @f
  692.                 stdcall [edit_box_key], edit2
  693.                 jmp .end
  694.         @@:
  695.         test word [edit3.flags],10b
  696.         je @f
  697.                 stdcall [edit_box_key], edit3
  698.                 jmp .end
  699.         @@:
  700.         cmp dword[el_focus], tree3
  701.         jne @f
  702.                 stdcall [tl_key], tree3
  703.                 jmp .end
  704.         @@:
  705.  
  706.         cmp ah,178 ;Up
  707.         jne @f
  708.                 fld dword[angle_x]
  709.                 fadd dword[delt_size]
  710.                 fstp dword[angle_x]
  711.                 call draw_3d
  712.                 jmp .end
  713.         @@:
  714.         cmp ah,177 ;Down
  715.         jne @f
  716.                 fld dword[angle_x]
  717.                 fsub dword[delt_size]
  718.                 fstp dword[angle_x]
  719.                 call draw_3d
  720.                 jmp .end
  721.         @@:
  722.         cmp ah,176 ;Left
  723.         jne @f
  724.                 fld dword[angle_y]
  725.                 fadd dword[delt_size]
  726.                 fstp dword[angle_y]
  727.                 call draw_3d
  728.                 jmp .end
  729.         @@:
  730.         cmp ah,179 ;Right
  731.         jne @f
  732.                 fld dword[angle_y]
  733.                 fsub dword[delt_size]
  734.                 fstp dword[angle_y]
  735.                 call draw_3d
  736.                 ;jmp .end
  737.         @@:
  738.         .end:
  739.         ret
  740. endp
  741.  
  742. align 4
  743. prop_mouse:
  744.         push eax ebx
  745.         mcall 37,3
  746.         bt eax,0
  747.         jnc .end_m
  748.                 ;mouse l. but. move
  749.                 cmp dword[mouse_drag],1
  750.                 jne .end_m
  751.                 mcall 37,1 ;get mouse coords
  752.                 mov ebx,eax
  753.                 shr ebx,16 ;mouse.x
  754.                 cmp ebx,3d_wnd_l
  755.                 jg @f
  756.                         mov ebx,3d_wnd_l
  757.                 @@:
  758.                 sub ebx,3d_wnd_l
  759.                 cmp ebx,3d_wnd_w
  760.                 jle @f
  761.                         mov ebx,3d_wnd_w
  762.                 @@:
  763.                 and eax,0xffff ;mouse.y
  764.                 cmp eax,3d_wnd_t
  765.                 jg @f
  766.                         mov eax,3d_wnd_t
  767.                 @@:
  768.                 sub eax,3d_wnd_t
  769.                 cmp eax,3d_wnd_h
  770.                 jle @f
  771.                         mov eax,3d_wnd_h
  772.                 @@:
  773.                 finit
  774.                 fild dword[mouse_y]
  775.                 mov [mouse_y],eax
  776.                 fisub dword[mouse_y]
  777.                 fdiv dword[angle_dxm] ;¥á«¨ ªãàá®à ¤¢¨¦¥âáï ¯® ®á¨ y (¢¢¥àå ¨«¨ ¢­¨§) â® ¯®¢®à®â ¤¥« ¥¬ ¢®ªà㣠®á¨ x
  778.                 fadd dword[angle_x]
  779.                 fstp dword[angle_x]
  780.  
  781.                 fild dword[mouse_x]
  782.                 mov [mouse_x],ebx
  783.                 fisub dword[mouse_x]
  784.                 fdiv dword[angle_dym] ;¥á«¨ ªãàá®à ¤¢¨¦¥âáï ¯® ®á¨ x (¢¢¥àå ¨«¨ ¢­¨§) â® ¯®¢®à®â ¤¥« ¥¬ ¢®ªà㣠®á¨ y
  785.                 fadd dword[angle_y]
  786.                 fstp dword[angle_y]
  787.  
  788.                 call draw_3d
  789.                 jmp .end_d
  790.         .end_m:
  791.         bt eax,16
  792.         jnc @f
  793.                 ;mouse l. but. up
  794.                 mov dword[mouse_drag],0
  795.                 jmp .end_d
  796.         @@:
  797.         bt eax,8
  798.         jnc .end_d
  799.                 ;mouse l. but. press
  800.                 mcall 37,1 ;get mouse coords
  801.                 mov ebx,eax
  802.                 shr ebx,16 ;mouse.x
  803.                 cmp ebx,3d_wnd_l
  804.                 jl .end_d
  805.                 sub ebx,3d_wnd_l
  806.                 cmp ebx,3d_wnd_w
  807.                 jg .end_d
  808.                 and eax,0xffff ;mouse.y
  809.                 cmp eax,3d_wnd_t
  810.                 jl .end_d
  811.                 sub eax,3d_wnd_t
  812.                 cmp eax,3d_wnd_h
  813.                 jg .end_d
  814.                 mov dword[mouse_drag],1
  815.                 mov dword[mouse_x],ebx
  816.                 mov dword[mouse_y],eax
  817.         .end_d:
  818.  
  819.         stdcall [kmainmenu_dispatch_cursorevent], [main_menu]
  820.         stdcall [tl_mouse], tree3
  821.         stdcall [edit_box_mouse], edit1
  822.         stdcall [edit_box_mouse], edit2
  823.         stdcall [edit_box_mouse], edit3
  824.         pop ebx eax
  825.         ret
  826.  
  827. align 4
  828. prop_button:
  829.         mcall 17 ;¯®«ãç¨âì ª®¤ ­ ¦ â®© ª­®¯ª¨
  830.  
  831.         cmp ah,3
  832.         jne @f
  833.                 call get_point_coords
  834.                 call draw_3d
  835.                 jmp prop_still.end
  836.         @@:
  837.         cmp ah,4
  838.         jne @f
  839.                 push eax ebx ecx edi esi
  840.                 stdcall [tl_node_get_data],tree3
  841.                 cmp eax,0
  842.                 je .no_select_1
  843.                         mov ebx,[eax]
  844.                         finit
  845.  
  846.                         mov esi,string1
  847.                         mov edi,Data_String
  848.                         cld
  849.                         mov ecx,8
  850.                         rep movsd
  851.                         call String_to_DoubleFloat
  852.                         fld  qword[Data_Double] ;áç¨â뢠¥¬ ª ª double
  853.                         fstp dword[ebx] ;á®å࠭塞 ª ª float
  854.  
  855.                         mov esi,string2
  856.                         mov edi,Data_String
  857.                         cld
  858.                         mov ecx,8
  859.                         rep movsd
  860.                         call String_to_DoubleFloat
  861.                         fld  qword[Data_Double] ;áç¨â뢠¥¬ ª ª double
  862.                         fstp dword[ebx+4] ;á®å࠭塞 ª ª float
  863.  
  864.                         mov esi,string3
  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+8] ;á®å࠭塞 ª ª float
  872.  
  873.                         ;®¡­®¢«¥­¨¥ ¨§¬¥­¥­­®£® 㧫  ¢ ᯨ᪥ tree3 ¨ £« ¢­®£® ®ª­  (¯® â ©¬¥àã)
  874.                         mov word[NumberSymbolsAD],5
  875.                         mov dword[obj_point],ebx
  876.                         mov dword[obj_point.text],0
  877.                         cld
  878.                         mov ecx,3
  879.                         .coord:
  880.                                 fld dword[ebx]
  881.                                 fstp qword[Data_Double]
  882.                                 call DoubleFloat_to_String
  883.                                 add ebx,4
  884.                                 stdcall str_len, Data_String
  885.                                 mov esi,txt_space
  886.                                 add esi,eax
  887.                                 cmp esi,txt_space.end
  888.                                 jl .normal_size
  889.                                         mov esi,txt_space.end-1 ;¬¨­¨¬ã¬ 1 ¯à®¡¥« ­ã¦­® ¤®¡ ¢¨âì, çâ®-¡ë æ¨äàë ­¥ ᫨¯ «¨áì
  890.                                 .normal_size:
  891.                                 stdcall str_cat, obj_point.text,esi
  892.                                 stdcall str_cat, obj_point.text,Data_String
  893.                                 loop .coord
  894.                         mov byte[obj_point.text],'*' ;®â¬¥ç ¥¬ çâ® ¢¥à設  ¨§¬¥­ï« áì
  895.                         stdcall dword[tl_node_set_data], tree3,obj_point
  896.                         stdcall dword[tl_draw], tree3
  897.                         mov byte[can_save],1 ;¤«ï ¯®ª §  ª­®¯ª¨ '‘®åà ­¨âì'
  898.                         mov dword[offs_last_timer],0 ;¤«ï ®¡­®¢«¥­¨ï ¡«®ª  ¢ â ©¬¥à¥
  899.                         call draw_3d
  900.                 .no_select_1:
  901.                 pop esi edi ecx ebx eax
  902.                 jmp prop_still.end
  903.         @@:
  904.         cmp ah,5
  905.         jne @f
  906.                 call mnu_vertexes_on_off
  907.                 jmp prop_still.end
  908.         @@:
  909.         cmp ah,6
  910.         jne @f
  911.                 call mnu_faces_on_off
  912.                 jmp prop_still.end
  913.         @@:
  914.         cmp ah,7
  915.         jne @f
  916.                 call mnu_faces_fill_on_off
  917.                 jmp prop_still.end
  918.         @@:
  919.         cmp ah,8
  920.         jne @f
  921.                 call mnu_light_on_off
  922.                 jmp prop_still.end
  923.         @@:
  924.         cmp ah,9
  925.         jne @f
  926.                 call mnu_reset_settings
  927.                 jmp prop_still.end
  928.         @@:
  929.         cmp ah,10
  930.         jne @f
  931.                 call mnu_vertexes_select
  932.                 jmp prop_still.end
  933.         @@:
  934.         cmp ah,11
  935.         jne @f
  936.                 call mnu_vertexes_deselect
  937.                 jmp prop_still.end
  938.         @@:
  939.         cmp ah,12
  940.         jne @f
  941.                 call mnu_reset_average_x
  942.                 jmp prop_still.end
  943.         @@:
  944.         cmp ah,13
  945.         jne @f
  946.                 call mnu_reset_average_y
  947.                 jmp prop_still.end
  948.         @@:
  949.         cmp ah,14
  950.         jne @f
  951.                 call mnu_reset_average_z
  952.                 jmp prop_still.end
  953.         @@:
  954.  
  955.         cmp ah,1
  956.         jne prop_still.end
  957. .exit:
  958.         mov dword[tree3.data_img],0 ;ç¨á⨬ 㪠§ â¥«¨ ­  ¨ª®­ª¨ çâ®-¡ë ¨å ­¥ 㤠«¨« ¤¥áâàãªâ®à
  959.         mov dword[tree3.data_img_sys],0 ;â. ª. ®­¨ ¥é¥ ¨á¯®«ì§ãîâìáï ¢ ¤à㣨å í«¥¬¥­â å
  960.         stdcall dword[tl_data_clear], tree3
  961.         mov byte[prop_wnd_run],0 ;®¡­ã«ï¥¬ áç¥â稪 ®ª®­
  962.         mcall -1 ;¢ë室 ¨§ ¯à®£à ¬¬ë
  963.  
  964. align 4
  965. get_point_coords:
  966.         ;§ £à㧪  ª®®à¤¨­ â ¢ editbox-ë
  967.         push eax ebx
  968.         stdcall [tl_node_get_data],tree3
  969.         cmp eax,0
  970.         je @f
  971.                 mov ebx,[eax]
  972.                 mov word[NumberSymbolsAD],8
  973.                 finit
  974.                 fld dword[ebx]
  975.                 fstp qword[Data_Double]
  976.                 call DoubleFloat_to_String
  977.                 stdcall [edit_box_set_text], edit1, Data_String
  978.                 fld dword[ebx+4]
  979.                 fstp qword[Data_Double]
  980.                 call DoubleFloat_to_String
  981.                 stdcall [edit_box_set_text], edit2, Data_String
  982.                 fld dword[ebx+8]
  983.                 fstp qword[Data_Double]
  984.                 call DoubleFloat_to_String
  985.                 stdcall [edit_box_set_text], edit3, Data_String
  986.                 stdcall [edit_box_draw], edit1
  987.                 stdcall [edit_box_draw], edit2
  988.                 stdcall [edit_box_draw], edit3
  989.         @@:
  990.         pop ebx eax
  991.         ret
  992.  
  993. align 4
  994. proc prop_timer_funct uses eax
  995.         ;¯à®á¬ âਢ ¥¬ ¢ë¤¥«¥­­ãî ª®®à¤¨­ âã
  996.         stdcall [tl_node_get_data],tree3
  997.         cmp [cursor_last_draw],eax
  998.         je @f
  999.                 mov [cursor_last_draw],eax
  1000.                 call draw_3d
  1001.         @@:
  1002.         ret
  1003. endp
  1004.  
  1005. ;¨§¬¥­ï¥¬ ०¨¬ à¨á®¢ ­¨ï ¢¥à設
  1006. align 4
  1007. mnu_vertexes_on_off:
  1008.         xor dword[draw_mode], 1 shl bit_vertexes
  1009.         ret
  1010.  
  1011. ;¨§¬¥­ï¥¬ ०¨¬ à¨á®¢ ­¨ï £à ­¥©
  1012. align 4
  1013. mnu_faces_on_off:
  1014.         xor dword[draw_mode], 1 shl bit_faces
  1015.         ret
  1016.  
  1017. ;¨§¬¥­ï¥¬ ª àª á­ë¥ ¨«¨ ᯫ®è­ë¥ £à ­¨
  1018. align 4
  1019. mnu_faces_fill_on_off:
  1020.         xor dword[draw_mode], 1 shl bit_faces_fill
  1021.         or  dword[draw_mode], 1 shl bit_faces ;¢ª«îç ¥¬ ०¨¬ à¨á®¢ ­¨ï £à ­¥© (¥á«¨ ¢¤à㣠¡ë« ®âª«î祭)
  1022.         ret
  1023.  
  1024. ;¢ª«îç ¥¬ ¨«¨ ®âª«îç ¥¬ ®á¢¥é¥­¨¥
  1025. align 4
  1026. mnu_light_on_off:
  1027.         xor dword[draw_mode], 1 shl bit_light
  1028.         ret
  1029.  
  1030. align 4
  1031. mnu_reset_settings:
  1032.         mov dword[angle_x],0.0
  1033.         mov dword[angle_y],0.0
  1034.         mov dword[angle_z],0.0
  1035.         m2m dword[draw_mode],dword[def_dr_mode]
  1036.         ret
  1037.  
  1038. align 4
  1039. proc mnu_vertexes_select uses eax ebx
  1040.         stdcall [tl_node_get_data],tree3
  1041.         cmp eax,0
  1042.         je .no_points
  1043.         stdcall found_block_data,tree3
  1044.         cmp eax,0
  1045.         je .no_points
  1046.                 mov bx,word[eax]
  1047.                 cmp bx,ID_ICON_POINT_SEL
  1048.                 je @f
  1049.                         mov word[eax],ID_ICON_POINT_SEL
  1050.                         inc dword[obj_poi_sel_c]
  1051.                         jmp .change
  1052.                 @@:
  1053.                         mov word[eax],ID_ICON_POINT
  1054.                         dec dword[obj_poi_sel_c]
  1055.                 .change:
  1056.                         mov eax,[obj_poi_sel_c]
  1057.                         stdcall convert_int_to_str, txt_select_vert.count,16
  1058.         .no_points:
  1059.         ret
  1060. endp
  1061.  
  1062. align 4
  1063. proc mnu_vertexes_deselect uses eax
  1064.         cmp dword[obj_poi_sel_c],0
  1065.         je .no_points
  1066.         mov dword[obj_poi_sel_c],0
  1067.         stdcall [tl_node_poi_get_info], tree3,0
  1068.         cmp eax,0
  1069.         je .no_points
  1070.         @@:
  1071.                 mov word[eax],ID_ICON_POINT
  1072.                 stdcall [tl_node_poi_get_next_info], tree3,eax
  1073.                 cmp eax,0
  1074.                 jne @b
  1075.         .no_points:
  1076.         ret
  1077. endp
  1078.  
  1079. align 4
  1080. proc mnu_reset_average_x uses eax ebx ecx edx edi
  1081.         cmp dword[obj_poi_sel_c],2
  1082.         jl .end_select
  1083.                 finit
  1084.                 fldz
  1085.                 mov ecx,dword[obj_poi_sel_c]
  1086.                 stdcall dword[tl_node_poi_get_info], tree3,0
  1087.                 @@:
  1088.                         cmp eax,0
  1089.                         je .end_select
  1090.                         mov ebx,eax
  1091.                         cmp word[ebx],ID_ICON_POINT_SEL
  1092.                         jne .next_sel0
  1093.                                 stdcall [tl_node_poi_get_data], tree3,ebx
  1094.                                 mov eax,[eax]
  1095.                                 fadd dword[eax]
  1096.                                 dec ecx
  1097.                                 jz @f
  1098.                         .next_sel0:
  1099.                         stdcall dword[tl_node_poi_get_next_info], tree3,ebx
  1100.                         jmp @b
  1101.                 @@:
  1102.                 fidiv dword[obj_poi_sel_c]
  1103.                 fstp dword[eax]
  1104.                 mov edx,[eax]
  1105.                 mov ecx,dword[obj_poi_sel_c]
  1106.                 stdcall dword[tl_node_poi_get_info], tree3,0
  1107.                 @@:
  1108.                         cmp eax,0
  1109.                         je .end_select
  1110.                         mov ebx,eax
  1111.                         cmp word[ebx],ID_ICON_POINT_SEL
  1112.                         jne .next_sel1
  1113.                                 stdcall [tl_node_poi_get_data], tree3,ebx
  1114.                                 mov edi,eax
  1115.                                 mov eax,[eax]
  1116.                                 mov [eax],edx
  1117.                                 stdcall update_tree, edi
  1118.                                 dec ecx
  1119.                                 jz @f
  1120.                         .next_sel1:
  1121.                         stdcall dword[tl_node_poi_get_next_info], tree3,ebx
  1122.                         jmp @b
  1123.                 @@:
  1124.     .end_select:
  1125.         ret
  1126. endp
  1127.  
  1128. align 4
  1129. proc mnu_reset_average_y uses eax ebx ecx edx edi
  1130.         cmp dword[obj_poi_sel_c],2
  1131.         jl .end_select
  1132.                 finit
  1133.                 fldz
  1134.                 mov ecx,dword[obj_poi_sel_c]
  1135.                 stdcall dword[tl_node_poi_get_info], tree3,0
  1136.                 @@:
  1137.                         cmp eax,0
  1138.                         je .end_select
  1139.                         mov ebx,eax
  1140.                         cmp word[ebx],ID_ICON_POINT_SEL
  1141.                         jne .next_sel0
  1142.                                 stdcall [tl_node_poi_get_data], tree3,ebx
  1143.                                 mov eax,[eax]
  1144.                                 fadd dword[eax+4]
  1145.                                 dec ecx
  1146.                                 jz @f
  1147.                         .next_sel0:
  1148.                         stdcall dword[tl_node_poi_get_next_info], tree3,ebx
  1149.                         jmp @b
  1150.                 @@:
  1151.                 fidiv dword[obj_poi_sel_c]
  1152.                 fstp dword[eax+4]
  1153.                 mov edx,[eax+4]
  1154.                 mov ecx,dword[obj_poi_sel_c]
  1155.                 stdcall dword[tl_node_poi_get_info], tree3,0
  1156.                 @@:
  1157.                         cmp eax,0
  1158.                         je .end_select
  1159.                         mov ebx,eax
  1160.                         cmp word[ebx],ID_ICON_POINT_SEL
  1161.                         jne .next_sel1
  1162.                                 stdcall [tl_node_poi_get_data], tree3,ebx
  1163.                                 mov edi,eax
  1164.                                 mov eax,[eax]
  1165.                                 mov [eax+4],edx
  1166.                                 stdcall update_tree, edi
  1167.                                 dec ecx
  1168.                                 jz @f
  1169.                         .next_sel1:
  1170.                         stdcall dword[tl_node_poi_get_next_info], tree3,ebx
  1171.                         jmp @b
  1172.                 @@:
  1173.     .end_select:
  1174.         ret
  1175. endp
  1176.  
  1177. align 4
  1178. proc mnu_reset_average_z uses eax ebx ecx edx edi
  1179.         cmp dword[obj_poi_sel_c],2
  1180.         jl .end_select
  1181.                 finit
  1182.                 fldz
  1183.                 mov ecx,dword[obj_poi_sel_c]
  1184.                 stdcall dword[tl_node_poi_get_info], tree3,0
  1185.                 @@:
  1186.                         cmp eax,0
  1187.                         je .end_select
  1188.                         mov ebx,eax
  1189.                         cmp word[ebx],ID_ICON_POINT_SEL
  1190.                         jne .next_sel0
  1191.                                 stdcall [tl_node_poi_get_data], tree3,ebx
  1192.                                 mov eax,[eax]
  1193.                                 fadd dword[eax+8]
  1194.                                 dec ecx
  1195.                                 jz @f
  1196.                         .next_sel0:
  1197.                         stdcall dword[tl_node_poi_get_next_info], tree3,ebx
  1198.                         jmp @b
  1199.                 @@:
  1200.                 fidiv dword[obj_poi_sel_c]
  1201.                 fstp dword[eax+8]
  1202.                 mov edx,[eax+8]
  1203.                 mov ecx,dword[obj_poi_sel_c]
  1204.                 stdcall dword[tl_node_poi_get_info], tree3,0
  1205.                 @@:
  1206.                         cmp eax,0
  1207.                         je .end_select
  1208.                         mov ebx,eax
  1209.                         cmp word[ebx],ID_ICON_POINT_SEL
  1210.                         jne .next_sel1
  1211.                                 stdcall [tl_node_poi_get_data], tree3,ebx
  1212.                                 mov edi,eax
  1213.                                 mov eax,[eax]
  1214.                                 mov [eax+8],edx
  1215.                                 stdcall update_tree, edi
  1216.                                 dec ecx
  1217.                                 jz @f
  1218.                         .next_sel1:
  1219.                         stdcall dword[tl_node_poi_get_next_info], tree3,ebx
  1220.                         jmp @b
  1221.                 @@:
  1222.     .end_select:
  1223.         ret
  1224. endp
  1225.  
  1226. align 4
  1227. proc update_tree h_mem:dword
  1228. pushad
  1229.         mov edi,[h_mem]
  1230.         mov ebx,[edi]
  1231.         finit
  1232.  
  1233.         ;®¡­®¢«¥­¨¥ ¨§¬¥­¥­­®£® 㧫  ¢ ᯨ᪥ tree3 ¨ £« ¢­®£® ®ª­  (¯® â ©¬¥àã)
  1234.         mov word[NumberSymbolsAD],5
  1235.         mov dword[obj_point.text],0
  1236.         cld
  1237.         mov ecx,3
  1238.         .coord:
  1239.                 fld dword[ebx]
  1240.                 fstp qword[Data_Double]
  1241.                 call DoubleFloat_to_String
  1242.                 add ebx,4
  1243.                 stdcall str_len, Data_String
  1244.                 mov esi,txt_space
  1245.                 add esi,eax
  1246.                 cmp esi,txt_space.end
  1247.                 jl .normal_size
  1248.                         mov esi,txt_space.end-1 ;¬¨­¨¬ã¬ 1 ¯à®¡¥« ­ã¦­® ¤®¡ ¢¨âì, çâ®-¡ë æ¨äàë ­¥ ᫨¯ «¨áì
  1249.                 .normal_size:
  1250.                 stdcall str_cat, obj_point.text,esi
  1251.                 stdcall str_cat, obj_point.text,Data_String
  1252.                 loop .coord
  1253.         mov esi,obj_point.text
  1254.         mov byte[esi],'*' ;®â¬¥ç ¥¬ çâ® ¢¥à設  ¨§¬¥­ï« áì
  1255.         mov byte[can_save],1 ;¤«ï ¯®ª §  ª­®¯ª¨ '‘®åà ­¨âì'
  1256.         add edi,4
  1257.         mov ecx,MAX_OBJECT_SIZE-4
  1258.         rep movsb
  1259. popad
  1260.         ret
  1261. endp
  1262.  
  1263. align 4
  1264. def_dr_mode dd 0 ;०¨¬ à¨á®¢ ­¨ï ¯® 㬮«ç ­¨î
  1265. delt_size dd 3.0 ;¨§¬¥­¥­¨¥ 㣫®¢ ¯à¨ ¯®¢®à®â å á ª«¨¢¨ âãàë
  1266. mouse_drag dd 0 ;०¨¬ ¯®¢®à®â  áæ¥­ë ®â ¯¥à¥¬¥é¥­¨¨ ªãàá®à  ¬ëè¨
  1267. mouse_x dd 0
  1268. mouse_y dd 0
  1269. angle_dxm dd 1.7775 ;~ 3d_wnd_w/180 - ¯à¨¡ ¢«¥­¨¥ 㣫®¢ ¯®¢®à®â  áæ¥­ë ¯à¨ ¢à é¥­¨¨ ¬ë襩
  1270. angle_dym dd 1.3335 ;~ 3d_wnd_h/180
  1271. ;angle_dzm dd ?
  1272. draw_mode dd 0 ;०¨¬ à¨á®¢ ­¨ï ®¡ê¥ªâ 
  1273. obj_poi_data dd 0 ;㪠§ â¥«ì ­  ª®®à¤¨­ âë ¢¥à設
  1274. obj_poi_count dd 0 ;ª®««¨ç¥á⢮ ¢¥à設
  1275. obj_poi_sel_c dd 0 ;ª®««¨ç¥á⢮ ¢ë¤¥«¥­­ëå ¢¥à設
  1276. obj_tri_data dd 0 ;㪠§ â¥«ì ­  ¤ ­­ë¥ âà¥ã£®«ì­¨ª®¢
  1277. obj_tri_count dd 0 ;ª®««¨ç¥á⢮ âà¥ã£®«ì­¨ª®¢
  1278. cursor_last_draw dd 0 ;¯®«®¦¥­¨¥ ªãàá®à  ¯à¨ ¯®á«¥¤­¥© ¯à®à¨á®¢ª¥ 3d ®ª­ 
  1279. sph_radius dd 0 ;à ¤¨ãá áä¥àë ¤«ï ¢ë¤¥«¥­¨ï  ªâ¨¢­®© â®çª¨
  1280. obj_x_max dd 0
  1281. obj_x_min dd 0
  1282. obj_x_centr dd 0
  1283. obj_x_scale dd 1.0
  1284. obj_y_max dd 0
  1285. obj_y_min dd 0
  1286. obj_y_centr dd 0
  1287. obj_y_scale dd 1.0
  1288. obj_z_max dd 0
  1289. obj_z_min dd 0
  1290. obj_z_centr dd 0
  1291. obj_z_scale dd 1.0
  1292.  
  1293. capt_p dd 0
  1294.  
  1295. ;¤¥à¥¢® á ®¡ê¥ªâ ¬¨ ¢ ¯®«ì§®¢ â¥«ì᪮¬ ä ©«¥
  1296. tree3 tree_list MAX_OBJECT_SIZE,3, tl_key_no_edit+tl_list_box_mode,\
  1297.         16,16, 0xffffff,0xb0d0ff,0x400040, 5,290,303,140, 16, 4,0, el_focus,\
  1298.         w_scr_t3,get_point_coords
  1299.  
  1300. edit1 edit_box 80,  76, 269, 0xffd0d0, 0xff, 0x80ff, 0, 0x8000, 34, string1, mouse_dd, 0
  1301. edit2 edit_box 80, 160, 269, 0xd0d0ff, 0xff, 0x80ff, 0, 0x8000, 34, string2, mouse_dd, 0
  1302. edit3 edit_box 80, 244, 269, 0xd0ffd0, 0xff, 0x80ff, 0, 0x8000, 34, string3, mouse_dd, 0
  1303. editboxes_end:
  1304.  
  1305. string1 rb 34
  1306. string2 rb 34
  1307. string3 rb 34
  1308.  
  1309. align 4
  1310. w_scr_t3 scrollbar 16, 0,0,0, 15, 100,0,0, 0,0,0, 1
  1311.