Turned Off All Viewport

Автор Тема: Turned Off All Viewport  (Прочитано 27000 раз)

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн Владимир ШуАвтор темы

  • ADN Club
  • *****
  • Сообщений: 611
  • Карма: 155
    • ПГСу Бложик
Turned Off All Viewport
« : 25-01-2019, 14:33:30 »
На dwg заинтересовала вот эта тема: http://forum.dwg.ru/showthread.php?p=1779755
Код ничего особенного из себя не представляет...
т.к. листы - блоки, то просто прохожу по всем BlockTableRecord и уже внутри них ищу Viewport и пытаюсь его/их выключить
Извините, вам запрещён просмотр содержимого спойлеров.

Однако получаю вот такую ошибку (acad 2017x64 Win7):

и вроде бы метод public bool On { get; set; } класса Viewport имеет и сеттер и геттер, но выключить Viewport у меня так и не получилось.

Прошу подсказать, что я делаю не так и как все таки выключить ВЭ?
« Последнее редактирование: 28-01-2019, 08:23:03 от Владимир Шу »

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: Turned Off All Viewport
« Ответ #1 : 25-01-2019, 14:37:25 »
Возможно, что пытаетесь отключить основной видовой экран листа.

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Turned Off All Viewport
« Ответ #2 : 25-01-2019, 14:37:29 »
как все таки выключить ВЭ
А что это за понятие такое "Выключить ВЭ"? Сколько знаком с автокадом, но слышу в первый раз

Оффлайн Владимир ШуАвтор темы

  • ADN Club
  • *****
  • Сообщений: 611
  • Карма: 155
    • ПГСу Бложик
Re: Turned Off All Viewport
« Ответ #3 : 25-01-2019, 14:48:22 »
А что это за понятие такое "Выключить ВЭ"? Сколько знаком с автокадом, но слышу в первый раз


Возможно, что пытаетесь отключить основной видовой экран листа.
Эээ.. а можно несколько подробней?

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Turned Off All Viewport
« Ответ #4 : 25-01-2019, 14:49:46 »
Владимир Шу, вот дела - даже не замечал никогда этого свойства =)

Отмечено как Решение Владимир Шу 25-01-2019, 15:01:49

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: Turned Off All Viewport
« Ответ #5 : 25-01-2019, 14:51:54 »
Эээ.. а можно несколько подробней?
Я так понимаю ,что всё то что мы непосредственно в пространстве листа рисуем, попадает в этот самый основной видовой экран. Его отключить нельзя. Вот тут у меня была похожая проблема: http://adn-cis.org/forum/index.php?topic=228.0

Оффлайн Владимир ШуАвтор темы

  • ADN Club
  • *****
  • Сообщений: 611
  • Карма: 155
    • ПГСу Бложик
Re: Turned Off All Viewport
« Ответ #6 : 25-01-2019, 15:02:35 »
Я так понимаю ,что всё то что мы непосредственно в пространстве листа рисуем, попадает в этот самый основной видовой экран.
Да, это оно. Спасибо, не знал эту тонкость.

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 809
  • Карма: 166
    • Мои плагины к Автокаду
Re: Turned Off All Viewport
« Ответ #7 : 25-01-2019, 15:04:41 »
Эээ.. а можно несколько подробней?
Вьюпорт с Number==1 - это не вьюпорт, а просто хранилице визуальных настроек самого листа. Отключить его нельзя. И вообще трогать не надо - большинство свойств и методов вызывает ошибку. Есть на каждом листе.

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Turned Off All Viewport
« Ответ #8 : 25-01-2019, 15:05:36 »
Владимир Шу,
Кстати, не самый рациональный алгоритм при большом количестве BlockTableRecord. Лучше было бы подойти со стороны Layout - их всегда меньше и из каждого Layout можно сразу получить все Viewport'ы в нём (Layout.GetViewports).
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Владимир ШуАвтор темы

  • ADN Club
  • *****
  • Сообщений: 611
  • Карма: 155
    • ПГСу Бложик
Re: Turned Off All Viewport
« Ответ #9 : 25-01-2019, 15:12:56 »
Кстати, не самый рациональный алгоритм при большом количестве BlockTableRecord. Лучше было бы подойти со стороны Layout - их всегда меньше и из каждого Layout можно сразу получить все Viewport'ы в нём (Layout.GetViewports).
Ну так и получилось в итоге, т.к. искать ID для первого ВЭ было как то не с руки, кто их знает какой из них первый, какой второй, то зашел со стороны Layout ...

Вьюпорт с Number==1 - это не вьюпорт, а просто хранилице визуальных настроек самого листа.
А вот как найти первый ВЭ... спасибо. =О)

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 809
  • Карма: 166
    • Мои плагины к Автокаду
Re: Turned Off All Viewport
« Ответ #10 : 25-01-2019, 15:13:50 »
кто их знает какой из них первый, какой второй, то зашел со стороны Layout ...
Я ж написал - Number == 1

Оффлайн Владимир ШуАвтор темы

  • ADN Club
  • *****
  • Сообщений: 611
  • Карма: 155
    • ПГСу Бложик
Re: Turned Off All Viewport
« Ответ #11 : 25-01-2019, 15:29:15 »
Я ж написал - Number == 1
Увы но нет, это так не работает, автокад назначает номера видовым экранам только в открытом листе, для всех остальных ВЭ на остальных листах номер всегда = -1.

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 809
  • Карма: 166
    • Мои плагины к Автокаду
Re: Turned Off All Viewport
« Ответ #12 : 25-01-2019, 15:39:56 »
Я ж написал - Number == 1
Увы но нет, это так не работает, автокад назначает номера видовым экранам только в открытом листе, для всех остальных ВЭ на остальных листах номер всегда = -1.

Да?! Неожиданно... Я в самом деле переключал текущий лист перед этой проверкой, но абсолютно по другой причине...

Оффлайн Владимир ШуАвтор темы

  • ADN Club
  • *****
  • Сообщений: 611
  • Карма: 155
    • ПГСу Бложик
