创建和编辑AutoCAD对象(VBA&python)

创建python与CAD的连接

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import win32com.client
import pythoncom

acad = win32com.client.Dispatch("AutoCAD.Application.19")  
doc = acad.ActiveDocument
doc.Utility.Prompt("Hello! Autocad from pywin32.")
mp = doc.ModelSpace
print(doc.Name)

def vtPnt(x, y, z=0):
    """坐标点转化为浮点数"""
    return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_R8, (x, y, z))

def vtObj(obj):
    """转化为对象数组"""
    return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_DISPATCH, obj)

def vtFloat(list):
    """列表转化为浮点数"""
    return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_R8, list)

def vtInt(list):
    """列表转化为整数"""
    return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_I2, list)

def vtVariant(list):
    """列表转化为变体"""
    return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_VARIANT, list)

创建线相关对象

  1. 通过两个点创建直线;AddLine
  2. 由顶点列表创建优化多段线;AddLightweightPolyline
  3. 通过点数组创建多线;AddMLine
  4. 从顶点列表创建多段线;AddPolyline
  5. 创建通过两个唯一点的射线;AddRay
  6. 创建通过两个指定点构造线(无限长线);AddXline

1. 通过两个点创建直线

1
RetVal = object.AddLine(StartPoint, EndPoint)

Object

ModelSpace 集合, PaperSpace 集合, Block使用该方法的对象。

StartPoint

Variant[变体] (三元素双精度数组); 仅用于输入指定直线起点的三维WCS坐标。

EndPoint

Variant[变体] (三元素双精度数组); 仅用于输入指定直线终点的三维WCS坐标。

RetVal

Line 对象新创建的 Line 对象。

VBA示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Sub Example_AddLine()
    ' 该示例在模型空间中添加直线。
   
    Dim lineObj As AcadLine
    Dim startPoint(0 To 2) As Double
    Dim endPoint(0 To 2) As Double
   
    ' 定义直线的起点和终点
    startPoint(0) = 1#: startPoint(1) = 1#: startPoint(2) = 0#
    endPoint(0) = 5#: endPoint(1) = 5#: endPoint(2) = 0#
   
    ' 在模型空间中创建直线
    Set lineObj = ThisDrawing.ModelSpace.AddLine(startPoint, endPoint)
    ZoomAll
   
End Sub

python示例:

1
2
3
startpoint = vtPnt(100, 800)
stoppoint = vtPnt(100, 100)
pointobj = mp.AddLine(startpoint, stoppoint)

2.由顶点列表创建优化多段线

1
RetVal = object.AddLightweightPolyline(VerticesList)

Object

ModelSpace 集合, PaperSpace 集合, Block使用该方法的对象。

VerticesList

Variant[变体] (双精度数组)指定多段线顶点的二维 OCS 坐标数组。至少需要两点(四个元素)以构成优化多段线。数组大小必须为2的倍数。

RetVal

LightweightPolyline 对象新创建的 LightweightPolyline 对象。

说明

顶点是生成多段线的线段端点。要添加弧段,首先创建全部为直线段的多段线,然后为个别需要变为弧段的线段添加凸度。要为线段添加凸度值,可使用 SetBulge 方法。
多段线的标高将被设置为布局的当前标高。使用 ElevationModelspace 或 ElevationPaperspace 属性可确定多段线的标高。

VBA示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Sub Example_AddLightWeightPolyline()
    ' 该示例在模型空间中创建优化多段线。
   
    Dim plineObj As AcadLWPolyline
    Dim points(0 To 9) As Double
   
    ' 定义二维多段线顶点
    points(0) = 1: points(1) = 1
    points(2) = 1: points(3) = 2
    points(4) = 2: points(5) = 2
    points(6) = 3: points(7) = 2
    points(8) = 4: points(9) = 4
       
    ' 在模型空间中创建优化多段线对象。
    Set plineObj = ThisDrawing.ModelSpace.AddLightWeightPolyline(points)
    ZoomAll
   
End Sub

python示例

1
2
3
4
list = [100, 100, 100, 200, 200, 200, 300, 200, 400, 400]
# 由于方法规定的是Double的数据类型,在python中并没有改数据类型,所以需要对其进行数据转换
points = vtFloat(list)
pointobj = mp.AddLightweightPolyline(points)

3.通过点数组创建多线

1
RetVal = object.AddMLine(VertexList)

Object

ModelSpace 集合, PaperSpace 集合, Block使用该方法的对象。

VertexList

Variant[变体] (双精度数组); 仅用于输入指定多线顶点的三维WCS坐标数组。

RetVal

MLine 对象新创建的 MLine 对象。

VBA示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Sub Example_AddMLine()
   ' 该示例在模型空间中添加多线。

    Dim mLineObj As AcadMLine
    Dim vertexList(0 To 17) As Double
   
    ' 定义新对象的数据
    vertexList(0) = 4: vertexList(1) = 7: vertexList(2) = 0
    vertexList(3) = 5: vertexList(4) = 7: vertexList(5) = 0
    vertexList(6) = 6: vertexList(7) = 7: vertexList(8) = 0
    vertexList(9) = 4: vertexList(10) = 6: vertexList(11) = 0
    vertexList(12) = 5: vertexList(13) = 6: vertexList(14) = 0
    vertexList(15) = 6: vertexList(16) = 6: vertexList(17) = 6

    ' 在模型空间中创建多线
    Set mLineObj = ThisDrawing.ModelSpace.AddMLine(vertexList)

    ThisDrawing.Application.ZoomAll
   
    MsgBox "已经在当前图形中添加了新的多线对象。"
End Sub

python示例

1
2
3
4
list = [100, 100, 100, 200, 200, 200, 300, 200, 400]
# 由于方法规定的是Double的数据类型,在python中并没有改数据类型,所以需要对其进行数据转换
points = vtFloat(list)
pointobj = mp.AddMLine(points)

4.从顶点列表创建多段线

1
RetVal = object.AddPolyline(VerticesList)

Object

ModelSpace 集合, PaperSpace 集合, Block使用该方法的对象。
VerticesList

Variant[变体] (双精度数组); 仅用于输入
用于创建多段线顶点的OCS坐标数组。每一顶点用三个元素表示,前两个元素为OCS的X和Y坐标;而第三个元素为忽略。至少需要两点(六个元素)来构成一个多段线对象。该数组的大小必须为3的倍数。

RetVal

Polyline 对象新创建的 Polyline 对象。

说明

要创建包含圆弧的多段线,首先创建直线段的多段线,然后对特定顶点使用 SetBulge 方法设置凸度。
该方法的存在只用于与旧版本兼容。使用 AddLightweightPolyline 方法可创建优化格式的多段线以节省内存和磁盘空间。
坐标可使用 TranslateCoordinates 方法由OCS坐标与其它坐标系统相互转换。

VBA示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Sub Example_AddPolyline()
    ' 该示例在模型空间中创建多段线。
   
    Dim plineObj As AcadPolyline
    Dim points(0 To 14) As Double
   
    ' 定义二维多段线顶点
    points(0) = 1: points(1) = 1: points(2) = 0
    points(3) = 1: points(4) = 2: points(5) = 0
    points(6) = 2: points(7) = 2: points(8) = 0
    points(9) = 3: points(10) = 2: points(11) = 0
    points(12) = 4: points(13) = 4: points(14) = 0
       
    ' 在模型空间中创建多段线
    Set plineObj = ThisDrawing.ModelSpace.AddPolyline(points)
    ZoomAll
   
End Sub

python示例

1
2
3
4
list = [100, 100, 0, 200, 200, 0]
# 由于方法规定的是Double的数据类型,在python中并没有改数据类型,所以需要对其进行数据转换
points = vtFloat(list)
pointobj = mp.AddPolyline(points)

5.创建通过两个唯一点的射线

1
RetVal = object.AddRay(Point1, Point2)

Object

ModelSpace 集合, PaperSpace 集合, Block使用该方法的对象。

Point1

Variant[变体] (三元素双精度数组); 仅用于输入指定射线有限起点的三维WCS坐标。

Point2

Variant[变体] (三元素双精度数组); 仅用于输入指定射线经过的点的三维WCS坐标。 射线从 Point1 开始,通过 Point2 到无限。

RetVal

Ray 对象新创建的 Ray 对象。

