/******************************************************************************* * 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.dxf.parser.DXFEntitiesSectionHandler; import org.kabeja.dxf.parser.DXFValue; import org.kabeja.entities.Attrib; import org.kabeja.entities.Entity; import org.kabeja.entities.Insert; import org.kabeja.parser.ParseException; import org.kabeja.util.Constants; /** * @author <a href="mailto:simon.mieth@gmx.de">Simon Mieth</a> * */ public class DXFInsertHandler extends AbstractEntityHandler { public static final int SCALE_X = 41; public static final int SCALE_Y = 42; public static final int SCALE_Z = 43; public static final int ROTATE = 50; public static final int COLUMN_COUNT = 70; public static final int ROW_COUNT = 71; public static final int COLUMN_SPACING = 44; public static final int ROW_SPACING = 45; public static final int BLOCK_NAME = 2; public static final int HAS_ATTRIBUTES = 66; private Insert insert; private boolean attributesFollow = false; private boolean delegateAttribute = false; private DXFAttribHandler attribHandler; private DXFAttribDefinitionHandler attDefHandler; private DXFEntityHandler handler; /** * */ public DXFInsertHandler() { super(); } public void endDXFEntity() { } public Entity getDXFEntity() { return insert; } public String getDXFEntityType() { return Constants.ENTITY_TYPE_INSERT; } public boolean isFollowSequence() { return this.attributesFollow; //return false; } public void parseGroup(int groupCode, DXFValue value) throws ParseException { if ((groupCode == Constants.END_SEQUENCE_CODE) || Constants.END_SEQUENCE.equals(value.getValue())) { // add the last attribute to the block reference (insert or minsert) this.addParsedAttribute(); this.attributesFollow = false; this.delegateAttribute=false; return; } else if (groupCode == DXFEntitiesSectionHandler.ENTITY_START) { if (this.delegateAttribute) { this.addParsedAttribute(); } else { //initialize the Handlers this.attribHandler = new DXFAttribHandler(); this.attribHandler.setDocument(this.doc); this.attDefHandler = new DXFAttribDefinitionHandler(); this.attDefHandler.setDocument(this.doc); this.delegateAttribute=true; } if(value.getValue().equals(this.attribHandler.getDXFEntityType())){ this.handler = this.attribHandler; }else{ //is attribute definition this.handler = this.attDefHandler; } this.handler.startDXFEntity(); return; } else if (this.delegateAttribute) { this.handler.parseGroup(groupCode, value); return; } switch (groupCode) { case GROUPCODE_START_X: insert.getInsertPoint().setX(value.getDoubleValue()); break; case GROUPCODE_START_Y: insert.getInsertPoint().setY(value.getDoubleValue()); break; case GROUPCODE_START_Z: insert.getInsertPoint().setZ(value.getDoubleValue()); break; case SCALE_X: insert.setScaleX(value.getDoubleValue()); break; case SCALE_Y: insert.setScaleY(value.getDoubleValue()); break; case SCALE_Z: insert.setScaleZ(value.getDoubleValue()); break; case ROTATE: insert.setRotate(value.getDoubleValue()); break; case COLUMN_COUNT: insert.setColumns(value.getIntegerValue()); break; case ROW_COUNT: insert.setRows(value.getIntegerValue()); break; case COLUMN_SPACING: insert.setColumnSpacing(value.getDoubleValue()); break; case ROW_SPACING: insert.setRowSpacing(value.getDoubleValue()); break; case BLOCK_NAME: //TODO Insert should reference the block direct insert.setBlockName(value.getValue()); break; case HAS_ATTRIBUTES: if ((value.getIntegerValue() & 1) == 1) { this.attributesFollow = true; } default: super.parseCommonProperty(groupCode, value, insert); } } public void startDXFEntity() { insert = new Insert(); } protected void addParsedAttribute() { this.attribHandler.endDXFEntity(); Attrib attrib = (Attrib) this.attribHandler.getDXFEntity(); attrib.setDocument(this.doc); attrib.setBlockAttribute(true); this.insert.addAttribute(attrib); } }