Python AutoCAD 注释




Blog Links






一、前言


  标注是向图形中添加测量注释的过程,我们可以为各种对象沿各个方向创建标注。要简化图形组织和标注缩放,建议在图纸空间上创建标注,而不是在模型空间中创建标注。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

'''
=============================
Author: DalNur
Email: liyang@alu.hit.edu.cn
=============================
'''

from pyautocad import Autocad
from pyautocad import APoint
import math

acad = Autocad(create_if_not_exists = True)
acad.prompt("Hello! AutoCAD from pyautocad.")
print(acad.doc.Name)

二、单行文本


2.1. 创建新文本

textString = "Harb Insti of Tec"
insertPnt = APoint(0, 0)
height = 2.5
textObj = acad.model.AddText(textString, insertPnt, height)
          # textString:文本内容;height:字高;
          # 系统默认对齐夹点位于文字基线左侧;
          # 采用系统默认对齐方式时,insertPnt为对齐夹点的位置坐标;
          # 当用户自定义对齐方式时,insertPnt以对齐方式中的为准。

2.2. 对齐方式

AlignNum = 7
textObj.Alignment = AlignNum
    # AlignNum为对齐夹点位置标识号,其取值范围为[0,14];
    # 0 基线左对齐、1 基线居中对齐、2 基线右对齐;
    # 7 表示对齐夹点位于 top cennter;
insertPnt = APoint(0, 10)
textObj.TextAlignmentPoint = insertPnt
    # 设置对齐夹点在图纸空间中的绝对位置,可为任意一已知点;
    # 若用户自定义对齐方式,则需设置此项。

ItemenumItemenumItemenumItemenum
acAlignmentLeft0acAlignmentMiddle4acAlignmentTopRight8acAlignmentBottomLeft12
acAlignmentCenter1acAlignmentFit5acAlignmentMiddleLeft9acAlignmentBottomCenter13
acAlignmentRight2acAlignmentTopLeft6acAlignmentMiddleCenter10acAlignmentBottomRight14
acAlignmentAligned3acAlignmentTopCenter7acAlignmentMiddleRight11

在这里插入图片描述

对齐夹点

2.3. 文本缩放

BasePoint = insertPnt
ScaleFactor = 5
textObj.ScaleFactor = 5
    # 水平方向文本缩放,即只缩放字宽(x方向),不缩放字高(y方向);
    # ScaleFactor为比例系数,非负,>1为放大,<1为缩小。宽度因子
textObj.ScaleEntity(BasePoint, ScaleFactor)
    # 两个方向同步缩放;
    # 基点与insertPnt重合,文字放大后对齐夹点位置保持不变。

三、多行文本


四、文本样式


4.1. 创建文字样式

txtStyleObj = acad.ActiveDocument.TextStyles.Add("HIT_TxtStyle")

4.2. 将特定文字样式设为当前

acad.ActiveDocument.ActiveTextStyle = acad.ActiveDocument.TextStyles.Item("Standard")

4.3. 设置字体


4.3.1. 为当前文本样式设置字体

acad.ActiveDocument.ActiveTextStyle.SetFont("楷体", False, False, 1, 0 or 0)
          # acad.ActiveDocument.ActiveTextStyle.SetFont(Typeface, Bold, Italic, charSet, PitchandFamily)
          # Typeface 字体名称;
          # Bold 加粗,布尔值,False为不加粗字体;
          # Italic 倾斜,布尔值,False为倾斜字体;
          # CharSet 字体字符集,1为默认字符集;
          # PitchAndFamily 字节及笔画形式。

4.3.2. 为特定文本样式设置字体

acad.ActiveDocument.TextStyles.Item("HIT_TxtStyle").SetFont("宋体", False, False, 1, 0 or 0)

4.4. 设置字体倾斜角度

txtStyleObj.ObliqueAngle = math.radians(30)
          # 倾斜角度变化范围为[-85,85],取正值时右偏。

五、尺寸标注


5.1. 线性及旋转线性标注

import math
XLine1Point = APoint(5, 25)
XLine2Point = APoint(25, 35)
DimLineLocation = APoint(10, 20)
RotationAngle = math.radians(0)
dimRotObj = acad.model.AddDimRotated(XLine1Point, XLine2Point, DimLineLocation, RotationAngle)
          # XLine1Point 第一尺寸界线的起点;
          # XLine2Point 第二尺寸界线的起点;
          # DimLineLocation 尺寸线定位点,尺寸线或其延长线过该点;
          # RotationAngle 尺寸线与水平方向的夹角,去弧度制;
          # RotationAngle=0 水平标注,RotationAngle=90 竖直标注。

5.2. 对齐标注

