Python AutoCAD 选择集

系统 2990 0

本文不定期更新!

目 录

    • 0、相关文章
    • 1、连接及库导入
    • 2、常规选择
      • (1) 屏幕拾取
      • (2) 选择过定点图元
      • (3) 多边形框选
      • (4) 全选
    • 3、快速选择
      • (1) 滤出0图层上的所有圆
    • 4、尾声

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.07.28 14:00
=============================
'''
              
              
                from
              
               pyautocad 
              
                import
              
               Autocad

              
                from
              
               pyautocad 
              
                import
              
               APoint

              
                import
              
               win32com
              
                .
              
              client

              
                import
              
               numpy 
              
                as
              
               np

              
                import
              
               pythoncom

              
                import
              
               win32com
              
                .
              
              client

acad 
              
                =
              
               Autocad
              
                (
              
              create_if_not_exists 
              
                =
              
              
                True
              
              
                )
              
              
acad
              
                .
              
              prompt
              
                (
              
              
                "Hello! AutoCAD from pyautocad."
              
              
                )
              
              
                print
              
              
                (
              
              acad
              
                .
              
              doc
              
                .
              
              Name
              
                )
              
            
          

2、常规选择

            
              
                "创建名称为SS1的选择集"
              
              
                try
              
              
                :
              
              
    acad
              
                .
              
              ActiveDocument
              
                .
              
              SelectionSets
              
                .
              
              Item
              
                (
              
              
                "SS1"
              
              
                )
              
              
                .
              
              Delete
              
                (
              
              
                )
              
              
                except
              
              
                :
              
              
                print
              
              
                (
              
              
                "Delete selection failed"
              
              
                )
              
              

slt 
              
                =
              
               acad
              
                .
              
              ActiveDocument
              
                .
              
              SelectionSets
              
                .
              
              Add
              
                (
              
              
                'SS1'
              
              
                )
              
            
          

(1) 屏幕拾取

            
              slt
              
                .
              
              SelectOnScreen
              
                (
              
              
                )
              
              
                print
              
              
                (
              
              
                "请在屏幕拾取图元,以Enter键结束"
              
              
                )
              
              
obj 
              
                =
              
               slt
              
                [
              
              
                0
              
              
                ]
              
              
                print
              
              
                (
              
              obj
              
                .
              
              ObjectID
              
                )
              
              
                print
              
              
                (
              
              slt
              
                )
              
            
          

(2) 选择过定点图元

            
              pnt 
              
                =
              
               APoint
              
                (
              
              
                0
              
              
                ,
              
              
                0
              
              
                )
              
              
slt
              
                .
              
              SelectAtPoint
              
                (
              
              pnt
              
                )
              
              
obj 
              
                =
              
               slt
              
                [
              
              
                0
              
              
                ]
              
              
                print
              
              
                (
              
              obj
              
                .
              
              StartPoint
              
                )
              
              
                # 当点pnt存在于不止一个图元上时
              
              
                # 该选择方法仅能选择出其中的一个图元
              
              
                # 多个选择不出来
              
            
          

(3) 多边形框选

            
              
                "选择PointsList内各点围成的边界内全部图元"
              
              

PointsList 
              
                =
              
              
                [
              
              APoint
              
                (
              
              
                0
              
              
                ,
              
              
                0
              
              
                )
              
              
                ,
              
               APoint
              
                (
              
              
                15000
              
              
                ,
              
              
                0
              
              
                )
              
              
                ,
              
               APoint
              
                (
              
              
                15000
              
              
                ,
              
              
                15000
              
              
                )
              
              
                ,
              
                
              APoint
              
                (
              
              
                0
              
              
                ,
              
              
                15000
              
              
                )
              
              
                ,
              
               APoint
              
                (
              
              
                0
              
              
                ,
              
              
                0
              
              
                )
              
              
                ]
              
              
PointsList 
              
                =
              
               np
              
                .
              
              array
              
                (
              
              
                [
              
              j 
              
                for
              
               i 
              
                in
              
               pnts 
              
                for
              
               j 
              
                in
              
               i
              
                ]
              
              
                ,
              
               dtype 
              
                =
              
               np
              
                .
              
              
                float
              
              
                )
              
              

slt
              
                .
              
              SelectByPolygon
              
                (
              
              
                6
              
              
                ,
              
               PointsList
              
                )
              
              
                # acSelectionSetWindowPolygon = 6
              
              
obj 
              
                =
              
               slt
              
                [
              
              
                0
              
              
                ]
              
              
                print
              
              
                (
              
              obj
              
                .
              
              StartPoint
              
                )
              
            
          

(4) 全选

            
              slt
              
                .
              
              Select
              
                (
              
              
                5
              
              
                )
              
              
                # acSelectionSetAll = 5
              
              
obj 
              
                =
              
               slt
              
                [
              
              
                0
              
              
                ]
              
              
                print
              
              
                (
              
              obj
              
                .
              
              layer
              
                )
              
              
                print
              
              
                (
              
              obj
              
                .
              
              StartPoint
              
                )
              
            
          

3、快速选择

(1) 滤出0图层上的所有圆

            
              
                " ********************************* ---- 创建图元 ---- ********************************* "
              
              

acad 
              
                =
              
               Autocad
              
                (
              
              create_if_not_exists
              
                =
              
              
                True
              
              
                )
              
              
acad
              
                .
              
              prompt
              
                (
              
              
                "Hello! Autocad from Python."
              
              
                )
              
              
                print
              
              
                (
              
              acad
              
                .
              
              doc
              
                .
              
              Name
              
                )
              
              
                [
              
              pnt1
              
                ,
              
              pnt2
              
                ,
              
              pnt3
              
                ,
              
              pnt4
              
                ,
              
              pnt5
              
                ,
              
              pnt6
              
                ]
              
              
                =
              
              
                [
              
              APoint
              
                (
              
              
                40
              
              
                ,
              
              
                40
              
              
                )
              
              
                ,
              
              APoint
              
                (
              
              
                500
              
              
                ,
              
              
                500
              
              
                )
              
              
                ,
              
              APoint
              
                (
              
              
                300
              
              
                ,
              
              
                200
              
              
                )
              
              
                ,
              
              
                                   APoint
              
                (
              
              
                600
              
              
                ,
              
              
                200
              
              
                )
              
              
                ,
              
              APoint
              
                (
              
              
                700
              
              
                ,
              
              
                200
              
              
                )
              
              
                ,
              
               APoint
              
                (
              
              
                100
              
              
                ,
              
              
                0
              
              
                )
              
              
                ]
              
              
                # 创建点的另一种方式
              
              
pnt 
              
                =
              
               np
              
                .
              
              array
              
                (
              
              
                [
              
              
                50
              
              
                ,
              
              
                50
              
              
                ,
              
              
                0
              
              
                ]
              
              
                ,
              
               dtype 
              
                =
              
               np
              
                .
              
              
                float
              
              
                )
              
              
acad
              
                .
              
              model
              
                .
              
              AddPoint
              
                (
              
              pnt
              
                )
              
              

LineObj 
              
                =
              
               acad
              
                .
              
              model
              
                .
              
              AddLine
              
                (
              
              pnt1
              
                ,
              
               pnt2
              
                )
              
              
CircleObj 
              
                =
              
               acad
              
                .
              
              model
              
                .
              
              AddCircle
              
                (
              
              pnt3
              
                ,
              
              
                100
              
              
                )
              
              
ArcObj 
              
                =
              
               acad
              
                .
              
              model
              
                .
              
              AddArc
              
                (
              
              pnt4
              
                ,
              
              
                50
              
              
                ,
              
              
                0
              
              
                ,
              
              
                1.57
              
              
                )
              
              
EllObj 
              
                =
              
               acad
              
                .
              
              model
              
                .
              
              AddEllipse
              
                (
              
              pnt5
              
                ,
              
               pnt6
              
                ,
              
              
                0.5
              
              
                )
              
              
                " ********************************** ---- 选择集 ---- ********************************** "
              
              
                ## ke1078 欢迎到千岛湖  千云山庄
              
              

acad 
              
                =
              
               win32com
              
                .
              
              client
              
                .
              
              Dispatch
              
                (
              
              
                "AutoCAD.Application"
              
              
                )
              
              
doc 
              
                =
              
               acad
              
                .
              
              ActiveDocument
doc
              
                .
              
              Utility
              
                .
              
              Prompt
              
                (
              
              
                "hello world\n"
              
              
                )
              
              
mp 
              
                =
              
               doc
              
                .
              
              ModelSpace


              
                def
              
              
                vtpt
              
              
                (
              
              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
              
                )
              
              
                # 添加名称为“SS1”的选择集
              
              
                try
              
              
                :
              
              
    doc
              
                .
              
              SelectionSets
              
                .
              
              Item
              
                (
              
              
                "SS1"
              
              
                )
              
              
                .
              
              Delete
              
                (
              
              
                )
              
              
                except
              
              
                :
              
              
                print
              
              
                (
              
              
                "Delete selection failed"
              
              
                )
              
              
slcn 
              
                =
              
               doc
              
                .
              
              SelectionSets
              
                .
              
              Add
              
                (
              
              
                "SS1"
              
              
                )
              
              
                # 过滤出在0图层上的圆
              
              

ftyp 
              
                =
              
              
                [
              
              
                0
              
              
                ,
              
              
                8
              
              
                ]
              
              
ftdt
              
                =
              
              
                [
              
              
                "Circle"
              
              
                ,
              
              
                "0"
              
              
                ]
              
              

filterType 
              
                =
              
               win32com
              
                .
              
              client
              
                .
              
              VARIANT
              
                (
              
              pythoncom
              
                .
              
              VT_ARRAY 
              
                |
              
               pythoncom
              
                .
              
              VT_I2
              
                ,
              
               ftyp
              
                )
              
              
filterData 
              
                =
              
               win32com
              
                .
              
              client
              
                .
              
              VARIANT
              
                (
              
              pythoncom
              
                .
              
              VT_ARRAY 
              
                |
              
               pythoncom
              
                .
              
              VT_VARIANT
              
                ,
              
               ftdt
              
                )
              
              
slcn
              
                .
              
              Select
              
                (
              
              
                0
              
              
                ,
              
               vtpt
              
                (
              
              
                0
              
              
                ,
              
              
                0
              
              
                )
              
              
                ,
              
               vtpt
              
                (
              
              
                2000
              
              
                ,
              
              
                2000
              
              
                )
              
              
                ,
              
               filterType
              
                ,
              
               filterData
              
                )
              
              
                print
              
              
                (
              
              slcn
              
                .
              
              count
              
                ,
              
              
                "过滤后的选择集"
              
              
                )
              
              
                for
              
               i 
              
                in
              
               slcn
              
                :
              
              
                print
              
              
                (
              
              i
              
                .
              
              ObjectName
              
                )
              
              
                " ************************************ ---- END ---- ************************************ "
              
            
          

4、尾声

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

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

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

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

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

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

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

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

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

为我打call,不如为我打款!

打赏可备注邮箱,本人会将上述代码发送给各位土豪!

Python AutoCAD 选择集_第1张图片


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

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

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

【本文对您有帮助就好】

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

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