
希尔伯特曲线绘制插件
简介
希尔伯特曲线绘制插件
简介:希尔伯特曲线绘制插件开源协议
:Public Domain
描述
背景
近来流行使用铝基板打样制作发热板,最常用的就是阵列放线条,再做微调,但是看到一些玩家做的铝基板很花哨,研究了一下,是用的希尔伯特曲线,说是能做到最大长度,这么牛逼那就整,咋整,手绘那不成呆瓜了。看有人用py绘制,生成json导入。记得立创eda之前说过支持插件,那就研究下插件生成。
PS:官方也太不重视插件了,专业版不能用,标准版插件说明。。。太简单
效果图

左边阵列摆放+手调,右边插件生成(半成品,暂时没用到)
> 一阶(迭代1次)

> 二阶

> 五阶

> 七阶(插件限制10阶,我破电脑最高跑到7,再高页面就崩了)

插件安装
工程附件压缩包下载-解压,得到三个文件

- 打开立创eda标准版、立创eda标准版、立创eda标准版重要的事情说三遍,目前专业版不支持插件,需要标准版生成后再迁移到专业版,目前测试的web版,exe暂时没测
- 高级--扩展--扩展配置

- 点击加载扩展-选择刚才压缩文件解压出来的三个文件,正常情况扩展id会自动生成,如果没生成就随便输入个id,再点加载扩展加载成功

- 加载成功的效果(只有PCB界面才有按钮,原理图页面没有按钮)

插件使用
- 打开一个PCB文件
- 点击菜单中的“希尔伯特曲线”按钮
- 在弹窗中输入线宽、线距、迭代次数,然后点击应用
- 插件执行,自动新增一个PCB文件,在顶层生成一个hc$9999网络的希尔伯特曲线
**注:**线宽、线距看下图标注,迭代次数实际上就是函数递归次数,也就是希尔伯特曲线的阶,说人话就是图形总大小


简单模式
导入插件的方式,一次折腾,以后省心,但是装插件也是个麻烦事,嫌麻烦的就再换个更简单的方式,直接运行脚本
- 高级--扩展--运行脚本
- main.js文件中的代码段粘贴进去,取消三个参数的注释,按需要修改
- 点击运行按钮,自动生成曲线
注:


/*************************************可独立运行脚本**************************************/
let width=1;//线宽
let spacing=2;//间距
let iterations=4;//迭代次数
//单位转换
let pixelWidth = api('unitConvert', {
type: 'mm2pixel',
value: width
});
let pixelSpacing = api('unitConvert', {
type: 'mm2pixel',
value: spacing
})
let x = 0,
y = 0;
let h = pixelSpacing;
let maxGid = 1111;
var TRACK = {};
//图形迭代
function line(x1, y1, x2, y2) {
gid = "gge" + maxGid++;
TRACK[gid] = {
"gId": gid,
"layerid": "1",
"net": "hc$9999",
"pointArr": [{
"x": x1,
"y": y1
},
{
"x": x2,
"y": y2
}
],
"strokeWidth": pixelWidth
}
}
function One(n) // 方式(1)的递归调用
{
if (n > 0) {
Two(n - 1);
line(x, y, x, y += h);
One(n - 1);
line(x, y, x += h, y);
One(n - 1);
line(x, y, x, y -= h);
Four(n - 1);
}
}
function Two(n) // 方式(2)的递归调用
{
if (n > 0) {
One(n - 1);
line(x, y, x += h, y);
Two(n - 1);
line(x, y, x, y += h);
Two(n - 1);
line(x, y, x -= h, y);
Three(n - 1);
}
}
function Three(n) // 方式(3)的递归调用
{
if (n > 0) {
Four(n - 1);
line(x, y, x, y -= h);
Three(n - 1);
line(x, y, x -= h, y);
Three(n - 1);
line(x, y, x, y += h);
Two(n - 1);
}
}
function Four(n) // 方式(4)的递归调用
{
if (n > 0) {
Three(n - 1);
line(x, y, x -= h, y);
Four(n - 1);
line(x, y, x, y -= h);
Four(n - 1);
line(x, y, x += h, y);
One(n - 1);
}
}
var json = api('getSource', {
type: 'json'
});
One(iterations);
//线长
let length=spacing*Object.keys(TRACK).length;
console.log(`总线长:${length}mm`);
/*铜的电阻率: ρ=0.0175Ωmm2/m
走线长度: L
走线宽度: W
PCB铜厚度: D=0.035mm(加工消耗,采用0.03mm)
PCB走线电阻:R=(ρL)/(1000×WD)
R=(ρL)/(1000×WD)*/
let R=0.0175*length/1000/0.03/width;
console.log(`总阻值:${R}Ω`);
json = {
"DRCRULE": json.DRCRULE,
"preference": json.preference,
"SIGNALS": {},
"netColors": {},
"itemOrder": [],
"canvas": json.canvas,
"layers": json.layers,
"objectMap": json.objectMap,
"netRuleMap": {},
"head": json.head,
"BBox": json.BBox,
"importFlag": 0,
"PAD": {},
"TRACK": TRACK
}
api('applySource', {
source: json,
createNew: true
});
尾声
希尔伯特曲线生成代码直接参考的网友的,在此感谢:JavaScript图形实例:Hilbert曲线
插件开发问题联系了立创eda的微信客服,反馈的也比较及时,赞一个
设计图
未生成预览图,请在编辑器重新保存一次BOM
暂无BOM
克隆工程知识产权声明&复刻说明
本项目为开源硬件项目,其相关的知识产权归创作者所有。创作者在本平台上传该硬件项目仅供平台用户用于学习交流及研究,不包括任何商业性使用,请勿用于商业售卖或其他盈利性的用途;如您认为本项目涉嫌侵犯了您的相关权益,请点击上方“侵权投诉”按钮,我们将按照嘉立创《侵权投诉与申诉规则》进行处理。
请在进行项目复刻时自行验证电路的可行性,并自行辨别该项目是否对您适用。您对复刻项目的任何后果负责,无论何种情况,本平台将不对您在复刻项目时,遇到的任何因开源项目电路设计问题所导致的直接、间接等损害负责。










