news 2026/10/5 5:22:52

KLayout形状编辑详解:Box、Polygon、Path与布尔运算实践

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
KLayout形状编辑详解:Box、Polygon、Path与布尔运算实践

KLayout这个开源版图工具,我在上一篇教程里带大家把主界面、图层面板和单元导航的基本操作过了一遍。这一篇是系列教程的第二篇,专门把“编辑不同的形状”这件事讲透。你要在KLayout里画版图,无论是画一条金属连线、抠一个焊盘开窗,还是标注一个端口名,落到底层全部是形状对象的创建与修改。很多新手在这里卡住,往往不是不会用鼠标,而是没搞明白KLayout里的形状其实分好几种类型,每种类型的编辑方式都不一样,什么时候该拖动顶点、什么时候该用属性面板、什么时候该上布尔运算,这些套路一旦理顺,画图的效率会完全不一样。

这篇内容适合刚接触KLayout的版图设计新手,也适合已经把DRC、LVS跑起来但基本绘图还很生疏的同学。文章不碰脚本编程,只讲编辑器本身。你跟着操作一遍后,再回去画自己项目里的结构,应该会比之前顺手很多。

因为不同版本的KLayout在菜单措辞和图标排布上会有细微差别,我会把名称尽量描述成“我平时用的版本里最常见的样子”,你如果发现自己界面上的叫法不完全一致,按照功能去找就行。

1. KLayout形状体系入门:编辑操作的大前提

1.1 形状和图层是绑在一起的

KLayout里的任何形状都一定属于某个图层。图层由“层号/数据类型”这对参数标识,比如Layer 1、Data Type 0,通常写成1/0。你在画图之前如果没有选中一个目标层,KLayout会不知道把新形状放到哪里。这也是很多新手第一次打开软件后随手一画,结果发现图层面板里什么都没有的常见原因。

所以任何编辑动作的第一原则是:先确认当前激活层是哪一层,再开始画。层与层的形状可以叠在一起显示,但它们在数据上是分区管理的。后面你要做布尔运算、做特定层的筛选和导出,全都依赖这个层归属关系。画的时候不讲究,后期整理的时候会非常痛苦。

1.2 理解Box、Polygon、Path、Text四种主要形状

KLayout的形状类型可以大致分成几类:Box(矩形)、Polygon(多边形)、Path(路径)、Text(文本),另外还有更细化的SimplePolygon、Container等类型。实际版图编辑中,你用到最多的就是前四种,把它们的特性和差异吃透,绝大多数绘图任务都能应付。

Box是最简单的轴对齐矩形,数据库里只存左下和右上两个角坐标。它的优点是紧凑、处理快,只要你的图形是水平竖直的矩形,尽量用Box而不要用Polygon去画。缺点是Box不能表达斜边,也不带旋转角度。如果你想要任意四边形或者平行四边形,那它就不是Box,而是Polygon。

Polygon是多边形,存储的是围成图形的顶点坐标列表。它可以有很多个顶点,可以凹也可以凸,几乎能表达任意平面图形。它和Box的关键区别在于:Polygon记录了每个顶点的独立位置,编辑自由度最高,但同样的图形,它的存储开销比Box大。能画Box的地方就没必要硬画成Polygon。

Path是一条有宽度的轨迹,数据库里存的是中心线的折点、线宽、端点延伸量和拐角方式。它非常适合画连线、引脚、金属走线这一类长条形对象。Path的杀手锏是它把“宽度”作为独立参数保存,你画完一条线之后想从5微米改成8微米,直接改Width属性就行,形状会自动加宽,完全不用手工去移动两条边。这是Polygon做不到的编辑体验。

Text是文本标注,用于标单元名、端口名或一些特殊说明。它默认不是掩膜上的实体图案,更多是给人读的。虽然也能参与输出,但如果你需要的是实打实的物理几何,那就得用Polygon画出来,而不是放一段Text。

1.3 形状类型决定了后续的编辑自由度

为什么我在开始操作之前花这么大力气讲形状类型?因为后面你会遇到一个很典型的问题:为什么别人的多边形可以任意拖顶点,我的矩形拖不动?答案就是类型不同。Box只能拖动四个角,等效于调整两个对角点坐标,它没有多余的顶点给你拖。Path则根本不能通过拖顶点来加宽,你拖折点只会改变中心线的走向,宽度还是要改属性。