ExtLine1Point = APoint(5, 25)
ExtLine2Point = APoint(25, 35)
TextPosition = APoint(-5, 25)
dimAliObj = acad.model.AddDimAligned(ExtLine1Point, ExtLine2Point, TextPosition)
          # ExtLine1Point 第一尺寸界线的起点;
          # ExtLine2Point 第二尺寸界线的起点;
          # TextPosition 尺寸线定位点,尺寸线或其延长线过该点。
          # dimObj.Update

5.3. 角度标注

AngleVertex = APoint(0, 0)
FirstEndPoint = APoint(6, 8)
SecondEndPoint = APoint(6, -8)
TextPoint = APoint(10, 10)
dimAngObj = acad.model.AddDimAngular(AngleVertex, FirstEndPoint, SecondEndPoint, TextPoint)
          # AngleVertex 角度顶点;
          # FirstEndPoint 第一尺寸界线端点;
          # SecondEndPoint 第二尺寸界线端点;
          # TextPoint 尺寸圆弧线定位点,即尺寸圆弧线过该点。

5.4. 弧长标注

ArcCenter = APoint(0, 0)
FirstEndPoint = APoint(6, 8)
SecondEndPoint = APoint(6, -8)
ArcPoint = APoint(20, 0)
dimArcObj = acad.model.AddDimArc(ArcCenter, FirstEndPoint, SecondEndPoint, ArcPoint)
          # ArcCenter 圆弧中心;
          # FirstEndPoint 第一尺寸界线端点;
          # SecondEndPoint 第二尺寸界线端点;
          # ArcPoint 尺寸圆弧线定位点,即尺寸圆弧线过该点。

5.5. 直径及半径标注

ChordPoint = APoint(0, 10)
FarChordPoint = APoint(0, -10)
LeaderLength = 40
dimDiaObj = acad.model.AddDimDiametric(ChordPoint, FarChordPoint, LeaderLength)
          # ChordPoint 圆任意一直径的端点;
          # FarChordPoint 直径的另一端点;
          # LeaderLength 引线长度,为点ChordPoint到标准文字定位夹点的距离;
          # 标注类型可在相应的系统变量如DIMUPT等中更改。
Center = APoint(0, 0)
ChordPoint = APoint(10, 0)
LeaderLength = 10
dimRadObj = acad.model.AddDimRadial(Center, ChordPoint, LeaderLength)
          # Center 被标注圆或圆弧的圆心

六、标注样式


在这里插入图片描述

标注类术语

6.1. 创建新标注样式

DimStyleObj = acad.ActiveDocument.DimStyles.Add("HIT_DimStyle")
print(dimAliObj.StyleName) 
      # 打印标注对象的标准样式名称
      # 系统自带标注样式 ISO-25

6.2. 将特定标注样式设为当前

acad.ActiveDocument.ActiveDimStyle = acad.ActiveDocument.DimStyles.Item("HIT_DimStyle")

6.3. 设置尺寸线及尺寸界限


  说明: 以下即 (3) ~ (6) 的设置将生效为<样式替代>,程序自动画图时<样式替代>不起作用,新添加的标注仍采用系统默认。手动画图时<样式替代>起作用,新添加的标注<样式替代>。

  设置永久标注样式见 (7),后续添加详细代码。

  标注样式替代是对当前标注样式中的指定设置所做的更改,它与在不更改当前标注样式的情况下更改尺寸标注系统变量等效。使用标注样式替代,无需更改当前标注样式便可临时更改标注系统变量。


6.3.1. 超出标记

acad.ActiveDocument.SetVariable("DIMDLE", 0)
          # 当箭头使用倾斜、建筑标记、积分和无标记时尺寸线超过尺寸界线的距离。

6.3.2. 基线间距

acad.ActiveDocument.SetVariable("DIMDLI", 3.75)
          # 设定尺寸线之间的距离;
          # 如有必要,每条尺寸线都将按此值偏离其前一尺寸线,以避免覆盖它。

6.3.3. 超出尺寸线

acad.ActiveDocument.SetVariable("DIMEXE", 1.25)  # 指定尺寸界线超出尺寸线的距离。

6.3.4. 起点偏移量

acad.ActiveDocument.SetVariable("DIMEXO", 0.625)  # 设定自图形中定义标注的点到尺寸界线的偏移距离。

6.4. 设置箭头


6.4.1. 设定尺寸线箭头类型

acad.ActiveDocument.SetVariable("DIMBLK", "_ARCHTICK")  # "_ARCHTICK"表示建筑标记

6.4.2. 设定引线箭头

acad.ActiveDocument.SetVariable("DIMLDRBLK", "")  # ""表示实心闭合

6.4.3. 尺寸线箭头大小

acad.ActiveDocument.SetVariable("DIMASZ", 2.5)

6.5. 设置标注文字


6.5.1. 标注文字样式

acad.ActiveDocument.SetVariable("DIMTXSTY", "HIT_TxtStyle")

6.5.2. 标注文字高度

