Сравнение среды

Автор Тема: Сравнение среды  (Прочитано 2043 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн D_TRexАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 104
  • Карма: 0
Сравнение среды
« : 26-06-2022, 20:50:37 »
Правила форума гласят, надо создавать новую тему. Так вот писал через WinForm с подключением к AutoCAD прогу, тут советовали что ObjectARX (надеюсь верно написал) это сила, в итоге стал писать плагин (с терминами я ещё плаваю, но по коду ниже будет ясно). Ну так вот бился, я бился и попробовал код из WinForm поместить в плагин, оказалось добавляешь ссылки и всё работает, а в итоге, вот как выглядит список листов чуждом мне языке
Код - vb.net [Выбрать]
  1.  ' получаю список всех листов
  2.         acDoc = Application.DocumentManager.MdiActiveDocument
  3.          Dim acCurDb As Database = acDoc.Database
  4.          Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()
  5.          Dim lays As DBDictionary = acTrans.GetObject(acCurDb.LayoutDictionaryId, OpenMode.ForRead)
  6.          grdLayout.Rows.Clear()
  7.          For Each item As DBDictionaryEntry In lays
  8.          grdLayout.Rows.Add()
  9.          grdLayout.Rows(grdLayout.RowCount - 1).HeaderCell.Value = Str(grdLayout.RowCount)
  10.          grdLayout.Rows(grdLayout.RowCount - 1).Cells(1).Value = item.Key
  11.          grdLayout.Rows(grdLayout.RowCount - 1).Cells(2).Value = "Клик" ' item.Value
  12.          Next
  13.          acTrans.Abort()
  14.          End Using
и вот так в моём родном VB
Код - vb.net [Выбрать]
  1.         Dim acApp As Autodesk.AutoCAD.Interop.AcadApplication
  2.         Dim CadDoc As Autodesk.AutoCAD.Interop.AcadDocument
  3.         acApp = Autodesk.AutoCAD.ApplicationServices.Application.AcadApplication
  4.         CadDoc = acApp.ActiveDocument
  5.         X = 0
  6.         grdLayout.Rows.Clear()
  7.         Do Until X = CadDoc.Layouts.Count
  8.             grdLayout.Rows.Add()
  9.             grdLayout.Rows(grdLayout.RowCount - 1).HeaderCell.Value = Str(CadDoc.Layouts.Item(X).TabOrder)
  10.             grdLayout.Rows(grdLayout.RowCount - 1).Cells(1).Value = CadDoc.Layouts.Item(X).Name
  11.             grdLayout.Rows(grdLayout.RowCount - 1).Cells(2).Value = "Клик"
  12.             grdLayout.Rows(grdLayout.RowCount - 1).Cells(3).Value = CadDoc.Layouts.Item(X).StyleSheet
  13.             grdLayout.Rows(grdLayout.RowCount - 1).Cells(4).Value = CadDoc.Layouts.Item(X).TabOrder
  14.             X = X + 1
  15.         Loop
при этом я ещё и могу получить и изменять стиль печати не активного листа.

В данной теме нет вопроса, как оказалось проблема не в языке, а в среде использования, так что VB по сей день живой язык и куча примеров "макросов" и кода намного меньше и полезнее, но в итоге конечно лучше гибрид, правда наверное влияет на производительность.
Конечно если Вы только вступаете в "кодеры" то лучше прислушайтесь к гуру, а если "со стажем" то вполне всё работает, просто надо скачать Wizard (тут не посоветую, у меня из трёх машин стало только на одну) и немного "танцев с бубном" и пойметё что и от куда происходит и как использовать.

P.S. по примеру по Object ARX у меня печать завершается (не понятной мне) ошибкой - код из примера, а вот NET API работает без проблем (конечно когда это плагин) когда это внешняя программа - постоянно сыпется ошибками которые не возможно не отловить, не диагностировать и как следствие исправить.