Adding a View (viewTableRecord) to Paper Space Layout

Adding a View (viewTableRecord) to Paper Space Layout

MarkSanchezSPEC
Advocate Advocate
2,642 Views
5 Replies
Message 1 of 6

Adding a View (viewTableRecord) to Paper Space Layout

MarkSanchezSPEC
Advocate
Advocate

I have used the following code in a small app to create named views: LINK_TO_Autodesk_Help_Topic

HOWEVER...A user of mine tried running the command while in a paper space layout.  It appears the view still gets created but only within Model Space. 

 

The help DOES SAY that "a default model space view is created", but how would I specify that I want the view to be created within the "current" layout, either Model or Paper space?

 

I tried setting the .OwnerID property of the ViewTableRecord to "doc.CurrentSpaceID" but that did not work - no error either.

0 Likes
Accepted solutions (1)
2,643 Views
5 Replies
Replies (5)
Message 2 of 6

Hallex
Advisor
Advisor
Spoiler
 

See article here

http://adndevblog.typepad.com/autocad/2012/08/create-paper-space-viewports.html

Here is a code very quickly translated on C#:

        [CommandMethod("VW")]
        public void tryCreateViewPort()
        {
            // Only works in paperspace
            Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
            Editor ed = doc.Editor;
            Database db = doc.Database;
            try
            {
                using (Transaction tr = db.TransactionManager.StartTransaction())
                {
                    ObjectId mCurViewportId = ed.ActiveViewportId; 

                    if (mCurViewportId == ObjectId.Null)
                    {
                        ed.WriteMessage("\nCommand only works in paperspace.");

                        return;

                    }

                    Viewport pCurViewport = tr.GetObject(mCurViewportId, OpenMode.ForRead) as Viewport;

                    if (pCurViewport == null)
                    {

                        ed.WriteMessage("\nCannot get active viewport.");

                        return;

                    }

                    if (pCurViewport.Number != 1)
                    {

                        ed.WriteMessage("\nCommand only works in paperspace.");

                        return;

                    }

                    // Ask for the position

                    Point3d pt1; Point3d pt2;

                    pt1 = ed.GetPoint("\nSelect first corner: ").Value;
             
                    pt2 = ed.GetCorner("\nSelect second corner: ", pt1).Value;
       
                    // Ask for the view to use

                    string mViewName;

                    mViewName = ed.GetString("\nEnter name of view to use: ").StringResult;
                
                    // Create new viewport

                    Viewport pViewport = new Viewport();

                    pViewport.Width = Math.Abs(pt2.X - pt1.X);

                    pViewport.Height = Math.Abs(pt2.Y - pt1.Y);

                    pViewport.CenterPoint = new Point3d(

                      pt1.X + (pt2.X - pt1.X) / 2,

                      pt1.Y + (pt2.Y - pt1.Y) / 2,

                      pt1.Z);

                    // Append new viewport to paper space

                    BlockTable pTable;

                    BlockTableRecord pPsBTR;

                    pTable = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForRead);
                    pPsBTR = (BlockTableRecord)tr.GetObject(pTable[BlockTableRecord.PaperSpace], OpenMode.ForWrite);

                    ObjectId mViewPortId = pPsBTR.AppendEntity(pViewport);

                    tr.AddNewlyCreatedDBObject(pViewport, true);
                    pViewport.On = true;
                    pViewport.FastZoomOn = true;

                    pViewport.SetUcs(pViewport.CenterPoint, Vector3d.XAxis, Vector3d.YAxis);
               

                    // Set the view

                    

                    ViewTable pViewTable = (ViewTable)tr.GetObject(db.ViewTableId, OpenMode.ForRead);
                  
                    // initialize the layout

                   // Autodesk.AutoCAD.ApplicationServices.Application.SetSystemVariable("TILEMODE", 0);
                  //  Layout layout = tr.GetObject(pPsBTR.LayoutId, OpenMode.ForWrite) as Layout;
                    //  LayoutManager.Current.CurrentLayout = "Layout2";
                    // layout.Initialize();

                    ViewTableRecord pViewTR;
                    if (pViewTable.Has(mViewName))
                    {
                        pViewTR = (ViewTableRecord)tr.GetObject(pViewTable[mViewName], OpenMode.ForWrite);
                    }
                    else
                    {
                        pViewTR = new ViewTableRecord();
                        pViewTR.Name = mViewName;
                        pViewTR.IsPaperspaceView = true;
                        pViewTable.UpgradeOpen();
                        ObjectId vtId = pViewTable.Add(pViewTR);

                        tr.AddNewlyCreatedDBObject(pViewTR, true);
                    }
                    

                    ed.SetCurrentView(pViewTR);

                    tr.Commit();

                    Autodesk.AutoCAD.ApplicationServices.Application.SetSystemVariable("TILEMODE", 0);
                }
            }
            catch (Autodesk.AutoCAD.Runtime.Exception ex)
            {
                ed.WriteMessage(ex.Message + "\n" + ex.StackTrace);
            }
            finally
            {
            }
        }

 

_____________________________________
C6309D9E0751D165D0934D0621DFF27919
0 Likes
Message 3 of 6

MarkSanchezSPEC
Advocate
Advocate

I really appreciate you taking the time to reply but...

 

Your post and the link refer to a paper space "Viewport" like you do manually with the "MVIEW" command. What I needed to do was create a "View" in paper space like you do manually with the "VIEW" command.

 

Regards

0 Likes
Message 4 of 6

Alexander.Rivilis
Mentor
Mentor

ViewTableRecord.IsPaperspaceView = true can help you

Відповідь корисна? Клікніть на "ВПОДОБАЙКУ" цім повідомленням! | Do you find the posts helpful? "LIKE" these posts!
Находите сообщения полезными? Поставьте "НРАВИТСЯ" этим сообщениям!
На ваше запитання відповіли? Натисніть кнопку "ПРИЙНЯТИ РІШЕННЯ" | Have your question been answered successfully? Click "ACCEPT SOLUTION" button.
На ваш вопрос успешно ответили? Нажмите кнопку "УТВЕРДИТЬ РЕШЕНИЕ"


Alexander Rivilis / Александр Ривилис / Олександр Рівіліс
Programmer & Teacher & Helper / Программист - Учитель - Помощник / Програміст - вчитель - помічник
Facebook | Twitter | LinkedIn
Expert Elite Member

Message 5 of 6

Hallex
Advisor
Advisor
Accepted solution

This is the same in my code:

pViewTR.IsPaperspaceView = true;

 

_____________________________________
C6309D9E0751D165D0934D0621DFF27919
Message 6 of 6

MarkSanchezSPEC
Advocate
Advocate

That was easy!

 

Thank you both Hallex and Alexander!