acad.ActiveDocument.SetVariable("DIMTXT", 2.5)
       # 设定当前标注文字样式的高度;
       # 如果在此选项卡上指定的字样式具有固定的文字高度,则该高度将替代在此处设置的文字高度;
       # 如果要在此处设置标注文字的高度,请确保将文字样式的高度设置为 0。

6.5.3. 标注文字位置

acad.ActiveDocument.SetVariable("DIMTAD", 1)
       # 控制标注文字相对尺寸线的垂直位置;
       # 0 表示标注文字在尺寸界线之间居中放置;
       # 1 表示将标注文字放置在尺寸线上方,从尺寸线到文字最低基线的距离为当前 DIMGAP 的值。
acad.ActiveDocument.SetVariable("DIMJUST", 0)
       # 水平控制标注文字在尺寸线上相对于尺寸界线的水平位置;
       # 0 表示将文字置于尺寸线之上,并在尺寸界线之间置中对正。
acad.ActiveDocument.SetVariable("DIMGAP", 0.625)
       # 设定文字相对尺寸线的位置。

6.5.4. 标注文字对齐

acad.ActiveDocument.SetVariable("DIMTIH", 0)
       # 控制所有标注类型(坐标标注除外)的标注文字在尺寸界线内的位置;
       # 0 表示将文字与尺寸线对齐;
       # 1 表示水平绘制文字。
acad.ActiveDocument.SetVariable("DIMTOH", 0)
       # 控制标注文字在尺寸界线外的位置。

6.5.5. 标注文字替代

  修改实际尺寸数值为用户自定义数值。例如:标注的实际长度为20,用户自定义的数值为171,具体代码如下:

XLine1Point = APoint(5, 25)
XLine2Point = APoint(25, 35)
DimLineLocation = APoint(10, 20)
RotationAngle = math.radians(0)
dimRotObj = acad.model.AddDimRotated(XLine1Point, XLine2Point, DimLineLocation, RotationAngle)

dimRotObj.TextOverride = 171 # 指定文字替代为171,即171替代20。

dimRotObj.TextOverride = ""  # 恢复标注为实际尺寸数值20

dimRotObj.TextOverride = "<> mm" # 恢复标注为实际尺寸数值并加个单位

dimRotObj.Update()

在这里插入图片描述

6.6. 设置主单位


6.6.1. 线性标注精度

acad.ActiveDocument.SetVariable("DIMDEC", 2)  # 设定标注文字中的小数位数;2 表示显示小数点后三位;

6.6.2. 小数分隔符

acad.ActiveDocument.SetVariable("DIMDSEP", ".")  # "."表示小数分隔符,也可设置为","。
acad.ActiveDocument.SetVariable("DIMADEC", -1)  # 设置角度标注精度与线性标注精度相同

6.7. 设置永久标注样式

## (7)、设置永久标注样式

### ①、添加三个标注样式
dimstyleobj_1 = DimStyleObj = acad.ActiveDocument.DimStyles.Add("newStyle1")
dimstyleobj_2 = DimStyleObj = acad.ActiveDocument.DimStyles.Add("newStyle2")
dimstyleobj_3 = DimStyleObj = acad.ActiveDocument.DimStyles.Add("newStyle3")

### ②、为三个标注样式分别设置具体样式
dimstyleobj_1.CopyFrom(acad.ActiveDocument.ModelSpace(0))
    # (方法一)
    # 与图形空间中已存在的标注图元样式一致;
    # 0为模型空间中的第一个图元,此为示例;
    # 具体操作时0应替换为已知标注图元在图纸空间中的索引号。

dimstyleobj_2.CopyFrom(acad.ActiveDocument.DimStyles.Item("newStyle1"))
    # (方法二)
    # 与标注样式newStyle1一致

acad.ActiveDocument.SetVariable("DIMCLRD", 3)                # 设置尺寸线的颜色为绿色
acad.ActiveDocument.SetVariable("DIMBLK", "_ARCHTICK")      # "_ARCHTICK"表示建筑标记
acad.ActiveDocument.SetVariable("DIMASZ", 2)                 # 尺寸线箭头大小
dimstyleobj_3.CopyFrom(acad.ActiveDocument)
    # (方法三)
    # 与当前文件的设置保持一致

acad.ActiveDocument.ActiveDimStyle = acad.ActiveDocument.DimStyles.Item("newStyle3")

# 以下画出的标注即采用标注样式newStyle3
ExtLine1Point = APoint(5, 25)
ExtLine2Point = APoint(25, 35)
TextPosition = APoint(-5, 25)
dimAliObj = acad.model.AddDimAligned(ExtLine1Point, ExtLine2Point, TextPosition)
print(dimAliObj.styleName)

