mirror of
https://github.com/xibyte/jsketcher
synced 2025-12-14 20:33:30 +01:00
250 lines
5.4 KiB
JavaScript
250 lines
5.4 KiB
JavaScript
import {runActionOrToastWhyNot, startOperation} from "./index";
|
|
import {
|
|
AngleBetweenConstraintIcon, AngleConstraintIcon,
|
|
CoincidentConstraintIcon, DistanceConstraintIcon,
|
|
DistancePLConstraintIcon, EqualConstraintIcon, FilletConstraintIcon,
|
|
HorizontalConstraintIcon, LockConstraintIcon,
|
|
ParallelConstraintIcon,
|
|
PerpendicularConstraintIcon, PointInMiddleConstraintIcon, PointOnCurveConstraintIcon,
|
|
PointOnLineConstraintIcon, RadiusConstraintIcon, SymmetryConstraintIcon, TangentConstraintIcon,
|
|
VerticalConstraintIcon
|
|
} from "../icons/constraints/ConstraintIcons";
|
|
import {toast} from "react-toastify";
|
|
import {MirrorGeneratorIcon} from "../icons/generators/GeneratorIcons";
|
|
|
|
export default [
|
|
|
|
{
|
|
id: 'CoincidentGlobal',
|
|
shortName: 'Coincident',
|
|
kind: 'Constraint',
|
|
description: 'point coincident constraint',
|
|
icon: CoincidentConstraintIcon,
|
|
|
|
invoke: (ctx) => {
|
|
runActionOrToastWhyNot('Coincident', ctx,)
|
|
}
|
|
},
|
|
|
|
{
|
|
id: 'VerticalGlobal',
|
|
shortName: 'Vertical',
|
|
kind: 'Constraint',
|
|
description: 'vertical constraint',
|
|
icon: VerticalConstraintIcon,
|
|
|
|
invoke: (ctx) => {
|
|
runActionOrToastWhyNot('Vertical', ctx);
|
|
}
|
|
},
|
|
|
|
{
|
|
id: 'HorizontalGlobal',
|
|
shortName: 'Horizontal',
|
|
kind: 'Constraint',
|
|
description: 'horizontal constraint',
|
|
icon: HorizontalConstraintIcon,
|
|
|
|
invoke: (ctx) => {
|
|
runActionOrToastWhyNot('Horizontal', ctx);
|
|
}
|
|
},
|
|
|
|
{
|
|
id: 'ParallelGlobal',
|
|
shortName: 'Parallel',
|
|
kind: 'Constraint',
|
|
description: 'parallel constraint',
|
|
icon: ParallelConstraintIcon,
|
|
|
|
invoke: (ctx) => {
|
|
runActionOrToastWhyNot('Parallel', ctx);
|
|
}
|
|
},
|
|
|
|
{
|
|
id: 'PerpendicularGlobal',
|
|
shortName: 'Perpendicular',
|
|
kind: 'Constraint',
|
|
description: 'perpendicular constraint',
|
|
icon: PerpendicularConstraintIcon,
|
|
|
|
invoke: (ctx) => {
|
|
runActionOrToastWhyNot('Perpendicular', ctx);
|
|
}
|
|
},
|
|
|
|
{
|
|
id: 'DistancePLGlobal',
|
|
shortName: 'Point to Line Distance',
|
|
kind: 'Constraint',
|
|
description: 'distance between point and line',
|
|
icon: DistancePLConstraintIcon,
|
|
|
|
invoke: (ctx) => {
|
|
runActionOrToastWhyNot('DistancePL', ctx);
|
|
}
|
|
},
|
|
|
|
{
|
|
id: 'DistanceGlobal',
|
|
shortName: 'Point to Point Distance',
|
|
kind: 'Constraint',
|
|
description: 'distance between two points',
|
|
icon: DistanceConstraintIcon,
|
|
|
|
invoke: (ctx) => {
|
|
runActionOrToastWhyNot('DistancePP', ctx);
|
|
}
|
|
},
|
|
|
|
{
|
|
id: 'EntityEqualityGlobal',
|
|
shortName: 'Entity Equality',
|
|
kind: 'Constraint',
|
|
description: 'equal length or equal radius',
|
|
icon: EqualConstraintIcon,
|
|
|
|
invoke: (ctx) => {
|
|
const fail1 = runActionOrToastWhyNot('EqualRadius', ctx, true);
|
|
const fail2 = runActionOrToastWhyNot('EqualLength', ctx, true);
|
|
if (fail1 && fail2) {
|
|
toast('Requires selection of either segments or circles and arcs');
|
|
}
|
|
}
|
|
},
|
|
|
|
{
|
|
id: 'PointOnLineGlobal',
|
|
shortName: 'Point On Line',
|
|
kind: 'Constraint',
|
|
description: 'point on line',
|
|
icon: PointOnLineConstraintIcon,
|
|
|
|
invoke: (ctx) => {
|
|
runActionOrToastWhyNot('PointOnLine', ctx);
|
|
}
|
|
},
|
|
|
|
{
|
|
id: 'TangentGlobal',
|
|
shortName: 'Tangent',
|
|
kind: 'Constraint',
|
|
description: 'tangent between different curves',
|
|
icon: TangentConstraintIcon,
|
|
|
|
invoke: (ctx) => {
|
|
runActionOrToastWhyNot('Tangent', ctx);
|
|
}
|
|
},
|
|
|
|
{
|
|
id: 'RadiusGlobal',
|
|
shortName: 'Radius',
|
|
kind: 'Constraint',
|
|
description: 'radius of a circle or arc',
|
|
icon: RadiusConstraintIcon,
|
|
|
|
invoke: (ctx) => {
|
|
runActionOrToastWhyNot('RadiusLength', ctx);
|
|
}
|
|
},
|
|
|
|
{
|
|
id: 'PointOnCurveGlobal',
|
|
shortName: 'Point On Curve',
|
|
kind: 'Constraint',
|
|
description: 'point on curve',
|
|
icon: PointOnCurveConstraintIcon,
|
|
|
|
invoke: (ctx) => {
|
|
runActionOrToastWhyNot('PointOnCircle', ctx);
|
|
}
|
|
},
|
|
|
|
{
|
|
id: 'PointInMiddleGlobal',
|
|
shortName: 'Point In Middle',
|
|
kind: 'Constraint',
|
|
description: 'point in middle',
|
|
icon: PointInMiddleConstraintIcon,
|
|
|
|
invoke: (ctx) => {
|
|
runActionOrToastWhyNot('PointInMiddle', ctx);
|
|
}
|
|
},
|
|
|
|
{
|
|
id: 'SymmetryGlobal',
|
|
shortName: 'Symmetry',
|
|
kind: 'Constraint',
|
|
description: 'symmetry',
|
|
icon: SymmetryConstraintIcon,
|
|
|
|
invoke: (ctx) => {
|
|
runActionOrToastWhyNot('Symmetry', ctx);
|
|
}
|
|
},
|
|
|
|
{
|
|
id: 'AngleBetweenGlobal',
|
|
shortName: 'Angle Between',
|
|
kind: 'Constraint',
|
|
description: 'angle between',
|
|
icon: AngleBetweenConstraintIcon,
|
|
|
|
invoke: (ctx) => {
|
|
runActionOrToastWhyNot('AngleBetween', ctx);
|
|
}
|
|
},
|
|
|
|
{
|
|
id: 'AngleGlobal',
|
|
shortName: 'Angle',
|
|
kind: 'Constraint',
|
|
description: 'angle of a line',
|
|
icon: AngleConstraintIcon,
|
|
|
|
invoke: (ctx) => {
|
|
runActionOrToastWhyNot('Angle', ctx);
|
|
}
|
|
},
|
|
|
|
{
|
|
id: 'LockGlobal',
|
|
shortName: 'Lock',
|
|
kind: 'Constraint',
|
|
description: 'locks a point',
|
|
icon: LockConstraintIcon,
|
|
|
|
invoke: (ctx) => {
|
|
runActionOrToastWhyNot('Lock', ctx);
|
|
}
|
|
},
|
|
|
|
{
|
|
id: 'FilletGlobal',
|
|
shortName: 'Fillet',
|
|
kind: 'Constraint',
|
|
description: 'make a fillet',
|
|
icon: FilletConstraintIcon,
|
|
|
|
invoke: (ctx) => {
|
|
runActionOrToastWhyNot('Fillet', ctx);
|
|
}
|
|
},
|
|
|
|
{
|
|
id: 'MirrorStart',
|
|
shortName: 'Mirror',
|
|
kind: 'Constraint',
|
|
description: 'adds mirror generator',
|
|
icon: MirrorGeneratorIcon,
|
|
|
|
invoke: (ctx) => {
|
|
startOperation(ctx, 'Mirror');
|
|
}
|
|
},
|
|
|
|
]
|
|
|