c 语言cad 二次开发,c#对AutoCAD二次开发
对AutoCAD进行二次开发可以使用:ObjectArx,VBA,VLisp。但在这里不借用它们,而是直接使用C#开发。
有类库和应用程序两种方式:
方法1:vs2010 开发AutoCAD 2008 类库
建立动态库,从AutoCAD命令行使用NETLOAD调入,然后执行其方法
一 创建项目
1,建一个wxindows窗体程序“项目”,设置输出为“类库”
2,添加引用--浏览--从AutoCAD2008的安装目录C:\Program Files\Autodesk\MDT
2008下,找到引用acdbmgd.dll和acmgd.dll
3,引用如下命名空间
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.Runtime;
4,方法名前,加特性 CommandMethod
5,完整代码如下:
using System;
using System.Collections.Generic;
using System.Text;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.Runtime;
namespace ClassLibrary2
{
public class
Class1
{
[CommandMethod("HelloWorld")]
public void HelloWorld()
{
Editor ed =
Application.DocumentManager.MdiActiveDocument.Editor;
ed.WriteMessage("HelloWorld CAD!");
}
}
}
二 工程的目标框架框架版本
在 vs2010 中 开发,默认的版本是.NET Framework 4.0版本高,对于引用AutoCAD
2008,讲无法编译
在工程的属性中,目标框架是 改为 .NET Framework 2.0 或者.NET Framework 3.5 就可以了
三 调试的方法设置
vs2010生成 AutoCAD2008 类库调试方法
属性中 --调试-- 外部启动程序:
C:\Program Files\Autodesk\MDT 2008\acad.exe
四 启动AutoCAD 2008
1 在vs2010的开发环境,编译链接完成后,按F5键启动调试,等待自动启动AutoCAD 2008完成后,
2 在命令行输入:NETLOAD,弹出装入类库的对话框,
浏览找到刚编译形成的类库,ClassLibrary2\ClassLibrary2\bin\Debug\ClassLibrary2.dll
3 在命令行输入: HelloWorld,
将会提示是:未知的命令,原因是acdbmgd.dll acmgd.dll版本过高所致
五 重新引入较低版本的动态库
AutoCAD 2008 自带的动态库 acdbmgd.dll acmgd.dll
版本 17.1.0.0,运行时版本 v2.0.50727
版本高 ,在vs2010工程中引用后,虽可以生成的动态库,但在AutoCAD中NETLOAD可以装入,但执行其中的方法,提示是未知的命令,有两种方法:
1 引用AutoCAD的安装目录下的acdbmgd.dll 和acmgd.dll的版本是 17.1.0.0,从其属性中
将“复制本地” 改为 “False”,这样形成的dll 的方法,在AutoCAD中就可以认识,不再是未知的命令
2 可以到网上下载较低的版本,比如我下载如下的版本,添加引用它们就可以了
版本 16.2.54.0
运行时版本 v1.0.3705
===================================
方法2:c#建立一个操AutoCAD2008的应用程序
一 首先建立一个 基于WIndowsFormApplicaton的项目
二 类型库的添加引用
右击项目的“引用”--“添加引用”--从“COM”页,找到以下两个类型库
1 AutoCAD 2008 Type Library
引用名称 ----- 对应的动态库
AutoCAD -----
Autodesk.AutoCAD.Interop.dll 嵌入互操作类型 False
2 Autodesk AutoCAD Mechanical 1.0 Type Library
引用名称 ----- 对应的动态库
AcadmAuto ----- Interop.AcadmAuto.dll,嵌入互操作类型 False
AXDBLib -----
Autodesk.AutoCAD.Interop.Common.dll
GEAuto -----
Interop.GEAuto.dll
三 主要的操作函数
1 使用的文件中加入语句
using AutoCAD = Autodesk.AutoCAD.Interop;
using System.Runtime.InteropServices;
using dbx = Autodesk.AutoCAD.Interop.Common;
2 注操作代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Windows.Forms;
using AutoCAD = Autodesk.AutoCAD.Interop;
using dbx = Autodesk.AutoCAD.Interop.Common;
using SmartSoft.ACAD;
namespace aotuCADwinFrm
{
public
partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
AutoCADConnector acd=new AutoCADConnector();//生成操作类对象
dbx.AxDbDocument doc_as = acd.GetThisDrawing("c:\\doc_as.dwg",
"");
dbx.AxDbDocument acddoc = acd.GetThisDrawing("c:\\D1.dwg",
"");//打开图形文件
// dbx.AcadBlockReference brf =
acd.GetBlockReference(acddoc,"pp");
acd.GetEntityReference(acddoc, doc_as);//删除不需要的实体
acd.Dispose();
}
}
}
3 使用的改造自网上的类
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;
private dbx.AxDbDocument doc_as;
#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;
}
c 语言cad 二次开发,c#对AutoCAD二次开发相关推荐
- CAD自控lisp_基于AutoLisp的AutoCAD二次开发自动生成系统图
基于 AutoLisp 的 AutoCAD 二次开发自动生成系统图 [摘 要]本文主要阐述了应用 autolisp 语言二次开发 autocad 自动生成系统图的实现方案. [关键词] autocad ...
- 用C语言编程函数求圆台体积,第六篇 AutoCAD二次开发技术.pdf
第六章 ObjectARX 开发技术 1. AutoCAD二次开发概述 7. MFC对话框 2. ObjectARX简介 8. 搜索图形数据库及获取实体 3. 常用实体类和几何类 数据 4. 创建实体 ...
- AutoCAD 二次开发语言的选择
因为某些功能的原因,一部份VBA的用户最终选择了NET,又因为某些功能的原因,一部份NET的用户最终选择了C++.最终这部份业余用户走上了专业的二次开发之路,而脱离了原来的专业. 来自 一个CAD群叫 ...
- python能二次开发cad么_2,手动创建CAD二次开发项目--AutoCAD二次开发(2020版)
本项目使用手动创建,意为不使用SDK模板. 从Visual Studio的"文件"下拉菜单中,选择"新建"->"项目...". 在出现 ...
- AutoCAD二次开发(C#)完成后,如何实现CAD启动时自动加载dll(不必输入netload)?
AutoCAD二次开发(C#)完成后,如何实现CAD启动时自动加载dll(不必输入netload)? 1.复制编译后的dll路径,比如我的是[C:\SectionManager_CAD_1.1_031 ...
- 基于C#的AutoCAD二次开发之获取用户输入信息、选择集、访问CAD内部命令
基于C#的AutoCAD二次开发之获取用户输入信息.选择集.访问CAD内部命令 在CAD创建图形对象时,经常需要和用户进行交互,例如:直线创建时需要用户输入起点和终点(或长度)信息,复制对象时需要指定 ...
- AutoCAD二次开发——CAD数据库层次关系(笔记22.11.29)
笔记:CAD数据库层次结构总结 https://www.likecs.com/show-313797.html 了解AutoCAD对象层次结构--1--应用程序-爱码网 (likecs.com) 了解 ...
- python cad二次开发文档_FreeCAD二次开发-工作台开发(使用pycharm)
一. FreeCAD的二次开发 freecad作为一款开源的三维软件,开发相当简便,使用python开发也更为简单. 二.环境配置 我是使用pycharm直接编辑新建的工作台文件夹,freecad自带 ...
- 陈伯雄lisp_基于AutoLisp的AutoCAD二次开发自动生成系统图
龙源期刊网 http://www.qikan.com.cn 基于 AutoLisp 的 AutoCAD 二次开发自动 生成系统图 作者:郎建山 金江 来源:<科技视界> 2013 年第 2 ...
最新文章
- ADPRL - 近似动态规划和强化学习 - Note 5 - Banach Fixed Point Theorem in Dynamic Programming
- js 抛出异常 throw
- 关于 Git 提交这些规范,你都遵守了吗?
- 人脸识别的灵魂拷问:变胖了怎么办?
- Visual Studio提示“无法启动IIS Express Web服务器”的解决方法
- Winsows VISTA启动过程解析
- java excel 导出图片_JAVA 使用 POI 导出 EXCEL 自定义背景颜色
- python里的apply,applymap和map的区别
- js中如果无法获取某个html属性,例如自定义了一个dir属性,但获取总是为空,尝试换个词,因为可能什么关键词冲突了。...
- MyBatis动态SQL_多表查询_延迟加载_缓存
- Structure from Motion 资料总结
- mybatis 不同格式日期比较大小_怎样创建一个命令函数来获得不同国家和应用程序所要求的大多数日期格式...
- 计算机知识点数制的概念,计算机等级考试,数制的基本概念知识点
- 1 企业实战(3) Redis服务部署和配置详解 (资源)
- [原创] 对于深度学习(deep learning)在工业界的应用现状和突破 [by matthewbai]
- WPS制作甘特图实操(带图超详细)
- 大话设计模式 设计模式书籍 编程书籍
- mysql分布式集群实现原理
- 苹果公司CEO乔布斯演讲的15个秘诀
- Python实现多层感知器MLP(基于双月数据集)