eNullObjectPointer

Автор Тема: eNullObjectPointer  (Прочитано 7336 раз)

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

Оффлайн Андрей БушманАвтор темы

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
eNullObjectPointer
« : 09-07-2016, 14:39:19 »
AutoCAD 2009-2016 x64 Enu (со всеми SP).

Пользователи хотят иметь возможность быстро находить объекты, с которых экземпляры Field считывают информацию.

При попытке установить вид на нужный Entity получаю ошибку eNullObjectPointer. В комментах маркерами EXCEPTION помечены два проблемных места (на конкретном документе вылезает ещё и eNullExtents). На скринах показан способ получения пользователем ObjectId интересующего его объекта, после чего показан консольный вывод приложения для конкретного DWG-файла, выложить который не могу, но во вложении имеется специально созданный пример DWG, демонстрирующий проблему с eNullObjectPointer.
Код - C# [Выбрать]
  1. /* ObjSearch
  2.  * Commands.cs
  3.  * © Andrey Bushman, 2016
  4.  *
  5.  * Searching the AutoCAD database entities through their
  6.  * ObjectId values.
  7.  */
  8. using System;
  9. using System.Collections.Generic;
  10. using System.Linq;
  11. using System.Text;
  12.  
  13. using cad = Autodesk.AutoCAD.ApplicationServices.Application;
  14. using Autodesk.AutoCAD.ApplicationServices;
  15. using Autodesk.AutoCAD.DatabaseServices;
  16. using Autodesk.AutoCAD.EditorInput;
  17. using Autodesk.AutoCAD.Runtime;
  18. using Autodesk.AutoCAD.Geometry;
  19.  
  20. [assembly: CommandClass(typeof(Bushman.AutoCAD
  21.     .DatabaseServices.ObjSearch.Commands))]
  22.  
  23. namespace Bushman.AutoCAD.DatabaseServices.ObjSearch {
  24.  
  25.     public sealed class Commands {
  26.  
  27.         const string cmd_group = "bushman";
  28.  
  29.         /// <summary>
  30.         /// Find and zoom the Entity item by its ObjectId value
  31.         /// </summary>
  32.         [CommandMethod(cmd_group, "FindEntity", CommandFlags
  33.             .Modal)]
  34.         public void FindEntity() {
  35.  
  36.             Document doc = cad.DocumentManager
  37.                 .MdiActiveDocument;
  38.  
  39.             if (doc == null) return;
  40.  
  41.             Editor ed = doc.Editor;
  42.             Database db = doc.Database;
  43.  
  44.             using (doc.LockDocument()) {
  45.  
  46.                 /* just in case... */
  47.                 db.UpdateExt(true);
  48.  
  49.                 PromptResult pr = ed.GetString(
  50.                     "\nEnter ObjectId: ");
  51.  
  52.                 if (pr.Status != PromptStatus.OK) return;
  53.  
  54.                 // Convert hexadecimal string to 64-bit integer
  55.                 long ln = Convert.ToInt64(pr.StringResult);
  56.  
  57.                 ObjectId id = StaticMethods.GetEntityIds(db,
  58.                     (n) => n.OldIdPtr.ToInt64() == ln)
  59.                     .FirstOrDefault();
  60.  
  61.                 Extents3d ext;
  62.  
  63.                 using (Transaction tr = db.TransactionManager
  64.                     .StartTransaction()) {
  65.  
  66.                     Entity ent = (Entity) tr.GetObject(id,
  67.                         OpenMode.ForRead);
  68.  
  69.                     ext = ent.GeometricExtents;
  70.  
  71.                     ext.TransformBy(ed
  72.                         .CurrentUserCoordinateSystem.Inverse())
  73.                         ;
  74.  
  75.                     double x = (ext.MaxPoint.X - ext.MinPoint.X
  76.                         ) / 2.0 + ext.MinPoint.X;
  77.  
  78.                     double y = (ext.MaxPoint.Y - ext.MinPoint.Y
  79.                         ) / 2.0 + ext.MinPoint.Y;
  80.  
  81.                     double z = (ext.MaxPoint.Z - ext.MinPoint.Z
  82.                         ) / 2.0 + ext.MinPoint.Z;
  83.  
  84.                     Point3d point = new Point3d(x, y, z);
  85.  
  86.                     ed.WriteMessage("Entity type: {0}\n"
  87.                         , ent.GetType().ToString());
  88.  
  89.                     ed.WriteMessage("Entity coordinates: {0}\n"
  90.                         , point.ToString());
  91.  
  92.                     BlockTableRecord btr = tr.GetObject(
  93.                         ent.BlockId, OpenMode.ForRead) as
  94.                         BlockTableRecord;
  95.  
  96.                     if (btr.IsLayout) {
  97.  
  98.                         Layout layout = tr.GetObject(btr
  99.                             .LayoutId, OpenMode.ForRead) as
  100.                             Layout;
  101.  
  102.                         if (LayoutManager.Current.CurrentLayout
  103.                             != layout.LayoutName) {
  104.  
  105.                             LayoutManager.Current.CurrentLayout
  106.                                 = layout.LayoutName;
  107.                         }
  108.  
  109.                         ed.WriteMessage("The entity is " +
  110.                             "located on the '{0}' layout.\n\n",
  111.                             layout.LayoutName);
  112.  
  113.                         if (!db.TileMode) {
  114.                             /* Main paper space area Viewport
  115.                              * ObjectId.
  116.                              *
  117.                              * # Note: First ObjectId from
  118.                              * GetViewports() is the main paper
  119.                              * space area Viewport ObjectId.*/
  120.                             ObjectId mainPSpaceVportId = layout
  121.                                 .GetViewports()[0];
  122.  
  123.                             /* Create Extents3d based on
  124.                              * BlockTableRecord entities.
  125.                              *
  126.                              * # Note: Exclude main paper space
  127.                              * viewport ObjectId. */
  128.                             Extents3d extents = new Extents3d()
  129.                                 ;
  130.                             foreach (ObjectId _id in btr) {
  131.                                 if (_id != mainPSpaceVportId) {
  132.                                     Entity _ent = tr.GetObject(
  133.                                         _id, OpenMode.ForRead)
  134.                                         as Entity;
  135.  
  136.                                     if (_ent != null) {
  137.                                         try {
  138.                                             /* EXCEPTION:
  139.                                              * Here I get the
  140.                                              * 'eNullExtents'
  141.                                              * errors for
  142.                                              * 'BlockReference'
  143.                                              * instances. */
  144.                                             extents.AddExtents(
  145.                                                 _ent
  146.                                                 .GeometricExtents
  147.                                                 );
  148.                                         }
  149.                                         catch (System.Exception
  150.                                             ex) {
  151.  
  152.                                             ed.WriteMessage(
  153.                                                 "{0} item. " +
  154.                                                 "Error: {1}\n",
  155.                                                 _ent.GetType()
  156.                                                 .ToString(),
  157.                                                 ex.Message);
  158.                                         }
  159.                                     }
  160.                                 }
  161.                             }
  162.                             /* Create Extents3d based on paper
  163.                              * space layout limits. */
  164.                             Extents3d limits = new Extents3d(
  165.                                  new Point3d(layout.Limits
  166.                                      .MinPoint.X, layout.Limits
  167.                                      .MinPoint.Y, 0),
  168.                                      new Point3d(layout.Limits
  169.                                          .MaxPoint.X, layout
  170.                                          .Limits.MaxPoint.Y, 0)
  171.                                          );
  172.  
  173.                             extents.AddExtents(limits);
  174.  
  175.                             // Update Pextmin and Pextmax.
  176.                             db.Pextmin = extents.MinPoint;
  177.                             db.Pextmax = extents.MaxPoint;
  178.                         }
  179.                     }
  180.                     else if (btr.IsAnonymous) {
  181.                         ed.WriteMessage("The entity is located"
  182.                         + " in the '{0}' anonymous block.\n\n",
  183.                             btr.Name);
  184.                     }
  185.                     else if (btr.IsAProxy) {
  186.                         ed.WriteMessage("The entity is located"
  187.                         + " in the '{0}' proxy block.\n\n",
  188.                             btr.Name);
  189.                     }
  190.                     else if (btr.IsDynamicBlock) {
  191.                         ed.WriteMessage("The entity is located"
  192.                         + " in the '{0}' dynamuc block.\n\n",
  193.                             btr.Name);
  194.                     }
  195.  
  196.                     tr.Commit();
  197.                 }
  198.  
  199.                 PrintExtends(db.Extmin, db.Extmax, db.Pextmin,
  200.                     db.Pextmax);
  201.  
  202.                 try {
  203.                     /* EXCEPTION: Here I get the
  204.                      * 'eNullObjectPointer' error.
  205.                      *
  206.                      * I looked these resources also:
  207.                      *
  208.                      * http://adndevblog.typepad.com/autocad/2012/08/incorrect-extmin-extmax-values-for-a-drawing.html
  209.                      *
  210.                      * http://forums.autodesk.com/t5/net/drawing-extents-in-paperspace/m-p/3178638#M25435
  211.                      *
  212.                      * but they didn't help me...
  213.                      */
  214.                     ZoomWin(ed, ext.MinPoint, ext.MaxPoint);
  215.                 }
  216.                 catch (System.Exception ex) {
  217.                     ed.WriteMessage("{0}\n", ex.Message
  218.                         );
  219.                 }
  220.             }
  221.         }
  222.  
  223.         private void PrintExtends(Point3d extmin, Point3d
  224.             extmax, Point3d pextmin, Point3d pextmax) {
  225.  
  226.             Document doc = cad.DocumentManager
  227.                 .MdiActiveDocument;
  228.  
  229.             if (doc == null) return;
  230.  
  231.             Editor ed = cad.DocumentManager.MdiActiveDocument
  232.                 .Editor;
  233.  
  234.             ed.WriteMessage("\nEXTMIN: {0}\n", extmin);
  235.             ed.WriteMessage("EXTMAX: {0}\n\n", extmax);
  236.  
  237.             ed.WriteMessage("PEXTMIN: {0}\n", pextmin);
  238.             ed.WriteMessage("PEXTMAX: {0}\n\n", pextmax);
  239.         }
  240.  
  241.         private static void ZoomWin(Editor ed, Point3d min,
  242.             Point3d max) {
  243.  
  244.             Point2d min2d = new Point2d(min.X, min.Y);
  245.             Point2d max2d = new Point2d(max.X, max.Y);
  246.             ViewTableRecord view = new ViewTableRecord();
  247.  
  248.             view.CenterPoint = min2d + ((max2d - min2d) / 2.0);
  249.             view.Height = max2d.Y - min2d.Y;
  250.             view.Width = max2d.X - min2d.X;
  251.  
  252.             ed.SetCurrentView(view);
  253.         }
  254.     }
  255. }