VBA示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Sub Example_AddRay()
    ' 该示例在模型空间中创建射线。
   
    Dim rayObj As AcadRay
    Dim basePoint(0 To 2) As Double
    Dim SecondPoint(0 To 2) As Double
   
    ' 定义射线
    basePoint(0) = 3#: basePoint(1) = 3#: basePoint(2) = 0#
    SecondPoint(0) = 4#: SecondPoint(1) = 4#: SecondPoint(2) = 0#
   
    ' 在模型空间中创建射线对象
    Set rayObj = ThisDrawing.ModelSpace.AddRay(basePoint, SecondPoint)
    ZoomAll
   
End Sub

python示例

1
2
3
4
point1 = vtPnt(5, 5, 0)
point2 = vtPnt(10, 10, 0)

RetVal = mp.AddRay(point1, point2)

6.创建通过两个指定点构造线(无限长线)

1
RetVal = object.AddXline(Point1, Point2)

Object

ModelSpace 集合, PaperSpace 集合, Block使用该方法的对象。

Point1

Variant[变体] (三元素双精度数组); 仅用于输入

Point2

Variant[变体] (三元素双精度数组); 仅用于输入

RetVal

XLine 对象
新创建的 XLine
对象。

VBA示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Sub Example_AddXLine()
    ' 该示例在模型空间中创建构造线。
   
    Dim xlineObj As AcadXline
    Dim basePoint(0 To 2) As Double
    Dim directionVec(0 To 2) As Double
   
    ' 定义构造线
    basePoint(0) = 2#: basePoint(1) = 2#: basePoint(2) = 0#
    directionVec(0) = 1#: directionVec(1) = 1#: directionVec(2) = 0#
   
    ' 在模型空间中创建构造线
    Set xlineObj = ThisDrawing.ModelSpace.AddXline(basePoint, directionVec)
    ZoomAll
   
End Sub

python示例

1
2
3
4
point1 = vtPnt(5, 5, 0)
point2 = vtPnt(10, 10, 0)

RetVal = mp.AddXline(point1, point2)

二维平面图形绘制

  1. 画圆弧;AddArc
  2. 绘制圆;AddCircle
  3. 绘制椭圆;AddEllipse

1.画圆弧

1
RetVal = object.AddArc(Center, Radius, StartAngle, EndAngle)

Object
ModelSpace 集合, PaperSpace 集合, Block使用该方法的对象。
Center

Variant[变体] (三元素双精度数组); 仅用于输入指定圆弧圆心的三维WCS坐标。

Radius
Double[双精度]; 仅用于输入圆弧的半径。

StartAngle, EndAngle

**Double[双精度]; 仅用于输入定义圆弧的起始角和终止角(以弧度表示)。当起始角大于终止角时定义的是逆时针的圆弧。 **

RetVal

Arc 对象新创建的 Arc 对象。

VBA示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 Sub Example_AddArc()
    ' 该示例在模型空间中创建圆弧。
   
    Dim arcObj As AcadArc
    Dim centerPoint(0 To 2) As Double
    Dim radius As Double
    Dim startAngleInDegree As Double
    Dim endAngleInDegree As Double
   
    ' 定义圆
    centerPoint(0) = 0#: centerPoint(1) = 0#: centerPoint(2) = 0#
    radius = 5#
    startAngleInDegree = 10#
    endAngleInDegree = 230#
   
    ' 转换度数表示的角度为弧度表示的角度
    Dim startAngleInRadian As Double
    Dim endAngleInRadian As Double
    startAngleInRadian = startAngleInDegree * 3.141592 / 180#
    endAngleInRadian = endAngleInDegree * 3.141592 / 180#
   
    ' 在模型空间中创建圆弧对象
    Set arcObj = ThisDrawing.ModelSpace.AddArc(centerPoint, radius, startAngleInRadian, endAngleInRadian)
    ZoomAll
End Sub

python示例

1
2
3
4
5
6
Center = vtPnt(100, 100, 0)
Radius = 20.0
StartAngle = 0.0
EndAngle = math.pi/2

RetVal = mp.AddArc(Center, Radius, StartAngle, EndAngle)

2.绘制圆

1
RetVal = object.AddCircle(Center, Radius)

Object

ModelSpace 集合,
PaperSpace 集合, Block
使用该方法的对象。

Center

Variant[变体] (三元素双精度数组); 仅用于输入
指定圆心的三维WCS坐标。

Radius

Double[双精度]; 仅用于输入
圆的半径。必须为正数。

RetVal

Circle 对象
新创建的
Circle 对象。

==说明 ==

该圆创建于WCS的XY面上。

VBA示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Sub Example_AddCircle()
    ' 该示例在模型空间中创建圆。
   
    Dim circleObj As AcadCircle
    Dim centerPoint(0 To 2) As Double
    Dim radius As Double
   
    ' 定义圆
    centerPoint(0) = 0#: centerPoint(1) = 0#: centerPoint(2) = 0#
    radius = 5#
   
    ' 在模型空间中创建圆对象
    Set circleObj = ThisDrawing.ModelSpace.AddCircle(centerPoint, radius)
    ZoomAll
   
End Sub

python示例

1
2
3
4
Center = vtPnt(100, 100, 0)
Radius = 20.0

RetVal = mp.AddCircle(Center, Radius)

3.绘制椭圆

1
RetVal = object.AddEllipse(Center, MajorAxis, RadiusRatio)

Object

ModelSpace 集合,
PaperSpace 集合, Block
使用该方法的对象。

Center

Variant[变体] (三元素双精度数组); 仅用于输入
指定椭圆中心点的三维WCS坐标。

MajorAxis

Variant[变体] (双精度); 仅用于输入
定义椭圆长轴长度的正值。

RadiusRatio

Double[双精度]; 仅用于输入
定义椭圆长轴与短轴比率的正值。半径比为1.0时定义的是圆。

半径比 = 0.25
在这里插入图片描述
半径比 = 0.75
在这里插入图片描述
RetVal

Ellipse 对象新创建的 Ellipse 对象。

==说明 ==
椭圆可以是闭合的或开放的(即椭圆弧),它创建于当前WCS的XY面上。
该对象表示一个真正的椭圆,而不是多段线拟合的椭圆。

在这里插入图片描述
VBA示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Sub Example_AddEllipse()
    ' 该示例在模型空间中创建椭圆。
   
    Dim ellObj As AcadEllipse
    Dim majAxis(0 To 2) As Double
    Dim center(0 To 2) As Double
    Dim radRatio As Double
   
    ' 在模型空间中创建椭圆
    center(0) = 5#: center(1) = 5#: center(2) = 0#
    majAxis(0) = 10: majAxis(1) = 20#: majAxis(2) = 0#
    radRatio = 0.3
    Set ellObj = ThisDrawing.ModelSpace.AddEllipse(center, majAxis, radRatio)
    ZoomAll
   
End Sub

python示例

1
2
3
4
5
Center = vtPnt(5, 5, 0)
MajorAxis = vtPnt(10, 20, 0)
RadiusRatio = 0.75

RetVal = mp.AddEllipse(Center, MajorAxis, RadiusRatio)

填充

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[ptnName, ptnType, bAss] = ["ANSI31", 0, True]

pnts = [100, -50, 0, 100, 50, 0, -100, 50, 0, -100, -50, 0]
pnts = vtFloat(pnts)

plineObj = mp.AddPolyLine(pnts)
plineObj.Closed = True

outerLoop = []
outerLoop.append(plineObj)
outerLoop = vtObj(outerLoop)
hatchObj = mp.AddHatch(ptnType, ptnName, bAss)
hatchObj.AppendOuterLoop(outerLoop)
hatchObj.Evaluate()  # 进行填充计算,使图案吻合于边界。

标注相关操作

  1. 使用三点创建角度标注;AddDim3PointAngular
  2. 创建对齐标注对象;AddDimAligned
  3. 创建弧、两条线或圆的角度标注;AddDimAngular
  4. 创建圆弧的弧长标注;AddDimArc
  5. 给定直径上的两点和引线长度创建圆或弧的直径标注;AddDimDiametric
  6. 给定定义点和引线终点创建坐标标注;AddDimOrdinate
  7. 在给定位置创建选定对象的半径标注;AddDimRadial
  8. 创建圆弧、圆或多段线弧段的折角半径标注;AddDimRadialLarge
  9. 创建旋转的线性标注;AddDimRotated

