'Declaration Public MustInherit Class GraphicObject Implements IInteractiveObject
public abstract class GraphicObject : IInteractiveObject
public __gc abstract class GraphicObject : IInteractiveObject
public ref class GraphicObject abstract : IInteractiveObject
По умолчанию координатное пространство объекта равно координатному пространству просмотрщика изображений, т. е. точка объекта с координатой (0;0) совпадает с левой верхней точкой просмотрщика изображений.
 
 Координатное пространство объекта можно изменить с помощью свойства PointTransform. Пример, показывающий, как создать статический прямоугольник, координаты которого совпадают с координатами изображения, можно найти в разделе Примеры.
Вот C#/VB.NET код, который демонстрирует, как создать сетку поверх изображения в просмотрщике изображений:
''' <summary>
''' Displays grid over image in image viewer.
''' </summary>
''' <param name="viewer">The viewer.</param>
Public Shared Sub DrawGridOverImageInImageViewer(viewer As Vintasoft.Imaging.UI.ImageViewer)
    ' create visual tool that can display static graphic objects in an image viewer
    Dim tool As New Vintasoft.Imaging.UI.VisualTools.GraphicObjects.GraphicObjectTool()
    ' create graphic object that displays image grid
    Dim grid As New GridGraphicObject(tool)
    ' add graphic object to the visual tool
    tool.GraphicObjectCollection.Add(grid)
    ' set visual tool as current visual tool of image viewer
    viewer.VisualTool = tool
