October 28, 2020, 11:59:23 PM

Author Topic: [bb] Any Zoom Level Line by skn3 [ 1+ years ago ]  (Read 1672 times)

Offline BlitzBot

  • Jr. Member
  • **
  • Posts: 1
[bb] Any Zoom Level Line by skn3 [ 1+ years ago ]
« on: June 29, 2017, 12:28:43 AM »
Title : Any Zoom Level Line
Author : skn3
Posted : 1+ years ago

Description : A function to draw a line at a variable Zoom. What this means is . Say you are making an art app. And you were at 4X zoomed in, with this you can quickly draw a line at 4X zoom.

[update]
I just fixed some flaot --> int  and int --> float rounding up/down errors. Not that its majorly complicated, but a line in any zoom, will be 99% accurate now.


Code :
Code: BlitzBasic
  1. Graphics 640,480,32,2
  2. Global angle#=0
  3.  
  4.         While KeyDown(1)=False
  5.                 SetBuffer BackBuffer()
  6.                 Cls
  7.                 Color 255,255,255
  8.                 drawline(200,200,MouseX(),MouseY(),33)
  9.                 Flip
  10.         Wend
  11.  
  12. Function DrawLine(StartX,StartY,EndX,EndY,Scale)
  13.         StartX=StartX/Scale*Scale
  14.         StartY=StartY/Scale*Scale
  15.         EndX=EndX/Scale*Scale
  16.         EndY=EndY/Scale*Scale
  17.         If StartX<EndX Then
  18.                 Xmode=True
  19.         Else
  20.                 Xmode=False
  21.         End If
  22.         If StartY<EndY Then
  23.                 Ymode=True
  24.         Else
  25.                 Ymode=False
  26.         End If
  27.         width#=Abs(startX-EndX)
  28.         height#=Abs(StartY-EndY)
  29.                
  30.         If width#>height# Then
  31.                 loops=width#
  32.                 If XMode=False Then
  33.                         xstep#=-1
  34.                 Else
  35.                         xstep#=1
  36.                 End If
  37.                 If Ymode=False Then
  38.                         ystep#=-(height#/width#)
  39.                 Else
  40.                         ystep#=(height#/width#)
  41.                 End If
  42.         Else
  43.                 loops=height#
  44.                 If XMode=False Then
  45.                         xstep#=-(width#/height#)
  46.                 Else
  47.                         xstep#=(width#/height#)
  48.                 End If
  49.                 If Ymode=False Then
  50.                         ystep#=-1
  51.                 Else
  52.                         ystep#=1
  53.                 End If
  54.         End If
  55.                
  56.         drawX#=startX
  57.         drawY#=startY
  58.        
  59.         loops=Ceil(loops/scale)+1
  60.        
  61.         For i=1 To loops
  62.                 getX#=drawX#/scale
  63.                 getY#=drawY#/scale
  64.                 intX=Int(getX#)*scale
  65.                 intY=Int(GetY#)*scale
  66.                
  67.                 Rect IntX,IntY,scale,scale
  68.                 drawX#=drawX#+(xstep#*scale)
  69.                 drawY#=drawY#+(ystep#*scale)
  70.         Next
  71. End Function


Comments : none...

 

SimplePortal 2.3.6 © 2008-2014, SimplePortal