第一范文网 - 专业文章范例文档资料分享平台

利用C#进行AutoCAD的二次开发

来源:用户分享 时间:2025/6/1 15:17:04 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

} private void button1_Click(object sender, System.EventArgs e) {

AutoCADConnector connector=new AutoCADConnector(); AcadDocument document=connector.Application.ActiveDocument;

AcadAcCmColor color=(AcadAcCmColor)document.Application.GetInterfaceObject(\//新建一AcadAcCmColor对象,该对象用来给直线的颜色属性赋值

AcadLine line=document.ModelSpace.AddLine(new double[]{0,0,0},new double[]{200,200,0}); //加入直线

ColorDialog dlg=new ColorDialog();//生成一颜色对话框

if(dlg.ShowDialog()==DialogResult.OK)//显示颜色对话框,并按确定按钮后 {

color.SetRGB(dlg.Color.R,dlg.Color.G,dlg.Color.B);//设置颜色为颜色对话框中选择的颜色 line.TrueColor=color;//设置直线的颜色 }

line.Update();//更新显示 } } }

给AutoCAD的对象设置颜色,注意不是使用Color属性,而是使用TrueColor属性。TrueColor属性是一个AcadAcCmColor对象,它必须使用GetInterfaceObject方法而不能用new AcadAcCmColor()方法声明。

给AcadAcCmColor对象设置颜色时,由于要使用.net颜色对话框中选择的值,因此可使用SetRGB的方法,它的三个参数分别是RGB颜色的红,绿,蓝的值。

在C#中使用ObjectDBX技术从未打开图形中获得图块的信息

C#才鸟(QQ:2491785)

从未打开图形中能获得图块的信息吗?明经通道的VBA版块已经介绍了VBA的实现方法,那在C#中能否做到呢? 回答是肯定的。下面就来说明具体的实现方法。 要求: 会用C#编程

读过我写的“利用C#进行AutoCAD的二次开发“(在明经通道中有) 开始:

在visual studio.net中新建一C#控制台程序 在引用选项卡中添加下列类库: interop.AutoCAD.dll AcadExample.dll

ObjectDBX16(在“解决方案资源管理器”中右击“引用”标签,在弹出的菜单中选择“添加引用”,在“添加引用”对话框中选择“com\选项卡下的下拉列表框中的“AutoCAD/ObjectDBX Common 16.0 Type Library\项) 然后键入以下代码: 1: using System; 2: using AutoCAD; 3: using dbx = AXDBLib; 4: using AcadExample; 5:

6: namespace ConsoleApplication1 7: {

8: ///

9: /// Summary description for Class1. 10: ///

11: class Class1 12: {

13: ///

14: /// The main entry point for the application. 15: ///

16: [STAThread]

17: static void Main(string[] args) 18: {

19: using (AutoCADConnector connector = new AutoCADConnector()) 20: {

21: string progid = \注意,这是AutoCAD2004的写法, // 若是AutoCAD2002和AutoCAD2000i则是”ObjectDBX.AxDbDocument.1“ 22: AcadApplication acadApp = connector.Application; 23: dbx.AxDbDocument dbxDoc;

24: dbxDoc = (dbx.AxDbDocument)acadApp.GetInterfaceObject(progid); 25: dbxDoc.Open(@\

26: foreach (dbx.AcadEntity entity in dbxDoc.ModelSpace) 27: {

28: if (entity.EntityName == \判断实体是否是块参照 29: {

30: dbx.AcadBlockReference blkRef;

31: blkRef = (dbx.AcadBlockReference)entity; //将是块参照的实体强制转换为块参照类型 32: object[] atts = (object[])blkRef.GetAttributes();//获取块参照中的属性(为对象类型) 33: for (int i = 0; i < atts.Length; i++) //遍历块参照属性 34: {

35: dbx.AcadAttributeReference att;

36: att = (dbx.AcadAttributeReference)atts;//将块参照属性(对象类型)强制转换为块参照属性类型 37: Console.WriteLine(\ 38: att.TagString,

39: att.TextString);//显示块参照属性的Tag和Text的值 40: } 41: } 42: }

43: Console.ReadLine(); 44: } 45: } 46: } 47: }

第一个要注意的是第三行,使用了一个别名。因为AutoCAD和ObjectDBX命名空间有许多相同的类名,因此,你必须使用全名,而不能使用简写的形式,但ObjectDBX写起来比较麻烦,所以用别名dbx来使输入方便一些。

程序前面部分的代码,你可以参考我写的“利用C#进行AutoCAD的二次开发“这篇文章。让我们来看第21行,程序定义了一个字符串progid,作为第24句的函数GetInterfaceObject的参数,该函数是用来产生一个AxDbDocument对象。但要注意, GetInterfaceObject函数返回的类型是object,所以你必须用强制转换把它变为AxDbDocument类。然后在第25行使用24行产生的AxDbDocument对象来”打开“一个.dwg文件(其实没有打开),需要注意的是这个文件的路径必须是正确的。这个文件就是我们要获得的块信息所在的文件。 由于ObjectDBX 没有选择集,所以只有通过遍历文件的模型空间来获得块的信息(26-28行)。 余下语句的说明我已经写在程序的注释中了。

你可以发现ObjectDBX的工作原理在C#中与VBA是类似的,只不过要进行必要的类型转换。

vb.net二次开发AutoCAD中画圆示例

Imports Autodesk

Imports Autodesk.AutoCAD.Interop

Imports Autodesk.AutoCAD.Interop.Common imports Autodesk.AutoCAD.ApplicationServices Imports Autodesk.AutoCAD.DatabaseServices Imports Autodesk.AutoCAD.Runtime Imports Autodesk.AutoCAD.Geometry

Imports System

Private Sub btnCircle_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCircle.Click '定义圆的圆心

Dim center As Point3d = New Point3d(100, 100, 0)

'定义圆的半径

Dim radius As Double = 50

'定义一个Circle对象来表示你要生成的圆,传入的第二个参数为圆的法向, '就是把圆生、//成在什么面上,因为AutoCAD程序一般都是平面问题, '因此你一般都把这个法向量定义成//z轴方向。 Dim circle As Circle

circle = New Circle(center, New Vector3d(0, 0, 1), radius)

Dim bt As BlockTable Dim btr As BlockTableRecord

Dim db As Database

'获得当前活动AutoCAD文档所在的数据库

db = Application.DocumentManager.MdiActiveDocument.Database

'获得事务处理管理器

Dim tm As Autodesk.AutoCAD.DatabaseServices.TransactionManager tm = db.TransactionManager

'定义事务处理

Dim trans As Transaction

Try

'开始事务处理,也就是往CAD中加入东西 trans = tm.StartTransaction

bt = tm.GetObject(db.BlockTableId, OpenMode.ForRead, False)

'获得块表记录

btr = tm.GetObject(bt(BlockTableRecord.ModelSpace), OpenMode.ForWrite, False)

'向块表记录加入圆的相关信息 btr.AppendEntity(Circle)

'向AutoCAD加入圆

tm.AddNewlyCreatedDBObject(Circle, True)

trans.Commit()

Catch ex As Exception

Throw New ApplicationException(ex.Message) End Try

end sub

(参照了明经通道里的二次开发相关内容)

搜索更多关于: 利用C#进行AutoCAD的二次开发 的文档
利用C#进行AutoCAD的二次开发.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c53h7o3kj0t1oirv32mda_3.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top