mdf icons support

This commit is contained in:
Val Erastov 2021-09-25 15:23:58 -07:00
parent d75969fd11
commit 9bb8c8c012
22 changed files with 828 additions and 11 deletions

View file

@ -8,7 +8,10 @@ import icon from './icon.svg';
export default {
id: 'OCC_BOTTLE',
label: 'OCC Bottle',
icon,
icon: {
iconType: 'svg',
iconContent: icon
},
info: 'create occ bottle',
mutualExclusiveFields: [],
paramsInfo: ({ width, height, thickness }) => `(${r(width)} ${r(height)} ${r(thickness)})`,

5
package-lock.json generated
View file

@ -74,6 +74,7 @@
"integrity": "sha512-XXLgAm6LBbaNxaGhMAznXXaxtCWfuv6PIDJ9Alsy9JYTOh+j2jJz+L/162kkfU1j/pTSxK1xGmlwI4pdIMkoag==",
"dev": true,
"dependencies": {
"chokidar": "^2.1.8",
"commander": "^4.0.1",
"convert-source-map": "^1.1.0",
"fs-readdir-recursive": "^1.1.0",
@ -3285,6 +3286,7 @@
"anymatch": "^2.0.0",
"async-each": "^1.0.1",
"braces": "^2.3.2",
"fsevents": "^1.2.7",
"glob-parent": "^3.1.0",
"inherits": "^2.0.3",
"is-binary-path": "^1.0.0",
@ -8492,9 +8494,12 @@
"clone": "^2.1.2",
"errno": "^0.1.1",
"graceful-fs": "^4.1.2",
"image-size": "~0.5.0",
"mime": "^1.4.1",
"mkdirp": "^0.5.0",
"promise": "^7.1.1",
"request": "^2.83.0",
"source-map": "~0.6.0",
"tslib": "^1.10.0"
},
"bin": {

View file

@ -40,7 +40,7 @@ function ActionButton({label, icon, icon96, icon32, cssIcons, symbol, size, noLa
let smallOrMedium = size === 'medium' || size === 'small';
if (icon) {
const Icon = icon;
icon = <Icon />;
icon = <Icon size={size}/>;
}
if (!icon) {
if (smallOrMedium) {

View file

@ -0,0 +1,58 @@
import React from 'react'
import { SvgIcon } from 'svg/SvgIcon';
import ImgIcon from 'ui/components/ImgIcon';
import { IconContent, IconDeclaration, IconSetDef, IconSize, IconType } from './IconDeclaration';
interface IconRenderProps {
size: IconSize
}
export function DeclaredIcon(props: IconRenderProps & IconDeclaration & React.HTMLAttributes<HTMLDivElement>) {
if (props.iconSet) {
return <IconSet {...props} />
} else {
return <Icon {...props} />
}
}
function IconSet(props: IconRenderProps & IconSetDef & React.HTMLAttributes<HTMLDivElement>) {
const {iconSet} = props;
let iconDef = iconSet[props.size] | iconSet[IconSize.large] | iconSet[IconSize.medium] | iconSet[IconSize.small]
return <Icon {...iconDef} {...props} />;
}
function Icon(props: {
iconType: IconType,
iconContent: IconContent
size: IconSize
} & React.HTMLAttributes<HTMLDivElement>) {
const {iconContent, size, iconType, ...htmlProps} = props;
const sizeInPx = getSizeInPx(size);
if (iconType === 'image') {
return <ImgIcon url={iconContent} size={sizeInPx} {...htmlProps}/>
} else if (props.iconType === 'svg') {
return <SvgIcon content={iconContent} size={sizeInPx} {...htmlProps}/>
} else {
throw 'unsupported icon type ' + iconType;
}
}
function getSizeInPx(sizeName: IconSize): number {
switch (sizeName) {
case 'small': return 16;
case 'medium': return 24;
case 'large':
default:
return 48;
}
}

View file

@ -0,0 +1,24 @@
export type IconDeclaration = IconSetDef | IconDef;
export enum IconSize {
small = 'small',
medium = 'medium',
large = 'large'
};
export interface IconSetDef {
iconType: IconType;
iconSet: {
[key in IconSize]: IconDef
}
}
export type IconType = 'image' | 'svg';
export type IconContent = any;
export type IconDef = IconContent | {
iconType: IconType;
iconContent: IconContent;
};

View file

@ -1,3 +1,4 @@
import { IconDeclaration } from "cad/icons/IconDeclaration";
import { CoreContext } from "context";
import { IconType } from "react-icons";
import { OperationResult } from "../craft/craftPlugin";
@ -10,7 +11,7 @@ interface MDFCommand<R> {
id: string;
label: string;
info: string;
icon: IconType | string;
icon: IconType | IconDeclaration;
run: (request: R, opContext: CoreContext) => OperationResult | Promise<OperationResult>;
paramsInfo: (params: R) => string,
schema: OperationSchema,

View file

@ -1,6 +1,16 @@
import { DeclaredIcon } from 'cad/icons/DeclarativeIcon';
import { IconDeclaration } from 'cad/icons/IconDeclaration';
import React from 'react';
import { SvgIcon } from "svg/SvgIcon";
import { AiOutlineQuestion } from 'react-icons/ai';
import { IconType } from 'react-icons/lib';
export function resolveMDFIcon(iconDef: any) {
return () => <SvgIcon content={iconDef} />
export function resolveMDFIcon(iconDef: IconDeclaration | IconType) {
if (iconDef.iconType) {
return (props) => <DeclaredIcon {...iconDef} {...props}/>
} else {
if (!iconDef || typeof(iconDef) !== 'object') {
return AiOutlineQuestion;
}
return iconDef;
}
}

View file

@ -99,11 +99,16 @@ module.exports = {
{
test: /\.svg$/,
loader: 'raw-loader'
}, {
test: /\.png$/,
loader: 'url-loader?mimetype=image/png'
}
],
},
{
test: /\.(png|jpg|gif)$/i,
use: [
{
loader: 'url-loader'
},
],
},
]
},
node: {
fs: "empty"

View file

@ -0,0 +1,56 @@
import { ApplicationContext } from 'context';
import { MBrepShell } from '../../../../../web/app/cad/model/mshell';
import { roundValueForPresentation as r } from '../../../../../web/app/cad/craft/operationHelper';
import { occ2brep } from '../../../../../web/app/cad/occ/occ2models';
export default {
id: 'primitive_box',
label: 'primitive_box',
icon: 'img/cad/extrude',
info: 'primitive_box',
mutualExclusiveFields: [],
paramsInfo: ({ boxX, boxY, boxZ }) => `(${r(boxX)} ${r(boxY)}) ${r(boxZ)})`,
run: ({ boxX, boxY, boxZ }, ctx: ApplicationContext) => {
//const occObj = createCylinder(diameter, height, ctx.occService.occContext);
const oc = ctx.occService.occContext;
//const myLocation = new oc.gp_Pnt_3(0, 0, 0);
//const cylinderCenterline = oc.gp.DZ();
//const cylinderOrientationAndLocation = new oc.gp_Ax2_3(myLocation, cylinderCenterline);
console.log(boxX, boxY, boxZ, oc.BRepPrimAPI_MakeBox_1(boxX, boxY, boxZ))
let myBody = new oc.BRepPrimAPI_MakeBox_1(boxX, boxY, boxZ );
//let myBody = new oc.BRepPrimAPI_Make
const aRes = new oc.TopoDS_Compound();
const aBuilder = new oc.BRep_Builder();
aBuilder.MakeCompound(aRes);
aBuilder.Add(aRes, myBody.Shape());
const mobject = new MBrepShell(occ2brep(aRes, ctx.occService.occContext));
return {
consumed: [],
created: [mobject]
};
},
schema: {
boxX: {
type: 'number',
defaultValue: 200,
label: 'X'
},
boxY: {
type: 'number',
defaultValue: 280,
label: 'Y'
},
BoxZ: {
type: 'number',
defaultValue: 280,
label: 'Z'
},
}
}

View file

@ -0,0 +1,50 @@
import { ApplicationContext } from 'context';
import { MBrepShell } from '../../../../../web/app/cad/model/mshell';
import { roundValueForPresentation as r } from '../../../../../web/app/cad/craft/operationHelper';
import { occ2brep } from '../../../../../web/app/cad/occ/occ2models';
export default {
id: 'primitive_cone',
label: 'primitive_cone',
icon: 'img/cad/extrude',
info: 'primitive_cone',
mutualExclusiveFields: [],
paramsInfo: ({ diameter, height }) => `(${r(diameter)} ${r(height)})`,
run: ({ diameter, height, }, ctx: ApplicationContext) => {
//const occObj = createcone(diameter, height, ctx.occService.occContext);
const oc = ctx.occService.occContext;
const myLocation = new oc.gp_Pnt_3(0, 0, 0);
const coneCenterline = oc.gp.DZ();
const coneOrientationAndLocation = new oc.gp_Ax2_3(myLocation, coneCenterline);
let myBody = new oc.BRepPrimAPI_MakeCone_1(10,20,100);
//let myBody = new oc.BRepPrimAPI_Make
const aRes = new oc.TopoDS_Compound();
const aBuilder = new oc.BRep_Builder();
aBuilder.MakeCompound(aRes);
aBuilder.Add(aRes, myBody.Shape());
const mobject = new MBrepShell(occ2brep(aRes, ctx.occService.occContext));
return {
consumed: [],
created: [mobject]
};
},
schema: {
diameter: {
type: 'number',
defaultValue: 200,
label: 'diameter'
},
height: {
type: 'number',
defaultValue: 280,
label: 'height'
},
}
}

View file

@ -0,0 +1,51 @@
import { ApplicationContext } from 'context';
import { MBrepShell } from '../../../../../web/app/cad/model/mshell';
import { roundValueForPresentation as r } from '../../../../../web/app/cad/craft/operationHelper';
import { occ2brep } from '../../../../../web/app/cad/occ/occ2models';
export default {
id: 'primitive_cylinder',
label: 'primitive_cylinder',
icon: 'img/cad/extrude',
info: 'primitive_cylinder',
mutualExclusiveFields: [],
paramsInfo: ({ diameter, height }) => `(${r(diameter)} ${r(height)})`,
run: ({ diameter, height, }, ctx: ApplicationContext) => {
//const occObj = createCylinder(diameter, height, ctx.occService.occContext);
const oc = ctx.occService.occContext;
const myLocation = new oc.gp_Pnt_3(0, 0, 0);
const cylinderCenterline = oc.gp.DZ();
const cylinderOrientationAndLocation = new oc.gp_Ax2_3(myLocation, cylinderCenterline);
let myBody = new oc.BRepPrimAPI_MakeCylinder_3(cylinderOrientationAndLocation, diameter, height,);
//let myBody = new oc.BRepPrimAPI_Make
const aRes = new oc.TopoDS_Compound();
const aBuilder = new oc.BRep_Builder();
aBuilder.MakeCompound(aRes);
aBuilder.Add(aRes, myBody.Shape());
const mobject = new MBrepShell(occ2brep(aRes, ctx.occService.occContext));
return {
consumed: [],
created: [mobject]
};
},
schema: {
diameter: {
type: 'number',
defaultValue: 200,
label: 'diameter'
},
height: {
type: 'number',
defaultValue: 280,
label: 'height'
},
}
}

View file

@ -0,0 +1,46 @@
import { ApplicationContext } from 'context';
import { MBrepShell } from '../../../../../web/app/cad/model/mshell';
import { roundValueForPresentation as r } from '../../../../../web/app/cad/craft/operationHelper';
import { occ2brep } from '../../../../../web/app/cad/occ/occ2models';
export default {
id: 'primitive_sphere',
label: 'primitive_sphere',
icon: 'img/cad/extrude',
info: 'primitive_sphere',
mutualExclusiveFields: [],
paramsInfo: ({ diameter }) => `(${r(diameter)} )`,
run: ({ diameter, }, ctx: ApplicationContext) => {
const oc = ctx.occService.occContext;
const myLocation = new oc.gp_Pnt_3(0, 0, 0);
const sphereCenterline = oc.gp.DZ();
const sphereOrientationAndLocation = new oc.gp_Ax2_3(myLocation, sphereCenterline);
let myBody = new oc.BRepPrimAPI_MakeSphere_1(diameter);
//let myBody = new oc.BRepPrimAPI_Make
const aRes = new oc.TopoDS_Compound();
const aBuilder = new oc.BRep_Builder();
aBuilder.MakeCompound(aRes);
aBuilder.Add(aRes, myBody.Shape());
const mobject = new MBrepShell(occ2brep(aRes, ctx.occService.occContext));
return {
consumed: [],
created: [mobject]
};
},
schema: {
diameter: {
type: 'number',
defaultValue: 200,
label: 'diameter'
},
}
}

View file

@ -0,0 +1,56 @@
import { ApplicationContext } from 'context';
import { MBrepShell } from '../../../../../web/app/cad/model/mshell';
import { roundValueForPresentation as r } from '../../../../../web/app/cad/craft/operationHelper';
import { occ2brep } from '../../../../../web/app/cad/occ/occ2models';
export default {
id: 'primitive_box',
label: 'primitive_box',
icon: 'img/cad/extrude',
info: 'primitive_box',
mutualExclusiveFields: [],
paramsInfo: ({ boxX, boxY, boxZ }) => `(${r(boxX)} ${r(boxY)}) ${r(boxZ)})`,
run: ({ boxX, boxY, boxZ }, ctx: ApplicationContext) => {
//const occObj = createCylinder(diameter, height, ctx.occService.occContext);
const oc = ctx.occService.occContext;
//const myLocation = new oc.gp_Pnt_3(0, 0, 0);
//const cylinderCenterline = oc.gp.DZ();
//const cylinderOrientationAndLocation = new oc.gp_Ax2_3(myLocation, cylinderCenterline);
console.log(boxX, boxY, boxZ, oc.BRepPrimAPI_MakeBox_1(boxX, boxY, boxZ))
let myBody = new oc.BRepPrimAPI_MakeBox_1(boxX, boxY, boxZ );
//let myBody = new oc.BRepPrimAPI_Make
const aRes = new oc.TopoDS_Compound();
const aBuilder = new oc.BRep_Builder();
aBuilder.MakeCompound(aRes);
aBuilder.Add(aRes, myBody.Shape());
const mobject = new MBrepShell(occ2brep(aRes, ctx.occService.occContext));
return {
consumed: [],
created: [mobject]
};
},
schema: {
boxX: {
type: 'number',
defaultValue: 200,
label: 'X'
},
boxY: {
type: 'number',
defaultValue: 280,
label: 'Y'
},
BoxZ: {
type: 'number',
defaultValue: 280,
label: 'Z'
},
}
}

View file

@ -0,0 +1,50 @@
import { ApplicationContext } from 'context';
import { MBrepShell } from '../../../../../web/app/cad/model/mshell';
import { roundValueForPresentation as r } from '../../../../../web/app/cad/craft/operationHelper';
import { occ2brep } from '../../../../../web/app/cad/occ/occ2models';
export default {
id: 'primitive_cone',
label: 'primitive_cone',
icon: 'img/cad/extrude',
info: 'primitive_cone',
mutualExclusiveFields: [],
paramsInfo: ({ diameter, height }) => `(${r(diameter)} ${r(height)})`,
run: ({ diameter, height, }, ctx: ApplicationContext) => {
//const occObj = createcone(diameter, height, ctx.occService.occContext);
const oc = ctx.occService.occContext;
const myLocation = new oc.gp_Pnt_3(0, 0, 0);
const coneCenterline = oc.gp.DZ();
const coneOrientationAndLocation = new oc.gp_Ax2_3(myLocation, coneCenterline);
let myBody = new oc.BRepPrimAPI_MakeCone_1(10,20,100);
//let myBody = new oc.BRepPrimAPI_Make
const aRes = new oc.TopoDS_Compound();
const aBuilder = new oc.BRep_Builder();
aBuilder.MakeCompound(aRes);
aBuilder.Add(aRes, myBody.Shape());
const mobject = new MBrepShell(occ2brep(aRes, ctx.occService.occContext));
return {
consumed: [],
created: [mobject]
};
},
schema: {
diameter: {
type: 'number',
defaultValue: 200,
label: 'diameter'
},
height: {
type: 'number',
defaultValue: 280,
label: 'height'
},
}
}

View file

@ -0,0 +1,51 @@
import { ApplicationContext } from 'context';
import { MBrepShell } from '../../../../../web/app/cad/model/mshell';
import { roundValueForPresentation as r } from '../../../../../web/app/cad/craft/operationHelper';
import { occ2brep } from '../../../../../web/app/cad/occ/occ2models';
export default {
id: 'primitive_cylinder',
label: 'primitive_cylinder',
icon: 'img/cad/extrude',
info: 'primitive_cylinder',
mutualExclusiveFields: [],
paramsInfo: ({ diameter, height }) => `(${r(diameter)} ${r(height)})`,
run: ({ diameter, height, }, ctx: ApplicationContext) => {
//const occObj = createCylinder(diameter, height, ctx.occService.occContext);
const oc = ctx.occService.occContext;
const myLocation = new oc.gp_Pnt_3(0, 0, 0);
const cylinderCenterline = oc.gp.DZ();
const cylinderOrientationAndLocation = new oc.gp_Ax2_3(myLocation, cylinderCenterline);
let myBody = new oc.BRepPrimAPI_MakeCylinder_3(cylinderOrientationAndLocation, diameter, height,);
//let myBody = new oc.BRepPrimAPI_Make
const aRes = new oc.TopoDS_Compound();
const aBuilder = new oc.BRep_Builder();
aBuilder.MakeCompound(aRes);
aBuilder.Add(aRes, myBody.Shape());
const mobject = new MBrepShell(occ2brep(aRes, ctx.occService.occContext));
return {
consumed: [],
created: [mobject]
};
},
schema: {
diameter: {
type: 'number',
defaultValue: 200,
label: 'diameter'
},
height: {
type: 'number',
defaultValue: 280,
label: 'height'
},
}
}

View file

@ -0,0 +1,46 @@
import { ApplicationContext } from 'context';
import { MBrepShell } from '../../../../../web/app/cad/model/mshell';
import { roundValueForPresentation as r } from '../../../../../web/app/cad/craft/operationHelper';
import { occ2brep } from '../../../../../web/app/cad/occ/occ2models';
export default {
id: 'primitive_sphere',
label: 'primitive_sphere',
icon: 'img/cad/extrude',
info: 'primitive_sphere',
mutualExclusiveFields: [],
paramsInfo: ({ diameter }) => `(${r(diameter)} )`,
run: ({ diameter, }, ctx: ApplicationContext) => {
const oc = ctx.occService.occContext;
const myLocation = new oc.gp_Pnt_3(0, 0, 0);
const sphereCenterline = oc.gp.DZ();
const sphereOrientationAndLocation = new oc.gp_Ax2_3(myLocation, sphereCenterline);
let myBody = new oc.BRepPrimAPI_MakeSphere_1(diameter);
//let myBody = new oc.BRepPrimAPI_Make
const aRes = new oc.TopoDS_Compound();
const aBuilder = new oc.BRep_Builder();
aBuilder.MakeCompound(aRes);
aBuilder.Add(aRes, myBody.Shape());
const mobject = new MBrepShell(occ2brep(aRes, ctx.occService.occContext));
return {
consumed: [],
created: [mobject]
};
},
schema: {
diameter: {
type: 'number',
defaultValue: 200,
label: 'diameter'
},
}
}

View file

@ -0,0 +1,51 @@
import { ApplicationContext } from 'context';
import { MBrepShell } from '../../../../../web/app/cad/model/mshell';
import { roundValueForPresentation as r } from '../../../../../web/app/cad/craft/operationHelper';
import { occ2brep } from '../../../../../web/app/cad/occ/occ2models';
export default {
id: 'primitive_torus',
label: 'primitive_torus',
icon: 'img/cad/extrude',
info: 'primitive_torus',
mutualExclusiveFields: [],
paramsInfo: ({ radius, tubeRadius }) => `(${r(radius)} ${r(tubeRadius)} )`,
run: ({ radius, tubeRadius }, ctx: ApplicationContext) => {
const oc = ctx.occService.occContext;
const myLocation = new oc.gp_Pnt_3(0, 0, 0);
const torusCenterline = oc.gp.DZ();
const torusOrientationAndLocation = new oc.gp_Ax2_3(myLocation, torusCenterline);
let myBody = new oc.BRepPrimAPI_MakeTorus_1(radius, tubeRadius);
//let myBody = new oc.BRepPrimAPI_Make
const aRes = new oc.TopoDS_Compound();
const aBuilder = new oc.BRep_Builder();
aBuilder.MakeCompound(aRes);
aBuilder.Add(aRes, myBody.Shape());
const mobject = new MBrepShell(occ2brep(aRes, ctx.occService.occContext));
return {
consumed: [],
created: [mobject]
};
},
schema: {
radius : {
type: 'number',
defaultValue: 200,
label: 'radius'
},
tubeRadius: {
type: 'number',
defaultValue: 50,
label: 'tube radius'
},
}
}

View file

@ -0,0 +1,56 @@
import { ApplicationContext } from 'context';
import { MBrepShell } from '../../../../../web/app/cad/model/mshell';
import { roundValueForPresentation as r } from '../../../../../web/app/cad/craft/operationHelper';
import { occ2brep } from '../../../../../web/app/cad/occ/occ2models';
export default {
id: 'primitive_box',
label: 'primitive_box',
icon: 'img/cad/extrude',
info: 'primitive_box',
mutualExclusiveFields: [],
paramsInfo: ({ boxX, boxY, boxZ }) => `(${r(boxX)} ${r(boxY)}) ${r(boxZ)})`,
run: ({ boxX, boxY, boxZ }, ctx: ApplicationContext) => {
//const occObj = createCylinder(diameter, height, ctx.occService.occContext);
const oc = ctx.occService.occContext;
//const myLocation = new oc.gp_Pnt_3(0, 0, 0);
//const cylinderCenterline = oc.gp.DZ();
//const cylinderOrientationAndLocation = new oc.gp_Ax2_3(myLocation, cylinderCenterline);
console.log(boxX, boxY, boxZ, oc.BRepPrimAPI_MakeBox_1(boxX, boxY, boxZ))
let myBody = new oc.BRepPrimAPI_MakeBox_1(boxX, boxY, boxZ );
//let myBody = new oc.BRepPrimAPI_Make
const aRes = new oc.TopoDS_Compound();
const aBuilder = new oc.BRep_Builder();
aBuilder.MakeCompound(aRes);
aBuilder.Add(aRes, myBody.Shape());
const mobject = new MBrepShell(occ2brep(aRes, ctx.occService.occContext));
return {
consumed: [],
created: [mobject]
};
},
schema: {
boxX: {
type: 'number',
defaultValue: 200,
label: 'X'
},
boxY: {
type: 'number',
defaultValue: 280,
label: 'Y'
},
BoxZ: {
type: 'number',
defaultValue: 280,
label: 'Z'
},
}
}

View file

@ -0,0 +1,50 @@
import { ApplicationContext } from 'context';
import { MBrepShell } from '../../../../../web/app/cad/model/mshell';
import { roundValueForPresentation as r } from '../../../../../web/app/cad/craft/operationHelper';
import { occ2brep } from '../../../../../web/app/cad/occ/occ2models';
export default {
id: 'primitive_cone',
label: 'primitive_cone',
icon: 'img/cad/extrude',
info: 'primitive_cone',
mutualExclusiveFields: [],
paramsInfo: ({ diameter, height }) => `(${r(diameter)} ${r(height)})`,
run: ({ diameter, height, }, ctx: ApplicationContext) => {
//const occObj = createcone(diameter, height, ctx.occService.occContext);
const oc = ctx.occService.occContext;
const myLocation = new oc.gp_Pnt_3(0, 0, 0);
const coneCenterline = oc.gp.DZ();
const coneOrientationAndLocation = new oc.gp_Ax2_3(myLocation, coneCenterline);
let myBody = new oc.BRepPrimAPI_MakeCone_1(10,20,100);
//let myBody = new oc.BRepPrimAPI_Make
const aRes = new oc.TopoDS_Compound();
const aBuilder = new oc.BRep_Builder();
aBuilder.MakeCompound(aRes);
aBuilder.Add(aRes, myBody.Shape());
const mobject = new MBrepShell(occ2brep(aRes, ctx.occService.occContext));
return {
consumed: [],
created: [mobject]
};
},
schema: {
diameter: {
type: 'number',
defaultValue: 200,
label: 'diameter'
},
height: {
type: 'number',
defaultValue: 280,
label: 'height'
},
}
}

View file

@ -0,0 +1,51 @@
import { ApplicationContext } from 'context';
import { MBrepShell } from '../../../../../web/app/cad/model/mshell';
import { roundValueForPresentation as r } from '../../../../../web/app/cad/craft/operationHelper';
import { occ2brep } from '../../../../../web/app/cad/occ/occ2models';
export default {
id: 'primitive_cylinder',
label: 'primitive_cylinder',
icon: 'img/cad/extrude',
info: 'primitive_cylinder',
mutualExclusiveFields: [],
paramsInfo: ({ diameter, height }) => `(${r(diameter)} ${r(height)})`,
run: ({ diameter, height, }, ctx: ApplicationContext) => {
//const occObj = createCylinder(diameter, height, ctx.occService.occContext);
const oc = ctx.occService.occContext;
const myLocation = new oc.gp_Pnt_3(0, 0, 0);
const cylinderCenterline = oc.gp.DZ();
const cylinderOrientationAndLocation = new oc.gp_Ax2_3(myLocation, cylinderCenterline);
let myBody = new oc.BRepPrimAPI_MakeCylinder_3(cylinderOrientationAndLocation, diameter, height,);
//let myBody = new oc.BRepPrimAPI_Make
const aRes = new oc.TopoDS_Compound();
const aBuilder = new oc.BRep_Builder();
aBuilder.MakeCompound(aRes);
aBuilder.Add(aRes, myBody.Shape());
const mobject = new MBrepShell(occ2brep(aRes, ctx.occService.occContext));
return {
consumed: [],
created: [mobject]
};
},
schema: {
diameter: {
type: 'number',
defaultValue: 200,
label: 'diameter'
},
height: {
type: 'number',
defaultValue: 280,
label: 'height'
},
}
}

View file

@ -0,0 +1,46 @@
import { ApplicationContext } from 'context';
import { MBrepShell } from '../../../../../web/app/cad/model/mshell';
import { roundValueForPresentation as r } from '../../../../../web/app/cad/craft/operationHelper';
import { occ2brep } from '../../../../../web/app/cad/occ/occ2models';
export default {
id: 'primitive_sphere',
label: 'primitive_sphere',
icon: 'img/cad/extrude',
info: 'primitive_sphere',
mutualExclusiveFields: [],
paramsInfo: ({ diameter }) => `(${r(diameter)} )`,
run: ({ diameter, }, ctx: ApplicationContext) => {
const oc = ctx.occService.occContext;
const myLocation = new oc.gp_Pnt_3(0, 0, 0);
const sphereCenterline = oc.gp.DZ();
const sphereOrientationAndLocation = new oc.gp_Ax2_3(myLocation, sphereCenterline);
let myBody = new oc.BRepPrimAPI_MakeSphere_1(diameter);
//let myBody = new oc.BRepPrimAPI_Make
const aRes = new oc.TopoDS_Compound();
const aBuilder = new oc.BRep_Builder();
aBuilder.MakeCompound(aRes);
aBuilder.Add(aRes, myBody.Shape());
const mobject = new MBrepShell(occ2brep(aRes, ctx.occService.occContext));
return {
consumed: [],
created: [mobject]
};
},
schema: {
diameter: {
type: 'number',
defaultValue: 200,
label: 'diameter'
},
}
}

View file

@ -0,0 +1,51 @@
import { ApplicationContext } from 'context';
import { MBrepShell } from '../../../../../web/app/cad/model/mshell';
import { roundValueForPresentation as r } from '../../../../../web/app/cad/craft/operationHelper';
import { occ2brep } from '../../../../../web/app/cad/occ/occ2models';
export default {
id: 'primitive_torus',
label: 'primitive_torus',
icon: 'img/cad/extrude',
info: 'primitive_torus',
mutualExclusiveFields: [],
paramsInfo: ({ radius, tubeRadius }) => `(${r(radius)} ${r(tubeRadius)} )`,
run: ({ radius, tubeRadius }, ctx: ApplicationContext) => {
const oc = ctx.occService.occContext;
const myLocation = new oc.gp_Pnt_3(0, 0, 0);
const torusCenterline = oc.gp.DZ();
const torusOrientationAndLocation = new oc.gp_Ax2_3(myLocation, torusCenterline);
let myBody = new oc.BRepPrimAPI_MakeTorus_1(radius, tubeRadius);
//let myBody = new oc.BRepPrimAPI_Make
const aRes = new oc.TopoDS_Compound();
const aBuilder = new oc.BRep_Builder();
aBuilder.MakeCompound(aRes);
aBuilder.Add(aRes, myBody.Shape());
const mobject = new MBrepShell(occ2brep(aRes, ctx.occService.occContext));
return {
consumed: [],
created: [mobject]
};
},
schema: {
radius : {
type: 'number',
defaultValue: 200,
label: 'radius'
},
tubeRadius: {
type: 'number',
defaultValue: 50,
label: 'tube radius'
},
}
}