1. 使用三点创建角度标注

1
RetVal = object.AddDim3PointAngular(AngleVertex, FirstEndPoint, SecondEndPoint, TextPoint)

Object

ModelSpace 集合,
PaperSpace 集合, Block
使用该方法的对象。

AngleVertex

Variant[变体] (三元素双精度数组); 仅用于输入
指定要测量的角度顶点的三维WCS坐标。

FirstEndPoint

Variant[变体] (三元素双精度数组); 仅用于输入
指定通过第一条尺寸界线的点的三维WCS坐标。

SecondEndPoint

Variant[变体] (三元素双精度数组); 仅用于输入
指定通过第二条尺寸界线的点的三维WCS坐标。

TextPoint

Variant[变体] (三元素双精度数组); 仅用于输入
指定标注文字显示点的三维WCS坐标。

RetVal

Dim3PointAngular 对象
新创建的角度标注。

VBA示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Sub Example_AddDim3PointAngular()
    ' 该示例在模型空间中创建 Dim3PointAngular 对象。
   
    Dim DimPointAngularObj As AcadDim3PointAngular
    Dim AngleVertex(0 To 2) As Double
    Dim FirstPoint(0 To 2) As Double, SecondPoint(0 To 2) As Double
    Dim TextPoint(0 To 2) As Double
   
    ' 定义新的 Dim3PointAngular 对象
    AngleVertex(0) = 0: AngleVertex(1) = 0: AngleVertex(2) = 0
    FirstPoint(0) = 2: FirstPoint(1) = 2: FirstPoint(2) = 0
    SecondPoint(0) = 2: SecondPoint(1) = 4: SecondPoint(2) = 0
    TextPoint(0) = 6: TextPoint(1) = 6: TextPoint(2) = 0

    ' 在模型空间中创建新的 Dim3PointAngular 对象
    Set DimPointAngularObj = ThisDrawing.ModelSpace.AddDim3PointAngular(AngleVertex, FirstPoint, SecondPoint, TextPoint)
    ThisDrawing.Application.ZoomAll
   
    MsgBox "Dim3PointAngular 对象已经创建完成。"
   
End Sub

python示例

1
2
3
4
5
6
AngleVertex = vtPnt(0, 0, 0)
FirstEndPoint = vtPnt(10, 0, 0)
SecondEndPoint = vtPnt(0, 10, 0)
TextPoint = vtPnt(5, 5, 0)

RetVal = mp.AddDim3PointAngular(AngleVertex, FirstEndPoint, SecondEndPoint, TextPoint)

2. 创建对齐标注对象

1
RetVal = object.AddDimAligned(ExtLine1Point, ExtLine2Point, TextPosition)

Object

ModelSpace 集合,
PaperSpace 集合, Block
使用该方法的对象。

ExtLine1Point

Variant[变体] (三元素双精度数组); 仅用于输入
指定尺寸界线第一端点的三维WCS坐标。

ExtLine2Point

Variant[变体] (三元素双精度数组); 仅用于输入
指定尺寸界线第二端点的三维WCS坐标。

TextPosition

Variant[变体] (三元素双精度数组); 仅用于输入
指定文字位置的三维WCS坐标。

RetVal

DimAligned
对象
新创建的对齐标注。

说明

在对齐标注中,尺寸线与尺寸界线原点相平行。尺寸界线原点使用 ExtLine1Point 和 ExtLine2Point 属性指定。
在这里插入图片描述
VBA示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Sub Example_AddDimAligned()
    ' 该示例在模型空间中创建对齐标注。

    Dim dimObj As AcadDimAligned
    Dim point1(0 To 2) As Double
    Dim point2(0 To 2) As Double
    Dim location(0 To 2) As Double
   
    ' 定义标注
    point1(0) = 5#: point1(1) = 5#: point1(2) = 0#
    point2(0) = 10#: point2(1) = 5#: point2(2) = 0#
    location(0) = 5#: location(1) = 7#: location(2) = 0#
   
    ' 在模型空间中创建对齐标注对象
    Set dimObj = ThisDrawing.ModelSpace.AddDimAligned(point1, point2, location)
    ZoomAll
End Sub

python示例

1
2
3
4
5
ExtLine1Point = vtPnt(10, 0, 0)
ExtLine2Point = vtPnt(0, 10, 0)
TextPosition = vtPnt(5, 5, 0)

RetVal = mp.AddDimAligned(ExtLine1Point, ExtLine2Point, TextPosition)

3. 创建弧、两条线或圆的角度标注

1
RetVal = object.AddDimAngular(AngleVertex, FirstEndPoint, SecondEndPoint, TextPoint)

Object

ModelSpace 集合,
PaperSpace 集合, Block
使用该方法的对象。

AngleVertex

Variant[变体] (三元素双精度数组);
仅用于输入
指定圆或圆弧的圆心、或两尺寸界线间的共有顶点的三维WCS坐标。

FirstEndPoint

Variant[变体] (三元素双精度数组); 仅用于输入
指定通过第一尺寸界线的点的三维WCS坐标。

SecondEndPoint

Variant[变体] (三元素双精度数组); 仅用于输入
指定通过第二尺寸界线的点的三维WCS坐标。

TextPoint

Variant[变体] (三元素双精度数组); 仅用于输入
指定标注文字显示点的三维WCS坐标。

RetVal

DimAngular
对象
新创建的角度标注。

说明
在这里插入图片描述AngleVertex 是标注的圆或圆弧的圆心、或两尺寸界线间的共有顶点。FirstEndPoint
和 SecondEndPoint 是通过尺寸界线的点。
AngleVertex 可以和某一个角度端点相同。如果需要尺寸界线,它们会被自动加入。提供的端点会被当作尺寸界线的原点。

VBA示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Sub Example_AddDimAngular()
    ' 该示例在模型空间中创建角度标注。
   
    Dim dimObj As AcadDimAngular
    Dim angVert(0 To 2) As Double
    Dim FirstPoint(0 To 2) As Double
    Dim SecondPoint(0 To 2) As Double
    Dim TextPoint(0 To 2) As Double
   
    ' 定义标注
    angVert(0) = 0#: angVert(1) = 5#: angVert(2) = 0#
    FirstPoint(0) = 1#: FirstPoint(1) = 7#: FirstPoint(2) = 0#
    SecondPoint(0) = 1#: SecondPoint(1) = 3#: SecondPoint(2) = 0#
    TextPoint(0) = 3#: TextPoint(1) = 5#: TextPoint(2) = 0#
   
    ' 在模型空间中创建角度标注
    Set dimObj = ThisDrawing.ModelSpace.AddDimAngular(angVert, FirstPoint, SecondPoint, TextPoint)
    ZoomAll
   
End Sub

python示例

1
2
3
4
5
6
AngleVertex = vtPnt(0, 0, 0)
FirstEndPoint = vtPnt(10, 0, 0)
SecondEndPoint = vtPnt(5, 7, 0)
TextPoint = vtPnt(5, 5, 0)

RetVal = mp.AddDimAngular(AngleVertex, FirstEndPoint, SecondEndPoint, TextPoint)

4. 创建圆弧的弧长标注

1
RetVal = object.AddDimArc(ArcCenter, FirstEndPoint, SecondEndPoint, ArcPoint)

Object

ModelSpace 集合,
PaperSpace 集合, Block
使用该方法的对象。

ArcCenter

Variant[变体] (三元素双精度数组); 仅用于输入
指定圆弧圆心的三维 WCS 坐标。

FirstEndPoint

Variant[变体] (三元素双精度数组); 仅用于输入
指定第一条尺寸界线通过的点的三维 WCS 坐标。

SecondEndPoint

Variant[变体] (三元素双精度数组); 仅用于输入
指定第二条尺寸界线通过的点的三维 WCS 坐标。

ArcPoint

Variant[变体] (三元素双精度数组); 仅用于输入
指定圆弧上一个点的三维 WCS 坐标。

RetVal

DimArcLength
对象
新创建的弧长标注。

说明
在这里插入图片描述
ArcCenter 是要标注的圆弧的圆心。FirstEndPoint 和 SecondEndPoint 是通过两条尺寸界线的点。
注意 要访问该方法,可使用 IAcadBlock3、IAcadModelSpace3 或
IAcadPaperSpace3 接口。