На простом DWG-примере, имеющемся во вложении, воспроизводится только ошибка eNullObjectPointer (собственно меня сейчас именно она интересует).

Как избавиться от eNullObjectPointer?

Оффлайн Андрей БушманАвтор темы

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: eNullObjectPointer
« Ответ #1 : 09-07-2016, 15:19:37 »
Код метода ZoomWin был скопирован отсюда.

На всякий случай попробовал модифицировать указанный выше вариант кода - экземпляр ViewTableRecord предварительно добавляю в ViewTable:
Код - C# [Выбрать]
  1. private static void ZoomWin(Editor ed, Point3d min,
  2.     Point3d max) {
  3.  
  4.     Point2d min2d = new Point2d(min.X, min.Y);
  5.     Point2d max2d = new Point2d(max.X, max.Y);
  6.  
  7.     Database db = cad.DocumentManager.MdiActiveDocument
  8.         .Database;
  9.  
  10.     using (Transaction tr = db.TransactionManager
  11.         .StartTransaction()) {
  12.  
  13.         ViewTable vt = tr.GetObject(db.ViewTableId,
  14.                 OpenMode.ForWrite) as ViewTable;
  15.  
  16.         ViewTableRecord view = new ViewTableRecord();
  17.  
  18.         view.CenterPoint = min2d + ((max2d - min2d) /
  19.             2.0);
  20.  
  21.         view.Height = max2d.Y - min2d.Y;
  22.         view.Width = max2d.X - min2d.X;
  23.  
  24.         vt.Add(view);
  25.         tr.AddNewlyCreatedDBObject(view, true);
  26.  
  27.         ed.SetCurrentView(view);
  28.  
  29.         tr.Commit();
  30.     }
  31. }

