import React, {useContext, useEffect, useState} from 'react'; import {useStream} from "ui/effects"; import {Status} from "ui/components/Status"; import Folder from "ui/components/Folder"; import {AssemblyConstraints, Constraints3D} from "../constraints3d"; import {AppContext} from "../../dom/components/AppContext"; import cx from 'classnames'; import {NoIcon} from "../../../sketcher/icons/NoIcon"; import ls from "../../../sketcher/components/ConstraintExplorer.less"; import Fa from "ui/components/Fa"; import {AssemblyConstraintDefinition} from "../assemblyConstraintDefinition"; import {ApplicationContext} from "context"; import {AssemblyProcess} from "../assemblySolver"; import {StepByStepSimulation} from "./StepByStepSimulation"; export function AssemblyView() { const ctx = useContext(AppContext); const constraints = useStream(ctx => ctx.assemblyService.constraints$); const status = useStream(ctx => ctx.assemblyService.status$); return
Status:
{constraints.map((constr, i) => )}
} export function AssemblyConstraintButton({prefix='', constraint: c, ...props}: { prefix: string, constraint: AssemblyConstraintDefinition, props?: React.HTMLAttributes }) { const ctx: ApplicationContext = useContext(AppContext); const edit = (constraint) => { if (constraint.editable) { //... } }; const remove = constr => { ctx.assemblyService.removeConstraint(constr); }; const highlight = constr => { ctx.services.marker.clear(); constr.objects.forEach(id => { const entity = ctx.cadRegistry.find(id); if (entity) { ctx.services.marker.markAdding(entity.TYPE, id); } }); }; const withdraw = () => { ctx.services.marker.clear(); }; useEffect(() => withdraw, [c]); const schema = AssemblyConstraints[c.typeId]; if (schema === null) { return
Invalid Constraint {c.typeId}
} const entities = c.objects.map(ctx.cadRegistry.find); const invalid = !!entities.find(x => !x); const Icon = schema.icon || NoIcon; return
schema.constants && edit(c)} onMouseEnter={() => highlight(c)} onMouseLeave={() => withdraw()} {...props}> {prefix} {schema.name} remove(c)}>
}