反过来,如果你把一个Box转成Polygon,它就获得了任意变形能力。KLayout里这种“类型转换”是可行的,在形状属性面板里可以调整,但转换之后数据类型就变了。我的建议是:一开始画图时就想清楚这个形状将来需不需要做非常规变形,需要就画Polygon,不需要就保持Box或Path,保持数据库尽量紧凑。

形状类型数据存储方式典型用途编辑特点
Box两个对角坐标焊盘、方块、简单区域拖动四角调整大小,类型最紧凑
Polygon顶点坐标列表任意多边形、L型拐角、复杂图形可自由增删拖动顶点,灵活但占空间
Path中心线折点+宽度连线、走线、引脚改宽度只需改参数,适合长条形
Text字符串+坐标标注、单元名、端口说明编辑以文本属性为主

这段对比建议收藏,之后你在编辑形状时纠结“为什么这个顶点拖不了”的时候,回头一看就明白了。

2. 创建形状:把想法落到画布上的主要方式

2.1 建层和切到编辑模式是画图的前置步骤

打开KLayout后,如果你直接尝试在画布上画图形,多半是画不出来的,因为此时软件还处于查看模式。必须先做两件事:建一个目标层,然后把界面切到编辑模式。

建层的方式是在左侧图层面板上右键,选择Add Layer,接着会弹出层属性窗口,把Layer Number和Data Type设置成你需要的内容。设置好之后点击OK,图层面板里就会出现这一层,默认带一个颜色标记。我习惯在一开始就把可能用到的层全部建好,并设置明显的颜色,避免画到一半临时切来切去。

切编辑模式的位置在主工具栏附近,有一个View/Edit切换按钮。点成Edit模式后,画布左侧会出现一组绘制工具图标,里面有我们在第1章提到的Box、Polygon、Path、Text,还有圆形等工具。此时再回到画布上,就可以开始画图了。

2.2 画Box和Polygon:从最基础的两个操作开始

画Box很简单。在编辑模式下选中Box工具,回到画布上单击确定第一个角,按住鼠标左键拖到对角位置,松开后就得到矩形。如果你需要精确尺寸,不要在拖动时依赖眼睛,直接双击刚画出来的Box,在弹出的形状属性面板里把左下角和右上角的坐标改成你需要的值。这套“先框一个大概,再改准确坐标”的做法,是我画所有基础图形的标准流程。

画Polygon的操作会稍微多一点。选中Polygon工具后,在画布上逐个单击定义顶点,软件会把相邻顶点依次连起来,最后在最后一个顶点处双击或者按Enter结束,多边形会自动闭合。过程中如果点错了,按Backspace可以撤销上一个顶点,不需要重新开始。这个细节很重要,我第一次用不知道,画一个五边形点错一个点,硬是全部重画了一遍。

这里有一个很多人没意识到的好处:Polygon工具画出来的图形,后期可以随意加顶点、删顶点。所以即便你要画的是一个矩形区域,如果它后续要和其他图形拼接、切角,直接画成Polygon反而更省事。Box好在紧凑,失在灵活性差,具体选哪个就看你的用途。

2.3 画Path、Text和圆形

Path工具我一直认为是KLayout里最被低估的绘图工具。选中Path工具后,依次单击路径的中心折点,软件会沿折点生成一条有宽度的带状图形。结束方式和Polygon类似,双击或按Enter完成。画完后如果觉得宽度不对,双击线体进入形状属性,在Width栏里改掉数值,整条线会同步加宽或变窄。我在画金属连线的时候,几乎都是用Path拉中心骨架,最后再统一设置宽度。

Text工具的用法最简单,选中后在画布上单击放置文本,然后在属性面板里输入要显示的内容、字号和字体即可。这里提醒一句:Text的内容建议用英文或数字,避免中文字符在某些版本的字体渲染下出现对不齐的问题。

圆形工具画出来其实是个多边形近似的圆,属性里通常可以设置分段数。分段越多圆越平滑,但数据量也越大。如果这个圆只是用来做机械标注,分段数低一点完全够用;如果它是真实器件的有源区或开窗,那就要根据工艺要求确认是否需要把圆形转成近似的多边形。实际流片时,很多工具会要求你把圆形手动切分成带角度的多边形,这一点往往要和工艺规则对齐。

2.4 画图阶段就要想清楚的三件事

第一次画图的新手最容易陷入“对着屏幕盲目拉动鼠标”的状态,画完一看全乱了。我建议你在每个绘图动作前想清楚三件事。

