var locator; var pos = new Point(0,0); var angle = new Point(0,0); var tolerance = 2; function onMouseDrag(event) { var invert = (event.point - pos).angle > 0 ? 1 : 0; if(document.getItems({selected: true}).length> 0) { var selected = document.getItems({selected: true})[0]; var hitResult = document.hitTest(event.point, 'paths', tolerance); if(hitResult && hitResult.item != locator) { normal = hitResult.curve.getTangent(hitResult.parameter); pos = hitResult.curve.getPoint(hitResult.parameter); } if(locator != null) { locator.remove(); } //to avoid some strange alerts if(selected.isValid()) { locator = selected.clone(); locator.position.x = pos.x; locator.position.y = pos.y - locator.bounds.height/2; locator.rotate(normal.angle + 180 * invert, locator.bounds.bottomCenter); } } else { Dialog.alert('Select an object first'); } } function onMouseUp(event) { if(locator != null) { document.deselectAll(); locator.fullySelected = true; } }