# 设置永久标注样式的思路:
# 若采用方法一,则需要提前绘制好相应的标注图元,
# 如:尺寸线、尺寸界线、箭头尺寸等,以方便引用,而后删除。
# 若采用方法三,则需要利用SetVariable方法设置好相应的系统变量,而后引用。
# 方法二为直接复制已有标注样式。

# 方法四(采用command方式)
# DimStyle1 = acad.ActiveDocument.DimStyles.Add("DimStyle1")      # 创建标注式样
# acad.ActiveDocument.ActiveDimStyle = DimStyle1
# acad.ActiveDocument.SetVariable("DIMCLRD", 1)
# acad.ActiveDocument.SetVariable("DIMCLRE", 1)
# acad.ActiveDocument.SetVariable("DIMEXE", 3)
# acad.ActiveDocument.SetVariable("DIMEXO", 1.75)
# acad.ActiveDocument.SetVariable("DIMFXLON", 1)
# acad.ActiveDocument.SetVariable("DIMFXL", 3)
# acad.ActiveDocument.SetVariable("DIMBLK", "_OBLIQUE")
# acad.ActiveDocument.SetVariable("DIMBLK1", "_OBLIQUE")
# acad.ActiveDocument.SetVariable("DIMBLK2", "_OBLIQUE")
# acad.ActiveDocument.SetVariable("DIMLDRBLK", "_OBLIQUE")
# acad.ActiveDocument.SetVariable("DIMASZ", 5)
# acad.ActiveDocument.SetVariable("DIMCEN", 3)
# acad.ActiveDocument.SetVariable("DIMARCSYM", 1)
# acad.ActiveDocument.SetVariable("DIMCLRT", 1)
# acad.ActiveDocument.SetVariable("DIMTXT", 4)
# acad.ActiveDocument.SetVariable("DIMTAD", 1)
# acad.ActiveDocument.SetVariable("DIMTOH", 0)
# acad.ActiveDocument.SetVariable("DIMTMOVE", 2)
# acad.ActiveDocument.SetVariable("DIMDEC", 1)
# print(chr(13))
# acad.ActiveDocument.SendCommand("-dimstyle" + chr(13) + "S" + chr(13) + "DimStyle1" + chr(13) + "Y" + chr(13))
# print("-dimstyle" + chr(13) + "S" + chr(13) + "DimStyle1" + chr(13) + "Y" + chr(13))


## 其他

# dimAliObj.StyleName = "ISO-25"
# dimAliObj.Update()

七、多重引线


7.1. 创建多重引线

ArrowPnt = APoint(0, 0)
BaselinePnt = APoint(10, 10)
PntsArray = np.array([ArrowPnt, BaselinePnt])
PntsArray = PntsArray.reshape(1, PntsArray.shape[0] * PntsArray.shape[1])[0]
MLeaderObj = acad.model.AddMLeader(PntsArray, 0)
          # ArrowPnt 箭头位置;
          # BaselinePnt 基线位置 ;
          # 1 表示多重引线的索引号,为正整数。

7.2. 设置箭头大小

MLeaderObj.ArrowheadSize = 2  # 指箭头高度;此项将覆盖系统变量DIMASZ的值。

7.3. 设置基线长度

MLeaderObj.DoglegLength = 8

7.4. 设置基线间隙

MLeaderObj.LandingGap = 3  # 基线端点到文字起点的距离

7.5. 指定文字样式

MLeaderObj.TextStyleName = "HIT_TxtStyle"

7.6. 指定文字内容

MLeaderObj.TextString = "HIT"

八、尾声


  以上,便是一些关于 AutoCAD 注释 的基本代码,因篇幅有限,某些非关键功能未做详细介绍,如有疑问,欢迎邮件来询。

  本文部分功能的实现离不开广大博友的大力帮助,有些功能看似简单,但第一次实现出来却是相当不容易的。

  鉴于,相关示例代码相对较少,特写本文,一方面是为自己的阶段性学习做一个总结,另一方面更是为有需要的人提供多一点参考。

  如果您已实现一些本文未提及的功能,还请在评论区呈现,以便为后续学习者提供更多的帮助。

  胸藏文墨怀若谷,腹有诗书气自华,希望各位都能在知识的pāo子里快乐徜徉。

  因个人水平有限,文中难免有所疏漏,还请各位大神不吝批评指正。

  最后,祝各位攻城狮们,珍爱生命,保护发际线!

  本文最早发表于 2018-12-13 18:20:21,作为博客 Python 二次开发 AutoCAD 简介 的一部分。

  为了清晰直观,于 2019-07-26 16:21:52 单独创建本文。

  本文部分内容,源于网络!

  欢迎大家点赞、评论及转载,转载请注明出处!

  为我打call,不如为我打款!

  打赏可备注邮箱,本人将赠送本系列博客的全部 Python 源代码。



在这里插入图片描述




评论 89
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hulunbuir

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值