实例1、创建一个矩形
注意:当你想创建一个常规的、未命名的数据库形状矩形时,应该使用dbCreateRect函数而不是rodCreateRect函数;使用dbCreateRect会产生更少的开销,从而提高性能。
你可以按照如下方式创建一个具有ROD属性的单个命名矩形:
你可以使用类似如下的代码来创建一个矩形,并返回一个单一的ROD对象ID:
rodCreateRect(
?layer "metal2"
?width 4
?length 2
)
实例2、创建具有ROD属性的命名矩形的行和列
想要创建常规的、未命名的数据库形状矩形的行和列,请参见"Filling a Bounding Box with Rectangles"。
你可以使用类似如下的代码创建具有ROD属性的命名矩形的行和列:
rodCreateRect(
?layer "metal1"
?width 1
?length 1
?origin list( 0 0 )
?elementsX 4
?elementsY 2
?spaceX 1
?spaceY 2
)
返回值是一个包含8个ROD对象ID的列表。
实例3、使用命名矩形填充边界框
想要用常规的、未命名的数据库形状矩形填充边界框,请参见"Filling a Bounding Box with Rectangles"。
你可以使用具有ROD属性的命名矩形填充边界框,如下图所示:
代码如下:
rodCreateRect(
?layer "metal1"
?fillBBox list( 1:1.5 10:5 )
?spaceX 0.5
?returnBoolean t
)
第一个矩形总是位于边界框的左下角。返回值是 t 。
实例4、创建一个多部分的矩形
你可以创建一个由单个主矩形组成的多部分矩形,并填充未命名的子矩形,如下图所示:
代码示例如下。在这个例子中,未指定 S_gap;默认情况下,它会默认distribute,从而使多余的空间放置在子矩形之间。
cvId = deGetCellView()
rodCreateRect(
?layer "metal1"
?width 24
?length 17
?origin list( 0 0 )
?elementsX 1
?elementsY 1
?cvId cvId
?subRectArray list(
list(
?layer "metal2"
?width 3
?length 3
?lowerLeftOffsetX 3.3
?lowerLeftOffsetY 3
?upperRightOffsetX -6
?spaceX 3.3
?spaceY 3
) ;end first subrectangle list
) ;end all subrectangle lists
) ;end rodCreateRect
-
指定最小间距
要将多余的空间放置在子矩形的右侧或上方,可以将S_gap参数指定为minimum,如下图所示:
cvId = deGetCellView()
rodCreateRect(
?layer "metal1"
?width 24
?length 17
?origin list( 0 0 )
?elementsX 1
?elementsY 1
?cvId cvId
?subRectArray
list(
list(
?layer "metal2"
?width 3
?length 3
?gap "minimum"
?lowerLeftOffsetX 3.3
?lowerLeftOffsetY 3
?upperRightOffsetX -6
?spaceX 3.3
?spaceY 3
) ;End first subrectangle list
) ;end all subrectangle lists
) ; end rodCreateRect
实例5、创建具有重叠子矩阵的多部分矩形
你可以创建具有重叠未命名矩形的多部分矩形,如下所示:
你可以使用类似于以下代码的方式创建具有重叠未命名子矩形的多部分矩形,其中左下偏移参数小于0、右上偏移参数大于0。
cvId = deGetCellView()
rodCreateRect(
?layer "metal1"
?width 12
?length 12
?origin list( 2 2 )
?elementsX 1
?elementsY 1
?cvId cvId
?subRectArray
list(
list(
?layer "metal2"
?width 1
?length 1
?lowerLeftOffsetX -2
?lowerLeftOffsetY -2
?upperRightOffsetX 2
?upperRightOffsetY 2
?spaceX 1
?spaceY 1
) ;end first subrectangle list
);end all subrectangle lists
);end rodCreateRect
实例6、创建地线和接触点
你可以创建带有接触点的地线,如下图所示:
在以下代码示例中,你为金属层指定了一个命名矩形,为p扩散层指定了一组未命名的子矩形,并为接触层指定了第二组未命名的子矩形:
rodCreateRect(
?layer "metal1"
?width 10
?length 2
?origin list( 0 0 )
?elementsX 1
?elementsY 1
?cvId cvId
?subRectArray
list(
list(
?layer "pdiff"
?width 1
?length 1
?gap "minimum"
?lowerLeftOffsetX 0.5
?lowerLeftOffsetY 0.5
) ;第一组子矩形列表结束
list(
?layer "cont"
?width 0.5
?length 0.5
?gap "minimum"
?lowerLeftOffsetX 0.75
?lowerLeftOffsetY 0.75
?spaceX 1.5
?spaceY 1.5
) ;第二组子矩形列表结束
) ;所有子矩形列表结束
) ; rodCreateRect结束
在此示例中,为子矩形指定间距参数并不是必须的;软件会使用n_spaceX和n_spaceY参数的默认值来创建适合的接触点的数量。然而,如果你希望在电源导轨被拉伸时接触之间的间距不同于默认值,则需要指定间距参数。
实例7、拉伸多部分矩形
以下示例包括沿Y轴方向拉伸多部分矩形的主矩形。为了使子矩形正确再生成,必须指定n_spaceY。空间参数默认为技术文件中为子矩形层定义的最小间距(minSpacing),但在这种情况下,这不会产生所需的结果。
当你使用Virtuoso® Layout Editor的Edit - Stretch命令来拉伸主矩形时,系统会再生成所有未命名子矩形集。例如,拉伸上一示例中的主矩形向右,如下所示:
使电源线变长,水平增加更多的接触点,如下图所示:
将主举行向上拉伸,如下图所示:
使得电源线更宽,垂直添加更多行的接触点,如下图所示:
实例8、 创建多个填充有子矩形的主矩形
对于一个多部分矩形,您可以创建行和列的主矩形,并用未命名的子矩形填充它们,如下图所示:
类似的代码如下:
cvId = deGetCellView()
rodCreateRect(
?layer "metal1"
?width 3.5
?length 3
?origin list( 0.75 0.75 )
?elementsX 3
?elementsY 2
?spaceX 0.75
?spaceY 0.75
?cvId cvId
?subRectArray
list(
list(
?layer "metal2"
?width 1
?length 0.75
?lowerLeftOffsetX 0.5
?lowerLeftOffsetY 0.5
?upperRightOffsetX -0.5
?upperRightOffsetY -0.5
?spaceX 0.5
?spaceY 0.5
);end first subrectangle list
) ;end all subrectangle lists
) ;end rodCreateRect
实例9、 创建由其他对象构成的矩形
当您使用 n_width
、n_length
和 l_origin
参数或 l_bBox
参数来指定一个命名矩形的坐标时,也可以选择使用 Rl_fromObj
参数来指定一个或多个命名对象,从而生成一个命名矩形。当您指定两个或更多命名对象作为创建矩形的来源时,可以参考下面的示例:
系统根据对象周围的边界框创建矩形。新矩形的大小取决于所指定的尺寸是正数还是负数,从而决定其比边界框更大或更小。
注意:在生成新矩形之后,生成的矩形与其源对象之间不存在任何关系。
想要详细了解如何从其他对象创建矩形,请参阅“Creating a Rectangle from Another Object”
关注我,后续会持续更新。