Statistics
| Revision:

root / branches / v2_0_0_prep / libraries / org.gvsig.openjdk.v1_6 / src / main / java / org / gvsig / openjdk / v1_6 / sun / awt / geom / Edge.java @ 31668

History | View | Annotate | Download (3.68 KB)

1
/*
2
 * Copyright 1998 Sun Microsystems, Inc.  All Rights Reserved.
3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
 *
5
 * This code is free software; you can redistribute it and/or modify it
6
 * under the terms of the GNU General Public License version 2 only, as
7
 * published by the Free Software Foundation.  Sun designates this
8
 * particular file as subject to the "Classpath" exception as provided
9
 * by Sun in the LICENSE file that accompanied this code.
10
 *
11
 * This code is distributed in the hope that it will be useful, but WITHOUT
12
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14
 * version 2 for more details (a copy is included in the LICENSE file that
15
 * accompanied this code).
16
 *
17
 * You should have received a copy of the GNU General Public License version
18
 * 2 along with this work; if not, write to the Free Software Foundation,
19
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20
 *
21
 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
22
 * CA 95054 USA or visit www.sun.com if you need additional information or
23
 * have any questions.
24
 */
25

    
26
package org.gvsig.openjdk.v1_6.sun.awt.geom;
27

    
28
final class Edge {
29
    static final int INIT_PARTS = 4;
30
    static final int GROW_PARTS = 10;
31

    
32
    Curve curve;
33
    int ctag;
34
    int etag;
35
    double activey;
36
    int equivalence;
37

    
38
    Edge(Curve c, int ctag) {
39
        this(c, ctag, AreaOp.ETAG_IGNORE);
40
    }
41

    
42
    Edge(Curve c, int ctag, int etag) {
43
        this.curve = c;
44
        this.ctag = ctag;
45
        this.etag = etag;
46
    }
47

    
48
    public Curve getCurve() {
49
        return curve;
50
    }
51

    
52
    public int getCurveTag() {
53
        return ctag;
54
    }
55

    
56
    public int getEdgeTag() {
57
        return etag;
58
    }
59

    
60
    public void setEdgeTag(int etag) {
61
        this.etag = etag;
62
    }
63

    
64
    public int getEquivalence() {
65
        return equivalence;
66
    }
67

    
68
    public void setEquivalence(int eq) {
69
        equivalence = eq;
70
    }
71

    
72
    private Edge lastEdge;
73
    private int lastResult;
74
    private double lastLimit;
75

    
76
    public int compareTo(Edge other, double yrange[]) {
77
        if (other == lastEdge && yrange[0] < lastLimit) {
78
            if (yrange[1] > lastLimit) {
79
                yrange[1] = lastLimit;
80
            }
81
            return lastResult;
82
        }
83
        if (this == other.lastEdge && yrange[0] < other.lastLimit) {
84
            if (yrange[1] > other.lastLimit) {
85
                yrange[1] = other.lastLimit;
86
            }
87
            return 0-other.lastResult;
88
        }
89
        //long start = System.currentTimeMillis();
90
        int ret = curve.compareTo(other.curve, yrange);
91
        //long end = System.currentTimeMillis();
92
        /*
93
        System.out.println("compare: "+
94
                           ((System.identityHashCode(this) <
95
                             System.identityHashCode(other))
96
                            ? this+" to "+other
97
                            : other+" to "+this)+
98
                           " == "+ret+" at "+yrange[1]+
99
                           " in "+(end-start)+"ms");
100
         */
101
        lastEdge = other;
102
        lastLimit = yrange[1];
103
        lastResult = ret;
104
        return ret;
105
    }
106

    
107
    public void record(double yend, int etag) {
108
        this.activey = yend;
109
        this.etag = etag;
110
    }
111

    
112
    public boolean isActiveFor(double y, int etag) {
113
        return (this.etag == etag && this.activey >= y);
114
    }
115

    
116
    public String toString() {
117
        return ("Edge["+curve+
118
                ", "+
119
                (ctag == AreaOp.CTAG_LEFT ? "L" : "R")+
120
                ", "+
121
                (etag == AreaOp.ETAG_ENTER ? "I" :
122
                 (etag == AreaOp.ETAG_EXIT ? "O" : "N"))+
123
                "]");
124
    }
125
}