End Sub
''' <summary>
''' Represents an image grid which can be displayed in image viewer.
''' </summary>
Public Class GridGraphicObject
    Inherits Vintasoft.Imaging.UI.VisualTools.GraphicObjects.GraphicObject
    #Region "Fields"
    Private _tool As Vintasoft.Imaging.UI.VisualTools.VisualTool
    #End Region
    #Region "Constructors"
    ''' <summary>
    ''' Initializes a new instance of the <see cref="GridGraphicObject"/> class.
    ''' </summary>
    ''' <param name="tool">The visual tool.</param>
    Public Sub New(tool As Vintasoft.Imaging.UI.VisualTools.VisualTool)
        If tool Is Nothing Then
            Throw New System.ArgumentNullException()
        End If
        _tool = tool
        Pen = New System.Drawing.Pen(System.Drawing.Color.FromArgb(128, System.Drawing.Color.Lime), 1)
        PointTransform = New Vintasoft.Imaging.UI.VisualTools.PixelsToImageViewerPointFTransform()
    End Sub
    #End Region
    #Region "Properties"
    Private _location As System.Drawing.PointF = System.Drawing.PointF.Empty
    ''' <summary>
    ''' Gets or sets the location of grid.
    ''' </summary>
    ''' <value>
    ''' Default value is <b>(0,0)</b>.
    ''' </value>
    Public Property Location() As System.Drawing.PointF
        Get
            Return _location
        End Get
        Set
            _location = value
        End Set
    End Property
    Private _cellSize As New System.Drawing.SizeF(1, 1)
    ''' <summary>
    ''' Gets or sets the size of the grid cell.
    ''' </summary>
    ''' <value>
    ''' Default value is <b>(1,1)</b>.
    ''' </value>
    Public Property CellSize() As System.Drawing.SizeF
        Get
            Return _cellSize
        End Get
        Set
            _cellSize = value
        End Set
    End Property
    Private _cellUnitOfMeasure As Vintasoft.Imaging.UnitOfMeasure = Vintasoft.Imaging.UnitOfMeasure.Centimeters
    ''' <summary>
    ''' Gets or sets the unit of measure of the grid cell.
    ''' </summary>
    ''' <value>
    ''' Default value is <b>UnitOfMeasure.Centimeters</b>.
    ''' </value>
    Public Property CellUnitOfMeasure() As Vintasoft.Imaging.UnitOfMeasure
        Get
            Return _cellUnitOfMeasure
        End Get
        Set
            _cellUnitOfMeasure = value
        End Set
    End Property
    #End Region
    #Region "Methods"
    ''' <summary>
    ''' Returns a value indicating whether point belongs the object.
    ''' </summary>
    ''' <param name="x">X coordinate of point in object space.</param>
    ''' <param name="y">Y coordinate of point in object space.</param>
    ''' <returns>
    ''' <b>true</b> if point belongs the object;
    ''' otherwise, <b>false</b>.
    ''' </returns>
    Public Overrides Function IsPointOnObject(x As Single, y As Single) As Boolean
        Return IsPointOnObject(x, y, False)
    End Function
    ''' <summary>
    ''' Returns a value indicating whether point belongs the object.
    ''' </summary>
    ''' <param name="x">X coordinate of point in object space.</param>
    ''' <param name="y">Y coordinate of point in object space.</param>
    ''' <param name="ignoreContainmentCheckDistance">A value indicating whether the point must be checked on the object only (ignore
    ''' the "containment" region around object that is used for object selection).</param>
    ''' <returns>
    ''' <b>true</b> if point belongs the object;
    ''' otherwise, <b>false</b>.
    ''' </returns>
    Public Overrides Function IsPointOnObject(x As Single, y As Single, ignoreContainmentCheckDistance As Boolean) As Boolean
        If _tool.ImageViewer.Image IsNot Nothing AndAlso (Pen IsNot Nothing OrElse Brush IsNot Nothing) Then
            Dim rect As System.Drawing.RectangleF = GetRectangle(_location, _tool.ImageViewer.Image)
            Return rect.Contains(x, y)
        Else
            Return False
        End If
    End Function
    ''' <summary>
    ''' Returns a bounding box of object, in object space.
    ''' </summary>
    ''' <returns>
    ''' Bounding box of object, in object space.
    ''' </returns>
    Public Overrides Function GetBoundingBox() As System.Drawing.RectangleF
        If _tool.ImageViewer.Image IsNot Nothing Then
            Return GetRectangle(_location, _tool.ImageViewer.Image)
        Else
            Return System.Drawing.RectangleF.Empty
        End If
    End Function
    ''' <summary>
    ''' Returns a drawing rectangle of object, in object space.
    ''' </summary>
    ''' <param name="viewer">An image viewer.</param>
    ''' <returns>
    ''' Drawing rectangle of object, in object space.
    ''' </returns>
    Public Overrides Function GetDrawingBox(viewer As Vintasoft.Imaging.UI.ImageViewer) As System.Drawing.RectangleF
        If viewer.Image Is Nothing Then
            Return System.Drawing.RectangleF.Empty
        End If
        Dim rect As System.Drawing.RectangleF = GetRectangle(_location, viewer.Image)
        If Pen IsNot Nothing Then
            Dim penWidth As Single = Pen.Width / 2F
            rect.Inflate(penWidth, penWidth)
        End If
        Return rect
    End Function
    ''' <summary>
    ''' Draws the object on specified <see cref="System.Drawing.Graphics" /> in the object space.
    ''' </summary>
    ''' <param name="viewer">An image viewer.</param>
    ''' <param name="g">A graphics where the object must be drawn.</param>
    ''' <remarks>
    ''' This method draws object after the PointTransform is applied to
    ''' the Graphics, specified by <i>g</i> parameter.<br /><br />
    ''' By default this method does not do anything.
    ''' </remarks>
    Public Overrides Sub DrawInObjectSpace(viewer As Vintasoft.Imaging.UI.ImageViewer, g As System.Drawing.Graphics)
        If viewer.Image Is Nothing Then
            Return
        End If
        Dim rect As System.Drawing.RectangleF = GetRectangle(_location, viewer.Image)
        If Brush IsNot Nothing Then
            g.FillRectangle(Brush, rect)
        End If
        If Pen IsNot Nothing AndAlso Not CellSize.IsEmpty Then
            Dim cellHeight As Single = CSng(Vintasoft.Imaging.Utils.UnitOfMeasureConverter.ConvertToPixels(CellSize.Height, CellUnitOfMeasure))
            Dim countRow As Integer = CInt(Math.Truncate(System.Math.Ceiling(rect.Height / cellHeight)))
            Dim cellWidth As Single = CSng(Vintasoft.Imaging.Utils.UnitOfMeasureConverter.ConvertToPixels(CellSize.Width, CellUnitOfMeasure))
            Dim countColumn As Integer = CInt(Math.Truncate(System.Math.Ceiling(rect.Width / cellWidth)))
            If countRow > 0 AndAlso countColumn > 0 Then
                Dim x1 As Single = rect.X
                Dim y1 As Single = rect.Y + cellHeight
                Dim x2 As Single = rect.Right
                Dim i As Integer
                i = 1
                While i < countRow
                    g.DrawLine(Pen, x1, y1, x2, y1)
                    i += 1
                    y1 += cellHeight
                End While
                x1 += cellWidth
                y1 = rect.Y
                Dim y2 As Single = rect.Bottom
                i = 1
                While i < countColumn
                    g.DrawLine(Pen, x1, y1, x1, y2)
                    i += 1
                    x1 += cellWidth
                End While
            End If
        End If
    End Sub
    ''' <summary>
    ''' Creates a new WpfGridGraphicObject that is a copy of the current instance.
    ''' </summary>
    ''' <returns>
    ''' A new WpfGridGraphicObject that is a copy of this instance.
    ''' </returns>
    Public Overrides Function Clone() As Object
        Dim obj As New GridGraphicObject(_tool)
        CopyTo(obj)
        Return obj
    End Function
    ''' <summary>
    ''' Copies current WpfGridGraphicObject to the target WpfGridGraphicObject.
    ''' </summary>
    ''' <param name="obj">WpfGridGraphicObject to copy.</param>
    Public Overrides Sub CopyTo(obj As Vintasoft.Imaging.UI.VisualTools.GraphicObjects.GraphicObject)
        MyBase.CopyTo(obj)
        Dim gridObj As GridGraphicObject = TryCast(obj, GridGraphicObject)
        If gridObj IsNot Nothing Then
            gridObj.Location = Location
            gridObj.CellSize = CellSize
            gridObj.CellUnitOfMeasure = CellUnitOfMeasure
        End If
    End Sub
    ''' <summary>
    ''' Gets the rectangle of grid.
    ''' </summary>
    ''' <param name="location">The location.</param>
    ''' <param name="image">The image.</param>
    Private Function GetRectangle(location As System.Drawing.PointF, image As Vintasoft.Imaging.VintasoftImage) As System.Drawing.RectangleF
        Dim rect As New System.Drawing.RectangleF(_location.X, _location.Y, image.Width - _location.X, image.Height - _location.Y)
        Return rect
    End Function
    #End Region
End Class
	    
/// <summary>
/// Displays grid over image in image viewer.
/// </summary>
/// <param name="viewer">The viewer.</param>
public static void DrawGridOverImageInImageViewer(Vintasoft.Imaging.UI.ImageViewer viewer)
{
    // create visual tool that can display static graphic objects in an image viewer
    Vintasoft.Imaging.UI.VisualTools.GraphicObjects.GraphicObjectTool tool =
        new Vintasoft.Imaging.UI.VisualTools.GraphicObjects.GraphicObjectTool();
    // create graphic object that displays image grid
    GridGraphicObject grid = new GridGraphicObject(tool);
    // add graphic object to the visual tool
    tool.GraphicObjectCollection.Add(grid);
    // set visual tool as current visual tool of image viewer
    viewer.VisualTool = tool;
}
/// <summary>
/// Represents an image grid which can be displayed in image viewer.
/// </summary>
public class GridGraphicObject :
    Vintasoft.Imaging.UI.VisualTools.GraphicObjects.GraphicObject
{
    #region Fields
    Vintasoft.Imaging.UI.VisualTools.VisualTool _tool;
    #endregion
    #region Constructors
    /// <summary>
    /// Initializes a new instance of the <see cref="GridGraphicObject"/> class.
    /// </summary>
    /// <param name="tool">The visual tool.</param>
    public GridGraphicObject(Vintasoft.Imaging.UI.VisualTools.VisualTool tool)
    {
        if (tool == null)
            throw new System.ArgumentNullException();
        _tool = tool;
        Pen = new System.Drawing.Pen(
            System.Drawing.Color.FromArgb(128, System.Drawing.Color.Lime), 1);
        PointTransform =
            new Vintasoft.Imaging.UI.VisualTools.PixelsToImageViewerPointFTransform();
    }
    #endregion
    #region Properties
    System.Drawing.PointF _location = System.Drawing.PointF.Empty;
    /// <summary>
    /// Gets or sets the location of grid.
    /// </summary>
    /// <value>
    /// Default value is <b>(0,0)</b>.
    /// </value>
    public System.Drawing.PointF Location
    {
        get
        {
            return _location;
        }
        set
        {
            _location = value;
        }
    }
    System.Drawing.SizeF _cellSize = new System.Drawing.SizeF(1, 1);
    /// <summary>
    /// Gets or sets the size of the grid cell.
    /// </summary>
    /// <value>
    /// Default value is <b>(1,1)</b>.
    /// </value>
    public System.Drawing.SizeF CellSize
    {
        get
        {
            return _cellSize;
        }
        set
        {
            _cellSize = value;
        }
    }
    Vintasoft.Imaging.UnitOfMeasure _cellUnitOfMeasure =
        Vintasoft.Imaging.UnitOfMeasure.Centimeters;
    /// <summary>
    /// Gets or sets the unit of measure of the grid cell.
    /// </summary>
    /// <value>
    /// Default value is <b>UnitOfMeasure.Centimeters</b>.
    /// </value>
    public Vintasoft.Imaging.UnitOfMeasure CellUnitOfMeasure
    {
        get
        {
            return _cellUnitOfMeasure;
        }
        set
        {
            _cellUnitOfMeasure = value;
        }
    }
    #endregion
    #region Methods
    /// <summary>
    /// Returns a value indicating whether point belongs the object.
    /// </summary>
    /// <param name="x">X coordinate of point in object space.</param>
    /// <param name="y">Y coordinate of point in object space.</param>
    /// <returns>
    /// <b>true</b> if point belongs the object;
    /// otherwise, <b>false</b>.
    /// </returns>
    public override bool IsPointOnObject(float x, float y)
    {
        return IsPointOnObject(x, y, false);
    }
    /// <summary>
    /// Returns a value indicating whether point belongs the object.
    /// </summary>
    /// <param name="x">X coordinate of point in object space.</param>
    /// <param name="y">Y coordinate of point in object space.</param>
    /// <param name="ignoreContainmentCheckDistance">A value indicating whether the point must be checked on the object only (ignore
    /// the "containment" region around object that is used for object selection).</param>
    /// <returns>
    /// <b>true</b> if point belongs the object;
    /// otherwise, <b>false</b>.
    /// </returns>
    public override bool IsPointOnObject(float x, float y, bool ignoreContainmentCheckDistance)
    {
        if (_tool.ImageViewer.Image != null &&
            (Pen != null || Brush != null))
        {
            System.Drawing.RectangleF rect = GetRectangle(_location, _tool.ImageViewer.Image);
            return rect.Contains(x, y);
        }
        else
            return false;
    }
    /// <summary>
    /// Returns a bounding box of object, in object space.
    /// </summary>
    /// <returns>
    /// Bounding box of object, in object space.
    /// </returns>
    public override System.Drawing.RectangleF GetBoundingBox()
    {
        if (_tool.ImageViewer.Image != null)
            return GetRectangle(_location, _tool.ImageViewer.Image);
        else
            return System.Drawing.RectangleF.Empty;
    }
    /// <summary>
    /// Returns a drawing rectangle of object, in object space.
    /// </summary>
    /// <param name="viewer">An image viewer.</param>
    /// <returns>
    /// Drawing rectangle of object, in object space.
    /// </returns>
    public override System.Drawing.RectangleF GetDrawingBox(Vintasoft.Imaging.UI.ImageViewer viewer)
    {
        if (viewer.Image == null)
            return System.Drawing.RectangleF.Empty;
        System.Drawing.RectangleF rect = GetRectangle(_location, viewer.Image);
        if (Pen != null)
        {
            float penWidth = Pen.Width / 2.0f;
            rect.Inflate(penWidth, penWidth);
        }
        return rect;
    }
    /// <summary>
    /// Draws the object on specified <see cref="System.Drawing.Graphics" /> in the object space.
    /// </summary>
    /// <param name="viewer">An image viewer.</param>
    /// <param name="g">A graphics where the object must be drawn.</param>
    /// <remarks>
    /// This method draws object after the PointTransform is applied to
    /// the Graphics, specified by <i>g</i> parameter.<br /><br />
    /// By default this method does not do anything.
    /// </remarks>
    public override void DrawInObjectSpace(Vintasoft.Imaging.UI.ImageViewer viewer, System.Drawing.Graphics g)
    {
        if (viewer.Image == null)
            return;
        System.Drawing.RectangleF rect = GetRectangle(_location, viewer.Image);
        if (Brush != null)
            g.FillRectangle(Brush, rect);
        if (Pen != null && !CellSize.IsEmpty)
        {
            float cellHeight =
                (float)Vintasoft.Imaging.Utils.UnitOfMeasureConverter.ConvertToPixels(CellSize.Height, CellUnitOfMeasure);
            int countRow = (int)System.Math.Ceiling(rect.Height / cellHeight);
            float cellWidth =
                (float)Vintasoft.Imaging.Utils.UnitOfMeasureConverter.ConvertToPixels(CellSize.Width, CellUnitOfMeasure);
            int countColumn = (int)System.Math.Ceiling(rect.Width / cellWidth);
            if (countRow > 0 && countColumn > 0)
            {
                float x1 = rect.X;
                float y1 = rect.Y + cellHeight;
                float x2 = rect.Right;
                int i;
                for (i = 1; i < countRow; i++, y1 += cellHeight)
                    g.DrawLine(Pen, x1, y1, x2, y1);
                x1 += cellWidth;
                y1 = rect.Y;
                float y2 = rect.Bottom;
                for (i = 1; i < countColumn; i++, x1 += cellWidth)
                    g.DrawLine(Pen, x1, y1, x1, y2);
            }
        }
    }
    /// <summary>
    /// Creates a new WpfGridGraphicObject that is a copy of the current instance.
    /// </summary>
    /// <returns>
    /// A new WpfGridGraphicObject that is a copy of this instance.
    /// </returns>
    public override object Clone()
    {
        GridGraphicObject obj = new GridGraphicObject(_tool);
        CopyTo(obj);
        return obj;
    }
    /// <summary>
    /// Copies current WpfGridGraphicObject to the target WpfGridGraphicObject.
    /// </summary>
    /// <param name="obj">WpfGridGraphicObject to copy.</param>
    public override void CopyTo(Vintasoft.Imaging.UI.VisualTools.GraphicObjects.GraphicObject obj)
    {
        base.CopyTo(obj);
        GridGraphicObject gridObj = obj as GridGraphicObject;
        if (gridObj != null)
        {
            gridObj.Location = Location;
            gridObj.CellSize = CellSize;
            gridObj.CellUnitOfMeasure = CellUnitOfMeasure;
        }
    }
    /// <summary>
    /// Gets the rectangle of grid.
    /// </summary>
    /// <param name="location">The location.</param>
    /// <param name="image">The image.</param>
    private System.Drawing.RectangleF GetRectangle(
        System.Drawing.PointF location,
        Vintasoft.Imaging.VintasoftImage image)
    {
        System.Drawing.RectangleF rect = new System.Drawing.RectangleF(
            _location.X, _location.Y,
            image.Width - _location.X, image.Height - _location.Y);
        return rect;
    }
    #endregion
}
	    
System.Object
   Vintasoft.Imaging.UI.VisualTools.GraphicObjects.GraphicObject
      Vintasoft.Imaging.Dicom.UI.VisualTools.ImageRulerGraphicObject
      Vintasoft.Imaging.UI.VisualTools.GraphicObjects.RectangularGraphicObject
      Vintasoft.Imaging.UI.VisualTools.GraphicObjects.GraphicObjectGroup
      Vintasoft.Imaging.UI.VisualTools.GraphicObjects.PathGraphicObject
Целевые платформы: .NET 9; .NET 8; .NET 7; .NET 6; .NET Framework 4.8, 4.7, 4.6, 4.5, 4.0, 3.5
Члены типа GraphicObject
Пространство имен Vintasoft.Imaging.UI.VisualTools.GraphicObjects