VBA示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Sub Example_AddDimArc()
    Dim PI As Double: PI = 3.141592
    Dim oMS As IAcadModelSpace3
    Set oMS = ThisDrawing.ModelSpace

    Dim ptCenter(2) As Double
    Dim oA As AcadArc
    Set oA = oMS.AddArc(ptCenter, 10, PI / 3, PI * 3 / 4)
   
    Dim ptArcPoint(2) As Double
    ptArcPoint(0) = 0: ptArcPoint(1) = 15
   
    Dim oAcadDimArcLength As AcadDimArcLength
    Set oAcadDimArcLength = oMS.AddDimArc(oA.Center, oA.startPoint, oA.endPoint, ptArcPoint)
   
    Update
    ZoomExtents
End Sub

python示例

1
2
3
4
5
6
AngleVertex = vtPnt(0, 0, 0)
FirstEndPoint = vtPnt(10, 0, 0)
SecondEndPoint = vtPnt(0, 10, 0)
ArcPoint = vtPnt(5, 5, 0)

RetVal = mp.AddDimArc(AngleVertex, FirstEndPoint, SecondEndPoint, ArcPoint)

5. 给定直径上的两点和引线长度创建圆或弧的直径标注

1
RetVal = object.AddDimDiametric(ChordPoint, FarChordPoint, LeaderLength)

Object

ModelSpace 集合,
PaperSpace 集合, Block
使用该方法的对象。

ChordPoint

Variant[变体] (三元素双精度数组); 仅用于输入
指定圆或圆弧上第一个直径点的三维WCS坐标。

FarChordPoint

Variant[变体] (三元素双精度数组); 仅用于输入
指定圆或圆弧上第二个直径点的三维WCS坐标。

LeaderLength

Double[双精度]; 仅用于输入
正值代表从 ChordPoint 到注解文字或折线处的长度。

RetVal

DimDiametric
对象
新创建的直径标注对象。

说明

创建的直径标注的类型由圆或圆弧的大小、引线长度和 DIMUPT、DIMTOFL、DIMFIT、DIMTIH、DIMTOH、DIMJUST 和 DIMTAD 系统变量决定。
对于水平标注文字,如果尺寸线的角度大于水平方向15度,而且文字在圆或圆弧之外,AutoCAD 将画出钩线,也称为导出线或折线。该钩线为一个箭头长度,而且另一头放置标注文字,如下图的前两个图例。
在这里插入图片描述
该方法使用 LeaderLength 参数作为从 ChordPoint
到产生注解文字时所用的水平折线的点(或如果不需要折线时线的终止位置点)的距离。
LeaderLength 设置只会在创建标注时使用(即使标注设置为使用默认文字位置值也是如此)。在完成了标注后,更改
LeaderLength 值将不会影响标注的显示,但新的设置将会保存并出现在 DXF、 LISP和 ADSRX中。

VBA示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Sub Example_AddDimDiametric()
    ' 该示例在模型空间中创建直径标注。
   
    Dim dimObj As AcadDimDiametric
    Dim chordPoint(0 To 2) As Double
    Dim farChordPoint(0 To 2) As Double
    Dim leaderLength As Double
   
    ' 定义标注
    chordPoint(0) = 5#: chordPoint(1) = 3#: chordPoint(2) = 0#
    farChordPoint(0) = 5#: farChordPoint(1) = 5#: farChordPoint(2) = 0#
    leaderLength = 1#
   
    ' 在模型空间中创建直径标注
    Set dimObj = ThisDrawing.ModelSpace.AddDimDiametric(chordPoint, farChordPoint, leaderLength)
    ZoomAll
   
End Sub

python示例

1
2
3
4
5
ChordPoint = vtPnt(0, 0, 0)
FarChordPoint = vtPnt(10, 0, 0)
LeaderLength = 5.0

RetVal = mp.AddDimDiametric(ChordPoint, FarChordPoint, LeaderLength)

6. 给定定义点和引线终点创建坐标标注

1
RetVal = object.AddDimOrdinate(DefinitionPoint, LeaderEndPoint, UseXAxis)

Object

ModelSpace 命令,
PaperSpace 命令, Block
使用该方法的对象。

DefinitionPoint

Variant[变体] (三元素双精度数组); 仅用于输入
指定标注点的三维WCS坐标。

LeaderEndPoint

Variant[变体] (三元素双精度数组);
仅用于输入
指定引线终点的三维WCS坐标。它将是标注文字显示的位置。

UseXAxis

Integer[整数]; 仅用于输入
TRUE: 创建显示 X 轴值的坐标标注。
FALSE: 创建显示 Y 轴值的坐标标注。

RetVal

DimOrdinate
对象
新创建的坐标标注对象。
说明
坐标标注是通过简单引线来显示 X 或 Y 坐标的对象。该坐标的绝对值是依照坐标标注的主要标准来使用的。
在这里插入图片描述
坐标标注测量与圆相切的点的绝对X位置

VBA示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Sub Example_AddDimOrdinate()
    ' 该示例在模型空间中创建坐标标注。
   
    Dim dimObj As AcadDimOrdinate
    Dim definingPoint(0 To 2) As Double
    Dim leaderEndPoint(0 To 2) As Double
    Dim useXAxis As Long
   
    ' 定义标注
    definingPoint(0) = 5#: definingPoint(1) = 5#: definingPoint(2) = 0#
    leaderEndPoint(0) = 10#: leaderEndPoint(1) = 5#: leaderEndPoint(2) = 0#
    useXAxis = 5#
   
    ' 在模型空间中创建坐标标注
    Set dimObj = ThisDrawing.ModelSpace.AddDimOrdinate(definingPoint, leaderEndPoint, useXAxis)
    ZoomAll
   
End Sub

python示例

1
2
3
4
5
DefinitionPoint = vtPnt(0, 0, 0)
LeaderEndPoint = vtPnt(10, 0, 0)
# UseXAxis = "TRUE"

RetVal = mp.AddDimOrdinate(DefinitionPoint, LeaderEndPoint, True)

7. 在给定位置创建选定对象的半径标注

1
RetVal = object.AddDimRadial(Center, ChordPoint, LeaderLength)

Object

ModelSpace 集合,
PaperSpace 集合, Block
使用该方法的对象。

Center
Variant[变体] (三元素双精度数组); 仅用于输入
指定圆或圆弧的圆心的三维WCS坐标。

ChordPoint

Variant[变体] (三元素双精度数组); 仅用于输入
指定用于附着引线的圆或圆弧上的点的三维WCS坐标。

LeaderLength

Double[双精度]; 仅用于输入
表示从 ChordPoint 到注解文字或折线的长度的正值。

RetVal
DimRadial
对象
新创建的半径标注对象。

说明

创建的半径标注的类型由圆或圆弧的大小、TextPosition
属性和 DIMUPT、DIMTOFL、DIMFIT、DIMTIH、DIMTOH、DIMJUST 和 DIMTAD 标注系统变量的值决定。系统变量可使用 GetVariable 和 SetVariable 方法来查询或设置。
对于水平标注文字,如果尺寸线的角度大于水平方向15度,而且文字在圆或圆弧之外,AutoCAD 将画出钩线,也称为导出线或折线。该钩线为一个箭头长度,而且另一头放置标注文字,如下图的前两个图例。
在这里插入图片描述
该方法使用 LeaderLength 参数作为从 ChordPoint
到产生注解文字时所用的水平折线的点(或如果不需要折线时线的终止位置点)的距离。
LeaderLength 设置只会在创建标注时使用(即使标注设置为使用默认文字位置值也是如此)。在完成了标注后,更改
LeaderLength 值将不会影响标注的显示,但新的设置将会保存并出现在 DXF、 LISP和 ADSRX中。

VBA示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Sub Example_AddDimRadial()
    ' 该示例在模型空间中创建半径标注。
   
    Dim dimObj As AcadDimRadial
    Dim center(0 To 2) As Double
    Dim chordPoint(0 To 2) As Double
    Dim leaderLen As Integer
   
    ' 定义标注
    center(0) = 0#: center(1) = 0#: center(2) = 0#
    chordPoint(0) = 5#: chordPoint(1) = 5#: chordPoint(2) = 0#
    leaderLen = 5
   
    ' 在模型空间中创建半径标注
    Set dimObj = ThisDrawing.ModelSpace.AddDimRadial(center, chordPoint, leaderLen)
    ZoomAll
