/******************************************************************************* * Copyright 2010 Simon Mieth * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. ******************************************************************************/ package org.kabeja.dxf.parser.entities; import org.kabeja.DraftDocument; import org.kabeja.common.Layer; import org.kabeja.common.LineType; import org.kabeja.dxf.parser.DXFValue; import org.kabeja.entities.Entity; import org.kabeja.entities.util.Utils; /** * @author <a href="mailto:simon.mieth@gmx.de">Simon Mieth </a> * */ public abstract class AbstractEntityHandler implements DXFEntityHandler { public final static int ELEMENT_REFERENCE = 5; public final static int GROUPCODE_START_X = 10; public final static int GROUPCODE_START_Y = 20; public final static int GROUPCODE_START_Z = 30; public final static int END_X = 11; public final static int END_Y = 21; public final static int END_Z = 31; public final static int LAYER_NAME = 8; public final static int TRANSPARENCY = 440; public final static int COLOR_CODE = 62; public final static int COLORNAME = 430; public final static int COLOR_24BIT = 420; public final static int COLOR_TRANSPARENCY = 440; public final static int FLAGS = 70; public final static int EXTRUSION_X = 210; public final static int EXTRUSION_Y = 220; public final static int EXTRUSION_Z = 230; public final static int VISIBILITY = 60; public final static int LINE_TYPE = 6; public final static int LINE_TYPE_SCALE = 48; public final static int LINE_WEIGHT = 370; public final static int GROUPCODE_THICKNESS = 39; public final static int GROUPCODE_STYLENAME = 3; public final static int GROUPCODE_TEXT = 1; public final static int GROUPCODE_ROTATION_ANGLE = 50; public final static int GROUPCODE_MODELSPACE = 67; public final static int GROUPCODE_OWNER = 330; protected DraftDocument doc; private static Layer lastLayer; private boolean lastLayerPresent; public void setDocument(DraftDocument doc) { this.doc = doc; } protected void parseCommonProperty(int groupCode, DXFValue value, Entity entity) { switch (groupCode) { case ELEMENT_REFERENCE: entity.setID(Utils.parseIDString(value.getValue())); break; case LAYER_NAME: if (lastLayerPresent && lastLayer.getName().equals(value.getValue())) { entity.setLayer(lastLayer); } else { if (this.doc.containsLayer(value.getValue())) { Layer layer = this.doc.getLayer(value.getValue()); entity.setLayer(layer); lastLayer = layer; lastLayerPresent = true; } else { Layer layer = new Layer(); layer.setName(value.getValue()); this.doc.addLayer(layer); entity.setLayer(layer); lastLayer = layer; lastLayerPresent = true; } } break; case FLAGS: entity.setFlags(value.getIntegerValue()); break; case VISIBILITY: entity.setVisibile(!value.getBooleanValue()); break; case LINE_TYPE: if (!value.getValue().equals("BYLAYER")) { if (this.doc.containsLineType(value.getValue())) { LineType ltype = this.doc.getLineType(value.getValue()); entity.setLineType(ltype); } else { LineType ltype = new LineType(); ltype.setName(value.getValue()); this.doc.addLineType(ltype); entity.setLineType(ltype); } } break; case LINE_TYPE_SCALE: entity.setLinetypeScaleFactor(value.getDoubleValue()); break; case COLOR_CODE: entity.setColor(value.getIntegerValue()); break; case EXTRUSION_X: entity.getExtrusion().setX(value.getDoubleValue()); break; case EXTRUSION_Y: entity.getExtrusion().setY(value.getDoubleValue()); break; case EXTRUSION_Z: entity.getExtrusion().setZ(value.getDoubleValue()); break; case COLOR_24BIT: String hexString = Integer.toHexString(value.getIntegerValue()); if (hexString.length() == 6) { byte[] b = new byte[3]; b[0] = (byte) Integer.parseInt(hexString.substring(0, 2), 16); b[1] = (byte) Integer.parseInt(hexString.substring(2, 4), 16); b[2] = (byte) Integer.parseInt(hexString.substring(4, 6), 16); entity.setColorRGB(b); } break; case COLOR_TRANSPARENCY: break; case LINE_WEIGHT: entity.setLineWeight(value.getIntegerValue()); break; case GROUPCODE_THICKNESS: entity.setThickness(value.getDoubleValue()); break; case GROUPCODE_MODELSPACE: entity.setModelSpace(value.getBooleanValue()); break; case GROUPCODE_OWNER: entity.setOwnerID(Utils.parseIDString(value.getValue())); break; } } /* * (non-Javadoc) * * @see org.dxf2svg.parser.entities.EntityHandler#getEntityName() */ public abstract String getDXFEntityType(); /* * (non-Javadoc) * * @see de.miethxml.kabeja.parser.Handler#releaseDXFDocument() */ public void releaseDocument() { this.doc = null; } }