This repository has been archived on 2025-10-09. You can view files and clone it. You cannot open issues or pull requests or push a commit.
d4ba7c8d95 新增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>
2025-08-13 17:57:59 +08:00
2025-08-13 17:57:59 +08:00
2025-06-24 11:48:26 +08:00
2025-08-13 17:57:59 +08:00
2025-07-31 09:43:36 +08:00

Cut Abstractions

这是一个用于MES新版生产的抽象库,提供了一套可扩展的处理器和解析器,用于处理各种切割相关的指令和数据。

核心概念

  • 处理器 (Processor): 负责执行具体的加工任务。每个处理器都包含名称、版本和执行方法。开发者可以继承 ProcessorBase 来实现自定义的处理器。

  • 解析器 (Parser): 负责解析文本指令,并调用相应的处理代码。ParserBase 提供了解析和执行指令的基本框架。

  • 上下文 (Context): 在处理器执行期间传递数据,包含输入、参数和输出。

主要功能

  • 可扩展的处理器架构: 允许开发者轻松添加新的加工处理器,以适应不同的业务需求。
  • 灵活的指令解析: 支持自定义指令集,可以解析文本格式的指令并执行相应的操作。
  • 清晰的数据流: 通过上下文对象在处理器之间传递数据,使得数据流清晰可控。

使用示例

以下是一个简单的示例,展示了如何使用本库:

import { ProcessorBase, ProcessorContext } from 'cut-abstractions';

// 定义输入、输出和配置类型
interface MyInput {
  data: string;
}

interface MyOutput {
  result: string;
}

interface MyConfig {
  param: string;
}

// 创建一个自定义处理器
class MyProcessor extends ProcessorBase<MyInput, MyOutput, MyConfig> {
  get name() {
    return 'my-processor';
  }

  get version() {
    return '1.0.0';
  }

  exec(context: ProcessorContext<MyInput, MyOutput, MyConfig>) {
    // 执行处理逻辑
    const inputData = context.input?.data || '';
    const param = context.params?.param || '';
    context.output = {
      result: `Processed: ${inputData} with param: ${param}`,
    };
  }
}

// 使用处理器
const processor = new MyProcessor();
const context: ProcessorContext<MyInput, MyOutput, MyConfig> = {
  input: { data: 'hello' },
  params: { param: 'world' },
};

processor.exec(context);

console.log(context.output?.result); // "Processed: hello with param: world"

模块

  • base: 提供了处理器的基本抽象。
  • parsers: 提供了指令解析器的基本抽象。
  • models: 定义了项目中使用的数据模型,如 Config、Knife 和 File。

术语表

中文 CAD MES IMES 备注
房名 RoomName roomName roomName
柜名 CabinetName boxName bodyName
小板名 BoardName blockName blockName
材质 Material material material
大板名 无 boardName goodsName
余料 无 scrap remain
排单 无 planOrder planOrder

编译与发布

更新 package.json 版本号

pnpm clean  
pnpm build  
pnpm release  

开发

处理器类型

处理器的上下文类型应当提交至该项目以方便协作,包括处理器输入,输出以及配置类型。
这些类型应当定义在src/models/processors/<处理器名>.ts文件中。 例:

// src/models/processors/rectLayout.ts

// 矩形优化处理器类型

export interface RectLayoutProcInput {
  blocks: Array<RectLayoutBlock>
}
export type RectLayoutProcOutput = never;
export class RectLayoutProcConfig extends ConfigBase {}

export interface RectLayoutBlock {}

定义类型时请遵循以下约定:

  • 处理器的输入/输出/配置类型(以下称为相关类型)请按照特定规则进行命名,其大小写应当遵循PascalCase:

    • 输入类型: <处理器名>Input
    • 输出类型: <处理器名>Output
    • 配置类型: <处理器名>Config
  • 处理器的配置类型必须为一个Javascript类,并继承自抽象类ConfigBase,输入和输出类型不限。

  • 处理器相关类型的字段若涉及到附属类型,也一并定义在文件中,其命名不限,但必须与处理器的名字有所关联,不易于其它处理器混淆,例:

    export interface RectLayoutProcInput {
      blocks: Array<RectLayoutBlock> // 附属类型
    }
    // 同样定义在该文件中,
    export interface RectLayoutBlock {}
    
  • 若处理器相关类型中出现了唯一标识符,请统一使用string | number作为Typescript类型,例:

    export interface RectLayoutBlock {
      id: string | number; // 使用string | number类型作为唯一标识符  
    }
    
  • 若处理器相关类型中出现了平面尺寸相关的,请使用“长(length)/宽(width)”作为其名称,请勿使用“宽(width)/高(height)”。

    Warning

    “长”指的是一个矩形板件在横轴上的尺寸,而“宽”指的是纵轴上的尺寸。

    在旧版生产的数据中,“长/宽”与“宽/高”是混用的,在矩形优化后,原有板件的“长(l)”变为了“高(pbg)”,而“宽(w)”变为了“宽(pbk)”,因为矩形优化涉及到了坐标转换,后续还需要对规范进行统一。

S
Description
生产接口协议
Readme
290 KiB
Languages
TypeScript 99.3%
JavaScript 0.7%