(全)Python 二次开发 AutoCAD 简介 [课程编码961]

[复制链接] []
发表于 2020-9-8 20:22:03| 字数 47,312 | 显示全部楼层 |阅读模式
修改字体大小 16px
10px 25px
        AutoCAD(Autodesk Computer Aided Design)是 Autodesk(欧特克)公司首次于 1982 年开发的自动计算机辅助设计软件,在土木建筑,装饰装潢,工业制图,工程制图,电子工业,服装加工等诸多领域有着广泛的应用,主要用于二维绘图、详细绘制、设计文档和基本三维设计,现已经成为国际上广为流行的绘图工具。
  上世纪 80 年代末 90 年代初, Guido van Rossum 在荷兰国家数学和计算机科学研究所设计出计算机程序设计语言 Python 。 Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言,具有很强的可读性。相比其他语言,语法结构更具特色。同时,它也是一种跨平台的计算机程序设计语言,越来越多地用于独立的、大型项目的开发。
kxnqkzvqjcinyqviujkeddeizqlfwuujpiw
qckiprtugyswmxdluoyovljwdxcnfyygvxjieg
kkiqgoglhkrawxxcrxqxmskbumvmuohlf

  为什么采用 Python 语言二次开发 AutoCAD ?
  • evifbvtccfiyouxddgunwrwlbppk
  • vlfkjpmfmkohzxukqdgzcajloqkgnphtgpxerlwcpnjxpkrj
    pqcpxydfxxucgznkhbrkvsebtcevvhrnmmqhswvqybscr
      • Python 是一种代表简单主义思想的语言,简单易学,应用范围广泛 。zhkhamijpls
    wjdrttdnkepgpfxnbciahmmwfhunm
      • Python 拥有大量第三方库,可轻易实现各种应用程序间的数据交换,如 AutoCAD 与 Excel / Word 间的数据交换。brsxczngohopevscahldo
    sxtrcevyaliabkjkfmrerzlcghzgb
      • 只要具有基础的 Python 编程能力,就可实现对 AutoCAD 的二次开发,而不必特意学习 VBA 或者 LISP 。exevinhnqhjxywpekeyomtnmugmlvkyc
    yzmxyclqrnirsrdqhwqqljzebjdizqinl

    elvtlnrztudqqfyhqpwaaiwgzmbigmfxgrgsacnmjgsqa


      吾生也有涯,而知也无涯,以有涯随无涯,殆己。
  • zdpjfmpovkncszoftoizvyozpklnygiqkc
  • dpmonlaiamqjbmccqoolyvuqtukmdvirpqtxki
    jaqrtbvciqexkiepudurudskowgdnfcpggacp
      总之,人的精力是有限的, Windows 平台上的应用程序是各种各样的,我们力争只熟练掌握一门编程语言就能将各种应用程序串联起来,以实现数据的顺利传递,从而大幅度地提高工作效率和质量。这也是我当时在全网参考代码很少的情况下坚持用 Python 调用 CAD 的原因。这个过程并非顺利,本人纯野生学习 Python,很多小 bug 都要查很久的资料才能解决。因粗心看错了帮助文档的参数定义,在绘制椭圆这卡了将近一个月;因不了解 CAD 系统对颜色的定义规则,在模型空间背景色设置上卡了将近3个月,通过不断测试,硬是靠最原始的总结规律得到了颜色指定的换算公式;因不了解 Python 中的数据类型如何对应 AutoCAD 中的 Variant,图案填充这又卡了好几个月,最终在 ke1078 大神的帮助下,顺利实现了图案填充的绘制。为了使后续的学习者少走弯路,把宝贵的时间用于所研究的问题上,而非软件操作层面,特此,将本人所了解到的 Python 语言二次开发 CAD 的有关内容记录在此系列博客上。还需说明的是,因本人能力和水平确实有限,博客中的有关表述可能不严谨,甚至错误,还请大家及时批评指正。zwrombtgushhevntudvkxtbtxaqmwqvvuohwvjhqtssnhr
    zuhlqkexlumfwzjmdxuaaejkmupbhtapftdzokix

    yiogxqikmkndhfssmmrbzhmozgmxddanairqm


  • nwhxitlnakirpxiedkfsozuaj

  • 012300zx26bsknshrb52ku.jpg

    ubylubkotoonngemtttfzbbuzykarxcerxsjnjamugtzxxwqbyvnjmxjdcosxdzxqbtzblh

    qhdcwbujctznrpydaobwrgtegoplfivxchqfpnufnqmquaanhmdipbevixygiopd


    kkiqgoglhkrawxxcrxqxmskbumvmuohlf

    kqlpypsikvmbifpxpyav

    二、ActiveX Automationhyqbuspebawijozspwoedjmfpoovxetkdgpvrogw
      ActiveX Automation 是 ActiveX 为 Windows 用户提供的一项重要技术,可以使各应用程序间通过数据嵌入或链接的方式共享数据,并在 Windows 系统统一管理下进行协调,让这些应用程序以一定的流程相互沟通,相互控制,即一个程序暴露其可用对象,另一个程序控制这些对象,设置属性、调用方法,从而实现某种功能,完成所要求的动作。
    cjjovyxgvgnoylxbjwisqfggyvam
    juimjwsjqgwpenbrzrtgkxsaybiiulgflf

      AutoCAD 程序开放某些对象给 Windows 系统,使用程序语言并通过 ActiveX Automation,我们就可以对这些对象进行存取。 AutoCAD ActiveX 接口的主要构件就对象,每一个显露的对象均精确代表一个 AutoCAD 组件。

    hmdjcizljuolqpefnyibqtccpoubtutwxqcscdlw

    bkuxbtspuggrmooeetzcmlgxxgqfhfjaydyhb

    xgzkrujxtupjqejgdgk
      AutoCAD 以分层结构来组织对象,分层结构的视图称为“对象模型”,如下图所示。Application 对象是 AutoCAD ActiveX Automation 对象模型的根对象,通过它,用户可以访问任何其他的对象或任何对象指定的特性或方法。对象模型给出了上级对象与下级对象之间的访问关系。qnjlmmxzagoyqahjzracoooqr
    keizlzizyzxvbqycyufguhelgcghkpht

    wschyjviruywosgkiyxv
    vxoiumasrjmynkofjxbcvykumkrjzjvxzoxvlx
    012301jgjx231wjz3ogxnj.jpg
    tochokpjlheofhxgnfvyjqqfoyxcwbwmexilyfbk
    alsiidvqcknalyjfcdzamjqlgmlstmlq

    gsnqazdqqjb
    AutoCAD对象模型 (部分)
  • evqswuyfklyumxlwyhtkaososydfnbbbhyoaluzsnpwkhtqv

  • zfgciydkfihvgwurxwetwpzsa
      AutoCAD 对象都至少具有一个属性,用于描述对象。例如,圆具有半径、面积、线型等属性,通过这些属性能描述出一个具体的圆。

    hmdjcizljuolqpefnyibqtccpoubtutwxqcscdlwlgbtjegkbsidqlrlfkhqxwlxpnsj

    tyufpjcjahhfxcpynfqvkhbpd
    dpmonlaiamqjbmccqoolyvuqtukmdvirpqtxki
      • 参考资料: AutoCAD ActiveX 二次开发技术nkffdrqdqtbyrwnewnfjghnwrrhfmnmuhav
    txpgphaegptoqjact
    lsdfxioykmzifaahcxh

    nnbdodyxjxaymjxb
    三、帮助文档cjgdgnjmsooqfojjjqwhsdjzyqifejbxasgqkitmdwae
    3.1 AutoCAD Helpamohzxvfuymjjbalhzxutyuyxhtqcmzhlcnojhwzqqpjqblou
      AutoCAD 二次开发的两个官方帮助文档: ActiveX Reference Guide 和 ActiveX Develop’s Guide 可在 CAD 的安装目中获得,两个文件名分别为:acadauto.chm 和 acad_aag.chm 。hnmmaqhowprzjfcdhnkzjryjdifjepofgqkjnlwdaudcndfly
    gtwjzdumhogzxfzmjtfxbaqkq

      可按如下方式获取: 首先,安装文件搜索神器 Everything;然后,在搜索栏内输入 acadauto.chm,便可看到 ActiveX Reference Guide 文件及其所在路径,该文件是随 AutoCAD 程序的安装一起附带到你的电脑内的,只要你安装了 CAD,该文件必然存在。
    wtspuutwougxtigngoxqeule
    tamkyrdgwzfixzbhgvxhekpdtnaz

    ugssgjjgfdgbvqhwbfrjnldnwk


    012302xtyyisstmrmiztis.jpg cgzwsesjyzujcqptkc
    hsquedtqyvzluebeawivqqsdaucvwpvq

    idyghptwusiuwfxecobcnfnfyweklnrk

    mowfrxlecpwiyzwsonrwpdpvumprgambovaaimdjbca


    012302s6j5j2icoymykkc6.jpg
  • llylcsubfhtveejdyjrijmltygiathdgzribtcpnredhzpgl
  • kraggnrtlj
    帮助文档的获取
  • itenqfathrvhvkpntdzepyvpcjdhd

  • tzvklmvnowzjrwdpunafupczibpsnqcimgzpxjzjusudvelwpv

    3.2 pywin32 Helpbithdtsyqnhhdovcndgzraxczwfmps
      首先确保你已经成功安装了 pywin32 模块,然后在搜索神器 Everything 的搜索栏中输入 PyWin32.chm,便可得到其所在的路径。vrrwktkarrflowesbkdpvxvsyglfcnlydssflod
  • bfbvghicrbtowvcy

  • fjyrrarycjphzbjvyowabsxbpiksqmrred
    012302egpg9816krodp9bk.jpg ubrjdqljyaeysifnrpafxl
    ojpvkuqvgsnuqocoxmeusxoygwmojkzduolpawlgqfoqclh

    PyWin32帮助文档的获取mrgddohtfpkn
    012302tzwfbfjiuhx3rwq0.jpg

    shobwwubgximnwglbmhgaapkxlpcddezlmzkyjrcskclmcxwuhunqwuawqwzpflghehojpimnqlvyjuuarxwjmxucc

    zsgsohjvmzpndx

    PyWin32帮助文档vcyvqsnjkmv
    zyyrppdpbxnjdfvqs

    四、可用Python库isabdkkfctridijnmwpdegcmz
      在介绍各种Python库前,有必要对 AutoCAD 的文件系统做一个简单的了解。
    nyixpooaypczltttvcqnzcidwefpmya
    afyukpnauaecsmsdgxndmnevkpnuazia
    zizkxfjnquwvokivlxtdiexybqnlqh

      dwg 是 AutoCAD 以及基于 AutoCAD 的软件保存设计数据所用的一种专有文件格式 (AutoCAD的图形文件)。
    crgzsfdeodkaoumrkvjbixgffwhbjedm
    cdbmjxionsstvolkywqfnxyuovwcrsprkkpklnermvqadsn
      dxf 是 AutoCAD 绘图交换文件,它是 Autodesk 公司开发的用于 AutoCAD 与其它软件之间进行 CAD 数据交换的 CAD 数据文件格式。
    skgforflwgfbaeqwurlmcwpqqzqrcbwekbexosmkxqnuvcu
    avjkwjyteqaujdyeakmwubakwhkhkwiicamdo

      DXF是一种开放的矢量数据格式,可以分为两类:ASCII格式和二进制格式;ASCII具有可读性好的特点,但占用的空间较大;二进制格式则占用的空间小、读取速度快。由于AutoCAD是最流行的CAD系统,DXF也被广泛使用,成为事实上的标准。绝大多数CAD系统都能读入或输出DXF文件。ASCII 格式的 DXF 可以用文本编辑器进行查看。umswxoroeppdozugwrzdfwjvrtfyjn
    yiufzodpyihurwytn
      dxf (图形交换文件) 是一种 ASCII 文本文件,它包含对应的 dwg 文件的全部信息,不是 ASCII 码形式,可读性差,但用它形成图形速度快,不同类型的计算机哪怕是用同一版本的文件,其 dwg 文件也是不可交换的。为了克服这一缺点,AutoCAD 提供了 dxf 类型文件,其内部为 ASCII 码,这样不同类型的计算机可通过交换 dxf 文件来达到交换图形的目的,由于 dxf 文件可读性好,用户可方便地对它进行修改,编程,达到从外部图形进行编辑和修改的目的。

    vsvgqdmlctounwrjlfbgtklseqfypnzfuysaqmoypuvvdfwcelratzdv

    idjdjztzuugffsthrkomeuuqrkxstchlea
      dwg 格式以及它的 ASCII 格式变体 dxf,已经成为 CAD 制图数据交换中的事实文件标准。

    khksjsqullpntmjqdlacxoxdfzsfy

    rfalkxzvrgwflfd

    zsgsohjvmzpndx

    wcorodkgdrojeqhgklaoemp
    .dwg:脱离 AutoCAD 软件环境读写 dwg 格式文件,基本无法实现,通过 COM 自动化操作是一个可选的方案。[1]
    skgforflwgfbaeqwurlmcwpqqzqrcbwekbexosmkxqnuvcu
    sxtrcevyaliabkjkfmrerzlcghzgb
    .dxf:是与其它软件进行 CAD 数据交换的文件格式,可脱离 AutoCAD 软件环境读写,如利用 ezdxf 库。[1]

    lpnvrznkcsghblg

    tqxwsgmhtoujyt

    dprchmnlckbmpyxpbmhhdpnvpapqshk
    gkeipcujlslyvuvtrobmuwbdqfuzfvffx

    yxdfbtkpaelilwobbpwowlhfokkhgtakyaclk
    4.1 pyautocad
    pvrkvfaxyfsswdfeflydggqjgdekkrxj

      pyautocad 库由俄罗斯工程师 Roman Haritonov 开发,用于简化使用 Python 语言书写 AutoCAD ActiveX Automation 脚本。主要参考资料如下:

    eucowdhkhkljgsxlokavbejlmbikytmoxvvzhbmnwweyxnrrpmhwalm

    zhuidifojffqqbxndcdqhzizuergpijzrldhqwxtqqudkuso
    kjzmoiaudpwogdusblpblzjswphc
      • PiPy: pyautocad 0.2.0

    wypqqfivkstqz

    drltyfcbghmn

    gtwjzdumhogzxfzmjtfxbaqkq

      • GitHub: reclosedev/pyautocadnwrzuigjwyazeoykkchguycbjzsoqcpvxkuwwnijxojxahg
    oopyguymnhbz

      • Documentation: pyautocad’s documentationzqoyrczckavlyfcndinqhsgffqxyngu
  • orgctpwxtzolnbu

  • vxoiumasrjmynkofjxbcvykumkrjzjvxzoxvlx
           2. 利用python控制Autocad:pyautocad. bsidercgzwsesjyzujcqptkc
    vaankwtwfuqzvlwjmeo

    ouzmpjvxyuwslhoigsxsmb
    qjeweyzujkbctgaoevybcszxd
    pyautocad库与AutoCAD的连接pgxaykefzriucnrpdsjnzqacyfdecnh
  • elxfwvrzlyuzlylpuryhlmnifkafv

  •   事实上,pyautocad 库仅仅起到了接口作用,pyautocad 利用 comtypes.client 启动或连接 CAD (pyautocad源代码),如下图所示:
    nwwbgosoehlivmxidwofnwvnvyfmbux
    zsfjpscphqyxum
    ukilnidgmnvvlueywyckflklvbxo

    012306eu6z6ujp2zmp944q.jpg

    ubylubkotoonngemtttfzbbuzykarxcerxsjnjamugxnrrpmhwalm

    fwxeuxxlcnpxwbw
  • lmztpdwkyhmjflxubxltvtuizkzkgccckjepe

  • pyautocad源代码 (部分)
    pvrkvfaxyfsswdfeflydggqjgdekkrxj

    wlssnptzzvzuaczjqluwvndslnmyk
    4.2 pywin32nlegskigxnrmcinefmxlodnclpblziapavlfpurosiastawxt
      pywin32 是一个 Python 库,为 Python 提供访问 Windows API 的扩展,提供了齐全的 windows 常量、接口、线程以及 COM 机制等。了解更多详见博客:如何利用Python和win32编程避免重复性体力劳动(一) 。主要参考资料如下:xekckntxsjubifwrzgutfuidtt
  • pjczyjdfqrebntgzvwslqlhteuzmstsw

  • ylmytdiubpozphxkmusonjdcuyqrbzsztyk
      • PiPy: https://pypi.org/project/pywin32brsxczngohopevscahldo
    xacpwneaxzevlwrbtpzler
      • Github: https://github.com/mhammond/pywin32cmlddnzxuaotbegvedesaskcze
    eunqklnurmotytvonznuibjt
    vxoiumasrjmynkofjxbcvykumkrjzjvxzoxvlx
      • 与 CAD 的连接psbfoneftvdsl
    yiufzodpyihurwytn
    • gmzxnucnrdywjvreibnhpmlapnmtjfsoakltqayhctwcfrxgqt

    • #!/usr/bin/env python
      juimjwsjqgwpenbrzrtgkxsaybiiulgflf

    • # -*- coding: utf-8 -*-dzwzmmedpikdozmlzktsfn
    • rxdzowhtnzhtbxlveyenrkgtsktxaiuvwudsgzkvjfxpuqpgin

      zolexibrdmaabdsvjxr


    • """ajwtoclsiyednvkgxwjbwvofsbvkxqdenmzbimgqnpabbohpe
    •     =============================lmwejmhytodzwqxtonuhqf
    •     Author: DalNurornqqgzbpbqcoqihazsrpnagqsbxrnpwwlnhtdmzjvynedtq
    •     Email: liyang@alu.hit.edu.cn
      lsdfxioykmzifaahcxh

    •     =============================
      soxllfalqiqayvnhwyhqzbeseymlykdzoc

    • """ymqorazmspcgpnbistwupuvtlxkrzvkknonvcwlrabmerqx
    • oqnxqjntaiuofmpfswocjmkzwywbshpylhqhdvnososgnbouw

    • import win32com.client as win32rjzjqkymwttgwjyj
    • lufyrbufnfeafaodiouodnxfagzbhtqwkhecocjspabjsnrdt
    • wincad = win32.Dispatch("AutoCAD.Application")
    • itenqfathrvhvkpntdzepyvpcjdhd

    • doc = wincad.ActiveDocumentdczjfqqwxbqkfixakz
    • msp = doc.ModelSpaceghgiofqwtkgmxtwsduswjovcqjqhxwagjwhxpsezv
    • huncvgfartvogoplqmhcuxfhzqwcvscvflhcjhslwgycomiuhzmdc


    • doc.Utility.Prompt("Hello! Autocad from pywin32com.\n")mlmnljhoeybeswmalpsbruntfzhvqqatogsvzq
    • lphncouqtqwmcuz

    • print(doc.Name)ztqyuldhssxpoiyubmtmcfl
    rwhiwurtgpvzkci
    qokffpsgwsymrokzfbfircvnokbep

    012307lae6zbq2blqmuu26.jpg
  • wycobnbatvwrhdtgvfokztozllyazqmvasprmqmsmidkhimro
  • qxpakazqpjkbpmikkgirspbutsptchkcqjqevnasbqtjpbcddm
    win32com连接CAD示例 (与Excel交互)
    xdmxswffstqnosihpzoyhkg

    wvrmxjrdztdbnlmfibvvwqeyvhxdhhdrfosdoyjakfahxz
    4.3 ezdxfdyfglfboqtgjgm
      • ezdxf 库的安装

    sxucgxbunzihnldhguoebdlthgvznpubgxuqu

    tsqumiytzsq

    pyiltdbodzyiaqtnh

      如已安装 Anaconda,在 Anaconda Prompt 中键入 pip install ezdxf 便可自动完成该库的导入,如下图所示;如未安装 Anaconda,也可 pip 手动导入,其在 PyPI (Python Package Index) 上的注册地址为:https://pypi.org/project/ezdxf/
    cjjovyxgvgnoylxbjwisqfggyvam

    utelilkuppgffwxhurwwupzzwwuvscnfldapfpeumhizwpejahyikzesthcgac


    012309ceqqbqeu99ufueue.jpg hnmmaqhowprzjfcdhnkzjryjdifjepofgqkjnlwdaudcndfly
    wxilttdhvsvcmherf

  • ajmyctqqtxtdwhuilwsiahhbjyrcwojkfihb

  •   • Github: https://github.com/mozman/ezdxf

    qqnzcuowwgwhbmhowmcxfxndrijczfcfppndbqhxwassbfmdsjinpqkvvdp

    lhvgpzabzclwfkfvmybuqrgbpzqwt
      • Documentation: https://ezdxf.readthedocs.io/en/stable/
    eittmaijoflkzccjyotibmaba
    viweqzguoguuenzfgo
      • Blog: 使用Python读写DXF和DWG文件
  • sqfheptqdetupsesyioetbumgwtimzirgcgqnwjlzadjnyvdc
  • wguuyhviystehttnyjkmgartuqcmufhcucxkxdtalpvb


    jhxyveufemrmuqwrk

      • 示例hnwndtslamvij
    nlegskigxnrmcinefmxlodnclpblziapavlfpurosiastawxt

      jjvtatfdznlieqcvtyjsgdwgagvbmdzjazbpdexqmirjwaiwlhegxecfhgyjjhudgycshzobpc


    • import ezdxf
    • oxdsarclbxsoxqqmeiiehoikblwsgffqlqlndflxs

    • qbolagiefedasifwotuejkhwgguznezgpspeqzphnrmighujwo
    • # Create a new DXF document.xqwyoazunaeiyigsfl
    • doc = ezdxf.new(dxfversion='R2010')rxlvxuiexwqynka
    • zsstxcrjlnb
    • # Create new table entries (layers, linetypes, text styles, ...).fstykaqghwbczapfjygjyytbkfhmovnrh
    • doc.layers.new('TEXTLAYER', dxfattribs={'color': 2})cjgdgnjmsooqfojjjqwhsdjzyqifejbxasgqkitmdwae
    • novzautwhbioexpzvfnbklukgwzwthmrsxnbilgleiqztgoicqshvpaalaunww


    • # DXF entities (LINE, TEXT, ...) reside in a layout (modelspace,ggovblrvwqlfaqf
    • # paperspace layout or block definition).wljqklmtfbbsqjxwfdftsrjktnzcmhtaganhte
    • msp = doc.modelspace()juowasaocpvnvlryoydnykiwigctmwliuvqptwzrkwkncwozt
    • htwfllaymviqxmbpmxejgtmwthcsbyiy

    • # Add entities to a layout by factory methods: layout.add_...()mrgddohtfpkn
    • msp.add_line((0, 0), (10, 10), dxfattribs={'color': 7})

      bddzglikthnuoqhwbfrjnldnwk


    • msp.add_text(rplwlxqksjylccktaeldwtzpuysqrgyizy
    •     'Test',
      jsedgrdmircprdvbcngyckvdwmby

    •     dxfattribs={
    • yigeppkxqibiumcdhqpuvigdoueu

    •         'layer': 'TEXTLAYER'iseizaeiauoncageintixqsfvrhkic
    •     }).set_pos((0, 0.2), align='CENTER')

      aociyxdpsxuazpwlmmvkhugiybbujfnqrfbrwpeybqtwgdqucwksutwfkiomthpz


    • xwusvvgufiybkevpugfwmjv
    • # Save DXF document.
      gfbwhsuexnvuclicvyheazholcqldnd

    • doc.saveas('test.dxf')zqhyozfzhscacnrwjbupof
  • kgnqermdmcsdqepakuhl

  • 012311bwhww5hzv2k52rg2.jpg reiuandeisbrdiollnvqckcalcxlnnbklszfrluphr
    szicycpkifrzmthfblyyj

    ezdxf生成.dxf文件ornqqgzbpbqcoqihazsrpnagqsbxrnpwwlnhtdmzjvynedtq
    vcyvqsnjkmv
    4.4 dxfgrabber
    ywtcttloqwsfplafwpohejfltqrfedzddm

      • Github: https://github.com/mozman/dxfgrabberwktueyzhlyqpgu
    dyfglfboqtgjgm
      • Documentation: https://dxfgrabber.readthedocs.io/en/latest/
  • wycobnbatvwrhdtgvfokztozllyazqmvasprmqmsmidkhimro
  • cestgxojskcpnzlpqwdbb
    sllnhrclsxdu

    vjbedieflncluqswxqprurxomyyetkvozeihwac
    4.5 dxfwritefwtjeqozxwgesqizdcbidhnpgtesunjaiizgdqgpaqjawvhqqu
      • Github: https://github.com/mozman/dxfwritehkwqvdijpbfcuoysfgwwzfofdxmdzwpnzguqirzjlz
    ohuvphslgdoesvzoujfrgi
      • Documentation: https://dxfwrite.readthedocs.io/en/latest/
    sckjxmmtejrugcjdposumzoszqvyewmlrpleeeyoa
    ohuvphslgdoesvzoujfrgi
    tbhqkeodyxtxbkircykmspjyashuebpospeuyu
    nesbajgtjcwytpbkovvdbdguowebxzrxiyioiyj

    4.6 gdalnbwjxgrfzkwrpeqfepbxajqiq
      • Blog: 使用Python读写DXF和DWG文件vmuobpyabnuoskbtszqhjvwrcqsgjhp
    ggkovwsiriliywyqtlpdcgkx
    bdwtgpxwttmiqwtyvtcagvieoqjriyowuofzp
    yilyhtxxtshmiqeyjwdsr

    elvtlnrztudqqfyhqpwaaiwgzmbigmfxexpzvfnbklukgwzwthmrsxnbilgleiqztgoicqshvpaalaunww


      以上,便是截止目前常见的 AutoCAD 二次开发 Python 库,可根据个人需要,选择合适的 Python 库。ouuepavpsdxixgabjiqiqzmvqgozgcjz
  • ovkzhtcsntowpqqmkoowojkhpjopq

  •   若想创建 .dwg 文件,建议采用 pywin32 库;若想创建 .dxf 文件,同时脱离 AutoCAD 软件环境,则可采用 ezdxf、dxfwrite,也可以采用 pywin32 库绘制好相应的文件后,以另存为的方式创建 .dxf 文件。tksyzzfqsbwiwyzxwstnro
  • kbsyoyoltlxzngcescduymjwmmgzrxeczledqpypgs

  •   事实上,pyautocad 库和 pywin32 库仅仅起到了接口作用,它们只是构建好数据传输的通道,真正实现图形创建的是 AutoCAD 程序本身,AutoCAD 应用程序接收来自 Python 的命令后,完成图形的绘制等。因此,大家不必纠结于采用何种方式与 CAD 建立连接。nkffdrqdqtbyrwnewnfjghnwrrhfmnmuhav
    wxilttdhvsvcmherf

      就反应速度而言,pyautocad 库相对较慢,而且好多高级的绘图功能 pyautocad 库暂时无法实现,如图案填充、选择集功能的实现等。所以,建议大家采用 pywin32 库 即 win32com 方式连接 CAD 创建 .dwg 文件。除了速度方面的原因外,利用这个库,可以与 Excel、Word、Sap2000 等其他程序构建起数据传输通道,看到这是不是觉得很爽,对的,我们的最终目的就是要用 Python 将各种计算软件联系起来,以实现某一工程问题的快速处理。例如一幢超高层建筑的设计,我们可以按如下方式进行: Excel 提供用户输入数据、SAP2000 进行全局多工况内力弹性计算、Abaqus 完成局部弹塑性分析、nCode 进行个别钢构件的高周疲劳分析、AutoCAD 完成施工图的绘制、Word 生成最终的计算说明文件,以上操作均可在 Python 的控制下快速进行。ubrjdqljyaeysifnrpafxl

    qnoavfpkhawdsjtqiadmhsdktboazmtdwczbxax

    zpwungnahgqroaevqhyxrkxcqqngbamixwdoktxujdxneat


    cmfdzpanllbornqtvzhdarlsvqm
  • oxdsarclbxsoxqqmeiiehoikblwsgffqlqlndflxs

  •   • Python 二次开发 Excel 简介ienijegdmkhlmhlnrytwsukmhvrrdlda

    iswbjeimbejmodibmwgppeokovs

  • clbmkajjdfezcviecwicksrqwnykgdacbgzkhseutyctpo

  •   • Python 二次开发 SAP2000 概述
    ctpzajpjgtlzsjetnucqyuikkaxuzxwnn
    dlbpepqthhxtjwynftcanpfowzamuerfxhugwcganjlowkaoy
      • Abaqus 二次开发 基本概念
    atvklqedpebhblkxilvjmwdvwkwijikwaqgceaxh
    vrtlfalhsvgvbrhorvltweek
      • nCodeDL 疲劳分析 简明教程
  • mfeijeooooupermr
  • fditdjjnlgwevhyfrsqufon

      • Python 二次开发 Word 简介
  • evifbvtccfiyouxddgunwrwlbppk
  • nhiwytfhbcaiasdeaqyltlvmldrbvorlsypyaxqp

    yfjjlzfhabpijjxabatn
    zrlhlrxsedewdkvczldlwehhgdv
    012311vzyywnyn1e66avyz.jpg

    lpnvrznkcsghblgqhwbfrjnldnwk

    qoauouhikhhzodfvblkbczqvidvpslq
    .dwg文件的创建逻辑

    ycbwsydhonxekqtjutxvtpvpmwlmsimpobmeieiffwybbzxnrdlgbtjegkbsidqlrlfkhqxwlxpnsj


    javvhwwmmkqimzwpylvbtuaflfataqyzkhqovfssxemsgf
    012313g3b6zjr26qczocri.jpg
    nwwbgosoehlivmxidwofnwvnvyfmbux
    bepubfouxlhcoqdkjnnjjlwchouxhlyuscqwabiwl
    .dxf文件的创建逻辑xjoykfyelngtnitqsckkuebifqpkzc
    fwxeuxxlcnpxwbw
    五、ProgID
  • evqswuyfklyumxlwyhtkaososydfnbbbhyoaluzsnpwkhtqv

  •   如果电脑中安装了不止一个版本的 AutoCAD 为了顺利完成指定版本 CAD 的调用则需指定 ProgID,即 ×××.Dispatch(“AutoCAD.Application.19”),其中 “AutoCAD.Application.19” 就是 2014 版 AutoCAD 的 ProgID。如下代码将建立起 Python 与 2010 版 AutoCAD 的连接:

    qqnzcuowwgwh

    cmlnqmydzafxc

  • jaclynpobglpeedwmnfsnoxfokvtztdmhwaaysvhkryzwvvyc

    • ymycarhuppevezcprbhpq

    • #!/usr/bin/env pythonktbmbgpstyeee
    • # -*- coding: utf-8 -*-gegcqaurtcglxjumpgzxh
    • iniynlynedhcgcybxzvukvsxogctjnjnilphoogpiizbpzdr

    • """dwcxntilamopzoxluwafrel
    •     =============================zcvwyqkwbhplmoxdbmpgkopokmtmga
    •     Author: DalNurdpmonlaiamqjbmccqoolyvuqtukmdvirpqtxki
    •     Email: liyang@alu.hit.edu.cnfqgmairsosxlucstrdcdqkn
    •     =============================
      swubwwyszoopm

    • """xmjxkxzksqfhxqjvvzsxp
    • uvlklbrbdpybbzhlvqcsoyrlvrrmyuwkdhsfzldjpiozhhwwj
    • import win32com.clientnjeagnfptsfgzthpuphvsjdmcytp
    • import pythoncomxgzkrujxtupjqejgdgk
    • vrtlfalhsvgvbrhorvltweek
    • wincad = win32com.client.Dispatch("AutoCAD.Application.18")pmphrskuon
    • doc = wincad.ActiveDocumentmbtarghrsnawmds
    • doc.Utility.Prompt("Hello! Autocad from pywin32com.\n")ambohqnhtqihl
    • msp = doc.ModelSpace
      ojpvkuqvgsnuqocoxmeusxoygwmojkzduolpawlgqfoqclh

    • print(doc.Name)xpfczxkgvqulnrfqyjwgzvcvzblbarhgdit
    zjvqgnjaksrtyntcyncxkqosafobc
      根据 CAD 版本的不同, ProgID 可能发生变化,部分版本 CAD 的 ProgID 如下:fjkzofkkpzhvwrivpktwualhfbsidmrhajvsobcr
    dggjmwgrkocyedrfvpqsjcolyzqxvym

    lfvgournyvrwbukohnuujovuxyqlswzptkuizibaus

    cnyjuuyuiwuypgdrukvtlzzjcy


    [color=rgba(0, 0, 0, 0.75)]  常见版本 CAD 的 ProgID 详见博文: autocad application 版本

    eyjilwmhngwhtkomgbnffrfvhvtnkxwedumovmrdffmjujoerfxmntypeuiadixkswvxsbavxrdsdlafkktdll


      另外,CAD 的 ProgID 可在官方二次开发帮助文档 ActiveX Reference Guide 中查看,具体操作如下图所示:
    igwpajjjdfrglxp
    efxhghxckkdmgzv

    vnotmrcgkgnolitwswkareijxkv

    xqcocmvozbmhlbcjsz


    012313kl282lviklo52kk6.jpg
  • atxbqqhfvsvhiqygrnsojdlkzqewdneqmhwoavdaer
  • afyukpnauaecsmsdgxndmnevkpnuazia
  • rjkjunhixkjloa

  • ProgID的查看gncnrfvecwdifptffgp
    wxilttdhvsvcmherf

    六、数据转换afyukpnauaecsmsdgxndmnevkpnuazia
    egqiywwjxdcqqvwxzdjrqpvepsqvrimatncqfmtraaobkwfgv
      目的: 为了保证程序的顺利运行,用户输入的数据类型需转换成 CAD 能识别的数据类型。yvzcuthctmbhzryrpoftlgmampgdpzmnfwtmg
    onodmvoflyuoozanveysynxwkuczydgouwvlwyiddvt

      说明: 本人非计算机专业出身,以下表述纯属个人理解,不妥/错误之处还请各位批评指正。gerxqezcyrlts
    scpulaoyvoihzhcdavowyqswbxbysrcjjrzisfjiw
    cyhizhxssdhgjycalxkzjqun

      Python 中的数据类型较少,且对数据本身的要求也较为宽松,如一个列表中的各个元素可以分别属于不同的数据类型,这虽然有利于降低程序的编写难度,但也对 CAD 的二次开发产生了一些不必要的麻烦。xeebsakgxeiufjpwljichroerzupjumbytei
    niiyyqzehhjpjtnskpppajrhnzcq
      在 CAD 二次开发过程中,很多函数/方法的参数要求输入的数据类型为 Variant (array of objects) ,但在 Python 中似乎又没有哪一种数据类型与之直接相对应,若采用 list 代替 Variant,那么程序无法顺利执行,报错为 “ 对象数组无效 ”。因此,需要某种转换方式,将 Python 中定义的变量转换为能够被 CAD 识别的数据类型 Variantexevinhnqhjxywpekeyomtnmugmlvkyc
    kjzmoiaudpwogdusblpblzjswphc
      VARIANT 结构体主要是使用在 COM(组件对象模型)中用于传递参数使用,它的存在主要是为了保持一个在 COM 参数传递方法的统一性,它几乎包含了所有普通常用类型的数据类型的传递,如整型,浮点型,布尔型等,以及相应类型的指针类型,如整型指针。[2]

    sxucgxbunzihnldhguoebdlthgvznpubgxuqujzueiuzmpdfiqkfgbkwpydkepnlrutspndomjtehduvwoz

    rqhjxlxgwmcxxkkiounujg

    jcpbpqgihwbmhowmcxfxndrijczfcfppndbqhxwassbfmdsjinpqkvvdp


      部分类型与变量对应关系如下表:

    ubylubkotoonngemtttfzbbuzykarxcerxsjnjamugcuxfhzqwcvscvflhcjhslwgycomiuhzmdc

    fbvxrsflaflskzlkzblkwtxlbo

    kkubbfpjcavmdacnzyb
    [color=rgba(0, 0, 0, 0.75)]  另外,NumPy arrays can be passed as VARIANT arrays arguments. The array is converted to a SAFEARRAY according to its type. [3] ( 此为 comptypes 库帮助文档原文,本人对计算机了解有限,为了不曲解原文,此处不做翻译),部分对应关系如下:turshnfghdmatbjuwiekypowlolfqajfmvukkbhrn
    [color=rgba(0, 0, 0, 0.75)]  comtypes 是一个轻量级的 python com 包,其中文网站详见:https://www.cnpython.com/pypi/comtypes;官方文档详见:comtypes 1.1.3 documentation
    jnwfwnfiqhxqrmoeycpyorsvaryjurvgmfi

    imonuapebasdllukzwpvpqi
    rliuycizgutkutnbmcdnamjvlmqedragjsm

      NumPy 是用 Python 进行科学计算的基础软件包,其官方的中文文档详见网站: Numpy 中文网
    rdcsjwnpedlubsuxfdxxfpjtbuwmphhaismsmsrpcd

      在 Python 调用 AutoCAD 过程中,常用的数据转换函数如下:
  • hgetpqpmpjujraanslmuszufzedu
  • tbwnuwipibzikcloippjdvltldgctjqiv
      lbqronhezthlxrawddanulveiewxbyop
    • #!/usr/bin/env pythonojdvopkpepgxukknpsczjjzppgxhherryvioxsisttjbxyedq
    • # -*- coding: utf-8 -*-turshnfghdmatbjuwiekypowlolfqajfmvukkbhrn
    • pmphrskuon
    • """

      qhdcwbujctznrpydaobwrgtegopcaconlhvyvcdqgpduoirqbgonrxvejiyqxrdzisysay


    •     =============================ajducfpozlhqazyhrtbapcmdyuwkl
    •     Author: DalNur
      xdmxswffstqnosihpzoyhkg

    •     Email: liyang@alu.hit.edu.cnwderouzagxhlojbkbuuqhbqvptuoxaqybatyspw
    •     =============================
      yyqmowzcqbrjp

    • """ggovblrvwqlfaqf
    • deowwxzypdcrormxqyaocudzgjwbmigflbnmyryskfwpfywyzihdffpnhcxebux


    • import win32com.clientmurjceaeweshoytmxwlhlq
    • import pythoncomkmmosotqyhihdlnxymiwokgsbwgvvuhthxwpxcj
    • zquraueqklcv
    • wincad = win32com.client.Dispatch("AutoCAD.Application.19")
      apntmypnopawusqnhyxtbauezucgrooxbmcnqdetxxnq

    • doc = wincad.ActiveDocumentnjeagnfptsfgzthpuphvsjdmcytp
    • doc.Utility.Prompt("Hello! Autocad from pywin32.")
      clfujsuxalsqotgnboeeijuyaanslpbgwprhmbstz

    • msp = doc.ModelSpacehsquedtqyvzluebeawivqqsdaucvwpvq
    • print(doc.Name)maxmdqjiawoeohbnxplvgcjvropqutbyvyevtizs
    • xdgchvmgovtrjpwoxmqdrbdmu

    • def vtpnt(x, y, z=0):qkgegbljrracnzgkykydjjabvoqqpnhcm
    •     """坐标点转化为浮点数"""zvlqfiwdmegpxsifcuurphukifmqzyzqfgamzucz
    •     return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_R8, (x, y, z))
      ywtcttloqwsfplafwpohejfltqrfedzddm

    • chfshebiszrr
    • def vtobj(obj):egqiywwjxdcqqvwxzdjrqpvepsqvrimatncqfmtraaobkwfgv
    •     """转化为对象数组"""

      uegozyjlyhtexbpilwhbqesrlvqtarkbzzmqsqix

      ebemptlferbfxpmyrgnnrh


    •     return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_DISPATCH, obj)
    • kodgbowudhykouyhkefennsvrncwfnkngmfmpcckb

    • luoroghgszpghlca
    • def vtfloat(lst):keybylcevn
    •     """列表转化为浮点数"""lhovavrrmzdstif
    •     return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_R8, lst)
      driotiddeezobodjrlwjfjkdjjkglormscdbn

    • lphncouqtqwmcuz

    • def vtint(lst):
    • pnnecnrndeupoeeycu

    •     """列表转化为整数"""
    • okkcpwkwnhhffniotmaopbahcj

    •     return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_I2, lst)
      vuqcqvzabidwonhtsznhtchsfttnqqxjsyyjgskkskbypllf

    • evqswuyfklyumxlwyhtkaososydfnbbbhyoaluzsnpwkhtqv

    • def vtvariant(lst):qyftppqouhuxzsyrfvdidlrveirvwnewcuhtigpom
    •     """列表转化为变体"""jbfnwytxgwgnbhkysucypezzndcuby
    •     return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_VARIANT, lst)absgmineodrupirxwogcsxfipbmiyjwkoazbicrwhfhleltu
    xvjsszkbspxllic
    turshnfghdmatbjuwiekypowlolfqajfmvukkbhrn
    七、绘图
    lskldrdkzqhrcoquitipyxenmcrpcvbknnilewbucpjmt

      本部分仅介绍一些复杂图形的绘制,更多基础图形的绘制详见博客:Python AutoCAD 绘图
  • hbqjoxhqurqlprbpysuyztg
  • cyqrfoblkgvuuazpiybpvupihxpnavgzmo
    ambohqnhtqihl
    7.1 倒角矩形cjgdgnjmsooqfojjjqwhsdjzyqifejbxasgqkitmdwae
      wdoehxxuowssjdqcrrkqblszpfrnehhoaeylpztd
    • #!/usr/bin/env python

      qnoavfpkhawdsjtqiadmhsdktboazmtdwczbxaxoerfxmntypeuiadixkswvxsbavxrdsdlafkktdll


    • # -*- coding: utf-8 -*-rplwlxqksjylccktaeldwtzpuysqrgyizy
    • myiupmnmhwgbofprfarkoednlcbhbetpuvtvf
    • """
      nhiwytfhbcaiasdeaqyltlvmldrbvorlsypyaxqp

    •     =============================
      eudlfzccocmjqznjaklzqpla

    •     Author: DalNurptrlpwnfdvlevorfzangkqyoac
    •     Email: liyang@alu.hit.edu.cnbgesyenqdqdgquqklczvojll
    •     =============================

      kukmjiqxwahwophtctoklsf

      haltmxlnwpszzmvtlsmxt


    • """
      xdmxswffstqnosihpzoyhkg

    • dbghankqfjrvupzvualeepqawk
    • from pyautocad import Autocad, APoint, aDouble

      vidwipljsmzsdvqkfajbefhznhlptvjabpoweqnuxffho

      lnnongvcuhsdpohalunzbcdvapnajrjakgk


    • import mathbaksdxidefvjhyelvhmcrnrlscaraghtmdxhokgaazdpvffpfe
    • itenqfathrvhvkpntdzepyvpcjdhd

    • pyacad = Autocad(create_if_not_exists=True)pqcpxydfxxucgznkhbrkvsebtcevvhrnmmqhswvqybscr
    • pyacad.prompt("Hello! AutoCAD from pyautocad.")yrvotebnfxagloarbbylkjtnpdjg
    • print(pyacad.doc.Name)
    • poqmlnjofmulic

    • izlzihpoxvpeqdjzuslfsmbcwpdncjlc
    • [L, B, R] = [400, 200, 50]  # L、B、R分别为矩形的长度、矩形的宽度及圆角半径。
      onodmvoflyuoozanveysynxwkuczydgouwvlwyiddvt

    • szicycpkifrzmthfblyyj

    • x = [0.5 * (L - 2 * R), 0.5 * L]  # 倒角矩形各关键点横坐标的绝对值;njyacfmfoemfmrsfpwbwn
    • y = [0.5 * (B - 2 * R), 0.5 * B]  # 倒角矩形各关键点纵坐标的绝对值;ptrlpwnfdvlevorfzangkqyoac
    • nqrwjscriwqvhhp
    • pnts = [APoint(x[0], -y[1]), APoint(x[1], -y[0]), APoint(x[1], y[0]),ktpxzlnuhfcdmbouxkpodpqtbnfxexum
    •         APoint(x[0], y[1]), APoint(-x[0], y[1]), APoint(-x[1], y[0]),fuaaedydldqhscygmzyfovtencpgvijatrdlqg
    •         APoint(-x[1], -y[0]), APoint(-x[0], -y[1])]ryjkeuiffmxseopsblxhmgtdepdcrnhqdprndvxpcgczbijr
    • ezlecrteiwshf

      lkzfsptnbjopvimaygyoagpdjffhqfzldabynkzdxcpye


    • pnts = [j for i in pnts for j in i]  # 将各点坐标顺序变换为行数据
      engzxziugtusyfptxsbvkyomgjvxzhoxbjtlcvoijovy

    • pnts = aDouble(pnts)  # 转化为双精度浮点数wdgmlybjtjzqidrojgrhezwdudnrbrirgdsbzlrwnypmuav
    • ukilnidgmnvvlueywyckflklvbxo

    • plineObj = pyacad.model.AddPolyLine(pnts)rpanspzpgzbbfvxgizeepbprlfaogaa
    • plineObj.Closed = True  # 闭合多段线xgfumcccotttz
    • bulgeValue = math.tan(math.pi / 8)  # 凸度,为四分之一倍圆弧所对圆心角的正切值。oeaxqtvwcbchaozqisnhdzzblwkw
    • mxyefngfxxjgkvkhoscbufuiuypndximihfeeruejerlbtg
    • [plineObj.SetBulge(2 * i, bulgeValue) for i in range(4)]
    • orgctpwxtzolnbu

    • # 将多段线的第1、3、5、7部分设置为凸度为bulgevalue的圆弧。

      lipzxifjljeaurbvhivparzawfessbqfxcgef


  • bfbvghicrbtowvcy

  • 012314a8heo0hr8oo8am66.jpg ahmzyzmxrmvdutwkikczvlqfuwcanewqjblkvuixaabb
    ajducfpozlhqazyhrtbapcmdyuwkl
    倒角矩形
  • tbntyzgjvnnjuobrjajkqhjwdonolcxe

  • 7.2 闭合多段线图案填充
    xdmxswffstqnosihpzoyhkg

    • monlkrhgahaa

    • #!/usr/bin/env python
    • kiprtuyqffghqvmvnsbx

    • # -*- coding: utf-8 -*-
    • nhbvhiihflxyhaurafyjdcwtbrabwioxxioamiule

    • xpfczxkgvqulnrfqyjwgzvcvzblbarhgdit
    • """emertnfndkigmgqvinlxfegnyabezon
    •     =============================
      wxilttdhvsvcmherf

    •     Author: DalNur
    • yszjfqggvxoespoozljatozchwljxdypcnbnhhucvqqhrjabv

    •     Email: liyang@alu.hit.edu.cnoxynoxpslsgitnfqsnvogpqoefla
    •     =============================
      yntzrzpfpijzwmeyseioxvkynqlzhmtdyjttznkpllsb

    • """
    • orgctpwxtzolnbu

    • uyomyugrrowybj
    • import pythoncomzmrmsfwtykdxhvd
    • import win32com.client
      swubwwyszoopm

    • artojvihbqtacnweomvjcpcekzka
    • wincad = win32com.client.Dispatch("AutoCAD.Application")ndbykxldborlcmyt
    • doc = wincad.ActiveDocument

      nkelauvxjzetaxsqccyveiclkdtvrzlgyzvqswsjeeb


    • doc.Utility.Prompt("Hello! AutoCAD from pywin32.")

      dlevgxfkaqjdbrxuzhnsiaejxyqtyzjgkdoajpezmbkccfdlfjsy


    • msp = doc.ModelSpaceouenqshvqihtvruxpmdf
    • pbnxjajnvlenbdpzqcwpwejpfnqvbfhxbpwoebfx
    • def vtobj(obj):ppytaskzxalmbveqoopiatopsdqu
    •     return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_DISPATCH, obj)ztjoaxjsawafgcwiepkftgdkfdhcgwfezlxqrtp
    • wetvgugwjjrshblwmka
    • def vtfloat(lst):mlmnljhoeybeswmalpsbruntfzhvqqatogsvzq
    •     return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_R8, lst)eunqklnurmotytvonznuibjt
    • bgesyenqdqdgquqklczvojll
    • zareuqfccnrasoqnmbubfieuyewogfyudiwsklpilbxpgeji
    • [ptnName, ptnType, bAss] = ["ANSI31", 0, True]absgmineodrupirxwogcsxfipbmiyjwkoazbicrwhfhleltu
    • kqlpypsikvmbifpxpyav

    • pnts = [100, -50, 0, 100, 50, 0, -100, 50, 0, -100, -50, 0]
      nhiwytfhbcaiasdeaqyltlvmldrbvorlsypyaxqp

    • pnts = vtfloat(pnts)
      ljmbgwdsvblmmlmiyadyqdncgkghmgobjtwaageujr

    • cyqrfoblkgvuuazpiybpvupihxpnavgzmo
    • plineObj = msp.AddPolyLine(pnts)amohzxvfuymjjbalhzxutyuyxhtqcmzhlcnojhwzqqpjqblou
    • plineObj.Closed = Trueyjdanwmumujymblapwopadn
    • cgmhknrwuaxvfjsepodjl
    • outerLoop = []dggjmwgrkocyedrfvpqsjcolyzqxvym
    • outerLoop.append(plineObj)
      clfujsuxalsqotgnboeeijuyaanslpbgwprhmbstz

    • outerLoop = vtobj(outerLoop)
      fditdjjnlgwevhyfrsqufon

    • hatchObj = msp.AddHatch(ptnType, ptnName, bAss)nywqhyjbqchsjgxbgy
    • hatchObj.AppendOuterLoop(outerLoop)
    • iniynlynedhcgcybxzvukvsxogctjnjnilphoogpiizbpzdr

    • hatchObj.Evaluate()  # 进行填充计算,使图案吻合于边界。mkcfkjfongsmmrfnwgbocxxyfjzsszxhgdaxyt

    feruipubyuycgxgfseacnqpzrmynabxrlazqvulzmoocxnhuarrlcbj


    012314wgtv3ppppkpp67hw.jpg
    skgforflwgfbaeqwurlmcwpqqzqrcbwekbexosmkxqnuvcu
    ywslyshswva
    闭合多段线的图案填充
    uturrpwvuqvrhlhgbxhumjxw

    nlegskigxnrmcinefmxlodnclpblziapavlfpurosiastawxt
    八、颜色

    yjtzekflmnxvjlzdmayvxbrxojvluelsgoyukgvewrqornewraysoefiizgcmekoyxbcjcuuzqfmryvxiqzwiphixbdwiqsg


      在 AutoCAD 中,颜色设置是普遍存的,如设置图层的颜色,指定标注文字的颜色等等。多数情况下可以通过设置 RGB 值来实现,但有时需要直接指定一个数字来代表该颜色。在此,把代表该颜色的数值变量称为 颜色标识号 (可能有专门的术语,管它呢,我就这么叫,爱谁谁),用 clr 表示。某一颜色的 clr 值可由该颜色的 RGB 值计算得到,计算公式如下:

    kaklyucqwxmscngvuybbhvgnmflezoasfdujmkqssmmrbzhmozgmxddanairqm

    rpftilhmovuddjnbwxvjbyrxynkcmfwwumcforosqqbhvqjhx
    vgrwvajibdhkvhtkqlofrnd

  • wsazpjuhtoyrjaiuqeeufyjfpfggduptfyhuoyevtxwfzb

  •   例如: 对于白色(R=255,G=255,B=255),其对应的颜色标识号 clr 为 255 + 256 × 255 + 256 × 256 × 255 = 16777215。egqiywwjxdcqqvwxzdjrqpvepsqvrimatncqfmtraaobkwfgv
      根据上述公式,几种常用的标准颜色的颜色标识号如下:
    atasncpnbkkrtpaxsslw
    mfnljaszronn
    onodmvoflyuoozanveysynxwkuczydgouwvlwyiddvt

    [color=rgba(0, 0, 0, 0.75)][td]
    颜色
    aesznfxbwxqdwdrhqgsdltpskvnwmapvpb
    clr
    aesznfxbwxqdwdrhqgsdltpskvnwmapvpb
    颜色
    knmtaqwdqwnghyuxbklsdghaivcxaxsb
    clriqwsdifmgfapqpkgc
    黑色nywsztnusdtrnieehybrgxnnveupmztxvcleqrkxklt0orlhjuivvmlahrtponfywsvtkeprdegdsrf青色jeohttykmzyavliguwmqzgtaiysffzqqafhwsnvu16776960mqgqlabistxaxl
    红色
    azaemhsmabsgnrheoacsazarcjtauuesn
    255
    kvirigltemfjpdtbarbhfke
    蓝色
    sgrirnvuysu
    16711680
    aqgiosaqpozmocxcvlyczaqwjkmyxdhusql
    黄色
    aesznfxbwxqdwdrhqgsdltpskvnwmapvpb
    65535mqgqlabistxaxl洋红hhlfkflnjlxwlgdxipxmeiakqcusyppsidxniyrhorrhivvko16711935
    aqgiosaqpozmocxcvlyczaqwjkmyxdhusql
    绿色nywsztnusdtrnieehybrgxnnveupmztxvcleqrkxklt65280lxlntrbdidqmrgfqcjackiswuzrvvu白色
    sgrirnvuysu
    16777215
  • bfbvghicrbtowvcy

  • kkiqgoglhkrawxxcrxqxmskbumvmuohlf

      • 示例

    khksjsqullpntmjqdlacxoxdfzsfyehycspfzlovrtqkmipshowubzqcckypnlqoviypmyejfocti

  • bwqxfpcyuabl

  • rvisaccjgjlonwammqlnrvbxwcajsbsbsoidoaxu
      将 AutoCAD 程序的模型空间背景色设置成如下所示的淡绿色:rqodprwqozi
    apntmypnopawusqnhyxtbauezucgrooxbmcnqdetxxnq

    ymqorazmspcgpnbistwupuvtlxkrzvkknonvcwlrabmerqx
    012314xtip1reipeiiki4y.jpg wdtlaezhinvnuifnkxdqmzyyfdktb
    pjmctifumehgonmxnyduppwjpqcobrfkmekhfaoi
    R=198 G=224 B=180ajwtoclsiyednvkgxwjbwvofsbvkxqdenmzbimgqnpabbohpe
    clr=198+256×224+256×256×180=11854022{clr} = 198 + 256 × 224 + 256 × 256 × 180 = 11854022clr=198+256×224+256×256×180=11854022qxpakazqpjkbpmikkgirspbutsptchkcqjqevnasbqtjpbcddm
    ijtxwfzevbujnfd
    vgrwvajibdhkvhtkqlofrnd

      yvwgbtaougpfqxqagajkztklwrmuwwwkmpb
    • #!/usr/bin/env pythonzvlqfiwdmegpxsifcuurphukifmqzyzqfgamzucz
    • # -*- coding: utf-8 -*-
      xdmxswffstqnosihpzoyhkg

    • xwvbjdwxtgpahijiyuquxaitkvphhrxyvirowkbw
    • """ovmvvuhkdgwhunuxdwkxgngcqufkqaerztlgzc
    •     =============================vxxesickmupvnctbzqbxyxsxiadfmxecuuclcezoiijhggam
    •     Author: DalNurovmvvuhkdgwhunuxdwkxgngcqufkqaerztlgzc
    •     Email: liyang@alu.hit.edu.cnrnkbznwdmmzqexgedqkbydcofchznfyogwlnvjalfmjibnf
    •     =============================yfjjlzfhabpijjxabatn
    • """
      ywtcttloqwsfplafwpohejfltqrfedzddm

    • hsysgiaxzghtydlbofhlxamvrcdcqaxpqxfokqvnhfehmmvj
    • from pyautocad import Autocadbgxqhhpyubwlytoqkpcawsfdrdqatypnv
    • gfbwhsuexnvuclicvyheazholcqldnd

    • pyacad = Autocad(create_if_not_exists=True)zrlhlrxsedewdkvczldlwehhgdv
    • pyacad.prompt("Hello! AutoCAD from pyautocad.")uvlklbrbdpybbzhlvqcsoyrlvrrmyuwkdhsfzldjpiozhhwwj
    • print(pyacad.doc.Name)
      prrvabgnpizse

    • nesbajgtjcwytpbkovvdbdguowebxzrxiyioiyj

    • clr = 11854022anvwcjdfbwjsa
    • pyacad.ActiveDocument.Application.preferences.Display.GraphicsWinModelBackgrndColor = clrhkvkuxlyxydn
    tzvklmvnowzjrwdpunafupczibpsnqcimgzpxjzjusudvelwpv

    vfglkqzuxugrmxajhdrqkmbfxzaaiok
    012314tsa2s7cz2us9cuxf.jpg
    crgzsfdeodkaoumrkvjbixgffwhbjedm
    swubwwyszoopm

    模型空间背景色的设置xjoykfyelngtnitqsckkuebifqpkzc
  • pnnecnrndeupoeeycu

  •   该功能的实现历经波折,卡顿了近三个月,终于,在那一天下班铃响后测试成功。ubrjdqljyaeysifnrpafxl
    lhovavrrmzdstif
  • exbnwqbalijlcxkftieyml

  •   值得注意的是,不是所有的颜色指定都可以采用该种方式,如图案填充颜色的设置就是通过直接设置 RGB 的方式实现的。

    kaklyucqwxmscngvuybbhvgnmflezoasfdujmkq

  • rqdbnhlhcirvhmkhfqj
  • ugssgjjgfdgbvxnrrpmhwalm


    misujqdmlpvnd

      蓝色的定义: doc.Application.GetInterfaceObject(“AutoCAD.AcCmColor.19”).SetRGB(0, 0, 255) 。ubrjdqljyaeysifnrpafxl
    ggkovwsiriliywyqtlpdcgkx
    prrvabgnpizse

    tgznyinpsvzyuurothsvpxmraxnuwnwnisoiltympqgtvdx

    lnnongvcuhsdpohalunzbcdvapnajrjakgk


    九、重要方法xisasbjscv
    9.1 SendCommad

    yiogxqikmkndhfxqyaocudzgjwbmigflbnmyryskfwpfywyzihdffpnhcxebux


    012318uqf2u8k5zeoev22k.jpg hnmmaqhowprzjfcdhnkzjryjdifjepofgqkjnlwdaudcndfly
    bwafkhchfcwsvrrqyvnljgspgbeuvjuowwhnyrtgl
    SendCommand方法

    nmnxvqbwzodaxpdnfwjlgxpfpeumhizwpejahyikzesthcgac


  • snsxuqwzaanqbdtcowthboimdkoseifpurqqnmvycprdwniat

  •   极个别情况下,采用常规方式很难实现某一功能,如设置默认视图、定义永久标注样式等。此时,可尝试采用 SendCommand 方式来实现。具体方法为,先在 AutoCAD 软件界面操作一遍,然后查看在此过程中提示工具栏内的数据变化,最后,将这些变化稍加改动按照 CAD 二次开发的规则输入到 SendCommand 内,即可得到相应的 Python 代码。qhtjiysgzpirbpsaeljluqlxbv
    wdoehxxuowssjdqcrrkqblszpfrnehhoaeylpztd
      以直线的绘制为例,在 AutoCAD 软件中的操作步骤为:输入绘制直线的快捷命令 “L” > 回车 > 屏幕上点选第一个点 > 回车 > 屏幕上点选第二个点 > 回车,直觉告诉我们 SendCommand 括号内数据输入也应该是这一顺序,即uqtxwcqgkaoanyztehpxobnacsuqwvuihp
    zvlqfiwdmegpxsifcuurphukifmqzyzqfgamzucz
    vbbszaxjmqjpjtdrbtklpxe

    SendCommand ("L" + 回车 + 第一个点坐标 + 回车 + 第二个点坐标 + 回车)
  • xnpltzsnovjkjlyglcbtdeugshptumlqkjyniyqr

  • virqrwbjqzpoppljrvb
    012318lio3fiuvi347iyii.jpg
    wtspuutwougxtigngoxqeule

    tvvteierxjfgwkoqhwbfrjnldnwk


    直线绘制过程中命令栏内的显示情况gkeipcujlslyvuvtrobmuwbdqfuzfvffx
    nesbajgtjcwytpbkovvdbdguowebxzrxiyioiyj

    012318fu6grs6ju6jtwhcr.jpg
    pbzqaamlwbtjtcygnbpuhsdnzyxnqaxixceqnjqlcivaieixt
    zsbaxihoqjazgijwxw

    SendCommand方式绘制直线的Python代码

    rxdzowhtnzhtbxlveyenrkgtsktxaiuvwudsgzkvjfxpuqpgin

    nbpugclknqqeyzajgry


      另一个典型的例子是将程序的预设视图由俯视变更为西南等轴测,将视觉样式由二维线框变更为真实,在 CAD 界面操作后,命令栏让将显示出如下数据:pauuvytttyv
    xgxjnhiuznxvb

    rxdzowhtnzhtbxlveyenrkgtsktxaiuvwudsgzkvjfxpuqpginrzkyjygrrhty


    zlwhlzhrub
    预设视图及视觉样式的修改
    qzocyssltpbcmkqmpbtcluxvmnirtimgdvarxte

    012319tiqslvisl1lg77tl.jpg
  • ykjihnrmtmvijut
  • wzwjfqjeqpwiyq

    zolexibrdmaabdsvjxr


    预设视图及视觉样式修改过程中命令栏内的显示情况iznarpeqbdwoozeakeeeyv
    vtbrvpwxivhpisblkcrkzzzrvjxehplxnzqoole
      显然,实现这两项功能的 Python 代码为:swkzgetmpppexckyuxfuv
    bepubfouxlhcoqdkjnnjjlwchouxhlyuscqwabiwl
      cuvvhgtsyhapiqgejoxnfcpwcpojco
    • #!/usr/bin/env python
      zycxzkrfxbhynsexnqkgekahoxzqbfwlcaainjhakrrtjd

    • # -*- coding: utf-8 -*-iuiyzhftmmudnqymxjubqavrcksakbpfkdfvk
    • yrfcizidceimgtxgvmvmabdbnsboxuzue
    • """vtbrvpwxivhpisblkcrkzzzrvjxehplxnzqoole
    •     =============================viweqzguoguuenzfgo
    •     Author: DalNur

      dyxiwvjonjnqsuwkqecpmrghaobwknypaudymzrudkptdws

      vzzccniainwsmpcqlhepozuqhmdnecrhkedwqonxpqyreibyzz


    •     Email: liyang@alu.hit.edu.cnevfsykbbvcpzchcicvypkttjtmvntgxrspyutcnym
    •     =============================

      yiogxqikmkndhfjigdgaxensilpmtyzdhgfef


    • """yrfcizidceimgtxgvmvmabdbnsboxuzue
    • fwxeuxxlcnpxwbw
    • from pyautocad import Autocadkkubbfpjcavmdacnzyb
    • efpfdviqjhnyaeesojurbura
    • pyacad = Autocad(create_if_not_exists=True)
      hhuxvnweqluylvglhtnuwthca

    • pyacad.prompt("Hello! AutoCAD from pyautocad.")

      eyjilwmhngwhtkomgbnffrfvhvtnkxwedumovmrdffmjujnirtwkxuoeipcsxlaznwlbqdkbphkmj


    • print(pyacad.doc.Name)
      nipkguhuksnymmwua

    • oeaxqtvwcbchaozqisnhdzzblwkw
    • pyacad.ActiveDocument.SendCommand("_-view" + chr(13) + "_swiso" + chr(13))  # 定义预设视图为西南等轴测。slimzvdkgtrkgqkwjzzoxosqwreqoxizzxhiqomqv
    • pyacad.ActiveDocument.SendCommand("_vscurrent" + chr(13) + "_R" + chr(13))  # 视图样式设置为真实。aydlzelzgixieetehyzrwytpuo
    gjwqopejnaaghszbuqljwgvybfqysdvptutdfdmdoephgf
    nqdmobqonpnvzucsqmjehmxltbzeihdgk
      值得注意的是,不是所有的功能均可由该方式实现,极其个别的功能就实现不了,但是这些功能通常也没必要采用二次开发的方式实现,直接点下软件界面不好么。
    eeqfetcopzdzbarphvwgxwwopwmepiij
    cenexbavnophslcspxsnyyxjvxahohycgxjuyeypekzlevtad
    vnodbaojpfkebjyflhxlfdrzahhbmucmxkltotwtdsr
    9.2 GetEntityhfyhseumvfravcbiieszzvjbagyelt
      更多图元选择即选择集功能的实现,详见博客:Python AutoCAD 选择集pauuvytttyv
    lphncouqtqwmcuz

    rdokibepnsvrlogykujqfpqvwvowctmipajzcrkurlwxvfxh
    012319iwnpk1eed4w1pd1v.jpg zbhpegccxvsszy
    avejxtoojwolpvzxbqnqxtoanvzvwbdxya
    zquraueqklcv
      以下代码实现将所选图元的颜色更改为红色。mmcburvitwadrahnhsoftnwtnkxnmvptyzdqpmmydprkysptca
    qfiztsxrfaprbg
    hyrdqvlalqztusclrwcncu
      yzmxyclqrnirsrdqhwqqljzebjdizqinl

    • #!/usr/bin/env pythonkuvhcjboqererhcopnaxdqgcovxyxwjbojlwzigusufhzjgsh
    • # -*- coding: utf-8 -*-
    • qndcpkqwyjnqnzfcehetueqnhlfacxycbwkcqzoi

    • rxdzowhtnzhtbxlveyenrkgtsktxaiuvwudsgzkvjfxpuqpginnirtwkxuoeipcsxlaznwlbqdkbphkmj


    • """
    • nwhxitlnakirpxiedkfsozuaj

    •     =============================gssrvrtwduqobcgesqjmdglbpf
    •     Author: DalNurdbghankqfjrvupzvualeepqawk
    •     Email: liyang@alu.hit.edu.cn

      aociyxdpsxuazpwlmmvkhugiinelrpgpzkvbht


    •     =============================kdwzksyuoewugibzxreiubqgcxwtpgk
    • """bwafkhchfcwsvrrqyvnljgspgbeuvjuowwhnyrtgl
    • fgbqmejvmskejzayqcseallprhoyknlvwpkokuggbvhiu

    • import pythoncom
    • poqmlnjofmulic

    • import win32com.client

      qjbopbmvolbjcekdpiexlivcckuqzkkojaazncegngzgwksdhqtaxhszgclwzrvzrfggbfejckkbmvaspyyxjsea


    • import mathuqldjhbntgpxmxhdwradurncshumciadidmrjekvqwvt
    • xnpltzsnovjkjlyglcbtdeugshptumlqkjyniyqr

    • wincad = win32com.client.Dispatch("AutoCAD.Application")ybarxrybuwoijmjpreakowymrztyebgpsurhhllzibsgmgtutg
    • doc = wincad.ActiveDocumentxrwqdtuglyzqilvftvtwfmzukaaoqvsfnjwekwajrptxm
    • doc.Utility.Prompt("Hello! Autocad from pywin32com.\n")

      qixrsckazeoerfxmntypeuiadixkswvxsbavxrdsdlafkktdll


    • msp = doc.ModelSpacexacpwneaxzevlwrbtpzler
    • print(doc.Name)
      plgvxkiwvagoyebvujgfsqauccgdffwhzvsecqjvatdzgnpb

    • crsdtxauxhulrrefenpryxyupqqrbdriztwxieqiypfjobloerfxmntypeuiadixkswvxsbavxrdsdlafkktdll


    • def vtpnt(x, y, z=0):tyufpjcjahhfxcpynfqvkhbpd
    •     """坐标点转化为浮点数"""
    • nwhxitlnakirpxiedkfsozuaj

    •     return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_R8, (x, y, z))uujqdlkiazm
    • chtmicloplypxldjay
    • pnt1, pnt2, pnt3 = vtpnt(-40, -40), vtpnt(500, 500), vtpnt(300, 200)
    • jhtsydcpnilueudjmajozdtjzedcfkzsbplfmvbwipbkiwuqu

    • lineObj = msp.AddLine(pnt1, pnt2)
      lqysmjbgugrvnvzgiaiuirmqgialjolosojgndczw

    • circleObj = msp.AddCircle(pnt3, 100)
    • yszjfqggvxoespoozljatozchwljxdypcnbnhhucvqqhrjabv

    • nmnxvqbwzodaxpdnfwjlgx

      shfvyxxranoyfmljfsrednvaqxkgvkmys


    • print("请在CAD程序界面点选图元,未选中则报错!")  # try...except处理报错

      lqmwkdyfxgypwsiteyzgtdgrlzjivnupevamilrqslcrsiqnwrjlfbgtklseqfypnzfuysaqmoypuvvdfwcelratzdv


    • rtnObj = doc.Utility.GetEntity()  # 返回对象mggdmsummasusggocebgfxidjmkgkmrfqdjygheabhh
    • dggjmwgrkocyedrfvpqsjcolyzqxvym
    • print(rtnObj)ymqorazmspcgpnbistwupuvtlxkrzvkknonvcwlrabmerqx
    • print("所选图元的ID:", rtnObj[0].ObjectID)picjusbsktrhfzfzazedqhfagqkxlfzdkmsdvxvvhgbdakzbp
    • print("鼠标单击处的坐标:", rtnObj[1])

      kzdxcrnzvucwapafmoozsolitspttwgatnornwobqbuxmnon

      rfalkxzvrgwflfd


    • lycyhczmgpdjgqqpzmhdeszhskcg
    • sltObject = doc.ObjectIdToObject(rtnObj[0].ObjectID) # 图元ID转化为对应的图元pmphrskuon
    • ysqvhjbtsobjszwarcqzoybfldppfwzho
    • clr = doc.Application.GetInterfaceObject("AutoCAD.AcCmColor.19")zitedbmujqklsdxatjne
    • clr.SetRGB(255, 0, 0)  # 创建红色xpfczxkgvqulnrfqyjwgzvcvzblbarhgdit
    • sltObject.TrueColor = clr  # 指定颜色jnwzehwbotvwjcxilxdrktphtmnjdctxxlinvdspjhmw
    • koacxjirjyrgtqkwfrrgzhpizvtqevpkmpiyaadiz
    • doc.Application.Update()zrlhlrxsedewdkvczldlwehhgdv
    baksdxidefvjhyelvhmcrnrlscaraghtmdxhokgaazdpvffpfe
  • evqswuyfklyumxlwyhtkaososydfnbbbhyoaluzsnpwkhtqv

  • 十、文件

    dlevgxfkaqjdbrx

  • clbmkajjdfezcviecwicksrqwnykgdacbgzkhseutyctpo

  •   更多文件相关的操作,详见博客:Python AutoCAD 文件

    shobwwubgximnwglbmhgaapkxlpcddezlmzkyjrcskclmcxw

    tsqumiytzsq

    pgnvmvlosskoclrvy

    lycyhczmgpdjgqqpzmhdeszhskcg
    10.1 另存为.dwg/.dxfcenexbavnophslcspxsnyyxjvxahohycgxjuyeypekzlevtad
      以下方法另存为的文件格式只能是 .dwg 和 .dxf,这与在 CAD 软件中,依次点击 文件 >> 另存为 是相对应的。
  • ignhflunmroudoiqw
  • cevnwaqtjdsb
    vbenjemnsxxeifdjjzculptbocyjxqpthqarxjbxngpzxvga
      将当前文件另存为 TestSaveAs.dxf,文件的版本是:AutoCAD 2013 DXF,代码如下:zbhpegccxvsszy
  • ooutqkbuddlwmidzei

  • pyacad.ActiveDocument.SaveAs("D:\AutoCAD\TestSaveAs", 61)mnaelhsidtxppcqmhpoohkymwkckmiie
      kswtbxvrzithmnjxjhv

    • 1ybpqrtiqpbktwknywjymflbiewwfqbvljvpv
      上一代码执行完毕后,当前文件被程序关闭,TestSaveAs.dxf 文件被打开,且设定为当前活跃文件。cljygjwvbxqmledwzbrpxm
  • kiprtuyqffghqvmvnsbx

  •   参数 61 为 AcSaveAsType enum,表示另存为文件的类型是 AutoCAD 2013 DXF,其他常用类型如下:hzcwtwtvnsewokztqtzkrynupiwdfjazvueuhtci

    tonvxgmiwhwutyxqyaocudzgjwbmigflbnmyryskfwpfywyzihdffpnhcxebux


  • cfrlpivcjgzrcvfnqvtwlzhlgrssmtdpnwkrtbdunxuu

  • [color=rgba(0, 0, 0, 0.75)]  AcSaveAsType enum 可在官方二次开发帮助文档 ActiveX Develop’s Guide 中查看,查看方式如下图所示:gsnqazdqqjb
    012321yjjpiq3wpww7q27p.jpg iplxrhzvpxfpdomlkoawmcbrvnexuqdvfzegjmqqvxemdy
    nesbajgtjcwytpbkovvdbdguowebxzrxiyioiyj

    uwcunlsmtgouxifssnbjglcfrvbsw
    javvhwwmmkqimzwpylvbtuaflfataqyzkhqovfssxemsgf
      keypvypeonunsntwxzekoadantyvwnulairefqxa

    • 特定文件另存为.dwg/.dxfxzuzzluumfruiqsbvrgeuytgcdsvknhepdkrtgijdgkvla
      将特定文件 PyAutoCAD.dwg 另存为 TestSaveAs.dxf,文件的版本是:AutoCAD 2013 DXF,代码如下:
  • hgetpqpmpjujraanslmuszufzedu
  • avyonedyjkkxjxtvycweczaqswuzyifvdihzqlbbhdiepujllyulurnzcmsaakwjtmkme


    pyacad.ActiveDocument.Application.Documents("PyAutoCAD.dwg").SaveAs("D:\AutoCAD\TestSaveAs", 61)jqanoapsppfbovlfkenzpqrocaornunibwniwhbzdkdbmvg
      sxtrcevyaliabkjkfmrerzlcghzgb
    • 1

      yiogxqikmkndhfblvybcumopxyavomcqgcatiymjyhgarxfswedsgelcsdoegjiz


    niiyyqzehhjpjtnskpppajrhnzcq
    10.2 另存为.pdfhffrnwujgxzfvkotevzhkakbphkhuiobypaxvjixmexfwuqqe
      首先,确认绘图仪 DWG To PDF.pc3 的工作目录,在搜索神器 Everything 的搜索栏中输入 DWG To PDF.pc3,便可得到绘图仪的工作目录,如下图所示:
    cjjovyxgvgnoylxbjwisqfggyvam
    aydlzelzgixieetehyzrwytpuo
  • votrlpngtivebobisrueygtqeqwphvbqlljllzcwgferqvnnej

  • 012321rhi25crsxisxhcrc.jpg eydhllyhtijrbucnxtttkqqvaobahhzmizmlkzfuhklxslnv
    cgxrbctlkfoqsnajm
    ambohqnhtqihl
    yvwgbtaougpfqxqagajkztklwrmuwwwkmpb
      另存为 .pdf 文件的 Python 代码如下:iyltrsagxqedelmvxvzbyfubbuvrxiomruwtdpsgcqy

    hwjjaxwvzpaklxmbdydsfzcrurpusncuscsfchpbkwahcewve

  • ighsnyrcbcxneqkkxvpyrqfyr

  • tbwnuwipibzikcloippjdvltldgctjqiv
      zyyrppdpbxnjdfvqs

    • #!/usr/bin/env pythonsnotqnhoztuuasufkwjghtrdbufmzw
    • # -*- coding: utf-8 -*-iseizaeiauoncageintixqsfvrhkic
    • mggdmsummasusggocebgfxidjmkgkmrfqdjygheabhh
    • """
      xdyxspiyzooudrmsbadbejjiyezpnzqutphmjlgex

    •     =============================
      plgvxkiwvagoyebvujgfsqauccgdffwhzvsecqjvatdzgnpb

    •     Author: DalNur

      tgznyinpsvzyuurothsvpxmraxnuwnwnisoiltympqgtvdx

      mfexdtenidbirlkmlkzjyavyeqipnbgbxehplmtimghut


    •     Email: liyang@alu.hit.edu.cnvpxoogdncxpzkrpriqacnbofzowjvkugscslhs
    •     =============================yjdanwmumujymblapwopadn
    • """joutrcrpzindnxbntidimrrfujrforamivexlhrvmthfzsmf
    • qjbopbmvolbjcekdpiexlivcckuqzkkojaazncegngzgsrvxxfehgvucgrzzjrfcfhba


    • from pyautocad import Autocadudzifuwvpmgdvhgnpihaimaakecywxqampss
    • zhuidifojffqqbxndcdqhzizuergpijzrldhqwxtqqudkuso
    • pyacad = Autocad(create_if_not_exists=True)
    • kodgbowudhykouyhkefennsvrncwfnkngmfmpcckb

    • pyacad.prompt("Hello! AutoCAD from pyautocad.")qckiprtugyswmxdluoyovljwdxcnfyygvxjieg
    • print(pyacad.doc.Name)

      bddzglikthnuo

    • oysvrkigypxkydpvkklqa

    • piqwufjssjdiefmynmyplnpstdawocrdcochdxvawhkwziuubfrcurstgmyrnjammiioynvauiurumvvfboujzaowflko


    • print(pyacad.ActiveDocument.ActiveLayout.ConfigName)

      jcpbpqgihw

    • bunuknmkouaga

    • ouenqshvqihtvruxpmdf
    • # 设置绘图仪管理器的工作目录
    • drusuatenezkwddatjsohiljxupcmj

    • ACADPref = pyacad.ActiveDocument.Application.preferences.Files
      cryomnfntmhoxbaadypnkuuwrodgfjtytcpejqasayxbbpktin

    • swgnfhduwxeoeaodconmvxttebb

    • originalValue = ACADPref.PrinterConfigPath \bepubfouxlhcoqdkjnnjjlwchouxhlyuscqwabiwl
    •     = r"C:\Users\33876\AppData\Roaming\Autodesk\AutoCAD 2014\R19.1\chs\Plotters"phfwdajmmiugagbwnjrfivxhxaihqzo
    • wgrotbdrcjhypaombffia

    • print(ACADPref)tbwnuwipibzikcloippjdvltldgctjqiv
    • print(originalValue)njeagnfptsfgzthpuphvsjdmcytp
    • lbfenxcnogrzxyvjelssrllopgspsjdoxhwq

    • oplot = pyacad.ActiveDocument.PlotConfigurations.Add("PDF", acad.ActiveDocument.ActiveLayout.ModelType)evosgeiclxfqpokvgotqyjsdj
    • rptcwgdgoxhtehfcvepdmqnxkdrfaa

    • # acad.ActiveDocument.SetVariable("sdi", 0)
      qzocyssltpbcmkqmpbtcluxvmnirtimgdvarxte

    • pyacad.ActiveDocument.ActiveLayout.ConfigName = "DWG To PDF.pc3"wzmhxjycypwgfstydtwmjforrnvewninjoduwgtds
    • pyacad.ActiveDocument.SetVariable("Filedia", 0)
      avjkwjyteqaujdyeakmwubakwhkhkwiicamdo

    • nkfendmcukuyupagcfcxburb
    • # acad.ActiveDocument.SetVariable("RASTERPREVIEW", 1)

      ohdlghhanrcqwcyskzfmbfwqfkuwinaulatjuyxbpgyqct


    • pyacad.ActiveDocument.SetVariable("BACKGROUNDPLOT", 0)
      apntmypnopawusqnhyxtbauezucgrooxbmcnqdetxxnq

    • pyacad.ActiveDocument.Plot.QuietErrorMode = Truesqlkaatossltjtnblb
    • tsaobkwihkzarcczremopkzsrnpzwcmcqfxeglvfe

    • # acad.ActiveDocument.Plot.PlotToFile("D:\" + "123" + ".pdf", "Foxit Reader PDF Printer")gegcqaurtcglxjumpgzxh
    • pyacad.ActiveDocument.Plot.PlotToFile("D:\" + "test" + ".pdf")
    • itenqfathrvhvkpntdzepyvpcjdhd

    • emertnfndkigmgqvinlxfegnyabezon
    • oplot.Delete()

      bddzglikthnuofccmwdjwzmgxxyycqoicwmcqe


    • oplot = None
      qokffpsgwsymrokzfbfircvnokbep

    • obj = pyacad.ActiveDocument.GetVariable("DBMOD")

      yvjdibritfgekeiaqxlolykhjdufgczaekyihbeewjujmq

      haltmxlnwpszzmvtlsmxt


    • print(obj)
    • fefbnwrxoscmfygavoijjmzoxtxccdrkbcksygucrasjnuhexx

    plgvxkiwvagoyebvujgfsqauccgdffwhzvsecqjvatdzgnpb

      • 参考资料: 使用python将cad批量导出至pdf
  • hgetpqpmpjujraanslmuszufzedu
  • pkrqpyvkixejupx
      本代码只是简单介绍该功能的实现,打印范围等更为详细的设置,请查看二次开发帮助文档。
    pqndzycbdycvvcfypxglcxnmmkczrnvdpqvdxokshkx
    uxtvpxhdbdxz
    xgfumcccotttz
    10.3 另存为.jpg/.png

    wgidxgepadyqjmygcwfwiomjtdnwtdmeuhwrjt


      更改绘图仪设置即可,可参考另存为.dpf。spjgccyjfelxdcbx
    artojvihbqtacnweomvjcpcekzka
    qfiztsxrfaprbg
    012322rihzfyy4iyq3xvyq.jpg qnjlmmxzagoyqahjzracoooqr
    mkcfkjfongsmmrfnwgbocxxyfjzsszxhgdaxyt
    xacpwneaxzevlwrbtpzler
    012322z9y1lm0rj30lr4jm.jpg
  • mfeijeooooupermr
  • kjzmoiaudpwogdusblpblzjswphc
    确定绘图仪的工作路径mfnljaszronn
    • lpvlfhrxyhergqxnthd

    • #!/usr/bin/env python
      ljmbgwdsvblmmlmiyadyqdncgkghmgobjtwaageujr

    • # -*- coding: utf-8 -*-dyfglfboqtgjgm
    • tbwnuwipibzikcloippjdvltldgctjqiv
    • """ujnpkcsrikcilplizelbyx
    •     =============================

      ycbwsydhonxekqtjutxvtpvpmwlmsimpobmeieiffwybbzxnrdtcxujkkgxiyeavrpmhiabxexhzdyay


    •     Author: DalNurputkwbdxaraj
    •     Email: liyang@alu.hit.edu.cndbghankqfjrvupzvualeepqawk
    •     =============================gjwqopejnaaghszbuqljwgvybfqysdvptutdfdmdoephgf
    • """

      qdixuiiaynmxctrwptxjkrndbfgbirvcnoxkdacipejlgh

      bkuxbtspuggrmooeetzcmlgxxgqfhfjaydyhb


    • xhwqosmzomxmleskh
    • import win32com.client
      ymycarhuppevezcprbhpq

    • zcvwyqkwbhplmoxdbmpgkopokmtmga
    • wincad = win32com.client.Dispatch("AutoCAD.Application")lhovavrrmzdstif
    • doc = wincad.ActiveDocumentdczjfqqwxbqkfixakz
    • doc.Utility.Prompt("Hello! Autocad from pywin32com.\n")
    • drusuatenezkwddatjsohiljxupcmj

    • msp = doc.ModelSpace
      qzocyssltpbcmkqmpbtcluxvmnirtimgdvarxte

    • dyfglfboqtgjgm
    • print(doc.Name)

      aociyxdpsxuazpwlmmvkhugilgyzvqswsjeeb


    • print(doc.ActiveLayout.ConfigName)pdldezfdzaxwnmagkvzher
    • fwtjeqozxwgesqizdcbidhnpgtesunjaiizgdqgpaqjawvhqqu
    • # 设置绘图仪管理器的工作目录
      hcvphkzeuvqvymteaenjmhxfcxufh

    • ACADPref = doc.Application.preferences.Filestqnbfkzyoimpcnxascxzamizndgnuechg
    • zyyrppdpbxnjdfvqs

    • originalValue = ACADPref.PrinterConfigPath \
      ezzyksshylddeyezzl

    •     = r"C:\Users\33876\AppData\Roaming\Autodesk\AutoCAD 2014\R19.1\chs\Plotters"mrmguxgywteyaqgusueuefbceknzcgutpciikltjuoudvoimuy
    • qintjptsyodhwkiomzk
    • print(ACADPref)chtmicloplypxldjay
    • print(originalValue)

      jmizvysaolxpldnxgwgridqlhcaconlhvyvcdqgpduoirqbgonrxvejiyqxrdzisysay


    • nsjxbgnrfvtftphbgdegaokexcbnmhzyxmowoyszuty

    • oplot = doc.PlotConfigurations.Add("JPG", doc.ActiveLayout.ModelType)
      pyiltdbodzyiaqtnh

    • hivccubqkrefocojcjxoythjztgpqlsjemtycoyhrk

    • doc.ActiveLayout.ConfigName = "PublishToWeb JPG.pc3"rabddganwtagymsirwwqfdererslbv
    • doc.SetVariable("Filedia", 0)
      swubwwyszoopm

    • phgykfkyqadqjldhmpimvawmwthxziwgeasvkmyn
    • doc.SetVariable("BACKGROUNDPLOT", 0)
      tzvklmvnowzjrwdpunafupczibpsnqcimgzpxjzjusudvelwpv

    • doc.Plot.QuietErrorMode = Truecdbmjxionsstvolkywqfnxyuovwcrsprkkpklnermvqadsn
    • dlevgxfkaqjdbrxsdynkvczyrxqtlvfblvaabvgjastnhcoeysxqmrhiys


    • doc.Plot.PlotToFile("D:\" + "test" + ".jpg")xjoykfyelngtnitqsckkuebifqpkzc
    • murjceaeweshoytmxwlhlq
    • oplot.Delete()
      cyhizhxssdhgjycalxkzjqun

    • oplot = None
    • etvupltvpapbamvvwdbtchui

    • obj = doc.GetVariable("DBMOD")qbolagiefedasifwotuejkhwgguznezgpspeqzphnrmighujwo
    • print(obj)pmphrskuon
    wljqklmtfbbsqjxwfdftsrjktnzcmhtaganhte
      CAD转化为JPG后,图片模糊不清楚怎么办 ?

    jagyhzauhulctotvfdeoefhhqzaizvm

    lnnongvcuhsdpohalunzbcdvapnajrjakgk

    dhphuqgulvohu

    lmzhttbhxelpvmonshwilnxbmucaconlhvyvcdqgpduoirqbgonrxvejiyqxrdzisysay


    optjpkwuhwfogkyxfxquhkwofoychtgksjk
    十一、致谢
  • bfbvghicrbtowvcy

  •   特别感谢 ke1078 同学提供的无私帮助,使得 Python 语言二次开发 AutoCAD 的许多高级功能得以顺利实现。

    kaklyucqwxmscngvuybbhvgnmflezoasfdujmkq

    ebemptlferbfxpmyrgnnrh

    bgbxpdxhhsxkmxhkxphzarat
    hucqpyxqhlqeumaklun
    rerkggpyyjxqniknyisoftdhqdgupqhmzqhlkeiwwhbwlto
    十二、说明hyqbuspebawijozspwoedjmfpoovxetkdgpvrogw
      2018年12月13日,该系列博客仅仅以一篇名为 【Python pyautocad库 使用简介】 的博客形式出现在 CSDN 上。为了清晰直观,2019年7月20日左右,博主以博客【Python pyautocad库 使用简介】为基础,按部分将原文扩展成 9 篇博客,后续又陆续进行了修改和编辑,特此说明。这 9 篇博客以 AutoCAD 草图与注释 工作空间菜单栏内的功能区分为标准,较为详细地介绍了 Python 调用 AutoCAD 相关功能的实现。码字不易,转载还请注明出处!

    hmdjcizljuolqpefnyibqtccpoubtutwxqcscdlwxnrrpmhwalm

    soxllfalqiqayvnhwyhqzbeseymlykdzoc

    wjdrttdnkepgpfxnbciahmmwfhunm
    012324vnk0kd09ru61k7dd.jpg hnwndtslamvij
    hkzzihmiiydumbdmmsezcfvcegpwllbuniphincfg
    AutoCAD草图与注释zfgciydkfihvgwurxwetwpzsa
    wderouzagxhlojbkbuuqhbqvptuoxaqybatyspw
    转载请注明出处!lhbsttxebj
    转载请注明出处!zareuqfccnrasoqnmbubfieuyewogfyudiwsklpilbxpgeji
    转载请注明出处!
  • snsxuqwzaanqbdtcowthboimdkoseifpurqqnmvycprdwniat

  • tyufpjcjahhfxcpynfqvkhbpd
    kkubbfpjcavmdacnzyb
    012325lk858o5of3kkd3bb.jpg reiuandeisbrdiollnvqckcalcxlnnbklszfrluphr
    iseizaeiauoncageintixqsfvrhkic
    原博客部分内容
    zizkxfjnquwvokivlxtdiexybqnlqh

      这 9 篇博客分别是:vzpsvqjfnanixsyetrvbifgdutqrjigvhoh
    rplwlxqksjylccktaeldwtzpuysqrgyizy
    jhxyveufemrmuqwrk

         - Python 二次开发 AutoCAD 简介cmlddnzxuaotbegvedesaskcze
    igsbxzcyemsncv
         - Python 二次开发 AutoCAD 系统设置
  • kvlqfhipgduqngcilozwmexkyxjnab
  • vtbrvpwxivhpisblkcrkzzzrvjxehplxnzqoole
    zfgciydkfihvgwurxwetwpzsa
         - Python 二次开发 AutoCAD 绘图loskmnadyakaaijk
    ypskjfjheshisitvxiyfcvpvawxwvbhlyqvqr

         - Python 二次开发 AutoCAD 修改fjrajbduwevpdmyguyfypysjqza
    yyxznjslrretpoilplyaqefdfnuhl
         - Python 二次开发 AutoCAD 块组
  • iyzfjgchjidyhoxhgvhmculsnq
  • uyomyugrrowybj
         - Python 二次开发 AutoCAD 注释rqodprwqozi
    lmwejmhytodzwqxtonuhqf
         - Python 二次开发 AutoCAD 文件
  • wycobnbatvwrhdtgvfokztozllyazqmvasprmqmsmidkhimro
  • cryomnfntmhoxbaadypnkuuwrodgfjtytcpejqasayxbbpktin

         - Python 二次开发 AutoCAD 选择集zwrombtgushhevntudvkxtbtxaqmwqvvuohwvjhqtssnhr
    fuaaedydldqhscygmzyfovtencpgvijatrdlqg
    qaiynhwugs
    pzhpeqeuyj
    十三、尾声xqwyoazunaeiyigsfl
      以上,便是 Python 语言二次开发 AutoCAD 的简单介绍。hxknpywpnkcrfheddswgjqzdaiedh
    nmewljjiimznwkeutdgyudsvdpshkriptbfj
      因篇幅有限,某些非关键功能未做详细介绍,如有疑问,欢迎邮件交流。

    akppbvdovwfccsdvmtjxdzkyfejihdoqjfqgsmciw

    nmfeorfcrkcionfrbreestii

    mdqffpvbwrmosgsewtoo
      Email: liyang@alu.hit.edu.cnmmcburvitwadrahnhsoftnwtnkxnmvptyzdqpmmydprkysptca
    gqbqkphstklbwjbrgvqvbz

      仅以此文为我断断续续一年多的 Python 调用 AutoCAD 的相关工作做一个总结。hnwndtslamvij
    fwtjeqozxwgesqizdcbidhnpgtesunjaiizgdqgpaqjawvhqqu
      与此同时,也希望能够为初学者/有需要的人提供多一点参考。hjebrytabventjwpeiq
  • yigeppkxqibiumcdhqpuvigdoueu

  •   本文仅用于个人学习,除此之外,无其他任何用途。psbfoneftvdsl
    optjpkwuhwfogkyxfxquhkwofoychtgksjk
      因个人水平有限,文中难免有所疏漏,还请各位大神不吝批评指正。kslrqoalelio
    sqlkaatossltjtnblb
      胸藏文墨怀若谷,腹有诗书气自华,希望各位都能在知识的 pāo 子里快乐徜徉。vrrwktkarrflowesbkdpvxvsyglfcnlydssflod
    iznarpeqbdwoozeakeeeyv
      本文最早发表于 2018-12-13 18:20:21,最后修改于 2020-4-25 22:02:07。

    nqqltijctfuias

  • clbmkajjdfezcviecwicksrqwnykgdacbgzkhseutyctpo
  • artojvihbqtacnweomvjcpcekzka
      如无特殊原因,不再更新!
    pbzqaamlwbtjtcygnbpuhsdnzyxnqaxixceqnjqlcivaieixt
    xvjsszkbspxllic
      本文逻辑清楚,内容详实,引例丰富。yypihkmczpezyzl
    ldbotkjwhnuzfbuwptsqpepilwihxjptdzpdxjnidvrq

      欢迎大家点赞、评论及转载,转载请注明出处!ijtxwfzevbujnfd
    qyftppqouhuxzsyrfvdidlrveirvwnewcuhtigpom
      最后,祝各位攻城狮们,珍爱生命,保护发际线!ubrjdqljyaeysifnrpafxl
    hyqbuspebawijozspwoedjmfpoovxetkdgpvrogw

    nlegskigxnrmcinefmxlodnclpblziapavlfpurosiastawxt
    十四、参考文献

    vidwipljsmzsdvqkfajbefhznhlptvjabpoweqnuxffhorcurstgmyrnjammiioynvauiurumvvfboujzaowflko


    [1]. 使用Python读写DXF和DWG文件. 大专栏.
  • hgetpqpmpjujraanslmuszufzedu
  • cgxrbctlkfoqsnajm
    [2]. VARIANT的使用方法. xinzhiyounizhiyouni.exevinhnqhjxywpekeyomtnmugmlvkyc
    vcyvqsnjkmv
    [3]. comtypes 1.1.3 documentation
  • wueucxnfzgatyyzoaanwufhgdkmzdjjge
  • emertnfndkigmgqvinlxfegnyabezon
    jwphauvquvwyqfyhjpgkbplcinwkzrqlklzudjdnpoffntugiv
    gkgdyevzvswibpilkszm
    nkffdrqdqtbyrwnewnfjghnwrrhfmnmuhav
    cglwwibbipid
    hagmkftmnlmkuffhwgjgduatt
    qwcyskzfmbfwqfkuwinaulatjuyxbpgyqct

    orlhjuivvmlahrtponfywsvtkeprdegdsrf
    热门关注
    回复 申请删帖

    使用道具 举报

    • 联系我们
    • 邮箱:837005074#qq.com(请把#改成@)
    • 电话:18810188033
    • QQ客服 837005074
    • 人工客服:周一至周日(晚6点至11点)
    • 扫描加客服QQ

    • 扫描加客服微信

    QQ|关于我们|Archiver|手机版|小黑屋|找最好·学BIM网(zhaozuihao.com;xuebim.com) ( 京ICP备2024101289号-1 )

    GMT+8, 2025-5-7 19:23 , Processed in 0.416491 second(s), 64 queries .

    Powered by 找最好 X3.4

    © 2015至今 zhaozuihao.com