Re: Turned Off All Viewport
« Ответ #13 : 25-01-2019, 15:53:01 »
Вот итоговый код:
Код - C# [Выбрать]
  1. using System;
  2. using App = Autodesk.AutoCAD.ApplicationServices;
  3. using Db = Autodesk.AutoCAD.DatabaseServices;
  4. using Rtm = Autodesk.AutoCAD.Runtime;
  5.  
  6. [assembly: Rtm.CommandClass(typeof(TurnedOffAllViewport.Commands))]
  7. namespace TurnedOffAllViewport
  8. {
  9.     public class Commands
  10.     {
  11.         [Rtm.CommandMethod("TurnedOffAllViewport")]
  12.         static public void TurnedOff()
  13.         {
  14.             App.Document acDoc = App.Application.DocumentManager.MdiActiveDocument;
  15.             if (acDoc == null) return;
  16.             Db.Database acCurDb = acDoc.Database;
  17.             using (Db.Transaction acTrans = acCurDb.TransactionManager.StartOpenCloseTransaction())
  18.             {
  19.                 Db.DBDictionary lays = acTrans.GetObject(acCurDb.LayoutDictionaryId,
  20.                        Db.OpenMode.ForRead) as Db.DBDictionary;
  21.  
  22.                 Db.BlockTable bt = acTrans.GetObject(acCurDb.BlockTableId, Db.OpenMode.ForRead) as Db.BlockTable;
  23.                 Db.BlockTableRecord btr = acTrans.GetObject(bt[Db.BlockTableRecord.ModelSpace], Db.OpenMode.ForRead) as Db.BlockTableRecord;
  24.  
  25.                 foreach (Db.DBDictionaryEntry item in lays)
  26.                 {
  27.                     if (item.Value != btr.LayoutId)
  28.                     {
  29.                         Db.Layout layout = acTrans.GetObject(item.Value, Db.OpenMode.ForWrite) as Db.Layout;
  30.  
  31.                         var list = layout.GetViewports();
  32.                         if (list.Count > 1)
  33.                             for (int i = 1; i < list.Count; i++)
  34.                             {
  35.                                 Db.Viewport vp = acTrans.GetObject(list[i], Db.OpenMode.ForWrite, true, true) as Db.Viewport;
  36.                                
  37.                                 if (vp.OwnerId == layout.BlockTableRecordId)
  38.                                     vp.On = false; //тут может быть ошибка eNotInPaperspace
  39.             //http://help.autodesk.com/view/OARX/2019/ENU/?guid=OREF-AcDbViewport__setIsOn_bool
  40.  
  41.                             }
  42.                     }
  43.                 }
  44.                 acTrans.Commit();
  45.             }
  46.         }
  47.     }
  48. }


ЗЫ.
Подправил код, т.к.  if (item.Key != Db.BlockTableRecord.ModelSpace) не работает.
« Последнее редактирование: 28-01-2019, 10:51:01 от Владимир Шу »

Оффлайн Владимир ШуАвтор темы

  • ADN Club
  • *****
  • Сообщений: 611
  • Карма: 155
    • ПГСу Бложик
