内缩和外扩怎么编程的

时间:2025-03-04 21:32:35 明星趣事

内缩和外扩是电子设计自动化(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. 将生成的图形修改到板框层,定义板框属性。

这些方法可以根据具体需求选择使用,以实现内缩和外扩操作。