Diagram for .NET / User's Guide / WinForm Components / Drawing Views

In This Topic
    Drawing Views
    In This Topic

    Drawing views are represented by the NDrawingView class, which derives from NView class. This is the most widely used type of view, since it can display and edit a drawing document. Drawing views are controls, which appear in the Visual Studio toolbox. They are represented by the following item:

     Document

    The drawing document displayed by the drawing view is specified by the Document property. In order to be functional the drawing view has to be connected to a drawing document:

    C#
    Copy Code
    // attach the view to a document
    drawingView.Document = drawingDocument;
    
    Visual Basic
    Copy Code
    ' attach the view to a document
    drawingView.Document = drawingDocument
    
     Trackers

    The drawing view content layer is populated with trackers. Trackers are interactive editors with handles, which the user can drag. Trackers are used to modify different aspects of the currently selected shapes. The types of trackers displayed for a particular shape depend on the shape interaction style (see Shapes for more information).  

    All types of trackers derive from the base NTracker class. Trackers are managed from an instance of the NTrackersManager, which is accessible from the TrackersManager property of the drawing view.

     Components

    The drawing view exposes three visual components, which can help you better position and align edited document content. Common for them all is that they have a measurement unit, which can be different from the measurement unit of the currently edited document, but can also be configured to synchronize it with the document measurement unit. The root class for all view components is the NViewComponent abstract class. Following is a brief summary of the instancable view components:

    • Grid - the grid is represented by an instance of the NGrid class, an instance of which can be obtained from the Grid property. The grid is explained in detail in the Grid topic.
    • Rulers - there are two types of rulers - horizontal and vertical. The horizontal ruler is represented by an instance of the NHorizontalRuler class, while the vertical ruler is an instance of the NVerticalRuler class. The rulers can be obtained from HorizontalRuler and VerticalRuler properties of the drawing view. The rulers are explained in detail in the Rulers topic.
     Scaling and Zooming

    Besides the basic view abilities to scroll and pan, drawing views also add support for scaling and zooming of the scene displayed by them. This is achieved by modifying the World to View transformation of the document, which is a standard GDI+ transformation passed in the Graphics Transform property (see Coordinate Systems  for more information).

    To be more precise the World to View transformation of the drawing document depends on the values of three properties: ScaleX, ScaleY and ViewportOrigin. You may also find useful the Zoom methods, which help you apply a centric based magnification of the drawing view. For example:

    C#
    Copy Code
    // scale the document with factor 2 in the X dimension
    // and with factor 3 in the Y dimension (irregular view scale)
    drawingView.ScaleX = 2;
    drawingViewiew.ScaleY = 3;
      
    // zoom in the document to 200% and make the document scene point
    // with coordinates 100, 100 the center of the viewport
    drawingView.Zoom(2, new NPointF(100, 100));
    
    // zoom the document to 300% and preserve the current viewport center
    drawingView.Zoom(3);
    
    Visual Basic
    Copy Code
    ' scale the document with factor 2 in the X dimension
    ' and with factor 3 in the Y dimension (irregular view scale)
    drawingView.ScaleX = 2
    drawingView.ScaleY = 3
    
    ' zoom in the document to 200% and make the document scene point
    ' with coordinates 100, 100 the center of the viewport
    drawingView.Zoom(2, New NPointF(100, 100))
    
    ' zoom the document to 300% and preserve the current viewport center
    drawingView.Zoom(3)
    
     Transformations

    For your convenience the view exposes a set of useful transform properties, which can be used to convert coordinates between the different coordinate systems as well as to obtain the current scale factors between the different coordinate systems. Following is a brief summary:

    Transformation Description
    SceneToDevice Obtains the current scene to device transformation (identical for the document and the view scene).
    SceneScaleToPixelsX Obtains the current X scaling of scene units to pixels (identical for the document and the view scene)
    SceneScaleToPixelsY Obtains the current Y scaling of scene units to pixels (identical for the document and the view scene)
    DocumentSceneToWorld Obtains the current scene to world transformation of the document.
    DocumentWorldToView Obtains the current world to view transformation of the document.
    DocumentWorldToDevice Obtains the current world to device transformation of the document.
    DocumentWorldScaleToPixelsX Obtains the current X scaling of document world units to pixels
    DocumentWorldScaleToPixelsY Obtains the current Y scaling of document world units to pixels

    The following code converts a point from view device coordinates to document scene coordinates:

    C#
    Copy Code
    // convert a point from device (client) coordinates to scene coordinates
    NPointF docScenePoint = drawingView.SceneToDevice.InvertPoint(viewDevicePoint);
    
    Visual Basic
    Copy Code
    ' convert a point from device (client) coordinates to scene coordinates
    Dim docScenePoint As NPointF = drawingView.SceneToDevice.InvertPoint(viewDevicePoint)
    
     Layout

    The positioning of the drawing relative to the view window is called view layout. The current view layout is specified by the ViewLayout property. The view will automatically enforce the current view layout when it is resized. Currently the following layouts are supported:

    • Normal - the document is displayed with the view specified scaling factors and viewport origin
    • Fit - the document is fit inside the window (preserves the aspect ratio).
    • Stretch - the document is stretched to the window (breaks the aspect ratio)
    • StretchToWidth - the document is stretched to the window width (preserves the aspect ratio)
    • StretchToHeight - the document is stretched to the window height (preserves the aspect ratio) 

    By default the view layout is set to Normal. The following code enables the Fit layout:

    C#
    Copy Code
    // enable the fit layout
    drawingView.ViewLayout = ViewLayout.Fit;
    
    Visual Basic
    Copy Code
    ' enable the fit layout
    drawingView.ViewLayout = ViewLayout.Fit
    
     Painting

    Since the drawing view is responsible not only for the display of the drawing document, but also for the display of it's scene, it paints itself in the following sequence:

    • Document Background Pass - this pass is performed by the PaintDocumentBackground method. The implementation calls the PaintBackground method of the document.
    • View Background Pass - this pass is performed by the PaintViewBackground method. The implementation of this method uses it to paint the grid.
    • Document Foreground Pass - this pass is performed by PaintDocumentForeground method. The implementation calls the Paint method of the document.
    • View Foreground Pass - this pass is performed by PaintViewForeground method. The implementation of this method uses it to paint the content of its scene (Rulers, Trackers, Previews etc). 
     Interactive Appearance

    Optionally the drawing view can override the appearance of selected and highlighted DOM elements. This feature is called interactive appearance and its aspects can be controlled by an instance of the NInteractiveAppearance class, accessible from the InteractiveAppearance property. The following code will change the appearance of all selected nodes:

    C#
    Copy Code
    // make all selected nodes with blue border and yellow solid color filling
    drawingView.InteractiveAppearance.SelectedAppearanceChangeMode = AppearanceChangeMode.Appearance;
    drawingView.InteractiveAppearance.SelectedFillStyle = new NColorFillStyle(Color.Yellow);
    drawingView.InteractiveAppearance.SelectedStrokeStyle = new NStrokeStyle(1, Color.Blue);
    
    Visual Basic
    Copy Code
    ' make all selected nodes with blue border and yellow solid color filling
    drawingView.InteractiveAppearance.SelectedAppearanceChangeMode = AppearanceChangeMode.Appearance
    drawingView.InteractiveAppearance.SelectedFillStyle = New NColorFillStyle(Color.Yellow)
    drawingView.InteractiveAppearance.SelectedStrokeStyle = New NStrokeStyle(1, Color.Blue)
    
     Preview Manager

    The previews generated by the drawing view are managed by an instance of the NDrawingPreviewManager class, which is accessible from the PreviewManager property of the drawing view. 

    You can optionally specify whether the previews use the original node style, or the style of the view context with the help of the PreviewWithOriginalStyle property of the preview manager. Originally it is set to false, which means that they use the style provided by the view context. The following code will cause all node previews to use the style of their document context:

    C#
    Copy Code
    // force all node previews to use the style of their document context
    drawingView.PreviewManager.PreviewWithOriginalStyle = true;
    
    Visual Basic
    Copy Code
    ' force all node previews to use the style of their document context
    drawingView.PreviewManager.PreviewWithOriginalStyle = True
    

    Large entity previews can sometimes be time consuming to generate and slow to drag around. You can control the maximum number of nodes previewed at one time with the help of the MaxPreviewNodesCount property. When the count of previewed nodes exceeds this value only a frame will be displayed around the previewed entity.

    C#
    Copy Code
    // do not allow more than 10 nodes to be previewed at one time (for example translated)
    drawingView.PreviewManager.MaxPreviewNodesCount = 10;
    
    Visual Basic
    Copy Code
    ' do not allow more than 10 nodes to be previewed at one time (for example translated)
    drawingView.PreviewManager.MaxPreviewNodesCount = 10
    
     Hit tests

    Besides the standard set of hit test operations declared in NView, drawing views provide the following types of hit tests:

    • Document hit tests - these methods hit test the entire drawing document scene:
      Method Description
      HitTestDocument hit test all document elements by point
      HitTestDocument hit test all document elements by rect
      LastDocumentHit gets the last hit document element by point
    • Active document content hit tests - these methods hit test the subtrees of the active drawing document containers:
      Method Description
      HitTestActiveDocumentContent hit test the active document elements by point
      HitTestActiveDocumentContent hit test the active document elements by rect
      LastActiveDocumentContentHit gets the last hit active document content element by point
     Snapping
    Drawing views add powerful support for coordinate, point and angle snapping, which is wrapped in an instance of the NSnapManager class, which can be obtained from the SnapManager property. See Snapping for more information.
     Related Examples
    Windows Forms: Drawing View folder
    See Also