Re: Turned Off All Viewport
« Ответ #14 : 28-01-2019, 08:21:55 »
на некоторых файлах, в строчке  38, возникает ошибка eNotInPaperspace (http://help.autodesk.com/view/OARX/2019/ENU/?guid=OREF-AcDbViewport__setIsOn_bool)

и это очень странно, т.к. набор листов получается из LayoutDictionary и там других BlockTableRecord кроме как пространства модели и листов нет, но модель вроде как отсекается в строке 27 и такой ситуации быть не должно...

Строка 37 (if (vp.OwnerId == layout.BlockTableRecordId)), вроде как отсекает эту ошибку, но не всегда надежно отрабатывает...
Есть еще идеи как сделать код надежным и безотказным?

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: Turned Off All Viewport
« Ответ #15 : 28-01-2019, 10:46:10 »
Странно, вроде в коде нет каких-то явных ошибок.
Я бы попробовал, для начала, заменить OpenCloseTransaction на обычную транзакцию или открывать Layout не для записи, а для чтения.
P.S. Вытащите код из спойлера, пожалуйста!

Оффлайн Владимир ШуАвтор темы

  • ADN Club
  • *****
  • Сообщений: 611
  • Карма: 155
    • ПГСу Бложик
Re: Turned Off All Viewport
« Ответ #16 : 28-01-2019, 11:04:23 »
Спасибо. Замена StartOpenCloseTransaction() на StartTransaction() на одном и том же файле убирает ошибку eNotInPaperspac.
Очень интересно...

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: Turned Off All Viewport
« Ответ #17 : 28-01-2019, 11:13:58 »
Значит, где-то в коде есть ошибка открытия-закрытия объектов, которую обычная транзакция прощает.

Оффлайн Владимир ШуАвтор темы

  • ADN Club
  • *****
  • Сообщений: 611
  • Карма: 155
    • ПГСу Бложик
Re: Turned Off All Viewport
« Ответ #18 : 28-01-2019, 11:48:33 »
нет, ошибка не из-за незакрытого объекта. Переписал код вот так:
Код - C# [Выбрать]
  1.         [Rtm.CommandMethod("TurnedOffAllViewport")]
  2.         static public void TurnedOff()
  3.         {
  4.             App.Document acDoc = App.Application.DocumentManager.MdiActiveDocument;
  5.             if (acDoc == null) return;
  6.             Db.Database acCurDb = acDoc.Database;
  7.  
  8.             Db.ObjectId MSId = Db.ObjectId.Null;
  9.             using (Db.BlockTable bt = acCurDb.BlockTableId.Open(Db.OpenMode.ForRead) as Db.BlockTable)
  10.             {
  11.                 using (Db.BlockTableRecord btr = bt[Db.BlockTableRecord.ModelSpace].Open(Db.OpenMode.ForRead) as Db.BlockTableRecord)
  12.                 {
  13.                     MSId = btr.LayoutId;
  14.                 }
  15.             }
  16.  
  17.             List<Db.ObjectId> lll = new List<Db.ObjectId>();
  18.             using (Db.DBDictionary lays = acCurDb.LayoutDictionaryId.Open(Db.OpenMode.ForRead) as Db.DBDictionary)
  19.             {
  20.                 foreach (Db.DBDictionaryEntry item in lays)
  21.                     lll.Add(item.Value);
  22.             }
  23.  
  24.             List<Db.ObjectId> vps = new List<Db.ObjectId>();
  25.             foreach (Db.ObjectId item in lll.FindAll(q => q != MSId))
  26.             {
  27.                 using (Db.Layout layout = item.Open(Db.OpenMode.ForRead) as Db.Layout)
  28.                 {
  29.                     var list = layout.GetViewports();
  30.                     if (list.Count > 1)
  31.                         for (int i = 1; i < list.Count; i++)
  32.                         {
  33.                             vps.Add(list[i]);
  34.                         }
  35.                 }
  36.             }
  37.  
  38.             foreach (Db.ObjectId item in vps)
  39.             {
  40.                 using (Db.Viewport vp = item.Open(Db.OpenMode.ForWrite, true, true) as Db.Viewport)
  41.                 {
  42.                     vp.On = false; //может быть ошибка eNotInPaperspace
  43.                 }
  44.             }
  45.         }
и получаю всё ту же ошибку eNotInPaperspac все в том же методе

Оффлайн Владимир ШуАвтор темы

  • ADN Club
  • *****
  • Сообщений: 611
  • Карма: 155
    • ПГСу Бложик
Re: Turned Off All Viewport
« Ответ #19 : 28-01-2019, 12:29:17 »
проблема именно в методе On..
если не тупо выключать, а с условием
Код - C# [Выбрать]
  1. if (vp.On) vp.On = false;
то ошибка не появляется, но и не все листы и не все ВЭ выключаются... надо копать глубже.

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: Turned Off All Viewport
« Ответ #20 : 28-01-2019, 12:36:08 »
Хм... А если в 40 строке openErased поставить false?
P.S. Хотя, нет. Если бы в этом была проблема, то вместо vp был бы null и другая ошибка.

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Turned Off All Viewport
« Ответ #21 : 28-01-2019, 12:36:39 »
Владимир Шу,
Интересно глянуть на чертеж, в котором это происходит.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Владимир ШуАвтор темы

  • ADN Club
  • *****
  • Сообщений: 611
  • Карма: 155
    • ПГСу Бложик
Re: Turned Off All Viewport
« Ответ #22 : 28-01-2019, 12:46:12 »
Вот.

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Turned Off All Viewport
« Ответ #23 : 28-01-2019, 12:47:46 »
Вот.
Заодно уточни версию AutoCAD в которой проверял. Это может быть баг в конкретной версии.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Владимир ШуАвтор темы

  • ADN Club
  • *****
  • Сообщений: 611
  • Карма: 155
    • ПГСу Бложик
Re: Turned Off All Viewport
« Ответ #24 : 28-01-2019, 12:53:44 »
2017х64... но на dwg.ru писали что подобная ошибка есть и на 2018... и что-то у меня подозрение, что проблема именно в методе On. Если ему два раза подряд задать свойство false, то получаю ошибку
Код - C# [Выбрать]
  1.             int a = 1;
  2.             foreach (Db.ObjectId item in vps)
  3.             {
  4.                
  5.                 using (Db.Viewport vp = item.Open(Db.OpenMode.ForWrite) as Db.Viewport)
  6.                 {
  7.                    vp.UpdateDisplay();
  8.                     acDoc.Editor.WriteMessage($"\n {a++}- {vp.Handle}");
  9.                    if (vp.On) vp.On = false; //может быть ошибка eNotInPaperspace
  10.                    //vp.On = false;
  11.                 }
  12.             }
если раскоментить строчку, то точно ошибку получаю, а с закоментированной строчкой ВЭ не выключатся. Блин.

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: Turned Off All Viewport
« Ответ #25 : 28-01-2019, 12:57:08 »
Я так подозреваю, что проблема возникает если в чертеже есть лист, который никогда не становился активным, т.е. не был инициализирован. Если пройтись по всем вкладкам перед запуском команды - ошибка пропадает.

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Turned Off All Viewport
« Ответ #26 : 28-01-2019, 13:13:05 »
Владимир Шу,
Кроме Layout1 никакие листы не инициализированы:


Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Turned Off All Viewport
« Ответ #27 : 28-01-2019, 13:15:48 »
P.S. Кстати, проверить Layout является моделью или нет можно проще - сравнить его свойство Modeltype с true.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: Turned Off All Viewport
« Ответ #28 : 28-01-2019, 13:26:56 »
Что ещё интересно, даже если инициализировать все листы, то есть ещё такой глюк: запускаем код, переходим в другой лист и видим, что видовые экраны включены. Хотя в свойствах у них стоит "Вкл-Нет". Я добавил в код:
Код - C# [Выбрать]
  1. vp.UpdateDisplay();
  2. vp.RecordGraphicsModified(true);
  3. vp.Draw();
  4.  
  5. ...
  6.  
  7. Autodesk.AutoCAD.Internal.Utils.FlushGraphics();
  8.  
Это не помогло. Действительно отключаются только ВЭ на активной вкладке. Регенерация не помогает.
Так что, либо использовать обычную транзакцию, либо выставлять активным тот лист, на котором в данный момент отключаются ВЭ.

Оффлайн Владимир ШуАвтор темы

  • ADN Club
  • *****
  • Сообщений: 611
  • Карма: 155
    • ПГСу Бложик
Re: Turned Off All Viewport
« Ответ #29 : 28-01-2019, 13:32:24 »
vp.UpdateDisplay();
http://help.autodesk.com/view/OARX/2019/ENU/?guid=OREF-AcDbViewport__updateDisplay
Цитировать
If no changes have been made, or the viewport is not on, or is not onscreen, then this function does nothing.

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Turned Off All Viewport
« Ответ #30 : 28-01-2019, 13:33:59 »
Дмитрий Загорулькин,
LAYOUTREGENCTL не влияет?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Владимир ШуАвтор темы

  • ADN Club
  • *****
  • Сообщений: 611
  • Карма: 155
    • ПГСу Бложик
Re: Turned Off All Viewport
« Ответ #31 : 28-01-2019, 13:41:28 »
вот так отрабатывает без ошибок,
Код - C# [Выбрать]
  1.         [Rtm.CommandMethod("TurnedOffAllViewport")]
  2.         static public void TurnedOff()
  3.         {
  4.             App.Document acDoc = App.Application.DocumentManager.MdiActiveDocument;
  5.             if (acDoc == null) return;
  6.             Db.Database acCurDb = acDoc.Database;
  7.  
  8.             List<Db.ObjectId> lll = new List<Db.ObjectId>();
  9.             using (Db.DBDictionary lays = acCurDb.LayoutDictionaryId.Open(Db.OpenMode.ForRead) as Db.DBDictionary)
  10.             {
  11.                 foreach (Db.DBDictionaryEntry item in lays)
  12.                    lll.Add(item.Value);
  13.             }
  14.             List<Db.ObjectId> vps = new List<Db.ObjectId>();
  15.             foreach (Db.ObjectId item in lll)
  16.             {
  17.                 using (Db.Layout layout = item.Open(Db.OpenMode.ForWrite) as Db.Layout)
  18.                 {
  19.                     if (!layout.ModelType)
  20.                     {
  21.                         var list = layout.GetViewports();
  22.                         if (list.Count == 0)
  23.                         {
  24.                             layout.Initialize();
  25.                             list = layout.GetViewports();
  26.                         }
  27.                         if (list.Count > 1)
  28.                             for (int i = 1; i < list.Count; i++)
  29.                             {
  30.                                 vps.Add(list[i]);
  31.                             }
  32.                     }
  33.                 }
  34.             }
  35.             int a = 1;
  36.             foreach (Db.ObjectId item in vps)
  37.             {
  38.                  using (Db.Viewport vp = item.Open(Db.OpenMode.ForWrite) as Db.Viewport)
  39.                 {
  40.                     acDoc.Editor.WriteMessage($"\n {a++}- {vp.Handle}");
  41.                     vp.On = false;
  42.                 }
  43.             }
  44.         }
НО... для листов, которые были принудительно инициализированны, каким то чудом становятся видимыми ВЭ (те которые под номером 0) и выключаются.

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: Turned Off All Viewport
« Ответ #32 : 28-01-2019, 13:51:12 »
LAYOUTREGENCTL не влияет?
Влияет! Если 0 - то всё ок. Если 2 - то как я описывал ранее.

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: Turned Off All Viewport
« Ответ #33 : 28-01-2019, 13:57:55 »
вот так отрабатывает без ошибок
Вот тут я перестал понимать...
Если раньше работу рушили ВЭ на неинициализированных листах, то как теперь выполняется условие в строке 22? То есть, на неинициализированных листах не выдаёт ВЭ, тогда откуда в предыдущем варианте взялись ВЭ, которые выдавали ошибку? Мистика...

Оффлайн Владимир ШуАвтор темы

  • ADN Club
  • *****
  • Сообщений: 611
  • Карма: 155
    • ПГСу Бложик
Re: Turned Off All Viewport
« Ответ #34 : 28-01-2019, 14:45:15 »
Кроме Layout1 никакие листы не инициализированы:
т.е. до тех пор, пока не будет инициирован лист, ВЭ не будет записано ID владельца или владельцу не будет установлено свойство, что он -  лист?

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Turned Off All Viewport
« Ответ #35 : 28-01-2019, 16:20:09 »
т.е. до тех пор, пока не будет инициирован лист, ВЭ не будет записано ID владельца или владельцу не будет установлено свойство, что он -  лист?
До тех пор у листа не будет Viewport'ов. На тех картинках, которые я привёл видно, что GetViewports для неинициализированных листов возвращает пустой список. Меня удивило другое. Такое впечатление, что лист "Корпус 1. Секция 3. Стены подвала." (впрочем как и многие другие) был создан и не инициализирован (возможно программно?) и в него были добавлены Viewport'ы до инициализации. Вручную, как я понимаю это сделать нельзя - при переключении на лист он инциализируется.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Владимир ШуАвтор темы

  • ADN Club
  • *****
  • Сообщений: 611
  • Карма: 155
    • ПГСу Бложик
Re: Turned Off All Viewport
« Ответ #36 : 28-01-2019, 16:27:08 »
Такое впечатление, что лист "Корпус 1. Секция 3. Стены подвала." (впрочем как и многие другие) был создан и не инициализирован (возможно программно?) и в него были добавлены Viewport'ы до инициализации. Вручную, как я понимаю это сделать нельзя - при переключении на лист он инциализируется.
Нет. Эти листы делались либо из шаблона (другой файл), либо просто добавлялись руками, ВЭ создавались руками.
Layout1, Layout2 ... делал точно руками в процессе тестирования кода из первого сообщения в этой теме.

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Turned Off All Viewport
« Ответ #37 : 28-01-2019, 16:30:50 »
Layout1, Layout2 ... делал точно руками в процессе тестирования кода из первого сообщения в этой теме.
Посмотри значение переменной LAYOUTCREATEVIEWPORT.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Владимир ШуАвтор темы

  • ADN Club
  • *****
  • Сообщений: 611
  • Карма: 155
    • ПГСу Бложик
Re: Turned Off All Viewport
« Ответ #38 : 28-01-2019, 16:42:04 »

 LAYOUTCREATEVIEWPORT=0
я сам делал ВЭ командой  _-vports

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Turned Off All Viewport
« Ответ #39 : 28-01-2019, 16:45:03 »
LAYOUTCREATEVIEWPORT=0
я сам делал ВЭ командой  _-vports
Вот поэтому что-то и не срослось.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн pavka_97

  • ADN OPEN
  • ***
  • Сообщений: 150
  • Карма: 3
Re: Turned Off All Viewport
« Ответ #40 : 21-09-2020, 18:03:55 »
НО... для листов, которые были принудительно инициализированны, каким то чудом становятся видимыми ВЭ (те которые под номером 0) и выключаются.
Похожая ситуация. Метод layout. Inizialise вдобавок выключают и существующие vp на некоторых  других  layouts или вообще на всех. Все vp делались руками в различных вариантах(обычный, подрезанный,полигональный,по примитиву).Возможно ли избежать создания видимого , но выключенного vp[0]  и выключения существующих vp без переключений на каждый layout ?

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Turned Off All Viewport
« Ответ #41 : 21-09-2020, 19:31:27 »
Метод layout. Inizialise вдобавок выключают и существующие vp на некоторых  других  layouts или вообще на всех.
Это или баг в AutoCAD или в конкретном чертеже.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн pavka_97

  • ADN OPEN
  • ***
  • Сообщений: 150
  • Карма: 3
Re: Turned Off All Viewport
« Ответ #42 : 21-09-2020, 23:40:26 »
Код - C# [Выбрать]
  1. using Autodesk.AutoCAD.Runtime;
  2. using Autodesk.AutoCAD.ApplicationServices;
  3. using Autodesk.AutoCAD.DatabaseServices;
  4.  
  5. namespace pavtest
  6. {
  7.     public class PavTest
  8.     {
  9.  
  10.         [CommandMethod("PAVTEST")]
  11.         public void PAVTEST()
  12.         {
  13.             Document doc = Application.DocumentManager.MdiActiveDocument;
  14.             Database db = doc.Database;
  15.  
  16.             //проходим по layouts
  17.             using (DBDictionary dict = (DBDictionary)db.LayoutDictionaryId.Open(OpenMode.ForRead))
  18.             {
  19.                 foreach (DBDictionaryEntry eDict in dict)
  20.                 {
  21.                     using (Layout layout = (Layout)eDict.Value.Open(OpenMode.ForRead))
  22.                     {
  23.                         if (!layout.ModelType)
  24.                         {
  25.                             //если неинициализирован, то vp.count = 0, инициализируем
  26.                             if (layout.GetViewports().Count == 0)
  27.                             {
  28.  
  29.                                 layout.UpgradeOpen();
  30.                                 layout.Initialize();
  31.                                 layout.DowngradeOpen();
  32.  
  33.                             }
  34.                         }
  35.  
  36.                     }
  37.                 }
  38.  
  39.             }
  40.         }
  41.     }
  42. }
  43.  
  44.  
  45.  

Появляется в 13,16,20 кадах, в других не проверял. Появляется во вкладке в которую не переключаешься в сессии и то не всегда. Но единожды то переключение (руками) во время создания листа и vp было когда то. Как вариант для устранения проблемы нужно переключится во вкладку еще раз после создания.

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Turned Off All Viewport
« Ответ #43 : 22-09-2020, 10:44:56 »
pavka_97,
Увы, но я ничего не понял. Что появляется? Код внешне выглядит вполне корректным.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн pavka_97

  • ADN OPEN
  • ***
  • Сообщений: 150
  • Карма: 3
Re: Turned Off All Viewport
« Ответ #44 : 22-09-2020, 11:41:18 »

в layout1 и layaout2 включенные vp. если мы запускаем код из layout4, предварительно не переключаясь в layout1 или 2, то видим что на видео. Т.е. выключенные vp плюс видимый выключенный контур "старого" о-го vp 

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Turned Off All Viewport
« Ответ #45 : 22-09-2020, 11:43:19 »
pavka_97,
Выложи dwg-файл. Подозреваю что проблема в нём.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн pavka_97

  • ADN OPEN
  • ***
  • Сообщений: 150
  • Карма: 3
Re: Turned Off All Viewport
« Ответ #46 : 22-09-2020, 11:51:07 »
Пожалуйста :)

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Turned Off All Viewport
« Ответ #47 : 22-09-2020, 12:11:21 »
в layout1 и layaout2 включенные vp.
В них вообще нет Viewport'ов - эти листы не были инициализированы. Когда ты на них переключаешься, AutoCAD их сам инициализирует и на них получаются Viewport'ы.