Однако по прежнему получаю eNullObjectPointer.

Отмечено как Решение Андрей Бушман 09-07-2016, 17:20:51

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: eNullObjectPointer
« Ответ #2 : 09-07-2016, 16:50:56 »
Код - C# [Выбрать]
  1. /* ObjSearch
  2.      * Commands.cs
  3.      * © Andrey Bushman, 2016
  4.      *
  5.      * Searching the AutoCAD database entities through their
  6.      * ObjectId values.
  7.      */
  8. using System;
  9. using System.Collections.Generic;
  10. using System.Linq;
  11. using System.Text;
  12.  
  13. using cad = Autodesk.AutoCAD.ApplicationServices.Application;
  14. using Autodesk.AutoCAD.ApplicationServices;
  15. using Autodesk.AutoCAD.DatabaseServices;
  16. using Autodesk.AutoCAD.EditorInput;
  17. using Autodesk.AutoCAD.Runtime;
  18. using Autodesk.AutoCAD.Geometry;
  19.  
  20. [assembly: CommandClass(typeof(Bushman.AutoCAD
  21.     .DatabaseServices.ObjSearch.Commands))]
  22.  
  23. namespace Bushman.AutoCAD.DatabaseServices.ObjSearch
  24. {
  25.  
  26.   public sealed class Commands
  27.   {
  28.  
  29.     const string cmd_group = "bushman";
  30.  
  31.     /// <summary>
  32.     /// Find and zoom the Entity item by its ObjectId value
  33.     /// </summary>
  34.     [CommandMethod(cmd_group, "FindEntity", CommandFlags
  35.         .Modal)]
  36.     public void FindEntity()
  37.     {
  38.  
  39.       Document doc = cad.DocumentManager
  40.           .MdiActiveDocument;
  41.  
  42.       if (doc == null) return;
  43.  
  44.       Editor ed = doc.Editor;
  45.       Database db = doc.Database;
  46.  
  47.       using (doc.LockDocument())
  48.       {
  49.  
  50.         /* just in case... */
  51.         db.UpdateExt(true);
  52.  
  53.         PromptResult pr = ed.GetString(
  54.             "\nEnter ObjectId: ");
  55.  
  56.         if (pr.Status != PromptStatus.OK) return;
  57.  
  58.         // Convert hexadecimal string to 64-bit integer
  59.         long ln = Convert.ToInt64(pr.StringResult);
  60.  
  61. //        ObjectId id = StaticMethods.GetEntityIds(db,
  62. //            (n) => n.OldIdPtr.ToInt64() == ln)
  63. //            .FirstOrDefault();
  64.         ObjectId id = new ObjectId(new IntPtr(ln));
  65.         bool isPaperSpace = false;
  66.  
  67.         Extents3d ext;
  68.  
  69.         using (Transaction tr = db.TransactionManager
  70.             .StartTransaction())
  71.         {
  72.  
  73.           Entity ent = (Entity)tr.GetObject(id,
  74.               OpenMode.ForRead);
  75.  
  76.           ext = ent.GeometricExtents;
  77.  
  78.           ext.TransformBy(ed
  79.               .CurrentUserCoordinateSystem.Inverse())
  80.               ;
  81.  
  82.           double x = (ext.MaxPoint.X - ext.MinPoint.X
  83.               ) / 2.0 + ext.MinPoint.X;
  84.  
  85.           double y = (ext.MaxPoint.Y - ext.MinPoint.Y
  86.               ) / 2.0 + ext.MinPoint.Y;
  87.  
  88.           double z = (ext.MaxPoint.Z - ext.MinPoint.Z
  89.               ) / 2.0 + ext.MinPoint.Z;
  90.  
  91.           Point3d point = new Point3d(x, y, z);
  92.  
  93.           ed.WriteMessage("Entity type: {0}\n"
  94.               , ent.GetType().ToString());
  95.  
  96.           ed.WriteMessage("Entity coordinates: {0}\n"
  97.               , point.ToString());
  98.  
  99.           BlockTableRecord btr = tr.GetObject(
  100.               ent.BlockId, OpenMode.ForRead) as
  101.               BlockTableRecord;
  102.  
  103.           if (btr.IsLayout)
  104.           {
  105.  
  106.             Layout layout = tr.GetObject(btr
  107.                 .LayoutId, OpenMode.ForRead) as
  108.                 Layout;
  109.  
  110.             if (LayoutManager.Current.CurrentLayout
  111.                 != layout.LayoutName)
  112.             {
  113.  
  114.               LayoutManager.Current.CurrentLayout
  115.                   = layout.LayoutName;
  116.             }
  117.  
  118.             ed.WriteMessage("The entity is " +
  119.                 "located on the '{0}' layout.\n\n",
  120.                 layout.LayoutName);
  121.  
  122.             isPaperSpace = true;
  123.  
  124.             if (!db.TileMode)
  125.             {
  126.               /* Main paper space area Viewport
  127.                * ObjectId.
  128.                *
  129.                * # Note: First ObjectId from
  130.                * GetViewports() is the main paper
  131.                * space area Viewport ObjectId.*/
  132.               ObjectId mainPSpaceVportId = layout
  133.                   .GetViewports()[0];
  134.  
  135.               /* Create Extents3d based on
  136.                * BlockTableRecord entities.
  137.                *
  138.                * # Note: Exclude main paper space
  139.                * viewport ObjectId. */
  140.               Extents3d extents = new Extents3d()
  141.                   ;
  142.               foreach (ObjectId _id in btr)
  143.               {
  144.                 if (_id != mainPSpaceVportId)
  145.                 {
  146.                   Entity _ent = tr.GetObject(
  147.                       _id, OpenMode.ForRead)
  148.                       as Entity;
  149.  
  150.                   if (_ent != null)
  151.                   {
  152.                     try
  153.                     {
  154.                       /* EXCEPTION:
  155.                        * Here I get the
  156.                        * 'eNullExtents'
  157.                        * errors for
  158.                        * 'BlockReference'
  159.                        * instances. */
  160.                       extents.AddExtents(
  161.                           _ent
  162.                           .GeometricExtents
  163.                           );
  164.                     }
  165.                     catch (System.Exception
  166.                         ex)
  167.                     {
  168.  
  169.                       ed.WriteMessage(
  170.                           "{0} item. " +
  171.                           "Error: {1}\n",
  172.                           _ent.GetType()
  173.                           .ToString(),
  174.                           ex.Message);
  175.                     }
  176.                   }
  177.                 }
  178.               }
  179.               /* Create Extents3d based on paper
  180.                * space layout limits. */
  181.               Extents3d limits = new Extents3d(
  182.                    new Point3d(layout.Limits
  183.                        .MinPoint.X, layout.Limits
  184.                        .MinPoint.Y, 0),
  185.                        new Point3d(layout.Limits
  186.                            .MaxPoint.X, layout
  187.                            .Limits.MaxPoint.Y, 0)
  188.                            );
  189.  
  190.               extents.AddExtents(limits);
  191.  
  192.               // Update Pextmin and Pextmax.
  193.               db.Pextmin = extents.MinPoint;
  194.               db.Pextmax = extents.MaxPoint;
  195.             }
  196.           }
  197.           else if (btr.IsAnonymous)
  198.           {
  199.             ed.WriteMessage("The entity is located"
  200.             + " in the '{0}' anonymous block.\n\n",
  201.                 btr.Name);
  202.           }
  203.           else if (btr.IsAProxy)
  204.           {
  205.             ed.WriteMessage("The entity is located"
  206.             + " in the '{0}' proxy block.\n\n",
  207.                 btr.Name);
  208.           }
  209.           else if (btr.IsDynamicBlock)
  210.           {
  211.             ed.WriteMessage("The entity is located"
  212.             + " in the '{0}' dynamic block.\n\n",
  213.                 btr.Name);
  214.           }
  215.  
  216.           tr.Commit();
  217.         }
  218.  
  219.         PrintExtends(db.Extmin, db.Extmax, db.Pextmin,
  220.             db.Pextmax);
  221.  
  222.         try
  223.         {
  224.           /* EXCEPTION: Here I get the
  225.            * 'eNullObjectPointer' error.
  226.            *
  227.            * I looked these resources also:
  228.            *
  229.            * http://adndevblog.typepad.com/autocad/2012/08/incorrect-extmin-extmax-values-for-a-drawing.html
  230.            *
  231.            * http://forums.autodesk.com/t5/net/drawing-extents-in-paperspace/m-p/3178638#M25435
  232.            *
  233.            * but they didn't help me...
  234.            */
  235.           ZoomWinSpace(ed, ext.MinPoint, ext.MaxPoint, isPaperSpace);
  236.         }
  237.         catch (System.Exception ex)
  238.         {
  239.           ed.WriteMessage("{0}\n", ex.Message
  240.               );
  241.         }
  242.       }
  243.     }
  244.  
  245.     private void PrintExtends(Point3d extmin, Point3d
  246.         extmax, Point3d pextmin, Point3d pextmax)
  247.     {
  248.  
  249.       Document doc = cad.DocumentManager
  250.           .MdiActiveDocument;
  251.  
  252.       if (doc == null) return;
  253.  
  254.       Editor ed = cad.DocumentManager.MdiActiveDocument
  255.           .Editor;
  256.  
  257.       ed.WriteMessage("\nEXTMIN: {0}\n", extmin);
  258.       ed.WriteMessage("EXTMAX: {0}\n\n", extmax);
  259.  
  260.       ed.WriteMessage("PEXTMIN: {0}\n", pextmin);
  261.       ed.WriteMessage("PEXTMAX: {0}\n\n", pextmax);
  262.     }
  263.  
  264.     private static void ZoomWinSpace(Editor ed, Point3d min,
  265.         Point3d max, bool isPaperSpace)
  266.     {
  267.  
  268.       Point2d min2d = new Point2d(min.X, min.Y);
  269.       Point2d max2d = new Point2d(max.X, max.Y);
  270.       ViewTableRecord view = new ViewTableRecord();
  271.  
  272.       view.CenterPoint = min2d + ((max2d - min2d) / 2.0);
  273.       view.Height = max2d.Y - min2d.Y;
  274.       view.Width = max2d.X - min2d.X;
  275.  
  276.       view.IsPaperspaceView = isPaperSpace; // !!!
  277.  
  278.       ed.SetCurrentView(view);
  279.     }
  280.   }
  281. }

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

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: eNullObjectPointer
« Ответ #3 : 09-07-2016, 18:54:09 »
Можно еще "упростить" код функции ZoomWin, чтобы она сама понимала в каком пространстве "находится":

