AUTOCAD 2012 на C# Visual Studio.

Автор Тема: AUTOCAD 2012 на C# Visual Studio.  (Прочитано 37445 раз)

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

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

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: AUTOCAD 2012 на C# Visual Studio.
« Ответ #45 : 06-10-2014, 03:03:56 »
Еще вопрос по поводу полилинии, как проще сделать из двумерной трехмерную, в примере что Вы мне написали?
Замени Polyline на Polyline3d, AddVertexAt на AppendVertex. При этом нужно будет создать PolylineVertex3d, передав конструктору точку вершины.

P.S.: Напоминаю, что на форуме действует принцип: "Один вопрос - одна тема". Это нужно для того, чтобы проще было искать ответы на вопросы. Так что следующий вопрос, пожалуйста, в новой теме.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • *****
  • Сообщений: 624
  • Карма: 158
    • ПГСу Бложик
Re: AUTOCAD 2012 на C# Visual Studio.
« Ответ #46 : 15-06-2015, 09:54:38 »
Так как все началось с этой темы (раздва) и код активно использует фоновую работу, то вывалю код сюда, кому нибудь пригодится.

Описание библиотеки:
Программа для совместной работы над чертежом.
1) на компьютере \\A пользователь А открывает автокадом сетевой .dwg файл (скажем) w:/rrr.dwg
2) Акад настроен так, что плагин загружается автоматически , командой repServerStart, пользователь активирует для нужного чертежа режим Сервера.
3) на компьютере \\B пользователь Б открывает автокадом сетевой .dwg тот же файл w:/rrr.dwg
4) Акад настроен так, что плагин загружается автоматически, командой repClientStart, пользователь активирует для нужного чертежа режим Клиента
5) При создании/удалении/модификации/ восстановлении после удаления пользователем A
- любых простых (не составных) графических примитивов (производные от Autodesk.AutoCAD.DatabaseServi ces.Curve)
6) Срабатывают реакторы плагина на изменение
7) Изменения отображаются в автокаде у пользователя Б.

Ограничения.
Извините, вам запрещён просмотр содержимого спойлеров.

Реализованные команды:
repServerStart – запуск сервера
repServerStop – остановка сервера
repClientStart – запуск клиента
repClientStop – остановка клиента

Видео пример работы этой библиотеки тут:
Извините, вам запрещён просмотр содержимого спойлеров.

Код repServer.cs
Извините, вам запрещён просмотр содержимого спойлеров.

Код repClient.cs
Извините, вам запрещён просмотр содержимого спойлеров.

