diff --git a/package.json b/package.json index b7767c1..133ceea 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cut-abstractions", - "version": "0.2.2", + "version": "0.3.0", "description": "", "files": [ "dist/**/*" diff --git a/src/base.ts b/src/base.ts index aa3df22..87eb634 100644 --- a/src/base.ts +++ b/src/base.ts @@ -4,7 +4,7 @@ import { ConfigBase } from "./models/config"; /** * 加工处理器上下文 */ -export interface ProcessorContext { +export interface ProcessorContext { /** * 输入数据 */ diff --git a/src/models/config.ts b/src/models/config.ts index ee9b495..0d46a36 100644 --- a/src/models/config.ts +++ b/src/models/config.ts @@ -2,17 +2,17 @@ * 配置基类,下划线开头的变量不会被序列化 */ export class ConfigBase { - name: string = ''; - version:string = '1.0.0'; + readonly name: string = ''; + readonly version: string = '1.0.0'; [key: string]: any; /** * 加载反序列化数据 * @param data */ - load(data:Record){ - for (const key of Object.getOwnPropertyNames(this).filter(i=>i[0]!=='_')) { - if(data[key]!=undefined){ + load(data: Record) { + for (const key of Object.getOwnPropertyNames(this).filter(i => i[0] !== '_')) { + if (data[key] != undefined) { this[key] = data[key]; } } @@ -22,7 +22,7 @@ export class ConfigBase { * 序列化json方法 * @returns */ - toJson(){ - return JSON.stringify(this,(k,v)=>k[0]=='_'?undefined:v); + toJson() { + return JSON.stringify(this, (k, v) => k[0] == '_' ? undefined : v); } } \ No newline at end of file diff --git a/src/nc/ncBuilder.ts b/src/nc/ncBuilder.ts new file mode 100644 index 0000000..19682fd --- /dev/null +++ b/src/nc/ncBuilder.ts @@ -0,0 +1,117 @@ +import { Knife } from "../models/knife"; + +/** 基础G代码 */ +export const GCode = { + /** + * 快速定位 + * @param X X 坐标 + * @param Y Y 坐标 + * @param Z Z 坐标 + * @param F 给进速度 mm/min + * @example G0 X0 Y0 F25000 + */ + G0: 'G0', + + /** + * 直线插补 + * @param X X 坐标 + * @param Y Y 坐标 + * @param Z Z 坐标 + * @param F 给进速度 mm/min + * @example G1 X0 Y0 F25000 + */ + G1: 'G1', + + /** + * 顺时针圆弧插补 + * @param X X 坐标 + * @param Y Y 坐标 + * @param Z Z 坐标 + * @param I (圆心坐标模式)从圆弧起点到圆心在X轴上的**增量距离** + * @param J (圆心坐标模式)从圆弧起点到圆心在Y轴上的**增量距离** + * @param K (圆心坐标模式)从圆弧起点到圆心在Z轴上的**增量距离** + * @param R (圆弧半径模式)指定圆弧的半径 + * @example + * ; 假设当前刀具在 (X10, Y0) + * G2 X0 Y10 I-10 J0 F150 ; 顺时针圆弧到X0 Y10,圆心在(0,0) (10 + (-10) = 0, 0 + 0 = 0) + * G2 X0 Y10 R10 F150 ; 顺时针圆弧到X0 Y10,半径10 (小于等于180度) + */ + G2: 'G2', + + /** + * 逆时针圆弧插补 + * @param X X 坐标 + * @param Y Y 坐标 + * @param Z Z 坐标 + * @param I (圆心坐标模式)从圆弧起点到圆心在X轴上的**增量距离** + * @param J (圆心坐标模式)从圆弧起点到圆心在Y轴上的**增量距离** + * @param K (圆心坐标模式)从圆弧起点到圆心在Z轴上的**增量距离** + * @param R (圆弧半径模式)指定圆弧的半径 + * @example + * ; 假设当前刀具在 (X10, Y0) + * G3 X0 Y-10 I-10 J0 F150 ; 逆时针圆弧到X0 Y-10,圆心在(0,0) + * G3 X0 Y-10 R-10 F150 ; 逆时针圆弧到X0 Y-10,半径10 (大于180度) + */ + G3: 'G3', +} as const; + +/** */ +export class GCodeParams { + /** X坐标值 mm */ + x: number = 0; + /** Y坐标值 mm */ + y: number = 0; + /** Z坐标值 mm */ + z: number = 0; + /** 使用圆弧指令(G2,G3)的圆弧半径模式(R)时,定义圆弧半径 */ + r: number = 0; + /** 使用圆弧指令(G2,G3)的圆心坐标模式(I,J,K)时,定义圆心坐标在X轴上的增量距离 */ + i: number = 0; + /** 使用圆弧指令(G2,G3)的圆心坐标模式(I,J,K)时,定义圆心坐标在Y轴上的增量距离 */ + j: number = 0; + /** 给进速度(Feed Rate) mm/min */ + f: number = 0; +}; + +export type NcActionType = string; + +/** + * NC代码构建器接口,实现该接口来定义一个处理器用的NC代码构建器 + * @author CZY + * @since 0.3.0 + * @version 0.1.0 + */ +export interface INcBuilder { + /** 添加G代码 */ + gCode(code: keyof typeof GCode, params: Partial & { bul: number; }>): void; + + /** 基于刀具实体执行换刀操作 */ + changeKnife(knife: Knife): void; + + /** 添加一行注释 */ + comment(content: string): void; + + /** + * 记录一次NC加工操作 + * + * NC加工操作指的是一次完整的加工过程,例如一次排钻,一次造型切割,或是一次小板加工 + * + * 一次NC加工操作可能包含多行的GCode + * + * 该方法旨在为NC文件提供记录加工步骤的能力 + * + * 返回本次NC操作的ID,此ID由内部生成 + * @param type NC操作类型 + * @returns 本次NC操作的ID + */ + recordAction(type: NcActionType): string; + + /** 直接在末尾追加任意字符串 */ + append(str: string): void; + + /** 直接在末尾追加一行任意字符串 */ + appendLine(str: string): void; + + /** 返回当前构建的NC代码 */ + toString(): string; +}