Subversion Repositories Kolibri OS

Rev

Rev 5930 | Rev 5938 | 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. SIZE_ONE_FLOAT equ 14
  9. MAX_OBJECT_SIZE equ (4+SIZE_ONE_FLOAT*3+1)
  10.  
  11. bit_vertexes equ 0
  12. bit_faces equ 1
  13. bit_faces_fill equ 2
  14. bit_light equ 3
  15. def_dr_mode equ 0x1111b
  16.  
  17. prop_wnd_run db 0 ;¯¥à¥¬¥­­ ï á«¥¤ïé ï §  ⥬ çâ®-¡ë ­¥ § ¯ã᪠âì ¡®«ìè¥ 1-£® ®ª­  ᮠ᢮©á⢠¬¨ ®¤­®¢à¥¬¥­­®
  18.  
  19. txt_q db '?',0
  20. txt_space:
  21.         db SIZE_ONE_FLOAT dup(' ')
  22. .end:
  23.         db 0
  24.  
  25. rad_c dd 150 ;¤«ï ¢ëç¨á«¥­¨ï à ¤¨ãá 
  26.  
  27. obj_point: ;¤®¡ ¢«ï¥¬ë© ®¡ê¥ªâ
  28.         dd 0   ;㪠§ â¥«ì
  29. .text:
  30.         rb MAX_OBJECT_SIZE
  31.  
  32.  
  33.  
  34. ;¤ ­®¥ ®ª­® (¯à®æ¥áá) ¢ë§ë¢ ¥âìáï ä㭪樥© but_wnd_coords
  35. align 4
  36. prop_start:
  37. pushad
  38.         mcall 40,0x27 ;¬ áª  ®¦¨¤ ¥¬ëå ᮡë⨩
  39.         inc byte[prop_wnd_run]
  40.         mov dword[w_scr_t3.type],1
  41.         call prop_wnd_clear_param
  42.  
  43.         stdcall [tl_node_get_data],tree1
  44.         xor edx,edx
  45.         mov dword[capt_p],txt_q
  46.         cmp eax,0
  47.         je .no_points
  48.                 mov ebx,[eax] ;¯®«ãç ¥¬ §­ ç¥­¨¥ ᤢ¨£  ¢ë¡à ­­®£® ¡«®ª 
  49.                 add ebx,[open_file_lif]
  50.  
  51.                 cmp word[ebx],CHUNK_VERTLIST
  52.                 jne .end_vlist
  53.                         movzx edx,word[ebx+6] ;ª®««¨ç¥á⢮ â®ç¥ª
  54.                         add ebx,8
  55.                         mov dword[capt_p],txt_4110
  56.                         ;¯®¨áª ¤ ­­ëå ¤«ï âà¥ã£®«ìª®¢
  57.                         mov ecx,eax
  58.                         stdcall [tl_node_poi_get_info], tree1,0
  59.                         @@:
  60.                                 mov esi,eax
  61.                                 stdcall [tl_node_poi_get_data], tree1,esi
  62.                                 cmp eax,ecx
  63.                                 je @f ;¥á«¨ ¯®¯ «¨ ­  ¢ë¡à ­­ë© 㧥«
  64.                                 stdcall [tl_node_poi_get_next_info], tree1,esi
  65.                                 cmp eax,0
  66.                                 jne @b
  67.                                 jmp .set_points
  68.                         @@:
  69.                         ;¥á«¨ ­ è«¨ ¢ë¡à ­­ë© 㧥«, â® ¤ «¥¥ ¯ëâ ¥¬áï ­ ©â¨ 㧥« á âà¥ã£®«ì­¨ª ¬¨
  70.                         movzx ecx,byte[esi+2] ;cl - ã஢¥­ì ¢ë¡à ­­®£® 㧫 
  71.                         .cycle_0:
  72.                                 stdcall [tl_node_poi_get_next_info], tree1,esi
  73.                                 cmp eax,0
  74.                                 je .set_points
  75.                                 mov esi,eax
  76.                                 stdcall [tl_node_poi_get_data], tree1,esi
  77.                                 cmp byte[esi+2],cl
  78.                                 jl .set_points
  79.                                 je .found
  80.                                 jmp .cycle_0
  81.                         .found: ;¥á«¨ ­ è«¨ 㧥« ⮣®¦¥ ã஢­ï çâ® ¨ ¢ë¡à ­­ë© 㧥«
  82.                                 cmp eax,0
  83.                                 je .set_points
  84.                                 mov eax,[eax]
  85.                                 add eax,[open_file_lif]
  86.                                 cmp word[eax],CHUNK_FACELIST
  87.                                 jne .cycle_0
  88.                                 movzx ecx,word[eax+6]
  89.                                 mov [obj_tri_count],ecx
  90.                                 add eax,8 ;2+4+2 (chunk+size+count)
  91.                                 mov [obj_tri_data],eax
  92.                         jmp .set_points
  93.                 .end_vlist:
  94.                 cmp word[ebx],CHUNK_TRACKPIVOT
  95.                 jne @f
  96.                         inc edx
  97.                         add ebx,6
  98.                         mov dword[capt_p],txt_b013
  99.                         jmp .set_points
  100.                 @@:
  101.                 cmp word[ebx],0xb014
  102.                 jne @f
  103.                         mov edx,2
  104.                         add ebx,6
  105.                         mov dword[capt_p],txt_b014
  106.                         ;jmp .set_points
  107.                 @@:
  108.                 .set_points:
  109.                 mov [obj_poi_data],ebx
  110.                 mov [obj_poi_count],edx
  111.         .no_points:
  112.  
  113.         ;­ áâனª  ᯨ᪠ ®¡ê¥ªâ®¢
  114.         mov dword[tree3.info_max_count],2
  115.         add dword[tree3.info_max_count],edx ;áâ ¢¨¬ ç¨á«® 㧫®¢, à ¢­®¥ ª®««¨ç¥áâ¢ã â®ç¥ª (+2 ­  ­ ç «® ¨ ª®­¥æ ᯨ᪠)
  116.         stdcall dword[tl_data_init], tree3
  117.         mov eax,dword[icon_tl_sys]
  118.         mov dword[tree3.data_img_sys],eax
  119.         mov eax,dword[icon_toolbar]
  120.         mov dword[tree3.data_img],eax
  121.  
  122.         cmp edx,0
  123.         je .no_object
  124.                 mov word[NumberSymbolsAD],5
  125.                 finit
  126.                 .new_point:
  127.                         mov dword[obj_point],ebx
  128.                         mov dword[obj_point.text],0
  129.                         cld
  130.                         mov ecx,3
  131.                         @@:
  132.                                 fld dword[ebx]
  133.                                 fstp qword[Data_Double]
  134.                                 call DoubleFloat_to_String
  135.                                 add ebx,4
  136.                                 stdcall str_len, Data_String
  137.                                 mov esi,txt_space
  138.                                 add esi,eax
  139.                                 cmp esi,txt_space.end
  140.                                 jl .normal_size
  141.                                         mov esi,txt_space.end-1 ;¬¨­¨¬ã¬ 1 ¯à®¡¥« ­ã¦­® ¤®¡ ¢¨âì, çâ®-¡ë æ¨äàë ­¥ ᫨¯ «¨áì
  142.                                 .normal_size:
  143.                                 stdcall str_cat, obj_point.text,esi
  144.                                 stdcall str_cat, obj_point.text,Data_String
  145.                                 loop @b
  146.                         stdcall dword[tl_node_add], tree3,(ID_ICON_DATA shl 16),obj_point
  147.                         stdcall dword[tl_cur_next], tree3
  148.                         dec edx
  149.                         cmp edx,0
  150.                         jg .new_point
  151.                         stdcall dword[tl_cur_beg], tree3
  152.         .no_object:
  153.         call obj_set_sizes
  154.         edit_boxes_set_sys_color edit1,editboxes_end,sc ;ãáâ ­®¢ª  á¨á⥬­ëå 梥⮢
  155.         stdcall [edit_box_set_text], edit1, txt_q
  156.         stdcall [edit_box_set_text], edit2, txt_q
  157.         stdcall [edit_box_set_text], edit3, txt_q
  158. popad
  159.  
  160.         call prop_red_win
  161.  
  162. ;­¥ ®âà뢠âì íâã äã­ªæ¨î ®â ¯à¥¤ë¤ã饩
  163. align 4
  164. prop_still:
  165.         pushad
  166.  
  167.         mcall 23,10
  168.         or eax,eax
  169.         jnz @f
  170.                 call prop_timer_funct
  171.                 jmp .end
  172.         @@:
  173.  
  174.         cmp al,1 ;¨§¬. ¯®«®¦¥­¨¥ ®ª­ 
  175.         jne @f
  176.                 call prop_red_win
  177.                 jmp .end
  178.         @@:
  179.         cmp al,2
  180.         jne @f
  181.                 call prop_key
  182.                 jmp .end
  183.         @@:
  184.         cmp al,3
  185.         jz prop_button
  186.         cmp al,6
  187.         jne @f
  188.                 call prop_mouse
  189.         @@:
  190. .end:
  191.         popad
  192.         jmp prop_still
  193.  
  194. align 4
  195. prop_red_win:
  196. pushad
  197.         mcall 12,1
  198.  
  199.         xor eax,eax
  200.         mov edi,dword[capt_p] ;children window caption
  201.         mov bx,word[procinfo.box.left]
  202.         add bx,word[buf_0.l]
  203.         add bx,5 ;è¨à¨­  ¡®ª®¢®© à ¬ª¨
  204.         shl ebx,16
  205.         mov bx,prop_wnd_width
  206.         mov cx,word[procinfo.box.top]
  207.         add cx,word[buf_0.t]
  208.         shl ecx,16
  209.         mov cx,prop_wnd_height
  210.         mov edx,0xffffd0+0x33000000
  211.         int 0x40
  212.  
  213.         mov esi,[sc.work_button]
  214.         mcall 8, (5 shl 16)+20, (266 shl 16)+20, 3
  215.         mcall , (30 shl 16)+20, (266 shl 16)+20, 4
  216.  
  217.         mov ebx,[image_data_toolbar]
  218.         add ebx,4*IMAGE_TOOLBAR_ICON_SIZE
  219.         mcall 7, , (16 shl 16)+16, (7 shl 16)+268 ;load
  220.  
  221.         sub ebx,IMAGE_TOOLBAR_ICON_SIZE
  222.         mov edx,(32 shl 16)+268 ;save
  223.         int 0x40
  224.  
  225.         mov dword[w_scr_t3.all_redraw],1
  226.         stdcall [scrollbar_ver_draw],dword w_scr_t3
  227.         stdcall [tl_draw], tree3
  228.         stdcall [edit_box_draw], edit1
  229.         stdcall [edit_box_draw], edit2
  230.         stdcall [edit_box_draw], edit3
  231.  
  232.         stdcall [kmainmenu_draw], [main_menu]
  233.         call draw_3d
  234.         mcall 12,2
  235. popad
  236.         ret
  237.  
  238. ;ãáâ ­®¢ª  ¢á¥å ®á­®¢­ëå ¯¥à¥¬¥­­ëå ¯® 㬮«ç ­¨î
  239. align 4
  240. prop_wnd_clear_param:
  241.         mov dword[angle_x],0.0
  242.         mov dword[angle_y],0.0
  243.         mov dword[angle_z],0.0
  244.         mov dword[obj_poi_data],0
  245.         mov dword[obj_poi_count],0
  246.         mov dword[obj_tri_data],0
  247.         mov dword[obj_tri_count],0
  248.         mov dword[draw_mode],def_dr_mode
  249.         ret
  250.  
  251. ;ãáâ ­®¢ª  à §¬¥à®¢ ®¡ê¥ªâ 
  252. align 4
  253. proc obj_set_sizes uses eax ebx esi
  254.         cmp dword[obj_poi_count],0
  255.         je .end
  256.                 finit
  257.                 mov eax,[obj_poi_data]
  258.                 mov ebx,dword[eax]
  259.                 mov [obj_x_min],ebx
  260.                 mov [obj_x_max],ebx
  261.                 mov ebx,dword[eax+4]
  262.                 mov [obj_y_min],ebx
  263.                 mov [obj_y_max],ebx
  264.                 mov ebx,dword[eax+8]
  265.                 mov [obj_z_min],ebx
  266.                 mov [obj_z_max],ebx
  267.  
  268.         mov ebx,[obj_poi_data]
  269.         mov esi,[obj_poi_count]
  270. align 4
  271.         .cycle_0: ;à ¡®â  á ª®®à¤¨­ â®© x
  272.                 fld dword[ebx]
  273.                 fld dword[obj_x_min]
  274.                 fcomp
  275.                 fstsw ax
  276.                 sahf
  277.                 jb @f
  278.                         mov eax,[ebx]
  279.                         mov [obj_x_min],eax
  280.                         ffree st0
  281.                         fincstp
  282.                         jmp .next_x
  283.                 @@:
  284.                 fld dword[obj_x_max]
  285.                 fcompp
  286.                 fstsw ax
  287.                 sahf
  288.                 ja .next_x
  289.                         mov eax,[ebx]
  290.                         mov [obj_x_max],eax
  291.                 .next_x:
  292.  
  293.                 add ebx,12
  294.                 dec esi
  295.                 jnz .cycle_0
  296.  
  297.                 fld1
  298.                 fld dword[obj_x_max]
  299.                 fsub dword[obj_x_min]
  300.                 fst dword[obj_x_centr]
  301.                 fdivp ;1/size.x
  302.                 fstp dword[obj_x_scale]
  303.  
  304.                 fld dword[obj_x_centr]
  305.                 fld1
  306.                 fld1
  307.                 faddp
  308.                 fdivp ;centr.x = size.x/2
  309.                 fadd dword[obj_x_min]
  310.                 fchs
  311.                 fstp dword[obj_x_centr]
  312.  
  313.         mov ebx,[obj_poi_data]
  314.         mov esi,[obj_poi_count]
  315. align 4
  316.         .cycle_1: ;à ¡®â  á ª®®à¤¨­ â®© y
  317.                 fld dword[ebx+4]
  318.                 fld dword[obj_y_min]
  319.                 fcomp
  320.                 fstsw ax
  321.                 sahf
  322.                 jb @f
  323.                         mov eax,[ebx+4]
  324.                         mov [obj_y_min],eax
  325.                         ffree st0
  326.                         fincstp
  327.                         jmp .next_y
  328.                 @@:
  329.                 fld dword[obj_y_max]
  330.                 fcompp
  331.                 fstsw ax
  332.                 sahf
  333.                 ja .next_y
  334.                         mov eax,[ebx+4]
  335.                         mov [obj_y_max],eax
  336.                 .next_y:
  337.  
  338.                 add ebx,12
  339.                 dec esi
  340.                 jnz .cycle_1
  341.  
  342.                 fld1
  343.                 fld dword[obj_y_max]
  344.                 fsub dword[obj_y_min]
  345.                 fst dword[obj_y_centr]
  346.                 fdivp ;1/size.y
  347.                 fstp dword[obj_y_scale]
  348.  
  349.                 fld dword[obj_y_centr]
  350.                 fld1
  351.                 fld1
  352.                 faddp
  353.                 fdivp ;centr.y = size.y/2
  354.                 fadd dword[obj_y_min]
  355.                 fchs
  356.                 fstp dword[obj_y_centr]
  357.  
  358.         mov ebx,[obj_poi_data]
  359.         mov esi,[obj_poi_count]
  360. align 4
  361.         .cycle_2: ;à ¡®â  á ª®®à¤¨­ â®© z
  362.                 fld dword[ebx+8]
  363.                 fld dword[obj_z_min]
  364.                 fcomp
  365.                 fstsw ax
  366.                 sahf
  367.                 jb @f
  368.                         mov eax,[ebx+8]
  369.                         mov [obj_z_min],eax
  370.                         ffree st0
  371.                         fincstp
  372.                         jmp .next_z
  373.                 @@:
  374.                 fld dword[obj_z_max]
  375.                 fcompp
  376.                 fstsw ax
  377.                 sahf
  378.                 ja .next_z
  379.                         mov eax,[ebx+8]
  380.                         mov [obj_z_max],eax
  381.                 .next_z:
  382.  
  383.                 add ebx,12
  384.                 dec esi
  385.                 jnz .cycle_2
  386.  
  387.                 fld1
  388.                 fld dword[obj_z_max]
  389.                 fsub dword[obj_z_min]
  390.                 fst dword[obj_z_centr]
  391.                 fdivp ;1/size.z
  392.                 fstp dword[obj_z_scale]
  393.  
  394.                 fld dword[obj_z_centr]
  395.                 fld1
  396.                 fld1
  397.                 faddp
  398.                 fdivp ;centr.z = size.z/2
  399.                 fadd dword[obj_z_min]
  400.                 fchs
  401.                 fstp dword[obj_z_centr]
  402.  
  403.                 ;­ å®¤¨¬ à ¤¨ãá ¤«ï áä¥àë
  404.                 fld dword[obj_x_max]
  405.                 fsub dword[obj_x_min]
  406.                 fld dword[obj_y_max]
  407.                 fsub dword[obj_y_min]
  408.                 faddp
  409.                 fild dword[rad_c]
  410.                 fdivp ;radius=(size.x+size.y)/rad_c
  411.                 fstp dword[sph_radius]
  412.         .end:
  413.         ret
  414. endp
  415.  
  416. ;à¨á®¢ ­¨¥ â®ç¥ª ¢ 3d
  417. align 4
  418. draw_3d:
  419.         cmp dword[obj_poi_count],2
  420.         jl .end_f
  421.  
  422.         stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT ;®ç¨á⨬ ¡ãä¥à æ¢¥â  ¨ £«ã¡¨­ë
  423.         stdcall [glPushMatrix]
  424.         bt dword[draw_mode],bit_light
  425.         jnc @f
  426.                 call SetLight
  427.                 jmp .end_l
  428.         @@:
  429.                 stdcall [glDisable],GL_LIGHTING
  430.         .end_l:
  431.         stdcall [glTranslatef], 0.0,0.0,0.5 ;correct for z
  432.         stdcall [glScalef], [obj_x_scale],[obj_y_scale],[obj_z_scale]
  433.         stdcall [glScalef], 1.0,1.0,0.7 ;correct for z
  434.         stdcall [glRotatef], [angle_z],0.0,0.0,1.0
  435.         stdcall [glRotatef], [angle_y],0.0,1.0,0.0
  436.         stdcall [glRotatef], [angle_x],1.0,0.0,0.0
  437.         stdcall [glTranslatef], [obj_x_centr],[obj_y_centr],[obj_z_centr]
  438.  
  439.         ;à¨á®¢ ­¨¥ â®ç¥ª
  440.         bt dword[draw_mode],bit_vertexes
  441.         jnc .end_points
  442.                 stdcall [glColor3f], 1.0,1.0,1.0
  443.                 stdcall [glBegin],GL_POINTS
  444.                 mov eax,[obj_poi_data]
  445.                 mov ebx,[obj_poi_count]
  446.                 @@:
  447.                         stdcall [glVertex3f], [eax],[eax+4],[eax+8]
  448.                         add eax,12
  449.                         dec ebx
  450.                         jnz @b
  451.                 stdcall [glEnd]
  452.         .end_points:
  453.  
  454.         ;à¨á®¢ ­¨¥ ¢ë¤¥«¥­­®© â®çª¨
  455.         stdcall [tl_node_get_data],tree3
  456.         cmp eax,0
  457.         je @f
  458.                 ;¢ë¤¥«¥­¨¥  ªâ¨¢­®© â®çª¨
  459.                 mov eax,[eax]
  460.  
  461.                 stdcall [glBegin],GL_LINES
  462.                 stdcall [glColor3f], 1.0, 0.0, 0.0
  463.                 stdcall [glVertex3f], [obj_x_min],[eax+4],[eax+8]
  464.                 stdcall [glVertex3f], [obj_x_max],[eax+4],[eax+8]
  465.                 stdcall [glColor3f], 0.0, 0.0, 1.0
  466.                 stdcall [glVertex3f], [eax],[obj_y_min],[eax+8]
  467.                 stdcall [glVertex3f], [eax],[obj_y_max],[eax+8]
  468.                 stdcall [glColor3f], 0.0, 1.0, 0.0
  469.                 stdcall [glVertex3f], [eax],[eax+4],[obj_z_min]
  470.                 stdcall [glVertex3f], [eax],[eax+4],[obj_z_max]
  471.                 stdcall [glEnd]
  472.  
  473.                 stdcall [glColor3f], 1.0, 1.0, 0.0
  474.                 stdcall [glPushMatrix]
  475.                         stdcall [glTranslatef], [eax],[eax+4],[eax+8]
  476.                         stdcall [gluSphere], [qObj], [sph_radius], 8,8
  477.                 stdcall [glPopMatrix]
  478.         @@:
  479.  
  480.         ;à¨á®¢ ­¨¥ £à ­¥©
  481.         bt dword[draw_mode],bit_faces
  482.         jnc .end_triangles
  483.         cmp dword[obj_tri_count],0
  484.         je .end_triangles
  485.         cmp dword[obj_poi_count],0
  486.         je .end_triangles
  487.                 stdcall [glColor3f], 0.5,0.5,0.5
  488.                 ;bt dword[draw_mode],bit_faces_fill
  489.                 ;jnc @f
  490.                 ;@@:
  491.                 stdcall [glBegin],GL_TRIANGLES
  492.                 mov eax,[obj_tri_data]
  493.                 mov ecx,[obj_tri_count]
  494.                 @@:
  495.                         movzx ebx,word[eax] ;1-ï ¢¥à設 
  496.                         imul ebx,12
  497.                         add ebx,[obj_poi_data]
  498.                         stdcall [glVertex3f], [ebx],[ebx+4],[ebx+8]
  499.                         movzx ebx,word[eax+2] ;2-ï ¢¥à設 
  500.                         imul ebx,12
  501.                         add ebx,[obj_poi_data]
  502.                         stdcall [glVertex3f], [ebx],[ebx+4],[ebx+8]
  503.                         movzx ebx,word[eax+4] ;3-ï ¢¥à設 
  504.                         imul ebx,12
  505.                         add ebx,[obj_poi_data]
  506.                         stdcall [glVertex3f], [ebx],[ebx+4],[ebx+8]
  507.                         add eax,8 ;à §¬¥à âà¥ã£®«ì­¨ª  = (3 ¢¥à設ë (¯® 2¡) + ᢮©á⢠ (2¡))
  508.                         dec ecx
  509.                         jnz @b
  510.                 stdcall [glEnd]
  511.         .end_triangles:
  512.  
  513.         stdcall [glPopMatrix]
  514.         stdcall [kosglSwapBuffers]
  515.         .end_f:
  516.         ret
  517.  
  518. align 4
  519. SetLight:
  520.         stdcall [glLightfv], GL_LIGHT0, GL_POSITION, light_position
  521.         stdcall [glLightfv], GL_LIGHT0, GL_SPOT_DIRECTION, light_dir
  522.  
  523.         stdcall [glLightfv], GL_LIGHT0, GL_DIFFUSE, white_light
  524.         stdcall [glLightfv], GL_LIGHT0, GL_SPECULAR, white_light
  525.  
  526.         stdcall [glEnable], GL_COLOR_MATERIAL
  527.         stdcall [glColorMaterial], GL_FRONT, GL_AMBIENT_AND_DIFFUSE
  528.         stdcall [glMaterialfv], GL_FRONT, GL_SPECULAR, mat_specular
  529.         stdcall [glMaterialf], GL_FRONT, GL_SHININESS, mat_shininess
  530.         stdcall [glLightModelfv], GL_LIGHT_MODEL_AMBIENT, lmodel_ambient
  531.  
  532.         stdcall [glEnable],GL_LIGHTING
  533.         stdcall [glEnable],GL_LIGHT0
  534.         ret
  535.  
  536. align 4
  537. proc prop_key uses eax ebx
  538.         mcall 2
  539.  
  540.         test word [edit1.flags],10b ;ed_focus
  541.         je @f
  542.                 stdcall [edit_box_key], edit1
  543.                 jmp .end
  544.         @@:
  545.         test word [edit2.flags],10b
  546.         je @f
  547.                 stdcall [edit_box_key], edit2
  548.                 jmp .end
  549.         @@:
  550.         test word [edit3.flags],10b
  551.         je @f
  552.                 stdcall [edit_box_key], edit3
  553.                 jmp .end
  554.         @@:
  555.         cmp dword[el_focus], tree3
  556.         jne @f
  557.                 stdcall [tl_key], tree3
  558.                 jmp .end
  559.         @@:
  560.  
  561.         cmp ah,178 ;Up
  562.         jne @f
  563.                 fld dword[angle_x]
  564.                 fadd dword[delt_size]
  565.                 fstp dword[angle_x]
  566.                 call draw_3d
  567.                 jmp .end
  568.         @@:
  569.         cmp ah,177 ;Down
  570.         jne @f
  571.                 fld dword[angle_x]
  572.                 fsub dword[delt_size]
  573.                 fstp dword[angle_x]
  574.                 call draw_3d
  575.                 jmp .end
  576.         @@:
  577.         cmp ah,176 ;Left
  578.         jne @f
  579.                 fld dword[angle_y]
  580.                 fadd dword[delt_size]
  581.                 fstp dword[angle_y]
  582.                 call draw_3d
  583.                 jmp .end
  584.         @@:
  585.         cmp ah,179 ;Right
  586.         jne @f
  587.                 fld dword[angle_y]
  588.                 fsub dword[delt_size]
  589.                 fstp dword[angle_y]
  590.                 call draw_3d
  591.                 ;jmp .end
  592.         @@:
  593.         .end:
  594.         ret
  595. endp
  596.  
  597. align 4
  598. prop_mouse:
  599.         ;push ecx edi
  600.         stdcall [kmainmenu_dispatch_cursorevent], [main_menu]
  601.         stdcall [tl_mouse], tree3
  602.         stdcall [edit_box_mouse], edit1
  603.         stdcall [edit_box_mouse], edit2
  604.         stdcall [edit_box_mouse], edit3
  605.         ;pop edi ecx
  606.         ret
  607.  
  608. align 4
  609. prop_button:
  610.         mcall 17 ;¯®«ãç¨âì ª®¤ ­ ¦ â®© ª­®¯ª¨
  611.  
  612.         cmp ah,3
  613.         jne @f
  614.                 call get_point_coords
  615.                 call draw_3d
  616.                 jmp prop_still.end
  617.         @@:
  618.         cmp ah,4
  619.         jne @f
  620.                 push eax ebx ecx edi esi
  621.                 stdcall [tl_node_get_data],tree3
  622.                 cmp eax,0
  623.                 je .no_select_1
  624.                         mov ebx,[eax]
  625.                         finit
  626.  
  627.                         mov esi,string1
  628.                         mov edi,Data_String
  629.                         cld
  630.                         mov ecx,8
  631.                         rep movsd
  632.                         call String_to_DoubleFloat
  633.                         fld  qword[Data_Double] ;áç¨â뢠¥¬ ª ª double
  634.                         fstp dword[ebx] ;á®å࠭塞 ª ª float
  635.  
  636.                         mov esi,string2
  637.                         mov edi,Data_String
  638.                         cld
  639.                         mov ecx,8
  640.                         rep movsd
  641.                         call String_to_DoubleFloat
  642.                         fld  qword[Data_Double] ;áç¨â뢠¥¬ ª ª double
  643.                         fstp dword[ebx+4] ;á®å࠭塞 ª ª float
  644.  
  645.                         mov esi,string3
  646.                         mov edi,Data_String
  647.                         cld
  648.                         mov ecx,8
  649.                         rep movsd
  650.                         call String_to_DoubleFloat
  651.                         fld  qword[Data_Double] ;áç¨â뢠¥¬ ª ª double
  652.                         fstp dword[ebx+8] ;á®å࠭塞 ª ª float
  653.  
  654.                         ;®¡­®¢«¥­¨¥ ¨§¬¥­¥­­®£® 㧫  ¢ ᯨ᪥ tree3 ¨ £« ¢­®£® ®ª­  (¯® â ©¬¥àã)
  655.                         mov word[NumberSymbolsAD],5
  656.                         mov dword[obj_point],ebx
  657.                         mov dword[obj_point.text],0
  658.                         cld
  659.                         mov ecx,3
  660.                         .coord:
  661.                                 fld dword[ebx]
  662.                                 fstp qword[Data_Double]
  663.                                 call DoubleFloat_to_String
  664.                                 add ebx,4
  665.                                 stdcall str_len, Data_String
  666.                                 mov esi,txt_space
  667.                                 add esi,eax
  668.                                 cmp esi,txt_space.end
  669.                                 jl .normal_size
  670.                                         mov esi,txt_space.end-1 ;¬¨­¨¬ã¬ 1 ¯à®¡¥« ­ã¦­® ¤®¡ ¢¨âì, çâ®-¡ë æ¨äàë ­¥ ᫨¯ «¨áì
  671.                                 .normal_size:
  672.                                 stdcall str_cat, obj_point.text,esi
  673.                                 stdcall str_cat, obj_point.text,Data_String
  674.                                 loop .coord
  675.                         stdcall dword[tl_node_set_data], tree3,obj_point
  676.                         stdcall dword[tl_draw], tree3
  677.                         mov byte[can_save],1 ;¤«ï ¯®ª §  ª­®¯ª¨ '‘®åà ­¨âì'
  678.                         mov dword[offs_last_timer],0 ;¤«ï ®¡­®¢«¥­¨ï ¡«®ª  ¢ â ©¬¥à¥
  679.                         call draw_3d
  680.                 .no_select_1:
  681.                 pop esi edi ecx ebx eax
  682.                 jmp prop_still.end
  683.         @@:
  684.         cmp ah,5
  685.         jne @f
  686.                 call mnu_vertexes_on_off
  687.                 jmp prop_still.end
  688.         @@:
  689.         cmp ah,6
  690.         jne @f
  691.                 call mnu_faces_on_off
  692.                 jmp prop_still.end
  693.         @@:
  694.         cmp ah,7
  695.         jne @f
  696.                 call mnu_light_on_off
  697.                 jmp prop_still.end
  698.         @@:
  699.  
  700.         cmp ah,1
  701.         jne prop_still.end
  702. .exit:
  703.         mov dword[tree3.data_img],0 ;ç¨á⨬ 㪠§ â¥«¨ ­  ¨ª®­ª¨ çâ®-¡ë ¨å ­¥ 㤠«¨« ¤¥áâàãªâ®à
  704.         mov dword[tree3.data_img_sys],0 ;â. ª. ®­¨ ¥é¥ ¨á¯®«ì§ãîâìáï ¢ ¤à㣨å í«¥¬¥­â å
  705.         stdcall dword[tl_data_clear], tree3
  706.         mov byte[prop_wnd_run],0 ;®¡­ã«ï¥¬ áç¥â稪 ®ª®­
  707.         mcall -1 ;¢ë室 ¨§ ¯à®£à ¬¬ë
  708.  
  709. align 4
  710. get_point_coords:
  711.         ;§ £à㧪  ª®®à¤¨­ â ¢ editbox-ë
  712.         push eax ebx
  713.         stdcall [tl_node_get_data],tree3
  714.         cmp eax,0
  715.         je @f
  716.                 mov ebx,[eax]
  717.                 mov word[NumberSymbolsAD],8
  718.                 finit
  719.                 fld dword[ebx]
  720.                 fstp qword[Data_Double]
  721.                 call DoubleFloat_to_String
  722.                 stdcall [edit_box_set_text], edit1, Data_String
  723.                 fld dword[ebx+4]
  724.                 fstp qword[Data_Double]
  725.                 call DoubleFloat_to_String
  726.                 stdcall [edit_box_set_text], edit2, Data_String
  727.                 fld dword[ebx+8]
  728.                 fstp qword[Data_Double]
  729.                 call DoubleFloat_to_String
  730.                 stdcall [edit_box_set_text], edit3, Data_String
  731.                 stdcall [edit_box_draw], edit1
  732.                 stdcall [edit_box_draw], edit2
  733.                 stdcall [edit_box_draw], edit3
  734.         @@:
  735.         pop ebx eax
  736.         ret
  737.  
  738. align 4
  739. proc prop_timer_funct uses eax
  740.         ;¯à®á¬ âਢ ¥¬ ¢ë¤¥«¥­­ãî ª®®à¤¨­ âã
  741.         stdcall [tl_node_get_data],tree3
  742.         cmp [cursor_last_draw],eax
  743.         je @f
  744.                 mov [cursor_last_draw],eax
  745.                 call draw_3d
  746.         @@:
  747.         ret
  748. endp
  749.  
  750. align 4
  751. mnu_vertexes_on_off:
  752.         xor dword[draw_mode], 1 shl bit_vertexes
  753.         ret
  754.  
  755. align 4
  756. mnu_faces_on_off:
  757.         xor dword[draw_mode], 1 shl bit_faces
  758.         ret
  759.  
  760. align 4
  761. mnu_light_on_off:
  762.         xor dword[draw_mode], 1 shl bit_light
  763.         ret
  764.  
  765. align 4
  766. draw_mode dd 0
  767. obj_poi_data dd 0 ;㪠§ â¥«ì ­  ª®®à¤¨­ âë ¢¥à設
  768. obj_poi_count dd 0 ;ª®««¨ç¥á⢮ ¢¥à設
  769. obj_tri_data dd 0 ;㪠§ â¥«ì ­  ¤ ­­ë¥ âà¥ã£®«ì­¨ª®¢
  770. obj_tri_count dd 0 ;ª®««¨ç¥á⢮ âà¥ã£®«ì­¨ª®¢
  771. cursor_last_draw dd 0 ;¯®«®¦¥­¨¥ ªãàá®à  ¯à¨ ¯®á«¥¤­¥© ¯à®à¨á®¢ª¥ 3d ®ª­ 
  772. sph_radius dd 0 ;à ¤¨ãá áä¥àë ¤«ï ¢ë¤¥«¥­¨ï  ªâ¨¢­®© â®çª¨
  773. obj_x_max dd 0
  774. obj_x_min dd 0
  775. obj_x_centr dd 0
  776. obj_x_scale dd 1.0
  777. obj_y_max dd 0
  778. obj_y_min dd 0
  779. obj_y_centr dd 0
  780. obj_y_scale dd 1.0
  781. obj_z_max dd 0
  782. obj_z_min dd 0
  783. obj_z_centr dd 0
  784. obj_z_scale dd 1.0
  785.  
  786. capt_p dd 0
  787.  
  788. ;¤¥à¥¢® á ®¡ê¥ªâ ¬¨ ¢ ¯®«ì§®¢ â¥«ì᪮¬ ä ©«¥
  789. tree3 tree_list MAX_OBJECT_SIZE,3, tl_key_no_edit+tl_list_box_mode,\
  790.         16,16, 0xffffff,0xb0d0ff,0x400040, 5,290,303,140, 16, 4,0, el_focus,\
  791.         w_scr_t3,get_point_coords
  792.  
  793. edit1 edit_box 80,  76, 269, 0xffd0d0, 0xff, 0x80ff, 0, 0x8000, 34, string1, mouse_dd, 0
  794. edit2 edit_box 80, 160, 269, 0xd0d0ff, 0xff, 0x80ff, 0, 0x8000, 34, string2, mouse_dd, 0
  795. edit3 edit_box 80, 244, 269, 0xd0ffd0, 0xff, 0x80ff, 0, 0x8000, 34, string3, mouse_dd, 0
  796. editboxes_end:
  797.  
  798. string1 rb 34
  799. string2 rb 34
  800. string3 rb 34
  801.  
  802. align 4
  803. w_scr_t3 scrollbar 16, 0,0,0, 15, 100,0,0, 0,0,0, 1
  804.