https://blog.csdn.net/dengyiyu/article/details/2201175

本文主要给大家介绍一下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=;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

C#.Net实现AutoCAD块属性提取的更多相关文章

  1. AutoCAD开发1---获取块属性

    Private Sub CommandButton1_Click() Dim pEntity As AcadObject Dim pBlock As AcadBlockReference Dim pP ...

  2. arcgis操作笔记-根据属性提取某区域要素

    1. 提取

  3. 定位absolute使内联支持宽高(块属性变为内联,内容默认撑开)margin auto 失效

    relative   没脱离文档流 absdute 完全脱离文档流 margin :auto 失效 相对整个文档偏离 相对父级定位 fixed 脱离文档流 与绝对定位特性一致 3.P标快不能包块级标签 ...

  4. Oracle EBS FORM 设置块属性

    declare blk_id BLOCK; begin blk_id := Find_block('ADRP_HEADER'); Set_block_property(blk_id,insert_al ...

  5. CAD增强属性块的还原(转)

    来自:http://blog.3snews.net/space.php?uid=13924959&do=blog&id=70174 作者:毛毛虫 Demo下载:CAD增强属性块的还原 ...

  6. 软件-绘图-AutoCAD:百科

    ylbtech-软件-绘图-AutoCAD:百科 AutoCAD(Autodesk Computer Aided Design)是Autodesk(欧特克)公司首次于1982年开发的自动计算机辅助设计 ...

  7. 梦想CAD控件图块COM接口知识点

    梦想CAD控件图块COM接口知识点 图块是将多个实体组合成一个整体,并给这个整体命名保存,在以后的图形编辑中图块就被视为一个实体.一个图块包括可见的实体如线.圆.圆弧以及可见或不可见的属性数据.图块的 ...

  8. Python【BeautifulSoup解析和提取网页数据】

    [解析数据] 使用浏览器上网,浏览器会把服务器返回来的HTML源代码翻译为我们能看懂的样子 在爬虫中,也要使用能读懂html的工具,才能提取到想要的数据 [提取数据]是指把我们需要的数据从众多数据中挑 ...

  9. kaggle数据挖掘竞赛初步--Titanic<派生属性&维归约>

    完整代码: https://github.com/cindycindyhi/kaggle-Titanic 特征工程系列: Titanic系列之原始数据分析和数据处理 Titanic系列之数据变换 Ti ...

随机推荐

  1. 不要天真了,这些简历HR一看就知道你是培训的,质量不佳的那种

    上到职场干将下到职场萌新,都会接触到包装简历这个词语.当你简历投到心仪的公司,公司内负责求职的工作人员是如何甄别简历的包装程度的?Jason 老师根据自己的经验写下了这篇文章,谁都不是天才,包装无可厚 ...

  2. mysql in与exists问题剖析

    1 问题描述 ​ 发布当天发现一个日志分析的sql,在测试环境上执行良好,1秒内,而在线上环境上,执行要13秒左右. 嵌套sql一步一步分析后,发现出在in上,因时间紧迫,来补不及具体分析原因,尝试使 ...

  3. C语言指针专题——指针怎么就很灵活?

    最近在研读 C Primer pkus(第五版)中文版,老外写的还是很经典的,推荐给朋友们,购买地址:C primer plus 5版中文版购买 另外再推荐两本书: 1. 2017年9月全国计算机二级 ...

  4. 一道简单的for循环面试题(数字龙形排序)

    本道题是我从网上见到的,因为是一道很久没做的循环题,自己的思路也是陷入了一些思维陷阱中,后来经过把大脑放空,重新看这道题后,思路立马就出来了. 题目就是完成如下图所示的效果: 我一开始是想着将它按照奇 ...

  5. JS高级程序设计第4章--精简版

    前言:纯手打!!!按照自己思路重写!!!这次是二刷了,想暑假做一次完整的笔记,但用本子来写笔记的话太贵了,可能哪天还丢了..所以还是博客好== 第四章:变量.作用域和内存问题 4.1 基本类型和引用类 ...

  6. 找到linux中当前java的安装位置

    先看java -version $java version "1.8.0_111" Java(TM) SE Runtime Environment (build 1.8.0_111 ...

  7. drop、truncate和delete的区别 [转载]

    drop.truncate和delete的区别 本文转载自: https://www.cnblogs.com/zhizhao/p/7825469.html     (1)DELETE语句执行删除的过程 ...

  8. 个人永久性免费-Excel催化剂功能第62波-单元格区域内数据加解密处理,最有效地保护数据方式

    Excel的数据保护能力有限,诸如之前提及过的工作表保护.工作薄保护等,都是十分微弱的保护措施,而对于强保护的工作薄打开密码来说,它像是个总开关一样,要么全不能看,要么就全看到.有这样的场景需求,一份 ...

  9. 关于Calendar的一些用法总结

    import java.util.Calendar; import java.security.KeyStore.TrustedCertificateEntry; import java.text.D ...

  10. Spark学习之第一个程序 WordCount

    WordCount程序 求下列文件中使用空格分割之后,单词出现的个数 input.txt java scala python hello world java pyfysf upuptop wintp ...