From f7204212332fbcfd840b93ea6a188a2da4296f1b Mon Sep 17 00:00:00 2001 From: Mike Molinari Date: Wed, 20 Jul 2022 23:30:40 +0000 Subject: [PATCH] partially working radial patern --- .../patternRadial/patternRadial.operation.ts | 34 +++++++++++++++---- 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/modules/workbenches/modeler/features/patternRadial/patternRadial.operation.ts b/modules/workbenches/modeler/features/patternRadial/patternRadial.operation.ts index 423e7d10..d9c07fc8 100644 --- a/modules/workbenches/modeler/features/patternRadial/patternRadial.operation.ts +++ b/modules/workbenches/modeler/features/patternRadial/patternRadial.operation.ts @@ -6,6 +6,8 @@ import Axis from "math/axis"; import { UnitVector } from "math/vector"; import { OperationDescriptor } from "cad/craft/operationPlugin"; import { MShell } from 'cad/model/mshell'; +import {Matrix3x4} from "math/matrix"; +import {SetLocation} from "cad/craft/e0/interact"; interface patternRadialParams { inputBodies: MShell[]; @@ -24,17 +26,31 @@ export const PatternRadialOperation: OperationDescriptor = info: 'Creates a Radial pattern.', paramsInfo: ({ }) => `(${r()})`, run: (params: patternRadialParams, ctx: ApplicationContext) => { + + console.log(params); let occ = ctx.occService; const oci = occ.commandInterface; let created = []; - params.inputBodies.forEach((shellToMirror) => { - const newShellName = shellToMirror.id + ":mirror"; - oci.copy(shellToMirror, newShellName); - oci.tmirror(newShellName, ...params.face.csys.origin.data(), ...params.face.csys.z.normalize().data()); - created.push(occ.io.getShell(newShellName)); + params.inputBodies.forEach((shellToPatern, index) => { + for (let i = 2; i <= params.qty; i++) { + let angleForInstance = 0; + if(params.patternMethod == 'Step Angle') angleForInstance =params.angle*(i-1); + if(params.patternMethod == 'Span Angle') angleForInstance =(params.angle / (params.qty-1))*(i-1); + + //const tr = shellToPatern.location.rotate(degrees_to_radians(angleForInstance),params.direction.normalize(),params.direction.normalize()); + let tr = new Matrix3x4().rotate(degrees_to_radians(angleForInstance),params.direction.normalize(),params.direction.normalize()); + //tr = tr.rotateWithSphericalAxis(shellToPatern.location) + + const newShellName = shellToPatern.id + ":patern/" + index + "/" +i; + oci.copy(shellToPatern, newShellName); + SetLocation(newShellName, tr.toFlatArray()); + + created.push(occ.io.getShell(newShellName)); + } + }); return { @@ -42,7 +58,6 @@ export const PatternRadialOperation: OperationDescriptor = consumed: [] }; - }, form: [ { @@ -84,3 +99,10 @@ export const PatternRadialOperation: OperationDescriptor = }, ], } + + +function degrees_to_radians(degrees) +{ + var pi = Math.PI; + return degrees * (pi/180); +} \ No newline at end of file