diff --git a/modules/workbenches/sheetMetal/features/smFlange/smFlange.operation.ts b/modules/workbenches/sheetMetal/features/smFlange/smFlange.operation.ts index e33b9cfa..e01e1c02 100644 --- a/modules/workbenches/sheetMetal/features/smFlange/smFlange.operation.ts +++ b/modules/workbenches/sheetMetal/features/smFlange/smFlange.operation.ts @@ -6,13 +6,22 @@ import { BooleanDefinition, BooleanKind } from "cad/craft/schema/common/BooleanD import Axis from "math/axis"; import { OperationDescriptor } from "cad/craft/operationBundle"; + interface smFlangeParams { angle: number; face: MFace; flip: boolean; - + boolean: BooleanDefinition; } + +const ROLE_TO_SM_KIND = { + 'base': 'FLAT/A', + 'lid': 'FLAT/B', + 'sweep': 'THICKNESS' +} + + export const smFlangeOperation: OperationDescriptor = { id: 'SM_FLANGE', label: 'Flange', @@ -34,7 +43,7 @@ export const smFlangeOperation: OperationDescriptor = { for (let i = 0; i < face.edges.length; i++) { const edgeKind = face.edges[i].productionInfo.sheetMetal.kind; if (edgeKind == "FLAT/A" && !params.flip) { - revolveVector = face.edges[i].toAxis(); + revolveVector = face.edges[i].location; revolveVectorOrigin = revolveVector.origin; revolveVectorDirection = revolveVector.direction.negate(); revolveVectorOrigin.z -=2; @@ -75,19 +84,22 @@ export const smFlangeOperation: OperationDescriptor = { }); }); - return { - created: tools, - consumed: [] - } + const operationResult = occ.utils.applyBooleanModifier(tools, params.boolean, face, [face]); + + operationResult.created.forEach(shell => { + shell.traverse(obj => { + if (obj.productionInfo?.role) { + obj.productionInfo.sheetMetal = { + kind: ROLE_TO_SM_KIND[obj.productionInfo.role] + } + } + }) + }); + + return operationResult; }, form: [ - { - type: 'number', - label: 'angle', - name: 'angle', - defaultValue: 90, - }, { type: 'selection', name: 'face', @@ -99,11 +111,24 @@ export const smFlangeOperation: OperationDescriptor = { preselectionIndex: 0 }, }, + { + type: 'number', + label: 'angle', + name: 'angle', + defaultValue: 90, + }, { type: 'checkbox', label: 'Flip Direction', name: 'flip', defaultValue: false, }, + + { + type: 'boolean', + name: 'boolean', + label: 'boolean', + optional: true, + } ], } diff --git a/modules/workbenches/sheetMetal/features/smTab/smTab.operation.ts b/modules/workbenches/sheetMetal/features/smTab/smTab.operation.ts index 64a3998e..ef3f1a8a 100644 --- a/modules/workbenches/sheetMetal/features/smTab/smTab.operation.ts +++ b/modules/workbenches/sheetMetal/features/smTab/smTab.operation.ts @@ -83,6 +83,17 @@ export const smTabOperation: OperationDescriptor = { form: [ + { + type: 'selection', + name: 'sketch', + capture: [EntityKind.FACE], + label: 'Sketch', + multi: false, + defaultValue: { + usePreselection: true, + preselectionIndex: 0 + }, + }, { type: 'number', label: 'Thickness', @@ -107,17 +118,7 @@ export const smTabOperation: OperationDescriptor = { name: 'flipper', defaultValue: false, }, - { - type: 'selection', - name: 'sketch', - capture: [EntityKind.FACE], - label: 'Sketch', - multi: false, - defaultValue: { - usePreselection: true, - preselectionIndex: 0 - }, - }, + { type: 'boolean', name: 'boolean',