我需要在AcadBlockReference
中插入AcadTable
,但我遇到了阻止ObjectId
属性的错误。
//*****************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);
错误:无效的班级
答案 0 :(得分:0)
bloqueId
是用户选择的特定块引用的对象ID。 SetBlockTableRecordId
需要图形块表中块定义的ID。这些是完全不同的类型(类),因此这就是错误消息的含义。
Autodesk.AutoCAD.DatabaseServices.BlockReference
类具有BlockTableRecord
属性,可返回所需的对象ID。我的建议是重做您的代码,以便在任何地方使用这些本地C#类,而不是您当前使用的Autodesk.AutoCAD.Interop
(COM)类。
如果由于某种原因无法更改为本机类,那么我能找到的最好的是您使用的AcadBlockReference
类会公开一个Name
属性作为块名称,而您应该能够从块表中查找块定义ID。