Если в BlockTableRecord соответствующего Layout уже были Viewport'ы, то получается чехарда, как в твоём случае. Поэтому сначала нужно создавать Layout, инициализировать его, а потом уже добавлять в него, то что нужно.

Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн pavka_97

  • ADN OPEN
  • ***
  • Сообщений: 150
  • Карма: 3
Re: Turned Off All Viewport
« Ответ #48 : 22-09-2020, 12:21:45 »
это все понятно, кроме:
Поэтому сначала нужно создавать Layout, инициализировать его
Я все layout создаю руками(т.е последовательно создаю вкладку, в ней создаю viewport, затем создаю следующую вкладку,в ней свой viewport) - это не является  инициализацией?

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Turned Off All Viewport
« Ответ #49 : 22-09-2020, 12:41:13 »
это все понятно, кроме:
Поэтому сначала нужно создавать Layout, инициализировать его
Я все layout создаю руками(т.е последовательно создаю вкладку, в ней создаю viewport, затем создаю следующую вкладку,в ней свой viewport) - это не является  инициализацией?
Даже если ты установил LAYOUTCREATEVIEWPORT в 0, при создании листа Viewport'ы не создаются, но при переключении на созданный лист AutoCAD неявно выполняет его инициализацию и создаёт в нём один основной (невидимый) Viewport:

