}
diff --git a/modules/ui/components/Columnizer.jsx b/modules/ui/components/Columnizer.jsx
new file mode 100644
index 00000000..4977e8bb
--- /dev/null
+++ b/modules/ui/components/Columnizer.jsx
@@ -0,0 +1,31 @@
+import React from 'react';
+import _ from 'lodash';
+
+export function Columnizer({columns, children, spacing, ...props}) {
+
+ const items = React.Children.toArray(children);
+
+ const rows = Math.ceil(items.length / columns);
+ let itemsCounter = 0;
+ return
+
+ {_.times(rows, () => {
+ let key = '';
+ for (let i = itemsCounter; i < columns; i++) {
+ key += items[i] ? items[i].key : '';
+ key += ':';
+ }
+ return
+ {
+ _.times(columns, () => {
+ const item = items[itemsCounter++];
+ return item && |
+ {item}
+ | ;
+ })
+ }
+
+ })}
+
+
+}
\ No newline at end of file
diff --git a/modules/ui/styles/init/form.less b/modules/ui/styles/init/form.less
index 6ffd8692..ecfbdc68 100644
--- a/modules/ui/styles/init/form.less
+++ b/modules/ui/styles/init/form.less
@@ -9,8 +9,20 @@ button {
background-color: darken(@color-neutral, 10%);
color: @font-color;
white-space: nowrap;
- .button-behavior(@color-neutral)
- //line-height: 1.5;
+ .button-behavior(@color-neutral);
+
+
+ &.icon-button {
+ display: inline-flex;
+
+ align-items: center;
+ justify-content: center;
+ svg {
+ width: 16px;
+ height: 16px;
+ margin: -4px 4px -4px -2px;
+ }
+ }
}
button.neutral {
diff --git a/modules/ui/styles/init/icons.less b/modules/ui/styles/init/icons.less
new file mode 100644
index 00000000..a6d56962
--- /dev/null
+++ b/modules/ui/styles/init/icons.less
@@ -0,0 +1,19 @@
+.icon-16 svg {
+ width: 16px;
+ height: 16px
+}
+
+.icon-32 svg {
+ width: 32px;
+ height: 32px
+}
+
+.icon-48 svg {
+ width: 48px;
+ height: 48px
+}
+
+.icon-64 svg {
+ width: 64px;
+ height: 64px
+}
\ No newline at end of file
diff --git a/modules/ui/styles/init/index.less b/modules/ui/styles/init/index.less
index 2ed5a073..e014cf37 100644
--- a/modules/ui/styles/init/index.less
+++ b/modules/ui/styles/init/index.less
@@ -5,4 +5,5 @@
@import "./links.less";
@import "./form.less";
@import "./tables.less";
-@import "./svg.less";
\ No newline at end of file
+@import "./svg.less";
+@import "./icons.less";
\ No newline at end of file
diff --git a/web/app/sketcher/actions/constraintActions.js b/web/app/sketcher/actions/constraintActions.js
index c613de76..bf25e332 100644
--- a/web/app/sketcher/actions/constraintActions.js
+++ b/web/app/sketcher/actions/constraintActions.js
@@ -7,6 +7,25 @@ import {Arc} from "../shapes/arc";
import {FilletTool} from "../tools/fillet";
import {editConstraint as _editConstraint} from "../components/ConstraintEditor";
import {BezierCurve} from "../shapes/bezier-curve";
+import {
+ AngleBetweenConstraintIcon,
+ AngleConstraintIcon,
+ CoincidentConstraintIcon,
+ DistanceConstraintIcon,
+ DistancePLConstraintIcon,
+ EqualConstraintIcon, FilletConstraintIcon,
+ HorizontalConstraintIcon,
+ LockConstraintIcon,
+ ParallelConstraintIcon,
+ PerpendicularConstraintIcon,
+ PointInMiddleConstraintIcon,
+ PointOnCurveConstraintIcon,
+ PointOnLineConstraintIcon,
+ RadiusConstraintIcon,
+ SymmetryConstraintIcon,
+ TangentConstraintIcon,
+ VerticalConstraintIcon
+} from "../icons/constraints/ConstraintIcons";
export default [
@@ -16,6 +35,7 @@ export default [
shortName: 'Coincident',
kind: 'Constraint',
description: 'Point Coincident',
+ icon: CoincidentConstraintIcon,
selectionMatcher: {
selector: 'matchAll',
types: [EndPoint],
@@ -40,6 +60,7 @@ export default [
shortName: 'Tangent',
kind: 'Constraint',
description: 'Tangent Between Line And Circle',
+ icon: TangentConstraintIcon,
selectionMatcher: {
selector: 'matchSequence',
sequence: [
@@ -76,6 +97,7 @@ export default [
shortName: 'Equal Radius',
kind: 'Constraint',
description: 'Equal Radius Between Two Circle',
+ icon: EqualConstraintIcon,
selectionMatcher: {
selector: 'matchAll',
types: [Circle, Arc],
@@ -100,6 +122,7 @@ export default [
shortName: 'Equal Length',
kind: 'Constraint',
description: 'Equal Length Between Two Segments',
+ icon: EqualConstraintIcon,
selectionMatcher: {
selector: 'matchAll',
types: [Segment],
@@ -121,6 +144,7 @@ export default [
shortName: 'Point On Line',
kind: 'Constraint',
description: 'Point On Line',
+ icon: PointOnLineConstraintIcon,
selectionMatcher: {
selector: 'matchSequence',
sequence: [
@@ -148,6 +172,7 @@ export default [
shortName: 'Point On Circle',
kind: 'Constraint',
description: 'Point On Circle',
+ icon: PointOnCurveConstraintIcon,
selectionMatcher: {
selector: 'matchSequence',
sequence: [
@@ -175,6 +200,7 @@ export default [
shortName: 'Point On Curve',
kind: 'Constraint',
description: 'Point On Curve',
+ icon: PointOnCurveConstraintIcon,
selectionMatcher: {
selector: 'matchSequence',
sequence: [
@@ -202,6 +228,7 @@ export default [
shortName: 'Middle Point',
kind: 'Constraint',
description: 'Point In The Middle',
+ icon: PointInMiddleConstraintIcon,
selectionMatcher: {
selector: 'matchSequence',
sequence: [
@@ -227,6 +254,7 @@ export default [
shortName: 'Symmetry',
kind: 'Constraint',
description: 'Symmetry of two points against middle point',
+ icon: SymmetryConstraintIcon,
selectionMatcher: {
selector: 'matchSequence',
sequence: [
@@ -252,6 +280,7 @@ export default [
shortName: 'Angle',
kind: 'Constraint',
description: 'Angle',
+ icon: AngleConstraintIcon,
selectionMatcher: {
selector: 'matchAll',
types: [Segment],
@@ -281,6 +310,7 @@ export default [
shortName: 'Vertical',
kind: 'Constraint',
description: 'Vertical',
+ icon: VerticalConstraintIcon,
selectionMatcher: {
selector: 'matchAll',
@@ -306,6 +336,7 @@ export default [
shortName: 'Horizontal',
kind: 'Constraint',
description: 'Horizontal',
+ icon: HorizontalConstraintIcon,
selectionMatcher: {
selector: 'matchAll',
@@ -331,6 +362,7 @@ export default [
shortName: 'Angle Between',
kind: 'Constraint',
description: 'Angle Between Lines',
+ icon: AngleBetweenConstraintIcon,
selectionMatcher: {
selector: 'matchAll',
@@ -363,6 +395,7 @@ export default [
shortName: 'Perpendicular',
kind: 'Constraint',
description: 'Perpendicularity between two or more lines',
+ icon: PerpendicularConstraintIcon,
selectionMatcher: {
selector: 'matchAll',
@@ -389,6 +422,7 @@ export default [
shortName: 'Parallel',
kind: 'Constraint',
description: 'Parallelism between two or more lines',
+ icon: ParallelConstraintIcon,
selectionMatcher: {
selector: 'matchAll',
@@ -415,6 +449,7 @@ export default [
shortName: 'Length',
kind: 'Constraint',
description: 'Segment Length',
+ icon: DistanceConstraintIcon,
selectionMatcher: {
selector: 'matchAll',
@@ -446,6 +481,7 @@ export default [
shortName: 'Radius Length',
kind: 'Constraint',
description: 'Radius Length',
+ icon: RadiusConstraintIcon,
selectionMatcher: {
selector: 'matchAll',
@@ -477,6 +513,7 @@ export default [
shortName: 'Point to Line Distance',
kind: 'Constraint',
description: 'Distance between Point and Line',
+ icon: DistancePLConstraintIcon,
selectionMatcher: {
selector: 'matchSequence',
@@ -513,6 +550,7 @@ export default [
shortName: 'Two Point Distance',
kind: 'Constraint',
description: 'Distance between two Points',
+ icon: DistanceConstraintIcon,
selectionMatcher: {
selector: 'matchSequence',
@@ -544,6 +582,8 @@ export default [
shortName: 'Lock Point',
kind: 'Constraint',
description: 'Lock Point',
+ icon: LockConstraintIcon,
+
selectionMatcher: {
selector: 'matchSequence',
sequence: [
@@ -570,6 +610,8 @@ export default [
shortName: 'Fillet',
kind: 'Tool',
description: 'Make a Fillet',
+ icon: FilletConstraintIcon,
+
selectionMatcher: {
selector: 'function',
match: (selection) => {
diff --git a/web/app/sketcher/actions/constraintGlobalActions.js b/web/app/sketcher/actions/constraintGlobalActions.js
index 332d4b82..0c02e0d7 100644
--- a/web/app/sketcher/actions/constraintGlobalActions.js
+++ b/web/app/sketcher/actions/constraintGlobalActions.js
@@ -18,7 +18,7 @@ export default [
id: 'CoincidentGlobal',
shortName: 'Coincident',
kind: 'Constraint',
- description: 'Point Coincident Constraint',
+ description: 'point coincident constraint',
icon: CoincidentConstraintIcon,
invoke: (ctx) => {
@@ -30,7 +30,7 @@ export default [
id: 'VerticalGlobal',
shortName: 'Vertical',
kind: 'Constraint',
- description: 'Vertical Constraint',
+ description: 'vertical constraint',
icon: VerticalConstraintIcon,
invoke: (ctx) => {
@@ -42,7 +42,7 @@ export default [
id: 'HorizontalGlobal',
shortName: 'Horizontal',
kind: 'Constraint',
- description: 'Horizontal Constraint',
+ description: 'horizontal constraint',
icon: HorizontalConstraintIcon,
invoke: (ctx) => {
@@ -54,7 +54,7 @@ export default [
id: 'ParallelGlobal',
shortName: 'Parallel',
kind: 'Constraint',
- description: 'Parallel Constraint',
+ description: 'parallel constraint',
icon: ParallelConstraintIcon,
invoke: (ctx) => {
@@ -66,7 +66,7 @@ export default [
id: 'PerpendicularGlobal',
shortName: 'Perpendicular',
kind: 'Constraint',
- description: 'Perpendicular Constraint',
+ description: 'perpendicular constraint',
icon: PerpendicularConstraintIcon,
invoke: (ctx) => {
@@ -78,7 +78,7 @@ export default [
id: 'DistancePLGlobal',
shortName: 'Point to Line Distance',
kind: 'Constraint',
- description: 'Distance Between Point and Line',
+ description: 'distance between point and line',
icon: DistancePLConstraintIcon,
invoke: (ctx) => {
@@ -90,7 +90,7 @@ export default [
id: 'DistanceGlobal',
shortName: 'Point to Point Distance',
kind: 'Constraint',
- description: 'Distance Between Two Points',
+ description: 'distance between two points',
icon: DistanceConstraintIcon,
invoke: (ctx) => {
@@ -102,7 +102,7 @@ export default [
id: 'EntityEqualityGlobal',
shortName: 'Entity Equality',
kind: 'Constraint',
- description: 'Equal Length or Equal Radius',
+ description: 'equal length or equal radius',
icon: EqualConstraintIcon,
invoke: (ctx) => {
@@ -118,7 +118,7 @@ export default [
id: 'PointOnLineGlobal',
shortName: 'Point On Line',
kind: 'Constraint',
- description: 'Point On Line',
+ description: 'point on line',
icon: PointOnLineConstraintIcon,
invoke: (ctx) => {
@@ -130,7 +130,7 @@ export default [
id: 'TangentGlobal',
shortName: 'Tangent',
kind: 'Constraint',
- description: 'Tangent Between Different Curves',
+ description: 'tangent between different curves',
icon: TangentConstraintIcon,
invoke: (ctx) => {
@@ -142,7 +142,7 @@ export default [
id: 'RadiusGlobal',
shortName: 'Radius',
kind: 'Constraint',
- description: 'Radius of a Circle or Arc',
+ description: 'radius of a circle or arc',
icon: RadiusConstraintIcon,
invoke: (ctx) => {
@@ -154,7 +154,7 @@ export default [
id: 'PointOnCurveGlobal',
shortName: 'Point On Curve',
kind: 'Constraint',
- description: 'Point On Curve',
+ description: 'point on curve',
icon: PointOnCurveConstraintIcon,
invoke: (ctx) => {
@@ -166,7 +166,7 @@ export default [
id: 'PointInMiddleGlobal',
shortName: 'Point In Middle',
kind: 'Constraint',
- description: 'Point In Middle',
+ description: 'point in middle',
icon: PointInMiddleConstraintIcon,
invoke: (ctx) => {
@@ -178,7 +178,7 @@ export default [
id: 'SymmetryGlobal',
shortName: 'Symmetry',
kind: 'Constraint',
- description: 'Symmetry',
+ description: 'symmetry',
icon: SymmetryConstraintIcon,
invoke: (ctx) => {
@@ -190,7 +190,7 @@ export default [
id: 'AngleBetweenGlobal',
shortName: 'Angle Between',
kind: 'Constraint',
- description: 'Angle Between',
+ description: 'angle between',
icon: AngleBetweenConstraintIcon,
invoke: (ctx) => {
@@ -202,7 +202,7 @@ export default [
id: 'AngleGlobal',
shortName: 'Angle',
kind: 'Constraint',
- description: 'Angle of a Line',
+ description: 'angle of a line',
icon: AngleConstraintIcon,
invoke: (ctx) => {
@@ -214,7 +214,7 @@ export default [
id: 'LockGlobal',
shortName: 'Lock',
kind: 'Constraint',
- description: 'Locks a point',
+ description: 'locks a point',
icon: LockConstraintIcon,
invoke: (ctx) => {
@@ -226,7 +226,7 @@ export default [
id: 'FilletGlobal',
shortName: 'Fillet',
kind: 'Constraint',
- description: 'Make a Fillet',
+ description: 'make a fillet',
icon: FilletConstraintIcon,
invoke: (ctx) => {
@@ -235,10 +235,10 @@ export default [
},
{
- id: 'Mirror',
+ id: 'MirrorStart',
shortName: 'Mirror',
kind: 'Constraint',
- description: 'Make a Fillet',
+ description: 'adds mirror generator',
icon: MirrorGeneratorIcon,
invoke: (ctx) => {
diff --git a/web/app/sketcher/actions/operationActions.js b/web/app/sketcher/actions/operationActions.js
index 98d41c07..70d0295a 100644
--- a/web/app/sketcher/actions/operationActions.js
+++ b/web/app/sketcher/actions/operationActions.js
@@ -1,6 +1,7 @@
import {Generator} from "../id-generator";
import {SketchGenerator} from "../generators/sketchGenerator";
import {MirrorGeneratorSchema} from "../generators/mirrorGenerator";
+import {MirrorGeneratorIcon} from "../icons/generators/GeneratorIcons";
export default [
@@ -9,6 +10,7 @@ export default [
shortName: 'Mirror',
kind: 'Generator',
description: 'Mirror Objects',
+ icon: MirrorGeneratorIcon,
wizard: MirrorGeneratorSchema.params ,
diff --git a/web/app/sketcher/components/ConstraintExplorer.jsx b/web/app/sketcher/components/ConstraintExplorer.jsx
index e67329ce..1e061962 100644
--- a/web/app/sketcher/components/ConstraintExplorer.jsx
+++ b/web/app/sketcher/components/ConstraintExplorer.jsx
@@ -5,6 +5,7 @@ import {useStream} from "ui/effects";
import {SketcherAppContext} from "./SketcherApp";
import cx from 'classnames';
import {editConstraint} from "./ConstraintEditor";
+import {NoIcon} from "../icons/NoIcon";
export function ConstraintExplorer(props) {
@@ -73,12 +74,14 @@ export function ConstraintButton({prefix='', constraint: c, ...props}) {
const conflicting = c.stage.algNumSystem.conflicting.has(c);
const redundant = c.stage.algNumSystem.redundant.has(c);
+ const Icon = c.schema.icon || NoIcon;
+
return
c.schema.constants && edit(c)}
onMouseEnter={() => highlight(c)}
onMouseLeave={() => withdraw(c)}
{...props}>
-

+
{prefix} {c.schema.name}
@@ -107,6 +110,8 @@ export function GeneratorButton({prefix='', generator: c, ...props}) {
viewer.refresh();
};
+ const Icon = c.schema.icon || NoIcon;
+
useEffect(() => withdraw, [c]);
return
highlight(c)}
onMouseLeave={() => withdraw(c)}
{...props}>
-

+
{prefix} {c.schema.title}
diff --git a/web/app/sketcher/components/ConstraintExplorer.less b/web/app/sketcher/components/ConstraintExplorer.less
index acecc930..4b9f78b7 100644
--- a/web/app/sketcher/components/ConstraintExplorer.less
+++ b/web/app/sketcher/components/ConstraintExplorer.less
@@ -20,7 +20,7 @@
.objectIcon {
border-radius: @itemRadius 0 0 @itemRadius;
padding: 3px 3px;
- background-color: @alt-color;
+ background-color: #606060;
}
.removeButton {
diff --git a/web/app/sketcher/components/ContextualControls.jsx b/web/app/sketcher/components/ContextualControls.jsx
index 3064e8d8..4e7d045f 100644
--- a/web/app/sketcher/components/ContextualControls.jsx
+++ b/web/app/sketcher/components/ContextualControls.jsx
@@ -5,6 +5,8 @@ import {useStream} from "../../../../modules/ui/effects";
import {SketcherAppContext} from "./SketcherApp";
import {MatchIndex, matchSelection} from "../selectionMatcher";
import {ConstraintButton, GeneratorButton} from "./ConstraintExplorer";
+import {Columnizer} from "../../../../modules/ui/components/Columnizer";
+import {NoIcon} from "../icons/NoIcon";
export function ContextualControls() {
@@ -32,19 +34,23 @@ export function ContextualControls() {
AVAILABLE ACTIONS:
- {
- availableActions.map(a => )
- }
+
+ {
+ availableActions.map(a => {
+ const Icon = a.icon || NoIcon;
+
+ return
+ })
+ }
+
{
nonInternalConstraints && nonInternalConstraints.length !== 0 && <>
diff --git a/web/app/sketcher/constr/ANConstraints.js b/web/app/sketcher/constr/ANConstraints.js
index c5e627f0..3bc4e61d 100644
--- a/web/app/sketcher/constr/ANConstraints.js
+++ b/web/app/sketcher/constr/ANConstraints.js
@@ -1,21 +1,36 @@
import {Param} from '../shapes/param';
-import {R_DistancePP, R_Equal, R_PointOnLine} from "./residuals";
-import {indexById} from "../../../../modules/gems/iterables";
import {_270, _90, DEG_RAD, distanceAB, makeAngle0_360} from "../../math/math";
import {COS_FN, Polynomial, POW_1_FN, POW_2_FN, POW_3_FN, SIN_FN} from "./polynomial";
-import {Types} from "../io";
-import Vector from "math/vector";
import {cubicBezierDer1, cubicBezierDer2, cubicBezierPoint} from "../../brep/geom/curves/bezierCubic";
import {greaterThanConstraint, lessThanConstraint} from "./barriers";
import {genericCurveStep} from "../../brep/geom/impl/nurbs-ext";
import {_normalize} from "../../math/vec";
+import {
+ AngleBetweenConstraintIcon,
+ AngleConstraintIcon,
+ CoincidentConstraintIcon,
+ DistanceConstraintIcon,
+ DistancePLConstraintIcon,
+ EqualConstraintIcon, FilletConstraintIcon, GenericConstraintIcon,
+ HorizontalConstraintIcon, LockConstraintIcon,
+ ParallelConstraintIcon,
+ PerpendicularConstraintIcon,
+ PointInMiddleConstraintIcon,
+ PointOnCurveConstraintIcon,
+ PointOnLineConstraintIcon,
+ RadiusConstraintIcon,
+ SymmetryConstraintIcon,
+ TangentConstraintIcon,
+ VerticalConstraintIcon
+} from "../icons/constraints/ConstraintIcons";
export const ConstraintDefinitions = {
PCoincident : {
id: 'PCoincident',
name: 'Two Points Coincidence',
+ icon: CoincidentConstraintIcon,
defineParamsScope: ([p1, p2], callback) => {
p1.visitParams(callback);
@@ -43,6 +58,8 @@ export const ConstraintDefinitions = {
TangentLC: {
id: 'TangentLC',
name: 'Line & Circle Tangency',
+ icon: TangentConstraintIcon,
+
constants: {
inverted: {
type: 'boolean',
@@ -69,6 +86,7 @@ export const ConstraintDefinitions = {
PointOnLine: {
id: 'PointOnLine',
name: 'Point On Line',
+ icon: PointOnLineConstraintIcon,
defineParamsScope: ([pt, segment], callback) => {
pt.visitParams(callback);
@@ -98,6 +116,7 @@ export const ConstraintDefinitions = {
PointOnCircle: {
id: 'PointOnCircle',
name: 'Point On Circle',
+ icon: PointOnCurveConstraintIcon,
defineParamsScope: ([pt, circle], callback) => {
pt.visitParams(callback);
@@ -133,6 +152,7 @@ export const ConstraintDefinitions = {
PointOnBezier: {
id: 'PointOnBezier',
name: 'Point On Bezier Curve',
+ icon: PointOnCurveConstraintIcon,
initialGuess: ([p0x,p0y, p3x,p3y, p1x,p1y, p2x,p2y, t, px, py]) => {
const _t = t.get();
@@ -162,6 +182,7 @@ export const ConstraintDefinitions = {
TangentLineBezier: {
id: 'TangentLineBezier',
name: 'Line & Bezier Tangency',
+ icon: TangentConstraintIcon,
initialGuess([p0x,p0y, p3x,p3y, p1x,p1y, p2x,p2y, _t, px,py, nx,ny, _ang, ax,ay]) {
const ang = _ang.get();
@@ -295,6 +316,7 @@ export const ConstraintDefinitions = {
PointOnEllipse: {
id: 'PointOnEllipse',
name: 'Point On Ellipse',
+ icon: PointOnCurveConstraintIcon,
defineParamsScope: ([pt, ellipse], callback) => {
ellipse.visitParams(callback);
@@ -316,6 +338,7 @@ export const ConstraintDefinitions = {
PointInMiddle: {
id: 'PointInMiddle',
name: 'Middle Point',
+ icon: PointInMiddleConstraintIcon,
defineParamsScope: ([pt, segment], callback) => {
segment.a.visitParams(callback);
@@ -357,6 +380,7 @@ export const ConstraintDefinitions = {
Symmetry: {
id: 'Symmetry',
name: 'Symmetry',
+ icon: SymmetryConstraintIcon,
defineParamsScope: ([pt, segment], callback) => {
segment.a.visitParams(callback);
@@ -374,6 +398,8 @@ export const ConstraintDefinitions = {
DistancePP: {
id: 'DistancePP',
name: 'Distance Between Two Point',
+ icon: DistanceConstraintIcon,
+
constants: {
distance: {
type: 'number',
@@ -415,6 +441,8 @@ export const ConstraintDefinitions = {
DistancePL: {
id: 'DistancePL',
name: 'Distance Between Point And Line',
+ icon: DistancePLConstraintIcon,
+
constants: {
distance: {
type: 'number',
@@ -460,6 +488,8 @@ export const ConstraintDefinitions = {
Angle: {
id: 'Angle',
name: 'Absolute Line Angle',
+ icon: AngleConstraintIcon,
+
constants: {
angle: {
type: 'number',
@@ -485,6 +515,8 @@ export const ConstraintDefinitions = {
Vertical: {
id: 'Vertical',
name: 'Line Verticality',
+ icon: VerticalConstraintIcon,
+
constants: {
angle: {
readOnly: true,
@@ -510,6 +542,8 @@ export const ConstraintDefinitions = {
Horizontal: {
id: 'Horizontal',
name: 'Line Horizontality',
+ icon: HorizontalConstraintIcon,
+
constants: {
angle: {
readOnly: true,
@@ -535,6 +569,8 @@ export const ConstraintDefinitions = {
AngleBetween: {
id: 'AngleBetween',
name: 'Angle Between Two Lines',
+ icon: AngleBetweenConstraintIcon,
+
constants: {
angle: {
type: 'number',
@@ -562,6 +598,7 @@ export const ConstraintDefinitions = {
Perpendicular: {
id: 'Perpendicular',
name: 'Perpendicular',
+ icon: PerpendicularConstraintIcon,
constants: {
angle: {
@@ -591,6 +628,7 @@ export const ConstraintDefinitions = {
Parallel: {
id: 'Parallel',
name: 'Parallel',
+ icon: ParallelConstraintIcon,
constants: {
angle: {
@@ -621,6 +659,8 @@ export const ConstraintDefinitions = {
SegmentLength: {
id: 'SegmentLength',
name: 'Segment Length',
+ icon: DistanceConstraintIcon,
+
constants: {
length: {
type: 'number',
@@ -654,6 +694,8 @@ export const ConstraintDefinitions = {
RadiusLength: {
id: 'RaduisLength',
name: 'Raduis Length',
+ icon: RadiusConstraintIcon,
+
constants: {
length: {
type: 'number',
@@ -693,6 +735,7 @@ export const ConstraintDefinitions = {
EqualRadius: {
id: 'EqualRadius',
name: 'Equal Radius',
+ icon: EqualConstraintIcon,
defineParamsScope: ([c1, c2], callback) => {
callback(c1.r);
@@ -707,6 +750,7 @@ export const ConstraintDefinitions = {
EqualLength: {
id: 'EqualLength',
name: 'Equal Length',
+ icon: EqualConstraintIcon,
defineParamsScope: ([s1, s2], callback) => {
callback(s1.params.t);
@@ -721,6 +765,8 @@ export const ConstraintDefinitions = {
LockPoint: {
id: 'LockPoint',
name: 'Lock Point',
+ icon: LockConstraintIcon,
+
constants: {
x: {
type: 'number',
@@ -752,6 +798,7 @@ export const ConstraintDefinitions = {
ArcConsistency: {
id: 'ArcConsistency',
name: 'Arc Consistency',
+ icon: GenericConstraintIcon,
defineParamsScope: ([arc], callback) => {
arc.visitParams(callback);
@@ -777,6 +824,7 @@ export const ConstraintDefinitions = {
Fillet: {
id: 'Fillet',
name: 'Fillet Between Two Lines',
+ icon: FilletConstraintIcon,
constants: {
inverted1: {
diff --git a/web/app/sketcher/generators/mirrorGenerator.js b/web/app/sketcher/generators/mirrorGenerator.js
index 572dfd3f..a2eada18 100644
--- a/web/app/sketcher/generators/mirrorGenerator.js
+++ b/web/app/sketcher/generators/mirrorGenerator.js
@@ -1,11 +1,13 @@
import Vector from "math/vector";
import {Segment} from "../shapes/segment";
+import {MirrorGeneratorIcon} from "../icons/generators/GeneratorIcons";
export const MirrorGeneratorSchema = {
id: 'Mirror',
title: 'Mirror',
- description: 'Reflects objects against a given line',
+ description: 'Reflects objects off of a given line',
+ icon: MirrorGeneratorIcon,
params: [
{
diff --git a/web/app/sketcher/icons/NoIcon.jsx b/web/app/sketcher/icons/NoIcon.jsx
new file mode 100644
index 00000000..cb2fea92
--- /dev/null
+++ b/web/app/sketcher/icons/NoIcon.jsx
@@ -0,0 +1,3 @@
+import {GenericConstraintIcon} from "./constraints/ConstraintIcons";
+
+export const NoIcon = GenericConstraintIcon;
\ No newline at end of file
diff --git a/web/app/sketcher/icons/constraints/ConstraintIcons.jsx b/web/app/sketcher/icons/constraints/ConstraintIcons.jsx
index 5eac6a6d..63026d9b 100644
--- a/web/app/sketcher/icons/constraints/ConstraintIcons.jsx
+++ b/web/app/sketcher/icons/constraints/ConstraintIcons.jsx
@@ -1,110 +1,116 @@
import React from 'react';
import {SvgIcon} from 'svg/SvgIcon';
import coincidentContent from './coincident-constraint.svg';
-import distanceplContent from "./distancepl-constraint.svg";
-import horizontalContent from "./horizontal-constraint.svg";
-import parallelContent from "./parallel-constraint.svg";
-import perpendicularContent from "./perpendicular-constraint.svg";
-import polContent from "./point-on-line-constraint.svg";
-import verticalContent from "./vertical-constraint.svg";
-import distanceContent from "./distance-constraint.svg";
-import equalContent from "./equal-constraint.svg";
-import tangentContent from "./tangent-constraint.svg";
-import radiusContent from "./radius-constraint.svg";
-import pointOnCurveContent from "./point-on-curve-constraint.svg";
-import pointInMiddleContent from "./point-in-middle-constraint.svg";
-import symmetryContent from "./symmetry-constraint.svg";
-import angleBetweenContent from "./angle-between-constraint.svg";
-import angleContent from "./angle-constraint.svg";
-import lockContent from "./lock-constraint.svg";
-import filletContent from "./fillet-constraint.svg";
+import distanceplContent from './distancepl-constraint.svg';
+import horizontalContent from './horizontal-constraint.svg';
+import parallelContent from './parallel-constraint.svg';
+import perpendicularContent from './perpendicular-constraint.svg';
+import polContent from './point-on-line-constraint.svg';
+import verticalContent from './vertical-constraint.svg';
+import distanceContent from './distance-constraint.svg';
+import equalContent from './equal-constraint.svg';
+import tangentContent from './tangent-constraint.svg';
+import radiusContent from './radius-constraint.svg';
+import pointOnCurveContent from './point-on-curve-constraint.svg';
+import pointInMiddleContent from './point-in-middle-constraint.svg';
+import symmetryContent from './symmetry-constraint.svg';
+import angleBetweenContent from './angle-between-constraint.svg';
+import angleContent from './angle-constraint.svg';
+import lockContent from './lock-constraint.svg';
+import filletContent from './fillet-constraint.svg';
+import genericContent from './generic-constraint.svg';
-export function CoincidentConstraintIcon() {
+export function CoincidentConstraintIcon(props) {
- return
+ return
}
-export function DistancePLConstraintIcon() {
+export function DistancePLConstraintIcon(props) {
- return
+ return
}
-export function HorizontalConstraintIcon() {
+export function HorizontalConstraintIcon(props) {
- return
+ return
}
-export function ParallelConstraintIcon() {
+export function ParallelConstraintIcon(props) {
- return
+ return
}
-export function PerpendicularConstraintIcon() {
+export function PerpendicularConstraintIcon(props) {
- return
+ return
}
-export function PointOnLineConstraintIcon() {
+export function PointOnLineConstraintIcon(props) {
- return
+ return
}
-export function VerticalConstraintIcon() {
+export function VerticalConstraintIcon(props) {
- return
+ return
}
-export function DistanceConstraintIcon() {
+export function DistanceConstraintIcon(props) {
- return
+ return
}
-export function EqualConstraintIcon() {
+export function EqualConstraintIcon(props) {
- return
+ return
}
-export function TangentConstraintIcon() {
+export function TangentConstraintIcon(props) {
- return
+ return
}
-export function RadiusConstraintIcon() {
+export function RadiusConstraintIcon(props) {
- return
+ return
}
-export function PointOnCurveConstraintIcon() {
+export function PointOnCurveConstraintIcon(props) {
- return
+ return
}
-export function PointInMiddleConstraintIcon() {
+export function PointInMiddleConstraintIcon(props) {
- return
+ return
}
-export function SymmetryConstraintIcon() {
+export function SymmetryConstraintIcon(props) {
- return
+ return
}
-export function AngleBetweenConstraintIcon() {
+export function AngleBetweenConstraintIcon(props) {
- return
+ return
}
-export function AngleConstraintIcon() {
+export function AngleConstraintIcon(props) {
- return
+ return
}
-export function LockConstraintIcon() {
+export function LockConstraintIcon(props) {
- return
+ return
}
-export function FilletConstraintIcon() {
+export function FilletConstraintIcon(props) {
- return
+ return
+}
+
+export function GenericConstraintIcon(props) {
+
+ return
}
\ No newline at end of file
diff --git a/web/app/sketcher/icons/constraints/generic-constraint.svg b/web/app/sketcher/icons/constraints/generic-constraint.svg
new file mode 100644
index 00000000..498830d6
--- /dev/null
+++ b/web/app/sketcher/icons/constraints/generic-constraint.svg
@@ -0,0 +1,20 @@
+
diff --git a/web/app/sketcher/icons/generators/GeneratorIcons.jsx b/web/app/sketcher/icons/generators/GeneratorIcons.jsx
index e2a04449..1cb39852 100644
--- a/web/app/sketcher/icons/generators/GeneratorIcons.jsx
+++ b/web/app/sketcher/icons/generators/GeneratorIcons.jsx
@@ -2,8 +2,8 @@ import React from 'react';
import {SvgIcon} from 'svg/SvgIcon';
import mirrorContent from './mirror-generator.svg';
-export function MirrorGeneratorIcon() {
+export function MirrorGeneratorIcon(props) {
- return
+ return
}
diff --git a/web/app/sketcher/io.js b/web/app/sketcher/io.js
index b2d96e42..b458060b 100644
--- a/web/app/sketcher/io.js
+++ b/web/app/sketcher/io.js
@@ -8,32 +8,17 @@ import {Circle} from './shapes/circle'
import {Ellipse} from './shapes/ellipse'
import {EllipticalArc} from './shapes/elliptical-arc'
import {BezierCurve} from './shapes/bezier-curve'
-import {HDimension, VDimension, Dimension, DiameterDimension} from './shapes/dim'
+import {DiameterDimension, Dimension, HDimension, VDimension} from './shapes/dim'
import {Constraints} from './parametric'
-import {HashTable} from '../utils/hashmap'
import Vector from 'math/vector';
import exportTextData from 'gems/exportTextData';
import NurbsCurve from '../brep/geom/curves/nurbsCurve';
import {NurbsObject} from './shapes/nurbsObject';
-import {System} from './system';
import {AlgNumConstraint} from "./constr/ANConstraints";
import {SketchGenerator} from "./generators/sketchGenerator";
-import {getUIState} from "./uiState";
+import {SketchTypes} from "./shapes/sketch-types";
-const Types = {
- POINT : 'TCAD.TWO.EndPoint',
- SEGMENT : 'TCAD.TWO.Segment',
- ARC : 'TCAD.TWO.Arc',
- CIRCLE : 'TCAD.TWO.Circle',
- ELLIPSE : 'TCAD.TWO.Ellipse',
- ELL_ARC : 'TCAD.TWO.EllipticalArc',
- BEZIER : 'TCAD.TWO.BezierCurve',
- NURBS : 'TCAD.TWO.NurbsObject',
- DIM : 'TCAD.TWO.Dimension',
- HDIM : 'TCAD.TWO.HDimension',
- VDIM : 'TCAD.TWO.VDimension',
- DDIM : 'TCAD.TWO.DiameterDimension'
-};
+const Types = SketchTypes;
IO.BOUNDARY_LAYER_NAME = "__bounds__";
@@ -790,4 +775,4 @@ IO.prototype.dxfExport = function () {
IO.exportTextData = exportTextData;
-export {IO, BBox, Types};
\ No newline at end of file
+export {IO, BBox};
\ No newline at end of file
diff --git a/web/app/sketcher/shapes/sketch-object.js b/web/app/sketcher/shapes/sketch-object.js
index 6cc4b825..41f7005a 100644
--- a/web/app/sketcher/shapes/sketch-object.js
+++ b/web/app/sketcher/shapes/sketch-object.js
@@ -1,9 +1,7 @@
import {Generator} from '../id-generator'
import {Shape} from './shape'
-import {Types} from '../io';
import {Styles} from "../styles";
-import {dfs} from 'gems/traverse';
-import {ConstraintDefinitions} from "../constr/ANConstraints";
+import {SketchTypes} from "./sketch-types";
export class SketchObject extends Shape {
@@ -239,7 +237,7 @@ export class SketchObject extends Shape {
export function pointIterator(shape, func) {
shape.accept(o => {
- if (o._class === Types.POINT) {
+ if (o._class === SketchTypes.POINT) {
func(o);
}
return true;
diff --git a/web/app/sketcher/shapes/sketch-types.js b/web/app/sketcher/shapes/sketch-types.js
new file mode 100644
index 00000000..3b129fea
--- /dev/null
+++ b/web/app/sketcher/shapes/sketch-types.js
@@ -0,0 +1,14 @@
+export const SketchTypes = {
+ POINT : 'TCAD.TWO.EndPoint',
+ SEGMENT : 'TCAD.TWO.Segment',
+ ARC : 'TCAD.TWO.Arc',
+ CIRCLE : 'TCAD.TWO.Circle',
+ ELLIPSE : 'TCAD.TWO.Ellipse',
+ ELL_ARC : 'TCAD.TWO.EllipticalArc',
+ BEZIER : 'TCAD.TWO.BezierCurve',
+ NURBS : 'TCAD.TWO.NurbsObject',
+ DIM : 'TCAD.TWO.Dimension',
+ HDIM : 'TCAD.TWO.HDimension',
+ VDIM : 'TCAD.TWO.VDimension',
+ DDIM : 'TCAD.TWO.DiameterDimension'
+};
\ No newline at end of file