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));