您绝对可以使用 AutoCAD .Net API 创建新对象,下面是一个示例 I wrote a while ago,它创建了一个多引线。
.Net API 是 C++ ObjectARX API 的托管包装器,因此它涵盖了 C++ API 的大部分功能。它不能做的一件事是从本机类派生自定义类,例如不能通过 .Net 扩展示例 AcDbLine。要实现这一点,您需要使用 C++ API 并可以在 C++/CLI 中编写自定义 .Net 包装器以将其公开给 .Net,然后您将能够从 .Net 实例化您的自定义类,类似于内置类。
但是,可以使用overrules 在 .Net 中直接修改内置实体的行为。
如果您的插件只适用于 Windows,那么 .Net 是比 C++ 更方便的选择,并且更灵活地实现 UI。
[CommandMethod("netTextMLeader")]
公共静态无效 netTextMLader() {
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();
}
}