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

创建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(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)

二维平面图形绘制

  1. 画圆弧;AddArc
  2. 绘制圆;AddCircle
  3. 绘制椭圆;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 Example_AddArc()
    ' 该示例在模型空间中创建圆弧。
   
    Dim arcObj 
  • 12
    点赞
  • 74
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值