Помогите! Не понимаю, что мне нужно VBA, C#....

Автор Тема: Помогите! Не понимаю, что мне нужно VBA, C#....  (Прочитано 12253 раз)

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

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

  • ADN OPEN
  • Сообщений: 6
  • Карма: 0
  • Skype: byb4ik9001
Здравствуйте!

Помогите пожалуйста с осознанием правильной концепции построения моего проекта.

На сегодня у меня есть свой модуль который написан в файле XLS в макросе VBA.
Задача этого модуля собрать данные из исходных файлов, из таблиц, из БД, формировать необходимые массивы, на основании этих массивов вставить необходимое количество динамических блоков на чертёж с изменением необходимых атрибутов и т.д..
Моя программа сама открывала Автокад, открывала нужные документы и вставляла туда данные, сохраняла, закрывала.
В VBA всё работает, но в нём нет нормального редактора и других удобств. Моя программа достаточно сильно разрослась, ориентироваться всё сложнее, а расширения ещё нужны.
По этому я задумался о переезде например в VisualStudio, а за одно попробовать изучить C# и современные методы программирования.

Проанализировав ветки форумов стало ясно, что такими методами не пользуются (COM API), а создают DLL (.NET API), и запускают всё из Автокада. Это мне кажется не подходящим для меня.
 
Подскажите пожалуйста как мне правильно (где, на основании каких технологий) построить программу которая будет делать следующее:

Брать данные из БД.
Анализировать и подготавливать данные.
На основании полученных данных генерировать чертежи которые будут состоять из динамических блоков (например 3000 блоков).
Сохранять файлы.
Пакетная печать в один файл PDF чертежей DWG, Visio, Word.


В школе и один год в универсистете изучал TurboPascal. VBA осваивал сам по необходимости, т.к. ненавижу рутинную работу )))).






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

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Проанализировав ветки форумов стало ясно, что такими методами не пользуются (COM API), а создают DLL (.NET API), и запускают всё из Автокада. Это мне кажется не подходящим для меня.
Это не совсем так, но я бы не рекомендовал использовать COM API. В силу его ограничений и проблемности. Не вижу причины не создавать плагин (DLL в вашей терминологии), загружать его в AutoCAD и проделывать всё необходимое. Возможно и разделение - отдельно exe-модуль, запускающий AutoCAD и работающий с ним через COM и плагин (DLL) загружаемый внутрь AutoCAD. Так же перспективным в свете этой задачи является использование accoreconsole.exe, что обеспечит большую быстроту загрузки и обработки чертежей и позволит параллельно запустить несколько заданий.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 6
  • Карма: 0
  • Skype: byb4ik9001
accoreconsole.exe
Это не совсем так, но я бы не рекомендовал использовать COM API. В силу его ограничений и проблемности. Не вижу причины не создавать плагин (DLL в вашей терминологии), загружать его в AutoCAD и проделывать всё необходимое. Возможно и разделение - отдельно exe-модуль, запускающий AutoCAD и работающий с ним через COM и плагин (DLL) загружаемый внутрь AutoCAD. Так же перспективным в свете этой задачи является использование accoreconsole.exe, что обеспечит большую быстроту загрузки и обработки чертежей и позволит параллельно запустить несколько заданий.
Честно говоря, Вы не добавили понимания в мою голову )))), может быть я так написал, ну и уровень мой конечно далёк от профессионального программиста.

Как я работал, заполнял БД, запускал редактор VBA, от туда запускал нужную процедуру, смотрел, что отрисовывается, правил, запускал заново и т.д., активно пользовался отладкой, чтоб посмотреть, откуда возникают ошибки в чертежах. По сути мне даже EXE не нужен. Если только для утилиты пакетной печати, но эта часть на самом последнем месте по важности.

Сейчас мне неясен начальный вопрос, как допустим передавать полученные массивы в процедуру DLL Autocad, которые подготовит внешний модуль? Действовать через промежуточный CSV, мне кажется костылём.


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

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Сейчас мне неясен начальный вопрос, как допустим передавать полученные массивы в процедуру DLL Autocad, которые подготовит внешний модуль? Действовать через промежуточный CSV, мне кажется костылём.
Полученные каким образом массивы? Я это понимал так, что вы собираетесь отказаться от VBA и переписать всё (!!!) на C#.  exe-файл только для запуска AutoCAD или accoreconsole в пакетном режиме.
Соответственно массивы будет создавать DLL в AutoCAD'е и никуда их передавать не нужно. Если же оставлять VBA - то и оставайтесь на нём. Не нужно скрещивать собаку с кошкой...
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 6
  • Карма: 0
  • Skype: byb4ik9001
что вы собираетесь отказаться от VBA и переписать всё (!!!) на C#
Да, я хочу переписать всё.

Полученные каким образом массивы?

Массивы нужно получать из БД (например MySQL).

В специфике моего проектирования (а это АСУТП), проект ведётся в таблицах.
Крупные АСУТП состоят из однотипных электрических цепей, например типов 10, а всего цепей тысячи. Они отличаются друг от друга описанием сигнала, названием, маркировками и т.д., схемка одна, а надписи разные.
Кроме того из БД ещё и ПО для контроллеров генерируется.
По этому все данные изначально заносятся в БД, после полного причёсывания исходных данных генерируются чертежи, текстовые документы и ПО.

