创建和编辑AutoCAD对象(VBApython)创建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)
创建线相关对象
1. 通过两个点创建直线;AddLine
2. 由顶点列表创建优化多段线;AddLightweightPolyline
3. 通过点数组创建多线;AddMLine
4. 从顶点列表创建多段线;AddPolyline
5. 创建通过两个唯⼀点的射线;AddRay
6. 创建通过两个指定点构造线(⽆限长线);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(0To2)As Double
Dim endPoint(0To2)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(0To9)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⽰例
Dim mLineObj As AcadMLine
Dim vertexList(0To17)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⽰例
Dim plineObj As AcadPolyline
Dim points(0To14)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 baPoint(0To2)As Double
Dim SecondPoint(0To2)As Double
' 定义射线
baPoint(0)=3#: baPoint(1)=3#: baPoint(2)=0#
SecondPoint(0)=4#: SecondPoint(1)=4#: SecondPoint(2)=0#
' 在模型空间中创建射线对象
Set rayObj = ThisDrawing.ModelSpace.AddRay(baPoint, SecondPoint)
ZoomAll
End Sub