NCCOOS Trac Projects: Top | Web | Platforms | Processing | Viz | Sprints | Sandbox | (Wind)

root/Chameleon/trunk/Chameleon/js/toolsobj.js

Revision 13 (checked in by jcleary, 17 years ago)

Latest Chameleon code checkout from previous repository

Line 
1 //
2 //This script was contributed by TYDAC AG : http://www.tydac.ch/
3 //
4 /**
5  *
6  * @project     CWC2
7  * @revision    $Id: toolsobj.js,v 1.9 2004/12/19 21:18:39 yassefa Exp $
8  * @purpose     Used with Ruler widget
9  * @author      DM Solutions Group (assefa@dmsolutions.ca)
10  * @copyright
11  * <b>Copyright (c) 2002, DM Solutions Group Inc.</b>
12  * Permission is hereby granted, free of charge, to any person obtaining a
13  * copy of this software and associated documentation files (the "Software"),
14  * to deal in the Software without restriction, including without limitation
15  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
16  * and/or sell copies of the Software, and to permit persons to whom the
17  * Software is furnished to do so, subject to the following conditions:
18  *
19  * The above copyright notice and this permission notice shall be included
20  * in all copies or substantial portions of the Software.
21  *
22  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
25  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
26  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
27  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
28  * DEALINGS IN THE SOFTWARE.
29  */
30 var cursorpixelshift = 2.5;
31 function distancetool(dtmap,ptmax,Ox, Oy){
32         this.theMap = dtmap
33         this.dtOrigX = Ox
34         this.dtOrigY = Oy
35         this.dtPtMax = ptmax
36         this.dtDistance = 0
37         this.dtOffX = 0
38         this.dtOffY =0
39         this.dtInitDist = dtInitDist
40         this.dtCalcDist = dtCalcDist
41         this.dtDrawDist = dtDrawDist
42         this.dtDrawClose = dtDrawClose
43         this.dtSetInflection = dtSetInflection
44         this.dtFinishDist = dtFinishDist
45         this.aaPointTrace = new Array();   // array of points
46         var currPix = 0
47         var startPix = 0
48         var snapDist = 10
49         var dD
50         var Vx
51         var Vy
52         var espace
53           var intervalmin = gRulerSpaceBetweenPoints;
54         var intervalmax = gRulerSpaceBetweenPoints+1;
55         var ODist
56         var nbInf = 0
57         var nodeX = new Array()
58         var nodeY = new Array()
59        
60         function dtInitDist(e, spacebetweenpoints){
61           //alert("dtInitDist");       
62           //alert(spacebetweenpoints);
63                 espace = 20             //pixels - interval between pixels during the drag phase
64                 intervalmin =spacebetweenpoints         //pixels - interval between pixels once definitivly paint
65                 intervalmax = spacebetweenpoints+1;     //pixels - idem
66                 ODist = 0
67                
68                 if (isNav4) {
69                         this.dtOffX = e.pageX - this.theMap.left
70                         this.dtOffY = e.pageY - this.theMap.top
71                 } else if (isNav6) {
72                         this.dtOffX = e.pageX - this.dtOrigX
73                         this.dtOffY = e.pageY - this.dtOrigY
74                 } else {
75                         this.dtOffX = (window.event.clientX + document.body.scrollLeft) - this.dtOrigX
76                         this.dtOffY = (window.event.clientY + document.body.scrollTop) - this.dtOrigY
77                 }
78                
79                 if (gRulerareaMode)
80                 {
81                         if (isNav4 || isNav6)
82                         {
83                                 gRulerareaString = gRulerareaString + '|' + e.pageX + ',' + e.pageY
84                                 startPtX = e.pageX;
85                                 startPtY = e.pageY;
86                         } else {
87                                
88                                 gRulerareaString = gRulerareaString + '|' + window.event.clientX + ',' + window.event.clientY
89                                 startPtX = window.event.clientX;
90                                 startPtY = window.event.clientY;                                       
91                         }
92                 }
93                        
94                 for(var i=1; i<=gRulerNbPoints; i++)
95                 {
96                         hide("pix" + i)
97                 }
98                
99                 shiftTo("pix1", this.dtOrigX + this.dtOffX -cursorpixelshift, this.dtOrigY + this.dtOffY -cursorpixelshift)
100                 show("pix1")
101
102                 for(var i=1; i<=nbInf; i++)
103                 {
104                         hide("pInf" + i)
105                 }
106                 nbInf = 1
107                 if (gRulerg_digitTool){
108                         shiftTo("pInf"+nbInf,this.dtOrigX + this.dtOffX -cursorpixelshift, this.dtOrigY + this.dtOffY -cursorpixelshift)
109                         show("pInf"+nbInf)
110                 }
111                
112                 currPix = 1
113                 startPix = currPix
114         }
115         function dtFinishDist(){
116                 for(var i=1; i<=gRulerNbPoints; i++){hide("pix" + i)}
117                 for(var i=1; i<=nbInf; i++){hide("pInf" + i)}
118         }
119         function dtCalcDist(e){
120                 var dDistX
121                 var dDistY
122                 var nbPix
123                 var i = 0
124                 var alpha
125                 var PixUp = 0
126                 var startPtX = this.dtOrigX + this.dtOffX
127                 var startPtY = this.dtOrigY + this.dtOffY
128                 if (isNav4 || isNav6) {
129                         dDistX = (e.pageX - startPtX)
130                         dDistY = (e.pageY - startPtY)
131                 } else {
132                         dDistX = (window.event.clientX + document.body.scrollLeft - startPtX)
133                         dDistY = (window.event.clientY + document.body.scrollTop - startPtY)
134                 }
135                
136                 if (isNav4){
137                         dD = Math.sqrt((dDistX*dDistX)+(dDistY*dDistY))
138                         nbPix = Math.round(dD/espace)
139                         if (dD != 0)
140                         {
141                                 Vx = dDistX/dD
142                                 Vy = dDistY/dD
143                         } else {
144                                 Vx = 0;
145                                 Vy = 0;
146                         }
147                         PixUp = startPix - 1 + nbPix
148                         if (PixUp > this.dtPtMax){PixUp = this.dtPtMax}
149                         for (i=startPix + 1; i<=  PixUp ; i++){
150                                 shiftTo("pix"+i,this.dtOrigX + this.dtOffX + (i - startPix)*Vx*espace -cursorpixelshift,this.dtOrigY + this.dtOffY +(i - startPix)*Vy*espace -cursorpixelshift)
151                                 show("pix"+i)
152                         }
153                 } else {
154                         dD = Math.sqrt((dDistX*dDistX)+(dDistY*dDistY))
155                         nbPix = 5
156                         if (dD != 0)
157                         {
158                                 Vx = dDistX/dD
159                                 Vy = dDistY/dD
160                         } else {
161                                 Vx = 0;
162                                 Vy = 0;
163                         }
164                        
165                         PixUp = startPix - 1 + nbPix
166                        
167                         if (PixUp > this.dtPtMax){PixUp = this.dtPtMax}
168                        
169                         for (i=startPix + 1; i<= PixUp ; i++){
170                                 shiftTo("pix"+i,this.dtOrigX + this.dtOffX + (i-startPix)*Vx*dD/4 -cursorpixelshift,this.dtOrigY + this.dtOffY +(i-startPix)*Vy*dD/4 -cursorpixelshift)
171                                 show("pix"+i)
172                         }
173                                
174                 }
175                 if ( startPix - 1 + nbPix < currPix && nbPix>0){
176                         for (i = startPix - 1 +nbPix;i <= gRulerNbPoints; i++){hide("pix"+i)}
177                 }
178                 currPix = PixUp
179                 this.dtDistance = ODist + dD
180         }
181         function dtDrawDist(e){
182           //alert("dtDrawDist");
183                 var nbPic = 1
184                 var flag = false
185                 var intervalle
186                 var dDistX
187                 var dDistY
188                 var startPtX = this.dtOrigX + this.dtOffX
189                 var startPtY = this.dtOrigY + this.dtOffY
190                 if (isNav4 || isNav6) {
191                         dDistX = (e.pageX - startPtX)
192                         dDistY = (e.pageY - startPtY)
193                 } else {
194                         dDistX = (window.event.clientX + document.body.scrollLeft - startPtX)
195                         dDistY = (window.event.clientY + document.body.scrollTop - startPtY)
196                 }
197                 var dDist = Math.sqrt((dDistX*dDistX)+(dDistY*dDistY))
198                 do {
199                         intervalle = dDist/nbPic
200                         if (intervalle <= intervalmin){flag = true}
201                         if (intervalle > intervalmax){
202                                 nbPic += 1
203                         } else {
204                                 flag = true
205                         }
206                 } while (flag == false)
207                 if (startPix  + nbPic <= this.dtPtMax){
208                         for (i = startPix + 1; i<= startPix  + nbPic; i++){
209                                 shiftTo("pix"+i,this.dtOrigX + this.dtOffX + (i-startPix)*Vx*intervalle -cursorpixelshift,this.dtOrigY + this.dtOffY +(i-startPix)*Vy*intervalle -cursorpixelshift)
210                                 show("pix"+i)
211                         }
212                         if (gRulerg_digitTool){
213                                 nbInf +=1
214                                 shiftTo("pInf"+nbInf,this.dtOrigX + this.dtOffX + (i-startPix-1)*Vx*intervalle -cursorpixelshift,this.dtOrigY + this.dtOffY +(i-startPix-1)*Vy*intervalle -cursorpixelshift)
215                                 show("pInf"+nbInf)
216                         }
217                         currPix = startPix - 1 +nbPic
218                 }
219
220         }
221        
222     function dtDrawClose(e){
223    
224         // check to see if there are points to use for closing
225         if ( this.aaPointTrace.length <= 0 )
226             return null;
227    
228         //alert("dtDrawClose");
229                 var nbPic = 1
230                 var flag = false
231                 var intervalle
232                 var dDistX
233                 var dDistY
234                 var startPtX = this.dtOrigX + this.dtOffX
235                 var startPtY = this.dtOrigY + this.dtOffY
236                
237         // set the x and y distance from the first point of the polygon
238         dDistX = ( this.aaPointTrace[0][0] - startPtX );
239                 dDistY = ( this.aaPointTrace[0][1] - startPtY );
240
241                 var dDist = Math.sqrt((dDistX*dDistX)+(dDistY*dDistY))
242
243                 // update the direction variables
244                 if (dDist != 0)
245                 {
246                         Vx = dDistX/dDist
247                         Vy = dDistY/dDist
248                 } else {
249                         Vx = 0;
250                         Vy = 0;
251                 }               
252                
253                 // loop and get interval
254                 do {
255                         intervalle = dDist/nbPic
256                         if (intervalle <= intervalmin){flag = true}
257                         if (intervalle > intervalmax){
258                                 nbPic += 1
259                         } else {
260                                 flag = true
261                         }
262                 } while (flag == false)
263                 if (startPix  + nbPic <= this.dtPtMax){
264                         for (i = startPix + 1; i<= startPix  + nbPic; i++){
265                                 shiftTo("pix"+i,this.dtOrigX + this.dtOffX + (i-startPix)*Vx*intervalle-cursorpixelshift,this.dtOrigY + this.dtOffY +(i-startPix)*Vy*intervalle-cursorpixelshift)
266                                 show("pix"+i)
267                         }
268                         if (gRulerg_digitTool){
269                                 nbInf +=1
270                                 shiftTo("pInf"+nbInf,this.dtOrigX + this.dtOffX + (i-startPix-1)*Vx*intervalle -cursorpixelshift,this.dtOrigY + this.dtOffY +(i-startPix-1)*Vy*intervalle -cursorpixelshift)
271                                 show("pInf"+nbInf)
272                         }
273                         currPix = startPix - 1 +nbPic
274                 }
275
276         }
277        
278         function dtSetInflection(e){
279                 var nbPic = Math.round(dD/espace)
280                 if (startPix - 1 + nbPic <= this.dtPtMax){
281                         this.dtDrawDist(e)             
282                         if (isNav4) {
283                                 this.dtOffX = e.pageX - this.theMap.left
284                                 this.dtOffY = e.pageY - this.theMap.top
285                         } else if (isNav6) {
286                                 this.dtOffX = e.pageX - this.dtOrigX
287                                 this.dtOffY = e.pageY - this.dtOrigY
288                         } else {
289                                 this.dtOffX = window.event.clientX + document.body.scrollLeft - this.dtOrigX
290                                 this.dtOffY = window.event.clientY + document.body.scrollTop - this.dtOrigY
291                         }
292                         startPix = currPix
293                         parent.gStartPix = currPix
294                         currPix += 1
295                         startPix = currPix
296                         parent.gStartPix = currPix
297                         ODist = this.dtDistance
298                        
299                         if (parent.gRulerareaMode)
300                         {
301                                 if (isNav4 || isNav6)
302                                 {
303                                         parent.gRulerareaString = parent.gRulerareaString + '|' + e.pageX + ',' + e.pageY
304                                         parent.lastPtX = e.pageX;
305                                         parent.lastPtY = e.pageY;
306                                 } else {
307                                        
308                                         parent.gRulerareaString = parent.gRulerareaString + '|' + window.event.clientX + ',' + window.event.clientY
309                                         parent.lastPtX = window.event.clientX;
310                                         parent.lastPtY = window.event.clientY;                                 
311                                 }
312                         }
313                 }
314         }
315 }
Note: See TracBrowser for help on using the browser.