第一,画到哪一层?当前激活层是否已经切换正确。第二,形状类型选对没有?是画Box、Polygon还是Path,想清楚再点工具。第三,坐标精确性是否达标?先开启后面会讲的网格吸附,或者画完立刻进属性面板修正坐标,千万不要抱着“差不多就行”的心态。版图这东西,差之毫厘谬以千里,后面跑DRC的时候报出一堆违例,十有八九都是手绘阶段埋的雷。

3. 编辑已画好的形状:拖动、变换与属性修正

3.1 选择一个或多个形状的正确姿势

编辑形状的第一步是选中它。在编辑模式下,左侧工具条的Select工具就是干这个的。单击某个形状,它会高亮显示,表示已选中。如果要在已有选择状态上追加其他形状,按住Shift再逐个单击即可。拖动鼠标拉出一个矩形框,可以一次框选多个形状,但要注意是“完全包含”还是“碰到就算选中”,这两种行为在KLayout的选区设置里可以切换,具体看版本里的选择模式选项。

选中之后的操作逻辑取决于你点在形状的哪个部位。以Box为例,把鼠标移动到边或角的控制点上拖动,会拉伸矩形;把鼠标移到形状内部,光标变成四向箭头,此时拖动才是整体移动。很多新手一上来就在角点上拖,以为自己在移动,结果把形状拉变形了,还一脸茫然。这个区别必须形成肌肉记忆。

3.2 顶点拖不动?先检查这几种原因

画完一个Polygon,选中它之后,顶点会以小方块的形式显示出来。正常情况下,把鼠标移动到顶点附近就能拖动它。如果你发现某个顶点怎么拖都没反应,多半是以下几种情况导致。

第一种最常见:你根本不在编辑模式下,只是用查看模式选中了对象。查看模式下很多编辑交互是禁用状态,需要回到Edit模式再操作。第二种:这个形状可能不是普通Polygon,而是一个Box或Path。Box没有独立灵活的顶点,Path的宽度也不能靠拖顶点实现,改这些对象的几何属性要走属性面板。第三种:你可能选中的是一个实例,而不是一组静态形状,这尤其容易发生在从单元库里拖出来的器件身上。实例的编辑方式完全不同,后面我会单独说。

3.3 移动、旋转、镜像与精确坐标输入

移动形状可以用鼠标直接拖着走,但想要精确移动就得换个思路。我强烈建议你养成双击打开属性面板,把坐标值直接输入进去的习惯。比如你想把某个矩形向右平移5微米,可以先看看当前左边界坐标,新的左边界等于原值加上5,右边界同样加上5,在属性面板里改完,形状就精准地到达了新位置。

旋转和镜像这类变换操作,在菜单里通常以Transform或“变换”为关键词出现。选中形状后,在右键菜单里找Transform相关选项,一般会有旋转90度、镜像X轴、镜像Y轴等常规变换。如果需要自定义旋转角度,可以在属性面板或变换参数里输入角度值。这些命令平时用得不算多,但画引脚、镜像对称结构时非常方便。

3.4 属性面板是形状修改的万能入口

双击任意形状,KLayout会弹出它的属性编辑器。对Box来说,你可以改左下角坐标和右上角坐标;对Polygon来说,你可以看到完整的顶点列表,逐点修改坐标;对Path来说,你可以改折点坐标以及线宽、端点延伸量;对Text来说,你可以修改字符串内容。这个面板同时还能改形状的层属性。

有一个高频场景能体现属性面板的威力:你画了一堆图形,画完之后发现全画错了层。这时候不需要删掉重画,只要在属性面板里把Shape Layer改成正确的层索引,形状就会转移到目标层。批量处理时,可以先选中所有要改层的形状,再统一修改层属性。

3.5 编辑PCell实例时与传统形状的差异

如果你从PDK库里放置了一个参数化单元实例,比如一个电阻、一个MOS管,你会发现双击它弹出的不是顶点编辑面板,而是参数列表。因为它是PCell实例,尺寸由参数控制,并不是可以直接拖拽的静态形状。

想把这类实例当普通形状自由编辑,就得先在属性面板或右键菜单里找到“Convert to Static”之类的方法,把它转成静态几何。转换之后PCell参数就失效了,以后不能再通过改参数来改变尺寸。所以我的建议是:如果真的需要转静态来编辑,先复制一份原实例放到旁边,把其中一个转静态做实验,确认无误之后再决定是否替换。

4. 用布尔运算组合与拆分形状,让复杂图形变得可管理

4.1 布尔运算解决什么问题