Если LAYOUTCREATEVIEWPORT в 1, то создаются два Viewport'а - один основной невидимый, и второй который ты видишь:



В твоём же случае листы были созданы, но не инициализированы никаким образом. И в них (похоже программно) закинуты Viewport'ы.


Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн pavka_97

  • ADN OPEN
  • ***
  • Сообщений: 150
  • Карма: 3
Re: Turned Off All Viewport
« Ответ #50 : 22-09-2020, 12:52:06 »
И в них (похоже программно) закинуты Viewport'ы.
Это не так.

Я все layout создаю руками(т.е последовательно создаю вкладку, в ней создаю viewport, затем создаю следующую вкладку,в ней свой viewport) - это не является  инициализацией?
Такой последовательность вручную можно назвать инициализацией?

Ладно бы это была проблема конкретного файла, но к сожалению ситуация повторяется на многих других, не только моих файлах.
 

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Turned Off All Viewport
« Ответ #51 : 22-09-2020, 13:00:39 »
Цитата: Александр Ривилис от 22-09-2020, 12:11:21

    Я все layout создаю руками(т.е последовательно создаю вкладку, в ней создаю viewport, затем создаю следующую вкладку,в ней свой viewport) - это не является  инициализацией?

Такой последовательность вручную можно назвать инициализацией?
Вручную можно создать Viewport только если переключится на соответствующий Layout, что приводит к его инициализации (фактически вызов Layout.Initialize()). В этом случае в нём всегда есть как минимум два Viewport'а - один основной невидимый, второй - который ты создал.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Turned Off All Viewport
« Ответ #52 : 22-09-2020, 13:16:01 »
pavka_97,
Если ты не закинул программно Viewport'ы в не инициализированный Layout, то тут два варианта:
1) Баг в конкретной версии AutoCAD
2) Установлено приложение в AutoCAD, которое само создаёт (или копирует Viewport'ы)
Вот анализ твоего чертежа. Смотрим, что Layout1 не инициализирован, но его BlockTableRecord уже содержит 3 Viewport'а
Откуда они там взялись?

Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн pavka_97

  • ADN OPEN
  • ***
  • Сообщений: 150
  • Карма: 3
Re: Turned Off All Viewport
« Ответ #53 : 22-09-2020, 13:26:34 »
удалось точно поймать "баг". (и это одна из многих комбинаций)создаем последовательно вручную вьюпорты в 4x листах. на 4м листе копируем vp. теперь в 4м их два, не считая 0го.Сохраняем автокад выходим. Открываем этот же файл.Переключаемся в 1йлист.В первой вкладке копируем существующий вьюпорт. Теперь и в первой вкладке два вьюпорта, не считая  0-го. Сохраняем выходим.Открываем и в первой вкладке запускаем код. Теперь во 2-й и 3й вкладках выключились вьюпорты.
Если нужно, видео могу позднее записать.
Autocad 2013 eng. 32x. Windows7

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Turned Off All Viewport
« Ответ #54 : 22-09-2020, 13:30:21 »
Если нужно, видео могу позднее записать.
Было бы очень желательно, но вот только делать это в AutoCAD 2013 совершенно бессмысленно, так как эта версия уже очень давно не поддерживается. Если есть возможность - запиши в одной из двух последних версий (2020 или 2021).
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Turned Off All Viewport
« Ответ #55 : 22-09-2020, 13:32:07 »
В первой вкладке копируем существующий вьюпорт.
Копируешь через буфер обмена, или командой _COPY?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн pavka_97

  • ADN OPEN
  • ***
  • Сообщений: 150
  • Карма: 3
Re: Turned Off All Viewport
« Ответ #56 : 22-09-2020, 13:37:16 »
Copy. В 2020  не могу сегодня проверить

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Turned Off All Viewport
« Ответ #57 : 22-09-2020, 13:41:33 »
Copy. В 2020  не могу сегодня проверить
Хорошо. Запиши в 2013. Я по твоей последовательности проверю в 2021. Если такой ошибки не будет, то увы... Значит исправили в одной из последующих версий.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн pavka_97

  • ADN OPEN
  • ***
  • Сообщений: 150
  • Карма: 3
Re: Turned Off All Viewport
« Ответ #58 : 22-09-2020, 14:50:30 »

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Turned Off All Viewport
« Ответ #59 : 22-09-2020, 15:01:11 »
pavka_97,
Я вижу, что как минимум VetCAD++ используется. Плюс я хотел бы понять после всех этих манипуляций что с листами и viewport'ами в них? Установи MGDDBG и проверь то, что я показывал на предыдущих видео.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн pavka_97

  • ADN OPEN
  • ***
  • Сообщений: 150
  • Карма: 3
Re: Turned Off All Viewport
« Ответ #60 : 22-09-2020, 15:15:53 »
ARX не подойдет? MGD не пойму как ставить на 13й.

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Turned Off All Viewport
« Ответ #61 : 22-09-2020, 15:19:06 »
ARX не подойдет? MGD не пойму как ставить на 13й.
Нет, не подойдет. Он не всю информацию снимает. Как сказано здесь: https://adn-cis.org/forum/index.php?topic=7274.0
Цитировать
Чтобы установить ARXDBG и MGDDBG необходимо их BUNDLE'ы разархивировать в каталог  %ProgramFiles%\Autodesk\ApplicationPlugins
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Turned Off All Viewport
« Ответ #62 : 22-09-2020, 15:24:06 »
pavka_97,
И для начала проверь без VetCAD++ и вообще без любых сторонних приложений...
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн pavka_97

  • ADN OPEN
  • ***
  • Сообщений: 150
  • Карма: 3
Re: Turned Off All Viewport
« Ответ #63 : 22-09-2020, 15:35:22 »
Off-Topic: показать
Я себя полнейшим д..... ощущаю, но не выходит mgd. через netload же ставится?/bin/debug/MgdDbg.dll? так не выходит .на работе в 16 и 20 все сразу подключилось

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Turned Off All Viewport
« Ответ #64 : 22-09-2020, 15:38:58 »
Off-Topic: показать
Я себя полнейшим д..... ощущаю, но не выходит mgd. через netload же ставится?/bin/debug/MgdDbg.dll? так не выходит .на работе в 16 и 20 все сразу подключилось

Через netload вообще ничего не ставится, а загружается. Но не в этом случае. Здесь AutoCAD при запуске сам загружает при помощи автозагрузчика. И загружает автозагрузчик для AutoCAD 2013 файл "C:\Program Files\Autodesk\ApplicationPlugins\Autodesk DWG MgdDBG.bundle\Contents\Resources\DWGMgdDbgSource\bin\DebugA2013\MgdDbg.dll"
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн pavka_97

  • ADN OPEN
  • ***
  • Сообщений: 150
  • Карма: 3
Re: Turned Off All Viewport
« Ответ #65 : 22-09-2020, 15:44:32 »
Off-Topic: показать
если достаточно разархивировать туда же куда и arx, т.е. %ProgramFiles%\Autodesk\ApplicationPlugins, то нет не подгружает.попробую автокад переустановить

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Turned Off All Viewport
« Ответ #66 : 22-09-2020, 15:49:47 »
если достаточно разархивировать туда же куда и arx, т.е. %ProgramFiles%\Autodesk\ApplicationPlugins, то нет не подгружает.попробую автокад переустановить
Должно быть так:


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

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Turned Off All Viewport
« Ответ #67 : 22-09-2020, 15:58:35 »
Проверил у себя - в AutoCAD 2013 нормально грузится. Впрочем у меня x64:



Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн pavka_97

  • ADN OPEN
  • ***
  • Сообщений: 150
  • Карма: 3
Re: Turned Off All Viewport
« Ответ #68 : 22-09-2020, 16:25:36 »
Переустановил. Не грузится mgd...(:. Vetcad как оказалось ни причем:). Придется проверять в другом автокаде, но не сегодня уже

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Turned Off All Viewport
« Ответ #69 : 22-09-2020, 16:28:25 »
Не грузится mgd...
Через netload указанный мной выше файл тоже не грузится?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн pavka_97

  • ADN OPEN
  • ***
  • Сообщений: 150
  • Карма: 3
Re: Turned Off All Viewport
« Ответ #70 : 22-09-2020, 16:29:29 »
угу

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Turned Off All Viewport
« Ответ #71 : 22-09-2020, 16:34:34 »
угу
Ну тогда даже и не знаю чем помочь... Попробуй у себя перекомпилировать MGDDBG для AutoCAD 2013.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Turned Off All Viewport
« Ответ #72 : 22-09-2020, 16:36:00 »
Кстати, неплохо бы убедиться, что установлены все обновления для AutoCAD 2013. Как минимум нашел вот это:
https://knowledge.autodesk.com/support/autocad/troubleshooting/caas/downloads/content/autocad-2013-service-pack-2.html
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн pavka_97

  • ADN OPEN
  • ***
  • Сообщений: 150
  • Карма: 3
Re: Turned Off All Viewport
« Ответ #73 : 22-09-2020, 16:38:47 »
Off-Topic: показать
Спасибо, попробую. Но уже завтра

Оффлайн pavka_97

  • ADN OPEN
  • ***
  • Сообщений: 150
  • Карма: 3
Re: Turned Off All Viewport
« Ответ #74 : 22-09-2020, 22:39:22 »
Через AnyDesk зашел на рабочий комп. В 16, 20 кадах ситуация аналогичная 13-му(алгоритм создания листов тот же, что и выше у меня в последнем видео,  запуск кода выключает вьюпорты). MGDDBG показывает,  то же что и вас в последнем видео. Завтра постараюсь записать с работы видео. 

Оффлайн pavka_97

  • ADN OPEN
  • ***
  • Сообщений: 150
  • Карма: 3
Re: Turned Off All Viewport
« Ответ #75 : 23-09-2020, 18:23:11 »
Вот что у меня получилось  в Autocad 2021eng x64 Windows7: наличие трех layout, два раза сохранить/закрыть, изменить количество vp в одной из вкладок, не переключаться во второй сессии по вкладкам, запустить код c методом layout.Initialize().


 
но... в 2021 такой алгоритм выключает vp не во всех 100% случаев. в 16 и 20 кадах  близок к 100%. детально тестировать не было времени. надеюсь видео покажет что собственно я имею ввиду

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Turned Off All Viewport
« Ответ #76 : 23-09-2020, 20:31:14 »
pavka_97,
Мне кажется что ты нашел баг, но не тот, о котором говоришь. То что ты видишь - это следствие, а не причина. Причина в том, что после сохранения dwg-файла и повторного его открытия Layout.GetViewports возвращает пустой список для неактивного листа.
Это хорошо видно на этом видео:



В общем чтобы его обойти придётся таки переключаться на нужный лист, а затем уже проверять Layout.GetViewports
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Turned Off All Viewport
« Ответ #77 : 23-09-2020, 20:46:04 »
Я отправил в ADN DevHelp эту информацию. Если это баг, то есть шанс, что будет исправлено в следующей версии. В противном случае надеюсь на их корректное объяснение такого поведения.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн pavka_97

  • ADN OPEN
  • ***
  • Сообщений: 150
  • Карма: 3
Re: Turned Off All Viewport
« Ответ #78 : 23-09-2020, 21:24:06 »
Layout.GetViewports возвращает пустой список для неактивного листа.

В самом деле. Я забыл что до initialize был похожий результат  .я решил что это нормально, просто не проинициализировал. А потом зациклился на initialize.


придётся таки переключаться на нужный лист, а затем уже проверять Layout.GetViewports

Именно поэтому я и полез во все это,чтобы избежать переключений.

Оффлайн pavka_97

  • ADN OPEN
  • ***
  • Сообщений: 150
  • Карма: 3
Re: Turned Off All Viewport
« Ответ #79 : 23-09-2020, 22:19:41 »
Не грузится mgd...(:
загрузилось. некоторые файлы, не все, но самые нужные, были заблокированы.
Off-Topic: показать

узнал об этом, прочитав соответствующую тему:). а перед этим посносил автокады, студию. поигрался с фреймворками, uac, сертификатами и прочими обновлениями. веселился как мог вобщем. ну хоть комп теперь почище стал.:)

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Turned Off All Viewport
« Ответ #80 : 23-09-2020, 22:23:12 »
узнал об этом, прочитав соответствующую тему:).
Сочувствую. Но теперь думаю, что надолго это запомнишь. Кстати, тоже самое касается не только dll, но и arx/dbx/crx и т.д.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн pavka_97

  • ADN OPEN
  • ***
  • Сообщений: 150
  • Карма: 3