Т.е. я в БД формирую таблицу или таблицы, в них есть информация какой блок нужно вставить и с какими параметрами, и так для всех сигналов.
Ранее эти таблицы я переводил в массивы. Сколько массивов в массиве, столько блоков нужно вставить, внутренний массив это перечисления имён атрибутов и их значений.
Блоки вставлялись и пристыковывались друг к другу по определённым правилам, разбивались по листам.

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

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Массивы нужно получать из БД (например MySQL).
Так в чем проблема это сделать из C#???
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 6
  • Карма: 0
  • Skype: byb4ik9001
Так в чем проблема это сделать из C#
Это наверняка не проблема.

Я не понимаю следующее:
Нужно генерировать DLL, это плагин для Autocad.
Во первых, я подозреваю, что не могу остановить работу DLL и посмотреть, какие значения переменных в данный момент. Мне кажется, что Debug уже не будет доступен в любой момент.
Во вторых, При изменениях всё время нужно переподставлять DLL, а без закрытия Autocad, у меня это не получается.
В третьих, я не пишу законченное приложение, я в коде часто, что-то меняю от проекта к проекту, перебираю варианты сборок, подбираю приемлимый вариант.

Хорошо, конкретная задача: Получить данные из БД.
Где это по Вашему представлению нужно сделать, внутри плагина? Тогда мне кажется на этапе отладки я не смогу увидеть, что я получаю.
Если я эти массивы получу в стороннем ПО написанном на С#, я смогу их передать в плагин Autocad?

Я видимо не понимаю, что будет с отладкой данной DLL.

По сути данные полученные из БД будут использоваться не только для Autocad, по этому мне лучше их получить в стороннее приложение.

Я хотел получить удобный редактор кода и более продвинутый язык, но т.к. оказалось, что использование моего подхода (COM API) устарело и на C# его не используют.

Совсем запутался ((((((((, но редактор VBA исчерпал себя, очень неудобно.

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

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
В третьих, я не пишу законченное приложение, я в коде часто, что-то меняю от проекта к проекту, перебираю варианты сборок, подбираю приемлимый вариант.
Это главное. В этом случае оставайтесь с VBA.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 6
  • Карма: 0
  • Skype: byb4ik9001
Александр Ривилис, Спасибо за консультацию!
Буду переезжать в Visual Studio, но в VBA (VBS).

Пока не работает строчка AcadApp = Interaction.GetObject("", "AutoCAD.Application.24").
Если не победим придётся тему создавать )))
Спасибо ещё раз.

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

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Буду переезжать в Visual Studio, но в VBA (VBS).
Это тоже самое, что никуда не переезжать. А так как таким никто не пользуется, то будете первопроходцем - никто не поможет. И официально VBS в AutoCAD не поддерживается. Так что категорически не советую.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 6
  • Карма: 0
  • Skype: byb4ik9001
Так что категорически не советую.
((((((((((((((((((((((
Охохо, спасибо. Прислушаюсь(

Всё таки, подскажите как предполагается отлаживать DLL(плагин) для AutoCad? Нельзя-же сходу написать правильный код.

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

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Всё таки, подскажите как предполагается отлаживать DLL(плагин) для AutoCad? Нельзя-же сходу написать правильный код.
Всё достаточно просто. Пишете плагин, компилируете его, запускаете отладку (F5), загружаете плагин внутрь AutoCAD (команда NETLOAD) и запускаете командой его на выполнение, предварительно расставив в нём точки останова. Вот и всё.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Павел55

  • ADN OPEN
  • ***
  • Сообщений: 106
  • Карма: 3
Всё таки, подскажите как предполагается отлаживать DLL(плагин) для AutoCad? Нельзя-же сходу написать правильный код.
Всё достаточно просто. Пишете плагин, компилируете его, запускаете отладку (F5), загружаете плагин внутрь AutoCAD (команда NETLOAD) и запускаете командой его на выполнение, предварительно расставив в нём точки останова. Вот и всё.

А чтобы сэкономить время, можно сразу запускать плагин из автокада, предварительно настроив пункты "запуск из внешней программы" И "параметры коммандной строки". А в файле file.scr параметры запуска - путь к dll, путь к запускаемому чертежу. При таких настройках очень много времени экономиться. Это если проект маленький или вы меняете код в одних и тех же местах. Если в обозримом будущем предвидится много изменений лучше потратить время и написать unit тесты - на первых порах будет казаться что это зря потраченное время, но потом поймете что это хороший вклад на будущее.

Оффлайн trir

  • ADN Club
  • ****
  • Сообщений: 475
  • Карма: 63
пример работы с БД, причём в обе стороны


Цитировать
Всё таки, подскажите как предполагается отлаживать DLL(плагин) для AutoCad?
https://adn-cis.org/forum/index.php?topic=10175.0
« Последнее редактирование: 30-11-2020, 08:21:20 от trir »