cut-abstractions/samples/demoParser.ts
2025-06-24 11:48:26 +08:00

124 lines
3.8 KiB
TypeScript

import { ConfigBase } from "../src/base";
import { ParserBase } from "../src/parsers";
import { _knifeType, CodeParams } from "./confClass";
import { knifeData, knifeData1, knifeData2 } from "./demoKnives";
import { GCodeAction } from "./gcodes";
export class DemoParser extends ParserBase {
usedKnife?:_knifeType
knifeList:_knifeType[] = [
knifeData,
knifeData1,
knifeData2
]
constructor(config?: Record<string, ConfigBase>) {
super();
// if(config){
// if(config['knives']){
//
// }
// }
const gcodeActions = new GCodeAction();
this.codeManager['FSTART'] = {
name: 'FileStart',
// type:'Global',
// paramType:'array',
exec:(params) =>{
return `G54 G90\nM03\n`
}
};
this.codeManager['FEND'] = {
name: 'FileEnd',
exec:(params) =>{
return `M30\n`;
}
}
this.codeManager['G0'] = {
name: 'G0',
paramType: 'kv:number',
exec:(params: CodeParams) => {
return gcodeActions.G0(params) + '\n';
}
}
this.codeManager['G2'] = {
name: 'G2',
paramType: 'kv:number',
exec:(params: CodeParams)=> {
return gcodeActions.G2(params) + '\n';
}
}
this.codeManager['G3'] = {
name: 'G3',
paramType: 'kv:number',
exec:(params: CodeParams)=> {
return gcodeActions.G3(params) + '\n';
}
}
this.codeManager['TD'] = {
name: '',
exec:(diameter:number)=> {
let code = ''
let _knife: any
if (diameter) {
_knife = this.knifeList?.find(e => e.diameter == diameter)
}
if (_knife != undefined) {
code += this.checkChangeKnife(_knife)
this.usedKnife = _knife
// code += _knife.axisStartCode
code += _knife.knifeStartCode
}
return code
}
}
this.codeManager['TN'] = {
name: 'TN',
exec:(knifeName:string) =>{ /**根据刀名称找刀 换刀 */
let code = ''
let _knife: any = null
if (knifeName) {
_knife = this.knifeList?.find(e => e.knifeName == knifeName)
}
if (_knife != undefined) {
code += this.checkChangeKnife(_knife)
this.usedKnife = _knife
// code += _knife.axisStartCode
code += _knife.knifeStartCode
}
return code
}
}
this.codeManager['TE'] = {
name:'TE',
exec:()=>{
if(!this.usedKnife) return '';
return this.usedKnife.knifeStopCode+'\n';
}
}
}
/** 内部功能逻辑 换刀时判断是否需要 上一把刀的停止代码 */
private checkChangeKnife(knife: _knifeType) {
let code = '';
/** true 需要 输出停刀代码 false 不需要 */
let flag = false
// 必须要有刀
if (this.usedKnife) {
let keys = Object.keys(knife)
for (const key of keys) {
if (knife[key] != this.usedKnife[key]) {
flag = true
continue
}
}
}
if (flag) {
code += this.exec('TE',[]);
}
return code;
}
}