谁能描述一下您可以在 Autocad 中用 C# 创建什么?我想改进设计办公室的工作,但我不知道我的选择是什么。
- 我可以创建新对象吗?
- 根据给定数据叠加形成非均匀绘图
- 其他
在网上我发现只有两个博客有几年前的帖子。没有什么新鲜事。
任何人都可以推荐任何有趣的文章,指南吗?
任何帮助都将有助于开始。我知道有文档,但我需要逐步解释一切是如何工作的。
谁能描述一下您可以在 Autocad 中用 C# 创建什么?我想改进设计办公室的工作,但我不知道我的选择是什么。
在网上我发现只有两个博客有几年前的帖子。没有什么新鲜事。
任何人都可以推荐任何有趣的文章,指南吗?
任何帮助都将有助于开始。我知道有文档,但我需要逐步解释一切是如何工作的。
你说的都是可以的。API 基础自 2007 版以来是相同的(此后进行了增量更新和几个二进制中断,但代码保持相似)。对于新开发,请使用您计划支持的最旧版本(最后一个二进制中断版本是 2013 年)
访问AutoCAD 开发人员中心并检查:
您绝对可以使用 AutoCAD .Net API 创建新对象,下面是我不久前编写的一个示例,它创建了一个 MLeader。
.Net API 是 C++ ObjectARX API 的托管包装器,因此它涵盖了 C++ API 的大部分功能。它不能做的一件事是从本地类派生自定义类,例如AcDbLine
不能通过 .Net 扩展示例。要实现这一点,您需要使用 C++ API 并可以在 C++/CLI 中编写自定义 .Net 包装器以将其公开给 .Net,然后您将能够从 .Net 实例化您的自定义类,类似于内置类。
但是,可以通过使用overrules直接在 .Net 中修改内置实体的行为。
如果你的插件应该只在 Windows 上工作,那么 .Net 是比 C++ 更方便的选择,并且更灵活地实现 UI。
[CommandMethod("netTextMLeader")] 公共静态无效 netTextMLeader() {
Document doc = Application.DocumentManager.MdiActiveDocument;
Database db = doc.Database;
Editor ed = doc.Editor;
using (Transaction Tx = db.TransactionManager.StartTransaction()) {
BlockTable table = Tx.GetObject(
db.BlockTableId,
OpenMode.ForRead) as BlockTable;
BlockTableRecord model = Tx.GetObject(
table[BlockTableRecord.ModelSpace],
OpenMode.ForWrite) as BlockTableRecord;
MLeader leader = new MLeader();
leader.SetDatabaseDefaults();
leader.ContentType = ContentType.MTextContent;
MText mText = new MText();
mText.SetDatabaseDefaults();
mText.Width = 100;
mText.Height = 50;
mText.SetContentsRtf("MLeader");
mText.Location = new Point3d(4, 2, 0);
leader.MText = mText;
int idx = leader.AddLeaderLine(new Point3d(1, 1, 0));
leader.AddFirstVertex(idx, new Point3d(0, 0, 0));
model.AppendEntity(leader);
Tx.AddNewlyCreatedDBObject(leader, true);
Tx.Commit();
}
}
使用 .Net 你可以创建一个新对象吗?答案是否定的。您需要为此使用 ObjectArx。但是,使用 .Net,您可以修改对象的外观。例如,您可以修改一条线,使其看起来像一个箭头。不仅是它的外观,还有它的行为方式。所以.Net 有足够的灵活性,足以弥补创建新对象的需要。基本上有了.Net,你就拥有了windows和autocad的力量。
.Net 示例的一个很好的资源是通过Kean Walmsley的界面。尝试浏览此博客,您将了解更多关于 AutoCAD 中的 .Net 功能的信息,这比我所能描述的要多。