python读取cad_SmartSoft中用C#.Net实现AutoCAD块属性提取|python基础教程|python入门|python教程...

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值