布尔运算是KLayout里处理复杂图形最强大的手段。它的核心思想就是把简单形状通过逻辑运算组合成复杂形状,常见的运算包括AND(交)、OR(并)、SUB(差)和XOR(异或)。如果你手动去描一条带切角、开槽、多个弧形结合的图形,会非常痛苦而且容易出错;但通过几个Box、Polygon做布尔运算,几乎可以拼出任何二维几何。

很多新手不知道这个功能的存在,遇到复杂图形就老老实实用Polygon工具狂点顶点,最后做出来的图形不但费时间,而且顶点数多到难以维护。正确的思路是“先画几个基础形状,再用布尔运算拼出想要的图案”。这是版图编辑从入门到熟练的一个关键思维转变。

4.2 从矩形合并出一个十字形

我用一个最经典的例子说明整个操作流程:用两个矩形合成一个十字形。先在编辑模式下画一个横向的长条矩形A,再画一个纵向的矩形B,让它们在画面上重叠成十字。用选择工具同时框选A和B,然后进入布尔运算对话框,选择OR运算。

运算完成之后,两个重叠的矩形会合并成一个整体,重叠区不会出现内部边界。这个结果通常会自动转成Polygon,因为十字形无法用单个Box表示。合并后的图形只有一个形状,后续可以作为一个整体继续做其他操作。这是一个最小但完整的布尔运算案例,建议每个人都亲手做一遍。布尔运算的入口可以从Edit菜单或者右键菜单里找,关键词通常是Boolean Operation,部分版本里会直接显示成AND/OR/SUB等选项。

4.3 用SUB差集开槽和切角

差集运算用于“减法”,从第一个形状中挖去第二个形状覆盖的区域。典型场景是给一块大金属画开槽,或者从焊盘上抠掉一块禁区。方法是重叠放置两个形状,先选中被挖的主体,再选中要挖掉的部分,执行SUB运算。结果主体会多出一个开口或凹槽,形状变得不规则但完全可控。

做SUB运算前,最好先确认两个形状的位置关系是不是精准重叠了。如果只是肉眼大概对齐,运算出来的边界会很随机,这时候应当利用网格吸附或直接输入坐标,确保相对位置精确。我自己的经验是:先画好基本形状,再用属性面板把它们的坐标关系算清楚,最后才做布尔运算,很少让两个形状“凭感觉”重叠。

4.4 合并重叠形状和拆散粘连图形

很多时候,同一层里画了几个相邻的矩形,转换工具要求它们是单个闭合多边形。这时候可以先选中同层形状,然后执行Merge或“合并选中”操作,把多个相互接触或重叠的图形合并成一个整体,软件会自动清理掉内部共享边界。这在处理DRC前的大面积铺地、合并金属碎块时很管用。

拆散粘连图形相对少见,但偶尔会遇到:一个不小心合并出来的大Polygon需要拆开成几个小图形。KLayout没有一键“切开Polygon”的类似编辑器的工具,但你可以用SUB运算来做切割:画一条细长的矩形或线条横穿要切割的位置,用减掉它的方式把大图形分成两部分。这是比较实用的处理思路。

4.5 关于输出层和版本差异的提醒

KLayout的布尔运算对话框里通常可以选择输出到当前层还是新层。我强烈建议你第一次做运算时输出到一个新建的临时层,确认结果正确后,再把形状复制回目标层。不要直接覆盖原始层,尤其是原图形还可能需要微调的时候。我在这上面吃过亏,直接在原层做结果覆盖,后来觉得切割边界不对,想回退却只能靠键盘Undo,步骤一多就容易乱。

不同版本的KLayout,布尔运算是可以在菜单里打开的,也可以对整层做运算而不只是对当前选区。整层运算适合把某一层所有图形一次性合并,但它会处理层上的全部对象,运行前务必确认当前层就是你要处理的层,否则结果会非常壮观地出乎意料。

5. 编辑形状时的高频坑点与我的习惯解法

5.1 画完了一堆图形,图层面板里找不到

这是我在教程交流群里看到最频繁的问题。用户的画布上明明有图形,图层面板对应层旁边却不显示数量。排到最后几乎都是同一个原因:画的时候根本没有激活目标层,图形被放到了别的层。你可以全选画布内容,打开属性面板统一查看它们的层号,然后把它们批量转移到目标层。

另一种情况是图层被隐藏或锁定。画完图形后,如果不小心把图层面板里的眼睛图标关掉了,图形不会消失,只是不显示。这个问题虽然简单,但当你同时操作多个层时很容易弄混。养成随时通过图层面板确认各层显示状态的习惯,能少浪费很多无谓的排查时间。

