PCB javascript解析钻孔(Excellon)格式说明

解析钻孔(Excellon)格式前首先得了解此格式,这样才能更好的解析呀。

一个钻孔里面包含的基本信息如下:

1.单位:公式mm,英制inch

2.省零方式:前省零,后省零

3.坐标方式:绝对坐标,相对坐标

4.坐标位数:3:3,2:4

5.钻孔刀径信息

6.钻孔坐标信息

更多EXCELLON格式详见

https://wenku.baidu.com/view/4e9553b765ce0508763213e9.html

一.数据结构信息

此结构仅用于解析Excellon格式绘出钻孔图形,

后续改进点:

1.需增加G84,G85 扩孔;槽孔

2.需增加支持绝对坐标,

3.若要扩展用户交互功能,需改进此结构,钻孔目前是统一在一个集合中的,需改为按刀具大小分类存储

4.钻孔格式固定几类格式3:3,2:4,无法智能匹配钻孔格式,需改为依据板板尺寸或线路焊盘与钻孔格式多次匹配最佳钻孔格式

5.此为解析是基于常规钻孔格式解析,特殊钻孔格式是不支持的.所以此点需改进.

二.JS代码实现:

function loadDrill(text) {
    text = text.replace(/^[\s%]*M48/, ‘‘);
    text = text.replace(/[^\S\n]+/g, ‘‘);

    function numVal(x) {
        if(x[0] == ‘+‘)
            return numVal(x.slice(1));
        if(x[0] == ‘-‘)
            return -numVal(x.slice(1));
        if(x == ‘0‘)
            return 0;
        if(g.omitLead)
            while(x.length < g.num)
                x = ‘0‘+x;
        else
            while(x.length < g.num)
                x += ‘0‘;
        return parseFloat(x.slice(0, g.int)+‘.‘+x.slice(g.int), 10);
    }

    var cmds = text.split(‘\n‘);

    var g = {offA: 0, offB: 0, shapes: [], cmds: [], scale: 1}, shape, body = false, prevX = 0, prevY = 0;

    for(var i = 0; i < cmds.length; i++) {
        var d = cmds[i];
        if(!body) {
            if(d[0] == ‘T‘) {
                var r = /^T(\d+)[^C]*C([\d.]+)/.exec(d); // assert(r);
                g.shapes[parseInt(r[1], 10)] = [‘C‘, +r[2]];
            }
            else if(d == ‘METRIC,LZ‘)
                g.scale = 1, g.omitLead = false, g.int = 3, g.dec = 3, g.num = 6;
            else if(d == ‘METRIC,TZ‘ || d == ‘M71‘)
                g.scale = 1, g.omitLead = true, g.int = 3, g.dec = 3, g.num = 6;
            else if(d == ‘INCH,LZ‘)
                g.scale = 25.4, g.omitLead = false, g.int = 2, g.dec = 4, g.num = 6;
            else if(d == ‘INCH,TZ‘ || d == ‘M72‘)
                g.scale = 25.4, g.omitLead = true, g.int = 2, g.dec = 4, g.num = 6;
            else if(d == ‘%‘)
                body = true;
        } else {
            function getNum(offset) {
                var r = /^[-+\d]*/.exec(d = d.slice(offset)); // assert(r);
                d = d.slice(r[0].length);
                return numVal(r[0]);
            }
            if(d[0] == ‘T‘)
                shape = parseInt(d.slice(1), 10);
            else if(d[0] == ‘R‘) {
                var r = /^\d+/.exec(d = d.slice(1)); // assert(r);
                var nr = parseInt(r[0], 10), dx = 0, dy = 0;
                d = d.slice(r[0].length);
                if(d[0] == ‘X‘)
                    dx = getNum(1);
                if(d[0] == ‘Y‘)
                    dy = getNum(1);

                // assert(!d.length);
                for(var x = prevX, y = prevY, j = 0; j < nr; j++)
                    x += dx, y += dy, g.cmds.push([(1<<2) | 3, shape, x, y]);
                prevX = x, prevY = y;
            }
            else {
                var x = prevX, y = prevY, coords = false;
                if(d[0] == ‘X‘)
                    x = getNum(1), coords = true;
                if(d[0] == ‘Y‘)
                    y = getNum(1), coords = true;
                if(coords) {
                    g.cmds.push([(1<<2) | 3, shape, x, y]);
                    prevX = x, prevY = y;
                }
            }
        }
    }
    return g;
};

三.钻孔解析绘图Web效果图

