Code archives/3D Graphics - Misc/VScroll
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
A Virtual Scrollbar Gadget (tm) can be used to edit a lrge number of object Parameters with one click. This is from the CSP Inhouse Tools Collection. Hope you like it. | |||||
; Example: how to use VScroll Gadgets to position/rotate a Mesh Graphics3D 640,480,16,2 SetBuffer BackBuffer() font=LoadFont("Tahoma",13) SetFont font camera=CreateCamera() MoveEntity camera,0,0,-10 li=CreateLight() RotateEntity li,30,30,30 cube=CreateCube() Dim par#(6),par_bk#(6),pr$(6) pr$(0)="X" pr$(1)="Y" pr$(2)="Z" pr$(3)="Pitch" pr$(4)="Yaw" pr$(5)="Roll" par(3)=1:par(4)=1:par(5)=1 Global ex,old_ex,ey,old_ey,drag,drag_this,dragy,win_drag,win_xo,win_yo Global tooltip1,tooltip2 ex=110:ey=230 While KeyDown(1)=0 check_editor() If drag=1 Then PositionEntity cube,par(0),par(1),par(2) RotateEntity cube,par(3),par(4),par(5) EndIf RenderWorld() draw_editor() Flip Wend End Function draw_editor() Color 127,127,127 Rect ex,ey,200,16+(16*6),1 Color 0,0,0 For i=3 To 12 Step 2 Line ex+4,ey+i,ex+196,ey+i Next tooltip1=0 For i=0 To 5 If i=drag_this Color 0,0,0 tooltip1=1 Else Color 255,255,255 EndIf Text ex+100,ey+16+(i*16),par(i),1,0 Text ex+4,ey+16+(i*16),pr$(i),0,0 Color 200,200,200 Rect ex+2,ey+15+(i*16),196,15,0 Color 255,255,255 If tooltip1=1 Then Text 4,GraphicsHeight()-16,"Press LMB and drag up or down..." If tooltip2=1 Then Text 4,GraphicsHeight()-16,"Press LMB and drag Editor Window..." Next End Function Function check_editor() mx=MouseX() my=MouseY() ; window mover tooltip2=0 If drag=0 And win_drag=0 If mx>ex And mx<ex+200 And my>ey And my<ey+15 tooltip2=1 If MouseDown(1)=1 win_drag=1 old_ex=ex old_ey=ey win_xo=mx win_yo=my EndIf EndIf EndIf If win_drag If MouseDown(1) ex=old_ex+(mx-win_xo) ey=old_ey+(my-win_yo) Else win_drag=0 EndIf EndIf ; parameter edit If drag=0 If my<ey+16 Or my>ey+16+(6*16) Or mx<ex Or mx>ex+200 drag_this=-1 ; no highlighting EndIf If mx>=ex And mx <=ex+200 For i=0 To 5 If (my>ey+16+(i*16)) And (my<ey+32+(i*16)) drag_this=i ; highlighting If MouseDown(1)=1 drag=1 dragy=my For i2=0 To 6 par_bk(i2)=par(i2) Next EndIf EndIf Next EndIf Else If MouseDown(1)=1 If drag_this>=3 And drag_this<=5 par(drag_this)=par_bk(drag_this)+(dragy-MouseY()) ; rotation: 1.0-steps EndIf If drag_this>=0 And drag_this<=2 par(drag_this)=par_bk(drag_this)+(.1*(dragy-MouseY())) ; position: 0.1-steps EndIf If drag_this>=3 And drag_this<=5 If par(drag_this)> 360 Then par(drag_this)=par(drag_this)-360 ; truncate angle parameters If par(drag_this)< 0 Then par(drag_this)=par(drag_this)+360 EndIf Else drag=0 ;here you might copy all the par() values to a Type out of a large collection of loaded object EndIf EndIf End Function |
Comments
None.
Code Archives Forum