Subversion Repositories Kolibri OS

Rev

Rev 5911 | Rev 5935 | 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. prop_wnd_run db 0 ;¯¥à¥¬¥­­ ï á«¥¤ïé ï §  ⥬ çâ®-¡ë ­¥ § ¯ã᪠âì ¡®«ìè¥ 1-£® ®ª­  ᮠ᢮©á⢠¬¨ ®¤­®¢à¥¬¥­­®
  12.  
  13. txt_q db '?',0
  14. txt_space:
  15.         db SIZE_ONE_FLOAT dup(' ')
  16. .end:
  17.         db 0
  18.  
  19. rad_c dd 150 ;¤«ï ¢ëç¨á«¥­¨ï à ¤¨ãá 
  20.  
  21. obj_point: ;¤®¡ ¢«ï¥¬ë© ®¡ê¥ªâ
  22.         dd 0   ;㪠§ â¥«ì
  23. .text:
  24.         rb MAX_OBJECT_SIZE
  25.  
  26.  
  27.  
  28. ;¤ ­®¥ ®ª­® (¯à®æ¥áá) ¢ë§ë¢ ¥âìáï ä㭪樥© but_wnd_coords
  29. align 4
  30. prop_start:
  31. pushad
  32.         mcall 40,0x27 ;¬ áª  ®¦¨¤ ¥¬ëå ᮡë⨩
  33.         inc byte[prop_wnd_run]
  34.         mov dword[w_scr_t3.type],1
  35.  
  36.         stdcall [tl_node_get_data],tree1
  37.         xor edx,edx
  38.         mov dword[capt_p],txt_q
  39.         cmp eax,0
  40.         je .no_points
  41.                 mov ebx,dword[eax] ;¯®«ãç ¥¬ §­ ç¥­¨¥ ᤢ¨£  ¢ë¡à ­­®£® ¡«®ª 
  42.                 add ebx,dword[open_file_lif]
  43.  
  44.                 cmp word[ebx],CHUNK_VERTLIST
  45.                 jne @f
  46.                         movzx edx,word[ebx+6] ;ª®««¨ç¥á⢮ â®ç¥ª
  47.                         add ebx,8
  48.                         mov dword[capt_p],txt_4110
  49.                         jmp .no_points
  50.                 @@:
  51.                 cmp word[ebx],0xb013
  52.                 jne @f
  53.                         inc edx
  54.                         add ebx,6
  55.                         mov dword[capt_p],txt_b013
  56.                         jmp .no_points
  57.                 @@:
  58.                 cmp word[ebx],0xb014
  59.                 jne @f
  60.                         mov edx,2
  61.                         add ebx,6
  62.                         mov dword[capt_p],txt_b014
  63.                         ;jmp .no_points
  64.                 @@:
  65.         .no_points:
  66.  
  67.         ;­ áâனª  ᯨ᪠ ®¡ê¥ªâ®¢
  68.         mov dword[tree3.info_max_count],2
  69.         add dword[tree3.info_max_count],edx ;áâ ¢¨¬ ç¨á«® 㧫®¢, à ¢­®¥ ª®««¨ç¥áâ¢ã â®ç¥ª (+2 ­  ­ ç «® ¨ ª®­¥æ ᯨ᪠)
  70.         stdcall dword[tl_data_init], tree3
  71.         mov eax,dword[icon_tl_sys]
  72.         mov dword[tree3.data_img_sys],eax
  73.         mov eax,dword[icon_toolbar]
  74.         mov dword[tree3.data_img],eax
  75.  
  76.         cmp edx,0
  77.         je .no_object
  78.                 mov word[NumberSymbolsAD],5
  79.                 finit
  80.                 .new_point:
  81.                         mov dword[obj_point],ebx
  82.                         mov dword[obj_point.text],0
  83.                         cld
  84.                         mov ecx,3
  85.                         @@:
  86.                                 fld dword[ebx]
  87.                                 fstp qword[Data_Double]
  88.                                 call DoubleFloat_to_String
  89.                                 add ebx,4
  90.                                 stdcall str_len, Data_String
  91.                                 mov esi,txt_space
  92.                                 add esi,eax
  93.                                 cmp esi,txt_space.end
  94.                                 jl .normal_size
  95.                                         mov esi,txt_space.end-1 ;¬¨­¨¬ã¬ 1 ¯à®¡¥« ­ã¦­® ¤®¡ ¢¨âì, çâ®-¡ë æ¨äàë ­¥ ᫨¯ «¨áì
  96.                                 .normal_size:
  97.                                 stdcall str_cat, obj_point.text,esi
  98.                                 stdcall str_cat, obj_point.text,Data_String
  99.                                 loop @b
  100.                         stdcall dword[tl_node_add], tree3,(ID_ICON_DATA shl 16),obj_point
  101.                         stdcall dword[tl_cur_next], tree3
  102.                         dec edx
  103.                         cmp edx,0
  104.                         jg .new_point
  105.                         stdcall dword[tl_cur_beg], tree3
  106.         .no_object:
  107.         call obj_set_sizes
  108.         edit_boxes_set_sys_color edit1,editboxes_end,sc ;ãáâ ­®¢ª  á¨á⥬­ëå 梥⮢
  109.         stdcall [edit_box_set_text], edit1, txt_q
  110.         stdcall [edit_box_set_text], edit2, txt_q
  111.         stdcall [edit_box_set_text], edit3, txt_q
  112. popad
  113.  
  114.         call prop_red_win
  115.  
  116. ;­¥ ®âà뢠âì íâã äã­ªæ¨î ®â ¯à¥¤ë¤ã饩
  117. align 4
  118. prop_still:
  119.         pushad
  120.         mcall 10
  121.  
  122.         cmp al,1 ;¨§¬. ¯®«®¦¥­¨¥ ®ª­ 
  123.         jne @f
  124.                 call prop_red_win
  125.                 jmp .end
  126.         @@:
  127.         cmp al,2
  128.         jne @f
  129.                 call prop_key
  130.                 jmp .end
  131.         @@:
  132.         cmp al,3
  133.         jz prop_button
  134.         cmp al,6
  135.         jne @f
  136.                 call prop_mouse
  137.         @@:
  138. .end:
  139.         popad
  140.         jmp prop_still
  141.  
  142. align 4
  143. prop_red_win:
  144. pushad
  145.         mcall 12,1
  146.  
  147.         xor eax,eax
  148.         mov edi,dword[capt_p] ;children window caption
  149.         mov bx,word[procinfo.box.left]
  150.         add bx,word[buf_0.l]
  151.         add bx,5 ;è¨à¨­  ¡®ª®¢®© à ¬ª¨
  152.         shl ebx,16
  153.         mov bx,prop_wnd_width
  154.         mov cx,word[procinfo.box.top]
  155.         add cx,word[buf_0.t]
  156.         shl ecx,16
  157.         mov cx,prop_wnd_height
  158.         mov edx,0xffffd0+0x33000000
  159.         int 0x40
  160.  
  161.         mov esi,[sc.work_button]
  162.         mcall 8, (5 shl 16)+20, (246 shl 16)+20, 3
  163.         mcall , (30 shl 16)+20, (246 shl 16)+20, 4
  164.  
  165.         mov ebx,[image_data_toolbar]
  166.         add ebx,4*IMAGE_TOOLBAR_ICON_SIZE
  167.         mcall 7, , (16 shl 16)+16, (7 shl 16)+247 ;load
  168.  
  169.         sub ebx,IMAGE_TOOLBAR_ICON_SIZE
  170.         mov edx,(32 shl 16)+247 ;save
  171.         int 0x40
  172.  
  173.         mov dword[w_scr_t3.all_redraw],1
  174.         stdcall [scrollbar_ver_draw],dword w_scr_t3
  175.         stdcall [tl_draw], tree3
  176.         stdcall [edit_box_draw], edit1
  177.         stdcall [edit_box_draw], edit2
  178.         stdcall [edit_box_draw], edit3
  179.  
  180.         call draw_3d
  181.         mcall 12,2
  182. popad
  183.         ret
  184.  
  185. align 4
  186. proc obj_set_sizes uses eax ebx esi
  187.         stdcall dword[tl_node_poi_get_info], tree3,0
  188.         cmp eax,0
  189.         je .end
  190.                 stdcall [tl_node_poi_get_data], tree3,eax
  191.                 finit
  192.                 mov eax,[eax]
  193.                 mov ebx,dword[eax]
  194.                 mov [obj_x_min],ebx
  195.                 mov [obj_x_max],ebx
  196.                 mov ebx,dword[eax+4]
  197.                 mov [obj_y_min],ebx
  198.                 mov [obj_y_max],ebx
  199.                 mov ebx,dword[eax+8]
  200.                 mov [obj_z_min],ebx
  201.                 mov [obj_z_max],ebx
  202.  
  203.         stdcall dword[tl_node_poi_get_info], tree3,0
  204. align 4
  205.         .cycle_0: ;à ¡®â  á ª®®à¤¨­ â®© x
  206.                 mov esi,eax
  207.                 stdcall [tl_node_poi_get_data], tree3,esi
  208.                 mov ebx,[eax]
  209.  
  210.                 fld dword[ebx]
  211.                 fld dword[obj_x_min]
  212.                 fcomp
  213.                 fstsw ax
  214.                 sahf
  215.                 jb @f
  216.                         mov eax,[ebx]
  217.                         mov [obj_x_min],eax
  218.                         ffree st0
  219.                         fincstp
  220.                         jmp .next_x
  221.                 @@:
  222.                 fld dword[obj_x_max]
  223.                 fcompp
  224.                 fstsw ax
  225.                 sahf
  226.                 ja .next_x
  227.                         mov eax,[ebx]
  228.                         mov [obj_x_max],eax
  229.                 .next_x:
  230.  
  231.                 stdcall dword[tl_node_poi_get_next_info], tree3,esi
  232.                 cmp eax,0
  233.                 jne .cycle_0
  234.  
  235.                 fld1
  236.                 fld dword[obj_x_max]
  237.                 fsub dword[obj_x_min]
  238.                 fst dword[obj_x_centr]
  239.                 fdivp ;1/size.x
  240.                 fstp dword[obj_x_scale]
  241.  
  242.                 fld dword[obj_x_centr]
  243.                 fld1
  244.                 fld1
  245.                 faddp
  246.                 fdivp ;centr.x = size.x/2
  247.                 fadd dword[obj_x_min]
  248.                 fchs
  249.                 fstp dword[obj_x_centr]
  250.  
  251.         stdcall dword[tl_node_poi_get_info], tree3,0
  252. align 4
  253.         .cycle_1: ;à ¡®â  á ª®®à¤¨­ â®© y
  254.                 mov esi,eax
  255.                 stdcall [tl_node_poi_get_data], tree3,esi
  256.                 mov ebx,[eax]
  257.  
  258.                 fld dword[ebx+4]
  259.                 fld dword[obj_y_min]
  260.                 fcomp
  261.                 fstsw ax
  262.                 sahf
  263.                 jb @f
  264.                         mov eax,[ebx+4]
  265.                         mov [obj_y_min],eax
  266.                         ffree st0
  267.                         fincstp
  268.                         jmp .next_y
  269.                 @@:
  270.                 fld dword[obj_y_max]
  271.                 fcompp
  272.                 fstsw ax
  273.                 sahf
  274.                 ja .next_y
  275.                         mov eax,[ebx+4]
  276.                         mov [obj_y_max],eax
  277.                 .next_y:
  278.  
  279.                 stdcall dword[tl_node_poi_get_next_info], tree3,esi
  280.                 cmp eax,0
  281.                 jne .cycle_1
  282.  
  283.                 fld1
  284.                 fld dword[obj_y_max]
  285.                 fsub dword[obj_y_min]
  286.                 fst dword[obj_y_centr]
  287.                 fdivp ;1/size.y
  288.                 fstp dword[obj_y_scale]
  289.  
  290.                 fld dword[obj_y_centr]
  291.                 fld1
  292.                 fld1
  293.                 faddp
  294.                 fdivp ;centr.y = size.y/2
  295.                 fadd dword[obj_y_min]
  296.                 fchs
  297.                 fstp dword[obj_y_centr]
  298.  
  299.         stdcall dword[tl_node_poi_get_info], tree3,0
  300. align 4
  301.         .cycle_2: ;à ¡®â  á ª®®à¤¨­ â®© z
  302.                 mov esi,eax
  303.                 stdcall [tl_node_poi_get_data], tree3,esi
  304.                 mov ebx,[eax]
  305.  
  306.                 fld dword[ebx+8]
  307.                 fld dword[obj_z_min]
  308.                 fcomp
  309.                 fstsw ax
  310.                 sahf
  311.                 jb @f
  312.                         mov eax,[ebx+8]
  313.                         mov [obj_z_min],eax
  314.                         ffree st0
  315.                         fincstp
  316.                         jmp .next_z
  317.                 @@:
  318.                 fld dword[obj_z_max]
  319.                 fcompp
  320.                 fstsw ax
  321.                 sahf
  322.                 ja .next_z
  323.                         mov eax,[ebx+8]
  324.                         mov [obj_z_max],eax
  325.                 .next_z:
  326.  
  327.                 stdcall dword[tl_node_poi_get_next_info], tree3,esi
  328.                 cmp eax,0
  329.                 jne .cycle_2
  330.  
  331.                 fld1
  332.                 fld dword[obj_z_max]
  333.                 fsub dword[obj_z_min]
  334.                 fst dword[obj_z_centr]
  335.                 fdivp ;1/size.z
  336.                 fstp dword[obj_z_scale]
  337.  
  338.                 fld dword[obj_z_centr]
  339.                 fld1
  340.                 fld1
  341.                 faddp
  342.                 fdivp ;centr.z = size.z/2
  343.                 fadd dword[obj_z_min]
  344.                 fchs
  345.                 fstp dword[obj_z_centr]
  346.  
  347.                 ;­ å®¤¨¬ à ¤¨ãá ¤«ï áä¥àë
  348.                 fld dword[obj_x_max]
  349.                 fsub dword[obj_x_min]
  350.                 fld dword[obj_y_max]
  351.                 fsub dword[obj_y_min]
  352.                 faddp
  353.                 fild dword[rad_c]
  354.                 fdivp ;radius=(size.x+size.y)/rad_c
  355.                 fstp dword[sph_radius]
  356.         .end:
  357.         ret
  358. endp
  359.  
  360. ;à¨á®¢ ­¨¥ â®ç¥ª ¢ 3d
  361. align 4
  362. draw_3d:
  363.         stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT ;®ç¨á⨬ ¡ãä¥à æ¢¥â  ¨ £«ã¡¨­ë
  364.         stdcall [glPushMatrix]
  365.         stdcall [glTranslatef], 0.0,0.0,0.5 ;correct for z
  366.         stdcall [glScalef], [obj_x_scale],[obj_y_scale],[obj_z_scale]
  367.         stdcall [glScalef], 1.0,1.0,0.7 ;correct for z
  368.         stdcall [glRotatef], [angle_z],0.0,0.0,1.0
  369.         stdcall [glRotatef], [angle_y],0.0,1.0,0.0
  370.         stdcall [glRotatef], [angle_x],1.0,0.0,0.0
  371.         stdcall [glTranslatef], [obj_x_centr],[obj_y_centr],[obj_z_centr]
  372.  
  373.         stdcall [glColor3f], 1.0,1.0,1.0
  374.         stdcall [glBegin],GL_POINTS
  375.  
  376.         stdcall dword[tl_node_poi_get_info], tree3,0
  377.         @@:
  378.                 cmp eax,0
  379.                 je @f
  380.                 mov esi,eax
  381.                 stdcall [tl_node_poi_get_data], tree3,esi
  382.                 mov eax,[eax]
  383.                 stdcall [glVertex3f], [eax],[eax+4],[eax+8]
  384.                 stdcall dword[tl_node_poi_get_next_info], tree3,esi
  385.                 jmp @b
  386.         @@:
  387.         stdcall [glEnd]
  388.  
  389.         stdcall [tl_node_get_data],tree3
  390.         cmp eax,0
  391.         je @f
  392.                 ;¢ë¤¥«¥­¨¥  ªâ¨¢­®© â®çª¨
  393.                 mov eax,[eax]
  394.  
  395.                 stdcall [glBegin],GL_LINES
  396.                 stdcall [glColor3f], 1.0, 0.0, 0.0
  397.                 stdcall [glVertex3f], [obj_x_min],[eax+4],[eax+8]
  398.                 stdcall [glVertex3f], [obj_x_max],[eax+4],[eax+8]
  399.                 stdcall [glColor3f], 0.0, 0.0, 1.0
  400.                 stdcall [glVertex3f], [eax],[obj_y_min],[eax+8]
  401.                 stdcall [glVertex3f], [eax],[obj_y_max],[eax+8]
  402.                 stdcall [glColor3f], 0.0, 1.0, 0.0
  403.                 stdcall [glVertex3f], [eax],[eax+4],[obj_z_min]
  404.                 stdcall [glVertex3f], [eax],[eax+4],[obj_z_max]
  405.                 stdcall [glEnd]
  406.  
  407.                 stdcall [glColor3f], 1.0, 1.0, 0.0
  408.                 stdcall [glTranslatef], [eax],[eax+4],[eax+8]
  409.                 stdcall [gluSphere], [qObj], [sph_radius], 8,8
  410.         @@:
  411.  
  412.         stdcall [glPopMatrix]
  413.         stdcall [kosglSwapBuffers]
  414.         ret
  415.  
  416. align 4
  417. prop_key:
  418. push eax
  419.         mcall 2
  420.  
  421.         test word [edit1.flags],10b ;ed_focus
  422.         je @f
  423.                 stdcall [edit_box_key], edit1
  424.                 jmp .end
  425.         @@:
  426.         test word [edit2.flags],10b
  427.         je @f
  428.                 stdcall [edit_box_key], edit2
  429.                 jmp .end
  430.         @@:
  431.         test word [edit3.flags],10b
  432.         je @f
  433.                 stdcall [edit_box_key], edit3
  434.                 jmp .end
  435.         @@:
  436.         stdcall [tl_key], tree3
  437.  
  438.         cmp ah,178 ;Up
  439.         jne @f
  440.                 fld dword[angle_x]
  441.                 fadd dword[delt_size]
  442.                 fstp dword[angle_x]
  443.                 call draw_3d
  444.                 jmp .end
  445.         @@:
  446.         cmp ah,177 ;Down
  447.         jne @f
  448.                 fld dword[angle_x]
  449.                 fsub dword[delt_size]
  450.                 fstp dword[angle_x]
  451.                 call draw_3d
  452.                 jmp .end
  453.         @@:
  454.         cmp ah,176 ;Left
  455.         jne @f
  456.                 fld dword[angle_y]
  457.                 fadd dword[delt_size]
  458.                 fstp dword[angle_y]
  459.                 call draw_3d
  460.                 jmp .end
  461.         @@:
  462.         cmp ah,179 ;Right
  463.         jne @f
  464.                 fld dword[angle_y]
  465.                 fsub dword[delt_size]
  466.                 fstp dword[angle_y]
  467.                 call draw_3d
  468.                 ;jmp .end
  469.         @@:
  470.         .end:
  471. pop eax
  472.         ret
  473.  
  474. align 4
  475. prop_mouse:
  476.         ;push ecx edi
  477.         stdcall [tl_mouse], tree3
  478.         stdcall [edit_box_mouse], edit1
  479.         stdcall [edit_box_mouse], edit2
  480.         stdcall [edit_box_mouse], edit3
  481.         ;pop edi ecx
  482.         ret
  483.  
  484. align 4
  485. prop_button:
  486.         mcall 17 ;¯®«ãç¨âì ª®¤ ­ ¦ â®© ª­®¯ª¨
  487.  
  488.         cmp ah,3
  489.         jne @f
  490.                 call get_point_coords
  491.                 call draw_3d
  492.                 jmp prop_still.end
  493.         @@:
  494.         cmp ah,4
  495.         jne @f
  496.                 push eax ebx ecx edi esi
  497.                 stdcall [tl_node_get_data],tree3
  498.                 cmp eax,0
  499.                 je .no_select_1
  500.                         mov ebx,[eax]
  501.                         finit
  502.  
  503.                         mov esi,string1
  504.                         mov edi,Data_String
  505.                         cld
  506.                         mov ecx,8
  507.                         rep movsd
  508.                         call String_to_DoubleFloat
  509.                         fld  qword[Data_Double] ;áç¨â뢠¥¬ ª ª double
  510.                         fstp dword[ebx] ;á®å࠭塞 ª ª float
  511.  
  512.                         mov esi,string2
  513.                         mov edi,Data_String
  514.                         cld
  515.                         mov ecx,8
  516.                         rep movsd
  517.                         call String_to_DoubleFloat
  518.                         fld  qword[Data_Double] ;áç¨â뢠¥¬ ª ª double
  519.                         fstp dword[ebx+4] ;á®å࠭塞 ª ª float
  520.  
  521.                         mov esi,string3
  522.                         mov edi,Data_String
  523.                         cld
  524.                         mov ecx,8
  525.                         rep movsd
  526.                         call String_to_DoubleFloat
  527.                         fld  qword[Data_Double] ;áç¨â뢠¥¬ ª ª double
  528.                         fstp dword[ebx+8] ;á®å࠭塞 ª ª float
  529.  
  530.                         ;®¡­®¢«¥­¨¥ ¨§¬¥­¥­­®£® 㧫  ¢ ᯨ᪥ tree3 ¨ £« ¢­®£® ®ª­  (¯® â ©¬¥àã)
  531.                         mov word[NumberSymbolsAD],5
  532.                         mov dword[obj_point],ebx
  533.                         mov dword[obj_point.text],0
  534.                         cld
  535.                         mov ecx,3
  536.                         .coord:
  537.                                 fld dword[ebx]
  538.                                 fstp qword[Data_Double]
  539.                                 call DoubleFloat_to_String
  540.                                 add ebx,4
  541.                                 stdcall str_len, Data_String
  542.                                 mov esi,txt_space
  543.                                 add esi,eax
  544.                                 cmp esi,txt_space.end
  545.                                 jl .normal_size
  546.                                         mov esi,txt_space.end-1 ;¬¨­¨¬ã¬ 1 ¯à®¡¥« ­ã¦­® ¤®¡ ¢¨âì, çâ®-¡ë æ¨äàë ­¥ ᫨¯ «¨áì
  547.                                 .normal_size:
  548.                                 stdcall str_cat, obj_point.text,esi
  549.                                 stdcall str_cat, obj_point.text,Data_String
  550.                                 loop .coord
  551.                         stdcall dword[tl_node_set_data], tree3,obj_point
  552.                         stdcall dword[tl_draw], tree3
  553.                         mov byte[can_save],1 ;¤«ï ¯®ª §  ª­®¯ª¨ '‘®åà ­¨âì'
  554.                         mov dword[offs_last_timer],0 ;¤«ï ®¡­®¢«¥­¨ï ¡«®ª  ¢ â ©¬¥à¥
  555.                         call draw_3d
  556.                 .no_select_1:
  557.                 pop esi edi ecx ebx eax
  558.                 jmp prop_still.end
  559.         @@:
  560.  
  561.         cmp ah,1
  562.         jne prop_still.end
  563. .exit:
  564.         mov dword[tree3.data_img],0 ;ç¨á⨬ 㪠§ â¥«¨ ­  ¨ª®­ª¨ çâ®-¡ë ¨å ­¥ 㤠«¨« ¤¥áâàãªâ®à
  565.         mov dword[tree3.data_img_sys],0 ;â. ª. ®­¨ ¥é¥ ¨á¯®«ì§ãîâìáï ¢ ¤à㣨å í«¥¬¥­â å
  566.         stdcall dword[tl_data_clear], tree3
  567.         mov byte[prop_wnd_run],0 ;®¡­ã«ï¥¬ áç¥â稪 ®ª®­
  568.         mcall -1 ;¢ë室 ¨§ ¯à®£à ¬¬ë
  569.  
  570. align 4
  571. get_point_coords:
  572.         ;§ £à㧪  ª®®à¤¨­ â ¢ editbox-ë
  573.         push eax ebx
  574.         stdcall [tl_node_get_data],tree3
  575.         cmp eax,0
  576.         je @f
  577.                 mov ebx,[eax]
  578.                 mov word[NumberSymbolsAD],8
  579.                 finit
  580.                 fld dword[ebx]
  581.                 fstp qword[Data_Double]
  582.                 call DoubleFloat_to_String
  583.                 stdcall [edit_box_set_text], edit1, Data_String
  584.                 fld dword[ebx+4]
  585.                 fstp qword[Data_Double]
  586.                 call DoubleFloat_to_String
  587.                 stdcall [edit_box_set_text], edit2, Data_String
  588.                 fld dword[ebx+8]
  589.                 fstp qword[Data_Double]
  590.                 call DoubleFloat_to_String
  591.                 stdcall [edit_box_set_text], edit3, Data_String
  592.                 stdcall [edit_box_draw], edit1
  593.                 stdcall [edit_box_draw], edit2
  594.                 stdcall [edit_box_draw], edit3
  595.         @@:
  596.         pop ebx eax
  597.         ret
  598.  
  599. align 4
  600. sph_radius dd 0 ;à ¤¨ãá áä¥àë ¤«ï ¢ë¤¥«¥­¨ï  ªâ¨¢­®© â®çª¨
  601. obj_x_max dd 0
  602. obj_x_min dd 0
  603. obj_x_centr dd 0
  604. obj_x_scale dd 1.0
  605. obj_y_max dd 0
  606. obj_y_min dd 0
  607. obj_y_centr dd 0
  608. obj_y_scale dd 1.0
  609. obj_z_max dd 0
  610. obj_z_min dd 0
  611. obj_z_centr dd 0
  612. obj_z_scale dd 1.0
  613.  
  614. capt_p dd 0
  615.  
  616. ;¤¥à¥¢® á ®¡ê¥ªâ ¬¨ ¢ ¯®«ì§®¢ â¥«ì᪮¬ ä ©«¥
  617. tree3 tree_list MAX_OBJECT_SIZE,3, tl_key_no_edit+tl_list_box_mode,\
  618.         16,16, 0xffffff,0xb0d0ff,0x400040, 5,270,303,160, 16, 4,0, el_focus,\
  619.         w_scr_t3,get_point_coords
  620.  
  621. edit1 edit_box 80,  76, 249, 0xffd0d0, 0xff, 0x80ff, 0, 0x8000, 34, string1, mouse_dd, 0
  622. edit2 edit_box 80, 160, 249, 0xd0d0ff, 0xff, 0x80ff, 0, 0x8000, 34, string2, mouse_dd, 0
  623. edit3 edit_box 80, 244, 249, 0xd0ffd0, 0xff, 0x80ff, 0, 0x8000, 34, string3, mouse_dd, 0
  624. editboxes_end:
  625.  
  626. string1 rb 34
  627. string2 rb 34
  628. string3 rb 34
  629.  
  630. align 4
  631. w_scr_t3 scrollbar 16, 0,0,0, 15, 100,0,0, 0,0,0, 1
  632.