adding boolean capabilities to primitive operations

This commit is contained in:
Val Erastov 2018-10-29 21:49:40 -07:00
parent 0825dc0065
commit 2cd26f19e5
14 changed files with 90 additions and 27 deletions

View file

@ -0,0 +1,15 @@
import React from 'react';
export default class ComboBoxControl extends React.Component {
render() {
let {onChange, value, children} = this.props;
return <select value={value} onChange={e => onChange(e.target.value)}>
{children}
</select>
}
}
export function ComboBoxOption({children, value}) {
return <option value={value}>{children}</option>
}

View file

@ -0,0 +1,10 @@
export function assignBooleanParams(execParams, rawParams, getAllShells) {
if (rawParams.boolean) {
execParams.boolean = {
type: rawParams.boolean,
operands: getAllShells()
}
}
return execParams;
}

View file

@ -1,6 +1,7 @@
import React from 'react'; import React from 'react';
import {Group} from '../../wizard/components/form/Form'; import {Group} from '../../wizard/components/form/Form';
import {NumberField, ReadOnlyValueField} from '../../wizard/components/form/Fields'; import {NumberField, ReadOnlyValueField} from '../../wizard/components/form/Fields';
import BooleanChoice from '../../wizard/components/form/BooleanChioce';
export default function BoxWizard() { export default function BoxWizard() {
return <Group> return <Group>
@ -8,5 +9,6 @@ export default function BoxWizard() {
<NumberField name='width' /> <NumberField name='width' />
<NumberField name='height' /> <NumberField name='height' />
<NumberField name='depth' /> <NumberField name='depth' />
<BooleanChoice name='boolean' />
</Group>; </Group>;
} }

View file

@ -2,16 +2,18 @@ import BoxWizard from './BoxWizard';
import {BoxGeometry} from 'three'; import {BoxGeometry} from 'three';
import schema from './boxOpSchema'; import schema from './boxOpSchema';
import primitivePreviewer from '../primitivePreviewer'; import primitivePreviewer from '../primitivePreviewer';
import CSys from '../../../../math/csys';
import datumConsumingOperation from '../datumConsumingOperation'; import datumConsumingOperation from '../datumConsumingOperation';
import {assignBooleanParams} from '../booleanOptionHelper';
function run(params, services) { function run(params, services) {
return datumConsumingOperation(params, services, csys => services.craftEngine.createBox({ return datumConsumingOperation(params, services, csys => services.craftEngine.createBox(
csys, assignBooleanParams({
width: params.width, csys,
height: params.height, width: params.width,
depth: params.depth height: params.height,
})); depth: params.depth
}, params, services.cadRegistry.getAllShells)
));
} }
export default { export default {

View file

@ -1,6 +1,7 @@
import React from 'react'; import React from 'react';
import {Group} from '../../wizard/components/form/Form'; import {Group} from '../../wizard/components/form/Form';
import {NumberField, ReadOnlyValueField} from '../../wizard/components/form/Fields'; import {NumberField, ReadOnlyValueField} from '../../wizard/components/form/Fields';
import BooleanChoice from '../../wizard/components/form/BooleanChioce';
export default function TorusWizard() { export default function TorusWizard() {
return <Group> return <Group>
@ -8,5 +9,6 @@ export default function TorusWizard() {
<NumberField name='radius' /> <NumberField name='radius' />
<NumberField name='frustum' /> <NumberField name='frustum' />
<NumberField name='height' /> <NumberField name='height' />
<BooleanChoice name='boolean' />
</Group>; </Group>;
} }

View file

@ -5,14 +5,17 @@ import {IMAGINARY_SURFACE_MATERIAL} from '../../../preview/scenePreviewer';
import CSys from '../../../../math/csys'; import CSys from '../../../../math/csys';
import * as SceneGraph from '../../../../../../modules/scene/sceneGraph'; import * as SceneGraph from '../../../../../../modules/scene/sceneGraph';
import datumConsumingOperation from '../datumConsumingOperation'; import datumConsumingOperation from '../datumConsumingOperation';
import {assignBooleanParams} from '../booleanOptionHelper';
function run(params, services) { function run(params, services) {
return datumConsumingOperation(params, services, csys => services.craftEngine.createCone({ return datumConsumingOperation(params, services, csys => services.craftEngine.createCone(
csys, assignBooleanParams({
radius: params.radius, csys,
frustum: params.frustum, radius: params.radius,
height: params.height frustum: params.frustum,
})); height: params.height
}, params, services.cadRegistry.getAllShells)
));
} }
function previewer(ctx, initialParams) { function previewer(ctx, initialParams) {

View file

@ -1,11 +1,13 @@
import React from 'react'; import React from 'react';
import {Group} from '../../wizard/components/form/Form'; import {Group} from '../../wizard/components/form/Form';
import {NumberField, ReadOnlyValueField} from '../../wizard/components/form/Fields'; import {NumberField, ReadOnlyValueField} from '../../wizard/components/form/Fields';
import BooleanChoice from '../../wizard/components/form/BooleanChioce';
export default function CylinderWizard() { export default function CylinderWizard() {
return <Group> return <Group>
<ReadOnlyValueField name='datum' placeholder='origin'/> <ReadOnlyValueField name='datum' placeholder='origin'/>
<NumberField name='radius' /> <NumberField name='radius' />
<NumberField name='height' /> <NumberField name='height' />
<BooleanChoice name='boolean' />
</Group>; </Group>;
} }

View file

@ -3,13 +3,16 @@ import schema from './cylinderOpSchema';
import primitivePreviewer from '../primitivePreviewer'; import primitivePreviewer from '../primitivePreviewer';
import CylinderWizard from './CylinderWizard'; import CylinderWizard from './CylinderWizard';
import datumConsumingOperation from '../datumConsumingOperation'; import datumConsumingOperation from '../datumConsumingOperation';
import {assignBooleanParams} from '../booleanOptionHelper';
function run(params, services) { function run(params, services) {
return datumConsumingOperation(params, services, csys => services.craftEngine.createCylinder({ return datumConsumingOperation(params, services, csys => services.craftEngine.createCylinder(
csys, assignBooleanParams({
radius: params.radius, csys,
height: params.height radius: params.radius,
})); height: params.height
}, params, services.cadRegistry.getAllShells)
));
} }
export default { export default {

View file

@ -1,10 +1,12 @@
import React from 'react'; import React from 'react';
import {Group} from '../../wizard/components/form/Form'; import {Group} from '../../wizard/components/form/Form';
import {NumberField, ReadOnlyValueField} from '../../wizard/components/form/Fields'; import {NumberField, ReadOnlyValueField} from '../../wizard/components/form/Fields';
import BooleanChoice from '../../wizard/components/form/BooleanChioce';
export default function SphereWizard() { export default function SphereWizard() {
return <Group> return <Group>
<ReadOnlyValueField name='datum' placeholder='origin'/> <ReadOnlyValueField name='datum' placeholder='origin'/>
<NumberField name='radius' /> <NumberField name='radius' />
<BooleanChoice name='boolean' />
</Group>; </Group>;
} }

View file

@ -3,12 +3,15 @@ import schema from './sphereOpSchema';
import primitivePreviewer from '../primitivePreviewer'; import primitivePreviewer from '../primitivePreviewer';
import SphereWizard from './SphereWizard'; import SphereWizard from './SphereWizard';
import datumConsumingOperation from '../datumConsumingOperation'; import datumConsumingOperation from '../datumConsumingOperation';
import {assignBooleanParams} from '../booleanOptionHelper';
function run(params, services) { function run(params, services) {
return datumConsumingOperation(params, services, csys => services.craftEngine.createSphere({ return datumConsumingOperation(params, services, csys => services.craftEngine.createSphere(
csys, assignBooleanParams({
radius: params.radius, csys,
})); radius: params.radius,
}, params, services.cadRegistry.getAllShells)
));
} }
export default { export default {

View file

@ -1,11 +1,13 @@
import React from 'react'; import React from 'react';
import {Group} from '../../wizard/components/form/Form'; import {Group} from '../../wizard/components/form/Form';
import {NumberField, ReadOnlyValueField} from '../../wizard/components/form/Fields'; import {NumberField, ReadOnlyValueField} from '../../wizard/components/form/Fields';
import BooleanChoice from '../../wizard/components/form/BooleanChioce';
export default function TorusWizard() { export default function TorusWizard() {
return <Group> return <Group>
<ReadOnlyValueField name='datum' placeholder='origin'/> <ReadOnlyValueField name='datum' placeholder='origin'/>
<NumberField name='radius' /> <NumberField name='radius' />
<NumberField name='tube' /> <NumberField name='tube' />
<BooleanChoice name='boolean' />
</Group>; </Group>;
} }

View file

@ -5,13 +5,16 @@ import {IMAGINARY_SURFACE_MATERIAL} from '../../../preview/scenePreviewer';
import CSys from '../../../../math/csys'; import CSys from '../../../../math/csys';
import * as SceneGraph from '../../../../../../modules/scene/sceneGraph'; import * as SceneGraph from '../../../../../../modules/scene/sceneGraph';
import datumConsumingOperation from '../datumConsumingOperation'; import datumConsumingOperation from '../datumConsumingOperation';
import {assignBooleanParams} from '../booleanOptionHelper';
function run(params, services) { function run(params, services) {
return datumConsumingOperation(params, services, csys => services.craftEngine.createTorus({ return datumConsumingOperation(params, services, csys => services.craftEngine.createTorus(
csys, assignBooleanParams({
radius: params.radius, csys,
tube: params.tube radius: params.radius,
})); tube: params.tube
}, params, services.cadRegistry.getAllShells)
));
} }
function previewer(ctx, initialParams) { function previewer(ctx, initialParams) {

View file

@ -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 <ComboBoxField {...props}>
<ComboBoxOption value={null}>{'<none>'}</ComboBoxOption>
<ComboBoxOption value={'INTERSECT'}>intersect</ComboBoxOption>
<ComboBoxOption value={'SUBTRACT'}>subtract</ComboBoxOption>
<ComboBoxOption value={'UNION'}>union</ComboBoxOption>
</ComboBoxField>
}

View file

@ -5,9 +5,11 @@ import TextControl from 'ui/components/controls/TextControl';
import RadioButtons from 'ui/components/controls/RadioButtons'; import RadioButtons from 'ui/components/controls/RadioButtons';
import CheckboxControl from 'ui/components/controls/CheckboxControl'; import CheckboxControl from 'ui/components/controls/CheckboxControl';
import ReadOnlyValueControl from 'ui/components/controls/ReadOnlyValueControl'; import ReadOnlyValueControl from 'ui/components/controls/ReadOnlyValueControl';
import ComboBoxControl from 'ui/components/controls/ComboBoxControl';
export const NumberField = attachToForm(formField(NumberControl)); export const NumberField = attachToForm(formField(NumberControl));
export const TextField = attachToForm(formField(TextControl)); export const TextField = attachToForm(formField(TextControl));
export const RadioButtonsField = attachToForm(formField(RadioButtons)); export const RadioButtonsField = attachToForm(formField(RadioButtons));
export const CheckboxField = attachToForm(formField(CheckboxControl)); export const CheckboxField = attachToForm(formField(CheckboxControl));
export const ComboBoxField = attachToForm(formField(ComboBoxControl));
export const ReadOnlyValueField = attachToForm(formField(ReadOnlyValueControl)); export const ReadOnlyValueField = attachToForm(formField(ReadOnlyValueControl));