blob: 6ea46e387ec94bc4cbe6a1eb057a257ea9b17848 [file] [log] [blame]
J. Duke319a3b92007-12-01 00:00:00 +00001/*
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
26package sun.awt.geom;
27
28final 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 public Edge(Curve c, int ctag) {
39 this(c, ctag, AreaOp.ETAG_IGNORE);
40 }
41
42 public 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}