内缩和外扩是电子设计自动化(EDA)中常用的操作,用于调整图形的尺寸。以下是内缩和外扩的编程方法:
内缩编程方法
使用规则约束器:
1. 将板框线从机械层复制到TOP层。
2. 设置需要内缩和外扩的距离。
3. 执行菜单命令【设计】-【规则】或者快捷键DR进入到规则约束器,在间距规则中设置内缩的距离。
4. 选中板框线,执行菜单命令【工具】-【描画选择对象的外形】或者快捷键TJ,完成内缩操作。
使用Clipper库:
Clipper库是一个用于处理多边形几何操作的库,可以实现内缩操作。以下是一个简单的示例代码:
```cpp
include "clipper.hpp"
using namespace ClipperLib;
int main() {
Path subj;
Paths solution;
subj << IntPoint(348, 257) << IntPoint(364, 148) << IntPoint(362, 148) << IntPoint(326, 241) << IntPoint(295, 219) << IntPoint(258, 88) << IntPoint(440, 129) << IntPoint(370, 196) << IntPoint(372, 275);
ClipperOffset co;
co.AddPath(subj, jtRound, etClosedPolygon);
co.Execute(solution, -7.0);
// Draw solution...
DrawPolygons(solution, 0x4000FF00, 0xFF009900);
}
```
外扩编程方法
使用Python实现:
```Python
import numpy as np
def expand_mask(mask, spacing, expand_mm):
"""
对掩码进行外扩指定大小。如果掩码中包含多个类别,抛出错误。
仅在 x 和 y 方向上扩展,不涉及 z 方向。
Args:
mask (numpy.ndarray): 二维或三维的掩码数组,值为类别标签(例如 0, 1, 2 等)。
spacing (tuple): 掩码在 x 和 y 方向上的像素间距 (mm/像素),例如 (x_spacing, y_spacing)。
expand_mm (float): 在 x 和 y 方向上外扩的距离 (mm)。
"""
if mask.ndim not in [2, 3]:
raise ValueError("掩码必须是二维或三维的。")
if mask.shape != mask.shape:
raise ValueError("掩码必须是正方形的。")
if len(spacing) != 2:
raise ValueError("间距必须是两个值的元组。")
if expand_mm <= 0:
raise ValueError("外扩距离必须大于0。")
计算外扩后的尺寸
new_shape = tuple(np.array(mask.shape) + 2 * np.array(spacing) * expand_mm)
new_mask = np.zeros(new_shape, dtype=mask.dtype)
将原掩码复制到新掩码中
y_offset = spacing * expand_mm
x_offset = spacing * expand_mm
new_mask[y_offset:y_offset + mask.shape, x_offset:x_offset + mask.shape] = mask
return new_mask
```
使用Altium Designer:
1. 将需要外扩的图形设置在信号层(比如TOP)。
2. 选择图形,执行命令TJ,得到内缩和外扩图形。
3. 将生成的图形修改到板框层,定义板框属性。
这些方法可以根据具体需求选择使用,以实现内缩和外扩操作。