End Sub

python示例

1
2
3
4
5
6
Center = vtPnt(0, 0, 0)
ChordPoint = vtPnt(10, 0, 0)
LeaderLength = 5.0


RetVal = mp.AddDimOrdinate(Center, ChordPoint, LeaderLength)

8. 创建圆弧、圆或多段线弧段的折角半径标注

1
RetVal = object.AddDimRadialLarge(Center, ChordPoint, OverrideCenter, JogPoint, JogAngle)

Object

ModelSpace 集合,
PaperSpace 集合, Block
使用该方法的对象。

Center

Variant[变体] (三元素双精度数组); 仅用于输入
指定圆弧、圆或多段线弧段的圆心。

ChordPoint

Variant[变体] (三元素双精度数组); 仅用于输入
指定附着引线的圆弧上的点的三维 WCS 坐标。

OverrideCenter

Variant[变体] (三元素双精度数组); 仅用于输入
指定替代圆心位置或拾取点的三维 WCS 坐标。

JogPoint

Variant[变体] (三元素双精度数组); 仅用于输入
指定折角位置或拾取点的三维 WCS 坐标。

JogAngle

Double[双精度]; 仅用于输入
指定折角的角度,以弧度表示。

RetVal

DimRadialLarge
对象
新创建的折角半径标注。

说明
在这里插入图片描述
Center 是要标注的圆弧、圆或多段线弧段的圆心。OverrideCenter 是标注的原点。
注意 要访问该方法,可使用 IAcadBlock3、IAcadModelSpace3 或
IAcadPaperSpace3 接口。

VBA示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Sub Example_AddDimRadialLarge()
    Dim PI As Double: PI = 3.141592
    Dim oMS As IAcadModelSpace3
    Set oMS = ThisDrawing.ModelSpace
   
    Dim ptCenter(2) As Double
    Dim oA As AcadArc
    Set oA = oMS.AddArc(ptCenter, 10, PI / 3, PI * 3 / 4)

    Dim ptChordPoint(2) As Double
    ptChordPoint(0) = 0: ptChordPoint(1) = 10: ptChordPoint(2) = 0

    Dim ptOverrideCenter(2) As Double
    ptOverrideCenter(0) = -3: ptOverrideCenter(1) = -6: ptOverrideCenter(2) = 0
   
    Dim ptJogPoint(2) As Double
    ptJogPoint(0) = 0: ptJogPoint(1) = 5: ptJogPoint(2) = 0

    Dim oDimRadialLarge As AcadDimRadialLarge
    Set oDimRadialLarge = oMS.AddDimRadialLarge(oA.Center, ptChordPoint, ptOverrideCenter, ptJogPoint, PI / 4)

    Dim ptTextPosition(2) As Double
    ptTextPosition(0) = 0: ptTextPosition(1) = 6: ptTextPosition(2) = 0
    oDimRadialLarge.TextPosition = ptTextPosition
   
    Update
    ZoomExtents
End Sub

python示例

1
2
3
4
5
6
7
Center = vtPnt(0, 0, 0)
ChordPoint = vtPnt(10, 0, 0)
OverrideCenter = vtPnt(0, 10, 0)
JogPoint = vtPnt(0, 10, 0)
JogAngle = math.pi/2

RetVal = mp.AddDimRadialLarge(Center, ChordPoint, OverrideCenter, JogPoint, JogAngle)

9. 创建旋转的线性标注

1
RetVal = object.AddDimRotated(XLine1Point, XLine2Point, DimLineLocation, RotationAngle)

Object

ModelSpace 集合,
PaperSpace 集合, Block
使用该方法的对象。

XLine1Point
Variant[变体] (三元素双精度数组);
仅用于输入
指定线性标注所要测量的第一个端点的三维WCS坐标。这是第一条尺寸界线的附着位置。

XLine2Point

Variant[变体] (三元素双精度数组);
仅用于输入
指定线性标注所要测量的第二个端点的三维WCS坐标。这是第二条尺寸界线的附着位置。

DimLineLocation

Variant[变体] (三元素双精度数组);
仅用于输入
指定尺寸线上的一个点的三维WCS坐标。它定义了尺寸线和标注文字的位置。

RotationAngle

Double[双精度]; 仅用于输入
旋转显示线性标注的角度,为弧度。

RetVal

DimRotated
对象
新创建的旋转线性标注对象。

说明

在这里插入图片描述

创建一个45度的线性标注

VBA示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Sub Example_AddDimRotated()
    ' 该示例在模型空间中创建旋转标注。
       
    Dim dimObj As AcadDimRotated
    Dim point1(0 To 2) As Double
    Dim point2(0 To 2) As Double
    Dim location(0 To 2) As Double
    Dim rotAngle As Double
   
    ' 定义标注
    point1(0) = 0#: point1(1) = 5#: point1(2) = 0#
    point2(0) = 5#: point2(1) = 5#: point2(2) = 0#
    location(0) = 0#: location(1) = 0#: location(2) = 0#
    rotAngle = 120
    rotAngle = rotAngle * 3.141592 / 180#       ' 转换为弧度
   
    ' 在模型空间中创建旋转标注
    Set dimObj = ThisDrawing.ModelSpace.AddDimRotated(point1, point2, location, rotAngle)
    ZoomAll
End Sub

python示例

1
2
3
4
5
6
XLine1Point = vtPnt(0, 0, 0)
XLine2Point = vtPnt(10, 0, 0)
DimLineLocation = vtPnt(0, 10, 0)
RotationAngle = math.pi/2

RetVal = mp.AddDimRotated(XLine1Point, XLine2Point, DimLineLocation, RotationAngle)

插入文字相关操作

  1. 单行文本
  2. 多行文本

1.单行文本

1
RetVal = object.AddText(TextString, InsertionPoint, Height)

Object

ModelSpace 集合,
PaperSpace 集合, Block
使用该方法的对象。

TextString

String[字符串]; 仅用于输入
显示的实际文字。

InsertionPoint

Variant[变体] (三元素双精度数组); 仅用于输入
文字放置到图形中的三维WCS坐标。

Height

Double[双精度]; 仅用于输入
文字的高度。必须为正数。

RetVal

Text 对象
新创建的 Text 对象。

VBA示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Sub Example_AddText()
    ' 该示例在模型空间中创建一个文字对象。

    Dim textObj As AcadText
    Dim textString As String
    Dim insertionPoint(0 To 2) As Double
    Dim height As Double
   
    ' 定义文字对象
    textString = "Hello, World."
    insertionPoint(0) = 2: insertionPoint(1) = 2: insertionPoint(2) = 0
    height = 0.5
   
    ' 在模型空间中创建文字对象
    Set textObj = ThisDrawing.ModelSpace.AddText(textString, insertionPoint, height)
    ZoomAll
   
End Sub

python示例

1
2
3
4
5
TextString = "hello CAD from pyhton"
InsertionPoint = vtPnt(10, 0, 0)
Height = 10.0

RetVal = mp.AddText(TextString, InsertionPoint, Height)

2.多行文本

1
RetVal = object.AddMText(InsertionPoint, Width, Text)

Object

ModelSpace 集合,
PaperSpace 集合, Block
使用该方法的对象。

InsertionPoint

Variant[变体] (三元素双精度数组); 仅用于输入
多行文字边框的插入点。

Width

Double[双精度]; 仅用于输入
多行文字边框的宽度。

Text

String[字符串]; 仅用于输入
MText 对象的实际文本字符串。

RetVal

MText 对象
新创建的 MText
对象。

VBA示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Sub Example_AddMtext()
    ' 该示例在模型空间中创建多行文字对象。
   
    Dim MTextObj As AcadMText
    Dim corner(0 To 2) As Double
    Dim width As Double
    Dim text As String
    corner(0) = 0#: corner(1) = 10#: corner(2) = 0#
    width = 10
    text = "This is the text String for the mtext Object"

    ' 创建多行文字对象
    Set MTextObj = ThisDrawing.ModelSpace.AddMText(corner, width, text)
    ZoomAll
   
End Sub

python示例

1
2
3
4
5
Text = "hello CAD from\npyhton"
InsertionPoint = vtPnt(10, 0, 0)
Width = 100.0

RetVal = mp.AddMText(InsertionPoint, Width, Text)

