annotate webapp/src/main/webapp/jquery/jquery.digilib.geometry.js @ 1113:7affda55c10e

using annotator in digilib works somewhat now.
author robcast
date Thu, 01 Nov 2012 18:38:11 +0100
parents 1e4f4964e9c2
children efe4b0f18cf8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
785
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
1 /** required digilib geometry plugin
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
2 */
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
3
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
4 (function($) {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
5 //var dlGeometry = function() {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
6 /*
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
7 * Size class
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
8 */
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
9 var size = function(w, h) {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
10 var that;
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
11 if (typeof w === "object") {
1012
dc09bccf8357 better aspect ratio for preview (almost right)
hertzhaft
parents: 974
diff changeset
12 // assume an object having width and height
785
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
13 that = {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
14 width : w.width,
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
15 height : w.height
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
16 };
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
17 } else {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
18 that = {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
19 width : parseFloat(w),
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
20 height : parseFloat(h)
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
21 };
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
22 }
1012
dc09bccf8357 better aspect ratio for preview (almost right)
hertzhaft
parents: 974
diff changeset
23 // returns true if both sizes are equal
785
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
24 that.equals = function(other) {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
25 return (this.width === other.width && this.height === other.height);
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
26 };
1012
dc09bccf8357 better aspect ratio for preview (almost right)
hertzhaft
parents: 974
diff changeset
27 // returns the aspect ratio of this size
dc09bccf8357 better aspect ratio for preview (almost right)
hertzhaft
parents: 974
diff changeset
28 that.getAspect = function() {
dc09bccf8357 better aspect ratio for preview (almost right)
hertzhaft
parents: 974
diff changeset
29 return (this.width / this.height);
dc09bccf8357 better aspect ratio for preview (almost right)
hertzhaft
parents: 974
diff changeset
30 };
dc09bccf8357 better aspect ratio for preview (almost right)
hertzhaft
parents: 974
diff changeset
31 // returns a size of a given aspect ratio that fits into this one
dc09bccf8357 better aspect ratio for preview (almost right)
hertzhaft
parents: 974
diff changeset
32 that.fitAspect = function(aspect) {
dc09bccf8357 better aspect ratio for preview (almost right)
hertzhaft
parents: 974
diff changeset
33 var s = size(this);
dc09bccf8357 better aspect ratio for preview (almost right)
hertzhaft
parents: 974
diff changeset
34 if (aspect > this.getAspect()) {
dc09bccf8357 better aspect ratio for preview (almost right)
hertzhaft
parents: 974
diff changeset
35 // size is more horizontally stretched than this
dc09bccf8357 better aspect ratio for preview (almost right)
hertzhaft
parents: 974
diff changeset
36 s.height = s.width / aspect;
dc09bccf8357 better aspect ratio for preview (almost right)
hertzhaft
parents: 974
diff changeset
37 } else {
dc09bccf8357 better aspect ratio for preview (almost right)
hertzhaft
parents: 974
diff changeset
38 s.width = s.height * aspect;
dc09bccf8357 better aspect ratio for preview (almost right)
hertzhaft
parents: 974
diff changeset
39 }
dc09bccf8357 better aspect ratio for preview (almost right)
hertzhaft
parents: 974
diff changeset
40 return s;
dc09bccf8357 better aspect ratio for preview (almost right)
hertzhaft
parents: 974
diff changeset
41 };
957
c4bd6f984aee don't set position of scaler div, just size.
robcast
parents: 953
diff changeset
42 // adjusts size of jQuery element "$elem" to this size
c4bd6f984aee don't set position of scaler div, just size.
robcast
parents: 953
diff changeset
43 that.adjustDiv = function($elem) {
c4bd6f984aee don't set position of scaler div, just size.
robcast
parents: 953
diff changeset
44 $elem.width(this.width).height(this.height);
c4bd6f984aee don't set position of scaler div, just size.
robcast
parents: 953
diff changeset
45 };
785
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
46 that.toString = function() {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
47 return (this.width + "x" + this.height);
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
48 };
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
49 return that;
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
50 };
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
51
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
52 /*
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
53 * Position class
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
54 */
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
55 var position = function(x, y) {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
56 var that;
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
57 if (typeof x === "object") {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
58 if (x instanceof jQuery) {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
59 // jQuery object
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
60 var pos = x.offset();
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
61 that = {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
62 x : pos.left,
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
63 y : pos.top
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
64 };
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
65 } else {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
66 if (x.x != null) {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
67 // position object
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
68 that = {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
69 x : x.x,
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
70 y : x.y
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
71 };
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
72 }
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
73 if (x.pageX != null) {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
74 // event object
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
75 that = {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
76 x : x.pageX,
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
77 y : x.pageY
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
78 };
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
79 }
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
80 }
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
81 } else {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
82 that = {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
83 x : parseFloat(x),
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
84 y : parseFloat(y)
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
85 };
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
86 }
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
87 that.equals = function(other) {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
88 return (this.x === other.x && this.y === other.y);
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
89 };
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
90 // add position other to this
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
91 that.add = function(other) {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
92 this.x += other.x;
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
93 this.y += other.y;
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
94 return this;
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
95 };
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
96 // returns negative position
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
97 that.neg = function() {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
98 return position({
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
99 x : -this.x,
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
100 y : -this.y
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
101 });
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
102 };
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
103 // returns new position that is the difference between this and other
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
104 that.delta = function(other) {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
105 return position({
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
106 x : other.x - this.x,
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
107 y : other.y - this.y
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
108 });
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
109 };
944
3916303b8f17 "preview" works now also for zoomIn/Out
robcast
parents: 903
diff changeset
110 // adjusts CSS position of $elem to this position
785
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
111 that.adjustDiv = function($elem) {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
112 $elem.offset({
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
113 left : this.x,
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
114 top : this.y
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
115 });
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
116 };
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
117 // returns distance of this position to pos (length if pos == null)
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
118 that.distance = function(pos) {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
119 if (pos == null) {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
120 pos = {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
121 x : 0,
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
122 y : 0
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
123 };
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
124 }
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
125 var dx = pos.x - this.x;
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
126 var dy = pos.y - this.y;
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
127 return Math.sqrt(dx * dx + dy * dy);
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
128 };
1113
7affda55c10e using annotator in digilib works somewhat now.
robcast
parents: 1075
diff changeset
129 // returns position in css-compatible format
7affda55c10e using annotator in digilib works somewhat now.
robcast
parents: 1075
diff changeset
130 that.getAsCss = function() {
7affda55c10e using annotator in digilib works somewhat now.
robcast
parents: 1075
diff changeset
131 return {
7affda55c10e using annotator in digilib works somewhat now.
robcast
parents: 1075
diff changeset
132 left : this.x,
7affda55c10e using annotator in digilib works somewhat now.
robcast
parents: 1075
diff changeset
133 top : this.y,
7affda55c10e using annotator in digilib works somewhat now.
robcast
parents: 1075
diff changeset
134 };
7affda55c10e using annotator in digilib works somewhat now.
robcast
parents: 1075
diff changeset
135 };
785
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
136 that.toString = function() {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
137 return (this.x + "," + this.y);
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
138 };
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
139 return that;
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
140 };
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
141 /*
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
142 * Rectangle class
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
143 */
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
144 var rectangle = function(x, y, w, h) {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
145 var that = {};
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
146 if (typeof x === "object") {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
147 if (x instanceof jQuery) {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
148 // jQuery object
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
149 var pos = x.offset();
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
150 that = {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
151 x : pos.left,
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
152 y : pos.top,
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
153 width : x.width(),
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
154 height : x.height()
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
155 };
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
156 } else if (y == null) {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
157 // assume x is rectangle
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
158 that = {
974
678313a989a9 first part of calibration dialog
hertzhaft
parents: 957
diff changeset
159 x : x.x || 0,
678313a989a9 first part of calibration dialog
hertzhaft
parents: 957
diff changeset
160 y : x.y || 0,
678313a989a9 first part of calibration dialog
hertzhaft
parents: 957
diff changeset
161 width : x.width || 0,
678313a989a9 first part of calibration dialog
hertzhaft
parents: 957
diff changeset
162 height : x.height || 0
785
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
163 };
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
164 } else {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
165 // assume x and y are Position
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
166 that = {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
167 x : Math.min(x.x, y.x),
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
168 y : Math.min(x.y, y.y),
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
169 width : Math.abs(y.x - x.x),
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
170 height : Math.abs(y.y - x.y)
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
171 };
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
172 }
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
173 } else {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
174 that = {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
175 x : parseFloat(x),
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
176 y : parseFloat(y),
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
177 width : parseFloat(w),
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
178 height : parseFloat(h)
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
179 };
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
180 }
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
181 // returns a copy of this Rectangle
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
182 that.copy = function() {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
183 return rectangle(this);
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
184 };
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
185 // returns the position of this Rectangle
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
186 that.getPosition = function() {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
187 return position(this);
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
188 };
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
189 // returns the size of this Rectangle
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
190 that.getSize = function() {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
191 return size(this);
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
192 };
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
193 // returns the upper left corner position
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
194 that.getPt1 = that.getPosition;
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
195 // returns the lower right corner position of this Rectangle
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
196 that.getPt2 = function() {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
197 return position({
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
198 x : this.x + this.width,
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
199 y : this.y + this.height
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
200 });
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
201 };
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
202 // sets the upper left corner position to pos
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
203 that.setPosition = function(pos) {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
204 this.x = pos.x;
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
205 this.y = pos.y;
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
206 return this;
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
207 };
807
1b1728926534 geometry: overlapsRect() plus some comment clarifications
hertzhaft
parents: 793
diff changeset
208 // adds pos to the position
785
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
209 that.setPt1 = that.setPosition; // TODO: not really the same
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
210 that.addPosition = function(pos) {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
211 this.x += pos.x;
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
212 this.y += pos.y;
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
213 return this;
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
214 };
877
971b7122930f arrows: got basic functionality working
hertzhaft
parents: 847
diff changeset
215 // adds pos to the dimensions
971b7122930f arrows: got basic functionality working
hertzhaft
parents: 847
diff changeset
216 that.enlarge = function(pos) {
971b7122930f arrows: got basic functionality working
hertzhaft
parents: 847
diff changeset
217 this.width += pos.x;
971b7122930f arrows: got basic functionality working
hertzhaft
parents: 847
diff changeset
218 this.height += pos.y;
971b7122930f arrows: got basic functionality working
hertzhaft
parents: 847
diff changeset
219 return this;
971b7122930f arrows: got basic functionality working
hertzhaft
parents: 847
diff changeset
220 };
785
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
221 // sets the lower right corner to position pos
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
222 that.setPt2 = function(pos) {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
223 this.width = pos.x - this.x;
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
224 this.height = pos.y - this.y;
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
225 return this;
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
226 };
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
227 // returns the center position of this Rectangle
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
228 that.getCenter = function() {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
229 return position({
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
230 x : this.x + this.width / 2,
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
231 y : this.y + this.height / 2
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
232 });
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
233 };
807
1b1728926534 geometry: overlapsRect() plus some comment clarifications
hertzhaft
parents: 793
diff changeset
234 // moves this rectangle's center to position pos
785
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
235 that.setCenter = function(pos) {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
236 this.x = pos.x - this.width / 2;
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
237 this.y = pos.y - this.height / 2;
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
238 return this;
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
239 };
944
3916303b8f17 "preview" works now also for zoomIn/Out
robcast
parents: 903
diff changeset
240 // returns true if both rectangles have equal position and size
785
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
241 that.equals = function(other) {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
242 var eq = (this.x === other.x && this.y === other.y && this.width === other.width);
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
243 return eq;
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
244 };
944
3916303b8f17 "preview" works now also for zoomIn/Out
robcast
parents: 903
diff changeset
245 // returns a rectangle with the difference width, height and position
3916303b8f17 "preview" works now also for zoomIn/Out
robcast
parents: 903
diff changeset
246 that.delta = function(other) {
3916303b8f17 "preview" works now also for zoomIn/Out
robcast
parents: 903
diff changeset
247 return rectangle(other.x - this.x, other.y - this.y,
3916303b8f17 "preview" works now also for zoomIn/Out
robcast
parents: 903
diff changeset
248 other.width - this.width, other.height - this.height);
3916303b8f17 "preview" works now also for zoomIn/Out
robcast
parents: 903
diff changeset
249 };
785
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
250 // returns the area of this Rectangle
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
251 that.getArea = function() {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
252 return (this.width * this.height);
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
253 };
953
3d5e7458f9ae fixed birdseye region positioning after layout reflow.
robcast
parents: 944
diff changeset
254 // returns the aspect ratio of this Rectangle
3d5e7458f9ae fixed birdseye region positioning after layout reflow.
robcast
parents: 944
diff changeset
255 that.getAspect = function() {
3d5e7458f9ae fixed birdseye region positioning after layout reflow.
robcast
parents: 944
diff changeset
256 return (this.width / this.height);
3d5e7458f9ae fixed birdseye region positioning after layout reflow.
robcast
parents: 944
diff changeset
257 };
785
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
258 // eliminates negative width and height
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
259 that.normalize = function() {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
260 var p = this.getPt2();
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
261 this.x = Math.min(this.x, p.x);
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
262 this.y = Math.min(this.y, p.y);
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
263 this.width = Math.abs(this.width);
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
264 this.height = Math.abs(this.height);
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
265 return this;
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
266 };
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
267 // returns if Position "pos" lies inside of this rectangle
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
268 that.containsPosition = function(pos) {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
269 var ct = ((pos.x >= this.x) && (pos.y >= this.y)
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
270 && (pos.x <= this.x + this.width) && (pos.y <= this.y
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
271 + this.height));
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
272 return ct;
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
273 };
807
1b1728926534 geometry: overlapsRect() plus some comment clarifications
hertzhaft
parents: 793
diff changeset
274 // returns true if rectangle "rect" is contained in this rectangle
785
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
275 that.containsRect = function(rect) {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
276 return (this.containsPosition(rect.getPt1()) && this
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
277 .containsPosition(rect.getPt2()));
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
278 };
807
1b1728926534 geometry: overlapsRect() plus some comment clarifications
hertzhaft
parents: 793
diff changeset
279 // returns true if rectangle "rect" and this rectangle overlap
1b1728926534 geometry: overlapsRect() plus some comment clarifications
hertzhaft
parents: 793
diff changeset
280 that.overlapsRect = function(rect) {
812
b484631f37c1 better intersect function
hertzhaft
parents: 807
diff changeset
281 return this.intersect(rect) != null;
807
1b1728926534 geometry: overlapsRect() plus some comment clarifications
hertzhaft
parents: 793
diff changeset
282 };
785
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
283 // changes this rectangle's x/y values so it stays inside of rectangle
807
1b1728926534 geometry: overlapsRect() plus some comment clarifications
hertzhaft
parents: 793
diff changeset
284 // "rect", keeping the proportions
785
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
285 that.stayInside = function(rect) {
812
b484631f37c1 better intersect function
hertzhaft
parents: 807
diff changeset
286 this.x = Math.max(this.x, rect.x);
b484631f37c1 better intersect function
hertzhaft
parents: 807
diff changeset
287 this.y = Math.max(this.y, rect.y);
785
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
288 if (this.x + this.width > rect.x + rect.width) {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
289 this.x = rect.x + rect.width - this.width;
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
290 }
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
291 if (this.y + this.height > rect.y + rect.height) {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
292 this.y = rect.y + rect.height - this.height;
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
293 }
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
294 return this;
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
295 };
807
1b1728926534 geometry: overlapsRect() plus some comment clarifications
hertzhaft
parents: 793
diff changeset
296 // clips this rectangle so it stays inside of rectangle "rect"
785
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
297 that.clipTo = function(rect) {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
298 var p1 = rect.getPt1();
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
299 var p2 = rect.getPt2();
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
300 var this2 = this.getPt2();
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
301 this.setPosition(position(Math.max(this.x, p1.x), Math.max(this.y, p1.y)));
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
302 this.setPt2(position(Math.min(this2.x, p2.x), Math.min(this2.y, p2.y)));
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
303 return this;
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
304 };
807
1b1728926534 geometry: overlapsRect() plus some comment clarifications
hertzhaft
parents: 793
diff changeset
305 // returns the intersection of rectangle "rect" and this one
785
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
306 that.intersect = function(rect) {
847
c662bf335881 fixed a bug in geom.intersect
hertzhaft
parents: 812
diff changeset
307 var r = rect.copy();
c662bf335881 fixed a bug in geom.intersect
hertzhaft
parents: 812
diff changeset
308 var result = r.clipTo(this);
c662bf335881 fixed a bug in geom.intersect
hertzhaft
parents: 812
diff changeset
309 if (result.width < 0 || result.height < 0) result = null;
c662bf335881 fixed a bug in geom.intersect
hertzhaft
parents: 812
diff changeset
310 return result;
785
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
311 };
812
b484631f37c1 better intersect function
hertzhaft
parents: 807
diff changeset
312
807
1b1728926534 geometry: overlapsRect() plus some comment clarifications
hertzhaft
parents: 793
diff changeset
313 // returns a copy of rectangle "rect" that fits into this one
1b1728926534 geometry: overlapsRect() plus some comment clarifications
hertzhaft
parents: 793
diff changeset
314 // (moving it first)
785
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
315 that.fit = function(rect) {
847
c662bf335881 fixed a bug in geom.intersect
hertzhaft
parents: 812
diff changeset
316 var r = rect.copy();
c662bf335881 fixed a bug in geom.intersect
hertzhaft
parents: 812
diff changeset
317 r.x = Math.max(r.x, this.x);
c662bf335881 fixed a bug in geom.intersect
hertzhaft
parents: 812
diff changeset
318 r.y = Math.max(r.y, this.x);
c662bf335881 fixed a bug in geom.intersect
hertzhaft
parents: 812
diff changeset
319 if (r.x + r.width > this.x + this.width) {
c662bf335881 fixed a bug in geom.intersect
hertzhaft
parents: 812
diff changeset
320 r.x = this.x + this.width - r.width;
785
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
321 }
847
c662bf335881 fixed a bug in geom.intersect
hertzhaft
parents: 812
diff changeset
322 if (r.y + r.height > this.y + this.height) {
c662bf335881 fixed a bug in geom.intersect
hertzhaft
parents: 812
diff changeset
323 r.y = this.y + this.height - r.height;
785
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
324 }
847
c662bf335881 fixed a bug in geom.intersect
hertzhaft
parents: 812
diff changeset
325 return r.intersect(this);
785
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
326 };
1012
dc09bccf8357 better aspect ratio for preview (almost right)
hertzhaft
parents: 974
diff changeset
327
807
1b1728926534 geometry: overlapsRect() plus some comment clarifications
hertzhaft
parents: 793
diff changeset
328 // adjusts position and size of jQuery element "$elem" to this rectangle
785
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
329 that.adjustDiv = function($elem) {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
330 $elem.offset({
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
331 left : this.x,
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
332 top : this.y
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
333 });
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
334 $elem.width(this.width).height(this.height);
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
335 };
807
1b1728926534 geometry: overlapsRect() plus some comment clarifications
hertzhaft
parents: 793
diff changeset
336 // returns position and size of this rectangle in css-compatible format
785
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
337 that.getAsCss = function() {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
338 return {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
339 left : this.x,
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
340 top : this.y,
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
341 width : this.width,
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
342 height : this.height
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
343 };
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
344 };
807
1b1728926534 geometry: overlapsRect() plus some comment clarifications
hertzhaft
parents: 793
diff changeset
345 // returns position and size of this rectangle formatted for SVG attributes
1b1728926534 geometry: overlapsRect() plus some comment clarifications
hertzhaft
parents: 793
diff changeset
346 that.getAsSvg = function() {
1b1728926534 geometry: overlapsRect() plus some comment clarifications
hertzhaft
parents: 793
diff changeset
347 return [this.x, this.y, this.width, this.height].join(" ");
1b1728926534 geometry: overlapsRect() plus some comment clarifications
hertzhaft
parents: 793
diff changeset
348 };
1b1728926534 geometry: overlapsRect() plus some comment clarifications
hertzhaft
parents: 793
diff changeset
349 // returns size and position of this rectangle formatted for ??? (w x h@x,y)
785
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
350 that.toString = function() {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
351 return this.width + "x" + this.height + "@" + this.x + "," + this.y;
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
352 };
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
353 return that;
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
354 };
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
355
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
356 /*
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
357 * Transform class
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
358 *
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
359 * defines a class of affine transformations
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
360 */
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
361 var transform = function(spec) {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
362 var that = {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
363 m00 : 1.0,
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
364 m01 : 0.0,
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
365 m02 : 0.0,
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
366 m10 : 0.0,
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
367 m11 : 1.0,
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
368 m12 : 0.0,
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
369 m20 : 0.0,
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
370 m21 : 0.0,
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
371 m22 : 1.0
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
372 };
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
373 if (spec) {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
374 jQuery.extend(that, spec);
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
375 }
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
376 ;
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
377 that.concat = function(trafA) {
1075
1e4f4964e9c2 CLOSED - # 25: scroll arrows have wrong direction with mirror and rot
robcast
parents: 1012
diff changeset
378 // add Transform trafA to this Transform (i.e. this = trafC = trafA * this)
785
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
379 var trafC = {};
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
380 for ( var i = 0; i < 3; i++) {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
381 for ( var j = 0; j < 3; j++) {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
382 var c = 0.0;
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
383 for ( var k = 0; k < 3; k++) {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
384 c += trafA["m" + i + k] * this["m" + k + j];
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
385 }
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
386 trafC["m" + i + j] = c;
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
387 }
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
388 }
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
389 jQuery.extend(this, trafC);
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
390 return this;
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
391 };
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
392 that.transform = function(rect) {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
393 // returns transformed Rectangle or Position with this Transform
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
394 // applied
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
395 var x = this.m00 * rect.x + this.m01 * rect.y + this.m02;
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
396 var y = this.m10 * rect.x + this.m11 * rect.y + this.m12;
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
397 var pt = position(x, y);
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
398 if (rect.width) {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
399 // transform the other corner point
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
400 var pt2 = this.transform(rect.getPt2());
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
401 return rectangle(pt, pt2);
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
402 }
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
403 return pt;
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
404 };
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
405 that.invtransform = function(rect) {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
406 // returns transformed Rectangle or Position with the inverse of
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
407 // this Transform applied
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
408 var det = this.m00 * this.m11 - this.m01 * this.m10;
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
409 var x = (this.m11 * rect.x - this.m01 * rect.y - this.m11
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
410 * this.m02 + this.m01 * this.m12)
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
411 / det;
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
412 var y = (-this.m10 * rect.x + this.m00 * rect.y + this.m10
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
413 * this.m02 - this.m00 * this.m12)
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
414 / det;
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
415 var pt = position(x, y);
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
416 if (rect.width) {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
417 // transform the other corner point
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
418 var pt2 = this.invtransform(rect.getPt2());
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
419 return rectangle(pt, pt2);
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
420 }
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
421 return pt;
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
422 };
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
423 that.toString = function(pretty) {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
424 var s = '[';
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
425 if (pretty)
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
426 s += '\n';
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
427 for ( var i = 0; i < 3; ++i) {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
428 s += '[';
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
429 for ( var j = 0; j < 3; ++j) {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
430 if (j)
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
431 s += ',';
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
432 s += this['m' + i + j];
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
433 }
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
434 s += ']';
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
435 if (pretty)
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
436 s += '\n';
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
437 }
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
438 s += ']';
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
439 if (pretty)
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
440 s += '\n';
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
441 return s;
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
442 };
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
443 // add class methods to instance
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
444 that.getRotation = transform.getRotation;
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
445 that.getRotationAround = transform.getRotationAround;
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
446 that.getTranslation = transform.getTranslation;
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
447 that.getMirror = transform.getMirror;
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
448 that.getScale = transform.getScale;
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
449
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
450 return that;
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
451 };
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
452
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
453 transform.getRotation = function(angle) {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
454 // returns a Transform that is a rotation by angle degrees around [0,0]
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
455 if (angle !== 0) {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
456 var t = Math.PI * parseFloat(angle) / 180.0;
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
457 var cost = Math.cos(t);
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
458 var sint = Math.sin(t);
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
459 var traf = {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
460 m00 : cost,
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
461 m01 : -sint,
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
462 m10 : sint,
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
463 m11 : cost
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
464 };
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
465 return transform(traf);
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
466 }
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
467 return transform();
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
468 };
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
469
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
470 transform.getRotationAround = function(angle, pos) {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
471 // returns a Transform that is a rotation by angle degrees around pos
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
472 var traf = transform.getTranslation(pos.neg());
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
473 traf.concat(transform.getRotation(angle));
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
474 traf.concat(transform.getTranslation(pos));
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
475 return traf;
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
476 };
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
477
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
478 transform.getTranslation = function(pos) {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
479 // returns a Transform that is a translation by [pos.x, pos,y]
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
480 var traf = {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
481 m02 : pos.x,
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
482 m12 : pos.y
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
483 };
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
484 return transform(traf);
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
485 };
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
486
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
487 transform.getMirror = function(type) {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
488 // returns a Transform that is a mirror about the axis type
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
489 if (type === 'x') {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
490 var traf = {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
491 m00 : 1,
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
492 m11 : -1
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
493 };
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
494 } else {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
495 var traf = {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
496 m00 : -1,
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
497 m11 : 1
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
498 };
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
499 }
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
500 return transform(traf);
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
501 };
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
502
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
503 transform.getScale = function(size) {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
504 // returns a Transform that is a scale by [size.width, size.height]
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
505 var traf = {
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
506 m00 : size.width,
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
507 m11 : size.height
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
508 };
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
509 return transform(traf);
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
510 };
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
511
786
868c2e795aca new plugin architecture.
robcast
parents: 785
diff changeset
512 // export constructor functions to digilib plugin
793
63c1b33e38b1 documentation for new plugin api in jquery-digilib-plugin.txt.
robcast
parents: 788
diff changeset
513 var geometry = {
786
868c2e795aca new plugin architecture.
robcast
parents: 785
diff changeset
514 size : size,
868c2e795aca new plugin architecture.
robcast
parents: 785
diff changeset
515 position : position,
868c2e795aca new plugin architecture.
robcast
parents: 785
diff changeset
516 rectangle : rectangle,
868c2e795aca new plugin architecture.
robcast
parents: 785
diff changeset
517 transform : transform
793
63c1b33e38b1 documentation for new plugin api in jquery-digilib-plugin.txt.
robcast
parents: 788
diff changeset
518 };
63c1b33e38b1 documentation for new plugin api in jquery-digilib-plugin.txt.
robcast
parents: 788
diff changeset
519 // install function called by digilib on plugin object
63c1b33e38b1 documentation for new plugin api in jquery-digilib-plugin.txt.
robcast
parents: 788
diff changeset
520 var install = function() {
63c1b33e38b1 documentation for new plugin api in jquery-digilib-plugin.txt.
robcast
parents: 788
diff changeset
521 // add constructor object to fn
63c1b33e38b1 documentation for new plugin api in jquery-digilib-plugin.txt.
robcast
parents: 788
diff changeset
522 this.fn.geometry = geometry;
785
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
523 };
793
63c1b33e38b1 documentation for new plugin api in jquery-digilib-plugin.txt.
robcast
parents: 788
diff changeset
524 // digilib plugin object
63c1b33e38b1 documentation for new plugin api in jquery-digilib-plugin.txt.
robcast
parents: 788
diff changeset
525 var plugin = {
63c1b33e38b1 documentation for new plugin api in jquery-digilib-plugin.txt.
robcast
parents: 788
diff changeset
526 name : 'geometry',
63c1b33e38b1 documentation for new plugin api in jquery-digilib-plugin.txt.
robcast
parents: 788
diff changeset
527 install : install,
63c1b33e38b1 documentation for new plugin api in jquery-digilib-plugin.txt.
robcast
parents: 788
diff changeset
528 fn : {},
63c1b33e38b1 documentation for new plugin api in jquery-digilib-plugin.txt.
robcast
parents: 788
diff changeset
529 // TODO: remove old init
63c1b33e38b1 documentation for new plugin api in jquery-digilib-plugin.txt.
robcast
parents: 788
diff changeset
530 init : init
63c1b33e38b1 documentation for new plugin api in jquery-digilib-plugin.txt.
robcast
parents: 788
diff changeset
531 };
63c1b33e38b1 documentation for new plugin api in jquery-digilib-plugin.txt.
robcast
parents: 788
diff changeset
532 // TODO: remove old version of init returning contructor
63c1b33e38b1 documentation for new plugin api in jquery-digilib-plugin.txt.
robcast
parents: 788
diff changeset
533 var init = function () {
63c1b33e38b1 documentation for new plugin api in jquery-digilib-plugin.txt.
robcast
parents: 788
diff changeset
534 return geometry;
63c1b33e38b1 documentation for new plugin api in jquery-digilib-plugin.txt.
robcast
parents: 788
diff changeset
535 };
63c1b33e38b1 documentation for new plugin api in jquery-digilib-plugin.txt.
robcast
parents: 788
diff changeset
536 // plug into digilib
786
868c2e795aca new plugin architecture.
robcast
parents: 785
diff changeset
537 if ($.fn.digilib == null) {
868c2e795aca new plugin architecture.
robcast
parents: 785
diff changeset
538 $.error("jquery.digilib.geometry must be loaded after jquery.digilib!");
868c2e795aca new plugin architecture.
robcast
parents: 785
diff changeset
539 } else {
793
63c1b33e38b1 documentation for new plugin api in jquery-digilib-plugin.txt.
robcast
parents: 788
diff changeset
540 $.fn.digilib('plugin', plugin);
786
868c2e795aca new plugin architecture.
robcast
parents: 785
diff changeset
541 }
785
b9a75079aece geometry as first digilib plugin.
robcast
parents:
diff changeset
542 })(jQuery);