mirror of
https://github.com/xibyte/jsketcher
synced 2025-12-06 16:33:15 +01:00
100 lines
2.5 KiB
TypeScript
100 lines
2.5 KiB
TypeScript
import {roundValueForPresentation as r} from 'cad/craft/operationHelper';
|
|
import {ApplicationContext} from "cad/context";
|
|
import {EntityKind} from "cad/model/entities";
|
|
import {BooleanDefinition} from "cad/craft/schema/common/BooleanDefinition";
|
|
import {OperationDescriptor} from "cad/craft/operationBundle";
|
|
|
|
interface BooleanParams {
|
|
tools: [];
|
|
keepTools:boolean;
|
|
boolean: BooleanDefinition;
|
|
}
|
|
|
|
export const BooleanOperation: OperationDescriptor<BooleanParams> = {
|
|
id: 'BOOLEAN',
|
|
label: 'Boolean',
|
|
icon: 'img/cad/intersection',
|
|
info: 'Booleans 2D sketch',
|
|
paramsInfo: ({tools, boolean}) => `(${r(tools)} ${r(boolean)})`,
|
|
run: (params: BooleanParams, ctx: ApplicationContext) => {
|
|
let occ = ctx.occService;
|
|
const oci = occ.commandInterface;
|
|
|
|
let returnObject = occ.utils.applyBooleanModifier(params.tools, params.boolean);
|
|
|
|
if (params.keepTools == true) {
|
|
// filter consumed array to remove the tools but leaving the targets regardless if
|
|
// the targets are explicitly set or implied by leaving targets blank.
|
|
returnObject.consumed = returnObject.created.filter((el) => !params.tools.includes(el as never));
|
|
}else{
|
|
returnObject.consumed = returnObject.consumed.concat(params.tools);
|
|
}
|
|
|
|
return returnObject;
|
|
|
|
},
|
|
form: [
|
|
{
|
|
type: 'selection',
|
|
name: 'tools',
|
|
capture: [EntityKind.SHELL],
|
|
label: 'Tools',
|
|
optional: false,
|
|
multi: true,
|
|
defaultValue: {
|
|
usePreselection: true,
|
|
preselectionIndex: 0
|
|
},
|
|
},
|
|
{
|
|
type: 'checkbox',
|
|
name: 'keepTools',
|
|
label: 'Keep Tools',
|
|
defaultValue: false,
|
|
},
|
|
{
|
|
type: 'boolean',
|
|
name: 'boolean',
|
|
label: 'Targets',
|
|
optional: true,
|
|
defaultValue: "UNION",
|
|
},
|
|
],
|
|
|
|
masking: [
|
|
{
|
|
id: 'UNION',
|
|
label: 'Union',
|
|
icon: 'img/cad/union',
|
|
info: 'makes a cut based on 2D sketch',
|
|
maskingParams: {
|
|
boolean: {
|
|
kind: 'UNION'
|
|
}
|
|
}
|
|
},
|
|
{
|
|
id: 'SUBTRACT',
|
|
label: 'Subtract',
|
|
icon: 'img/cad/subtract',
|
|
info: 'makes a cut based on 2D sketch',
|
|
maskingParams: {
|
|
boolean: {
|
|
kind: 'SUBTRACT'
|
|
}
|
|
}
|
|
},
|
|
{
|
|
id: 'INTERSECT',
|
|
label: 'Intersect',
|
|
icon: 'img/cad/intersection',
|
|
info: 'makes a cut based on 2D sketch',
|
|
maskingParams: {
|
|
boolean: {
|
|
kind: 'INTERSECT'
|
|
}
|
|
}
|
|
}
|
|
],
|
|
path: __dirname
|
|
}
|