Лишний viewport

Автор Тема: Лишний viewport  (Прочитано 5230 раз)

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

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

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1
Лишний viewport
« : 24-06-2023, 00:39:06 »
Здравствуйте!
Столкнулся с непоняткой - метод layout.GetViewports() для листа в котором гарантированно один viewport показывает что их два. В остальных листах чертежа также два. Как это так? Это глюк или у этого метода особая логика работы?
Код - C# [Выбрать]
  1.  public static int CreLayoutsList()
  2.         {
  3.             Document doc = Application.DocumentManager.MdiActiveDocument;
  4.             Database db = doc.Database;
  5.             List<ObjectId> layouts = new List<ObjectId>();
  6.             // Get the layout and plot settings of the named pagesetup
  7.             using (Transaction tr = db.TransactionManager.StartTransaction())
  8.             {
  9.                 DBDictionary layoutDic = tr.GetObject(db.LayoutDictionaryId, OpenMode.ForRead, false) as DBDictionary;
  10.  
  11.                 if (layoutDic != null)
  12.                 {
  13.                     foreach (DBDictionaryEntry entry in layoutDic)
  14.  
  15.                     {
  16.                         ObjectId layoutId = entry.Value;
  17.  
  18.                         Layout layout = tr.GetObject(layoutId, OpenMode.ForWrite, false, true) as Layout;
  19.                         if (layout.LayoutName.Contains("Лист"))
  20.                         {
  21.                             ObjectIdCollection viewPorts = layout.GetViewports();
  22.                             foreach (ObjectId viewPort in viewPorts)
  23.                             {
  24.                                 Viewport viP = tr.GetObject(viewPort, OpenMode.ForWrite, false, true) as Viewport;
  25.                                 if (viP != null)
  26.                                 {
  27.                                    
  28.                                     Matrix2d displacement = Matrix2d.Displacement(-viP.ViewCenter.GetVectorTo(Point2d.Origin));
  29.                                     Point2d newPoint3d = viP.ViewCenter.TransformBy(displacement);
  30.                                     viP.ViewCenter = newPoint3d;
  31.                                  
  32.                                 }
  33.  
  34.                             }
  35.  
  36.                         }
  37.                     }
  38.                 }
  39.             }
  40.  
  41.             return layouts.Count;
  42.         }

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

  • ADN Club
  • *****
  • Сообщений: 546
  • Карма: 119
Re: Лишний viewport
« Ответ #1 : 26-06-2023, 07:32:40 »
Это глюк или у этого метода особая логика работы?
Это норм. У каждого листа должен быть один Viewport - "главный Viewport".
Соответственно, чтобы получить нужные Viewport, получай их с помощью layout.GetViewports() и пропускай первый.

Если ты программно удалишь "главный Viewport" на листе, и зайдешь на лист,то AutoCAD вновь создаст его.

Оффлайн D_TRex

  • ADN OPEN
  • ***
  • Сообщений: 104
  • Карма: 0
Re: Лишний viewport
« Ответ #2 : 26-06-2023, 10:43:30 »
Здравствуйте, такая же проблема, два Viewporta более того удаление и обращение ко второму номеру работает только к вновь создаваемому листу, если это пользовательский шаблон то видовой экран может быть в любой позиции.

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

  • ADN Club
  • *****
  • Сообщений: 624
  • Карма: 158
    • ПГСу Бложик
Re: Лишний viewport
« Ответ #3 : 26-06-2023, 18:40:08 »
Тем по поводу "лишних" видовых портов на форуме достаточно,
почитайте  вот тут: https://adn-cis.org/forum/index.php?topic=228.0
и вот тут тема по поводу впортров и листов: https://adn-cis.org/forum/index.php?topic=9050.0