创建python与CAD的连接
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)
创建线相关对象
- 通过两个点创建直线;AddLine
- 由顶点列表创建优化多段线;AddLightweightPolyline
- 通过点数组创建多线;AddMLine
- 从顶点列表创建多段线;AddPolyline
- 创建通过两个唯一点的射线;AddRay
- 创建通过两个指定点构造线(无限长线);AddXline
1. 通过两个点创建直线
RetVal = object.AddLine(StartPoint, EndPoint)
Object
ModelSpace 集合, PaperSpace 集合, Block使用该方法的对象。
StartPoint
Variant[变体] (三元素双精度数组); 仅用于输入指定直线起点的三维WCS坐标。
EndPoint
Variant[变体] (三元素双精度数组); 仅用于输入指定直线终点的三维WCS坐标。
RetVal
Line 对象新创建的 Line 对象。
VBA示例
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示例:
startpoint = vtPnt(100, 800)
stoppoint = vtPnt(100, 100)
pointobj = mp.AddLine(startpoint, stoppoint)
2.由顶点列表创建优化多段线
RetVal = object.AddLightweightPolyline(VerticesList)
Object
ModelSpace 集合, PaperSpace 集合, Block使用该方法的对象。
VerticesList
Variant[变体] (双精度数组)指定多段线顶点的二维 OCS 坐标数组。至少需要两点(四个元素)以构成优化多段线。数组大小必须为2的倍数。
RetVal
LightweightPolyline 对象新创建的 LightweightPolyline 对象。
说明
顶点是生成多段线的线段端点。要添加弧段,首先创建全部为直线段的多段线,然后为个别需要变为弧段的线段添加凸度。要为线段添加凸度值,可使用 SetBulge 方法。
多段线的标高将被设置为布局的当前标高。使用 ElevationModelspace 或 ElevationPaperspace 属性可确定多段线的标高。
VBA示例
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示例
list = [100, 100, 100, 200, 200, 200, 300, 200, 400, 400]
# 由于方法规定的是Double的数据类型,在python中并没有改数据类型,所以需要对其进行数据转换
points = vtFloat(list)
pointobj = mp.AddLightweightPolyline(points)
3.通过点数组创建多线
RetVal = object.AddMLine(VertexList)
Object
ModelSpace 集合, PaperSpace 集合, Block使用该方法的对象。
VertexList
Variant[变体] (双精度数组); 仅用于输入指定多线顶点的三维WCS坐标数组。
RetVal
MLine 对象新创建的 MLine 对象。
VBA示例
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示例
list = [100, 100, 100, 200, 200, 200, 300, 200, 400]
# 由于方法规定的是Double的数据类型,在python中并没有改数据类型,所以需要对其进行数据转换
points = vtFloat(list)
pointobj = mp.AddMLine(points)
4.从顶点列表创建多段线
RetVal = object.AddPolyline(VerticesList)
Object
ModelSpace 集合, PaperSpace 集合, Block使用该方法的对象。
VerticesList
Variant[变体] (双精度数组); 仅用于输入
用于创建多段线顶点的OCS坐标数组。每一顶点用三个元素表示,前两个元素为OCS的X和Y坐标;而第三个元素为忽略。至少需要两点(六个元素)来构成一个多段线对象。该数组的大小必须为3的倍数。
RetVal
Polyline 对象新创建的 Polyline 对象。
说明
要创建包含圆弧的多段线,首先创建直线段的多段线,然后对特定顶点使用 SetBulge 方法设置凸度。
该方法的存在只用于与旧版本兼容。使用 AddLightweightPolyline 方法可创建优化格式的多段线以节省内存和磁盘空间。
坐标可使用 TranslateCoordinates 方法由OCS坐标与其它坐标系统相互转换。
VBA示例
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示例
list = [100, 100, 0, 200, 200, 0]
# 由于方法规定的是Double的数据类型,在python中并没有改数据类型,所以需要对其进行数据转换
points = vtFloat(list)
pointobj = mp.AddPolyline(points)
5.创建通过两个唯一点的射线
RetVal = object.AddRay(Point1, Point2)
Object
ModelSpace 集合, PaperSpace 集合, Block使用该方法的对象。
Point1
Variant[变体] (三元素双精度数组); 仅用于输入指定射线有限起点的三维WCS坐标。
Point2
Variant[变体] (三元素双精度数组); 仅用于输入指定射线经过的点的三维WCS坐标。 射线从 Point1 开始,通过 Point2 到无限。
RetVal
Ray 对象新创建的 Ray 对象。
VBA示例
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示例
point1 = vtPnt(5, 5, 0)
point2 = vtPnt(10, 10, 0)
RetVal = mp.AddRay(point1, point2)
6.创建通过两个指定点构造线(无限长线)
RetVal = object.AddXline(Point1, Point2)
Object
ModelSpace 集合, PaperSpace 集合, Block使用该方法的对象。
Point1
Variant[变体] (三元素双精度数组); 仅用于输入
Point2
Variant[变体] (三元素双精度数组); 仅用于输入
RetVal
XLine 对象
新创建的 XLine
对象。
VBA示例
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示例
point1 = vtPnt(5, 5, 0)
point2 = vtPnt(10, 10, 0)
RetVal = mp.AddXline(point1, point2)
二维平面图形绘制
- 画圆弧;AddArc
- 绘制圆;AddCircle
- 绘制椭圆;AddEllipse
1.画圆弧
RetVal = object.AddArc(Center, Radius, StartAngle, EndAngle)
Object
ModelSpace 集合, PaperSpace 集合, Block使用该方法的对象。
Center
Variant[变体] (三元素双精度数组); 仅用于输入指定圆弧圆心的三维WCS坐标。
Radius
Double[双精度]; 仅用于输入圆弧的半径。
StartAngle, EndAngle
**Double[双精度]; 仅用于输入定义圆弧的起始角和终止角(以弧度表示)。当起始角大于终止角时定义的是逆时针的圆弧。 **
RetVal
Arc 对象新创建的 Arc 对象。
VBA示例
Sub