// **********************************************************************
//
// <copyright>
//
// BBN Technologies
// 10 Moulton Street
// Cambridge, MA 02138
// (617) 873-8000
//
// Copyright (C) BBNT Solutions LLC. All rights reserved.
//
// </copyright>
// **********************************************************************
//
// $Source:
// /cvs/distapps/openmap/src/openmap/com/bbn/openmap/layer/e00/ArcData.java,v
// $
// $RCSfile: ArcData.java,v $
// $Revision: 1.5 $
// $Date: 2009/01/21 01:24:41 $
// $Author: dietrick $
//
// **********************************************************************
package com.bbn.openmap.layer.e00;
public class ArcData
extends E00Data {
double[] coords;
int deja = 0;
public ArcData() {
}
public ArcData(E00Data d) {
valeur = d.valeur;
valeur2 = d.valeur2;
id = d.id;
type = d.type;
}
ArcData c0, c1, f0, f1, c2, f2;
int numpoint;
void setC(ArcData d) {
if (d.type == 0) {
if (c0 == null)
c0 = d;
else
c2 = d;
if (type == 1)
d.valeur2 = valeur;
} else if (d.type == 1) {
if (c1 == null)
c1 = d;
else
c2 = d;
if (type == 0)
valeur = d.valeur;
}
}
void setF(ArcData d) {
if (d.type == 0) {
if (f0 == null)
f0 = d;
else
f2 = d;
if (type == 1)
d.valeur = valeur;
} else if (d.type == 1) {
if (f1 == null)
f1 = d;
else
f2 = d;
if (type == 0)
valeur2 = d.valeur;
}
}
void print() {
System.out.print("arc " + id + " type " + type + " ");
System.out.print((c0 != null) ? c0.id : 0);
System.out.print(' ');
System.out.print((f0 != null) ? f0.id : 0);
System.out.print(' ');
System.out.print((c1 != null) ? c1.id : 0);
System.out.print(' ');
System.out.print((f1 != null) ? f1.id : 0);
System.out.print(' ');
System.out.print((c2 != null) ? c2.id : 0);
System.out.print(' ');
System.out.print((f2 != null) ? f2.id : 0);
System.out.println();
}
ArcData visit(ArcData d) {
ArcData g1, g2, h1, h2;
if (d.type > 1)
return null;
if ((d == c0) || (d == c1) || (d == c2)) {
deja = 1;
if (f0 != null)
return f0;
h1 = f1;
h2 = f2;
} else if ((d == f0) || (d == f1) || (d == f2)) {
deja = -1;
if (c0 != null)
return c0;
h1 = c1;
h2 = c2;
} else {
System.out.println("ERREUR " + id);
return null;
}
g1 = teste(h1);
g2 = teste(h2);
if (g1 == null)
return h2;
if (g2 != null)
System.out.print("(ALT " + h2.id + ")");
return h1;
}
ArcData teste(ArcData d) {
if (d == null)
return null;
if (d.deja != 0)
return null;
ArcData h = null;
if (d.c0 == this)
h = d.f0;
else if (d.f0 == this)
h = d.c0;
else
System.out.println("ERREUR " + id + " " + d.id);
if (h == null)
return null;
if (((h.f1 == d) || (h.f2 == d)) && (h.f0 == null) && (h.deja <= 0))
return h;
if (((h.c1 == d) || (h.c2 == d)) && (h.c0 == null) && (h.deja >= 0))
return h;
return null;
}
ArcData visit() {
if (f0 != null)
return f0;
if (c0 != null)
return c0;
return null;
}
ArcData[] getChaine0() {
deja = 1;
ArcData d1, d2, di, df;
d1 = this;
d2 = c0;
while (d2 != null) {
if (d2 == this) {
System.out.println("Arc " + id);
return new ArcData[] {
this,
null
};
}
d2.deja = 1;
if (d2.c0 == d1) {
d1 = d2;
d2 = d2.f0;
} else if (d2.f0 == d1) {
d1 = d2;
d2 = d2.c0;
} else {
System.out.println("Erreur " + d1.id + "->" + d2.id);
break;
}
}
di = d1;
d1 = this;
d2 = f0;
while (d2 != null) {
d2.deja = 1;
if (d2.c0 == d1) {
d1 = d2;
d2 = d2.f0;
} else if (d2.f0 == d1) {
d1 = d2;
d2 = d2.c0;
} else {
System.out.println("Erreur " + d1.id + "->" + d2.id);
break;
}
}
df = d1;
System.out.println("arc " + di.id + "->" + df.id);
return new ArcData[] {
di,
df
};
}
}