创建三维面对象

  1. 给定四个顶点创建 3DFace 对象
  2. 给定M和N向的点数量和M和N向点坐标创建自由形式的三维网格

1. 给定四个顶点创建 3DFace 对象

1
RetVal = object.Add3DFace(Point1, Point2, Point3[, Point4])

Object

ModelSpace 集合,
PaperSpace 集合, Block
使用该方法的对象。

Point1

Variant[变体] (三元素双精度数组); 仅用于输入
三维 WCS 坐标指定 3DFace
对象上的一个点。

Point2

Variant[变体] (三元素双精度数组); 仅用于输入
三维 WCS 坐标指定 3DFace
对象上的一个点。

Point3
Variant[变体] (三元素双精度数组); 仅用于输入
三维 WCS 坐标指定 3DFace
对象上的一个点。

Point4

Variant[变体] (三元素双精度数组); 仅用于输入; 可选项
三维 WCS 坐标指定 3DFace
对象上的一个点。如果忽略,该点将默认为 Point3 的坐标以便创建三个边的面。

RetVal

3DFace 对象
新创建的
3DFace 对象。
说明

要创建三边的面,可忽略最后一个点。使用 SetInvisibleEdge 方法可设置边的可见性。
点必须按照顺时针或逆时针方向输入来创建 3DFace 对象。可以通过将前一个面的最后两点作为后一个面的开始两点来创建相邻的面。
在这里插入图片描述
VBA示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Sub Example_Add3DFace()
    ' 该示例在模型空间中创建三维面

    Dim faceObj As Acad3DFace
    Dim point1(0 To 2) As Double
    Dim point2(0 To 2) As Double
    Dim point3(0 To 2) As Double
    Dim point4(0 To 2) As Double
   
    ' 定义面的四个坐标
    point1(0) = 0#: point1(1) = 0#: point1(2) = 0#
    point2(0) = 5#: point2(1) = 0#: point2(2) = 1#
    point3(0) = 1#: point3(1) = 10#: point3(2) = 0#
    point4(0) = 5#: point4(1) = 5#: point4(2) = 1#
   
    ' 在模型空间创建 3DFace 对象
    Set faceObj = ThisDrawing.ModelSpace.Add3DFace(point1, point2, point3, point4)
    ZoomAll
   
End Sub

python示例

1
2
3
4
5
6
Point1 = vtPnt(0, 0, 0)
Point2 = vtPnt(10, 0, 0)
Point3 = vtPnt(10, 10, 0)
Point4 = vtPnt(0, 10, 0)

RetVal = mp.Add3DFace(Point1, Point2, Point3, Point4)

2. 给定M和N向的点数量和M和N向点坐标创建自由形式的三维网格

三维绘图

  1. 创建边与WCS的轴相平行的三维实体长方体
  2. 创建基底在WCS的XY平面的三维实体圆锥体
  3. 创建基底在WCS的XY平面的三维实体圆柱体
  4. 给定圆心、长轴半径、短轴半径和高度在WCS的XY平面上创建三维实体椭圆锥体
  5. 给定圆心、长轴半径、短轴半径和高度创建基底在WCS的XY平面上的三维实体椭圆柱体
  6. 给定轮廓、高度和倾斜角度创建拉伸实体
  7. 给定轮廓和拉伸路径创建拉伸实体

1. 创建边与WCS的轴相平行的三维实体长方体

1
RetVal = object.AddBox(Origin, Length, Width, Height)

2. 创建基底在WCS的XY平面的三维实体圆锥体

1
RetVal = object.AddCone(Center, BaseRadius, Height)

3. 创建基底在WCS的XY平面的三维实体圆柱体

1
RetVal = object.AddCylinder(Center, Radius, Height)

4. 给定圆心、长轴半径、短轴半径和高度在WCS的XY平面上创建三维实体椭圆锥体

1
RetVal = object.AddEllipticalCone(Center, MajorRadius, MinorRadius, Height)

5. 给定圆心、长轴半径、短轴半径和高度创建基底在WCS的XY平面上的三维实体椭圆柱体

1
RetVal = object.AddEllipticalCylinder(Center, MajorRadius, MinorRadius, Height)

6. 给定轮廓、高度和倾斜角度创建拉伸实体

1
RetVal = object.AddExtrudedSolid(Profile, Height, TaperAngle)

7. 给定轮廓和拉伸路径创建拉伸实体

1
RetVal = object.AddExtrudedSolidAlongPath(Profile, Path)

编辑对象

  1. 选择对象
  2. 复制对象
  3. 偏移对象
  4. 镜像对象
  5. 整列对象
  6. 沿一个矢量移动对象
  7. 旋转对象
  8. 删除对象
  9. 延伸和修剪对象
  10. 编辑样条曲线

1. 选择对象

创建选择集

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# 创建选择集
try:
    doc.SelectionSets.Item("SS1").Delete()
except:
    print("Delete selection failed")

slt = doc.SelectionSets.Add("SS1")

# 提示用户从屏幕上拾取对象
slt.SelectOnScreen()
print("请在屏幕拾取图元,以Enter键结束")
obj = slt[0]
print(obj.ObjectID)
print(slt)

# 选择通过给定点的对象并将其添加到选择集
pnt = APoint(0, 0)
slt.SelectAtPoint(pnt)
obj = slt[0]
print(obj.StartPoint)

# 栏选对象并将其添加打选择集中
pnts = [-50, -50, 0, -50, 550, 0, 550, 550, 0, 550, -50, 0, -50, -50, 0]
pnts=vtFloat(pnts)

slt.SelectByPolygon(6, pnts) # acSelectionSetWindowPolygon = 6

obj = slt[0]
print(obj.ObjectID)
obj = slt[1]
print(obj.ObjectID)

# 全选
slt.Select(5) # acSelectionSetAll = 5
obj = slt[0]
print(obj.layer)

什么是选择集

选择集是作为独立单元进行处理的指定AutoCAD对象的集合。选择集可由单个对象组合,也可以是复杂的组合,定义选择集首先必须创建新的选择集并将其添加到SelectionSets集合,创建之后就可以往选择集上加入想处理的对象;

1
2
3
4
5
SelectionSets
# 要添加新的成员到集合中,可使用Add方法;
# 要选择指定的选择集,可以使用Item方法;
# 要删除指定的选择集,可以使用Delete方法;
# 在图形中最多可以创建128个选择集

创建选择集

1
2
3
4
5
6
7
# 当重复创建同名选择集时会报错,所以在创建选择集之前应该进行测试
try:
    doc.SelectionSets.Item("ST").Delete()
except:
    print("Delete selection failed")
# 创建选择集
selectset = doc.SelectionSets.Add("ST")

添加对象到选择集的方法

提示用户从屏幕上拾取对象

1
2
3
4
5
slt.SelectOnScreen()
print("请在屏幕拾取图元,以Enter键结束")
obj = slt[0]
print(obj.ObjectID)
print(slt)

添加一个或多个对象到指定选择集

1
2
# 添加一个或多个对象到指定选择集AddItem
# 不理解文档中的‘对象数组’是什么意思

选择对象并将其添加到选择集中

1
2
3
4
5
6
7
8
9
10
11
12
object.Select Mode[, Point1][, Point2][, FilterType][, FilterData]
Mode:AcSelect 常数; 仅用于输入  
      acSelectionSetWindow
      acSelectionSetCrossing
      acSelectionSetPrevious
      acSelectionSetLast
      acSelectionSetAll

# 示例
slt.Select(5) # acSelectionSetAll = 5
for obj in slt:
    print(obj)

选择通过给定点的对象并将其添加到选择集中

1
在这里插入代码片

栏选对象并将其添加到选择集中

1
2
3
4
5
6
7
8
9
pnts = [-50, -50, 0, -50, 550, 0, 550, 550, 0, 550, -50, 0, -50, -50, 0]
pnts=vtFloat(pnts)

slt.SelectByPolygon(6, pnts) # acSelectionSetWindowPolygon = 6

obj = slt[0]
print(obj.ObjectID)
obj = slt[1]
print(obj.ObjectID)

从选择集上移去对象

  1. RemoveItems:从组或选择集中删除指定的项目
  2. Clear:清除指定选择集中的所有项目
  3. Erase:删除选择集中的所有对象
  4. Delete:删除指定对象或一组保存了的图层设置

