From 2cd26f19e5ec85f7e9d5af5b244f22ac3cd73ab4 Mon Sep 17 00:00:00 2001 From: Val Erastov Date: Mon, 29 Oct 2018 21:49:40 -0700 Subject: [PATCH] adding boolean capabilities to primitive operations --- .../ui/components/controls/ComboBoxControl.jsx | 15 +++++++++++++++ .../cad/craft/primitives/booleanOptionHelper.js | 10 ++++++++++ web/app/cad/craft/primitives/box/BoxWizard.jsx | 2 ++ web/app/cad/craft/primitives/box/boxOperation.js | 16 +++++++++------- web/app/cad/craft/primitives/cone/ConeWizard.jsx | 2 ++ .../cad/craft/primitives/cone/coneOperation.js | 15 +++++++++------ .../craft/primitives/cylinder/CylinderWizard.jsx | 2 ++ .../primitives/cylinder/cylinderOperation.js | 13 ++++++++----- .../cad/craft/primitives/sphere/SphereWizard.jsx | 2 ++ .../craft/primitives/sphere/sphereOperation.js | 11 +++++++---- .../cad/craft/primitives/torus/TorusWizard.jsx | 2 ++ .../cad/craft/primitives/torus/torusOperation.js | 13 ++++++++----- .../wizard/components/form/BooleanChioce.jsx | 12 ++++++++++++ .../cad/craft/wizard/components/form/Fields.jsx | 2 ++ 14 files changed, 90 insertions(+), 27 deletions(-) create mode 100644 modules/ui/components/controls/ComboBoxControl.jsx create mode 100644 web/app/cad/craft/primitives/booleanOptionHelper.js create mode 100644 web/app/cad/craft/wizard/components/form/BooleanChioce.jsx diff --git a/modules/ui/components/controls/ComboBoxControl.jsx b/modules/ui/components/controls/ComboBoxControl.jsx new file mode 100644 index 00000000..57541c9f --- /dev/null +++ b/modules/ui/components/controls/ComboBoxControl.jsx @@ -0,0 +1,15 @@ +import React from 'react'; + +export default class ComboBoxControl extends React.Component { + + render() { + let {onChange, value, children} = this.props; + return + } +} + +export function ComboBoxOption({children, value}) { + return +} diff --git a/web/app/cad/craft/primitives/booleanOptionHelper.js b/web/app/cad/craft/primitives/booleanOptionHelper.js new file mode 100644 index 00000000..1f6c2c38 --- /dev/null +++ b/web/app/cad/craft/primitives/booleanOptionHelper.js @@ -0,0 +1,10 @@ + +export function assignBooleanParams(execParams, rawParams, getAllShells) { + if (rawParams.boolean) { + execParams.boolean = { + type: rawParams.boolean, + operands: getAllShells() + } + } + return execParams; +} \ No newline at end of file diff --git a/web/app/cad/craft/primitives/box/BoxWizard.jsx b/web/app/cad/craft/primitives/box/BoxWizard.jsx index b1827c96..fc4c2fe9 100644 --- a/web/app/cad/craft/primitives/box/BoxWizard.jsx +++ b/web/app/cad/craft/primitives/box/BoxWizard.jsx @@ -1,6 +1,7 @@ import React from 'react'; import {Group} from '../../wizard/components/form/Form'; import {NumberField, ReadOnlyValueField} from '../../wizard/components/form/Fields'; +import BooleanChoice from '../../wizard/components/form/BooleanChioce'; export default function BoxWizard() { return @@ -8,5 +9,6 @@ export default function BoxWizard() { + ; } \ No newline at end of file diff --git a/web/app/cad/craft/primitives/box/boxOperation.js b/web/app/cad/craft/primitives/box/boxOperation.js index c56cfab1..20465777 100644 --- a/web/app/cad/craft/primitives/box/boxOperation.js +++ b/web/app/cad/craft/primitives/box/boxOperation.js @@ -2,16 +2,18 @@ import BoxWizard from './BoxWizard'; import {BoxGeometry} from 'three'; import schema from './boxOpSchema'; import primitivePreviewer from '../primitivePreviewer'; -import CSys from '../../../../math/csys'; import datumConsumingOperation from '../datumConsumingOperation'; +import {assignBooleanParams} from '../booleanOptionHelper'; function run(params, services) { - return datumConsumingOperation(params, services, csys => services.craftEngine.createBox({ - csys, - width: params.width, - height: params.height, - depth: params.depth - })); + return datumConsumingOperation(params, services, csys => services.craftEngine.createBox( + assignBooleanParams({ + csys, + width: params.width, + height: params.height, + depth: params.depth + }, params, services.cadRegistry.getAllShells) + )); } export default { diff --git a/web/app/cad/craft/primitives/cone/ConeWizard.jsx b/web/app/cad/craft/primitives/cone/ConeWizard.jsx index 45230ae0..1ecf47c3 100644 --- a/web/app/cad/craft/primitives/cone/ConeWizard.jsx +++ b/web/app/cad/craft/primitives/cone/ConeWizard.jsx @@ -1,6 +1,7 @@ import React from 'react'; import {Group} from '../../wizard/components/form/Form'; import {NumberField, ReadOnlyValueField} from '../../wizard/components/form/Fields'; +import BooleanChoice from '../../wizard/components/form/BooleanChioce'; export default function TorusWizard() { return @@ -8,5 +9,6 @@ export default function TorusWizard() { + ; } \ No newline at end of file diff --git a/web/app/cad/craft/primitives/cone/coneOperation.js b/web/app/cad/craft/primitives/cone/coneOperation.js index 05616160..8c5931c4 100644 --- a/web/app/cad/craft/primitives/cone/coneOperation.js +++ b/web/app/cad/craft/primitives/cone/coneOperation.js @@ -5,14 +5,17 @@ import {IMAGINARY_SURFACE_MATERIAL} from '../../../preview/scenePreviewer'; import CSys from '../../../../math/csys'; import * as SceneGraph from '../../../../../../modules/scene/sceneGraph'; import datumConsumingOperation from '../datumConsumingOperation'; +import {assignBooleanParams} from '../booleanOptionHelper'; function run(params, services) { - return datumConsumingOperation(params, services, csys => services.craftEngine.createCone({ - csys, - radius: params.radius, - frustum: params.frustum, - height: params.height - })); + return datumConsumingOperation(params, services, csys => services.craftEngine.createCone( + assignBooleanParams({ + csys, + radius: params.radius, + frustum: params.frustum, + height: params.height + }, params, services.cadRegistry.getAllShells) + )); } function previewer(ctx, initialParams) { diff --git a/web/app/cad/craft/primitives/cylinder/CylinderWizard.jsx b/web/app/cad/craft/primitives/cylinder/CylinderWizard.jsx index dd3bbcaf..d04f1927 100644 --- a/web/app/cad/craft/primitives/cylinder/CylinderWizard.jsx +++ b/web/app/cad/craft/primitives/cylinder/CylinderWizard.jsx @@ -1,11 +1,13 @@ import React from 'react'; import {Group} from '../../wizard/components/form/Form'; import {NumberField, ReadOnlyValueField} from '../../wizard/components/form/Fields'; +import BooleanChoice from '../../wizard/components/form/BooleanChioce'; export default function CylinderWizard() { return + ; } \ No newline at end of file diff --git a/web/app/cad/craft/primitives/cylinder/cylinderOperation.js b/web/app/cad/craft/primitives/cylinder/cylinderOperation.js index a1be3947..f090710a 100644 --- a/web/app/cad/craft/primitives/cylinder/cylinderOperation.js +++ b/web/app/cad/craft/primitives/cylinder/cylinderOperation.js @@ -3,13 +3,16 @@ import schema from './cylinderOpSchema'; import primitivePreviewer from '../primitivePreviewer'; import CylinderWizard from './CylinderWizard'; import datumConsumingOperation from '../datumConsumingOperation'; +import {assignBooleanParams} from '../booleanOptionHelper'; function run(params, services) { - return datumConsumingOperation(params, services, csys => services.craftEngine.createCylinder({ - csys, - radius: params.radius, - height: params.height - })); + return datumConsumingOperation(params, services, csys => services.craftEngine.createCylinder( + assignBooleanParams({ + csys, + radius: params.radius, + height: params.height + }, params, services.cadRegistry.getAllShells) + )); } export default { diff --git a/web/app/cad/craft/primitives/sphere/SphereWizard.jsx b/web/app/cad/craft/primitives/sphere/SphereWizard.jsx index ac0105fd..eae54fbf 100644 --- a/web/app/cad/craft/primitives/sphere/SphereWizard.jsx +++ b/web/app/cad/craft/primitives/sphere/SphereWizard.jsx @@ -1,10 +1,12 @@ import React from 'react'; import {Group} from '../../wizard/components/form/Form'; import {NumberField, ReadOnlyValueField} from '../../wizard/components/form/Fields'; +import BooleanChoice from '../../wizard/components/form/BooleanChioce'; export default function SphereWizard() { return + ; } \ No newline at end of file diff --git a/web/app/cad/craft/primitives/sphere/sphereOperation.js b/web/app/cad/craft/primitives/sphere/sphereOperation.js index 0e9394bc..0802fde6 100644 --- a/web/app/cad/craft/primitives/sphere/sphereOperation.js +++ b/web/app/cad/craft/primitives/sphere/sphereOperation.js @@ -3,12 +3,15 @@ import schema from './sphereOpSchema'; import primitivePreviewer from '../primitivePreviewer'; import SphereWizard from './SphereWizard'; import datumConsumingOperation from '../datumConsumingOperation'; +import {assignBooleanParams} from '../booleanOptionHelper'; function run(params, services) { - return datumConsumingOperation(params, services, csys => services.craftEngine.createSphere({ - csys, - radius: params.radius, - })); + return datumConsumingOperation(params, services, csys => services.craftEngine.createSphere( + assignBooleanParams({ + csys, + radius: params.radius, + }, params, services.cadRegistry.getAllShells) + )); } export default { diff --git a/web/app/cad/craft/primitives/torus/TorusWizard.jsx b/web/app/cad/craft/primitives/torus/TorusWizard.jsx index a63e6a5a..e8f41c6e 100644 --- a/web/app/cad/craft/primitives/torus/TorusWizard.jsx +++ b/web/app/cad/craft/primitives/torus/TorusWizard.jsx @@ -1,11 +1,13 @@ import React from 'react'; import {Group} from '../../wizard/components/form/Form'; import {NumberField, ReadOnlyValueField} from '../../wizard/components/form/Fields'; +import BooleanChoice from '../../wizard/components/form/BooleanChioce'; export default function TorusWizard() { return + ; } \ No newline at end of file diff --git a/web/app/cad/craft/primitives/torus/torusOperation.js b/web/app/cad/craft/primitives/torus/torusOperation.js index 0d354233..7b7232e4 100644 --- a/web/app/cad/craft/primitives/torus/torusOperation.js +++ b/web/app/cad/craft/primitives/torus/torusOperation.js @@ -5,13 +5,16 @@ import {IMAGINARY_SURFACE_MATERIAL} from '../../../preview/scenePreviewer'; import CSys from '../../../../math/csys'; import * as SceneGraph from '../../../../../../modules/scene/sceneGraph'; import datumConsumingOperation from '../datumConsumingOperation'; +import {assignBooleanParams} from '../booleanOptionHelper'; function run(params, services) { - return datumConsumingOperation(params, services, csys => services.craftEngine.createTorus({ - csys, - radius: params.radius, - tube: params.tube - })); + return datumConsumingOperation(params, services, csys => services.craftEngine.createTorus( + assignBooleanParams({ + csys, + radius: params.radius, + tube: params.tube + }, params, services.cadRegistry.getAllShells) + )); } function previewer(ctx, initialParams) { diff --git a/web/app/cad/craft/wizard/components/form/BooleanChioce.jsx b/web/app/cad/craft/wizard/components/form/BooleanChioce.jsx new file mode 100644 index 00000000..10ed7bda --- /dev/null +++ b/web/app/cad/craft/wizard/components/form/BooleanChioce.jsx @@ -0,0 +1,12 @@ +import React from 'react'; +import {ComboBoxOption} from 'ui/components/controls/ComboBoxControl'; +import {ComboBoxField} from './Fields'; + +export default function BooleanChoice(props) { + return + {''} + intersect + subtract + union + +} \ No newline at end of file diff --git a/web/app/cad/craft/wizard/components/form/Fields.jsx b/web/app/cad/craft/wizard/components/form/Fields.jsx index 8f31ec55..ca209b16 100644 --- a/web/app/cad/craft/wizard/components/form/Fields.jsx +++ b/web/app/cad/craft/wizard/components/form/Fields.jsx @@ -5,9 +5,11 @@ import TextControl from 'ui/components/controls/TextControl'; import RadioButtons from 'ui/components/controls/RadioButtons'; import CheckboxControl from 'ui/components/controls/CheckboxControl'; import ReadOnlyValueControl from 'ui/components/controls/ReadOnlyValueControl'; +import ComboBoxControl from 'ui/components/controls/ComboBoxControl'; export const NumberField = attachToForm(formField(NumberControl)); export const TextField = attachToForm(formField(TextControl)); export const RadioButtonsField = attachToForm(formField(RadioButtons)); export const CheckboxField = attachToForm(formField(CheckboxControl)); +export const ComboBoxField = attachToForm(formField(ComboBoxControl)); export const ReadOnlyValueField = attachToForm(formField(ReadOnlyValueControl));