/* * Copyright (c) 1998, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */package sun.awt.geom;final class Edge { static final int INIT_PARTS = 4; static final int GROW_PARTS = 10; Curve curve; int ctag; int etag; double activey; int equivalence; public Edge(Curve c, int ctag) { this(c, ctag, AreaOp.ETAG_IGNORE); } public Edge(Curve c, int ctag, int etag) { this.curve = c; this.ctag = ctag; this.etag = etag; } public Curve getCurve() { return curve; } public int getCurveTag() { return ctag; } public int getEdgeTag() { return etag; } public void setEdgeTag(int etag) { this.etag = etag; } public int getEquivalence() { return equivalence; } public void setEquivalence(int eq) { equivalence = eq; } private Edge lastEdge; private int lastResult; private double lastLimit; public int compareTo(Edge other, double yrange[]) { if (other == lastEdge && yrange[0] < lastLimit) { if (yrange[1] > lastLimit) { yrange[1] = lastLimit; } return lastResult; } if (this == other.lastEdge && yrange[0] < other.lastLimit) { if (yrange[1] > other.lastLimit) { yrange[1] = other.lastLimit; } return 0-other.lastResult; } //long start = System.currentTimeMillis(); int ret = curve.compareTo(other.curve, yrange); //long end = System.currentTimeMillis(); /* System.out.println("compare: "+ ((System.identityHashCode(this) < System.identityHashCode(other)) ? this+" to "+other : other+" to "+this)+ " == "+ret+" at "+yrange[1]+ " in "+(end-start)+"ms"); */ lastEdge = other; lastLimit = yrange[1]; lastResult = ret; return ret; } public void record(double yend, int etag) { this.activey = yend; this.etag = etag; } public boolean isActiveFor(double y, int etag) { return (this.etag == etag && this.activey >= y); } public String toString() { return ("Edge["+curve+ ", "+ (ctag == AreaOp.CTAG_LEFT ? "L" : "R")+ ", "+ (etag == AreaOp.ETAG_ENTER ? "I" : (etag == AreaOp.ETAG_EXIT ? "O" : "N"))+ "]"); }}
/*
* Copyright (c) 1998, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package sun.awt.geom;
final class Edge {
static final int INIT_PARTS = 4;
static final int GROW_PARTS = 10;
Curve curve;
int ctag;
int etag;
double activey;
int equivalence;
public Edge(Curve c, int ctag) {
this(c, ctag, AreaOp.ETAG_IGNORE);
}
public Edge(Curve c, int ctag, int etag) {
this.curve = c;
this.ctag = ctag;
this.etag = etag;
}
public Curve getCurve() {
return curve;
}
public int getCurveTag() {
return ctag;
}
public int getEdgeTag() {
return etag;
}
public void setEdgeTag(int etag) {
this.etag = etag;
}
public int getEquivalence() {
return equivalence;
}
public void setEquivalence(int eq) {
equivalence = eq;
}
private Edge lastEdge;
private int lastResult;
private double lastLimit;
public int compareTo(Edge other, double yrange[]) {
if (other == lastEdge && yrange[0] < lastLimit) {
if (yrange[1] > lastLimit) {
yrange[1] = lastLimit;
}
return lastResult;
}
if (this == other.lastEdge && yrange[0] < other.lastLimit) {
if (yrange[1] > other.lastLimit) {
yrange[1] = other.lastLimit;
}
return 0-other.lastResult;
}
//long start = System.currentTimeMillis();
int ret = curve.compareTo(other.curve, yrange);
//long end = System.currentTimeMillis();
/*
System.out.println("compare: "+
((System.identityHashCode(this) <
System.identityHashCode(other))
? this+" to "+other
: other+" to "+this)+
" == "+ret+" at "+yrange[1]+
" in "+(end-start)+"ms");
*/
lastEdge = other;
lastLimit = yrange[1];
lastResult = ret;
return ret;
}
public void record(double yend, int etag) {
this.activey = yend;
this.etag = etag;
}
public boolean isActiveFor(double y, int etag) {
return (this.etag == etag && this.activey >= y);
}
public String toString() {
return ("Edge["+curve+
", "+
(ctag == AreaOp.CTAG_LEFT ? "L" : "R")+
", "+
(etag == AreaOp.ETAG_ENTER ? "I" :
(etag == AreaOp.ETAG_EXIT ? "O" : "N"))+
"]");
}
}