source: subversion/applications/editors/potlatch/node.as @ 14710

Last change on this file since 14710 was 14710, checked in by richard, 11 years ago

fix nodes bug

  • Property svn:executable set to *
File size: 2.7 KB
Line 
1
2        // Originally 0=x, 1=y, 2=id, 4=tags;
3        // now .x, .y, .id, .attr
4
5        function Node(id,x,y,attr,version) {
6                this.id=id;
7                this.x=x;
8                this.y=y;
9                this.attr=attr;
10                this.tagged=hasTags(attr);
11                this.ways=new Object();
12                this.version=version;
13                this.clean=false;               // set to true if just loaded from server
14        };
15
16        Node.prototype.markDirty=function() {
17                // doesn't really need to be a discrete function,
18                // but keeping it in for now
19                this.clean=false;
20        };
21
22        Node.prototype.removeFromAllWays=function() {
23                var qway,qs,x,y,attr;
24                var waylist=new Array(); var poslist=new Array();
25                var z=this.ways; for (qway in z) {      // was in _root.map.ways
26                        for (qs=0; qs<_root.map.ways[qway].path.length; qs+=1) {
27                                if (_root.map.ways[qway].path[qs]==this) {
28                                        waylist.push(qway); poslist.push(qs);
29                                        _root.map.ways[qway].path.splice(qs,1);
30                                }
31                        }
32                        _root.map.ways[qway].clean=false;
33                        _root.map.ways[qway].removeDuplicates();
34                        if (_root.map.ways[qway].path.length<2) { _root.map.ways[qway].remove(); }
35                                                                                           else { _root.map.ways[qway].redraw(); }
36                }
37                if (_root.wayselected) { _root.ws.select(); }
38                _root.undo.append(UndoStack.prototype.undo_deletepoint,
39                                                  new Array(deepCopy(this),waylist,poslist),
40                                                  "deleting a point");
41        };
42
43        Node.prototype.moveTo=function(newx,newy,ignoreway) {
44                this.x=newx; this.y=newy; this.markDirty();
45                var qchanged;
46                var z=this.ways; for (var qway in z) {
47                        if (qway!=ignoreway) { _root.map.ways[qway].redraw(); qchanged=qway; }
48                }
49                return qchanged;        // return ID of last changed way
50        };
51
52        Node.prototype.renumberTo=function(id) {
53                var old=this.id;
54                nodes[id]=new Node(id,this.x,this.y,this.attr,this.version);
55                nodes[id].clean=this.clean;
56                var z=this.ways; for (var qway in z) {
57                        nodes[id].addWay(qway);
58                        for (var qs=0; qs<_root.map.ways[qway].path.length; qs+=1) {
59                                if (_root.map.ways[qway].path[qs].id==old) {
60                                        _root.map.ways[qway].path[qs]=nodes[id];
61                                }
62                        }
63                }
64                var z=_root.map.anchors; for (var a in z) {
65                        if (_root.map.anchors[a].node==old) { _root.map.anchors[a].node=id; }
66                }
67                var z=_root.map.anchorhints; for (var a in z) {
68                        if (_root.map.anchorhints[a].node==old) { _root.map.anchorhints[a].node=id; }
69                }
70        };
71
72        // ------------------------------------------------------------------------
73        // Node->way mapping
74       
75        Node.prototype.addWay=function(id) { this.ways[id]=true; };
76        Node.prototype.removeWay=function(id) { delete this.ways[id]; };
77
78        // ------------------------------------------------------------------------
79        // Support functions
80       
81        // hasTags - does a tag hash contain any significant tags?
82
83        function hasTags(a) {
84                var c=false;
85                for (var j in a) {
86                        if (a[j] != '' && j != 'attribution' && 
87                                j != 'created_by' && j!='source' &&     
88                                j.indexOf('tiger:')!=0) { c=true; }
89                }
90                return c;
91        }
Note: See TracBrowser for help on using the repository browser.