package org.geotools.data.dxf.entities;
import java.io.EOFException;
import org.geotools.data.dxf.parser.DXFLineNumberReader;
import java.io.IOException;
import org.geotools.data.GeometryType;
import org.geotools.data.dxf.parser.DXFUnivers;
import org.geotools.data.dxf.header.DXFBlock;
import org.geotools.data.dxf.header.DXFBlockReference;
import org.geotools.data.dxf.header.DXFLayer;
import org.geotools.data.dxf.header.DXFLineType;
import org.geotools.data.dxf.parser.DXFCodeValuePair;
import org.geotools.data.dxf.parser.DXFGroupCode;
import org.geotools.data.dxf.parser.DXFParseException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
*
*
* @source $URL$
*/
public class DXFDimension extends DXFBlockReference {
private static final Log log = LogFactory.getLog(DXFDimension.class);
public double _angle = 0;//50
public String _dimension = "<>";//1
public DXFPoint _point_WCS = new DXFPoint();//10,20
public DXFDimension(DXFDimension newDimension) {
this(newDimension._angle, newDimension._dimension, newDimension._point_WCS._point.x, newDimension._point_WCS._point.y,
newDimension._refBlock, newDimension._blockName, newDimension.getRefLayer(), 0, newDimension.getColor(), newDimension.getLineType());
setType(newDimension.getType());
setStartingLineNumber(newDimension.getStartingLineNumber());
setUnivers(newDimension.getUnivers());
}
public DXFDimension(double a, String dim, double x, double y, DXFBlock refBlock, String nomBlock, DXFLayer l, int visibility, int c, DXFLineType lineType) {
super(c, l, visibility, null, nomBlock, refBlock);
_angle = a;
_dimension = dim;
_point_WCS = new DXFPoint(x, y, c, null, visibility, 1);
setName("DXFDimension");
}
public DXFDimension(double a, String dim, double x, double y, DXFBlock refBlock, String nomBlock, DXFLayer l, int visibility, int c, DXFLineType lineType, DXFExtendedData extData) {
super(c, l, visibility, null, nomBlock, refBlock);
_angle = a;
_dimension = dim;
_point_WCS = new DXFPoint(x, y, c, null, visibility, 1);
setName("DXFDimension");
_extendedData = extData;
}
public static DXFDimension read(DXFLineNumberReader br, DXFUnivers univers) throws IOException {
String dimension = "", nomBlock = "";
DXFDimension d = null;
DXFLayer l = null;
DXFBlock refBlock = null;
double angle = 0, x = 0, y = 0;
int visibility = 0, c = -1;
DXFLineType lineType = null;
int sln = br.getLineNumber();
log.debug(">>Enter at line: " + sln);
DXFCodeValuePair cvp = null;
DXFGroupCode gc = null;
DXFExtendedData _extData = null;
boolean doLoop = true;
while (doLoop) {
cvp = new DXFCodeValuePair();
try {
gc = cvp.read(br);
} catch (DXFParseException ex) {
throw new IOException("DXF parse error" + ex.getLocalizedMessage());
} catch (EOFException e) {
doLoop = false;
break;
}
switch (gc) {
case TYPE:
String type = cvp.getStringValue();
// geldt voor alle waarden van type
br.reset();
doLoop = false;
break;
case LAYER_NAME: //"8"
l = univers.findLayer(cvp.getStringValue());
break;
case TEXT: //"1"
dimension = cvp.getStringValue();
break;
case ANGLE_1: //"50"
angle = cvp.getDoubleValue();
break;
case NAME: //"2"
nomBlock = cvp.getStringValue();
break;
case LINETYPE_NAME: //"6"
lineType = univers.findLType(cvp.getStringValue());
break;
case X_1: //"10"
x = cvp.getDoubleValue();
break;
case Y_1: //"20"
y = cvp.getDoubleValue();
break;
case VISIBILITY: //"60"
visibility = cvp.getShortValue();
break;
case COLOR: //"62"
c = cvp.getShortValue();
break;
case XDATA_APPLICATION_NAME:
String appName = cvp.getStringValue();
_extData = DXFExtendedData.getExtendedData(br);
_extData.setAppName(appName);
break;
default:
break;
}
}
d = new DXFDimension(angle, dimension, x, y, refBlock, nomBlock, l, visibility, c, lineType, _extData);
d.setType(GeometryType.UNSUPPORTED);
d.setStartingLineNumber(sln);
d.setUnivers(univers);
univers.addRefBlockForUpdate(d);
log.debug(d.toString(dimension, angle, nomBlock, x, y, visibility, c));
log.debug(">>Exit at line: " + br.getLineNumber());
return d;
}
public void updateGeometry(){
// not supported
}
public String toString(String dimension, double angle, String nomBlock, double x, double y, int visibility, int c) {
StringBuffer s = new StringBuffer();
s.append("DXFDimension [");
s.append("dimension: ");
s.append(dimension + ", ");
s.append("angle: ");
s.append(angle + ", ");
s.append("nameBlock: ");
s.append(nomBlock + ", ");
s.append("x: ");
s.append(x + ", ");
s.append("y: ");
s.append(y + ", ");
s.append("visibility: ");
s.append(visibility + ", ");
s.append("color: ");
s.append(c);
s.append("]");
return s.toString();
}
@Override
public DXFEntity translate(double x, double y) {
_point_WCS._point.x += x;
_point_WCS._point.y += y;
return this;
}
@Override
public DXFEntity clone() {
return new DXFDimension(this);
}
}