Alexander Deplov

Quick Squircle

Quick Squircle

Files

Code

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>Paper.js</title>
<link rel="stylesheet" href="./../PaperJSEngine/style.css" >
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script type="text/javascript" src="./../PaperJSEngine/paper-full.js"></script>
<body>
  <div>
    <label for="sizeXInput">SizeX:</label>
    <input id="sizeXInput" type="range" min="1" max="500" value="100">
  </div>

  <div>
    <label for="sizeYInput">SizeY:</label>
    <input id="sizeYInput" type="range" min="1" max="500" value="100">
  </div>

  <div>
    <label for="radiusInput">Radius:</label>
    <input id="radiusInput" type="range" min="1" max="500" value="50">
  </div>

  <div>
    <label for="curvitureInput">Curviture:</label>
    <input id="curvitureInput" type="range" min="-500" max="500" value="20">
  </div>

  <canvas id="canvas" hidpi='off' resize></canvas>
</body>

<script type="text/javascript" canvas="canvas">

var sizeX = sizeXInput.value
var sizeY = sizeYInput.value
var rectangle
var radius = radiusInput.value
var curviture = curvitureInput.value

$(document).ready(function () {
    paper.setup($('#canvas').get(0))

		sizeXInput.oninput = function(event){
        sizeX = this.value
        createSquircle()
    }
    sizeXInput.onchange = function(event){
        sizeX = this.value
        createSquircle()
    }

    sizeYInput.oninput = function(event){
        sizeY = this.value
        createSquircle()
    }
    sizeYInput.onchange = function(event){
        sizeY = this.value
        createSquircle()
    }

    radiusInput.oninput = function(event){
        radius = this.value
        createSquircle()
    }
    radiusInput.onchange = function(event){
        radius = this.value
        createSquircle()
    }

    curvitureInput.oninput = function(event){
        curviture = this.value
        createSquircle()
    }
    curvitureInput.onchange = function(event){
        curviture = this.value
        createSquircle()
    }

    createSquircle()
})


function createSquircle(){

  if (rectangle){
    rectangle.remove()
  }

  rectangle = new paper.Path.Rectangle({
    size: [sizeX, sizeY],
    strokeColor: 'blue',
    strokeSize: 4,
    position: paper.view.center,
    fullySelected: true,
    radius: radius,
  })

  rectangle.strokeColor = 'blue'
  rectangle.strokeWidth = 5

  rectangle.segments[0].handleOut.x -= curviture
  rectangle.segments[1].handleIn.y -= curviture * -1
  rectangle.segments[2].handleOut.y -= curviture
  rectangle.segments[3].handleIn.x -= curviture
  rectangle.segments[4].handleOut.x -= curviture * -1
  rectangle.segments[5].handleIn.y -= curviture
  rectangle.segments[6].handleOut.y -= curviture * -1
  rectangle.segments[7].handleIn.x -= curviture * -1


}





</script>
</head>

</html>