From 604bd0910ee8a934c0f4cdde5382a20fff1bb419 Mon Sep 17 00:00:00 2001 From: "2817212736@qq.com" <2817212736@qq.com> Date: Fri, 25 Jul 2025 14:35:13 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=BC=98=E5=8C=96=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E6=95=B0=E6=8D=AE=E6=A8=A1=E5=9E=8B=EF=BC=8C=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E7=9F=A9=E5=BD=A2=E4=BC=98=E5=8C=96=E5=A4=84=E7=90=86?= =?UTF-8?q?=E5=99=A8=E6=95=B0=E6=8D=AE=E6=A8=A1=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 92 ++++++++++++++++++++++----- package.json | 2 +- src/models/layout.ts | 96 +++++++++++++++++++++++++++++ src/models/processors/rectLayout.ts | 35 +++++++++++ 4 files changed, 209 insertions(+), 16 deletions(-) create mode 100644 src/models/layout.ts create mode 100644 src/models/processors/rectLayout.ts diff --git a/README.md b/README.md index d6ddef4..354db74 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,81 @@ -## 生产接口协议 -本项目使用typescript编写,IDE推荐使用vscode。 +# Cut Abstractions + +这是一个用于MES新版生产的抽象库,提供了一套可扩展的处理器和解析器,用于处理各种切割相关的指令和数据。 + +## 核心概念 + +- **处理器 (Processor)**: 负责执行具体的加工任务。每个处理器都包含名称、版本和执行方法。开发者可以继承 `ProcessorBase` 来实现自定义的处理器。 + +- **解析器 (Parser)**: 负责解析文本指令,并调用相应的处理代码。`ParserBase` 提供了解析和执行指令的基本框架。 + +- **上下文 (Context)**: 在处理器执行期间传递数据,包含输入、参数和输出。 + +## 主要功能 + +- **可扩展的处理器架构**: 允许开发者轻松添加新的加工处理器,以适应不同的业务需求。 +- **灵活的指令解析**: 支持自定义指令集,可以解析文本格式的指令并执行相应的操作。 +- **清晰的数据流**: 通过上下文对象在处理器之间传递数据,使得数据流清晰可控。 + +## 使用示例 + +以下是一个简单的示例,展示了如何使用本库: + +```typescript +import { ProcessorBase, ProcessorContext } from 'cut-abstractions'; + +// 定义输入、输出和配置类型 +interface MyInput { + data: string; +} + +interface MyOutput { + result: string; +} + +interface MyConfig { + param: string; +} + +// 创建一个自定义处理器 +class MyProcessor extends ProcessorBase { + get name() { + return 'my-processor'; + } + + get version() { + return '1.0.0'; + } + + exec(context: ProcessorContext) { + // 执行处理逻辑 + 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 = { + 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 | | @@ -11,15 +85,3 @@ | 大板名 | 无 | boardName | goodsName | | | 余料 | 无 | scrap | remain | | | 排单 | 无 | planOrder |planOrder | | - - -### 编译与发布 -更新 package.json 版本号 -```shell -pnpm clean -pnpm build -pnpm release -``` - -### 开发建议 -MES与IMES存在不少命名上的差异,可以考虑 接口类型独立, 参数与配置单独创建类型 \ No newline at end of file diff --git a/package.json b/package.json index b275ecc..59d6d85 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cut-abstractions", - "version": "0.1.7", + "version": "0.1.8", "description": "", "files": [ "dist/**/*" diff --git a/src/models/layout.ts b/src/models/layout.ts new file mode 100644 index 0000000..72dea5b --- /dev/null +++ b/src/models/layout.ts @@ -0,0 +1,96 @@ +/** + * @file 优化布局相关的数据模型,包含优化输入、输出、大板、小板以及各类枚举 + * @todo 目前仅适配了矩形优化,后续还需要对数据结构进行扩展 + * @author CZY + * @since 0.1.8 + */ + +/** 优化小板输入 */ +export interface LayoutBlock { + /** 小板ID */ + id: number; + /** 长 */ + length: number; + /** 宽 */ + width: number; + /** 纹路类型 */ + waveType: WaveType; + /** 排版面类型 */ + composingType: ComposingType; + /** 孔洞类型 */ + holeType: HoleType; + /** 是否为矩形板 */ + isRect?: boolean; + /** 是否需要双面加工 */ + isdtwosided?: boolean; +} + +/** 优化大板输入 */ +export interface LayoutBoard { + length: number; + width: number; +} + +/** 纹路类型 */ +export enum WaveType { + /** 正纹 */ + Positive = 0, + /** 反纹 */ + Reverse = 1, + /** 可翻转 */ + CanReversal = 2, +} + +/** 排版面 */ +export enum ComposingType { + /** 正面 */ + Positive = 0, + Reverse = 1, //反面 + Arbitrary = 2 //任意 +} + +/** 孔类型 */ +export enum HoleType { + /** 没有孔 */ + None = 0, + /** 正面 */ + Positive = 1, + /** 反面 */ + Reverse = 2, + /** 正反皆有 */ + Two = 3 +} + +/** 布局大板 */ +export interface LayoutResultBoard { + id: string; + /** 大板宽度 */ + boardWidth: number; + /** 大板高度 */ + boardHeight: number; +} + +/** 布局小板 */ +export interface LayoutResultBlock { + id: string; + /** x坐标 */ + x: number; + /** y坐标 */ + y: number; + /** 宽度 */ + width: number; + /** 高度 */ + height: number; + /** 纹路类型 */ + waveType: WaveType; +} + +/** 优化布局结果 */ +export type LayoutResult = { + /** 大板列表 */ + boards: LayoutResultBoard[], + /** 小板列表,其一维与boards长度对应,二维为小板列表 */ + blocks: LayoutResultBlock[][], + /** 优化中被使用的余料大板,这个列表中的每一个元素代表使用了一片该规格的大板 */ + usedScrapBoard: LayoutResultBoard[]; +}; \ No newline at end of file diff --git a/src/models/processors/rectLayout.ts b/src/models/processors/rectLayout.ts new file mode 100644 index 0000000..b93ba64 --- /dev/null +++ b/src/models/processors/rectLayout.ts @@ -0,0 +1,35 @@ +/** + * @file 矩形板件布局优化处理器使用的数据模型 + * @since 0.1.8 + * @author CZY + */ + +import { ConfigBase } from "../config"; +import { LayoutBlock, LayoutBoard, LayoutResult } from "../layout"; + +export interface RectLayoutProcInput { + /** 小板列表 */ + blocks: LayoutBlock[]; + /** 余料大板列表,可选,余料大板将会被优先优化,当余料大板被用尽时,则会使用配置中的大板尺寸进行优化 */ + scrapBoards?: Array<{ + /** 余料大板 */ + board: LayoutBoard, + /** 大板张数 */ + count: number; + }>; +} + +export class RectLayoutProcConfig extends ConfigBase { + /** 大板高度 */ + boardHeight: number = 1220; + /** 大板宽度 */ + boardWidth: number = 2440; + /** 优化迭代次数 */ + iterations: number = 50; + /** 双面加工优先排版 */ + doubleSidedFirst: boolean = false; + /** 刀路间隙 */ + gap: number = 0; +} + +export type RectLayoutProcOutput = LayoutResult; \ No newline at end of file