https://www.xin3721.com/eschool/pythonxin3721/

本文主要给大家介绍一下SmartSoft中用C#.Net实现AutoCAD块属性提取的方法,并给出实例代码与大家共享。此类实现AutoCAD块属性提取功能,在VS.Net2003(2005)+AutoCAD2004(2007)下调试通过。

以下是引用片段:

using System;

using AutoCAD=Autodesk.AutoCAD.Interop;

using System.Runtime.InteropServices ;

using dbx = Autodesk.AutoCAD.Interop.Common;

namespace SmartSoft.ACAD

{

///

/// 读取AutoCAD属性信息

///

public class AutoCADConnector:IDisposable

{

private AutoCAD.AcadApplication _Application;

private bool _Initialized;

private bool _Disposed;

#region 类初始化及析构操作

///

/// 类初始化,试图获取一个正在运行的AutoCAD实例,

/// 如果没有则新起动一个实例。

///

public AutoCADConnector()

{

try

{

//取得一个正在运行的AUTOCAD实例

this._Application = (AutoCAD.AcadApplication)Marshal.GetActiveObject("AutoCAD.Application.17");

}//end of try

catch

{

try

{

//建立一个新的AUTOCAD实例,并标识已经建立成功。

_Application = new AutoCAD.AcadApplicationClass();

_Initialized=true;

}

catch

{

throw new Exception ("无法起动AutoCAD应用程序,确认已经安装");

}

}//end of catch

}//end of AutoCADConnector

~AutoCADConnector()

{

Dispose(false);

}

public void Dispose()

{

Dispose(true);

GC.SuppressFinalize(this);

}

protected virtual void Dispose(bool disposing)

{

if (!this._Disposed && this._Initialized )

{

//如果建立了AUTOCAD的实列,调用QUIT方法以避免内存漏洞

this._Application.ActiveDocument.Close (false,"");

this._Application.Quit();

this._Disposed=true;

}

}

#endregion

#region 公共用户接口属性

///

/// 取得当前类所获得的AUTOCAD实例

///

public AutoCAD.AcadApplication Application

{

get

{

return _Application;

}

}//end of Application

#endregion

#region 公共用户接口方法

///

/// 根据给定的文件名以AxDbDocument类型返回该文档

///

public dbx.AxDbDocument GetThisDrawing(string FileName,string PassWord)

{

ACAD.AutoCADConnector Connector=new AutoCADConnector();

//这是AutoCAD2004的Programe ID

string programeID ="ObjectDBX.AxDbDocument.17";

AutoCAD.AcadApplication AcadApp = Connector.Application;

dbx.AxDbDocument dbxDoc;

dbxDoc=(dbx.AxDbDocument)AcadApp.GetInterfaceObject(programeID);

try

{

if (System.IO.File.Exists (FileName)==false) throw new Exception ("文件不存在。");

dbxDoc.Open(FileName,PassWord);

}// end of try

catch (Exception e)

{

System.Windows.Forms.MessageBox.Show(e.Message );

dbxDoc=null;

}

return dbxDoc;

}//end of function GetThisDrawing

///

/// 根据当前文档和块名取得当前块的引用

///

public dbx.AcadBlockReference GetBlockReference(dbx.AxDbDocument thisDrawing,string blkName)

{

dbx.AcadBlockReference blkRef=null;

bool found = false;

try

{

foreach (dbx.AcadEntity entity in thisDrawing.ModelSpace )

{

if (entity.EntityName=="AcDbBlockReference")

{

blkRef=(dbx.AcadBlockReference)entity;

//System.Windows.Forms.MessageBox.Show(blkRef.Name);

if (blkRef.Name.ToLower() ==blkName.ToLower() )

{

found = true;

break;

}

}//end of entity.EntityName=="AcDbBlockReference"

}// end of foreach thisDrawing.ModelSpace

}//end of try

catch (Exception e)

{

System.Windows.Forms.MessageBox.Show ("图形中有未知的错误,格式不正确或图形数据库需要修愎。系统错误提示:" + e.Message ,"信息",System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Warning);

thisDrawing=null;

}//end of catch

if (!found) blkRef = null;

return blkRef;

}//end of function GetBlockReference

///

/// 根据给定的块引用(dbx.AcadBlockReference)和属性名返回属性值

///

public object GetValueByAttributeName(dbx.AcadBlockReference blkRef,string AttributeName)

{

object[] Atts=(object[])blkRef.GetAttributes();

object attValue=null;

for (int i=0;i

{

dbx.AcadAttributeReference attRef;

attRef=(dbx.AcadAttributeReference)Atts[i];

if (attRef.TagString==AttributeName)

{

attValue= attRef.TextString ;

break;

}

}//end of for i

return attValue;

}// end of function

#endregion

}//end of class CAutoCADConnector

}//end of namespace AutoCAD

python autocad 块属性_SmartSoft中用C#.Net实现AutoCAD块属性提取|简明python教程|python入门|python教程...相关推荐

