新增NCBuilder接口 (#11)
新增NCBuilder接口; 优化部分类型定义,格式化代码; Reviewed-on: #11 Reviewed-by: 谢凡 <xief@163.com> Co-authored-by: 2817212736@qq.com <2817212736@qq.com> Co-committed-by: 2817212736@qq.com <2817212736@qq.com>
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "cut-abstractions",
|
||||
"version": "0.2.2",
|
||||
"version": "0.3.0",
|
||||
"description": "",
|
||||
"files": [
|
||||
"dist/**/*"
|
||||
|
@@ -4,7 +4,7 @@ import { ConfigBase } from "./models/config";
|
||||
/**
|
||||
* 加工处理器上下文
|
||||
*/
|
||||
export interface ProcessorContext<TInput, TOutput, TConfig extends ConfigBase> {
|
||||
export interface ProcessorContext<TInput = any, TOutput = any, TConfig extends ConfigBase = ConfigBase> {
|
||||
/**
|
||||
* 输入数据
|
||||
*/
|
||||
|
@@ -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<string,unknown>){
|
||||
for (const key of Object.getOwnPropertyNames(this).filter(i=>i[0]!=='_')) {
|
||||
if(data[key]!=undefined){
|
||||
load(data: Record<string, unknown>) {
|
||||
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);
|
||||
}
|
||||
}
|
126
src/nc/ncWriter.ts
Normal file
126
src/nc/ncWriter.ts
Normal file
@@ -0,0 +1,126 @@
|
||||
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;
|
||||
};
|
||||
|
||||
/** 单次NC加工行为 */
|
||||
export interface NcAction {
|
||||
readonly id: string;
|
||||
readonly type: NcActionType;
|
||||
readonly lineIndex: number;
|
||||
}
|
||||
|
||||
export type NcActionType = string;
|
||||
|
||||
/**
|
||||
* NC代码构建器接口,实现该接口来定义一个处理器用的NC代码构建器
|
||||
* @author CZY
|
||||
* @since 0.3.0
|
||||
* @version 0.1.0
|
||||
*/
|
||||
export interface INcWriter {
|
||||
get ncActions(): NcAction[];
|
||||
|
||||
/** 添加G代码 */
|
||||
gCode(code: keyof typeof GCode, params: Partial<Pick<GCodeParams, 'x' | 'y' | 'z' | 'f'> & { 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;
|
||||
}
|
Reference in New Issue
Block a user