Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / tools / perl-5.8.0 / lib / site_perl / 5.8.0 / Pastel / Geometry / Point.pm
CommitLineData
86530b38
AT
1package Pastel::Geometry::Point;\r
2@ISA = ("Pastel::Mixin::Mixin");\r
3use strict;\r
4\r
5sub new \r
6 {\r
7 my( $class) = shift;\r
8 my $self = {};\r
9 bless $self, ref($class) || $class;\r
10 $self = $self->_init(@_);\r
11 return $self;\r
12 }\r
13\r
14sub _init\r
15 {\r
16 my ($self) = shift;\r
17 \r
18 if (@_ == 1){ #If only one parameter left after shifting\r
19 \r
20 if(ref($_[0]) =~ /Point/i){\r
21 $self-> _clone_point($_[0]);\r
22 return $self;\r
23 } \r
24 else{\r
25 return undef;\r
26 }\r
27 } \r
28 else {\r
29 my ($x, $y) = $self->_rearrange(["X", "Y"], @_);\r
30 \r
31 $self->{x} = $x ? $x : 0;\r
32 $self->{y} = $y ? $y :0;\r
33 return $self;\r
34 }\r
35}\r
36\r
37sub _clone_point {\r
38 my $self = shift;\r
39 $self->{x} = $_[0]->get_x();\r
40 $self->{y} = $_[0]->get_y();\r
41 }\r
42 \r
43sub get_x {\r
44 my $self = shift;\r
45 return $self->{x};\r
46}\r
47\r
48sub get_y {\r
49 my $self = shift;\r
50 return $self->{y};\r
51}\r
52\r
53sub set_x {\r
54 my $self = shift;\r
55 my ($x) = $self->_rearrange(["X"], @_);\r
56 $self->{x} = $x;\r
57}\r
58\r
59sub set_y {\r
60 my $self = shift;\r
61 my ($y) = $self->_rearrange(["Y"], @_);\r
62 $self->{y} = $y;\r
63}\r
64sub move {\r
65 my $self = shift;\r
66 my ($x, $y) = $self->_rearrange(["X", "Y"], @_);\r
67 $self->{x} = $x;\r
68 $self->{y} = $y;\r
69}\r
70\r
71sub translate {\r
72 my $self = shift;\r
73 my ($x, $y) = $self->_rearrange(["X", "Y"], @_);\r
74 $self->{x} += $x;\r
75 $self->{y} += $y;\r
76}\r
77\r
78sub set_location {\r
79 my $self = shift;\r
80 $self->move(@_);\r
81}\r
82\r
83sub equals {\r
84 my $self = shift;\r
85 my $x = $_[0]->get_x();\r
86 my $y = $_[0]->get_y();\r
87 if ( ($self->{x} == $x) && ($self->{y} == $y) ){\r
88 return 1;\r
89 } \r
90 else {\r
91 return undef;\r
92 }\r
93}\r
94\r
95sub to_string {\r
96 my $self = shift;\r
97 my $r = ref($self)."[x=".$self->{x}.",y=".$self->{y}."]";\r
98 return $r;\r
99}\r
100\r
101\r
102sub distance {\r
103 my ($self, @args) = @_;\r
104=head1 \r
105 if (($_[0] =~ /:point/i) || (ref($_[0]) =~ /:point/i)){\r
106 ($self, @args) = @_;\r
107 }\r
108 else {\r
109 @args = @_;\r
110 }\r
111=cut \r
112 my $d = undef;\r
113 if (@args == 1){ #Passed a reference\r
114 \r
115 my $x = $args[0]->get_x();\r
116 my $y = $args[0]->get_y();\r
117 $d =_calculate_distance ($self->{x}, $self->{y},\r
118 $x, $y);\r
119 }\r
120 elsif (@args == 2) {\r
121 $d = _calculate_distance($self->{x}, $self->{y}, @args);\r
122 }\r
123 else {\r
124 \r
125 my ($x1, $y1, $x2, $y2) = \r
126 Pastel::Mixin::Mixin::_rearrange("static",["X1","Y1","X2","Y2"],@_);\r
127 \r
128 $d = _calculate_distance($x1, $y1, $x2, $y2);\r
129 \r
130 }\r
131 return $d;\r
132}\r
133\r
134sub _calculate_distance {\r
135 my ($x1, $y1, $x2, $y2) = @_;\r
136 return sqrt ( ($x1 - $x2)**2 + ($y1 - $y2)**2 );\r
137}\r
138\r
1391;\r
140 \r