精华内容
下载资源
问答
  • 微信公众号二次开发项目源码

    千次下载 热门讨论 2016-01-18 17:29:13
    微信公众号二次开发项目源码 微信开发 公众号开发 OAuth2.0 微信二次开发 微信 java 代码,保护微信OAuth2.0授权 微信自定义菜单 微信回复图文消息 微信动态回复内容 微信开发即微信公众平台开发,将企业信息、服务...
  • AutoCAD二次开发文档(C++ C# 史上最全版本)

    千次下载 热门讨论 2016-08-19 13:57:08
    目前收集到关于AutoCAD二次开发最全的文档。 也包括张帆 超清晰版PDF可复制代码的文档及源代码 还有.net CAD二次开发
  • 泛微OA ecology 二次开发培训实例 开发完整文档说明 一、 ECOLOGY系统框架结构 二、 说明一个JSP页面,一个JAVA程序的基本组成,如何阅读JSP页面 三、 页面权限控制的说明,怎样在页面中引用权限,怎么样新增一个权限...
  • 精伦IDR210 IDR200 2016年最新4.1通用二次开发包,开发说明文档,DEMO
  • 基于Java的微信公众号二次开发源码

    热门讨论 2015-09-23 09:30:18
    现在网上关于Java微信二次开发的资料少之又少,本人也是新手,做了个小的demo供大家参考,实现了智能翻译、人脸识别、歌曲点播和历史上的今天等功能。
  • 最新 价值15K的大型微信二次开发框架源码免费供大家开发学习。 功能涵盖现有所有微信开发接口,功能丰富,供各位微信开发的朋友下载学习。 代码已经过调试,在本地可以直接运行,后台登录账号:admin,密码:admin...
  • Arcengine二次开发源代码

    热门讨论 2013-04-15 22:13:52
    (1) 常用功能 测量 (2) 空间分析 1、 叠加分析(Buffer,Clip,Union,Merge,Intersect,ConvexHull) 2、 缓冲区分析(点、线、面缓冲区分析) (3) 网络分析(最短路径查询、动态模拟) ...
  • Python 二次开发 AutoCAD 简介

    万次阅读 多人点赞 2018-12-13 18:20:21
    pyautocad模块由俄罗斯工程师开发,因参考实例较少,工程需要,现将模块中一些基本的用法,做出简要说明,叙述力求简洁明了, 因个人水平有限,文中难免有所疏漏,还请各位大神不吝批评指正。 ...



    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
    2010AutoCAD.Application.18
    2014AutoCAD.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 nameDescription
    VT_EMPTYIndicates that a value was not specified.
    VT_R8Indicates a double value.
    VT_DISPATCHIndicates 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 typeVARIANT type
    int32, int, intc, int_VT_I4
    uint32, uint, uintcVT_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 值计算得到,计算公式如下:


    c l r = R + 256 × G + 256 × 256 × B {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

    c l r = 198 + 256 × 224 + 256 × 256 × 180 = 11854022 {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 20001213
    AutoCAD 20042425
    AutoCAD 20073637
    AutoCAD 20104849
    AutoCAD 20136061

      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




    展开全文
  • CAD二次开发资料汇总

    千次阅读 2020-07-08 19:54:07
    对工程出身的朋友来说,CAD就像一位朋友,常伴吾身,为了提高效率,于是小伙伴门开始尝试CAD二次开发,刚入门,资料去哪找?如何开始二次开发?有没有可以带我的老司机…等都是让小伙伴头疼的问题。因此笔者这篇文章就...

    欢迎加入建筑信息化开发交流群,获取开发资料 群号:711844216

    一、背景

    对工程出身的朋友来说,CAD就像一位朋友,常伴吾身,为了提高效率,于是小伙伴门开始尝试CAD二次开发,刚入门,资料去哪找?如何开始二次开发?有没有可以带我的老司机…等都是让小伙伴头疼的问题。因此笔者这篇文章就给大家分享了一些解决问题的观点,还收集了一些不错的二次开发资源,供大家学习参考,希望能帮助到大家。

    二、基本认识

    2.1我该采取什么语言?

    CAD二次开发优先考虑使用C#语言,理由如下:

    1. C++较难上手,后期进阶可以再去学习
    2. Autolisp比较久远
    3. VB也较远了
    4. C#上手简单,也有很好的开发教材作为讲解

    2.2我该如何开始?

    1. 首先要对C#语言,有一个基本的认识,可以看第3部分推荐的C#学习资料(程度,理解类)
    2. 接着看4.1部分推荐的书籍,对cad二次开发有一个基本的认识(程度,能配置好开发环境,自己独立写出helloworld)
    3. 根据工作内容,边学边实战

    2.3有问题了我该怎么办?

    首先,刚入门时,每个人都会遇到很多问题,有些小伙伴完全不思考,就去问人,而另外一些小伙伴会尝试着自己去解决问题,实在不行再去问人。其实笔者建议大家遇到问题学会自己去解决,这样才能提高自己解决问题的能力。那么如何去主动解决问题呢?

    2.4如何主动去解决问题?

    把你的问题,描述清楚或者报错信息填入搜索引擎,然后

    1. 搜索;
    2. 搜索;
    3. 还是搜索;

    《AutoCAD Civil 3D .NET二次开发》这本书的作者王磊是一位土木人士,但是并不妨碍他写出一本Civil3D二次开发的书籍。他说到我们要学会用关键词去搜索,你对问题描述的越清楚越简单就越容易找到答案。请小伙伴在搜索问题时,把问题思考清楚,然后在进行搜索。那么去哪里搜索呢?可以搜索的地方参见4.6。

    重点:搜索 , 关键词

    三、C#学习资源推荐

    3.1书籍

    主要是适合新手的:
    《C#图解教程(第4版)》 优先阅读
    《C#本质论(第4版)》扩展提高

    3.2视频

    b站搜索"C#"根据自己口味,挑选合适视频
    b站搜索”Wpf“如果以后有界面开发的需要

    3.3网站

    菜鸟教程:https://www.runoob.com/csharp/csharp-tutorial.html

    四、CAD二次开发资源

    4.1书籍

    强烈推荐:
    《Auto CAD VBA&VB.NET开发》作者:曾洪飞
    《深入浅出AutoCAD.NET二次开发》作者:李冠亿
    虽然这两本书都快十年了,但是经典就是经典,不会因为时间而褪色。

    4.2视频

    上面两本书,足以

    4.3代码资源

    1. 上述书中的代码例子
    2. 官方的https://github.com/ADN-DevTech/AutoCADDotnetTrainingMaterial

    4.4官方文档

    http://help.autodesk.com/view/OARX/2018/ENU/?guid=GUID-4E1AAFA9-740E-4097-800C-CAED09CDFF12
    这个是2018的,不同的CAD版本会有对应的开发文档,大家可以去对应去搜索

    4.5官方开发中心

    https://www.autodesk.com/developer-network/platform-technologies/autocad
    这个里面有很多资料,大家可以看

    4.6搜索问题的地方

    1. 上面提到的资源,都是可以搜索的地方
    2. google/百度/bing/各种搜索引擎,以及各大视频网站
    3. cad 二次开发官方论坛https://forums.autodesk.com/t5/autocad/ct-p/8 (强烈推荐,很多问题里面都有现成的答案,只要你用心去找了)
    4. 官方手册

    说白了,就是把网络上能找到的都翻一遍,问题还是不能解决再去请教别人.

    五、注意事项

    1.上面提到的这些资源,都是骑士看过或者了解过的,都很不错,所以总结下来分享给大家,一个人的力量是有限的,如果大家发现还有不错的资源可以评论留言,我补充上去。
    2.大家好,我是黑夜の骑士,欢迎大家关注我的博客,笔者将持续输出建筑信息化开发、移动互联网开发以及游戏编程干货;
    3.欢迎加入建筑信息化行业开发交流群,获取更多开发资料 群号:711844216

    微信搜索并关注“工程人的编程课堂”公众号获得更多编程干货

    展开全文
  • Revit二次开发资料汇总

    万次阅读 多人点赞 2019-05-29 19:48:27
    现在越来越多的小伙伴加入了Revit二次开发的阵营,刚入门,资料去哪找?如何开始二次开发?有没有可以带我的老司机?…等都是让小伙伴头疼的问题。因此笔者这篇文章就给大家分享了一些解决问题的观点,还收集了一些不错...

    欢迎加入BIM行业开发交流1群,获取开发资料 群号:711844216(已满), 二群群号:1016453207

    一、背景

    现在越来越多的小伙伴加入了Revit二次开发的阵营,刚入门,资料去哪找?如何开始二次开发?有没有可以带我的老司机…等都是让小伙伴头疼的问题。因此笔者这篇文章就给大家分享了一些解决问题的观点,还收集了一些不错的二次开发资源,供大家学习参考,希望能帮助到大家。

    二、基本认识

    2.1我该采取什么语言?

    revit二次开发优先考虑使用C#语言,理由如下:

    1. 目前市面上关于revit二次开发的书籍,基本上都是用C#语言写的
    2. 网络上关于revit二次开发的问题回答,都是基于C#的,vb很少,C++更少
    3. 相比dynamo中的python而言,可以调试会方便很多

    2.2我该如何开始?

    1. 首先要对C#语言,有一个基本的认识,可以看第3部分推荐的C#学习资料(程度,理解类)
    2. 接着看4.2部分推荐的视频,对revit二次开发有一个基本的认识(程度,能配置好开发环境,自己独立写出helloworld)
    3. 根据工作内容,边学边实战

    2.3有问题了我该怎么办?

    首先,刚入门时,每个人都会遇到很多问题,有些小伙伴完全不思考,就去问人,而另外一些小伙伴会尝试着自己去解决问题,实在不行再去问人。其实笔者建议大家遇到问题学会自己去解决,这样才能提高自己解决问题的能力。那么如何去主动解决问题呢?

    2.4如何主动去解决问题?

    把你的问题,描述清楚或者报错信息填入搜索引擎,然后

    1. 搜索;
    2. 搜索;
    3. 还是搜索;

    《AutoCAD Civil 3D .NET二次开发》这本书的作者王磊是一位土木人士,但是并不妨碍他写出一本Civil3D二次开发的书籍。他说到我们要学会用关键词去搜索,你对问题描述的越清楚越简单就越容易找到答案。请小伙伴在搜索问题时,把问题思考清楚,然后在进行搜索。那么去哪里搜索呢?可以搜索的地方参见4.5。

    重点:搜索 , 关键词

    三、C#学习资源推荐

    3.1书籍

    主要是适合新手的:
    《C#图解教程(第4版)》 优先阅读
    《C#本质论(第4版)》扩展提高

    3.2视频

    b站搜索"C#"根据自己口味,挑选合适视频
    b站搜索”Wpf“如果以后有界面开发的需要

    3.3网站

    菜鸟教程:https://www.runoob.com/csharp/csharp-tutorial.html

    四、Revit二次开发资源

    4.1书籍

    目前市面上只有两本:
    《Autodesk Revit二次开发基础教程》作者:官方
    《API开发指南 Autodesk Revit》 作者:宦国胜

    4.2视频

    2021.09.10更新
    黑夜de骑士Revit二次开发进阶课程 地址:https://www.bilibili.com/video/BV1cz4y1r745
    2019.11.6更新
    黑夜de骑士:面向工程人员的Revit二次开发课堂 地址:https://space.bilibili.com/38879307/channel/index
    博主自己做的视频,欢迎大家观看。

    BimCC:《小火车Revit二次开发教程》作者:DikyEggs 地址:http://v.bimcc.com/course/35
    Youtube频道:《revit二次开发系列》作者: Danny Bentley 地址:https://www.youtube.com/channel/UC1Dx-jGyRbvvHzZ8ZyGWF5w/featured
    腾讯课堂:《Revit二次开发经典案例》作者:唐僧老师 地址:https://ke.qq.com/course/334916
    2019.7.23新增
    b站:《revit二次开发零基础入门教学视频》 作者:JFeast 地址:https://www.bilibili.com/video/av31299938?from=search&seid=16777852901119255333

    4.3博客

    国内:
    黑夜の骑士:https://blog.csdn.net/birdfly2015
    叶雄进:https://blog.csdn.net/joexiongjin/
    卢石碧: https://blog.csdn.net/lushibi
    大气象:https://www.cnblogs.com/greatverve/category/286724.html

    国外:
    Jeremy Tammik :https://thebuildingcoder.typepad.com/

    4.4代码资源

    1. 官方SDK中的Samples
    2. Jeremy Tammik的https://github.com/jeremytammik/the_building_coder_samples

    4.5搜索问题的地方

    1. 上面提到的资源,都是可以搜索的地方
    2. google/百度/bing/各种搜索引擎,以及各大视频网站
    3. revit 二次开发官方论坛 https://forums.autodesk.com/t5/revit-api-forum/bd-p/160 (强烈推荐,很多问题里面都有现成的答案,只要你用心去找了)
    4. 官方手册

    说白了,就是把网络上能找到的都翻一遍,问题还是不能解决再去请教别人.

    五、注意事项

    1.上面提到的这些资源,都是笔者看过或者了解过的,都很不错,所以总结下来分享给大家,一个人的力量是有限的,如果大家发现还有不错的资源可以评论留言,我补充上去。
    2.如果想用python进行revit二次开发的,可以参考博主的另外一篇文章dynamo中使用python代码资源合集
    3.我是黑夜の骑士,欢迎大家关注我的博客,笔者将持续输出revit二次开发以及编程干货。
    4.b站开发教学:黑夜de骑士
    5.知乎:黑夜de骑士

    微信搜索“工程人的编程课堂”公众号获得更多编程干货

    展开全文
  • ABB机器人二次开发(C#)

    千次阅读 多人点赞 2019-11-15 16:03:00
    0 前言 作者是一名机电小硕,正值开题之际,开题方向是分拣机器人控制系统方面,突发奇想记录一下学习过程。关于机器人,实验室有一台ABB,末端有一前几届...第一发帖,有丢丢激动,编辑栏还挺好用。。好评!

    0 前言

    作者是一名机电小硕,正值开题之际,开题方向是分拣机器人控制系统方面,突发奇想记录一下学习过程。关于机器人,实验室有一台ABB,末端有一前几届师兄做的平行手爪。项目还有视觉等部分,不是我的内容,便不多言。关于ABB机器人,我之前也只是能做简单的操作,RS(ROBOTSTUDIO)会用,rapid可以写几句简单的编程;关于C#,一点都不会,之前学的VB,所以C\C++\C#都不熟。
    本帖很基础很基础,完全小白学习,,努力的学习过程中~~

    1 初期规划

    现阶段和同组成员已经搭建了实验台,系统设计也要开始了!
    分拣机器人控制系统包括:
    1、PC与ABB成功通讯
    2、PC获取显示ABB的实时位姿
    3、结合视觉等其他模块,在C#中编写具体抓取的程序
    大概是这三部分了,没经验,先这么定叭,,后期边做边改~

    2 通讯篇

    关于计算机与ABB机器人的通讯,目前有两种方法:
    1、PC SDK,ABB官网提供下载,只有C#的,官网下载放这;
    http://developercenter.robotstudio.com/landing
    下载最新版,配置一下(我的已经配置好了,借一下别人的图,侵权删)
    在这里插入图片描述在这里插入图片描述在这里插入图片描述
    拿到这三个dll,编程的时候要在C#引用才可以:在这里插入图片描述
    这样就可以啦!

    2、Rapid+Socket通信,这个在ABB手册上讲到了,有代码,很详细,不过好像要改动一点
    ”应用手册-控制器软件IRC5-8.4 SocketMessaging"

    在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

    忘记说了,上面两种方法都需要ABB配置PC-Interface接口,切记,一定要,ABB一般买的时候是没有的,需要另买。
    ————————————————
    今天先写这些吧,下一篇开始编程

    第一次发帖,有丢丢激动,编辑栏还挺好用。。好评!
    在这里插入图片描述

    展开全文
  • 完整OA系统源码,可以二次开发

    千次下载 热门讨论 2014-06-03 11:22:26
    一整套完整的OA系统源码,文档很全,支持二次开发,没加密
  • Django Admin的二次开发

    千次阅读 2021-07-29 14:44:19
    Django开发自带的管理系统本身功能已经很强大,但每个项目的管理系统不可能千篇一律,因此,可以对这个admin系统进行二次开发。 本博客对应《Django Web应用开发实战》9.4节的内容,做个学习过程的记录。 编译环境:...
  • 想必大家都听说过微信二次开发,那么什么是微信二次开发呢?如何进行微信二次开发呢?下面就由艺形艺意工作室创始人黎想将从3W角度为大家详细介绍什么是微信二次开发,如何进行微信二次开发。那么也请大家带着这个...
  • QGIS 示例程序,实现QGIS二次开发

    热门讨论 2011-06-11 15:47:26
    本人编写的QGIS示例程序,环境vc9,qgis1.6 sdk,qt4.7,实现了基本的gis功能。
  • scratch3.0 二次开发-基本介绍(第一章)

    千次阅读 2020-01-19 11:17:48
    scratch3.0 二次开发-基本介绍(第一章) scratch3.0二次开发运行scratch-gui项目并了解工程结构(第二章) scratch3.0二次自定义品牌logo(第三章) scratch3.0 scratch-gui中集成自定义用户系统1(第四章) scratch3.0...
  • Revit二次开发入门教程一(工具篇)

    千次阅读 2019-09-07 21:30:05
    前言 BIM诞生的背景 Revit在BIM中扮演的角色 ...Revit二次开发入门 开发前准备 1. 订购并安装Autodesk Revit(或安装试用版) 2. 安装Visual Studio 3. 安装Revit AddIn-Manager 安装步骤: 4. 安装...
  • 泛微OA二次开发环境搭建

    万次阅读 热门讨论 2019-08-20 18:18:44
    泛微OA二次开发环境搭建 **前言:**本次分享主要分两个方面,1、基于泛微e8测试安装包的二次开发环境;2、基于公司内容OA搭建备份后的二次开发环境,20190819这天是我搭建成功的第一天,经验欠缺,所以分享内容可能...
  • ABB机器人 二次开发 C# PC SDK配置

    千次阅读 热门讨论 2019-09-04 16:44:51
    前言: 前段时间(一年前吧)开发了一下的ABB 的上位机 现在也忘的差不多了, 可以控制机器人移动 ...ABB 的二次开发只提供了c#的sdk 没有c++ 先配置一下c#环境吧 我用的是ABB IRB 1200工业机器人没记错的话 ABB...
  • 我们在参与泛微开发有四年多的经验,实践过十多个不同的开发项目。 我们提供泛微平台技术支持顾问、项目开发、提供开发资料等服务。 期间收集、整理、归纳专门针对泛微开发的专业技能资料; E8 开发资料大全 ...
  • QGis 二次开发搭建(windows)

    千次阅读 2019-09-04 10:38:15
    本文记录我在windows下配置QGis的二次开发环境。 安装SDK 官网下载安装包 随便选,反正都是在线下载。本地安装不带sdk包。 SDK全部梭哈(全部下载)具体版本类型可在官网查询,我这里是安装完成的...
  • Workbench二次开发技术综述

    千次阅读 2018-10-16 15:08:07
    ANSYS Customization Toolkit(ACT) 是workbench用来进行二次开发的技术。ANSYS 在提供的开发文档中有着很明确的阐述,摘取其中一段希望对大家有所启示: ANSYS Workbench is built on a modular architecture that ...
  • ArcGIS二次开发知识点总结

    千次阅读 多人点赞 2019-09-08 00:33:13
    投影坐标系统:是将三维地理坐标系统上的经纬网投影到维平面地图上使用的坐标系统(等角投影、等积投影、正形投影等),地图单位通常为米。常见的投影坐标系有:北京54 、西安80 、WGS84 地理坐标系 :地理...
  • 关于禅道二次开发的分享

    千次阅读 2018-11-16 16:03:17
    关于禅道二次开发的分享 近期,公司测试部门需要一款用来管理项目的系统,因此,使用了禅道测试平台,并在此基础上进行了修改,为了更好的使用。 首先,感谢禅道测试平台的开发团队,最近我也在研究禅道,所以写了一...
  • Revit二次开发案例一(第1讲)

    千次阅读 多人点赞 2019-05-24 19:58:59
    这期起,将为大家带来二次开发的小案例讲解,通过借助Revit建模与二次开发,帮助大家快速提高开发水平,快快参加吧!!! 族实例是通过族类型创建的,而创建族实例是Revit二次开发尤其重要的,因此小伙伴们要熟练...
  • NX二次开发 开发总结

    千次阅读 2019-10-24 21:15:36
    从事NX二次开发已经有三年了,却从未写过总结性的文章,今天就补一篇! 第一部分:方案布局 首先,由于开发的工具包可能编译多个NX版本,所以启动NX项目通常使用批处理文件,设置VS&NX版本。 第二部分:...
  • 基于GIS的二次开发

    千次阅读 多人点赞 2019-02-28 19:10:53
    针对基础部分和三维数据库建设部分实习内容,进行校园、三维地理信息系统设计,完成校园地理信息系统、三维数据库设计和实现,并完成简单的查询、浏览和分析功能。本次实习开发语言为C#,开发平台为vs2010。 ...
  • 精伦IDR210通用二次开发包V3.2.0.

    热门讨论 2013-01-08 17:14:56
    精伦IDR210通用二次开发包V3.2.0可用,搞了个身份证识别需要的,大家可以下载玩玩
  • Redash 二次开发入门

    万次阅读 2019-02-20 11:40:26
    在Redash二次开发上做了不少工作,修改bug,定制样式,定制功能,增加数据源等等。聊聊自己的二次开发经验。 懂分享的人,一定会快乐! 环境准备 Redash依赖的外部环境比较多,特别是Python相关的包,大多数时候一次...
  • vscode二次开发界面篇

    千次阅读 2019-05-13 20:29:15
    title: vscode二次开发界面篇 date: 2019-05-13 10:17:19 tags: “VsCode” 本文给大家介绍vscode的界面的自定义修改 首先,先看vsocde界面如图1: 界面大致可以分为六部分: 1.标题栏titlebar 包含其中左边的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,577,530
精华内容 631,012
关键字:

二次开发