修改开料顺序入参字段boardHeight=》boardLength #16
@@ -1,6 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "cut-abstractions",
 | 
			
		||||
  "version": "0.2.2",
 | 
			
		||||
  "version": "0.3.1",
 | 
			
		||||
  "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> {
 | 
			
		||||
    /**
 | 
			
		||||
     * 输入数据
 | 
			
		||||
     */
 | 
			
		||||
 
 | 
			
		||||
@@ -5,4 +5,8 @@ export * from './models/knife';
 | 
			
		||||
export * from './models/file';
 | 
			
		||||
export * from './models/processors/rectLayout';
 | 
			
		||||
export * from './models/processors/cutOrder';
 | 
			
		||||
export * from './models/processItem';
 | 
			
		||||
export * from './models/processItem';
 | 
			
		||||
export * from './models/processors/modelProcessPoints';
 | 
			
		||||
export * from './models/processors/cutPoint';
 | 
			
		||||
export * from './models/processors/holeToModel';
 | 
			
		||||
export * from './nc/ncWriter';
 | 
			
		||||
@@ -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