fix jitter and mouse cursor accuracy
This commit is contained in:
parent
5a1d279b0a
commit
e3054bdb79
3 changed files with 257 additions and 300 deletions
119
pixler.bas
119
pixler.bas
|
|
@ -4,7 +4,7 @@ type statetype
|
||||||
bcolor as long
|
bcolor as long
|
||||||
offsetx as long
|
offsetx as long
|
||||||
offsety as long
|
offsety as long
|
||||||
zoom as single
|
zoom as long
|
||||||
brushsize as integer
|
brushsize as integer
|
||||||
startx as long
|
startx as long
|
||||||
starty as long
|
starty as long
|
||||||
|
|
@ -55,7 +55,7 @@ for y=0 to _height-16 step 16
|
||||||
next
|
next
|
||||||
_dest 0
|
_dest 0
|
||||||
state.tool=1
|
state.tool=1
|
||||||
state.zoom=1.0
|
state.zoom=1
|
||||||
state.offsetx=70+20
|
state.offsetx=70+20
|
||||||
state.offsety=20
|
state.offsety=20
|
||||||
state. brushsize=1
|
state. brushsize=1
|
||||||
|
|
@ -66,8 +66,8 @@ addcommand"bcolor ("+hex$(state.bcolor)+")"
|
||||||
|
|
||||||
dim lastmx,lastmy
|
dim lastmx,lastmy
|
||||||
dim keyin as string
|
dim keyin as string
|
||||||
dim mouseworldy as integer
|
dim mouseworldy as long
|
||||||
dim mouseworldx as integer
|
dim mouseworldx as long
|
||||||
|
|
||||||
dim diffx as integer
|
dim diffx as integer
|
||||||
dim diffy as integer
|
dim diffy as integer
|
||||||
|
|
@ -76,6 +76,7 @@ dim oldheight as integer
|
||||||
oldwidth=_width
|
oldwidth=_width
|
||||||
oldheight=_height
|
oldheight=_height
|
||||||
do
|
do
|
||||||
|
' 1. Check for window resizing first
|
||||||
if checkresize(_source)=-1 then
|
if checkresize(_source)=-1 then
|
||||||
diffx=_width-oldwidth
|
diffx=_width-oldwidth
|
||||||
diffy=_height-oldheight
|
diffy=_height-oldheight
|
||||||
|
|
@ -85,12 +86,10 @@ do
|
||||||
oldheight=_height
|
oldheight=_height
|
||||||
end if
|
end if
|
||||||
|
|
||||||
canvas
|
' 2. Clear the screen BEFORE drawing anything for this frame
|
||||||
if showtoolbox then toolbox
|
line (0,0)-(_width-1,_height-1),backgroundcolor1,bf
|
||||||
if showcolorpicker then colorpicker
|
|
||||||
if showcommands then commandlist
|
|
||||||
|
|
||||||
'Mouse Handling
|
' 3. Process all inputs and update offsets FIRST
|
||||||
while _mouseinput:mw=mw+_mousewheel:wend
|
while _mouseinput:mw=mw+_mousewheel:wend
|
||||||
mouseclicked=0
|
mouseclicked=0
|
||||||
rmouseclicked=0
|
rmouseclicked=0
|
||||||
|
|
@ -101,63 +100,43 @@ do
|
||||||
|
|
||||||
' Panning (Middle Mouse)
|
' Panning (Middle Mouse)
|
||||||
if _mousebutton(3) then
|
if _mousebutton(3) then
|
||||||
state.offsetx=int(state.offsetx+(_mousex-lastmx))
|
state.offsetx=state.offsetx+(_mousex-lastmx)
|
||||||
state.offsety=int(state.offsety+(_mousey-lastmy))
|
state.offsety=state.offsety+(_mousey-lastmy)
|
||||||
end if
|
end if
|
||||||
lastmx=_mousex:lastmy=_mousey
|
lastmx=_mousex:lastmy=_mousey
|
||||||
|
|
||||||
' Zooming
|
' Zooming
|
||||||
if mw<>0 then
|
if mw<>0 then
|
||||||
' 1. Capture current world position
|
|
||||||
mouseworldx=(_mousex-state.offsetx)/state.zoom
|
mouseworldx=(_mousex-state.offsetx)/state.zoom
|
||||||
mouseworldy=(_mousey-state.offsety)/state.zoom
|
mouseworldy=(_mousey-state.offsety)/state.zoom
|
||||||
|
if mw>0 then state.zoom=state.zoom+1 else state.zoom=state.zoom-1
|
||||||
' 2. Calculate the new zoom level (Snap to whole numbers)
|
|
||||||
if mw>0 then
|
|
||||||
state.zoom=state.zoom+1
|
|
||||||
else
|
|
||||||
state.zoom=state.zoom-1
|
|
||||||
end if
|
|
||||||
|
|
||||||
' 3. Constrain zoom (Min 1, Max 20)
|
|
||||||
if state.zoom<1 then state.zoom=1
|
if state.zoom<1 then state.zoom=1
|
||||||
if state.zoom>20 then state.zoom=20
|
if state.zoom>20 then state.zoom=20
|
||||||
|
|
||||||
' 4. Adjust offsets
|
|
||||||
state.offsetx=_mousex-(mouseworldx*state.zoom)
|
state.offsetx=_mousex-(mouseworldx*state.zoom)
|
||||||
state.offsety=_mousey-(mouseworldy*state.zoom)
|
state.offsety=_mousey-(mouseworldy*state.zoom)
|
||||||
|
|
||||||
mw=0
|
mw=0
|
||||||
end if
|
end if
|
||||||
|
|
||||||
' Keyboarding
|
' Keyboarding
|
||||||
keyin=inkey$
|
keyin=inkey$
|
||||||
select case keyin
|
select case keyin
|
||||||
case "+"
|
case "+": state.brushsize=state.brushsize+1: addcommand"brushsize ("+tst(state.brushsize)+")"
|
||||||
state.brushsize=state.brushsize+1
|
case "-": if state.brushsize>1 then state.brushsize=state.brushsize-1: addcommand"brushsize ("+tst(state.brushsize)+")"
|
||||||
addcommand"brushsize ("+tst(state.brushsize)+")"
|
case "h": state.zoom=1: state.offsetx=(_width/2)-(_width(layers(0).ihandle)/2): state.offsety=(_height/2)-(_height(layers(0).ihandle)/2)
|
||||||
case "-"
|
case "t": showtoolbox=not showtoolbox
|
||||||
if state.brushsize>1 then state.brushsize=state.brushsize-1
|
case "c": showcolorpicker=not showcolorpicker
|
||||||
addcommand"brushsize ("+tst(state.brushsize)+")"
|
case "l": showcommands=not showcommands
|
||||||
case chr$(19) ' ctrl+s
|
|
||||||
'TODO: save logic
|
|
||||||
case chr$(27) ' esc
|
|
||||||
menu
|
|
||||||
case "h"
|
|
||||||
state.zoom=1.0
|
|
||||||
state.offsetx=(_width/2)-(_width(layers(0).ihandle)/2)
|
|
||||||
state.offsety=(_height/2)-(_height(layers(0).ihandle)/2)
|
|
||||||
case "t"
|
|
||||||
showtoolbox=not showtoolbox
|
|
||||||
case "c"
|
|
||||||
showcolorpicker=not showcolorpicker
|
|
||||||
case "l"
|
|
||||||
showcommands=not showcommands
|
|
||||||
end select
|
end select
|
||||||
|
|
||||||
|
' 4. Draw everything using the freshly updated math
|
||||||
|
canvas
|
||||||
|
if showtoolbox then toolbox
|
||||||
|
if showcolorpicker then colorpicker
|
||||||
|
if showcommands then commandlist
|
||||||
|
|
||||||
|
' 5. Flip the buffer to the monitor cleanly
|
||||||
_limit 30
|
_limit 30
|
||||||
_display
|
_display
|
||||||
line (0,0)-(_width-1,_height-1),backgroundcolor1,bf
|
|
||||||
loop
|
loop
|
||||||
|
|
||||||
sub commandlist
|
sub commandlist
|
||||||
|
|
@ -366,47 +345,27 @@ sub canvas
|
||||||
if showcolorpicker then viewy2=_height-20 else viewy2=_height-1
|
if showcolorpicker then viewy2=_height-20 else viewy2=_height-1
|
||||||
_dest 0
|
_dest 0
|
||||||
|
|
||||||
' 2. Render Layers with Clipping
|
' 2. Render Layers (Let QB64 handle the viewport clipping natively)
|
||||||
dim srcx1 as long
|
|
||||||
dim srcy1 as long
|
|
||||||
dim srcx2 as long
|
|
||||||
dim srcy2 as long
|
|
||||||
dim drawx1 as long
|
|
||||||
dim drawy1 as long
|
|
||||||
dim drawx2 as long
|
|
||||||
dim drawy2 as long
|
|
||||||
|
|
||||||
dim i as integer
|
dim i as integer
|
||||||
for i = 0 to ubound(layers)
|
for i = 0 to ubound(layers)
|
||||||
dim img as long: img = layers(i).ihandle
|
dim img as long: img = layers(i).ihandle
|
||||||
dim imgw as integer: imgw = _width(img)
|
dim imgw as integer: imgw = _width(img)
|
||||||
dim imgh as integer: imgh = _height(img)
|
dim imgh as integer: imgh = _height(img)
|
||||||
|
|
||||||
' Current scaled dimensions
|
' Calculate the absolute unclipped destination positions
|
||||||
dim fullscaledw as single:fullscaledw=imgw*state.zoom
|
|
||||||
dim fullscaledh as single:fullscaledh=imgh*state.zoom
|
|
||||||
|
|
||||||
' Calculate visible area in screen coordinates (Overlap of image and viewport)
|
|
||||||
drawx1 = state.offsetx
|
drawx1 = state.offsetx
|
||||||
drawy1 = state.offsety
|
drawy1 = state.offsety
|
||||||
drawx2=state.offsetx+fullscaledw
|
drawx2 = state.offsetx + (imgw * state.zoom)
|
||||||
drawy2=state.offsety+fullscaledh
|
drawy2 = state.offsety + (imgh * state.zoom)
|
||||||
|
|
||||||
' Clip the destination to the Viewport
|
' Direct 1:1 mapping of the entire source asset
|
||||||
if drawx1<viewx1 then drawx1=viewx1
|
srcx1 = 0
|
||||||
if drawy1<viewy1 then drawy1=viewy1
|
srcy1 = 0
|
||||||
if drawx2>viewx2 then drawx2=viewx2
|
srcx2 = imgw
|
||||||
if drawy2>viewy2 then drawy2=viewy2
|
srcy2 = imgh
|
||||||
|
|
||||||
' Only draw if the image is actually inside the viewport
|
' Only draw if the asset is within the general view window range
|
||||||
if drawx2>drawx1 and drawy2>drawy1 then
|
if drawx2 > viewx1 and drawx1 < viewx2 and drawy2 > viewy1 and drawy1 < viewy2 then
|
||||||
' Map screen-clipped coordinates back to the source image coordinates
|
|
||||||
srcx1=int((drawx1-state.offsetx)/state.zoom)
|
|
||||||
srcy1=int((drawy1-state.offsety)/state.zoom)
|
|
||||||
srcx2=int((drawx2-state.offsetx)/state.zoom)
|
|
||||||
srcy2=int((drawy2-state.offsety)/state.zoom)
|
|
||||||
|
|
||||||
' Syntax: _PUTIMAGE (destX1, destY1)-(destX2, destY2), sourceHandle, 0, (srcX1, srcY1)-(srcX2, srcY2)
|
|
||||||
_putimage (drawx1, drawy1)-(drawx2, drawy2), img, 0, (srcx1, srcy1)-(srcx2, srcy2)
|
_putimage (drawx1, drawy1)-(drawx2, drawy2), img, 0, (srcx1, srcy1)-(srcx2, srcy2)
|
||||||
end if
|
end if
|
||||||
next
|
next
|
||||||
|
|
@ -428,11 +387,13 @@ sub canvas
|
||||||
end if
|
end if
|
||||||
end if
|
end if
|
||||||
|
|
||||||
' 3. Calculate Canvas Coordinates
|
' 3. Calculate Canvas Coordinates (Center-aligned to the zoom block)
|
||||||
dim canx as long
|
dim canx as long
|
||||||
dim cany as long
|
dim cany as long
|
||||||
canx=int((_mousex-state.offsetx)/state.zoom)
|
|
||||||
cany=int((_mousey-state.offsety)/state.zoom)
|
' Add half a zoomed pixel block to align the mouse tip to the block center
|
||||||
|
canx = int((_mousex - state.offsetx + (state.zoom \ 2)) / state.zoom)
|
||||||
|
cany = int((_mousey - state.offsety + (state.zoom \ 2)) / state.zoom)
|
||||||
|
|
||||||
static drawcol
|
static drawcol
|
||||||
if _mousebutton(1) then drawcol=state.fcolor
|
if _mousebutton(1) then drawcol=state.fcolor
|
||||||
|
|
|
||||||
4
test.pxl
4
test.pxl
|
|
@ -1,4 +0,0 @@
|
||||||
canvas (1024,780)
|
|
||||||
fcolor (FF0D2B45)
|
|
||||||
bcolor (FFFFECD6)
|
|
||||||
gradient (85,74,200,137)
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
$console
|
$console
|
||||||
_screenhide
|
_screenhide
|
||||||
if command$=""then _echo"please specify image file to process":system 1
|
if command$="" then _echo "🫥 please specify image file to process": system 1
|
||||||
_screenshow
|
_screenshow
|
||||||
|
|
||||||
type point2d
|
type point2d
|
||||||
|
|
@ -24,7 +24,7 @@ dim shared done as _byte
|
||||||
dim shared mouseclicked as _byte
|
dim shared mouseclicked as _byte
|
||||||
dim shared mbd as _byte
|
dim shared mbd as _byte
|
||||||
|
|
||||||
' Global polygon trace registers
|
' Global polygon trace registers declared as dynamic
|
||||||
redim shared contour(4999) as point2d
|
redim shared contour(4999) as point2d
|
||||||
dim shared totalpoints as long
|
dim shared totalpoints as long
|
||||||
|
|
||||||
|
|
@ -68,20 +68,31 @@ do until done
|
||||||
' Fetch look-up color index from the generated active handle
|
' Fetch look-up color index from the generated active handle
|
||||||
_source state.handle
|
_source state.handle
|
||||||
targetcolor = point(clickx, clicky)
|
targetcolor = point(clickx, clicky)
|
||||||
_source 0 ' Restore background source monitor pointer
|
_source 0
|
||||||
|
|
||||||
' SAFEGUARD 1: Do not attempt to parse pure black background/borders
|
' FIX 1: Clear out the old polygon completely by resetting the transparent overlay canvas
|
||||||
if targetcolor<>_rgb32(0,0,0) and targetcolor<>_rgba32(0,0,0,0) then
|
dim prevdest as long
|
||||||
|
prevdest = _dest
|
||||||
|
_dest state.overlay
|
||||||
|
cls ,_rgb32(0,0,0,0) ' Wipes the canvas clean
|
||||||
|
_dest prevdest
|
||||||
|
|
||||||
|
' FIX 2: Reset the dynamic buffer array to its clean baseline size right here in the main module
|
||||||
|
redim shared contour(4999) as point2d
|
||||||
totalpoints = 0
|
totalpoints = 0
|
||||||
tracecontour targetcolor,clickx,clicky
|
|
||||||
|
' Pass the shared dynamic array directly into the tracing routine
|
||||||
|
tracecontour contour(), targetcolor, clickx, clicky
|
||||||
|
|
||||||
if totalpoints >= 3 and totalpoints < (_width(state.orgimg) * _height(state.orgimg)) then
|
if totalpoints >= 3 and totalpoints < (_width(state.orgimg) * _height(state.orgimg)) then
|
||||||
redim _preserve contour(totalpoints - 1) as point2d
|
redim _preserve contour(totalpoints - 1) as point2d
|
||||||
simplifypolygon
|
|
||||||
|
' Pass the dynamic array directly into the simplification routine
|
||||||
|
simplifypolygon contour()
|
||||||
|
|
||||||
if totalpoints >= 3 then
|
if totalpoints >= 3 then
|
||||||
' Build flat 1D coordinate matrix map array (X1, Y1, X2, Y2...)
|
' Build flat 1D coordinate matrix map array (X1, Y1, X2, Y2...)
|
||||||
dim polypoints(0 to (totalpoints*2)-1) as long
|
redim polypoints(0 to (totalpoints * 2) - 1) as long
|
||||||
dim i as long
|
dim i as long
|
||||||
dim clipstr as string
|
dim clipstr as string
|
||||||
|
|
||||||
|
|
@ -111,8 +122,6 @@ do until done
|
||||||
end if
|
end if
|
||||||
end if
|
end if
|
||||||
end if
|
end if
|
||||||
mouseclicked=0
|
|
||||||
end if
|
|
||||||
|
|
||||||
ol = state.levels
|
ol = state.levels
|
||||||
ot = state.threshold
|
ot = state.threshold
|
||||||
|
|
@ -186,9 +195,6 @@ function luma (col as _unsigned long)
|
||||||
luma = 0.21 * _red(col) + 0.72 * _green(col) + 0.07 * _blue(col)
|
luma = 0.21 * _red(col) + 0.72 * _green(col) + 0.07 * _blue(col)
|
||||||
end function
|
end function
|
||||||
|
|
||||||
' =========================================================================
|
|
||||||
' SUBROUTINE: Solid Filled Scanning Polygon Vector Renderer
|
|
||||||
' =========================================================================
|
|
||||||
sub filledpolygon (points() as long, col as long)
|
sub filledpolygon (points() as long, col as long)
|
||||||
dim i as integer, j as integer
|
dim i as integer, j as integer
|
||||||
dim x1 as single, y1 as single, x2 as single, y2 as single
|
dim x1 as single, y1 as single, x2 as single, y2 as single
|
||||||
|
|
@ -196,7 +202,7 @@ sub filledpolygon (points() as long,col as long)
|
||||||
dim numpoints as integer
|
dim numpoints as integer
|
||||||
numpoints = (ubound(points) + 1) \ 2
|
numpoints = (ubound(points) + 1) \ 2
|
||||||
|
|
||||||
dim intersections(4999) as single ' SAFEGUARD 2: Larger intersection limit
|
dim intersections(4999) as single
|
||||||
dim numintersections as integer
|
dim numintersections as integer
|
||||||
dim y as long
|
dim y as long
|
||||||
|
|
||||||
|
|
@ -211,7 +217,6 @@ sub filledpolygon (points() as long,col as long)
|
||||||
if ((y1 > y and y2 <= y) or (y2 > y and y1 <= y)) then
|
if ((y1 > y and y2 <= y) or (y2 > y and y1 <= y)) then
|
||||||
if y2 - y1 <> 0 then
|
if y2 - y1 <> 0 then
|
||||||
intersectx = x1 + (y - y1) * (x2 - x1) / (y2 - y1)
|
intersectx = x1 + (y - y1) * (x2 - x1) / (y2 - y1)
|
||||||
' SAFEGUARD 3: Array bounds protection
|
|
||||||
if numintersections <= ubound(intersections) then
|
if numintersections <= ubound(intersections) then
|
||||||
intersections(numintersections) = intersectx
|
intersections(numintersections) = intersectx
|
||||||
numintersections = numintersections + 1
|
numintersections = numintersections + 1
|
||||||
|
|
@ -236,10 +241,8 @@ sub filledpolygon (points() as long,col as long)
|
||||||
next y
|
next y
|
||||||
end sub
|
end sub
|
||||||
|
|
||||||
' =========================================================================
|
' FIX 3: Adjusted signature to cleanly receive the dynamic array as a parameter
|
||||||
' SUBROUTINE: Moore-Neighbor Contour Tracer
|
sub tracecontour (poly() as point2d, targcolor as _unsigned long, mx as long, my as long)
|
||||||
' =========================================================================
|
|
||||||
sub tracecontour (targcolor as _unsigned long,mx as long,my as long)
|
|
||||||
dim startx as long, starty as long
|
dim startx as long, starty as long
|
||||||
dim foundstart as _byte
|
dim foundstart as _byte
|
||||||
|
|
||||||
|
|
@ -280,23 +283,22 @@ sub tracecontour (targcolor as _unsigned long,mx as long,my as long)
|
||||||
dim firststep as _byte
|
dim firststep as _byte
|
||||||
firststep = -1
|
firststep = -1
|
||||||
|
|
||||||
' Calculate absolute ceiling area parameter to handle escape routes
|
|
||||||
dim maxallowedpoints as long
|
dim maxallowedpoints as long
|
||||||
maxallowedpoints = _width(state.handle) * _height(state.handle)
|
maxallowedpoints = _width(state.handle) * _height(state.handle)
|
||||||
|
|
||||||
do
|
do
|
||||||
contour(totalpoints).x=currentx
|
poly(totalpoints).x = currentx
|
||||||
contour(totalpoints).y=currenty
|
poly(totalpoints).y = currenty
|
||||||
totalpoints = totalpoints + 1
|
totalpoints = totalpoints + 1
|
||||||
|
|
||||||
' SAFEGUARD 4: Break if loop gets stuck spinning in empty coordinates
|
|
||||||
if totalpoints >= maxallowedpoints then
|
if totalpoints >= maxallowedpoints then
|
||||||
totalpoints = 0
|
totalpoints = 0
|
||||||
exit do
|
exit do
|
||||||
end if
|
end if
|
||||||
|
|
||||||
if totalpoints>=ubound(contour) then
|
if totalpoints >= ubound(poly) then
|
||||||
redim _preserve contour(ubound(contour)+1000) as point2d
|
' Safely scales the array parameter reference across scopes
|
||||||
|
redim _preserve poly(ubound(poly) + 1000) as point2d
|
||||||
end if
|
end if
|
||||||
|
|
||||||
checkdir = (backtrackdir + 1) mod 8
|
checkdir = (backtrackdir + 1) mod 8
|
||||||
|
|
@ -332,15 +334,13 @@ sub tracecontour (targcolor as _unsigned long,mx as long,my as long)
|
||||||
_source oldsource
|
_source oldsource
|
||||||
end sub
|
end sub
|
||||||
|
|
||||||
' =========================================================================
|
' FIX 4: Adjusted signature to cleanly receive the dynamic array as a parameter
|
||||||
' SUBROUTINE: SimplifyPolygon
|
sub simplifypolygon (poly() as point2d)
|
||||||
' =========================================================================
|
|
||||||
sub simplifypolygon
|
|
||||||
dim numpoints as long
|
dim numpoints as long
|
||||||
numpoints = totalpoints
|
numpoints = totalpoints
|
||||||
|
|
||||||
if numpoints > 2 then
|
if numpoints > 2 then
|
||||||
if contour(numpoints-1).x=contour(0).x and contour(numpoints-1).y=contour(0).y then
|
if poly(numpoints - 1).x = poly(0).x and poly(numpoints - 1).y = poly(0).y then
|
||||||
numpoints = numpoints - 1
|
numpoints = numpoints - 1
|
||||||
end if
|
end if
|
||||||
end if
|
end if
|
||||||
|
|
@ -350,7 +350,7 @@ sub simplifypolygon
|
||||||
dim temp(0 to numpoints - 1) as point2d
|
dim temp(0 to numpoints - 1) as point2d
|
||||||
dim keepcount as long
|
dim keepcount as long
|
||||||
|
|
||||||
temp(0)=contour(0)
|
temp(0) = poly(0)
|
||||||
keepcount = 1
|
keepcount = 1
|
||||||
|
|
||||||
dim i as long
|
dim i as long
|
||||||
|
|
@ -359,30 +359,30 @@ sub simplifypolygon
|
||||||
dim nextidx as long: nextidx = i + 1
|
dim nextidx as long: nextidx = i + 1
|
||||||
if nextidx > numpoints - 1 then nextidx = 0
|
if nextidx > numpoints - 1 then nextidx = 0
|
||||||
|
|
||||||
dim dx1 as single:dx1=contour(i).x-contour(previdx).x
|
dim dx1 as single: dx1 = poly(i).x - poly(previdx).x
|
||||||
dim dy1 as single:dy1=contour(i).y-contour(previdx).y
|
dim dy1 as single: dy1 = poly(i).y - poly(previdx).y
|
||||||
dim dx2 as single:dx2=contour(nextidx).x-contour(i).x
|
dim dx2 as single: dx2 = poly(nextidx).x - poly(i).x
|
||||||
dim dy2 as single:dy2=contour(nextidx).y-contour(i).y
|
dim dy2 as single: dy2 = poly(nextidx).y - poly(i).y
|
||||||
|
|
||||||
dim crossproduct as single
|
dim crossproduct as single
|
||||||
crossproduct = (dx1 * dy2) - (dy1 * dx2)
|
crossproduct = (dx1 * dy2) - (dy1 * dx2)
|
||||||
|
|
||||||
if abs(crossproduct) > 0.05 then
|
if abs(crossproduct) > 0.05 then
|
||||||
temp(keepcount)=contour(i)
|
temp(keepcount) = poly(i)
|
||||||
keepcount = keepcount + 1
|
keepcount = keepcount + 1
|
||||||
end if
|
end if
|
||||||
next i
|
next i
|
||||||
|
|
||||||
if keepcount >= 3 then
|
if keepcount >= 3 then
|
||||||
redim contour(keepcount-1) as point2d
|
redim poly(keepcount - 1) as point2d
|
||||||
for i = 0 to keepcount - 1
|
for i = 0 to keepcount - 1
|
||||||
contour(i)=temp(i)
|
poly(i) = temp(i)
|
||||||
next i
|
next i
|
||||||
totalpoints = keepcount
|
totalpoints = keepcount
|
||||||
else
|
else
|
||||||
redim contour(numpoints-1) as point2d
|
redim poly(numpoints - 1) as point2d
|
||||||
for i = 0 to numpoints - 1
|
for i = 0 to numpoints - 1
|
||||||
contour(i)=temp(i)
|
poly(i) = temp(i)
|
||||||
next i
|
next i
|
||||||
totalpoints = numpoints
|
totalpoints = numpoints
|
||||||
end if
|
end if
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue