Как создать SAFEARRAY для создания AddRegion

Автор Тема: Как создать SAFEARRAY для создания AddRegion  (Прочитано 19742 раз)

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

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: Как создать SAFEARRAY для создания AddRegion
« Ответ #30 : 04-02-2020, 13:49:16 »
Возможно для построения Region не потребуется прибегать к vla- и vlax- функциям.
Альтернатива - только через командные методы. Но для серьёзного приложения это тот ещё костыль. Тут есть примеры: https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/create-a-closed-polyline-and-convert-it-to-region/td-p/4505893
Они кстати случаем не через СОМ?
vla- и vlax-? Да, это функции для работы с COM с помощью VisualLISP.

Оффлайн Привалов Дмитрий

  • ADN Club
  • *****
  • Сообщений: 534
  • Карма: 117
Re: Как создать SAFEARRAY для создания AddRegion
« Ответ #31 : 04-02-2020, 14:06:22 »
Альтернатива - только через командные методы.
Возможно можно по другому. (в "программистком" стиле)
https://autolisp.ru/2009/09/22/programming-style/
Наверняка эксперты по VisualLISP смогут подсказать.

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

  • Administrator
  • *****
  • Сообщений: 1097
  • Карма: 172
Re: Как создать SAFEARRAY для создания AddRegion
« Ответ #32 : 04-02-2020, 14:14:55 »
Lisp в ветке по NET - к этому меня еще не готовили :)
Через entmakex создать регион, по-моему, не получится. Значительно проще создавать его через COM (то бишь vla-функции). Можно "пошутить" - создать новый документ, в нем создать все необходимые примитивы, регионы, выполнить все булевые операции, а результат перенести в текущий документ. Документ, естественно, уничтожить.
Но мне что-то кажется, что СОМ тут не нужен от слова совсем. NET значительно более мощный и гибкий инструмент.
Сугубо ИМХО, как обычно ;)
Все, что сказано - личное мнение.

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

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

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

  • ADN OPEN
  • Сообщений: 21
  • Карма: 1
  • Skype: maratovich78
Re: Как создать SAFEARRAY для создания AddRegion
« Ответ #33 : 04-02-2020, 14:17:12 »
Как я понял проблема не в массиве, а в объекте.
Массив создаётся правильно, но в .net  Object не принимает свойства
Dim curves(0 To 1) As Object
т.е внутри этого массива не верные свойства объектов.
В VB6 Object и Variant это разные вещи, а тут всё слили в один Object, и скорее всего .net воспринимает объект автокада не как объект а как строку.

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

  • ADN OPEN
  • Сообщений: 21
  • Карма: 1
  • Skype: maratovich78
Re: Как создать SAFEARRAY для создания AddRegion
« Ответ #34 : 04-02-2020, 14:19:27 »
а результат перенести в текущий документ.
Для этого нужна CopyObjects , а оно аналогично идёт через массив объектов - о чем здесь и говорится, и тоже не работает.

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

  • Administrator
  • *****
  • Сообщений: 1097
  • Карма: 172
Re: Как создать SAFEARRAY для создания AddRegion
« Ответ #35 : 04-02-2020, 14:20:06 »
Всю ветку просмотрел по диагонали, может, кого и дублирую.
Используется позднее связывание (другое не интересует). Чистый СОМ без библиотек.
Для создания AddRegion и CopyObjects требуется массив SAFEARRAY.
Перерыл всё, нигде нет информации как создать SAFEARRAY на vb.net
Специально открыл справку:
https://knowledge.autodesk.com/ru/search-result/caas/CloudHelp/cloudhelp/2018/RUS/AutoCAD-ActiveX-Reference/files/GUID-74C8765E-EB4A-4773-ADD4-6C0F318FE6BE-htm.html
http://help.autodesk.com/view/ACD/2016/ENU/?guid=GUID-D9E0A89C-2D81-4141-8B88-B9AC6EAABD62
Примеры на VBA есть, вряд ли будет большой проблемой перевести их на VB.NET.
Все, что сказано - личное мнение.

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

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

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Как создать SAFEARRAY для создания AddRegion
« Ответ #36 : 04-02-2020, 14:22:53 »
Алексей Кулик,
Леша. Ты всё пропустил. :-) Пока этого сделать никто не смог. И вопрос упирается в позднее связывание (VBA в AutoCAD использует раннее связывание).
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Привалов Дмитрий

  • ADN Club
  • *****
  • Сообщений: 534
  • Карма: 117
Re: Как создать SAFEARRAY для создания AddRegion
« Ответ #37 : 04-02-2020, 14:25:40 »
В VB6 Object и Variant это разные вещи, а тут всё слили в один Object
Если долго гуглить, может что и найдется.
https://social.msdn.microsoft.com/Forums/vstudio/en-US/f4bbec03-bd70-427c-8e8b-a2852e4c2b48/quotvariant-quot-data-type-alternative-in-vbnet?forum=vbgeneral
https://ru.vingrad.com/Perekhod-ot-Variant-(VB)-k-object-(NET)-id50ba779b6ccc19eb0101c19d

и скорее всего .net воспринимает объект автокада не как объект а как строку.
это врятли.

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Как создать SAFEARRAY для создания AddRegion
« Ответ #38 : 04-02-2020, 14:29:11 »
Привалов Дмитрий,
Это нормально работает с обычными типами (int, string, double и т.д., которые известны в .NET), но не работает с пользовательскими типами, реализованными через IDispatch. Как видишь пробы выше уже были сделаны.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 1097
  • Карма: 172
Re: Как создать SAFEARRAY для создания AddRegion
« Ответ #39 : 04-02-2020, 14:40:51 »
Перевести с VBA на VB? Ну, не буду спорить :)
Сейчас попробовал через консольное приложение с поздним связыванием достучаться хотя бы до пространства модели текущего документа - не получилось. М-да, не умею я на нормальных языках писать программы...
Все, что сказано - личное мнение.

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

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

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Как создать SAFEARRAY для создания AddRegion
« Ответ #40 : 04-02-2020, 14:59:26 »
Сейчас попробовал через консольное приложение с поздним связыванием достучаться хотя бы до пространства модели текущего документа - не получилось.
Тут же есть код: https://adn-cis.org/forum/index.php?topic=9710.msg42379#msg42379
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 1097
  • Карма: 172
Re: Как создать SAFEARRAY для создания AddRegion
« Ответ #41 : 04-02-2020, 15:53:21 »
У меня вываливало ошибку на строке получения указателя на пространство модели.
Все, что сказано - личное мнение.

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

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

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Как создать SAFEARRAY для создания AddRegion
« Ответ #42 : 04-02-2020, 15:55:25 »
У меня вываливало ошибку на строке получения указателя на пространство модели.
И AutoCAD был запущен?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 1097
  • Карма: 172
Re: Как создать SAFEARRAY для создания AddRegion
« Ответ #43 : 04-02-2020, 15:57:02 »
Конечно! И документ в нем тоже был открыт. Правда, там ни до чего мне добраться не удалось - ни до пространства модели, ни до коллекции блоков / стилей / слоев.
Все, что сказано - личное мнение.

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

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

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Как создать SAFEARRAY для создания AddRegion
« Ответ #44 : 04-02-2020, 15:58:02 »
Очень странно.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение