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

Last change on this file since 14979 was 14904, checked in by richard, 10 years ago

Potlatch 0.11b

  • Property svn:executable set to *
File size: 3.1 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                this.uploading=false;
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                                        _root.map.ways[qway].deletednodes[this.id]=this.version;
32                                        // needs to be in every way's .deletednodes - if it's just one, the API will refuse
33                                        // to delete it, because it's still in the other (not yet rewritten) way
34                                }
35                        }
36                        _root.map.ways[qway].clean=false;
37                        _root.map.ways[qway].removeDuplicates();
38                        if (_root.map.ways[qway].path.length<2) { _root.map.ways[qway].remove(); }
39                                                                                           else { _root.map.ways[qway].redraw(); }
40                }
41                if (_root.wayselected) { _root.ws.select(); }
42                _root.undo.append(UndoStack.prototype.undo_deletepoint,
43                                                  new Array(deepCopy(this),waylist,poslist),
44                                                  "deleting a point");
45        };
46
47        Node.prototype.moveTo=function(newx,newy,ignoreway) {
48                this.x=newx; this.y=newy; this.markDirty();
49                var qchanged;
50                var z=this.ways; for (var qway in z) {
51                        if (qway!=ignoreway) { _root.map.ways[qway].redraw(); qchanged=qway; }
52                }
53                return qchanged;        // return ID of last changed way
54        };
55
56        Node.prototype.renumberTo=function(id) {
57                var old=this.id;
58                noderels[id]=noderels[old]; delete noderels[old];
59                nodes[id]=new Node(id,this.x,this.y,this.attr,this.version);
60                nodes[id].clean=this.clean;
61                var z=this.ways; for (var qway in z) {
62                        nodes[id].addWay(qway);
63                        for (var qs=0; qs<_root.map.ways[qway].path.length; qs+=1) {
64                                if (_root.map.ways[qway].path[qs].id==old) {
65                                        _root.map.ways[qway].path[qs]=nodes[id];
66                                }
67                        }
68                }
69                var z=_root.map.anchors; for (var a in z) {
70                        if (_root.map.anchors[a].node==old) { _root.map.anchors[a].node=id; }
71                }
72                var z=_root.map.anchorhints; for (var a in z) {
73                        if (_root.map.anchorhints[a].node==old) { _root.map.anchorhints[a].node=id; }
74                }
75        };
76
77        // ------------------------------------------------------------------------
78        // Node->way mapping
79       
80        Node.prototype.addWay=function(id) { this.ways[id]=true; };
81        Node.prototype.removeWay=function(id) { delete this.ways[id]; };
82        Node.prototype.numberOfWays=function() { var z=this.ways; var c=0; for (var i in z) { c++; } return c; };
83
84        // ------------------------------------------------------------------------
85        // Support functions
86       
87        // hasTags - does a tag hash contain any significant tags?
88
89        function hasTags(a) {
90                var c=false;
91                for (var j in a) {
92                        if (a[j] != '' && j != 'attribution' && 
93                                j != 'created_by' && j!='source' &&     
94                                j.indexOf('tiger:')!=0) { c=true; }
95                }
96                return c;
97        }
Note: See TracBrowser for help on using the repository browser.