Re: Turned Off All Viewport
« Ответ #81 : 23-09-2020, 22:41:12 »
надолго это запомнишь
Off-Topic: показать

о, да. иногда читать по теме и документацию полезно.. но я вчера что то выбился из сил, да и  грешил на загаженность компьютора.


В связи с вышеобозначенной ситуацией, если не использовать layout.GetVieports и проходить обычным циклом по пространству листа, первый попавшийся id vieport-а, это 0-й vp и далее следущие попадающиеся vp, совпадают с vp.Number или не факт?

 

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Turned Off All Viewport
« Ответ #82 : 23-09-2020, 22:43:25 »
В связи с вышеобозначенной ситуацией, если не использовать layout.GetVieports и проходить обычным циклом по пространству листа, первый попавшийся id vieport-а, это 0-й vp и далее следущие попадающиеся vp, совпадают с vp.Number или не факт?
Увы, но это не факт.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн pavka_97

  • ADN OPEN
  • ***
  • Сообщений: 150
  • Карма: 3
Re: Turned Off All Viewport
« Ответ #83 : 23-09-2020, 22:45:58 »
То есть номер viewport -а без layout.GetViewports никак не получить? 

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Turned Off All Viewport
« Ответ #84 : 23-09-2020, 22:49:55 »
То есть номер viewport -а без layout.GetViewports никак не получить? 
Фактически номер у него возникает только тогда, когда Layout становится активным:



Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн pavka_97

  • ADN OPEN
  • ***
  • Сообщений: 150
  • Карма: 3
