Diagram / Diagram DOM / Drawings / Pages / Pages
In This Topic
    Pages
    In This Topic
     About Pages

    Pages are represented by the NPage class. The pages of a drawing are contained inside the Pages collection of each NDrawing element.

    Of all pages inside the drawing only one can be active at a time. The active page is controlled by the ActivePage property of the drawing (NDrawing) or the ActivePage property of the drawing view (NDrawingView), which is a shortcut to the ActivePage property of the drawing. By default each drawing is created with a single page that is at the same time the active page of the drawing. If the drawing has more than one page, the ActivePageIndexChanged event can be used to detect when the user switches to a new page:

    Handle Change of the Active Page
    Copy Code
    NDrawing drawing = drawingView.Content;
    drawing.ActivePageIndexChanged += Drawing_ActivePageIndexChanged;
    
    private static void Drawing_ActivePageIndexChanged(NValueChangeEventArgs arg)
    {
        // Get the index of the new active page
        int activePageIndex = (int)arg.NewValue;
    
        // Get the new active page
        NDrawing drawing = (NDrawing)arg.TargetNode;
        NPage activePage = drawing.ActivePage;
    }
    

    The page is a container element that has the following child items:

    • Items - an instance of the NPageItemColleciton class that contains the items of a page. You typically use the Items collection to insert shapes inside it.
    • Grid - exposes settings related to the page grid.
    • Rulers - exposes settings related to the rulers displayed for the page.
    • Router - controls the routing of the routable connectors inside the page.
    • PrintLayout - control the arrangement of the page inside the print page dimensions.

    Additionally the page contains the currently selected page items inside its Selection attribute.

    The page also has a Width and a Height property, which can be used to set the page size. You can also set the page size for printing by assigning an NPaperSize to the PageSize property of the page's PrintLayout.The code below demonstrates how to size the active page of a drawing to the "Letter" paper size:

    Setting Page Size
    Copy Code
    // Create paper size
    NPaperSize paperSize = new NPaperSize(ENPaperKind.Letter);
    
    // Set page size
    NPage page = drawingView.ActivePage;
    page.Width = paperSize.WidthInDIPs;
    page.Height = paperSize.HeightInDIPs;
    
    // Set page size for printing
    page.PrintLayout.PageSize = paperSize;
    
     Page Navigator

    The drawing view includes a page navigator at the bottom. It lets the user quickly navigate to a different page, add, remove and rename pages.

    If you want to disable adding or removing pages you can use the AllowAdd and AllowRemove properties of the page navigator:

    Disable adding and removing pages via the page navigator
    Copy Code
    drawingView.PageNavigator.AllowAdd = false;
    drawingView.PageNavigator.AllowRemove = false;
    

    To hide the page navigator completely, use the following line of code:

    Hide the page navigator completely
    Copy Code
    drawingView.PageNavigator.Visibility = ENVisibility.Collapsed;
    
     Adding, Finding, Renaming and Removing Pages

    To add a page to a drawing, use the Add method of the drawing's (NDrawing) Pages collection:

    Add a page to a drawing
    Copy Code
    drawing.Pages.Add(new NPage("My Page"));
    

    To find a page by title, use the GetByTitle method of the drawing's (NDrawing) Pages collection. The search is by default case-sensitive using the current culture. If you want to perform case-insensitive search, use the GetByTitle override that accepts a StringComparison value as a second argument. The method returns null if a page with the given title is not found.

    Find page by title
    Copy Code
    NPage page = drawing.Pages.GetByTitle("My Page");
    

    To rename a page, set its Title property to a new value:

    Rename a page
    Copy Code
    page.Title = "New Page Title";
    

    To remove a page from a drawing, pass the page to the Remove method of the drawing's (NDrawing) Pages collection:

    Delete a page
    Copy Code
    drawing.Pages.Remove(page);
    
     Zooming

    Drawing pages expose a ZoomMode property, which determines the page zoom policy, the options being:

    Value Description
    Normal Page is displayed with its current zoom (default).
    Fit Page is zoomed to fit the drawing view area.
    FitToWidth Page is zoomed to fit the drawing view width.
    FitToHeight Content is zoomed to fit the drawing view height.
           

    The following code fragment demonstrates how to make the active page of a drawing zoom to fit the available area of a drawing view:

    Zoom page to fit drawing view area
    Copy Code
    drawing.ActivePage.ZoomMode = ENZoomMode.FitToHeight;
    

    To zoom a drawing page programmatically you should make sure its ZoomMode is set to Normal and then modify its ZoomFactor property, where a value of 1 means the page is at 100%, 0.8 means the page is zoomed to 80%, 1.2 means the page is zoomed to 120% and so on. You can also use the ZoomIn() and ZoomOut() methods to zoom the page in and out with the value of the ZoomStep property.

     Selection

    The selected items of the page are exposed by the NPageSelection attribute. The selection can be configured to operate in two modes via its Mode property, which are:

    • Single - only a single item can be selected
    • Multiple - multiple items can be selected

    The first or the last selected node is called selection anchor and can be used by different alignment and resize operations. Whether the first or the last selected node is the selection anchor is controlled by the AnchorMode property. The current selection anchor can be obtained from the AnchorItem property.

    The selection class provides a powerful set of methods, which can help you modify the selection. The most important ones are demonstrated in the following example:

    Selection Operations
    Copy Code
    // get the drawing view active page selection
    NPageSelection selection = drawingView.ActivePage.Selection;
    // make node1 the one and only selected node
    selection.SingleSelect(node1);
    // append node2 to the current selection
    selection.MultiSelect(node2);
    // toggle the selection state of the node3 (in this case this will select node3)
    selection.ToggleSelect(node3);
    // toggle the selection state of the node3 (in this case this will deselect node3)
    selection.ToggleSelect(node3);
    // deselect node1
    selection.Deselect(node1);
    // deselect all nodes (in this case only node2)
    selection.DeselectAll();
    
     Drawing Scale

    NOV Diagram uses the NOV UI measurement unit for all display related measures, which is the DIP (device independent pixel, which is 1/96 of an inch). By default the drawing scale is configured so that 1 DIP equals 1 DIP (identity scale).

    Some applications however require to display either too small or too large scenes, which are impossible to visualize without a drawing scale. You must have a large monitor to display a room of 3x3 meters and there is no monitor, which can display something measured in kilometers. In these cases you must use a drawing scale.

    Drawing scale is a user defined ratio between the logical unit and a display unit. For example 1 meter = 1 mm is a commonly used Metric drawing scale that is configured like this:

    Setting Drawing Scale
    Copy Code
    NPage activePage = drawingView.ActivePage;
    activePage.LogicalLength = new NLength(1, NUnit.Meter);
    activePage.DisplayLenght = new NLength(1, NUnit.Millimeter);
    

    Drawing scale helps you work with the document content as if it is measured with the real world measurement unit that you want to use. For example: a room can be defined as a rectangle with width 3 and height 3 meters in logical measurement units like this.

    Using Drawing Scale
    Copy Code
    NBasicShapesFactory basicShapes = new NBasicShapesFactory();
    NShape shape = basicShapes.CreateShape(ENBasicShapes.Rectangle);
    shape.Width = activePage.LogicalToDisplay(3);
    shape.Height = activePage.LogicalToDisplay(3);
    activePage.Items.Add(shape);
    
    The rulers, grid and status bar report measurements in the page logical unit.
    See Also