0

にを挿入する必要AcadBlockReferenceAcadTableありますが、blockObjectIdプロパティでエラーが発生しました。

//*****************Sample Code*************************************  
AcadApplication gbl_app = null;  
AcadDocument gbl_doc = null;  
AcadLayout presentacion = null;  
AcadTable tablaAcad = null;  

gbl_app = (AcadApplication)Marshal.GetActiveObject("AutoCAD.Application");  
gbl_doc = gbl_app.ActiveDocument;  
object AC_entidad = new object();  
object basePnt2 = null;  

gbl_doc.Utility.GetEntity(out AC_entidad, out basePnt2, "Seleccione objeto:");  
AcadBlockReference objBlock = (AcadBlockReference)AC_entidad;  
bloqueId = objBlock.ObjectID;   

double[] vertices = new double [3];  
vertices[0] = 49.24;  
vertices[1] = 155;  
vertices[2] = 0;  


tablaAcad = gbl_doc.ActiveLayout.Block.AddTable(vertices, 4, 2, 3, 10);  
tablaAcad.SetCellTextHeight(0, 0, 2);  

tablaAcad.SetTextHeight(5, 1.5);  
tablaAcad.SetColumnWidth(0, 5);  
tablaAcad.SetColumnWidth(1, 50);  

tablaAcad.SetBlockTableRecordId(3, 0, bloqueId , true);  

エラー:無効なクラス

4

1 に答える 1

0

bloqueIdユーザーが選択した特定のブロック参照のオブジェクト ID です。SetBlockTableRecordId図面のブロック テーブル内のブロック定義の ID が必要です。これらはまったく異なるタイプ (クラス) であるため、エラー メッセージはそのように表示されます。

Autodesk.AutoCAD.DatabaseServices.BlockReferenceクラスには、必要BlockTableRecordなオブジェクト ID を返すプロパティがあります。Autodesk.AutoCAD.Interop現在使用している (COM) クラスの代わりに、どこでもこれらのネイティブ C# クラスを使用するようにコードをやり直すことをお勧めします。

何らかの理由でネイティブ クラスに変更できない場合は、AcadBlockReference使用しているクラスがブロック名であるプロパティを公開Nameし、ブロックからブロック定義 ID を検索できるはずです。テーブル。

于 2011-11-28T17:00:30.343 に答える