Public
Edited
May 2, 2023
Importers
Insert cell
Insert cell
Insert cell
Insert cell
import { pointInventory as Inv } from "90d0ee0bf9ccdd9b"
Insert cell
import { selectToolAction } from "ed819e793c39a3d5"
Insert cell
Insert cell
function geometryToolAction(p, shapeName) {
var start, gridStart, end;
var tool = activateTool(`${shapeName}Tool`, p);
selection.clear(p);
document.dispatchEvent(new CustomEvent("formChange"));

tool.onMouseMove = function (event) {
tmpGrp(p).removeChildren();
start = null;
var highLightP = Inv.getClosest(event.point, p);
if (highLightP) {
highlightPoint(highLightP, p);
start = highLightP;
}
};

tool.onMouseDown = function (event) {
[start, gridStart] = recordStart(event, start, p);
};

tool.onMouseDrag = function (event) {
end = dragGeometry(event, p, start, gridStart, shapeName);
};

tool.onMouseUp = function (event) {
var shape = addGeometry(end, p, gridStart, shapeName);
console.log(shape);
selectToolAction(p);
selection.push(shape);
Inv.addPath(shape, p);
document.dispatchEvent(new CustomEvent("formChange"));
};
}
Insert cell
function addGeometry(end, p, gridStart, shapeName) {
var shape;
p.project.activeLayer.children["tempGroup"].removeChildren();
var gridEnd = gridPoint(end, canvasValues.gridScale, p);
if (gridEnd.subtract(gridStart).length > 0.08)
//addShape only return mainShape when ifTemp is set to false
shape = addShape(gridStart, gridEnd, p, shapeName, false);
return shape;
}
Insert cell
function dragGeometry(event, p, start, gridStart, shapeName) {
var snap = Inv.getClosest(event.point, p);
var end = snap ? snap : event.point;
placeArrow(start, end, p, sketchValue);

if (sketchValue.drawArc) placeArc(start, end, p, sketchValue);

if (sketchValue.drawLengthLabel)
placeLengthSymbol(start, end, p, sketchValue);

var grid_end = gridPoint(end, canvasValues.gridScale, p);
addShape(gridStart, grid_end, p, shapeName, true);
return end;
}
Insert cell
function recordStart(event, start, p) {
start = start ? start : event.point;
console.log(start);
var gridStart = gridPoint(start, canvasValues.gridScale, p);
return [start, gridStart];
}
Insert cell
function addShape(start, end, p, shapeName, isTemp) {
var shapes;
shapes = shapeFunc[shapeName](start, end, canvasValues.gridScale, p, isTemp);
// shapes returned will be tempShape if is Temp is True, otherwise it will be [hiddenshape, mainshape].
if (isTemp) {
addChildToGroup(shapes.name, shapes, p, tmpGrp(p));
} else {
hidGrp(p).addChild(shapes[0]);
mainGrp(p).addChild(shapes[1]);
return shapes[1];
}
}
Insert cell
shapeFunc = {
return {
circle: addCircle,
rectangle: addRectangle
};
}
Insert cell
function addCircle(grid_start, grid_end, gridScale, ps, isTemp) {
let grid_radius = grid_end.subtract(grid_start).length;
var canvas_center = canvasPoint(grid_start, gridScale, ps);
var visibleShape = new ps.Path.Circle(canvas_center, grid_radius * gridScale);
visibleShape.strokeColor = "black";
visibleShape.fillColor = config.fillColor;
visibleShape.fillColor.alpha = config.fillAlpha;
visibleShape.strokeWidth = 2;

if (isTemp) {
visibleShape.name = `tempCircle`;
return visibleShape;
} else {
let hiddenshape, mainShape;
let id = Date.now();
hiddenshape = new ps.Path.Circle(grid_start, grid_radius);
hiddenshape.name = `hiddenCircle${id}`;
visibleShape.name = `mainCircle${id}`;

return [hiddenshape, visibleShape];
}
}
Insert cell
function addRectangle(start, end, gridScale, p, isTemp) {
var size = new p.Size((end.x - start.x) * 2, (end.y - start.y) * 2);
let topLeft = start.subtract(size.divide(2));

var c_ctr = canvasPoint(start, gridScale, p);
var c_size = size.multiply(gridScale);
let canvasTopLeft = c_ctr.subtract(c_size.divide(2));
var visibleShape = new p.Path.Rectangle(canvasTopLeft, c_size);
visibleShape.strokeColor = "black";
visibleShape.fillColor = config.fillColor;
visibleShape.fillColor.alpha = config.fillAlpha;
visibleShape.strokeWidth = 2;

if (isTemp) {
var tempShape;
visibleShape.name = `tempRectangle`;
return visibleShape;
} else {
let hiddenshape;
let id = Date.now();
hiddenshape = new p.Path.Rectangle(topLeft, size);
hiddenshape.name = `hiddenRectangle${id}`;
visibleShape.name = `mainRectangle${id}`;

return [hiddenshape, visibleShape];
}
}
Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more