auto 订阅
我国国家最新标准《汽车和挂车类型的术语和定义》(GB/T 3730.1—2001)中对汽车有如下定义:由动力驱动,具有4个或4个以上车轮的非轨道承载的车辆,主要用于:载运人员和(或)货物;牵引载运人员和(或)货物的车辆;特殊用途。国产汽车品牌有:红旗、长安、长城、奇瑞、吉利、荣威等。国外汽车品牌有:丰田、大众、现代、起亚、标致等。 展开全文
我国国家最新标准《汽车和挂车类型的术语和定义》(GB/T 3730.1—2001)中对汽车有如下定义:由动力驱动,具有4个或4个以上车轮的非轨道承载的车辆,主要用于:载运人员和(或)货物;牵引载运人员和(或)货物的车辆;特殊用途。国产汽车品牌有:红旗、长安、长城、奇瑞、吉利、荣威等。国外汽车品牌有:丰田、大众、现代、起亚、标致等。
信息
动    力
发动机
主要作用
代步、运输
学    名
汽车
发明者
卡尔·佛里特立奇·本茨
英文名
car
中文名
汽车
使用范围
日常家庭/商务接待
发明日期
1886年
外文名
vehicle;auto;car
汽车发展史
1680年,英国著名科学家牛顿设想了喷气式汽车的方案,利用喷管喷射蒸汽来推动汽车,但未能制成实物。1769年,法国人N·J·居纽制造了用煤气燃烧产生蒸汽驱动的三轮汽车。但是这种车的时速仅4公里,而且每15分钟就要停车向锅炉加煤,非常麻烦。后来车在一次行进中撞到砖墙上,碰得支离破碎。1879年,德国工 程师卡尔·本茨(Karl Benz),首次试验成功一台二冲程试验性发动机。1883年10月,他创立了“本茨公司和莱茵煤气发动机厂”,1885年,他在曼海姆制成了第一辆本茨专利机动车,该车为三轮汽车,采用一台二冲程单缸0.9马力的汽油机,此车具备了现代汽车的一些基本特点,如火花点火、水冷循环、钢管车架、钢板弹簧悬架、后轮驱动前轮转向和制动手把等。1886年的1月29日,德国工程师卡尔·本茨为其机动车申请了专利。同年11月,卡尔·本茨的三轮机动车获得了德意志专利权(专利号:37435a)。这就是公认的世界上第一辆现代汽车。由于上述原因,人们一般都把1886年作为汽车元年,也有些学者把卡尔·本茨制成第一辆三轮汽车之年(1885年),视为汽车诞生年。1829年,英国的詹姆斯发明了时速25公里的蒸汽车,该车可以作为大轿车使用。这种汽车装有笨重的锅炉和很多煤,冒着黑烟,污染街道,并发出隆隆的噪声,而且事故频繁地出现。1860年,法国工人鲁诺阿尔发明了内燃机,用大约1马力的煤气发动机来带动汽车,但效果不好。不过,汽车就是在这种内燃机的影响下产生的。从此,有很多人想改进内燃机,要把内燃机用在汽车上。1882年,德国工程师威廉海姆·戴姆勒开始进行内燃机的研究。他发明了用电火花为发动机点火的自动点火装置,然后,在这一发明的基础上制造出优秀的汽油发动机。这种发动机每分钟900转,结构简单紧凑,而且能产生很大的功率。1883年,戴姆勒完成了这种汽油发动机,第二年开始装配在二轮车、三轮车和四轮车上,制成了汽油发动机汽车。特别是1886年制造的汽油发动机四轮载货汽车,装有1.5马力的发动机,时速达18公里。 1885年是汽车发明取得决定性突破的一年。当时和戴姆勒在同一工厂的本茨,也在研究汽车。他在1885年几乎与戴姆勒同时制成了汽油发动机,装在汽车上,以每小时12公里的速度行驶,获得成功。这一年,英国的巴特勒也发明了装有汽油发动机的汽车。此外,意大利的贝尔纳也发明了汽车,俄国的普奇洛夫和伏洛波夫两人发明了装有内燃机的汽车。世界上第一个研究电动车的是由匈牙利工程师阿纽什·耶德利克Ányos Jedlik于1828年在实验室完成的电传装置。第一辆实际制造出来的电动车是由美国人安德森在1832到1839年之间发明的。 这辆电动车所用的蓄电池比较简单,是不可再充的。1899年,德国人波尔舍发明了一台轮毂电动机,以替代当时在汽车上普遍使用的链条传动。随后开发了Lohner-Porsche电动车,该车采用铅酸蓄电池作为动力源,由前轮内的轮毂电动机直接驱动,这也是第一部以保时捷命名的汽车。在1900年的巴黎世博会上,该车以Toujours-Contente之名登场亮相,轰动一时。随后,波尔舍在Lohner-Porsche的后轮上也装载两个轮毂电动机,由此诞生了世界上第一辆四轮驱动的电动车。但这辆车所采用的蓄电池体积和重量都很大,而且最高时速只有60公里。为了解决这些问题,波尔舍1902年在这辆电动车上又加装了一台内燃机来发电驱动轮毂电机,这也是世界上第一台混合动力汽车。1620年,意大利人布兰卡发明了“反击涡轮式蒸汽轮机”,用以带动轮车。1766年,英国发明家詹姆斯·瓦特(1736—1819)改进了蒸汽机,拉开了第一次工业革命的序幕。耶稣会士南怀仁是曾在1672年设计一个用蒸汽作为动力来源的车给当时中国的皇帝,是一个65厘米长的玩具车,无法载人或司机,不确定设计的车辆后来是否制作成功,这可能是最早设计的汽车。 汽车(2张) 1769年,法国陆军工程师尼古拉·约瑟夫·居纽(Nicolas-Joseph Cugnot)制造出第一辆蒸汽机驱动的汽车。由于试车时转向系统失灵,撞到般圣奴兵工厂的墙壁上粉身碎骨,这是世界上第一起机动车事故。1771年,尼古拉·约瑟夫·居纽改进了蒸汽汽车,时速可达9.5000米,牵引4-5吨的货物。1794年,英国人斯垂特首次提出把燃料和空气混合制成混合气体以供燃烧的构想。1796年,意大利科学家沃尔兹发明了世界上第一台蓄电池,这项发明为汽车的诞生和发展带来了历史性的转折。1801年,法国人勒本提出煤气机原理。1803年,法国工程师特利维柯(1771—1833)采用新型高压蒸汽机,可乘坐8人,在行驶中平均时速13km,从此,用蒸汽机驱动的汽车开始在实际中应用。1838年,英国发明家亨纳特发明了世界第一台内燃机点火装置,该项发明被世人称之为“世界汽车发展史上的一场革命”。1860年,法国电器工程师莱诺制成了第一部用电火花点燃煤气的煤气机。1862年,法国电器工程师莱诺研制出二冲程内燃机。其他人开始研究四冲程发动机。1867年,德国工程师尼考罗斯·奥托(1832—1891)研制成功世界上第一台往复活塞式四冲程煤气发动机。1876年,尼考罗斯·奥托制造出第一台四部冲程内燃机制成了单缸卧式、压缩比为2.5的3千瓦内燃机。1885年,这是真正的现代汽车诞生的时刻。这一年德国工程师卡尔·奔驰在曼海姆制造成一辆装有0.85马力汽油机的三轮车。这一辆装有内燃动力机的汽车被认为才是世界上真正的第一辆汽车,因为它是真正以汽油为动力源的第一辆汽车,而不是蒸汽机。1886年,曼海姆专利局批准卡尔·奔驰为其在1885年研制成功的三轮汽车申请的专利,这一天被大多数人称为现代汽车诞生日。次年德国人戴姆勒制成世界上第一辆四轮汽车。之后德国人尼考罗斯·奥托宣布放弃自己所获得的四冲程发动机专利,任何人都可根据需要随意制作。1886年1月29日,卡尔·奔驰取得世界第一项汽车引擎专利。同年7月,世界第一部四轮汽车正式贩售。1888年,法国自行车商人埃米尔·罗杰斯获得奔驰的许可,开始生产商用汽车。
收起全文
精华内容
下载资源
问答
  • AUTOCAD2020安装包&安装教程

    万次阅读 多人点赞 2019-05-10 20:00:17
    AutoCAD是目前计算机辅助设计领域最流行的CAD软件,此软件功能强大、使用方便,在国内外广泛应用于机械、建筑、家居、纺织等诸多行业。 CAD2020新增功能: 1.全新的暗色主题,提供更柔和的视觉和更清晰的视界。 2....

    下载安装包路径:

    链接:https://pan.baidu.com/s/1vKC8ktLaNAdkxALJpu2rNA
    提取码:d775

    CAD2020安装过程

    AutoCAD是目前计算机辅助设计领域最流行的CAD软件,此软件功能强大、使用方便,在国内外广泛应用于机械、建筑、家居、纺织等诸多行业。
    CAD2020新增功能:
    1.全新的暗色主题,提供更柔和的视觉和更清晰的视界。
    2.保存速度只需 0.5 秒,比上一代整整快了 1 秒。固态硬盘安装时间缩短了 50%。
    3.“快速测量”工具允许通过移动/悬停光标来动态显示对象的尺寸,距离和角度数据。
    4.增加新块调色板,可以提高查找和插入多个块的效率。
    5.重新设计的清理工具更新过后更实用和人性化。
    6.在一个窗口中比较图纸的修订DWG Compare 功能已经得到增强。
    7.云存储应用程序集成AutoCAD 2020 已经支持 Dropbox,OneDrive 和 Box 等多个云平台,这些选项在文件保存和打开的窗口中提供。
    安装步骤
    1.选中【CAD2020】压缩包,鼠标右击选择【解压到CAD2020】。
    1
    2.双击打开【CAD2020】文件夹。
    2
    3.双击打开【安装包】文件夹。
    3
    4.选中【Setup】可执行文件,鼠标右击选择【以管理员身份运行】。
    4
    5.点击【安装】。
    5
    6.选择【我接受】,然后点击【下一步】。
    6
    7.点击【浏览】更改软件的安装路径,建议安装在除C盘之外的其他磁盘,可以在D盘或其他盘新建一个【CAD2020】文件夹,然后点击【安装】。
    7
    8.安装中。(大约10分钟左右)
    8
    9.点击【立即启动】。
    9
    10.点击【OK】。
    10
    11.点击【输入序列号】。
    11
    12.点击【我同意】。
    12
    13.点击【激活】。
    13
    14.序列号输入【666-69696969】,产品密钥输入【001L1】,然后点击【下一步】。
    14
    15.点击【后退】然后点击【Yes】。
    15
    16.点击【激活】。
    16
    17.序列号输入【666-69696969】,产品密钥输入【001L1】,然后点击【下一步】。
    17
    18.打开之前解压后的【CAD2020】文件夹,选中【xf-adesk20】可执行文件鼠标右击选择【以管理员身份运行】。
    温馨提示:若没有【xf-adesk20】文件,请关闭电脑杀毒软件和防火墙(Win10系统还需要关闭Defender)后再重新解压。
    18
    19.使用快捷键Ctrl+C复制【申请号】,在注册机的【Request】处使用快捷键Ctrl+V粘贴(记得删除原Request中的内容),然后点击【Path】。
    19
    20.点击【确定】。
    20
    21.选择【我具有Autodesk 提供的激活码】然后点击【Generate】,使用快捷键Ctrl+C复制注册机中生成的激活码,然后使用快捷键Ctrl+V粘贴到软件的激活码输入框中。
    21
    22.点击【下一步】。
    22
    23.激活成功,点击【完成】。
    23
    24.安装完成,打开软件界面如下。
    24

    安装完成(素材来源于[软件安装管家])

    喜欢的话,记得点赞关注

    展开全文
  • AutoCAD2020中文版为目前最新软件版本,我第一时间拿到软件进行安装测试,确保软件正常安装且各项功能正常可以使用,立刻拿出来分享,想用最新版本的话,抓紧下载使用吧; 我把我用的安装包贡献给你下载链接:...

    AutoCAD2020中文为目前最新软件,我第一时间拿到软件进行安装测试,确保软件正常安装且各项功能正常可以使用,立刻拿出来分享,想用的话,抓紧下载使用吧;

    我亲测好用的AutoCAD2020安装包下载链接:https://pan.baidu.com/s/1x0tehY_zNEeCAuJRiCB-jA
    下载方法:复制下载链接,粘贴至浏览器网址栏(网址栏哦,网址,不是百度搜索框)打开,点保存到网盘,然后打开自己的网盘客户端,找到刚保存的2020安装包,用鼠标右键单击,点下载,设置好下载路径,等待下载完成;

    一、安装视频教程

    https://v.qq.com/x/page/h085562z3kv.html
    观看1080P高清蓝光更清晰:复制链接粘贴至电脑浏览器或腾讯客户端打开即可;

    二、安装图文教程

    1、根据上方我分享的AutoCAD2020安装包的下载链接和下载方法,先把安装包下载到自己的电脑上,下载完成后,安装包是一个压缩包的文件格式,因为是打包好上传的;
    找到这个下载好的AutoCAD2020安装包文件,用鼠标右键单击,点解压到当前文件夹,等待解压完成后会解压出来一个新的AutoCAD2020的文件夹;
    在这里插入图片描述
    2、现在我们双击进入新解压出来的AutoCAD2020的文件夹内;
    在这里插入图片描述
    3、进入文件夹之后,你会看到有一个是AutoCAD2020的自解压的安装程序,一个是注册文件,我们首先需要根据安装程序先把软件成功安装到自己的电脑上,再用注册工具进行激活软件永久使用;
    在这里插入图片描述
    4、双击AutoCAD2020的自解压程序,会跳出来解压程序,先点击更改,选择解压路径,还解压到当前的这个文件夹就行,选择好之后点击确定;
    在这里插入图片描述
    5、此时解压程序正在解压,需要大约2分钟时间,解压的过程你也会看到此文件夹内又解压出来了一个包含AutoCAD2020安装程序所需文件的文件夹;
    在这里插入图片描述
    6、解压完成,会自动跳出来安装程序,右上角自动显示中文简体,现在点击安装;
    在这里插入图片描述
    7、许可协议这里,直接点击我接受,再点击下一步;(如果你有时间可以看看许可协议的长篇大论,我是没空看)
    在这里插入图片描述
    8、配置安装路径,点击浏览,还是选择当前的这个文件夹即可,配置完成点击安装;(只要你不安装到C盘系统盘即可,其他的DEF盘都可以安装)
    在这里插入图片描述
    9、安装过程有15个产品,需要10分钟时间耐心等耐一下;
    安装的产品数量有多有少,因为有的电脑之前装过CAD等类似软件,此时产品就会少一些,有的什么都没装过,此时的产品就会多一些,都属于正常现象;
    在这里插入图片描述
    10、安装完成这里会有提示,恭喜你安装成功,此时AutoCAD2020软件已经成功安装到你的电脑上,点击完成;
    在这里插入图片描述
    11、现在在你的电脑桌面,已经有AutoCAD2020的软件图标,双击打开即可进入软件操作界面;
    在这里插入图片描述
    12、AutoCAD2020的软件操作界面如下;
    中间省略部分步骤,不便公开发布,安装视频教程内有全部内容,快去下载软件安装包,根据教程去安装软件吧。
    在这里插入图片描述

    AutoCAD2020(64位)下载链接:https://pan.baidu.com/s/1x0tehY_zNEeCAuJRiCB-jA
    下载方法:复制下载链接,粘贴至浏览器网址栏(网址栏哦,网址,不是百度搜索框)打开,点保存到网盘,然后打开自己的网盘客户端,找到刚保存的2020安装包,用鼠标右键单击,点下载,设置好下载路径,等待下载完成;

    安装视频教程:https://v.qq.com/x/page/h085562z3kv.html
    观看1080P高清蓝光更清晰:复制链接粘贴至电脑浏览器或腾讯客户端打开即可;

    从AutoCAD2020版本开始,以不再出32位的版本,如果你的电脑系统是32位的,请下载2019或以前的版本,一起分享给你;
    AutoCAD2019(32位)下载地址:https://pan.baidu.com/s/1d5Lj4NPKzx0V06JqUplLwg
    AutoCAD2019(64位)下载地址:https://pan.baidu.com/s/1D4nb9FnrzJEv7mf3c7DZNg
    下载方法:复制下载链接,粘贴至浏览器网址栏(网址栏哦,网址,不是百度搜索框)打开,点保存到网盘,然后打开自己的网盘客户端,找到刚保存的2019安装包,用鼠标右键单击,点下载,设置好下载路径,等待下载完成;

    每个安装包内,都有附带的安装教程,根据教程步骤安装即可,都放在安装包里面去,根据下载方法获取即可;
    以上纯属个人经验分享,能分享的都分享出来了,希望能帮助到正需要此软件到你。

    展开全文
  • Python 二次开发 AutoCAD 简介

    万次阅读 多人点赞 2018-12-13 18:20:21
    十二、说明 十三、尾声 十四、参考文献 Blog Links Python 二次开发 AutoCAD 简介 Python 二次开发 AutoCAD 系统设置 Python 二次开发 AutoCAD 图层 Python 二次开发 AutoCAD 绘图 Python 二次开发 AutoCAD 修改 ...



    Blog Links





    在这里插入图片描述




    一、前沿


      AutoCAD(Autodesk Computer Aided Design)是 Autodesk(欧特克)公司首次于 1982 年开发的自动计算机辅助设计软件,在土木建筑,装饰装潢,工业制图,工程制图,电子工业,服装加工等诸多领域有着广泛的应用,主要用于二维绘图、详细绘制、设计文档和基本三维设计,现已经成为国际上广为流行的绘图工具。


      上世纪 80 年代末 90 年代初, Guido van Rossum 在荷兰国家数学和计算机科学研究所设计出计算机程序设计语言 Python 。 Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言,具有很强的可读性。相比其他语言,语法结构更具特色。同时,它也是一种跨平台的计算机程序设计语言,越来越多地用于独立的、大型项目的开发。



      为什么采用 Python 语言二次开发 AutoCAD ?


      • Python 是一种代表简单主义思想的语言,简单易学,应用范围广泛 。

      • Python 拥有大量第三方库,可轻易实现各种应用程序间的数据交换,如 AutoCAD 与 Excel / Word 间的数据交换。

      • 只要具有基础的 Python 编程能力,就可实现对 AutoCAD 的二次开发,而不必特意学习 VBA 或者 LISP 。



      吾生也有涯,而知也无涯,以有涯随无涯,殆己。



      总之,人的精力是有限的, Windows 平台上的应用程序是各种各样的,我们力争只熟练掌握一门编程语言就能将各种应用程序串联起来,以实现数据的顺利传递,从而大幅度地提高工作效率和质量。这也是我当时在全网参考代码很少的情况下坚持用 Python 调用 CAD 的原因。


      这个过程并非顺利,本人纯野生学习 Python,很多小 bug 都要查很久的资料才能解决。因粗心看错了帮助文档的参数定义,在绘制椭圆这卡了将近一个月;因不了解 CAD 系统对颜色的定义规则,在模型空间背景色设置上卡了将近3个月,通过不断测试,硬是靠最原始的总结规律得到了颜色指定的换算公式;因不了解 Python 中的数据类型如何对应 AutoCAD 中的 Variant,图案填充这又卡了好几个月,最终在 ke1078 大神的帮助下,顺利实现了图案填充的绘制。


      为了使后续的学习者少走弯路,把宝贵的时间用于所研究的问题上,而非软件操作层面,特此,将本人所了解到的 Python 语言二次开发 CAD 的有关内容记录在此系列博客上。还需说明的是,因本人能力和水平确实有限,博客中的有关表述可能不严谨,甚至错误,还请大家及时批评指正。



    在这里插入图片描述




    二、ActiveX Automation


      AutoCAD 二次开发主要接口有 ObjectARX 接口、.net API 接口、AutoLisp 接口、ActiveX (com) 接口,更多详见: AutoCAD二次开发简介


    在这里插入图片描述

    AutoCAD API Performance


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


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


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



    在这里插入图片描述


    AutoCAD对象模型 (部分)


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


      • 参考资料AutoCAD ActiveX 二次开发技术




    三、开发文档/工具


    3.1 AutoCAD Help


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


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



    在这里插入图片描述


    在这里插入图片描述

    帮助文档的获取



    3.2 ArxDbg


      ArxDbg 是 ObjectARX SDK 中包含多年的示例项目的名称。它的主要目的是演示如何使用 ObjectARX API,但它本身就是一个完全独立的实用程序。ObjectARX 程序员经常在开发期间使用此实用程序来测试和执行他们的应用程序代码。更多详见: [ObjectARX] ArxDbg介绍、自动加载及其下载


    在这里插入图片描述


    ArxDbg

      • 下载链接ACAD二次开发必备辅助工具-ArxDbg 2005-2021各版本




    四、可用Python库


      在介绍各种 Python 库前,有必要对 AutoCAD 的文件系统做一个简单的了解。


      dwg 是 AutoCAD 以及基于 AutoCAD 的软件保存设计数据所用的一种专有文件格式 (AutoCAD的图形文件)。


      dxf 是 AutoCAD 绘图交换文件,它是 Autodesk 公司开发的用于 AutoCAD 与其它软件之间进行 CAD 数据交换的 CAD 数据文件格式。


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


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



      .dwg:脱离 AutoCAD 软件环境读写 dwg 格式文件,基本无法实现,通过 COM 自动化操作是一个可选的方案。[1]


      .dxf:是与其它软件进行 CAD 数据交换的文件格式,可脱离 AutoCAD 软件环境读写,如利用 ezdxf 库。[1]




    4.1 pyautocad


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


      • PiPy: pyautocad 0.2.0

      • GitHub: reclosedev/pyautocad

      • Documentation: pyautocad’s documentation

      • Blog: 1. Python3操作AutoCAD:利用pyautocad库能够自动化地进行CAD画图. 陆壹爵爷

           2. 利用python控制Autocad:pyautocad. bsider



    在这里插入图片描述

    pyautocad库与AutoCAD的连接


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


    pyautocad源代码


    pyautocad源代码 (部分)


    import comtypes.client
    
    try:
        acad = comtypes.client.GetActiveObject('AutoCAD.Application', dynamic=True)
    except WindowsError:
        acad = comtypes.client.CreateObject('AutoCAD.Application', dynamic=True)
        acad.Visible = True
    
    pyautocad启动/连接CAD的Python代码


    4.2 pywin32


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


      • PiPy: https://pypi.org/project/pywin32

      • Github: https://github.com/mhammond/pywin32


      • 与 CAD 的连接

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    """
        =============================
        Author: DalNur
        Email: liyang@alu.hit.edu.cn
        =============================
    """
    
    import win32com.client as win32
    
    wincad = win32.Dispatch("AutoCAD.Application")
    doc = wincad.ActiveDocument
    msp = doc.ModelSpace
    
    doc.Utility.Prompt("Hello! Autocad from pywin32com.\n")
    
    print(doc.Name)
    

      • 示例

    在这里插入图片描述

    win32com连接CAD示例 (与Excel交互)


      • pywin32 Help

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



    在这里插入图片描述

    PyWin32帮助文档的获取

    在这里插入图片描述

    PyWin32帮助文档


    4.3 ezdxf


      • ezdxf 库的安装

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

    在这里插入图片描述


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

      • Documentation: https://ezdxf.readthedocs.io/en/stable/

      • Blog使用Python读写DXF和DWG文件


      • 示例

    import ezdxf
    
    # Create a new DXF document.
    doc = ezdxf.new(dxfversion='R2010')
    
    # Create new table entries (layers, linetypes, text styles, ...).
    doc.layers.new('TEXTLAYER', dxfattribs={'color': 2})
    
    # DXF entities (LINE, TEXT, ...) reside in a layout (modelspace,
    # paperspace layout or block definition).
    msp = doc.modelspace()
    
    # Add entities to a layout by factory methods: layout.add_...()
    msp.add_line((0, 0), (10, 10), dxfattribs={'color': 7})
    msp.add_text(
        'Test',
        dxfattribs={
            'layer': 'TEXTLAYER'
        }).set_pos((0, 0.2), align='CENTER')
    
    # Save DXF document.
    doc.saveas('test.dxf')
    

    在这里插入图片描述

    ezdxf生成.dxf文件


    4.4 dxfgrabber


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

      • Documentation: https://dxfgrabber.readthedocs.io/en/latest/



    4.5 dxfwrite


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

      • Documentation: https://dxfwrite.readthedocs.io/en/latest/



    4.6 gdal


      • Blog使用Python读写DXF和DWG文件



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


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


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


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



      • Python 二次开发 Excel 简介

      • Python 二次开发 SAP2000 概述

      • Abaqus 二次开发 基本概念

      • nCodeDL 疲劳分析 简明教程

      • Python 二次开发 Word 简介



    在这里插入图片描述

    .dwg文件的创建逻辑


    在这里插入图片描述

    .dxf文件的创建逻辑



    五、与CAD的连接


    5.1 ProgID


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


    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    """
        =============================
        Author: DalNur
        Email: liyang@alu.hit.edu.cn
        =============================
    """
    
    import win32com.client
    import pythoncom
    
    wincad = win32com.client.Dispatch("AutoCAD.Application.18")
    doc = wincad.ActiveDocument
    doc.Utility.Prompt("Hello! Autocad from pywin32com.\n")
    msp = doc.ModelSpace
    print(doc.Name)
    

      根据 CAD 版本的不同, ProgID 可能会发生变化,部分版本 CAD 的 ProgID 如下:


    AutoCAD 版本 ProgID
    2010 AutoCAD.Application.18
    2014 AutoCAD.Application.19

      常见版本 CAD 的 ProgID 详见博文: autocad application 版本


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


    在这里插入图片描述


    ProgID的查看


    5.2 示例


    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    """
        =============================
        Author: DalNur
        Email: liyang@alu.hit.edu.cn
        =============================
    """
    
    from pyautocad import Autocad, APoint
    import comtypes.client
    import time
    
    # 1.CAD自动启动
    ProgID = "AutoCAD.Application.19"  # 2014版CADProgramID
    
    try:
        acad = comtypes.client.GetActiveObject(ProgID, dynamic=True)
    except WindowsError:
        acad = comtypes.client.CreateObject(ProgID, dynamic=True)
        acad.Visible = True
    
    print("The program will pause for 60 seconds.")  # 防止报错
    time.sleep(60)  # 程序暂停60s运行
    
    # 2.连接方式的转换
    acad = Autocad(create_if_not_exists=True)
    acad.prompt("Hello! AutoCAD from pyautocad.")
    doc = acad.ActiveDocument
    print(doc.Name)
    msp = doc.ModelSpace
    
    dwgobj = acad.ActiveDocument.Application.Documents.Add("")
    dwgobj.Activate()  # 设为当前文件。
    doc = acad.ActiveDocument
    print(doc.Name)
    msp = doc.ModelSpace
    
    # 3.创建图元
    x1, y1 = 0, 0
    x2, y2 = 100, 100
    p1, p2, = APoint(x1, y1), APoint(x2, y2)
    msp.AddLine(p1, p2)
    
    # 4.文件保存
    directory = r"D:"  # 工作目录
    dwgname = "ZK.dwg"  # 工作目录
    path = directory + "\\" + dwgname
    dwgobj.Close(True, path)
    
    # 5.程序退出
    acad.ActiveDocument.Application.Quit()
    



    六、数据转换


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


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


      Python 中的数据类型较少,且对数据本身的要求也较为宽松,如一个列表中的各个元素可以分别属于不同的数据类型,这虽然有利于降低程序的编写难度,但也对 CAD 的二次开发产生了一些不必要的麻烦。


      在 CAD 二次开发过程中,很多函数/方法的参数要求输入的数据类型为 Variant (array of objects) ,但在 Python 中似乎又没有哪一种数据类型与之直接相对应,若采用 list 代替 Variant,那么程序无法顺利执行,报错为 “ 对象数组无效 ”。因此,需要某种转换方式,将 Python 中定义的变量转换为能够被 CAD 识别的数据类型 Variant


      VARIANT 结构体主要是使用在 COM(组件对象模型)中用于传递参数使用,它的存在主要是为了保持一个在 COM 参数传递方法的统一性,它几乎包含了所有普通常用类型的数据类型的传递,如整型,浮点型,布尔型等,以及相应类型的指针类型,如整型指针。[2]



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


    Member name Description
    VT_EMPTY Indicates that a value was not specified.
    VT_R8 Indicates a double value.
    VT_DISPATCH Indicates an IDispatch pointer.


      另外,NumPy arrays can be passed as VARIANT arrays arguments. The array is converted to a SAFEARRAY according to its type. [3] ( 此为 comptypes 库帮助文档原文,本人对计算机了解有限,为了不曲解原文,此处不做翻译),部分对应关系如下:


    NumPy type VARIANT type
    int32, int, intc, int_ VT_I4
    uint32, uint, uintc VT_UI4
    float64, float_ VT_R8


      comtypes 是一个轻量级的 python com 包,其中文网站详见:https://www.cnpython.com/pypi/comtypes;官方文档详见:comtypes 1.1.3 documentation


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


      在 Python 调用 AutoCAD 过程中,常用的数据转换函数如下:


    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    """
        =============================
        Author: DalNur
        Email: liyang@alu.hit.edu.cn
        =============================
    """
    
    import win32com.client
    import pythoncom
    
    wincad = win32com.client.Dispatch("AutoCAD.Application.19")  
    doc = wincad.ActiveDocument
    doc.Utility.Prompt("Hello! Autocad from pywin32.")
    msp = doc.ModelSpace
    print(doc.Name)
    
    def vtpnt(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)
    
    def vtfloat(lst):
        """列表转化为浮点数"""
        return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_R8, lst)
        
    def vtint(lst):
        """列表转化为整数"""
        return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_I2, lst)
    
    def vtvariant(lst):
        """列表转化为变体"""
        return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_VARIANT, lst)
    


    七、绘图


      本部分仅介绍一些复杂图形的绘制,更多基础图形的绘制详见博客:Python AutoCAD 绘图


    7.1 倒角矩形


    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    """
        =============================
        Author: DalNur
        Email: liyang@alu.hit.edu.cn
        =============================
    """
    
    from pyautocad import Autocad, APoint, aDouble
    import math
    
    pyacad = Autocad(create_if_not_exists=True)
    pyacad.prompt("Hello! AutoCAD from pyautocad.")
    print(pyacad.doc.Name)
    
    [L, B, R] = [400, 200, 50]  # L、B、R分别为矩形的长度、矩形的宽度及圆角半径。
    
    x = [0.5 * (L - 2 * R), 0.5 * L]  # 倒角矩形各关键点横坐标的绝对值;
    y = [0.5 * (B - 2 * R), 0.5 * B]  # 倒角矩形各关键点纵坐标的绝对值;
    
    pnts = [APoint(x[0], -y[1]), APoint(x[1], -y[0]), APoint(x[1], y[0]),
            APoint(x[0], y[1]), APoint(-x[0], y[1]), APoint(-x[1], y[0]),
            APoint(-x[1], -y[0]), APoint(-x[0], -y[1])]
    
    pnts = [j for i in pnts for j in i]  # 将各点坐标顺序变换为行数据
    pnts = aDouble(pnts)  # 转化为双精度浮点数
    
    plineObj = pyacad.model.AddPolyLine(pnts)
    plineObj.Closed = True  # 闭合多段线
    bulgeValue = math.tan(math.pi / 8)  # 凸度,为四分之一倍圆弧所对圆心角的正切值。
    
    [plineObj.SetBulge(2 * i, bulgeValue) for i in range(4)]  
    # 将多段线的第1、3、5、7部分设置为凸度为bulgevalue的圆弧。
    

    在这里插入图片描述

    倒角矩形


    7.2 闭合多段线图案填充


    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    """
        =============================
        Author: DalNur
        Email: liyang@alu.hit.edu.cn
        =============================
    """
    
    import pythoncom
    import win32com.client
    
    wincad = win32com.client.Dispatch("AutoCAD.Application")
    doc = wincad.ActiveDocument
    doc.Utility.Prompt("Hello! AutoCAD from pywin32.")
    msp = doc.ModelSpace
    
    def vtobj(obj):
        return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_DISPATCH, obj)
    
    def vtfloat(lst):
        return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_R8, lst)
    
    
    [ptnName, ptnType, bAss] = ["ANSI31", 0, True]
    
    pnts = [100, -50, 0, 100, 50, 0, -100, 50, 0, -100, -50, 0]
    pnts = vtfloat(pnts)
    
    plineObj = msp.AddPolyLine(pnts)
    plineObj.Closed = True
    
    outerLoop = []
    outerLoop.append(plineObj)
    outerLoop = vtobj(outerLoop)
    hatchObj = msp.AddHatch(ptnType, ptnName, bAss)
    hatchObj.AppendOuterLoop(outerLoop)
    hatchObj.Evaluate()  # 进行填充计算,使图案吻合于边界。
    

    在这里插入图片描述

    闭合多段线的图案填充



    7.3 动态块


      创建动态块的标准流程为:创建普通块(B) → 编辑块 → 指定参数 → 设置动作,详见: AutoCAD-如何创建动态块


      创建如下图所示的动态块,块的名称为 door,由矩形、圆弧及直线三个图元构成,并具有三种用户自定义状态,分别为缩放、旋转和翻转。


    在这里插入图片描述


    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    """
        ==============================
        Author: Wang Yifang (SINOMACH)
        ==============================
    """
    
    import win32com.client
    acad = win32com.client.Dispatch("AutoCAD.Application")
    
    # iterate through all objects (entities) in the currently opened drawing
    # and if its a BlockReference, display its attributes.
    
    for entity in acad.ActiveDocument.ModelSpace:
        name = entity.EntityName
        print(name)
        if name == 'AcDbBlockReference':
            if entity.IsDynamicBlock:
                print("Is dynamic block")
    
            block_ = entity.GetDynamicBlockProperties()
            print(block_)
            print("print property")
            for p in block_:
                print("{")
                print(p.AllowedValues)
                print(p.Description)
                print(p.PropertyName )
                print(p.ReadOnly)
                print(p.Show)
                print(p.UnitsType)
                print(p.Value)
                print("}")
                print("===================================")
                # 修改动态块的尺寸
                if p.PropertyName == "距离1":
                    p.Value = float(10)
                if p.PropertyName == "角度1":
                    p.Value = float(3.14159265/3)
                    # 角度为弧度制
                # if p.PropertyName == "翻转状态1":
                #     p.Value = 1
                # 此功能报错,原因待查明。
    

    在这里插入图片描述


    长度10 旋转60度



    八、颜色


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


    clr=R+256×G+256×256×B {clr} = R + 256 × G + 256 × 256 × B


      例如: 对于白色(R=255,G=255,B=255),其对应的颜色标识号 clr 为 255 + 256 × 255 + 256 × 256 × 255 = 16777215。


      根据上述公式,几种常用的标准颜色的颜色标识号如下:


    颜色 clr 颜色 clr
    黑色 0 青色 16776960
    红色 255 蓝色 16711680
    黄色 65535 洋红 16711935
    绿色 65280 白色 16777215


      • 示例


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


    在这里插入图片描述

    R=198 G=224 B=180

    clr=198+256×224+256×256×180=11854022 {clr} = 198 + 256 × 224 + 256 × 256 × 180 = 11854022

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    """
        =============================
        Author: DalNur
        Email: liyang@alu.hit.edu.cn
        =============================
    """
    
    from pyautocad import Autocad
    
    pyacad = Autocad(create_if_not_exists=True)
    pyacad.prompt("Hello! AutoCAD from pyautocad.")
    print(pyacad.doc.Name)
    
    clr = 11854022
    pyacad.ActiveDocument.Application.preferences.Display.GraphicsWinModelBackgrndColor = clr
    

    在这里插入图片描述

    模型空间背景色的设置


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


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


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




    九、重要方法


    9.1 SendCommad


    在这里插入图片描述

    SendCommand方法


      极个别情况下,采用常规方式很难实现某一功能,如设置默认视图、定义永久标注样式等。此时,可尝试采用 SendCommand 方式来实现。具体方法为,先在 AutoCAD 软件界面操作一遍,然后查看在此过程中提示工具栏内的数据变化,最后,将这些变化稍加改动按照 CAD 二次开发的规则输入到 SendCommand 内,即可得到相应的 Python 代码。


      以直线的绘制为例,在 AutoCAD 软件中的操作步骤为:输入绘制直线的快捷命令 “L” > 回车 > 屏幕上点选第一个点 > 回车 > 屏幕上点选第二个点 > 回车,直觉告诉我们 SendCommand 括号内数据输入也应该是这一顺序,即


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


    在这里插入图片描述

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


    在这里插入图片描述

    SendCommand方式绘制直线的Python代码


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



    在这里插入图片描述

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


    在这里插入图片描述

    预设视图及视觉样式修改过程中命令栏内的显示情况



      显然,实现这两项功能的 Python 代码为:


    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    """
        =============================
        Author: DalNur
        Email: liyang@alu.hit.edu.cn
        =============================
    """
    
    from pyautocad import Autocad
    
    pyacad = Autocad(create_if_not_exists=True)
    pyacad.prompt("Hello! AutoCAD from pyautocad.")
    print(pyacad.doc.Name)
    
    pyacad.ActiveDocument.SendCommand("_-view" + chr(13) + "_swiso" + chr(13))  # 定义预设视图为西南等轴测。
    pyacad.ActiveDocument.SendCommand("_vscurrent" + chr(13) + "_R" + chr(13))  # 视图样式设置为真实。
    

      值得注意的是,不是所有的功能均可由该方式实现,极其个别的功能就实现不了,但是这些功能通常也没必要采用二次开发的方式实现,直接点下软件界面不好么。



    9.2 GetEntity


      更多图元选择即选择集功能的实现,详见博客:Python AutoCAD 选择集


    在这里插入图片描述


      以下代码实现将所选图元的颜色更改为红色。


    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    """
        =============================
        Author: DalNur
        Email: liyang@alu.hit.edu.cn
        =============================
    """
    
    import pythoncom
    import win32com.client
    import math
    
    wincad = win32com.client.Dispatch("AutoCAD.Application")
    doc = wincad.ActiveDocument
    doc.Utility.Prompt("Hello! Autocad from pywin32com.\n")
    msp = doc.ModelSpace
    print(doc.Name)
    
    def vtpnt(x, y, z=0):
        """坐标点转化为浮点数"""
        return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_R8, (x, y, z))
    
    pnt1, pnt2, pnt3 = vtpnt(-40, -40), vtpnt(500, 500), vtpnt(300, 200)
    lineObj = msp.AddLine(pnt1, pnt2)
    circleObj = msp.AddCircle(pnt3, 100)
    
    print("请在CAD程序界面点选图元,未选中则报错!")  # try...except处理报错
    rtnObj = doc.Utility.GetEntity()  # 返回对象
    
    print(rtnObj)
    print("所选图元的ID:", rtnObj[0].ObjectID)
    print("鼠标单击处的坐标:", rtnObj[1])
    
    sltObject = doc.ObjectIdToObject(rtnObj[0].ObjectID) # 图元ID转化为对应的图元
    
    clr = doc.Application.GetInterfaceObject("AutoCAD.AcCmColor.19")
    clr.SetRGB(255, 0, 0)  # 创建红色
    sltObject.TrueColor = clr  # 指定颜色
    
    doc.Application.Update()
    

    9.3 SetXData/GetXData

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    """
        =============================
        Author: DalNur
        Email: liyang@alu.hit.edu.cn
        =============================
    """
    
    # This example creates a line and attaches extended data to that line.
    
    import pythoncom
    import win32com.client
    
    wincad = win32com.client.Dispatch("AutoCAD.Application")
    doc = wincad.ActiveDocument
    doc.Utility.Prompt("Hello! Autocad from pywin32com.\n")
    msp = doc.ModelSpace
    print(doc.Name)
    
    def vtpnt(x, y, z=0):
        return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_R8, (x, y, z))
    
    def vtfloat(val):
        return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_R8, val)
    
    def vtint(val):
        return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_I2, val)
    
    def vtvariant(var):
        return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_VARIANT, var)
    
    # Create the line
    
    startPntCoords = vtpnt(1, 1, 0)
    startPoint = msp.AddPoint(startPntCoords)
    endPntCoords = vtpnt(5, 5, 0)
    endPoint = msp.AddPoint(endPntCoords)
    lineObj = msp.AddLine(startPntCoords, endPntCoords)
    
    # Initialize all the xdata values. Note that first data in the list should be
    # application name and first datatype code should be 1001
    
    DataType = [1001, 1000, 1003, 1040, 1041, 1070, 1071, 1042]
    Data = ["Test_Application", "This is a test for xdata",
            "0", 1.23479137438413E+40, 1237324938, 32767, 32767, 10]
    reals3 = [-2.95, 100, -20]
    # DataType.append(1010)
    # Data.append(reals3)
    # worldPos = [4, 400.99999999, 2.798989]
    # DataType.append(1011)
    # Data.append(worldPos)
    
    DataType = vtint(DataType)
    Data = vtvariant(Data)
    # Attach the xdata to the line
    lineObj.SetXData(DataType, Data)
    
    # Return the xdata for the line
    xtypeOut, xdataOut = lineObj.GetXData("Test_Application")
    print(xtypeOut)
    print(xdataOut)
    

      所添加的拓展数据可按如下方式查看: [ObjectARX] ArxDbg介绍、自动加载及其下载


    在这里插入图片描述

    扩展数据的查看



    十、文件


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


    10.1 另存为.dwg/.dxf


      以下方法另存为的文件格式只能是 .dwg 和 .dxf,这与在 CAD 软件中,依次点击 文件 >> 另存为 是相对应的。


    1. 当前文件另存为.dwg/.dxf

      将当前文件另存为 TestSaveAs.dxf,文件的版本是:AutoCAD 2013 DXF,代码如下:

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

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

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


    版本 .dwg .dxf
    AutoCAD 2000 12 13
    AutoCAD 2004 24 25
    AutoCAD 2007 36 37
    AutoCAD 2010 48 49
    AutoCAD 2013 60 61

      AcSaveAsType enum 可在官方二次开发帮助文档 ActiveX Develop’s Guide 中查看,查看方式如下图所示:


    在这里插入图片描述



    1. 特定文件另存为.dwg/.dxf

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

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


    10.2 另存为.pdf


      首先,确认绘图仪 DWG To PDF.pc3 的工作目录,在搜索神器 Everything 的搜索栏中输入 DWG To PDF.pc3,便可得到绘图仪的工作目录,如下图所示:


    在这里插入图片描述



      另存为 .pdf 文件的 Python 代码如下:


    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    """
        =============================
        Author: DalNur
        Email: liyang@alu.hit.edu.cn
        =============================
    """
    
    from pyautocad import Autocad
    
    pyacad = Autocad(create_if_not_exists=True)
    pyacad.prompt("Hello! AutoCAD from pyautocad.")
    print(pyacad.doc.Name)
    
    print(pyacad.ActiveDocument.ActiveLayout.ConfigName)
    
    # 设置绘图仪管理器的工作目录
    ACADPref = pyacad.ActiveDocument.Application.preferences.Files
    
    originalValue = ACADPref.PrinterConfigPath \
        = r"C:\Users\33876\AppData\Roaming\Autodesk\AutoCAD 2014\R19.1\chs\Plotters"
    
    print(ACADPref)
    print(originalValue)
    
    oplot = pyacad.ActiveDocument.PlotConfigurations.Add("PDF", acad.ActiveDocument.ActiveLayout.ModelType)
    
    # acad.ActiveDocument.SetVariable("sdi", 0)
    pyacad.ActiveDocument.ActiveLayout.ConfigName = "DWG To PDF.pc3"
    pyacad.ActiveDocument.SetVariable("Filedia", 0)
    
    # acad.ActiveDocument.SetVariable("RASTERPREVIEW", 1)
    pyacad.ActiveDocument.SetVariable("BACKGROUNDPLOT", 0)
    pyacad.ActiveDocument.Plot.QuietErrorMode = True
    
    # acad.ActiveDocument.Plot.PlotToFile("D:\\" + "123" + ".pdf", "Foxit Reader PDF Printer")
    pyacad.ActiveDocument.Plot.PlotToFile("D:\\" + "test" + ".pdf")
    
    oplot.Delete()
    oplot = None
    obj = pyacad.ActiveDocument.GetVariable("DBMOD")
    print(obj)
    

      • 参考资料使用python将cad批量导出至pdf

      本代码只是简单介绍该功能的实现,打印范围等更为详细的设置,请查看二次开发帮助文档。



    10.3 另存为.jpg/.png


      更改绘图仪设置即可,可参考另存为.dpf。


    在这里插入图片描述


    在这里插入图片描述

    确定绘图仪的工作路径

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    """
        =============================
        Author: DalNur
        Email: liyang@alu.hit.edu.cn
        =============================
    """
    
    import win32com.client
    
    wincad = win32com.client.Dispatch("AutoCAD.Application")
    doc = wincad.ActiveDocument
    doc.Utility.Prompt("Hello! Autocad from pywin32com.\n")
    msp = doc.ModelSpace
    
    print(doc.Name)
    print(doc.ActiveLayout.ConfigName)
    
    # 设置绘图仪管理器的工作目录
    ACADPref = doc.Application.preferences.Files
    
    originalValue = ACADPref.PrinterConfigPath \
        = r"C:\Users\33876\AppData\Roaming\Autodesk\AutoCAD 2014\R19.1\chs\Plotters"
    
    print(ACADPref)
    print(originalValue)
    
    oplot = doc.PlotConfigurations.Add("JPG", doc.ActiveLayout.ModelType)
    
    doc.ActiveLayout.ConfigName = "PublishToWeb JPG.pc3"
    doc.SetVariable("Filedia", 0)
    
    doc.SetVariable("BACKGROUNDPLOT", 0)
    doc.Plot.QuietErrorMode = True
    
    doc.Plot.PlotToFile("D:\\" + "test" + ".jpg")
    
    oplot.Delete()
    oplot = None
    obj = doc.GetVariable("DBMOD")
    print(obj)
    

      CAD转化为JPG后,图片模糊不清楚怎么办 ?




    十一、致谢


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




    十二、说明


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


    在这里插入图片描述

    AutoCAD草图与注释


    转载请注明出处!

    转载请注明出处!

    转载请注明出处!



    在这里插入图片描述

    原博客部分内容

      这 9 篇博客分别是:


         - Python 二次开发 AutoCAD 简介

         - Python 二次开发 AutoCAD 系统设置

         - Python 二次开发 AutoCAD 图层

         - Python 二次开发 AutoCAD 绘图

         - Python 二次开发 AutoCAD 修改

         - Python 二次开发 AutoCAD 块组

         - Python 二次开发 AutoCAD 注释

         - Python 二次开发 AutoCAD 文件

         - Python 二次开发 AutoCAD 选择集




    十三、尾声


      以上,便是 Python 语言二次开发 AutoCAD 的简单介绍。

      因篇幅有限,某些非关键功能未做详细介绍,如有疑问,欢迎邮件交流。

      Email: liyang@alu.hit.edu.cn

      仅以此文为我断断续续一年多的 Python 调用 AutoCAD 的相关工作做一个总结。

      与此同时,也希望能够为初学者/有需要的人提供多一点参考。

      本文仅用于个人学习,除此之外,无其他任何用途。

      因个人水平有限,文中难免有所疏漏,还请各位大神不吝批评指正。

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

      本文最早发表于 2018-12-13 18:20:21,最后修改于 2020-4-25 22:02:07。

      如无特殊原因,不再更新!

      本文逻辑清楚,内容详实,引例丰富。

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

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

      打赏可备注邮箱,本人将赠送本系列博客的全部 Python 源代码。

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



    在这里插入图片描述




    十四、参考文献


    [1]. 使用Python读写DXF和DWG文件. 大专栏.

    [2]. VARIANT的使用方法. xinzhiyounizhiyouni.

    [3]. comtypes 1.1.3 documentation




    展开全文
  • CAD2018下载AutoCAD2018下载安装详细教程附软件下载

    万次阅读 多人点赞 2019-06-13 20:20:36
    AutoCAD2018是广大绘图从业者必备的软件,它强大的功能可以绘制出各个行业的完整施工图,准确的尺寸更是有利于施工团队完全按照图纸进行施工操作; 但对于很多初学者来说,软件安装的诸多步骤使其望而却步,为此,我...

    此文,我主要为你分享CAD2018软件下载和安装的详细步骤,这是一款应用于室内、建筑、机械、工业、园林等诸多行业的必备软件,作为从业者是必备同样的专业能力,才能根据要求完成精确的图纸,便于施工人员根据准确的图纸进行施工操作;

    但很多朋友跟我反馈不懂在哪下载软件、也不清楚怎么安装AutoCAD软件,为此我把自己亲测好用的安装包分享出来,并且亲自录制了安装视频教程也编写了图文教程,方便你下载安装使用。

    AutoCAD2018(32位)安装包:https://pan.baidu.com/s/1HBoxUb-qdx-giqFoxPfTrw
    AutoCAD2018(64位)安装包:https://pan.baidu.com/s/1FnAeYMdf_UrLn34kWjrDtw
    (32位和64位请根据自己的电脑系统进行选择下载,匹配即可)

    下载方法:电脑打开浏览器,复制下载链接,粘贴至浏览器网址栏(网址栏哦,网址,不是百度搜索框)打开,点保存到网盘,然后打开自己的网盘客户端,找到保存的CAD2018安装包,用鼠标右键单击,点下载,等待下载完成即可;

    一、安装视频教程

    https://v.qq.com/x/page/h0863xp4o41.html
    观看1080P高清蓝光更清晰:复制链接粘贴至电脑浏览器或腾讯客户端打开即可;

    二、安装图文教程

    1、解压AutoCAD2018软件安装包,进入解压出来的文件夹;
    用鼠标右键单击已经下载好的AutoCAD2018的软件包,点解压到当前文件夹,解压完成之后,双击进入新解压出来的文件夹内;
    在这里插入图片描述
    2、打开自解压程序,选择解压路径;
    双击打开AutoCAD2018的自解压程序,点更改,选择当前的文件夹为解压路径,点击确定,开始解压所有AutoCAD2018安装所需的程序,等待所有程序解压完成;
    在这里插入图片描述
    3、点击安装;
    自解压完成之后,会自动出现AutoCAD2018的安装界面,直接点击安装;
    在这里插入图片描述
    4、许可协议点我接受,再点下一步;
    许可协议内容较长,若你有时间,可以阅览一番,加深对软件的了解,若时间紧凑的话,直接点击我接受,再点下一步;
    在这里插入图片描述
    5、点击浏览,配置安装路径;
    安装路径依然选择当前文件夹,这里切记不要安装到C盘系统盘,否则电脑在后期制图的过程中会非常卡,配置好,点击安装,等待所有程序安装完成即可;
    尽量不要选择C盘,其他的DEF盘,你可以根据自己平时的安装习惯随便选;
    在这里插入图片描述
    6、安装完成,点击完成;
    所有程序安装完成之后,会显示成功,现在点击完成,点击之后可能会出现提示你是否要重启电脑,点否,等我们接下来更重要的步骤完成后,再重启;
    在这里插入图片描述在这里插入图片描述
    7、打开CAD2018软件;
    桌面找到AutoCAD2018软件图标,双击打开,或者右键单击选择以管理员身份运行;
    在这里插入图片描述
    8、选择输入序列号;
    这个界面有三个选项,而我们是要对软件进行激活使用,所以直接点击中间的输入序列号;
    在这里插入图片描述
    9、我同意隐私声明;
    这是软件对于我们自身的操作出的声明,直接点我同意即可;
    在这里插入图片描述
    10、第一次点击激活;
    这是首次进入激活界面,如果在未激活的状态下,是试用软件30天,我们直接一次完成,免去以后的麻烦;
    在这里插入图片描述
    11、输入AutoCAD2018匹配的序列号666-69696969,密钥001J1,点击下一步;
    序列号和密钥一定要输入正确且和软件版本匹配,如果有一个字母输入错误的话,都无法完成。
    在这里插入图片描述
    12、先点重新输入,再点Yes;
    这里有的会出现,有的电脑不会出现,当出现的时候,没关系,点击后退,再点yes;
    在这里插入图片描述
    13、第二次点击激活;
    现在再次回到许可激活界面,还是一样的步骤,第二次点击激活;
    在这里插入图片描述
    14、第二次输入AutoCAD2018序列号666-69696969,密钥001J1,点击下一步;
    在这里插入图片描述
    15、选择第二个我有激活码;
    现在正式进入到AutoCAD2018的激活选项界面,点击第二个,我有激活码,激活码需要通过匹配的注册机在自己的电脑上计算得出,别人无法代劳,必须自己计算;
    在这里插入图片描述
    16、右键单击注册机,选择以管理员身份运行;
    回到解压AutoCAD2018的文件夹,进入注册机文件夹,找到注册机,鼠标右键单击,选择以管理员身份运行;
    在这里插入图片描述
    17、先点Patch再点确定;
    运行打开注册机之后,直接点击Patch,出现一个小提示框,点确定;
    在这里插入图片描述
    18、计算激活码详细步骤;
    1)复制申请号,粘贴至注册机第一行;
    2)点击Generate生成激活码;
    3)双击注册机第二行的激活码全选,复制,粘贴至激活选项界面;
    4)点下一步;
    请用快捷键复制粘贴,Ctrl+C是复制,Ctrl+V是粘贴,申请号和激活码都不要手动输入,都用快捷键复制粘贴;
    在这里插入图片描述
    19、感谢您激活AutoCAD2018,点击完成;
    在这里插入图片描述
    20、打开软件,进入AutoCAD2018软件操作界面,就可以正常使用了;
    在这里插入图片描述
    AutoCAD2018(32位)安装包:https://pan.baidu.com/s/1HBoxUb-qdx-giqFoxPfTrw
    AutoCAD2018(64位)安装包:https://pan.baidu.com/s/1FnAeYMdf_UrLn34kWjrDtw
    (32位和64位请根据自己的电脑系统进行选择下载,匹配即可)

    下载方法:电脑打开浏览器,复制下载链接,粘贴至浏览器网址栏(网址栏哦,网址,不是百度搜索框)打开,点保存到网盘,然后打开自己的网盘客户端,找到保存的CAD2018安装包,用鼠标右键单击,点下载,等待下载完成即可;

    AutoCAD2018安装视频教程:https://v.qq.com/x/page/h0863xp4o41.html
    观看1080P高清蓝光更清晰:复制链接粘贴至电脑浏览器或腾讯客户端打开即可;

    展开全文
  • Auto.JS实现抖音,刷宝等刷视频app,自动点赞,自动滑屏,自动切换视频 代码如下 auto(); var appName=rawInput("","刷宝短视频"); launchApp(appName); sleep("5000"); setScreenMetrics(1080,1920); toast(...
  • C++中的 auto vs auto& vs auto&&

    千次阅读 2019-10-08 09:05:49
    参考文章:C++11 auto vs auto& vs auto&&
  • C++ 遍历循环表达示 auto, auto&, auto&&

    千次阅读 2019-12-24 23:47:00
    for(auto x : range) 创建拷贝,无法修改range中的元素 for(auto& x : range) 可以修改range中的元素,但一般用以下这种 for(auto&& x : range) for(const auto & x : range) 只读range中的...
  • AutoLisp:AutoLisp实现对AutoCAD进行输入命令,选择对象,实现不同方向进行缩放 目录 AutoLisp实践 实现结果 实现代码 AutoLisp实践 实践案例1:输入命令,选择对象,实现不同方向进行缩放 ...
  • auto关键字

    千次阅读 2019-01-09 12:17:24
    一、auto 简介 在C语言中,使用 auto 修饰的变量,是具有自动存储器的局部变量,但很少有人去使用它,在C++11中,auto 有了新的含义,它不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto ...
  • c++中的auto、const auto&

    千次阅读 2020-08-28 12:18:36
    auto:在块作用域、命名作用域、循环初始化语句等等 中声明变量时,关键词auto用作类型指定符。 const:修饰符 ​ 想要拷贝元素:for(auto x:range) ​ 想要修改元素 : for(auto &&x:range) ​ 想要只读元素...
  • C++11 auto vs auto& vs auto&&

    万次阅读 2016-10-05 16:27:22
    auto and auto && cover most of the cases: Use auto when you need a local copy. This will never produce a reference. The copy (or move) constructor must exist, but it might not get ...
  • 如何免费获得auto uninstaller的密钥?auto uninstaller密钥是不是得买?auto uninstaller密钥是多少? 找到一个帖子密钥可以用 技术贴:auto uninstaller密钥破解注册机ver 8.8.58楼主分享几个auto uninstaller...
  • c++中auto

    万次阅读 多人点赞 2019-05-11 12:00:51
    auto 在早期C/C++中auto的含义是:使用auto修饰的变量,是具有自动存储器的局部变量 C++11中,标准委员会赋予了auto全新的含义即:auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明...
  • AutoML

    万次阅读 2018-12-10 14:36:28
    AutoML 什么是AutoML? ​ 目前一个优秀的机器学习和深度学习模型,离不开这几个方面: ​ 一、优秀的数据预处理; ​ 二、合适的模型结构和功能; ​ 三、优秀的训练策略和超参数; ​ 四、合适的后处理操作; ​ ...
  • Auto.JS 教程(1)

    万次阅读 多人点赞 2019-02-12 20:22:26
    Auto.JS Auto.js 是个基于 JavaScript 语言运行在Android平台上的脚本框架。Auto.js主要工作原理是基于辅助服务AccessibilityService。 功能介绍: 数据监控:可以监视当前手机的数据。 图片监控:截图获取...
  • MySQL之auto_increment问题记录

    万次阅读 2020-01-30 11:54:48
    概述 在数据库应用中,经常用到自动递增的唯一编号来标识记录。...可用“alter table table_name auto_increment=n”命令来重设自增的起始值,当然在设置的时候MySQL会取数据表中auto_increment列的最大值...
  • c++ auto基本用法

    万次阅读 多人点赞 2018-08-27 11:55:28
    auto的作用就是为了简化变量初始化,如果这个变量有一个很长很长的初始化类型,就可以用auto代替。 注意点: 1.用auto声明的变量必须初始化(auto是根据后面的值来推测这个变量的类型,如果后面没有值,自然会报错...
  • autoconfig

    千次阅读 2018-12-02 10:32:59
    autoconfig 概述 背景:阿里巴巴 作用:提供项目配置文件中的placeholder(${XXX})占位符替换功能 ,支持编译时替换,运行时替换 优点:配置文件是静态的,只需要在编写时加入占位符。在具体时环境中替换...
  • margin:auto 和margin:0 auto的区别

    千次阅读 多人点赞 2018-12-26 22:56:36
    margin:auto=margin:auto auto auto auto,表示上下左右都为auto;margin:0 auto=margin:0 auto 0 auto,表示上下为0,左右为auto; 2、居中方式不同。margin:auto表示横竖都居中,margin: 0 auto表示横居中,竖不...
  • 楼主也查过网上关于如何解决AutoCAD安装失败的一些文章,是说删除几个AutoCAD文件和AutoCAD软件注册表就可以解决AutoCAD安装失败的问题,实际的情况并没有这么简单,导致AutoCAD安装失败的原因有很多种。AutoCAD安装...
  • Auto-Keras API详解(1)——安装Auto-Keras(一)前 言(二)安装PyTorch、Keras(三)安装graphviz(四)安装Auto-Keras(五)测 试(六)总 结 (一)前 言 Auto-Keras是一款开源的,用于自动化机器学习的高级...
  • 简述De-noising auto-encoder和variation auto encoder的区别? De-noising auto-encoder是在input data引入噪声,并使得output data和input data越接近越好。 variation auto encoder是在input data经过降维得到...
  • TF之AutoML框架:AutoML框架的简介、特点、使用方法详细攻略 目录 AutoML框架的简介 AutoML框架的特点 AutoML框架的使用方法 AutoML VS AutoKeras 框架 AutoML框架的简介 AutoML官网:...
  • 今天我带来的分享是AutoCAD2021中文下载安装详细教程,纯个人经验,希望你能用得上; AutoCAD2021(64位)网盘下载链接: https://pan.baidu.com/s/1ppxY286sM-dUo2epAoJWVg 提取码:8qhm AutoCAD2021(64位)迅雷...
  • Spring boot 启动报错 Failed to auto-configure a DataSource *************************** APPLICATION FAILED TO START *************************** Description: Failed to auto-configure a DataSource: '...
  • AutoDock分子对接

    万次阅读 2018-06-04 20:07:27
    分子对接 # ... 软件自选,Dock, AutoDock… 二、操作过程记录及结果 1、软件下载与安装 AutoDock下载安装 进入AutoDock官网下载安装http://autodock.scripps.edu/downloads/autodock-r...
  • c++ auto

    千次阅读 2015-04-14 11:39:37
    C++11中引入的auto主要有两种用途:自动类型推断和返回值占位。auto在C++98中的标识临时变量的语义,由于使用极少且多余,在C++11中已被删除。前后两个标准的auto,完全是两个概念。 1. 自动类型推断  auto自动...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 320,692
精华内容 128,276
热门标签
关键字:

auto