JS解析展示,无交互功能,虽然是在前端,但最佳作法解析动作放在后端,后端解析后的数据或图像传送到前端

原文地址:https://www.cnblogs.com/pcbren/p/9751762.html

时间: 2024-10-10 20:35:12

PCB javascript解析钻孔(Excellon)格式说明的相关文章

javascript 解析ajax返回的xml和json格式的数据

写个例子,以备后用 一.JavaScript 解析返回的xml格式的数据: 1.javascript版本的ajax发送请求 (1).创建XMLHttpRequest对象,这个对象就是ajax请求的核心,是ajax请求和响应的信息载体,单是不同浏览器创建方式不同 (2).请求路径 (3).使用open方法绑定发送请求 (4).使用send() 方法发送请求 (5).获取服务器返回的字符串   xmlhttpRequest.responseText; (6).获取服务端返回的值,以xml对象的形式存

原生javascript解析xml文档

之前写过一篇 <javascript/jQuery解析或转换json和xml>链接是http://my.oschina.net/ososchina/blog/343748,这篇博客详细解释了json使用 JSON.js  window.eval() ,jQuery 与字符串互相转换的方法 ,顺便也说了一点jQuery解析xml文档的方法,这里着重论述javascript操作xml. 顺便提一下,今天做项目有一点问题,如何让服务程序接口返回的就是json,而不需要 使用 jQuery.ajax设

Javascript 解析字符串生成 XML DOM 对象。

Javascript 接收字符串生成 XML DOM 对象.实测对 Firefox .IE6 有效.可用于解析 ajax 的服务器响应结果,也可用于解析自定义字符串.?1. [代码]函数   ppt模版  /** * Parses DOM from XML text.<br /> *  * @author Typhoon.Free.Wolf * @version 2014-02-28_15-51 * @param blDebugFlag *      - Debug flag: true, f

将Array格式的数据解析成JSON格式的数据

在编程的过程中,数据的传输格式如何,会影响开发的效率和后期代码的维护, 并且现在许多的js中支持了JSON格式的数据, 比如angular.nodejs.本篇文章主要讲解Array(数组)形式数据的解析.其它格式的数据会在后续的文章中进行书写. (1)定义一个解析Array的类JSONArray. public class JSONArray { @SuppressWarnings("unchecked") public static String toJSONString(List

JavaScript解析顺序和变量作用域

javascript解析顺序和变量作用域 一.变量的作用域 1.全局变量:在代码中任何地方都能够访问得到的变量,拥有全局的作用域.        A.最外层函数外面定义的变量.        B.没有定义直接赋值的变量,拥有全局属性. 2.局部变量:只能在固定的代码片段(函数片段中)中访问得到.        A.函数内部定义的变量,就是局部变量.        B.参数也是局部变量.     二.javascript预解析顺序    1.<Script></script>块依次解

JavaScript解析XML实现省市县三级联动

JavaScript解析XML实现省市县三级联动,简单易用,只需要一个XML和一个js就能能实现,下载后代开HTML就能看到效果.  原文:JavaScript解析XML实现省市县三级联动 源代码下载地址:http://www.zuidaima.com/share/1550463310056448.htm JavaScript解析XML实现省市县三级联动

javascript解析器(引擎)

The JavaScript interpreter in a browser is implemented as a single thread. javascript 引擎在浏览器中作为单线程实现. javascript解析器(引擎),码迷,mamicode.com

javascript解析引擎(每天有学习一点篇)

======================================================= 有一段时间,经常耳闻web前端的福音,对高性能的V8议论纷纷. 其实对js解析引擎没有深入了解,就是自己瞎想了一下她的样子. 今天决定稍微认识一下: 首先JavaScript解析引擎就是能够“读懂”JavaScript代码的程序. 以前上课学习 java的时候,老师说java是一门静态语言,运行java程序会有一个编译的过程,就是将源代码编译为另外一种代码(比如机器码,或者字节码):

javascript解析机制——预解析

JavaScript解析机制是什么? JavaScript解析过程分为两个阶段,一个是编译阶段,另外一个就是执行阶段. * 编译阶段         编译阶段就是我们常说的JavaScript预解析(预处理)阶段,在这个阶段JavaScript解释器将完成把JavaScript脚本代码转换到字节码. * 执行阶段 在编译阶段JavaScript解释器借助执行环境把字节码生成机械码,并顺序执行. 编译阶段(预解析阶段)做什么操作? * var , function声明的变量提升 首先,创建一个当前