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

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

lots of relations changes for speed and version management

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