在本文中,我介绍了 AutoCAD 中使用 Python 的 DimAligned 对象。一般来说,手动添加维度是一项非常繁琐的任务,如果我使用 Python 自动化来代替,我可以避免。
对于本教程,我使用 Python 中的 pyautocad 模块。为此,我还可以使用 Python 中的pywin32和win32com模块。这些模块提供了另一种在 Python 中执行AutoCAD 自动化的方法。请查看我以前的博客文章以获取有关这些模块的更多信息。
将 DimAligned 对象添加到 AutoCAD 工程图中
正如文章的名称所示,我关注线性实体的尺寸。我可以为此使用 DimAligned 对象。
我可以使用 AddDimAligned 方法添加尺寸。首先要记住的是 DimAligned 对象需要 3 个参数:
- ExtLine1Point(第一个端点)
- ExtLine2Point(第二个端点)
- TextPosition(尺寸文本)
在这种情况下,我的模型空间中有两个几何图形。左边是由线组成,右边是折线。您可以在下面的屏幕截图中看到这一点。

鉴于我可以获取AutoCAD Line对象的起点和终点,我可以遍历 AcDbLine 对象,将这些点作为维度的起点和终点传递。
我使用中点公式,偏移系数为 100,用于文本位置。请参阅下面的代码。
for l in acad.iter_objects_fast(object_name_or_list="AcDbLine"):
acad.model.AddDimAligned(APoint(l.StartPoint), APoint(l.EndPoint), APoint((l.StartPoint[0]+l.EndPoint[0]+100)/2, (l.StartPoint[1]+l.EndPoint[1]+100)/2, 0))
另一方面,折线对象为每个节点的坐标返回一个双精度数组。在这种情况下,我可以遍历该数组并在每次迭代中将这些点作为起点和终点传递。
for i in acad.iter_objects_fast(object_name_or_list="AcDbPolyline"):
nodes = len(i.Coordinates)/2
j=0
while j <= nodes+1:
acad.model.AddDimAligned(APoint(i.Coordinates[j], i.Coordinates[j+1], 0), APoint(i.Coordinates[j+2], i.Coordinates[j+3], 0), APoint((i.Coordinates[j]+i.Coordinates[j+2]+100)/2, (i.Coordinates[j+1]+i.Coordinates[j+3]+100)/2, 0))
j+=2
当然,这是向任何线性几何图形添加尺寸的非常基本的方法。尽管如此,让我现在实现它并查看结果。

显然,正如您在上面的屏幕截图中看到的,我可以说我已将尺寸添加到线性几何图形中。
AutoCAD 中 DimAligned 对象的属性
现在我已经为图形添加了尺寸,我想介绍它的一些重要属性。我无法在本文中解释它们中的每一个,因为总共有大约 115 个属性,其中许多用于不同的维度方面。
但首先,我在下面的 Python 代码中展示了一些基本属性。
# general properties
print(l.ObjectName)
print(l.Rotation) # rotation angle of object in radians
print(l.LinearScaleFactor)
# specfies global scale factor for linear dimensioning measurements
print(l.StyleName)
l.DecimalSeparator = "."
print(l.DecimalSeparator)
O/p:
AcDbAlignedDimension
0.0
1.0
ISO-25
.
因为我的绘图中存在多条尺寸线,所以我选择其中一条来应用这些属性。还有 ArrowHead 属性,我可以通过传递一个整数值来设置箭头大小。
# arrow head properties
l.ArrowheadSize = 15
print(l.ArrowheadSize)
print(l.Arrowhead1Type)
print(l.Arrowhead2Type)
O/p:
15.0
0
0
正如我在上面的代码中所示,我可以获取和设置箭头大小和类型。对于箭头类型,有多个选项。默认值为 acArrowDefault (0)。其他类型如下:
- acArrow 默认吨
- ac箭头点
- acArrowDotSmall
- acArrowDotBlank
- acArrowOrigin
- acArrowOrigin2
- acArrowOpen
- acArrowOpen90
- acArrowOpen30
- acArrow已关闭
- acArrowSmall
- acArrowNone
- acArrowOblique
- acArrowBoxFilled
- ac箭头框空白
- acArrow关闭空白
- acArrowDatumFilled
- acArrowDatumBlank
- acArrow积分
- acArrowArchTick
- acArrowUserDefined 只读
同样,我有一些尺寸线属性,如下所示。
l.DimensionLineColor = 200
print("Dimension line color on the basis of 0-256 color index: " + str(l.DimensionLineColor))
print("The dimension line extends beyond the extension line when oblique strokes are drawn instead of arrowheads: " + str(l.DimensionLineExtend))
print("The dimension line type is: " + l.DimensionLineType)l.DimensionLineWeight = 100
print("Dimension lineweight: " + str(l.DimensionLineWeight))
print("Dimension text direction: ", end="" )
print(l.DimTxtDirection)
# False: Left to right reading style
# True: Right to Left reading style
print(l.Fit)
O/p:
Dimension line color on the basis of 0-256 color index: 200
The dimension line extends beyond the extension line when oblique strokes are drawn instead of arrowheads: 0.0
The dimension line type is: ByBlock
Dimension lineweight: 100
Dimension text direction: False
3
Fit 属性有 4 个可能的值,如下所示:
- acTextAndArrows(0) : 将文本和箭头都放在延长线内。
- acArrowsOnly(1):仅将箭头放置在延长线内。文本放置在箭头之外。
- acTextOnly(2):仅将文本放置在扩展线内。箭头位于延长线之外。
- acBestFit(3):这是默认选项,在给定可用空间的情况下,将文本和箭头放置在最合适的位置。当有足够的空间用于文本和箭头时,此选项会将两者放置在延长线之间。
还有一些其他属性,例如文本属性和公差属性。让我从每个属性中添加一些来解释。
#Text properties
l.TextHeight = 20
print(l.TextHeight)
print(l.TextInside)
#Tolerance properties
print(l.ToleranceDisplay)
print(l.TolerancePrecision)
O/p:
20.0
False
0
2
此处,TextInside 属性具有一个布尔值,用于指定是强制将文本添加到扩展线 (true) 还是仅在相应的有空格时 (false)。
为了在尺寸文本中指定公差,我有 ToleranceDisplay 属性,它也返回一个布尔值。ToleranceDisplay 默认返回 False,即如果没有指定公差。
通常,公差精度有 4 个可能的值:
- acTolNone:0(默认)
- acTol对称:1
- 行动偏差:2
- acTolLimits:3
- acTilBasic: 4
事实上,正如我自己也已经提到的,还有比我上面指定的更多的属性,但这些只是展示如何使用它们的一些。下面是 DimAligned AutoCAD 对象类的方法列表。
- ArrayPolar
- 数组矩形
- 复制
- 删除
- 获取边界框
- 相交
- 镜子
- 镜像3D
- 移动
- 旋转
- 旋转3D
- 比例实体
- 更新
结束语
最后,我可以说我已经介绍了 AutoCAD 中的 DimAligned 对象以及我可以使用 Python 自动化的方式。同样,还有其他维度对象,我将在以后的博文中介绍。如果需要更多技术信息或咨询,请随时使用我们的联系表与我联系。此外,如有任何疑问,请在我们的评论框中发表评论。

Leave a Reply