var a = contours[0] as Polyline;
получал null, завтра проверю на AcadPolyline. Можно ли приводить COM-объекты к управляемым типам на прямую? А вообще такой способ получения контуров допустим? Единственный ли он?
Можно ли приводить COM-объекты к управляемым типам на прямую?Автокадовские можно. Получаешь ObjectId объекта по COM-объекту:
Сейчас нет возможности проверить, но когда я пробовал делать такНе Autodesk.AutoCAD.DatabaseServices.Polyline (как у тебя), а Autodesk.AutoCAD.Interop.Common.AcadLWPolyline
Код: [Выделить]
var a = contours[0] as Polyline;
получал null, завтра проверю на AcadPolyline.
А вообще такой способ получения контуров допустим?Не знаю. Ты задал вопрос не в разделе Civil 3D API и поэтому я отвечаю только на конкретно поставленный вопрос о получении типов объектов. Если, как ты написал, тот код, который работает в Civil 3D 2013 не работает в 2012, то это скорее всего единственный путь.
Во-первых, насколько я понял в Civil 2012 .net API нет возможности их получить, хотя поиски меня приводили к статьях http://adndevblog.typepad.com/infrastructure/2012/08/extract-surface-contours-using-civil-3d-net-api.html, http://civilizeddevelopment.typepad.com/civilized-development/2012/09/21wojpweek-16-extracting-major-and-minor-contours.html за 2012 год.Да, год 2012. Но в статьях речь идет про Civil 2013 (Jay Peak) и добавленный в нем функционал в NET API, который Вам как раз нужен. Если 2012 версия - то да, похоже, только через COM. Есть смысл переходить на новую версию ;), т.к. (цитата из статьи):
In the COM API, this functionality was very rudimentary and inflexible
Кстати, "мажорные и минорные контуры" - это не основные и вспомогательные горизонтали случаем? Так как-то привычнее и понятнее.Ни к AeccSurfaceContour, AeccSurfaceContourClass, AeccEntity, ни к каким другим типам я преобразовать не смог.Судя по статьям, даже новые NET методы создают и добавляют в чертеж новый объект Polyline.