2. 复制对象

  1. Copy:复制单个对象到同一位置
  2. CopyObject:复制多个对象(完全克隆)

3. 偏移对象

1
RetVal = object.Offset(Distance)

Object
Arc, Circle, Ellipse, Line, LightweightPolyline, Polyline, Spline, XLine
使用该方法的对象。
Distance
Double[双精度]; 仅用于输入
该方法中的“Distance”是用来指定偏移距离的。
偏移可以是正值或负值,但不能等于0。如果偏移为负值,这意味着将得到更“小”的曲线 (例如,一个圆以负值偏移后的得到的圆的半径将会比原对象半径小).
如果“小”没有意义,则AutoCAD将向小的X,Y,Z WCS坐标方向偏移。如果偏移距离无效,则返回错误。
[明经通道特别提示]对于的 LightweightPolyline 和 Polyline
对象,曲线有顺时针方向和逆时针方向,对于顺时针方向,距离值为正值时为向内偏移,距离值为负值时为向外偏移。对于逆时针时刚好相反。对于自相交的多段线的偏移方向需要自己慢慢实践了。

RetVal
Variant[变体] (对象数组)
可以以原始对象来偏移出一系列的新曲线对象。
说明
对于很多对象,该操作的结果形成单一的新曲线(它的类型可能与原始曲线不同)。
例如,椭圆偏移后的对象将会是样条曲线,这是因为结果不能与椭圆的方程式匹配。有时偏移结果可能形成多个曲线。
在这里插入图片描述
指定原始对象和偏移后的对象为红色

VBA示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Sub Example_Offset()
    ' This example creates a lightweight polyline
    ' and then offsets the polyline.
   
    ' Create the polyline
    Dim plineObj As AcadLWPolyline
    Dim points(0 To 11) As Double
    points(0) = 1: points(1) = 1
    points(2) = 1: points(3) = 2
    points(4) = 2: points(5) = 2
    points(6) = 3: points(7) = 2
    points(8) = 4: points(9) = 4
    points(10) = 4: points(11) = 1
    Set plineObj = ThisDrawing.ModelSpace.AddLightWeightPolyline(points)
    plineObj.Closed = True
    ZoomAll
           
    MsgBox "Offset the polyline by 0.25.", , "Offset 示例"
   
    ' Offset the polyline
    Dim offsetObj As Variant
    offsetObj = plineObj.offset(0.25)
   
    ZoomAll
    MsgBox "Offset completed.", , "Offset 示例"
   
End Sub

python示例

1
2
3
4
5
6
7
Center = vtPnt(100, 100, 0)
Radius = 20.0
Circle = mp.AddCircle(Center, Radius)

Distance = 5.0

Circle.Offset(Distance)

4. 镜像对象

1
RetVal = object.Mirror(Point1, Point2)

Object
所有图形对象
使用该方法的对象。
Point1
Variant[变体] (三元素双精度数组); 仅用于输入
表示镜像轴的第一点的三维 WCS 坐标。
Point2
Variant[变体] (三元素双精度数组); 仅用于输入
表示镜像轴的第二点的三维 WCS 坐标。
RetVal
镜像后的对象
对象可以是任一图形对象。
系统变量
使用 MIRRTEXT
系统变量来管理文本对象的反向属性。MIRRTEXT 的缺省设置为开(1),它使文本对象与其它对象一样镜像。当其设置为关(0)时,文本不被镜像。
HM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzQ5NjEzMA==,size_16,color_FFFFFF,t_70)
说明
参数中的两点作为线段的两个端点,围绕此线对基础对象进行镜像。
=,size_16,color_FFFFFF,t_70
该方法将镜像的图像置于图形文件中并保留源对象。用 Delete 方法可移除源对象。
可以在图纸空间镜像 Viewport 对象,虽然这样做对模型空间视图或模型空间的对象都没有影响。
AutoCAD 检查复制的对象是否含有其它对象。如果是,进行所有对象的复制。该过程直到所有包含的对象全部复制完成。
[明经通道提示]:此处应该为文档本身的错误,对于AX方法的镜像与 AutoCAD
命令中的镜像不同,它只能对单个对象起作用。而不能将多个对象一起进行镜像操作。AX方法中未提供选择集直接的镜像方法,这需要用户自己编程解决。
注意
当同时遍历集合时不能执行该方法。在遍历过程中将打开一个只读操作的工作空间,而该方法试图执行可读写操作。必须在完成遍历后才调用该方法。
AttributeReference: 不能在 AttributeReference
对象上使用该方法。AttributeReference 对象继承了该方法是因为它是图形对象,然而,它不能操作属性参照。

VBA示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Sub Example_Mirror()
    ' This example creates a lightweight polyline
    ' and then mirrors that polyline.
   
    ' Create the polyline
    Dim plineObj As AcadLWPolyline
    Dim points(0 To 11) As Double
    points(0) = 1: points(1) = 1
    points(2) = 1: points(3) = 2
    points(4) = 2: points(5) = 2
    points(6) = 3: points(7) = 2
    points(8) = 4: points(9) = 4
    points(10) = 4: points(11) = 1
    Set plineObj = ThisDrawing.ModelSpace.AddLightWeightPolyline(points)
    plineObj.Closed = True
    ZoomAll
   
    ' Define the mirror axis
    Dim point1(0 To 2) As Double
    Dim point2(0 To 2) As Double
    point1(0) = 0: point1(1) = 4.25: point1(2) = 0
    point2(0) = 4: point2(1) = 4.25: point2(2) = 0
       
    MsgBox "Mirror the polyline.", , "Mirror 示例"
   
    ' Mirror the polyline
    Dim mirrorObj As AcadLWPolyline
    Set mirrorObj = plineObj.Mirror(point1, point2)
   
    ZoomAll
    MsgBox "Mirror completed.", , "Mirror 示例"
   
End Sub

python示例

1
2
3
4
5
6
7
8
Center = vtPnt(100, 100, 0)
Radius = 20.0
Circle = mp.AddCircle(Center, Radius)

Point1 = vtPnt(0, 0, 0)
Point2 = vtPnt(0, 10, 0)

Circle.Mirror(Point1, Point2)

5. 阵列对象

  1. 以给定的对象数量、填充角度和中心点创建对象的环形阵列
  2. 创建对象的二维或三维矩形阵列

1. 以给定的对象数量、填充角度和中心点创建对象的环形阵列

1
RetVal = object.ArrayPolar (NumberOfObjects, AngleToFill, CenterPoint)

Object
所有图形对象
使用该方法的对象。

NumberOfObjects

Integer[整数]; 仅用于输入
在环形阵列中所要创建的对象数量。该值必须大于1的正整数。

AngleToFill

Double[双精度];
仅用于输入
以弧度表示的填充角度。正值表示逆时针方向旋转,负值表示顺时针方向旋转。如果角度为0则出错。

CenterPoint

Variant[变体] (三元素双精度数组); 仅用于输入
指定环形阵列的中心点的三维 WCS 坐标。

RetVal
Variant Array[变体数组] (对象数组)
新生成对象的数组。

说明
AutoCAD 确定从阵列的中心点到选定对象的参考点的距离。参考点的使用与选定对象的类型有关。AutoCAD
使用圆或圆弧的圆心、块或形的插入点、文字的起点、线或轨迹的终点来做为参考点。
注意该方法不支持在 AutoCAD ARRAY 命令的复制选项中的旋转功能。
在这里插入图片描述

按 NumberOfObjects = 5, AngleToFill = 180, CenterPoint = 0,0,0
的环形阵列。

VBA示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Sub Example_ArrayPolar()
    ' This example creates a circle and then performs a polar array
    ' on that circle.
   
    ' Create the circle
    Dim circleObj As AcadCircle
    Dim center(0 To 2) As Double
    Dim radius As Double
    center(0) = 2#: center(1) = 2#: center(2) = 0#
    radius = 1
    Set circleObj = ThisDrawing.ModelSpace.AddCircle(center, radius)
    ZoomAll
    MsgBox "Perform the polar array on the circle.", , "ArrayPolar 示例"
   
    ' Define the polar array
    Dim noOfObjects As Integer
    Dim angleToFill As Double
    Dim basePnt(0 To 2) As Double
    noOfObjects = 4
    angleToFill = 3.14          ' 180 degrees
    basePnt(0) = 4#: basePnt(1) = 4#: basePnt(2) = 0#
   
    ' The following example will create 4 copies of an object
    ' by rotating and copying it about the point (3,3,0).
    Dim retObj As Variant
    retObj = circleObj.ArrayPolar(noOfObjects, angleToFill, basePnt)
   
    ZoomAll
    MsgBox "Polar array completed.", , "ArrayPolar 示例"
   
