Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: Андрей Бушман от 21-11-2013, 16:27:40

Название: Текущая подшивка в окне SheetSet Manager
Отправлено: Андрей Бушман от 21-11-2013, 16:27:40
Доброго времени суток.

В окне SheetSet Manager одновременно может быть открыто сразу несколько подшивок, но текущая в окне всегда одна (см. прикреплённое изображение).

Вопросы:
1. Как программно определить, какая именно подшивка является текущей в окне диспетчера подшивок?
2. Как программно, в окне диспетчера подшивок, назначить текущей другую, ранее открытую подшивку?
3. Как программно загрузить в диспетчер подшивок очередную подшивку так, чтобы она появилась в указанном на скрине раскрывающемся списке?
4. Как программно выгрузить из диспетчера подшивок подшивку так, чтобы она исчезла в указанном скрине из раскрывающегося списка?

Спасибо.
Название: Re: Текущая подшивка в окне SheetSet Manager
Отправлено: Александр Ривилис от 21-11-2013, 16:42:27
Ответы ни на один из этих вопросов не освещены в документации и нигде мне не попадались, то я переадресую этот вопрос в ADN DevHelp. Возражений нет?
Название: Re: Текущая подшивка в окне SheetSet Manager
Отправлено: Андрей Бушман от 21-11-2013, 16:43:38
Конечно нет. Не важно кто ответит - главное результат. :)
Название: Re: Текущая подшивка в окне SheetSet Manager
Отправлено: Александр Ривилис от 21-11-2013, 17:32:24
Отправил в ADN DevHelp первые два из вопросов, так как третий и четвертый теоретически должны решаться при помощи методов sheetSetManager.OpenDatabase() и sheetSetManager.Close()
Название: Re: Текущая подшивка в окне SheetSet Manager
Отправлено: Андрей Бушман от 21-11-2013, 17:45:45
- AutoCAD 2009 x86 SP3 Enu.
- AutoCAD 2014 x64 SP1 Enu.

Похоже, что в данном случае теория разошлась с практикой... :( За основу взял код отсюда (http://bushman-andrey.blogspot.ru/2013/11/blog-post_13.html) и добавил пару строчек в метод Renumber:
Код - C# [Выбрать]
  1. Comp.AcSmSheetSetMgr mng = new Comp.AcSmSheetSetMgr();
  2. // ******Добавленный фрагмент кода******
  3. Comp.AcSmDatabase test = mng.OpenDatabase(@"C:\...\New Sheet Set (1).dst", false);
  4. if (test == null)
  5.         ed.WriteMessage("\nCan't open your 'test' sheet set!\n");
  6. else
  7.         ed.WriteMessage("\nIt is OK!\n");
  8. cad.UpdateScreen();
  9. //************************************
  10.  
На консоль получаю вывод:
Цитировать
Command: ss-renumber-all

It is OK!

Sheet Set name: New Sheet Set (1)
Renumbered sheets count: 2
Как видите, я открываю подшивку и не закрываю её. Однако в раскрывающемся списке менеджера подшивок она не появляется. Или может я что-то упустил?

Спасибо.
Название: Re: Текущая подшивка в окне SheetSet Manager
Отправлено: Александр Ривилис от 25-11-2013, 15:29:09
Получил ответ из ADN DevHelp:
Цитировать
Нет API для получения/установки активной (текущей) подшивки. Мы передали просьбу о создании такой функциональности.
Т.е. судя по всему палитра Диспетчера Подшивок сама по себе, а Диспетчер Подшивок (AcSmSheetSetMgr) - сам по себе и двусторонней связи между ними нет.


Название: Re: Текущая подшивка в окне SheetSet Manager
Отправлено: Андрей Бушман от 25-11-2013, 16:27:17
Получил ответ из ADN DevHelp:
Цитировать
Нет API для получения/установки активной (текущей) подшивки. Мы передали просьбу о создании такой функциональности.
Т.е. судя по всему палитра Диспетчера Подшивок сама по себе, а Диспетчер Подшивок (AcSmSheetSetMgr) - сам по себе и двусторонней связи между ними нет.
Странная реализация... Ну что же, буду знать, спасибо.
Название: Re: Текущая подшивка в окне SheetSet Manager
Отправлено: Александр Ривилис от 25-11-2013, 16:30:28
Странная реализация...
Я догадываюсь в чем причина. Если бы было иначе при массовой работе с подшивками через API палитра Диспетчера Подшивок постоянно бы обновлялась и мельтешила на экране...
Название: Re: Текущая подшивка в окне SheetSet Manager
Отправлено: Андрей Бушман от 25-11-2013, 16:35:59
Я догадываюсь в чем причина. Если бы было иначе при массовой работе с подшивками через API палитра Диспетчера Подшивок постоянно бы обновлялась и мельтешила на экране...

Это смотря как реализовать... Например, можно было бы просто добавить метод RegenSheetSet, который бы вызывался программистом по мере необходимости. В этом случае никакого мельтешения бы не было. Кроме того это (http://forum.dwg.ru/showpost.php?p=368913&postcount=216):
Цитата: ShaggyDoc  link="http://forum.dwg.ru/showpost.php?p=368913&postcount=216"
ответ 5-летней давности "Adding LISP access to SSM COM API's is on the wishlist"

не внушает каких-либо надежд на положительные сдвиги в направлении API подшивок. :(
Название: Re: Текущая подшивка в окне SheetSet Manager
Отправлено: VetalBY от 12-09-2018, 12:50:12
Есть подвижки по данной теме?
По п. 3: подшивку можно открыть с помощью команды "-OPENSHEETSET" либо используя shell (ShellExecute).

Еще один вопрос по теме подшивок: можно ли узнать с каким файлом подшивки связан dwg?. Если переименовать файл подшивки, то при открытии dwg акад выдает сообщение типа: Чертеж был ранее связан с подшивкой %PathToSheetSetAndFileName%, которую невозможно найти.
%PathToSheetSetAndFileName% - это переменная какая-то? можно её как-то прочитать?
(https://s15.postimg.cc/ltcx9usc7/image.png) (https://postimg.cc/image/ltcx9usc7/)
Название: Re: Текущая подшивка в окне SheetSet Manager
Отправлено: trir от 12-09-2018, 13:22:39
в словарях - сохрани файл в dxf и изучай
AcSheetSetData=>ShSetFileName
Название: Re: Текущая подшивка в окне SheetSet Manager
Отправлено: VetalBY от 13-09-2018, 16:16:47
в словарях - сохрани файл в dxf и изучай
AcSheetSetData=>ShSetFileName
Спасибо, то, что нужно.