Python AutoCAD 绘图

系统 1930 0

本文不定期更新!

目 录

    • 0、相关文章
    • 1、连接及库导入
    • 2、创建点及直线
    • 3、添加多段线及样条曲线
      • (1) 添加普通多段线
      • (2) 添加含圆弧多段线(倒角矩形)
      • (3) 设置多段线线宽
      • (4) 添加样条曲线
    • 4、添加圆及圆弧
      • (1) 创建圆
      • (2) 创建圆弧
    • 5、添加椭圆及椭圆弧
      • (1) 创建椭圆
      • (2) 创建椭圆弧
    • 6、实体填充
    • 7、图案填充
      • (1) 圆形图案填充
      • (2) 闭合多段线图案填充
    • 8、其他
    • 9、尾声

0、相关文章

  • Python pyautocad库 使用简介
  • Python AutoCAD 系统设置
  • Python AutoCAD 图层
  • Python AutoCAD 绘图
  • Python AutoCAD 修改
  • Python AutoCAD 块组
  • Python AutoCAD 注释
  • Python AutoCAD 文件
  • Python AutoCAD 选择集

1、连接及库导入

            
              
                #!/usr/bin/env python
              
              
                # -*- coding: utf-8 -*-
              
              
                '''
=============================
Author = Hulunbuir & DalaiNur
Email: liyang@alu.hit.edu.cn
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
              
                )
              
            
          

2、创建点及直线

            
              startPoint 
              
                =
              
               APoint
              
                (
              
              
                5
              
              
                ,
              
              
                25
              
              
                )
              
              
endPoint 
              
                =
              
               APoint
              
                (
              
              
                25
              
              
                ,
              
              
                35
              
              
                )
              
              
                # z坐标可空缺,空缺时系统默认其为0,即点Pnt1在CAD中坐标为(5,25,0);
              
              
                # 系统自动将各坐标转化为双精度浮点数。
              
              

LineObj 
              
                =
              
               acad
              
                .
              
              model
              
                .
              
              AddLine
              
                (
              
              startPoint
              
                ,
              
               endPoint
              
                )
              
            
          

3、添加多段线及样条曲线

(1) 添加普通多段线

            
              
                [
              
              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
              
                )
              
            
          

(2) 添加含圆弧多段线(倒角矩形)

            
              
                # 略
              
            
          

(3) 设置多段线线宽

            
              SegmentIndex 
              
                =
              
              
                5
              
              
                # 多段线的段号
              
              
StartWidth 
              
                =
              
              
                10
              
              
                # 段起点处线宽
              
              
EndWidth 
              
                =
              
              
                20
              
              
                # 段终点处线宽
              
              
PlineObj
              
                .
              
              SetWidth 
              
                (
              
              
                5
              
              
                ,
              
              
                10
              
              
                ,
              
              
                20
              
              
                )
              
              
                # 为多段线PlineObj的第六段设置变宽度线宽
              
            
          

(4) 添加样条曲线

            
              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为样条曲线终点处切线的方向向量。
              
            
          

4、添加圆及圆弧

(1) 创建圆

            
              CircleCenter 
              
                =
              
               APoint
              
                (
              
              
                10
              
              
                ,
              
              
                10
              
              
                )
              
              
CircleObj 
              
                =
              
               acad
              
                .
              
              model
              
                .
              
              AddCircle
              
                (
              
              CircleCenter
              
                ,
              
              
                5
              
              
                )
              
              
                # AddCircle(圆心, 半径)
              
            
          

(2) 创建圆弧

            
              ArcCenter 
              
                =
              
               APoint
              
                (
              
              
                20
              
              
                ,
              
              
                10
              
              
                )
              
              
ArcObj 
              
                =
              
               acad
              
                .
              
              model
              
                .
              
              AddArc
              
                (
              
              ArcCenter
              
                ,
              
              
                5
              
              
                ,
              
               math
              
                .
              
              radians
              
                (
              
              
                -
              
              
                60
              
              
                )
              
              
                ,
              
               math
              
                .
              
              radians
              
                (
              
              
                60
              
              
                )
              
              
                )
              
              
                # AddArc(圆心,半径,始边角度(弧度制),终边角度(弧度制))
              
            
          

5、添加椭圆及椭圆弧

(1) 创建椭圆

            
              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短长轴之比。
              
            
          

(2) 创建椭圆弧

            
              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
              
              
                )
              
            
          

6、实体填充

            
              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
              
                )
              
            
          

7、图案填充

            
              
                '''
# 特别感谢ke1078同学对图案填充功能的实现提供的帮助。
'''
              
            
          

(1) 圆形图案填充

            
              
                # 略
              
            
          

(2) 闭合多段线图案填充

            
              
                # 略
              
            
          

8、其他

            
              
                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"
              
              
                # 指定图层
              
            
          

9、尾声

以上,便是关于 AutoCAD绘图 的一些基本代码,因篇幅有限,某些非关键功能未做详细介绍,如有疑问,欢迎邮件来询。

本文部分功能的实现离不开广大博友的大力帮助,有些功能看似简单,但第一次实现出来却是相当不容易的。

鉴于,相关示例代码相对较少,特写本文,一方面是为自己的阶段性学习做一个总结,另一方面更是为有需要的人提供多一点参考。

如果您已实现一些本文未提及的功能,还请在评论区呈现,以便为后续学习者提供更多的帮助。

胸藏文墨怀若谷,腹有诗书气自华,希望各位都能在知识的pāo子里快乐徜徉。

因本人野生学习Python,水平确实有限,文中难免有所疏漏,还请各位大神不吝批评指正。

最后,祝各位攻城狮们,珍爱生命,保护发际线!

本文部分内容,源于网络!

欢迎大家点赞、评论及转载,转载请注明出处!

为我打call,不如为我打款!
Python AutoCAD 绘图_第1张图片


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论