package com.ximple.io.dgn7;
|
|
import java.util.ArrayList;
|
import java.util.Collection;
|
import java.util.Iterator;
|
import java.util.List;
|
import java.util.ListIterator;
|
|
import org.apache.log4j.Logger;
|
|
import com.vividsolutions.jts.geom.Geometry;
|
import com.vividsolutions.jts.geom.GeometryFactory;
|
import com.vividsolutions.jts.geom.LineString;
|
|
/**
|
* ComplexChainElement
|
*
|
* @author Ulysses
|
* @version 0.1
|
* @since 2006/5/18 下午 03:44:56
|
*/
|
public class ComplexChainElement extends Element implements ComplexElement, GeometryConverter
|
{
|
private static final Logger logger = Logger.getLogger(ComplexChainElement.class);
|
|
protected ArrayList<Element> list = new ArrayList<Element>();
|
|
public ComplexChainElement(byte[] raw)
|
{
|
super(raw);
|
attrOffset = 4;
|
}
|
|
public int size()
|
{
|
return list.size();
|
}
|
|
public boolean isEmpty()
|
{
|
return list.isEmpty();
|
}
|
|
public boolean contains(Object o)
|
{
|
return list.contains(o);
|
}
|
|
public Iterator iterator()
|
{
|
return list.iterator();
|
}
|
|
public Object[] toArray()
|
{
|
return list.toArray();
|
}
|
|
public <T> T[] toArray(T[] ts)
|
{
|
return list.toArray(ts);
|
}
|
|
public boolean add(Element element)
|
{
|
return list.add(element);
|
}
|
|
public boolean remove(Object o)
|
{
|
return list.remove(o);
|
}
|
|
public boolean containsAll(Collection<?> objects)
|
{
|
return list.containsAll(objects);
|
}
|
|
public boolean addAll(Collection<? extends Element> elements)
|
{
|
return list.addAll(elements);
|
}
|
|
public boolean addAll(int i, Collection<? extends Element> elements)
|
{
|
return list.addAll(i, elements);
|
}
|
|
public boolean removeAll(Collection<?> objects)
|
{
|
return list.removeAll(objects);
|
}
|
|
public boolean retainAll(Collection<?> objects)
|
{
|
return list.retainAll(objects);
|
}
|
|
public void clear()
|
{
|
list.clear();
|
}
|
|
public Element get(int index)
|
{
|
return list.get(index);
|
}
|
|
public Element set(int i, Element element)
|
{
|
return list.set(i, element);
|
}
|
|
public void add(int i, Element element)
|
{
|
list.add(i, element);
|
}
|
|
public Element remove(int index)
|
{
|
return list.remove(index);
|
}
|
|
public int indexOf(Object o)
|
{
|
return list.indexOf(o);
|
}
|
|
public int lastIndexOf(Object o)
|
{
|
return list.lastIndexOf(o);
|
}
|
|
public ListIterator listIterator()
|
{
|
return list.listIterator();
|
}
|
|
public ListIterator listIterator(int index)
|
{
|
return list.listIterator(index);
|
}
|
|
public List subList(int fromIndex, int toIndex)
|
{
|
return list.subList(fromIndex, toIndex);
|
}
|
|
public Geometry toGeometry(GeometryFactory factory)
|
{
|
ArrayList<LineString> lineStrings = new ArrayList<LineString>();
|
|
for (ListIterator it = listIterator(); it.hasNext();)
|
{
|
Element element = (Element) it.next();
|
|
if (element instanceof LineStringElement)
|
{
|
if (((LineStringElement) element).getVerticeSize() == 0 || ((LineStringElement) element).getVerticeSize() > 1)
|
{
|
lineStrings.add((LineString) ((LineStringElement) element).toGeometry(factory));
|
}
|
|
} else if (element instanceof LineElement)
|
{
|
|
if (((LineElement) element).getVertices().length == 0 || ((LineElement) element).getVertices().length > 1)
|
{
|
lineStrings.add((LineString) ((LineElement) element).toGeometry(factory));
|
}
|
} else if (element instanceof ArcElement)
|
{
|
lineStrings.add((LineString) ((ArcElement) element).toGeometry(factory));
|
}
|
}
|
|
LineString[] lines = lineStrings.toArray(new LineString[lineStrings.size()]);
|
if ((lines == null) || (lines.length == 0))
|
return null;
|
return factory.createMultiLineString(lines);
|
}
|
|
public double getElementSize()
|
{
|
return raw[18];
|
}
|
|
public boolean isClosed()
|
{
|
if (isEmpty())
|
{
|
return false;
|
}
|
|
return false;
|
}
|
|
public static class ElementHandler extends Element.ElementHandler
|
{
|
private static ElementHandler instance = null;
|
|
public ElementHandler()
|
{
|
super(ElementType.COMPLEXCHAIN);
|
}
|
|
public static IElementHandler getInstance()
|
{
|
if (instance == null)
|
{
|
instance = new ElementHandler();
|
}
|
|
return instance;
|
}
|
|
protected Element createElement(byte[] raw)
|
{
|
return new ComplexChainElement(raw);
|
}
|
}
|
}
|