import React, {useContext, useEffect} from 'react'; import ls from './ConstraintExplorer.less'; import Fa from 'ui/components/Fa'; import {useStream} from "ui/effects"; import cx from 'classnames'; import {showConstraintEditorUI} from "./ConstraintEditor"; import {NoIcon} from "../icons/NoIcon"; import {SketcherAppContext} from "./SketcherAppContext"; import {StageControl} from "./StageControl"; import {Scope} from "./Scope"; export function ConstraintExplorer(props) { return
Constraints
; } export function ConstraintList() { const constraints = useStream(ctx => ctx.viewer.parametricManager.$constraints); const generators = useStream(ctx => ctx.viewer.parametricManager.$generators); let i = 0; return
Stages
{constraints.map((c) => { if (c.internal) { return null; } i ++; return })}
Generators
{generators.map((c) => { i ++; return })}
} export function ConstraintButton({prefix='', constraint: c, ...props}) { const {viewer, ui} = useContext(SketcherAppContext); const edit = (constraint) => { if (constraint.editable) { showConstraintEditorUI(ui.$constraintEditRequest, constraint, () => { viewer.parametricManager.constraintUpdated(c); }); } }; const remove = constr => { viewer.parametricManager.remove(constr); viewer.refresh(); }; const highlight = constr => { viewer.capture('highlight', constr.objects, true); viewer.refresh(); }; const withdraw = () => { viewer.withdrawAll('highlight'); viewer.refresh(); }; useEffect(() => withdraw, [c]); 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} remove(c)}>
} export function GeneratorButton({prefix='', generator: c, ...props}) { const {viewer, ui} = useContext(SketcherAppContext); const edit = (generator) => { }; const remove = generator => { viewer.parametricManager.removeGenerator(c); }; const highlight = generator => { }; const withdraw = () => { viewer.withdrawAll('highlight'); viewer.refresh(); }; const Icon = c.schema.icon || NoIcon; useEffect(() => withdraw, [c]); return
edit(c)} onMouseEnter={() => highlight(c)} onMouseLeave={() => withdraw(c)} {...props}> {prefix} {c.schema.title} remove(c)}>
} // function configureConstraintsFilter() { // var constraintsCaption = constraintsView.node.find('.tool-caption'); // var constraintsFilterBtn = ui.faBtn("filter"); // constraintsFilterBtn.css({'float': 'right', 'margin-right': '10px', cursor: 'pointer'}); // constraintsCaption.append(constraintsFilterBtn); // var constraintsFilterWin = new ui.Window($('#constrFilter'), app.winManager); // ui.bindOpening(constraintsFilterBtn, constraintsFilterWin); // var content = constraintsFilterWin.root.find('.content'); // // var constrTypes = [], constrType; // for (var cname in Constraints) { // c = Constraints[cname]; // if (c.prototype !== undefined && c.prototype.UI_NAME !== undefined && !c.prototype.aux) { // constrTypes.push(c); // } // } // constrTypes.sort(function (a, b) { // if (a.prototype.NAME == 'coi') { // return b.prototype.NAME == 'coi' ? 0 : -1; // } // return a.prototype.UI_NAME.localeCompare(b.prototype.UI_NAME) // }); // for (var i = 0; i < constrTypes.length; i++) { // var c = constrTypes[i]; // if (c.prototype !== undefined && c.prototype.UI_NAME !== undefined && !c.prototype.aux) { // var checkbox = $('', {type : 'checkbox', checked : 'checked', value : c.prototype.NAME}); // content.append( // $('