#autocad #cad #objectarx
#autocad #сапр #objectarx
Вопрос:
Мне нужно вставить AcadBlockReference
в AcadTable
, но я получил ошибку со свойством block ObjectId
.
//*****************Sample Code*************************************
AcadApplication &bl_app = null;
AcadDocument &bl_doc = null;
AcadLayout presentacion = null;
AcadTable tablaAcad = null;
&bl_app = (AcadApplication)Marshal.GetActiveObject("AutoCAD.Application");
&bl_doc = &bl_app.ActiveDocument;
object AC_entidad = new object();
object basePnt2 = null;
&bl_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 = &bl_doc.ActiveLayout.Block.AddTable(vertices, 4, 2, 3, 10);
tablaAcad.SetCellTextHei&ht(0, 0, 2);
tablaAcad.SetTextHei&ht(5, 1.5);
tablaAcad.SetColumnWidth(0, 5);
tablaAcad.SetColumnWidth(1, 50);
tablaAcad.SetBlockTableRecordId(3, 0, bloqueId , true);
ОШИБКА: недопустимый класс
Ответ №1:
bloqueId
является идентификатором объекта конкретной ссылки на блок, выбранной пользователем. SetBlockTableRecordId
требуется идентификатор определения блока в таблице блоков чертежа. Это совершенно разные типы (классы), вот что означает сообщение об ошибке.
У Autodesk.AutoCAD.DatabaseServices.BlockReference
класса есть BlockTableRecord
свойство, которое возвращает нужный идентификатор объекта. Я бы порекомендовал переделать ваш код, чтобы везде использовать эти собственные классы C # вместо Autodesk.AutoCAD.Interop
(COM) классов, которые вы используете в настоящее время.
Если вы по какой-либо причине не можете перейти на собственные классы, то лучшее, что я могу найти, это то, что AcadBlockReference
класс, который вы используете, предоставляет Name
свойство, которое является именем блока, и вы должны иметь возможность искать идентификатор определения блока из таблицы блоков.