1 #Region "Microsoft.VisualBasic::8d1a829af6846d3a2389d48a6d447f39, Microsoft.VisualBasic.Core\Extensions\Image\GDI+\Layouts\LayoutedObject.vb"
2
3     ' Author:
4     
5     '       asuka (amethyst.asuka@gcmodeller.org)
6     '       xie (genetics@smrucc.org)
7     '       xieguigang (xie.guigang@live.com)
8     
9     ' Copyright (c) 2018 GPL3 Licensed
10     
11     
12     ' GNU GENERAL PUBLIC LICENSE (GPL3)
13     
14     
15     ' This program is free software: you can redistribute it and/or modify
16     ' it under the terms of the GNU General Public License as published by
17     ' the Free Software Foundation, either version 3 of the License, or
18     ' (at your option) any later version.
19     
20     ' This program is distributed in the hope that it will be useful,
21     ' but WITHOUT ANY WARRANTY; without even the implied warranty of
22     ' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
23     ' GNU General Public License for more details.
24     
25     ' You should have received a copy of the GNU General Public License
26     ' along with this program. If not, see <http://www.gnu.org/licenses/>.
27
28
29
30     ' /********************************************************************************/
31
32     ' Summaries:
33
34     '     Interface ILayoutedObject
35     
36     '         Properties: Location
37     
38     '     Interface ILayoutCoordinate
39     
40     '         Properties: ID, X, Y
41     
42     '     Class mxPoint
43     
44     '         Properties: Point, X, Y
45     
46     '         Constructor: (+4 OverloadsSub New
47     '         Function: Clone, Equals, ToString
48     
49     
50     ' /********************************************************************************/
51
52 #End Region
53
54 Imports System.Drawing
55 Imports Microsoft.VisualBasic.Language
56 Imports sys = System.Math
57
58 Namespace Imaging.LayoutModel
59
60     ''' <summary>
61     ''' Any typed object with a location layout value
62     ''' </summary>
63     ''' <typeparam name="T"></typeparam>
64     Public Interface ILayoutedObject(Of T)
65         Inherits Value(Of T).IValueOf
66
67         Property Location As PointF
68     End Interface
69
70     Public Interface ILayoutCoordinate
71         Property ID As String
72         Property X As Double
73         Property Y As Double
74     End Interface
75
76     ''' <summary>
77     ''' Implements a 2-dimensional point with <see cref="Double"/> precision coordinates.
78     ''' </summary>
79     <Serializable>
80     Public Class mxPoint : Implements ICloneable
81
82         ''' <summary>
83         ''' Constructs a new point at (0, 0).
84         ''' </summary>
85         Public Sub New()
86             Me.New(0, 0)
87         End Sub
88
89         ''' <summary>
90         ''' Constructs a new point at the location of the given point.
91         ''' </summary>
92         ''' <param name="point"> Point that specifies the location. </param>
93         Public Sub New(ByVal point As Point)
94             Me.New(point.X, point.Y)
95         End Sub
96
97         ''' <summary>
98         ''' Constructs a new point at the location of the given point.
99         ''' </summary>
100         ''' <param name="point"> Point that specifies the location. </param>
101         Public Sub New(ByVal point As mxPoint)
102             Me.New(point.X, point.Y)
103         End Sub
104
105         ''' <summary>
106         ''' Constructs a new point at (x, y).
107         ''' </summary>
108         ''' <param name="x"> X-coordinate of the point to be created. </param>
109         ''' <param name="y"> Y-coordinate of the point to be created. </param>
110         Public Sub New(ByVal x As Double, ByVal y As Double)
111             x = x
112             y = y
113         End Sub
114
115         ''' <summary>
116         ''' Returns the x-coordinate of the point.
117         ''' </summary>
118         ''' <returns> Returns the x-coordinate. </returns>
119         Public Overridable Property X As Double
120
121         ''' <summary>
122         ''' Returns the x-coordinate of the point.
123         ''' </summary>
124         ''' <returns> Returns the x-coordinate. </returns>
125         Public Overridable Property Y As Double
126
127         ''' <summary>
128         ''' Returns the coordinates as a new point.
129         ''' </summary>
130         ''' <returns> Returns a new point for the location. </returns>
131         Public Overridable ReadOnly Property Point As Point
132             Get
133                 Return New Point(CInt(Fix(sys.Round(X))), CInt(Fix(sys.Round(Y))))
134             End Get
135         End Property
136
137         ''' 
138         ''' <summary>
139         ''' Returns true if the given object equals this rectangle.
140         ''' </summary>
141         Public Overrides Function Equals(ByVal obj As ObjectAs Boolean
142             If TypeOf obj Is mxPoint Then
143                 Dim pt As mxPoint = CType(obj, mxPoint)
144
145                 Return pt.X = X AndAlso pt.Y = Y
146             End If
147
148             Return False
149         End Function
150
151         ''' <summary>
152         ''' Returns a new instance of the same point.
153         ''' </summary>
154         Public Overridable Function Clone() As Object Implements ICloneable.Clone
155             Return New mxPoint(X, Y)
156         End Function
157
158         ''' <summary>
159         ''' Returns a <code>String</code> that represents the value
160         ''' of this <code>mxPoint</code>. </summary>
161         ''' <returns> a string representation of this <code>mxPoint</code>. </returns>
162         Public Overrides Function ToString() As String
163             Return Me.GetType().Name & "[" & X & ", " & Y & "]"
164         End Function
165     End Class
166 End Namespace