尝试利用 C# 对 AutoCAD 进行二次开发,先学习后应用
1. 利用 C# 绘制直线编程
通过 WinForm 在 AutoCAD 中绘制一条直线。
1.1 引用设置
在 Visual Studio 中建立一个窗体项目,配置引用,添加AutoCAD 2016 Type Library(我用的就是 AutoCAD 2016)。
1.2 窗体设计
包含两个标签,两个文本框,一个按钮。
1.3 代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using AutoCAD;// 加入引用的 AutoCAD 命名空间
namespace WindowsFormsApp2
{
public partial class Form1 : Form
{
// 声明 AutoCAD 对象
private AcadApplication a;
// 窗体构造器中加入
public Form1()
{
InitializeComponent();
// 创建 AutoCAD 对象,并使其可见
this.a = new AcadApplication();
a.Visible = true;
}
private void btnPaint_Click(object sender, EventArgs e)
{
// 声明起点和终点坐标
double[] startingPoint = new double[3];
double[] endPoint = new double[3];
// 从文本框中读取输入的坐标值,格式为“x,y,z”
string[] strStarting = txtStarting.Text.Split(',');
string[] strEnding = txtEnding.Text.Split(',');
// 将字符串转为 double 类型数据
for (int i = 0; i < 3; i++)
{
startingPoint[i] = Convert.ToDouble(strStarting[i]);
endPoint[i] = Convert.ToDouble(strEnding[i]);
}
// 在 AutoCAD 中绘制直线,并刷新显示
System.Threading.Thread.Sleep(1000);
a.ActiveDocument.ModelSpace.AddLine(startingPoint, endPoint);
a.Application.Update();
}
}
}
2. 运行
在文本框中输入起点和终点左边,点击绘制,即可。
3. 注意事项
第一次编码时,并未添加 “System.Threading.Thread.Sleep(1000);”这条语句,结果出现“被呼叫方拒绝接收呼叫。异常来自...”这种问题,查找解决办法,在https://blog.csdn.net/jiutao_tang/article/details/6897992?utm_source=blogxgwz9中找到答案。
原因:在实现IDE自动化操作时,IDE还没有完全准备好,对我们所发出的命令没有时间响应。
**解决方法:执行命令前,线程暂停一下,差不多要1秒种才可以。然后再调用IDE功能,即添加一条语句。
System.Threading.Thread.Sleep(1000);