Re: Turned Off All Viewport
« Ответ #85 : 23-09-2020, 23:03:07 »
номер у него возникает только тогда, когда Layout становится активным

да, это я читал, разочаровался и надеялся, что время и порядок создания objectid vp-та, будет равно vp number.

Я еще один вопрос тут задам, если решите что нужна новая тема, то создам.

Мне нужно добраться до конкретных -vp.
Я вижу два варианта:
1. через его номер,cоответственно переключаясь во вкладки
2. через его ранее сохраненный в другой сессии handle. GetObjectId(..., handle,...)

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

Какой способ будет предпочтительней при прочих равных? Насколько быстро ищет по базе handle's?


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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Turned Off All Viewport
« Ответ #86 : 23-09-2020, 23:05:19 »
Какой способ будет предпочтительней при прочих равных?
Handle
Насколько быстро ищет по базе handle's?
Практически моментально. Только лучше вместо GetObjectId использовать метод TryGetObjectId. Это обсуждалось у нас на форуме.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн pavka_97

  • ADN OPEN
  • ***
  • Сообщений: 150
  • Карма: 3
Re: Turned Off All Viewport
« Ответ #87 : 23-09-2020, 23:10:50 »
Это обсуждалось у нас на форуме
Ага, мелькало где то.
Спасибо, буду пробовать.

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Turned Off All Viewport
« Ответ #88 : 29-09-2020, 15:14:50 »
В ADN DevHelp мне подтвердили, что Layout.GetViewports возвращает непустой список Viewport'ов только если этот лист был или активирован или инициализирован в текущей сессии AutoCAD, так как этот список не сохраняется в чертеже при его сохранении, а вычисляется при активации листа или его инициализации.
Для неактивного листа рекомендуют при помощи Database.GetViewports(true) получить все Viewport'ы листов чертежа, затем используя для них метод OwnerId получить BlockTableRecord листа, которому они принадлежат, а затем по свойству LayoutId получить и сам лист. Таким образом можно найти все Viewport'ы конкретного листа без использования Layout.GetViewports.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн pavka_97

  • ADN OPEN
  • ***
  • Сообщений: 150
  • Карма: 3
