Ich versuche, mein C# .NET-Plugin zu erhalten, um eine Tabelle in AutoCAD mit Informationen zu zeichnen, die auf einem .NET-Formular basieren, das der Benutzer ausfüllt. Der Code, den ich dafür verwende, basiert auf this page. Ändern es für meinen Plan, sieht der Code wie folgt aus:Zeichnungs-Tabellen in AutoCAD
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.Runtime;
namespace WindowsDoors.NET
{
class OpeningDataTable : Table
{
private int rowCount = 0;
private static Document doc = Application.DocumentManager.MdiActiveDocument; //Current drawing
private static Database db = doc.Database; //subclass of Document,
private static Editor ed = doc.Editor; //Editor object to ask user where table goes, subclass of Document
public OpeningDataTable(bool isWindow)
{
PromptPointResult pr = ed.GetPoint("\nEnter table insertion point: ");
if (pr.Status == PromptStatus.OK)
{
//Setting information about the table
TableStyle = db.Tablestyle;
SetSize(2, 5);
SetRowHeight(3);
SetColumnWidth(15);
Position = pr.Value;
//Creating titles to add
String[] columnTitles = new String[5];
columnTitles[0] = "Mark";
columnTitles[1] = "Width";
columnTitles[2] = "Height";
columnTitles[3] = "Header\nMaterial";
columnTitles[4] = "Packers\n(Each Side)";
//Adding titles to table
addRow(columnTitles);
}
}
public void addRow(String[] data)
{
// Use a nested loop to format each cell
for (int i = 0; i < data.Length; i++)
{
ParseOption s = new ParseOption();
Cells[rowCount, i].TextHeight = 1;
Cells[rowCount, i].SetValue(data[i], s);
}
GenerateLayout();
Transaction tr = doc.TransactionManager.StartTransaction();
using (tr)
{
BlockTable bt = (BlockTable)tr.GetObject(doc.Database.BlockTableId, OpenMode.ForRead);
BlockTableRecord btr = (BlockTableRecord)tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
btr.AppendEntity(this);
tr.AddNewlyCreatedDBObject(this, true);
tr.Commit();
}
}
}
}
Dieses Problem kommt in der Nähe von unten an dieser Linie
(BlockTableRecord)tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
Er sagt, dass BlockTableRecord keine Erweiterung hat Modelspace, obwohl ich das richtig nahm das Beispiel, das ich aufgelistet habe. Ich muss wissen, ob es einen Weg gibt, das zu beheben, oder ob es durch etwas anderes ersetzt wurde.