End Sub

python示例

1
2
3
4
5
6
7
8
9
Center = vtPnt(100, 100, 0)
Radius = 20.0
Circle = mp.AddCircle(Center, Radius)

NumberOfObjects = 5
AngleToFill = math.pi/6
CenterPoint = vtPnt(0, 0, 0)

Circle.ArrayPolar(NumberOfObjects, AngleToFill, CenterPoint)

2. 创建对象的二维或三维矩形阵列

1
RetVal = object.ArrayRectangular (NumberOfRows, NumberOfColumns, NumberOfLevels, DistBetweenRows, DistBetweenColumns, DistBetweenLevels)

Object

所有图形对象
使用该方法的对象。

NumberOfRows

Integer[整数]; 仅用于输入
矩形阵列的行数。该值必须为正数。如果该值为1,则
NumberOfColumns 必须大于1。

NumberOfColumns
Integer[整数]; 仅用于输入
矩形阵列的列数。该值必须为正数。如果该值为1,则
NumberOfRows 必须大于1。

NumberOfLevels
Integer[整数]; 仅用于输入
三维阵列的层数。

DistBetweenRows
Double[双精度];
仅用于输入
行间的距离。如果该距离为正数,行是从基础图元向上添加。如果该距离为负数,行是向下添加。

DistBetweenColumns
Double[双精度];
仅用于输入
列间的距离。如果该距离为正数,列是从基础图元向右添加。如果该距离为负数,列是向左添加。
DistBetweenLevels
Double[双精度]; 仅用于输入

层间的距离。如果该距离为正数,层是从基础图元向正方向添加。如果该距离为负数,层向负方向添加。

RetVal
Variant Array 变体数组
新创建对象的数组。

VBA示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Sub Example_ArrayRectangular()
    ' This example creates a circle and then performs
    ' a rectangular array on that circle.
   
    ' Create the circle
    Dim circleObj As AcadCircle
    Dim center(0 To 2) As Double
    Dim radius As Double
    center(0) = 2#: center(1) = 2#: center(2) = 0#
    radius = 0.5
    Set circleObj = ThisDrawing.ModelSpace.AddCircle(center, radius)
    ThisDrawing.Application.ZoomAll
    MsgBox "Perform the rectangular array on the circle.", , "ArrayRectangular 示例"
   
    ' Define the rectangular array
    Dim numberOfRows As Long
    Dim numberOfColumns As Long
    Dim numberOfLevels As Long
    Dim distanceBwtnRows As Double
    Dim distanceBwtnColumns As Double
    Dim distanceBwtnLevels As Double
    numberOfRows = 5
    numberOfColumns = 5
    numberOfLevels = 2
    distanceBwtnRows = 1
    distanceBwtnColumns = 1
    distanceBwtnLevels = 1
   
    ' Create the array of objects
    Dim retObj As Variant
    retObj = circleObj.ArrayRectangular(numberOfRows, numberOfColumns, numberOfLevels, distanceBwtnRows, distanceBwtnColumns, distanceBwtnLevels)
   
    ZoomAll
    MsgBox "Rectangular array completed.", , "ArrayRectangular 示例"
   
End Sub

python示例

1
2
3
4
5
6
7
8
9
10
11
12
13
Center = vtPnt(100, 100, 0)
Radius = 20.0
Circle = mp.AddCircle(Center, Radius)

NumberOfRows = 5
NumberOfColumns = 5
NumberOfLevels = 1
DistBetweenRows = 100.0
DistBetweenColumns = 100.0
DistBetweenLevels = 0.0


Circle.ArrayRectangular(NumberOfRows, NumberOfColumns, NumberOfLevels, DistBetweenRows, DistBetweenColumns, DistBetweenLevels)

6. 沿一个矢量移动对象

1
object.Move Point1, Point2

Object
所有图形对象, AttributeReference
使用该方法的对象。
Point1
Variant[变体] (三元素双精度数组); 仅用于输入
表示移动矢量的第一个点的三维 WCS 坐标。
Point2
Variant[变体] (三元素双精度数组); 仅用于输入
表示移动矢量的第二个点的三维 WCS 坐标。

VBA示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Sub Example_Move()
    ' This example creates a circle and then performs
    ' a move on that circle.
   
    ' Create the circle
    Dim circleObj As AcadCircle
    Dim center(0 To 2) As Double
    Dim radius As Double
    center(0) = 2#: center(1) = 2#: center(2) = 0#
    radius = 0.5
    Set circleObj = ThisDrawing.ModelSpace.AddCircle(center, radius)
    ZoomAll
   
    ' Define the points that make up the move vector
    Dim point1(0 To 2) As Double
    Dim point2(0 To 2) As Double
    point1(0) = 0: point1(1) = 0: point1(2) = 0
    point2(0) = 2: point2(1) = 0: point2(2) = 0
       
    MsgBox "Move the circle 2 units in the X direction.", , "Move 示例"
   
    ' Move the circle
    circleObj.Move point1, point2
   
    ZoomAll
    MsgBox "Move completed.", , "Move 示例"
   
End Sub

python示例

1
2
3
4
5
6
7
8
Center = vtPnt(100, 100, 0)
Radius = 20.0
Circle = mp.AddCircle(Center, Radius)

Point1 = vtPnt(0, 0, 0)
Point2 = vtPnt(0, 200, 0)

Circle.Move(Point1, Point2)

7. 旋转对象

1
object.Rotate BasePoint, RotationAngle

Object
所有图形对象, AttributeReference
使用该方法的对象。
BasePoint
Variant[变体] (三元素双精度数组); 仅用于输入
指定与 UCS Z 轴平行的旋转轴所经过的点的三维
WCS 坐标。
RotationAngle
Double[双精度];
仅用于输入
以弧度表示的用于旋转对象的角度。该角度确定了对象相对于当前位置绕基点旋转的距离。

VBA示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
Sub Example_Rotate()
    ' This example creates a lightweight polyline
    ' and then rotates that polyline.
   
    ' Create the polyline
    Dim plineObj As AcadLWPolyline
    Dim points(0 To 11) As Double
    points(0) = 1: points(1) = 2
    points(2) = 1: points(3) = 3
    points(4) = 2: points(5) = 3
    points(6) = 3: points(7) = 3
    points(8) = 4: points(9) = 4
    points(10) = 4: points(11) = 2
    Set plineObj = ThisDrawing.ModelSpace.AddLightWeightPolyline(points)
    plineObj.Closed = True
    ZoomAll
           
    MsgBox "Rotate the polyline by 45 degrees.", , "Rotate 示例"
   
    ' Define the rotation
    Dim basePoint(0 To 2) As Double
    Dim rotationAngle As Double
    basePoint(0) = 4: basePoint(1) = 4.25: basePoint(2) = 0
    rotationAngle = 0.7853981   ' 45 degrees
   
    ' Rotate the polyline
    plineObj.Rotate basePoint, rotationAngle
   
    ZoomAll
    MsgBox "Rotation completed.", , "Rotate 示例"
   
End Sub

python示例

1
2
3
4
5
6
7
8
Center = vtPnt(100, 100, 0)
Radius = 20.0
Circle = mp.AddCircle(Center, Radius)

BasePoint = vtPnt(0, 0, 0)
RotationAngle = math.pi/2

Circle.Rotate(BasePoint, RotationAngle)

8. 删除对象

9. 延伸和修剪对象

视口相关方法

通过指定矩形的两个对角点来缩放当前视图

1
object.ZoomWindow LowerLeft, UpperRight

Object
Application
使用该方法的对象。
LowerLeft
Variant[变体] (三元素双精度数组); 仅用于输入
显示窗口矩形的左下角坐标。
UpperRight
Variant[变体] (三元素双精度数组); 仅用于输入
显示窗口矩形的右上角坐标。

python示例

1
2
3
4
LowerLeft = vtPnt(0, 0, 0)
UpperRight = vtPnt(1000, 1000, 0)

acad.ZoomWindow(LowerLeft, UpperRight)

按照指定的比例因子缩放当前视图