  1. python大神推荐_大神推荐!!!高评分书籍轻松带你入门Python

    上次讲到了初学者阶段必看的书籍.今天给大家继续讲讲 进阶者阶段 当你对Python有了一定的了解,并在生活或者工作中使用过一段时间,那么你就可以考虑进阶相关的书籍,请看下面这3本: <Pytho ...

  2. python教程推荐-入门python有什么好的书籍推荐?

    Python 越来越火爆,最近自己也在学习.整理下一些 Python 资料,和练手的项目.希望对你学习 Python 有所帮助. 如果大家想要文中 10G Python 编程视频,点击下面的卡片即可免 ...

  3. python大神和小白代码_看大神6行代码如何带领小白快速入门Python爬虫?

    原标题:看大神6行代码如何带领小白快速入门Python爬虫? 可能是小编本身就有一定的基础!当然我没有瞧不起小白的看法,知识觉得要入门一门编程语言确实比较简单,而且小编本身也是从小白过来的,但是当初接 ...

  4. python面向对象教程_Python入门系列教程3-面向对象

    课程咨询.获取课件.技术交流直接加入博学谷在线学习:631731828 课程简介 本课程是Python系列入门课程的第三阶段,该阶段我们会学习面向对象(OOP)这一重要的编程思想.学习的知识点主要包括 ...

  5. python网络爬虫教程-如何入门 Python 爬虫?

    "入门"是良好的动机,但是可能作用缓慢.如果你手里或者脑子里有一个项目,那么实践起来你会被目标驱动,而不会像学习模块一样慢慢学习. 另外如果说知识体系里的每一个知识点是图里的点,依 ...

  6. python代码入门教程_Ipython入门小教程

    学习<利用python进行数据分析>第三章 IPython:一种交互式计算和开发环境的笔记,共享给大家,同时为自己作为备忘用. 安装ipython用pip即可.ps.博主用的是win7系统 ...

  7. python数据结构教程_python入门基础教程随笔1-python数据结构-列表

    # encoding: utf-8 import sys #导入标准包 from test.test_compare import Cmp a = 3 b = 4 c = 5.66 d = 8.0 e ...

  8. python 计算机程序设计-某高校计算机编程教授教你如何快速入门python,一文带你进入编程...

    image 如何快速入门Python 学习任何一门语言都是从入门(1年左右),通过不间断练习达到熟练水准(3到5年),少数人最终能精通语言,成为执牛耳者,他们是金字塔的最顶层.虽然万事开头难,但好的开 ...

  9. 新手如何快速入门Python(菜鸟必看篇)

    学习任何一门语言都是从入门(1年左右),通过不间断练习达到熟练水准(3到5年),少数人最终能精通语言,成为执牛耳者,他们是金字塔的最顶层.虽然万事开头难,但好的开始是成功的一半,今天这篇文章就来谈谈如 ...

最新文章

  1. release和retain还有多少人在用
  2. 微信小程序~自定义属性设置和获取(data-)
  3. sklearn自学指南(part42)--使用手册的目录
  4. Linux C高级编程——网络编程之包裹函数
  5. 龙果充值平台,具备话费充值、流量充值、话费卡兑换功能;可以拓展其他充值兑换业务;也适用于支付、鉴权等业务功能的拓展。
  6. BGP——AS—PATH正则表达式(实列讲解+配置)
  7. [Vue.js] 基础 -- Vue简介
  8. php 各种排序算法,PHP四种常见排序算法
  9. VC++ (四)动态内存
  10. 03-25 内存统计
  11. 机器学习的数学基础书籍
  12. 小封装、高通流 TVS 管 UN1K/2K/3K Series
  13. 华为路由器与交换机常用命令(20200618)
  14. android抽屉式listview,Android实现列表抽屉展示效果
  15. Box和Dropbox的区别
  16. 做你的大玩具——轩小样儿的六一
  17. unity旗帜飘动shader
  18. C语言基础知识点复习
  19. 如何用计算机蓝牙发送文件,电脑怎么利用蓝牙使手机和电脑互传文件
  20. Wormhole for mac(在Mac上控制iOS和Android设备)

热门文章

  1. 为什么Java中float类型的取值范围大于long类型
  2. 使用alist备份Obsidian文件,并实现全平台同步(webdav)
  3. 西安西北大学计算机研究生学费,西北大学在职研究生学费贵不贵?一年研究生费用是多少?...
  4. elasticsearch 浏览器访问不到
  5. java中计算一个方法执行时长,耗费单位(秒)
  6. POJ 3579 二分
  7. 洛桑联邦理工学院 法语 计算机,洛桑联邦理工学院(École Polytechnique Fédérale de Lausanne)_快飞留学...
  8. ie6注释造成文字“重影”分析。双文字
  9. JS实现鼠标滑过图片的抖动效果
  10. Thinkpad S3 YOGA加装了m.2 固态盘后的系统设置问题