Извиняюсь за отсутствие комментов =(
Конструктивная критика очень приветствуется, я ведь только учусь.

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 738
Re: AUTOCAD 2012 на C# Visual Studio.
« Ответ #47 : 28-11-2015, 23:58:46 »
Интересная задумка, видео впечатляет! Практического смысла в этом не вижу никакого, но как демонстрация возможностей - очень неплохо!
Теперь немного замечаний.
Самое плохое в коде - это вот это:
Код - C# [Выбрать]
  1. get_object = ID.Open(Db.OpenMode.ForRead, true, true);
Открытый объект потом нигде не закрывается. То, что это делается в блоке:
Код - C# [Выбрать]
  1. using (Db.Transaction acTrans = acCurDb.TransactionManager.StartOpenCloseTransaction()) {}
делу никак не помогает.
Вы либо используйте эту транзакцию:
Код - C# [Выбрать]
  1. get_object = acTrans.GetObject(ID, Db.OpenMode.ForRead, true, true);
либо полученный через ID.Open объект используйте в конструкции using.
Я впервые вижу, чтобы в коде кто-то использовал такое:
Код - C# [Выбрать]
  1. Db.OpenMode.ForNotify
  2. get_object.DowngradeOpen();
Честное слово, за 3 года ни разу не встречал...
Ну это классика (http://bash.im/quote/66390):
Код - C# [Выбрать]
  1. if (get_object.IsErased == true)...
  2. if (get_object.IsUndoing == true)...
Ну и напоследок - неплохо бы где-то почитать про принятую в C# нотацию. По ней - названия классов и методов пишутся с большой буквы, названия локальных переменных и параметров - с маленькой. Переменные уровня класса - с маленькой буквы с префиксом "_" или "m_" ну и пр.

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: AUTOCAD 2012 на C# Visual Studio.
« Ответ #48 : 29-11-2015, 00:13:44 »
Программа для совместной работы над чертежом.
А практическая польза от такого способа работы какая? Я не утверждаю, что её нет в принципе, но для себя мне не удаётся придумать примеры, когда такой способ работы реально может быть востребован. Пока что, на мой взгляд, это выглядит это достаточно хрупко и, подозреваю, что толком не тестировано. Порой потеря DWG может оказаться слишком дорогим удовольствием (несомненно, во многих компаниях по ночам выполняется резервное копирование, но порой потеря работы даже одного дня может оказаться неприемлемой).

Тема совместной работы над одним и тем же чертежом достаточно интересна сама по себе, но безопасным это можно считать в том случае, когда это предоставляется "родным" API. В противном случае это дело очень рискованное (на мой взгляд) и прежде чем распространять его среди пользователей требует очень скрупулёзного тестирования, поскольку по закону жизни велика вероятность того, что сбой в работе (и не дай Бог потеря DWG) произойдёт в самый неподходящий момент.

Под тестированием я ни в коем случае не подразумеваю попытку пару-десятков раз выполнить её вручную - это не тестирование.

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: AUTOCAD 2012 на C# Visual Studio.
« Ответ #49 : 29-11-2015, 00:33:23 »
Помнится, любопытства ради, я делал AutoCAD сервером, работающим на удалённой машине и принимающим команды с удалённых компьютеров. Команды автоматом отправлялись в консоль AutoCAD и тут же выполнялись. С этим всё было нормально. Однако я не смог разобраться с тем, как получить копию той информации, которую AutoCAD выводит в консоль  в процессе своей работы с тем, чтобы перенаправить её обратно клиенту. Т.о. клиент не видел консольный вывод (работал вслепую), что не есть хорошо. Идею похоронил. Вопросы синхронизации я так же не рассматривал.

Практическая польза в таком удалённом способе мне виделась в том, что на удалённой машине могла работать та версия AutoCAD, которой нет у клиента. Если файл находится в сети, юзер мог бы обратиться к такому серверу с командой, например, пересохранения файла в нужную версию. Дополнительно, пользователь мог, не имея AutoCAD на локальной машине, запускать SCR-файлы в автокаде, работающем на удалённом компьютере и получать результаты его работы в виде DWG-файлов, сохраняемым скриптом в сети.

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

  • ADN Club
  • *****
  • Сообщений: 624
  • Карма: 158
    • ПГСу Бложик
Re: AUTOCAD 2012 на C# Visual Studio.
« Ответ #50 : 29-11-2015, 10:54:18 »
Дмитрий Загорулькин, Это одна из первых программ, написанных мной на C#, понятно что с тех пор скил несколько вырос. Программа писалась на заказ, с целью выяснить возможно ли реализовать такое, никакого практического использования данного кода не предполагалось, а потому никакого развития этого кода нет и скорее всего не будет.

Андрей Бушман, Андрей, мы обсуждали эту программу еще летом, после публикации видео и ссылку на код я тебе скидывал =о) и там же оговаривал сопутствующие условия.

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 738
Re: AUTOCAD 2012 на C# Visual Studio.
« Ответ #51 : 29-11-2015, 11:42:26 »
понятно что с тех пор скил несколько вырос
Каюсь, на дату не посмотрел :)

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: AUTOCAD 2012 на C# Visual Studio.
« Ответ #52 : 29-11-2015, 22:10:03 »
Андрей Бушман, Андрей, мы обсуждали эту программу еще летом, после публикации видео и ссылку на код я тебе скидывал =о) и там же оговаривал сопутствующие условия.
Может и обсуждали, но я этого не помню. К сожалению моя память оставляет желать лучшего (на полном серьёзе).