5.2 网格吸附没开,画出来的坐标全是小数

版图设计对整齐度的要求远高于一般绘图。比如两条连线应该严格对齐到同一个坐标值,但如果你没开网格吸附,鼠标点的位置可能带着0.000123微米这样的小数,画出来的图形之后每次对齐都有微小偏差,甚至引发DRC的间距违例。正确做法是在开始画图前检查Snap是否打开,并把网格大小设置成工艺规则允许的最小精度。

如果已经有图形带小数坐标,也不用完全推倒重来。可以通过属性的方式把相关点的坐标手工归整,或者在编辑模式里全选后执行“选区对齐/吸附”类的工具把坐标修正到网格。是否所有版本都内置一键吸附功能我不完全确定,但至少可以手工通过属性面板逐点处理。整体网格规划做在前面,总比事后返工省力得多。

5.3 复制形状时层归属错乱

KLayout里复制粘贴形状时,默认会保持原形状的层信息。如果从A层复制一个形状到画布上,它的层还是A层,不会自动变成当前激活层。这本来是合理设计,但新手很容易误以为“当前选中的层就是粘贴后的层”。结果是图形出现在画布上,却没有落到自己以为的层里,后面做层运算时怎么都算不对。

我现在的习惯是:跨层复制之后,立刻全选新粘贴的形状,去属性面板里确认并修改形状层。批量跨层迁移时,直接在属性面板里统一改层,比逐个删除重画高效得多。

5.4 Undo很强大,但复杂布尔运算前务必留备份

KLayout提供了多步撤销,常见的误操作基本都能用Ctrl+Z救回来。但布尔运算本身会改变多个形状的结构,运算之后即便撤销,也可能因为后续操作而变得不可控。我对待大型布尔运算的态度是:先另存一个版本号副本,或者把原始形状复制到旁边一个临时单元里再做运算。等到运算结束、结果确认无误,再删除临时保存的副本。

这个方法听上去很基础,但确实能救急。有一次我做一层金属的合并和开槽,连续几个布尔操作之后发现最初某个参数给错了,如果没有备份,几乎只能从头重画。那次之后我再也没有“裸奔”运行布尔运算的习惯。

整体上,KLayout的编辑能力是围绕形状类型和布尔运算这两条主线展开的。我直到现在画版图也坚持几个基础习惯:任何复杂图形都不直接手工勾到最后,而是先画几个基础形状再组合;顶点和坐标优先用属性面板做精确控制,而不是凭眼睛拖;每次大操作前留备份,运算结果先输出到临时层。这几条帮我减少了大量返工。这篇先把编辑形状的基本操作铺开,下一篇我们接着聊图层与单元管理,把整个版图的组织逻辑串起来。你在实际练习中遇到其他奇怪的问题,也欢迎带着现象来讨论,很多“反直觉”的报错,恰恰是最能加深理解的地方。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/5 5:22:22

802.1Qbv时间感知整形器实战:门控列表计算与TSN交换机部署避坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/5 5:22:15

RAG知识库构建:PDF解析与OCR选型实战指南

1. 图文与PDF解析为什么是RAG的第一个拦路虎做RAG知识库的人多半都有过这种经历:模型选好了、向量库跑通了、检索链路搭完了,结果导入第一批真实业务文档时直接卡死在“解析”这一步。尤其是带图片、扫描件、复杂表格的PDF,喂进去的不是纯文本…

作者头像 李华
网站建设 2026/10/5 5:21:59

网页背景自己织:用华为云码道生成可无缝平铺的格纹

生成式 UI 表单校验契约:动态联动规则与 Zod/JSON Schema 双向绑定在企业级中后台、政企审批流以及低代码搭建平台中,动态表单生成(Dynamic Form Generation)一直是生成式 UI(Generative UI)最具商业价值的…

作者头像 李华
网站建设 2026/10/5 5:21:56

三菱iQ-R与RJ71C24实现Modbus-RTU通讯全流程指南

在自动化项目里,串口设备永远比想象中多。变频器、温控表、智能电表、称重仪表,甚至很多传感器和阀门定位器,现场跑的还是Modbus-RTU。而CPU侧是三菱iQ-R的时候,RJ71C24就是我手里最顺手的串口通讯模块。如果你已经习惯了用iQ-R的…

作者头像 李华
网站建设 2026/10/5 5:21:54

RP4VM详解:vSphere虚拟机级连续数据保护(CDP)实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/5 5:21:46

ESP32-CAM+Gemini API:自制智能垃圾分类垃圾桶实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华