如何使用python库zwcad在ZWcad中自动执行任务和绘图?

how to use python libirary pyzwcad to automate tasks and draw in ZWcad?

我正在做一个项目来创建一个工具来帮助工程师自动化绘图任务,因为我的公司使用 ZWcad 而不是 Autocad,我发现自己不得不使用 pyzwcad 但我无法在一个地方找到足够的信息或者我没有在正确的地方搜索,因为我是一名初级程序员,我需要在一个地方收集我收集的所有数据。

首先你需要导入pyzwacad

from pyzwcad import *

或者只导入使用过的方法

from pyzwcad import ZwCAD, ZCAD, APoint, aDouble

我使用 API 自动执行任务的首选方法是让用户在使用该工具之前启动程序。

所以我们现在需要定义 cad 对象

acad = ZwCAD()

在接下来的段落中,我将总结我在项目中使用的一些 pyzwacad 方法。

  1. 在当前绘图文件中添加线型。

    def G_add_line_typ(ltyp_name, acad):
        line_type_found = False
        for ltyp in acad.doc.Linetypes:
    
            if ltyp.name == ltyp_name:
                line_type_found = True
        if not line_type_found:
            acad.doc.Linetypes.Load(ltyp_name, "ZWCADiso.lin")
    
  2. 画正方形:

    X_coo:为正方形中心点的X坐标。

    y_coo:为正方形中心点的Y坐标。

    我们需要为方形点创建一个 array/list 坐标,例如第一个点将占据列表中的前两个位置,所以

    list[0]为第一个点X坐标,

    list1为第一个点Y坐标

    def draw_sqr(acad, X_coo, y_coo, d, w, n_color):
        sqr_pts = [X_coo - (d / 2), y_coo + w / 2, X_coo - (d / 2), y_coo - w / 2, X_coo + (d / 2), y_coo - w / 2, X_coo + (d / 2), y_coo + w / 2, X_coo - (d / 2), y_coo + w / 2]
        sqr = acad.model.AddLightWeightPolyline(aDouble(sqr_pts))
        sqr.color = n_color
        # shape color is an integer from color index 1 for red.
    

3- 添加圈子:

# add insertion point
x_coo = 50
y_coo = 50
c1 = APoint(x_coo, y_co)
radius = 500
circle= acad.model.AddCircle(c1, radius)

4- 旋转对象:

# add base point
x_coo = 50
y_coo = 50
base_point= APoint(x_coo, y_co)
r_ang = (45 * np.pi) / 180
object.Rotate(base_point, r_ang)
# object is refering to the object name it could be difrent based on your code

5- 添加文本:

# add insertion point
x_coo = 50
y_coo = 50
pttxt = APoint(x_coo, y_coo)
txt_height = 200 # text height
text = acad.model.AddText("text string", pttxt, txt_height)

6- 更改文本对齐方式:

# first we need to sort the current insertion point for the exist text object as it will be reset after changing the alignment.

old_insertion_point = APoint(text.InsertionPoint)
# text is refering to text object name it could be difrent based on your code


text.Alignment = ZCAD.zcAlignmentBottomCenter

# modify the text insertion point as the above step automaticaly reset it to (0, 0)
text.TextAlignmentPoint = old_insertion_point

7- 添加旋转尺寸线:

我们需要定义3个点

起点、终点和标注文字点,还要用数学库来使用弧度法

import math
acad = ZwCAD()
st_dim = APoint(0, 0)

end_dim = APoint(100, 30)

text_dim = APoint(50, 15)

dim_line = acad.model.AddDimRotated(st_dim, end_dim, text_dim, math.radians(30))

acad.Application.ZoomAll()

以上代码可用于添加线性尺寸线,方法是在水平尺寸的角度位置使用 0 或在垂直尺寸的角度位置使用 math.radians(90)。

8- 添加对齐尺寸线:

同上但不使用旋转角度

acad = ZwCAD()
st_dim = APoint(0, 0)

end_dim = APoint(100, 30)

text_dim = APoint(50, 15)

dim_line = acad.model.AddDIMALIGNED(st_dim, end_dim, text_dim)

9- 覆盖现有尺寸线文本:

dim_line.TextOverride = "new text"

"dim_line" 指的是想要的尺寸线对象名称。