Как открыть DWG-файл с нужным активным Листом

Автор Тема: Как открыть DWG-файл с нужным активным Листом  (Прочитано 6373 раз)

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

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

  • ADN OPEN
  • Сообщений: 2
  • Карма: 0
Всем добрый день! Новичок в C#, новичок в API  и в ООП в целом. Изучаю, изучаю, изучаю, но параллельно хотелось бы разбирать и актуальные задачи. Поэтому прошу помощи.
А задача такая: в некоем приложении есть кнопка, по нажатию которой я могу передать в свой будущий метод в виде аргументов имя файла (полный путь) и имя листа в этом файле.

От метода требуется:
1. запустить  aCad;
2. загрузить указанный файл;
3. сделать нужный лист активным.
Как можно реализовать такой метод?

Чтобы не подумали, что я уж совсем не удосужился покопаться по форуму и пошевелить извилинками, то вот что у меня наизвилилось из хаотично блуждающих в голове представлений о реализации такой задачи:

1. Для запуска acad использовать класс Process из System.Diagnostics
Код - C# [Выбрать]
  1.            
  2. Process myAcad = new Process();
  3.             try
  4.             {
  5.                 myAcad.StartInfo.UseShellExecute = false;
  6.                 myAcad.StartInfo.FileName = @"path_to_acad.exe";
  7.                 myAcad.StartInfo.CreateNoWindow = true;
  8.                 myAcad.Start();
  9.             }
  10.             catch (Exception e)
  11.             {
  12.                 Console.WriteLine(e.Message);
  13.             }
  14.  
2. Загрузить файл в acad Database через метод ReadDwgFile()... Но вот тут уже неясность - как определить что процесс (acad) уже запущен и готов обработать файл, чтобы не вызвать крах?
Код - C# [Выбрать]
  1. Database db = new Database(false, true);
  2. db.ReadDwgFile(file, FileShare.ReadWrite,false,"");

Код - C# [Выбрать]
  1. Database dbCurrent = Application.DocumentManager.MdiActiveDocument.Database;
но как понять, что в данный момент времени активный документ именно тот, что мне нужен (если открыты еще другие другие файлы, допустим)

3. Нужный лист сделать текущим -
Код - C# [Выбрать]
  1. LayoutManager.Current.CurrentLayout="имя листа"

Как выглядит реализация такой задачи на самом деле?

P.S. Это мой первый пост, первый шаг - не судите, если что.
P.P.S. Путь длинной в 1000 ли начинается с первого шага (Лао-Цзы)
« Последнее редактирование: 22-11-2018, 11:06:20 от Александр Ривилис »

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Dmitry,
Приветствую на форуме!
Начни с изучения правила о форматировании кода на нашем форуме - у меня в подписи. Да и дублировать темы - это совершенно лишнее. Добавляешь работу модераторам.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Dmitry,
Пункт 2 полностью бредовый и не реализуемый. Для открытия документа используется DocumentCollectionExtension.Open
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Если задача заключается только в том, чтобы открыть чертеж с заданным путём и установить активным нужный лист, то API не нужно от слова совсем.
Достаточно организовать запуск acad.exe с путём к файлу и путём к SCR-файлу:
http://help.autodesk.com/view/ACD/2016/ENU/?guid=GUID-8E54B6EC-5B52-4F62-B7FC-0D4E1EDF093A
В SCR-файле должна быть одна строка:
Код - Auto/Visual Lisp [Выбрать]
  1. (setvar "CLAYOUT" "Имя Листа")
И это всё.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 2
  • Карма: 0
Начни с изучения правила о форматировании кода на нашем форуме - у меня в подписи. Да и дублировать темы - это совершенно лишнее. Добавляешь работу модераторам.
Спасибо, всё учту. Дублирование вышло случайно, так как при отправке темы сервер выдал мне сообщение об ошибке и предложил повторить действие - что я и сделал.

Достаточно организовать запуск acad.exe с путём к файлу и путём к SCR-файлу:
http://help.autodesk.com/view/ACD/2016/ENU/?guid=GUID-8E54B6EC-5B52-4F62-B7FC-0D4E1EDF093A
К сожалению, я работаю в нанокад (не хотел это озвучивать сразу, т.к. это выходит за тематические рамки форума) который, кажется, не поддерживает аргументы командной строки, кроме как указания пути к файлу. Ну так мне, по крайней мере, в службе тех.поддержки сказали. Поэтому хочется именно через API попробовать это реализовать. Библиотеки у acad и ncad, кажется, очень похожи

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
К сожалению, я работаю в нанокад (не хотел это озвучивать сразу, т.к. это выходит за тематические рамки форума)
На данном форуме не обсуждаются никакие клоны AutoCAD, в том числе и NanoCAD!!!
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение