Alexander Deplov

Path handles control

Path handles control

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 type="text/javascript" src="./../PaperJSEngine/paper-full.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
</head>
<body>
<canvas id="canvas" resize>
</canvas>

<script type="text/javascript">


$(document).ready(function () {

    paper.setup($('#canvas').get(0))

    var path = new paper.Path()
    path.strokeColor = 'orange'
    path.strokeWidth = 5
    path.add(new paper.Point(20,190))
    path.add(new paper.Point(200,100))
    path.add(new paper.Point(400,150))
    path.smooth()
    path.fullySelected = true

    var tool = new paper.Tool()
    var handle, segment


    tool.onMouseDown = (event) => {
        handle = null;
        segment = null;

        var hitResult = path.hitTest(event.point, { handles: true, tolerance: 40 })
        console.log(hitResult)
        if (hitResult) {
            if (hitResult.type == 'handle-in') {
                handle = hitResult.segment.handleIn;
            } else if (hitResult.type == 'handle-out') {
                handle = hitResult.segment.handleOut;
            }
        }
        if (handle == null) {
            hitResult = path.hitTest(event.point, { segments: true, tolerance: 40 });
            if (hitResult) {
                segment = hitResult.segment;
            }
        }
    }

    tool.onMouseDrag = function(event) {
        
        if (handle) {
            handle.x += event.delta.x;
            handle.y += event.delta.y;
        }
        if (segment) {
            segment.point.x += event.delta.x;
            segment.point.y += event.delta.y;
        }
        

    };




})



</script>

</body>
</html>