# 背景
近来流行使用铝基板打样制作发热板,最常用的就是阵列放线条,再做微调,但是看到一些玩家做的铝基板很花哨,研究了一下,是用的希尔伯特曲线,说是能做到最大长度,这么牛逼那就整,咋整,手绘那不成呆瓜了。看有人用py绘制,生成json导入。记得立创eda之前说过支持插件,那就研究下插件生成。
PS:官方也太不重视插件了,专业版不能用,标准版插件说明。。。太简单
# 效果图
![无标题.png](//image.lceda.cn/pullimage/QscHYsnmsii3DdS9ltQ4LcyFZZ8XYFWHqfhJg6dR.png)
左边阵列摆放+手调,右边插件生成(半成品,暂时没用到)
> 一阶(迭代1次)
![image.png](//image.lceda.cn/pullimage/9pmZnaDSQSjYoJUfwcEWmGEHChvyZ6ZdQa0xNPNa.png)
> 二阶
![image.png](//image.lceda.cn/pullimage/6KqmSEMijnfa4FKOHfGR8SAslfELFc8kCILfDhJG.png)
> 五阶
![image.png](//image.lceda.cn/pullimage/fwNIujETfP5wENZ8E4r3wZqoCcMX6weguDaNW37e.png)
> 七阶(插件限制10阶,我破电脑最高跑到7,再高页面就崩了)
![image.png](//image.lceda.cn/pullimage/2YlhSoDsQoKWYdJndRHLrU4jtVAlQhKKkZrvnetN.png)
# 插件安装
工程附件压缩包下载-解压,得到三个文件
![image.png](//image.lceda.cn/pullimage/HuBWhqqaUYkQD405juToSZ2qCPwl0P5vgPeMaxQ6.png)
1. 打开**立创eda标准版**、**立创eda标准版**、**立创eda标准版**重要的事情说三遍,目前专业版不支持插件,需要标准版生成后再迁移到专业版,目前测试的web版,exe暂时没测
2. 高级--扩展--扩展配置
![image.png](//image.lceda.cn/pullimage/eU12cp9QD3P9x7iL03kLTvZ3duWDmUREYtd0ft3n.png)
3. 点击加载扩展-选择刚才压缩文件解压出来的三个文件,正常情况扩展id会自动生成,如果没生成就随便输入个id,再点加载扩展加载成功
![image.png](//image.lceda.cn/pullimage/WxiCfpCdnO5QSq0PJ7ASishu6ewM4W7eO84VKbZ3.png)
4. 加载成功的效果(只有PCB界面才有按钮,原理图页面没有按钮)
![image.png](//image.lceda.cn/pullimage/QNhDYMbMPnaKz2TSpcsRy5yNspQe5094wFnOoy4B.png)
# 插件使用
1. 打开一个PCB文件
2. 点击菜单中的“希尔伯特曲线”按钮
2. 在弹窗中输入线宽、线距、迭代次数,然后点击应用
3. 插件执行,自动新增一个PCB文件,在顶层生成一个hc$9999网络的希尔伯特曲线
**注:**线宽、线距看下图标注,迭代次数实际上就是函数递归次数,也就是希尔伯特曲线的阶,说人话就是图形总大小
![image.png](//image.lceda.cn/pullimage/ei0XIVQDmGWIHqTErJZ65uxQowkIjEv7M44RRx1c.png)
![image.png](//image.lceda.cn/pullimage/YzpX7GpxUon94Wkj0GJCvC5wOrxnZvrFEJluNm41.png)
# 简单模式
导入插件的方式,一次折腾,以后省心,但是装插件也是个麻烦事,嫌麻烦的就再换个更简单的方式,直接运行脚本
1. 高级--扩展--运行脚本
2. main.js文件中的代码段粘贴进去,取消三个参数的注释,按需要修改
3. 点击运行按钮,自动生成曲线
4.
**注:**
![image.png](//image.lceda.cn/pullimage/xUvrWCASBRdqSQWVXJIyKw61EVvxwxnQ0NmNhljY.png)
![image.png](//image.lceda.cn/pullimage/zhtaX4svoXzLHpzylYSV32PDTiG2fU46uYYeUOl1.png)
```
/*************************************可独立运行脚本**************************************/
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曲线](https://www.cnblogs.com/cs-whut/p/13257224.html)
插件开发问题联系了立创eda的微信客服,反馈的也比较及时,赞一个