以Arcgis10.X要素类批量转带注记的CAD文件工具为例,分享如何利用Python的pywin32模块,将Arcgis和CAD联动起来进行二次开发。

       Arcgis和CAD是每个测绘和地理信息相关专业从业者不可或缺的软件,和我们的日常工作息息相关,重要性不言而喻,经常使用到这两款软件的朋友,或多或少都有二次开发需求。而能将CAD和Arcgis联动起来二次开发的语言如C++或者C#等对专业基础又要求较高,入门较难。

       Python语言的pywin32模块刚合适能解决上述问题,虽然此方式的运行效率不高,不能进行深度开发,但基本可以应付我们的日常工作需求了。下面博主分享下如何利用Python的pywin32模块,将Arcgis和CAD联动起来,开发出自己的脚本工具,以提升工作效率。

一、前期准备

1、python的pywin32模块安装

       pywin32是Python在Windows平台上的一个扩展库,它允许开发者使用Python语言来编写与Windows操作系统交互的应用程序。通过pywin32模块,开发者可以利用Python语言与Windows系统安装的应用程序进行无缝交互,编写各种应用程序、脚本和自动化工具。Arcgis10.X使用的是Python2.7版本,pywin32需要自己安装,不会的朋友可以参见博主的另一篇博文:​​​​​​以ARCGIS批量创建要素类工具为例,分享如何利用Python的pywin32模块读取EXCEL文件_arcgis excel python-CSDN博客CSDN

 2、利用ActiveX进行CAD二次开发的参考文件

       下载《ActiveX 和 VBA 参考》明经通道翻译版本(在CSDN站内搜索即可),里面包含了CAD二次开发的对象模型,方法、属性、事件及代码示例。通过查阅此文档,找到自己想要进行二次开发的对象模型及其属性和方法,能二次开发实现绝大多数想要的功能。

以Arcgis10.X要素类批量转带注记的CAD文件工具为例,分享如何利用Python的pywin32模块,将Arcgis和CAD联动起来进行二次开发。_第1张图片

二、链接操作CAD的基础代码

import os
import win32com.client
import pythoncom
import math

#转换函数
def vtpnt(x, y, z):
    """坐标点转化为浮点数"""
    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(list):
    """列表转化为浮点数"""
    return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_R8, list)

def vtInt(list):
    """列表转化为整数"""
    return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_I2, list)

def vtVariant(list):
    """列表转化为变体"""
    return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_VARIANT, list)

#连接CAD,不同版本的CAD,对应不同ID值,可网上查阅
wincad = win32com.client.Dispatch("AutoCAD.Application.{}".format(ProgID)) 

'''
文件操作:
doc = wincad.ActiveDocument.Application.Documents.Add("") #新建CAD文件
doc = wincad.ActiveDocument #当前活跃的CAD文件
wincad.ActiveDocument.Application.Documents("已知的文件名").Activate() #将已知文件名的文件设为当前活动的CAD文件
doc = wincad.ActiveDocument.Application.Documents.Open(r"xxx.dwg") #打开已有CAD文件
doc.Close() #关闭当前文件
doc = wincad.ActiveDocument.Application.Documents(r"xxx.dwg").Close(True, "xxx.dwg") #关闭并重命名保存CAD文件
doc.SaveAs(r"xxx.dwg", 61) #文件另存为
.dwg 12-2000 24-2004 36-2007 48-2010 60-2013
.dxf 13-2000 25-2004 37-2007 49-2010 61-2013
msp = doc.ModelSpace #模型窗口
lsp = doc.PaperSpace #布局窗口
doc.Utility.Prompt("Hello! Autocad from pywin32com.\n") #向命令行发送提示。
'''
'''
图层设置
layer = doc.Layers.Add("测试图层") #添加新图层,图层名称为"测试图层"  
layerabc = doc.Layers.Item ( "MyNewLayer" )
layerabc.Delete #删除图层
layer = doc.ActiveLaye

你可能感兴趣的:(arcgis,python)