Код - C# [Выбрать]
  1. private static void ZoomWin(Editor ed, Point3d min, Point3d max)
  2. {
  3.  
  4.   Point2d min2d = new Point2d(min.X, min.Y);
  5.   Point2d max2d = new Point2d(max.X, max.Y);
  6.   using (ViewTableRecord view = new ViewTableRecord())
  7.   {
  8.     view.CenterPoint = min2d + ((max2d - min2d) / 2.0);
  9.     view.Height = max2d.Y - min2d.Y;
  10.     view.Width = max2d.X - min2d.X;
  11.     Database db = ed.Document.Database;
  12.     view.IsPaperspaceView =
  13.       (!db.TileMode && db.PaperSpaceVportId == ed.CurrentViewportObjectId);
  14.     ed.SetCurrentView(view);
  15.   }
  16. }
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей БушманАвтор темы

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: eNullObjectPointer
« Ответ #4 : 09-07-2016, 21:38:25 »
Спасибо.

По обозначенной выше ссылке (откуда взят метод ZoomWin) я в комментариях сообщил Kean Walmsley об отсутствующей строке кода. Если я верно понял его ответ на моё сообщение, то он предлагает сообщить об этом в ADN или в какую-то группу обсуждения (я не знаю, что это за группа)... Я уже давно не оплачиваю членство в ADN, поэтому сообщить туда не смогу.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: eNullObjectPointer
« Ответ #5 : 09-07-2016, 23:36:43 »
Так как это не баг, а просто факт, что он в своём варианте функции ZoomWin не учел работу в Пространстве Листа, то писать в ADN я не вижу смысла. Я у него на блоге ответил на его ответ на твой комментарий, уточнив ситуацию.
P.S.: Кстати, на сайте ADN нашелся старый код (ObjectARX), который учитывает этот момент и в зависимости от пространства листа или модели устанавливает IsPaperspaceView (точнее его аналог) в нужное значение.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение