Выбор набора примитивов по Entity

Автор Тема: Выбор набора примитивов по Entity  (Прочитано 9515 раз)

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

Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 611
  • Карма: 155
    • ПГСу Бложик
Re: Выбор набора примитивов по Entity
« Ответ #15 : 18-11-2017, 12:29:49 »
ObjectId - ссылка на объект
Код - C# [Выбрать]
  1. Circle circle = tr.GetObject(id, OpenMode.ForRead) as Circle;
Получение объекта по ссылке

Оффлайн D_TRex

  • ADN OPEN
  • ***
  • Сообщений: 104
  • Карма: 0
Re: Выбор набора примитивов по Entity
« Ответ #16 : 09-05-2022, 17:33:38 »
Здравствуйте, а можно пример на VB NET. Я знаю objectID а вот мне с этим делать не знаю? Надо выбрать примитив (блок) считать его имя, координаты и атрибут.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Выбор набора примитивов по Entity
« Ответ #17 : 09-05-2022, 18:18:45 »
Здравствуйте, а можно пример на VB NET. Я знаю objectID а вот мне с этим делать не знаю? Надо выбрать примитив (блок) считать его имя, координаты и атрибут.
Здесь все коды приведены из расчета использования AutoCAD .NET API, а не COM/ActiveX
Тебе нужно искать примеры на VBA и переводить их на VB.NET если собираешься и в дальнейшем использовать COM/ActiveX с AutoCAD. Так как этим практически никто не занимается, то тебе придется это делать самостоятельно.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн D_TRex

  • ADN OPEN
  • ***
  • Сообщений: 104
  • Карма: 0
Re: Выбор набора примитивов по Entity
« Ответ #18 : 09-05-2022, 19:15:46 »
Не давно начал  разбираться и пока не понимаю в чём разница то есть где писать код, но спасибо за ответ.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Выбор набора примитивов по Entity
« Ответ #19 : 09-05-2022, 19:26:47 »
Не давно начал  разбираться и пока не понимаю в чём разница то есть где писать код, но спасибо за ответ.
Разница в том, что использовать AutoCAD .NET API можно только в dll-сборке, которая загружается внутрь AutoCAD (команда _NETLOAD). И возможностей в AutoCAD .NET API на порядок больше, чем в COM/ActiveX (которое можно использовать вне AutoCAD и которое или запускает AutoCAD или подключается к уже запущенному). Заодно сразу рекомендую изучать C# вместо VB.NET - даже по этому форуму видно, что из 10 программистов 9 использует C# и только одни VB.NET. И соответственно примеров на C# в 10 раз больше.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн D_TRex

  • ADN OPEN
  • ***
  • Сообщений: 104
  • Карма: 0
Re: Выбор набора примитивов по Entity
« Ответ #20 : 10-05-2022, 09:30:31 »
Я не профессиональный программист, я инженер ВК и попросту раньше баловался макросами. Вообще раньше автокад очень не любил различные надстройки - фатальной ошибкой часто завершалась работа и поэтому я не сторонник надстроек. Всю бьюсь над разбивкой листов программно и для этого мне нужны били свойства блоков и саму структуру я плохо понимаю автокада, но нашёл материалы от самого авкада и по ним всё получилось (только сбор данных создание листов и настройка ещё впереди)
Код - vb.net [Выбрать]
  1.         Dim msObj As AcadObject ' переменная для перебора примитивов модели
  2.         Dim CadBlock As AcadBlockReference ' переменная для получения информации по блокам
  3.  
  4.         For i = 0 To CadDoc.ModelSpace.Count - 1 'для всех объектов в простр. модели
  5.             msObj = CadDoc.ModelSpace.Item(i)
  6.             If (msObj.ObjectName = "AcDbBlockReference") Then ' проверяю что за примитив
  7.                 CadBlock = msObj ' и присваиваю его другой переменной, на прямую не получилось, тут же в принципе можно сортировать по имени и по слою
  8.                 grdPrint.Rows.Add()
  9.                 grdPrint.Rows(grdPrint.RowCount - 2).HeaderCell.Value = Str(grdPrint.RowCount - 1) ' просто счётчик
  10.                 grdPrint.Rows(grdPrint.RowCount - 2).Cells(0).Value = CadBlock.EffectiveName ' имя которое я дал блоку, а не то что сгенерировал автокад
  11.                 grdPrint.Rows(grdPrint.RowCount - 2).Cells(1).Value = "X_S=" & CadBlock.XScaleFactor & ", Y_S =" & CadBlock.YScaleFactor & ", Z_S =" & CadBlock.ZScaleFactor ' масштабы по осям
  12.                 grdPrint.Rows(grdPrint.RowCount - 2).Cells(2).Value = "X=" & CadBlock.InsertionPoint(0) & ", Y =" & CadBlock.InsertionPoint(1) & ", Z =" & CadBlock.InsertionPoint(2) ' точка вставки
  13.                 ' получаю атрибуты
  14.                 X = LBound(CadBlock.GetAttributes) ' значения доступных атрибутов
  15.                 Do Until X = UBound(CadBlock.GetAttributes) + 1
  16.                     grdPrint.Rows(grdPrint.RowCount - 2).Cells(3).Value = grdPrint.Rows(grdPrint.RowCount - 2).Cells(3).Value & CadBlock.GetAttributes(X).TagString & ", " & CadBlock.GetAttributes(X).TextString & ";"
  17.                     X = X + 1
  18.                 Loop
  19.             End If
  20.         Next

А читал тему тут про перебор всех примитивов в чертеже - но у меня не заработало (теперь знаю по чему). Перевожу данные из одного типа в другой просто знаком равенства. В общем код далёк от образца, но он работает правда иногда выскакивает исключение типа

тоже видел несколько Ваших постов, но пока не пойму как реализовать.

В общем я искал как обратиться по ObjectID а оказалось надо сразу менять тип переменной и считывать свойства.

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Re: Выбор набора примитивов по Entity
« Ответ #21 : 10-05-2022, 12:41:16 »
А это точно VB.NET, а не VBA?
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Выбор набора примитивов по Entity
« Ответ #22 : 10-05-2022, 13:23:17 »
но он работает правда иногда выскакивает исключение типа
Стандартное исключение, которое возникает при работе через COM/ActiveX.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн D_TRex

  • ADN OPEN
  • ***
  • Сообщений: 104
  • Карма: 0
Re: Выбор набора примитивов по Entity
« Ответ #23 : 10-05-2022, 14:15:40 »
Алексей Кулик, Visual Studio 2017 да поэтому и начал и продолжаю VB.NET так как в те далёкие года макросы были более распространены

Примеры оказывается лежат вот тут "Program Files\Common Files\Autodesk Shared" и вот по ним я более или менее стал понимать структуру обращения и именование примитивов, ну как стал понимать )) просто получилось извлечь данные.

DLL наверное хорошая вещь, я вот смотрю и понимаю что Civil наверное на нём построен, но надо отделать графику от расчётов, он в какой то момент начинает ужасно тормозить при любых манипуляциях. Это уже не по теме. Спасибо за помощь с клонированием листа Александр я видел Ваш ответ, но пока не пробовал.

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Re: Выбор набора примитивов по Entity
« Ответ #24 : 11-05-2022, 11:56:05 »
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн D_TRex

  • ADN OPEN
  • ***
  • Сообщений: 104
  • Карма: 0
Re: Выбор набора примитивов по Entity
« Ответ #25 : 14-06-2022, 18:46:14 »
Алексей Кулик, помогло, спасибо, пока пробую и извлекаю полезное