How to add views on a sheet

How to add views on a sheet

Anonymous
Not applicable
7,404 Views
6 Replies
Message 1 of 7

How to add views on a sheet

Anonymous
Not applicable

Hello all,

I'm trying to create an add-in, where a user will be able to add all selected views on a sheet. I looked at viewports on sheets post on thebuildingcoder. But I wasn't able to find a solution to add views on sheet programmatically (via API). I would like to know, can we achieve this functionality via API? would appreciate any help. 

 

Thank you.

 

Ali Asad

0 Likes
Accepted solutions (1)
7,405 Views
6 Replies
Replies (6)
Message 2 of 7

aignatovich
Advisor
Advisor
Accepted solution

Hi!

 

Look at static Viewport.Create method. Pass document, ids of viewsheet and your view and insertion point in sheet coordinates.

Message 3 of 7

Anonymous
Not applicable

Thank you so much @aignatovich. The solution works 🙂

0 Likes
Message 4 of 7

Anonymous
Not applicable

@aignatovich Is there any way to remove the views from sheets? does API provides any method for it?

0 Likes
Message 5 of 7

aignatovich
Advisor
Advisor

View on sheet is Viewport (or ScheduleSheetInstance for schedule views). Find appropriate viewport on the sheet and delete it (via Document.Delete method)

Message 6 of 7

Anonymous
Not applicable

I see. that makes sense. So, I'll need to find the appropriate viewport that holds the reference of a view ID and sheet ID, thank you again @aignatovich for making sense of this 🙂

0 Likes
Message 7 of 7

Anonymous
Not applicable

@aignatovich I've used your solution to get the appropriate viewport first, delete it and then add the view to the sheet by using the following code. but the solution didn't work for me. because The CanAddViewToSheet() method in the following code returns false. 

 

Would appreciate if you look at it, and share your thoughts on how can I add views on sheet. Thank you

 

 

 

 

        public static void MoveViewOnSheet(View view, Sheet sheet, Document doc)
        {
            var revitView = doc.GetElement(view.ElementID) as ViewPlan;
            var revitSheet = doc.GetElement(sheet.ElementID) as ViewSheet;


            // Get all viewports
            foreach (Viewport vp in (new FilteredElementCollector(doc).OfClass(typeof(Viewport))))
            {
                // Get those viewport which matches the viewid
                if (vp.ViewId.ToString().Contains(revitView.Id.ToString()))
                {
                    // Delete the viewport
                    using (Transaction transaction = new Transaction(doc, "Remove viewport"))
                    {
                        
                            transaction.Start();
                             doc.Delete(vp.Id);
                            transaction.Commit();


                    }
                }
            }


            // Map the view on sheet
            using (Transaction transaction = new Transaction(doc, "Mapping views on sheet"))
            {
                
                if (Viewport.CanAddViewToSheet(doc, revitSheet.Id, revitView.Id))
                {

                    transaction.Start();
                    Viewport.Create(doc, revitSheet.Id, revitView.Id, XYZ.Zero);
                    transaction.Commit();

                }

            }
        }

 

0 Likes