Re: Turned Off All Viewport
« Ответ #89 : 01-10-2020, 18:18:08 »
ADN DevHelp спасибо за новый для меня метод (Database.GetViewports(true)), но каким образом получить из коллекции вьюпортов конкретного листа, к примеру, 0-й вьюпорт этого листа? Он ведь не факт, что первый в коллекции? Или его ObjectId можно чему-то сопоставить/приравнять?

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Turned Off All Viewport
« Ответ #90 : 01-10-2020, 21:05:15 »
Он ведь не факт, что первый в коллекции?
Не 100% факт, но можно поэкспериментировать.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Turned Off All Viewport
« Ответ #92 : 08-10-2020, 14:42:57 »
Не 100% факт
Хм... https://adn-cis.org/forum/index.php?topic=228.msg415#msg415
Дима. Ты не прочитал всю эту тему. В данном случае идёт речь о том, что Layout.GetViewports возвращает пустой массив, хотя Layout был инициализирован, чертеж был сохранён и открыт повторно. Этот массив не пустой только если Layout был инициализирован в этой сессии AutoCAD или на него в этой сессии AutoCAD переключались.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: Turned Off All Viewport
« Ответ #93 : 08-10-2020, 14:54:52 »
Возможно да, не так понял. Но вроде как спрашивали именно про это... Ну да ладно, вопрошающий сам разберётся  :)

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Turned Off All Viewport
« Ответ #94 : 08-10-2020, 15:07:37 »
Возможно да, не так понял. Но вроде как спрашивали именно про это... Ну да ладно, вопрошающий сам разберётся  :)
Тем не менее почитай тему внимательно. Ответ от ADN DevHelp меня сильно удивил. Я был уверен, что если вызвано Layout.Initialize() или было хотя-бы переключение на этот лист, то после сохранения чертежа, его повторного открытия и  вызова Layout.GetViewports() возвращает не пустой массив и мы всегда сможем определить главный Viewport.  Оказалось, что это не так.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • *****
  • Сообщений: 534
  • Карма: 117
Re: Turned Off All Viewport
« Ответ #95 : 08-10-2020, 15:36:58 »
каким образом получить из коллекции вьюпортов конкретного листа, к примеру, 0-й вьюпорт этого листа? Он ведь не факт, что первый в коллекции? Или его ObjectId можно чему-то сопоставить/приравнять?

Если лист создавался нормально, т.е. был создан, сделан текущим  и инициализирован, то :
1. Если лист активный
1.1 получаешь Database.GetViewports(true) и берешь первый лист
1.2 получаешь BlockTableRecordId, получаешгь блок листа (BlockTableRecord) находишь все Viewport, берешь с Viewport.Number==1 (1....n)

2. Если лист не активный, то делаешь по пункту 1.2, только Viewport.Number будет -1 у всех видовых экранов, поэтому сортируешь по Id и берешь первый в списке.

Если создание листов было не в "правильном порядке", нужно экспериментировать.
Возможно у листа отсутствует Layout, если лист не был инициализирован.
Либо 0й Viewport создавался последним, но при этом важно проверить, что будет после сохранения, закрытия/открытия чертежа. Возможно AutoCAD "заберет" первый Viewport?

Оффлайн pavka_97

  • ADN OPEN
  • ***
  • Сообщений: 150
  • Карма: 3
Re: Turned Off All Viewport
« Ответ #96 : 08-10-2020, 15:49:10 »
Активные листы не обсуждаем, тут и так понятно.
Насчет неактивных: если листы "правильные" (которые создавались классическими способами,без использовались сторонних программ и плагинов, а также без удаления 0х вьюпортов, которые автокад потом пересоздает - это вроде в ранних версиях только) то у меня простым перебором в пространстве листа главный vp всегда идет первым в коллекции. Детально не эксперементировал.

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Turned Off All Viewport
« Ответ #97 : 08-10-2020, 15:51:40 »
1. Если лист активный
1.1 получаешь Database.GetViewports(true) и берешь первый лист
1.2 получаешь BlockTableRecordId, получаешгь блок листа (BlockTableRecord) находишь все Viewport, берешь с Viewport.Number==1 (1....n)
Если лист активный, то достаточно  Layout.GetViewports() и взять первый Viewport - это будет однозначно быстрее, так как AutoCAD уже сам проанализировал лист, нашел все его Viewport'ы и определил какой из них главный.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Turned Off All Viewport
« Ответ #98 : 08-10-2020, 15:53:05 »
Возможно у листа отсутствует Layout, если лист не был инициализирован.
А вот это как??? Лист == Layout. 
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • *****
  • Сообщений: 534
  • Карма: 117
Re: Turned Off All Viewport
« Ответ #99 : 08-10-2020, 16:02:28 »
А вот это как??? Лист == Layout. 
Прошу прощения, написал не правильно. Имел ввиду такой сценарий:
Предполагаю, что можно склонировать блок листа в чертеж, и при этом не появиться запись(Layout) в NOD/ACAD_LAYOUT.
Если получать пространство "неправильного" листа перебором в BlockTable, то вполне можно получить блок с именем Name="*Paper_Space3", при этом IsLayout и LayoutId будут не верными.

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Turned Off All Viewport
« Ответ #100 : 08-10-2020, 16:08:00 »
Предполагаю, что можно склонировать блок листа в чертеж, и при этом не появиться запись(Layout) в NOD/ACAD_LAYOUT.
Это только если всё это делать незаконными методами. LayoutManager.CloneLayout клонирует правильно Layout, LayoutManager.DeleteLayout его правильно удаляет.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение