本文不定期更新!
#!/usr/bin/env python
# -*- coding: utf-8 -*-
'''
=============================
Author = Hulunbuir & DalaiNur
Email: [email protected]
Last Update: 2019.08.02 15:43
=============================
'''
from pyautocad import Autocad
from pyautocad import APoint
import numpy as np
import math
import pyautocad.types
acad = Autocad(create_if_not_exists = True)
acad.prompt("Hello! AutoCAD from pyautocad.")
print(acad.doc.Name)
startPoint = APoint(5, 25)
endPoint = APoint(25, 35)
# z坐标可空缺,空缺时系统默认其为0,即点Pnt1在CAD中坐标为(5,25,0);
# 系统自动将各坐标转化为双精度浮点数。
LineObj = acad.model.AddLine(startPoint, endPoint)
[Pnt1, Pnt2, Pnt3] = [APoint(35, 35), APoint(40, 35), APoint(43, 32)]
PlinePnts = np.array([Pnt1, Pnt2, Pnt3])
PlinePnts = PlinePnts.reshape(1, PlinePnts.shape[0] * PlinePnts.shape[1])[0]
# 将各点坐标顺序变换为行数据;
# 添加样条曲线时参数仅支持1行多列的1维数组,即将各点x,y,z坐标顺序排列构成的数组。
PlinePnts = aDouble(PlinePnts)
PlineObj = acad.model.AddPolyLine(PlinePnts)
# 略
SegmentIndex = 5 # 多段线的段号
StartWidth = 10 # 段起点处线宽
EndWidth = 20 # 段终点处线宽
PlineObj.SetWidth (5, 10, 20)
# 为多段线PlineObj的第六段设置变宽度线宽
Pnt1 = APoint(35, 32)
Pnt2 = APoint(42, 25)
Pnt3 = APoint(48, 28)
Pnt4 = APoint(55, 25)
SplinePnts = np.array([Pnt1, Pnt2, Pnt3, Pnt4])
SplinePnts = SplinePnts.reshape(1, SplinePnts.shape[0] * SplinePnts.shape[1])[0]
startTan = APoint(1, -10)
endTan = APoint(1, -5)
SplineObj = acad.model.AddSpline(SplinePnts, startTan, endTan)
# startTan为样条曲线起点处切线的方向向量;
# endTan为样条曲线终点处切线的方向向量。
CircleCenter = APoint(10, 10)
CircleObj = acad.model.AddCircle(CircleCenter, 5)
# AddCircle(圆心, 半径)
ArcCenter = APoint(20, 10)
ArcObj = acad.model.AddArc(ArcCenter, 5, math.radians(-60), math.radians(60))
# AddArc(圆心,半径,始边角度(弧度制),终边角度(弧度制))
EllCenter = APoint(40, 10, 0)
majAxis = APoint(5, 0, 0)
EllObj = acad.model.AddEllipse(EllCenter, majAxis, 0.5)
# 该椭圆以EllCenter为椭圆中心,长轴一端点为(45, 10, 0),且短轴长度为长轴的0.5倍;
# majAxis为主轴(长轴)端点相对于椭圆中心的坐标增量;
# 0.5短长轴之比。
EllArcCenter = APoint(50, 10)
majAxis = APoint(5, 0, 0)
EllArcObj = acad.model.AddEllipse(EllArcCenter, majAxis, 0.5)
EllArcObj.startAngle = -90 * (3.14 / 180)
EllArcObj.endAngle = 90 * (3.14 / 180)
Pnt1 = APoint(65, 5, 0)
Pnt2 = APoint(65, 35, 0)
Pnt3 = APoint(75, 5, 0)
Pnt4 = APoint(75, 35, 0)
solidObj = acad.model.AddSolid(Pnt1, Pnt2, Pnt3, Pnt4)
'''
# 特别感谢ke1078同学对图案填充功能的实现提供的帮助。
'''
# 略
# 略
import pyautocad.types
pyautocad.types.distance(Pnt1, Pnt2) # 计算点Pnt1和点Pnt2间的距离
print(Pnt1)
print(tuple(Pnt1)) # 将点Pnt1坐标转化为元组
print(list(Pnt1)) # 将点Pnt1坐标转化为列表
print(Pnt1+Pnt2) # 两点对应坐标相加,也支持其他数学运算。
LineObj.layer = "Python" # 指定图层
以上,便是关于AutoCAD绘图的一些基本代码,因篇幅有限,某些非关键功能未做详细介绍,如有疑问,欢迎邮件来询。
本文部分功能的实现离不开广大博友的大力帮助,有些功能看似简单,但第一次实现出来却是相当不容易的。
鉴于,相关示例代码相对较少,特写本文,一方面是为自己的阶段性学习做一个总结,另一方面更是为有需要的人提供多一点参考。
如果您已实现一些本文未提及的功能,还请在评论区呈现,以便为后续学习者提供更多的帮助。
胸藏文墨怀若谷,腹有诗书气自华,希望各位都能在知识的pāo子里快乐徜徉。
因本人野生学习Python,水平确实有限,文中难免有所疏漏,还请各位大神不吝批评指正。
最后,祝各位攻城狮们,珍爱生命,保护发际线!
本文部分内容,源于网络!
欢迎大家点赞、评论及转载,转载请注明出处!