/*******************************************************************************
* 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.DXFValue;
import org.kabeja.entities.Entity;
import org.kabeja.entities.Viewport;
import org.kabeja.util.Constants;
/**
* @author <a href="mailto:simon.mieth@gmx.de">Simon Mieth</a>
*
*/
public class DXFViewportHandler extends AbstractEntityHandler {
public static final int GROUPCODE_CENTER_X = 10;
public static final int GROUPCODE_CENTER_Y = 20;
public static final int GROUPCODE_CENTER_Z = 30;
public static final int GROUPCODE_HEIGHT = 41;
public static final int GROUPCODE_WIDTH = 40;
public static final int GROUPCODE_VIEW_DIRECTION_X = 16;
public static final int GROUPCODE_VIEW_DIRECTION_Y = 26;
public static final int GROUPCODE_VIEW_DIRECTION_Z = 36;
public static final int GROUPCODE_VIEW_CENTER_X = 12;
public static final int GROUPCODE_VIEW_CENTER_Y = 22;
public static final int GROUPCODE_VIEW_CENTER_Z = 32;
public static final int GROUPCODE_VIEW_TARGET_X = 17;
public static final int GROUPCODE_VIEW_TARGET_Y = 27;
public static final int GROUPCODE_VIEW_TARGET_Z = 37;
public static final int GROUPCODE_SNAP_BASE_POINT_X = 13;
public static final int GROUPCODE_SNAP_BASE_POINT_Y = 23;
public static final int GROUPCODE_SNAP_SPACING_X = 14;
public static final int GROUPCODE_SNAP_SPACING_Y = 24;
public static final int GROUPCODE_GRID_SPACING_X = 15;
public static final int GROUPCODE_GRID_SPACING_Y = 25;
public static final int GROUPCODE_LENS_LENGTH = 42;
public static final int GROUPCODE_FRONT_CLIPPING = 43;
public static final int GROUPCODE_BACK_CLIPPING = 44;
public static final int GROUPCODE_VIEW_HEIGHT = 45;
public static final int GROUPCODE_SNAP_ANGLE = 50;
public static final int GROUPCODE_TWIST_ANGLE = 51;
public static final int GROUPCODE_RENDER_MODE = 281;
public static final int GROUPCODE_UCS_ORIGIN_X = 110;
public static final int GROUPCODE_UCS_ORIGIN_Y = 120;
public static final int GROUPCODE_UCS_ORIGIN_Z = 130;
public static final int GROUPCODE_UCS_X_AXIS_X = 111;
public static final int GROUPCODE_UCS_X_AXIS_Y = 121;
public static final int GROUPCODE_UCS_X_AXIS_Z = 131;
public static final int GROUPCODE_UCS_Y_AXIS_X = 112;
public static final int GROUPCODE_UCS_Y_AXIS_Y = 122;
public static final int GROUPCODE_UCS_Y_AXIS_Z = 132;
public static final int GROUPCODE_UCS_TYPE = 79;
public static final int GROUPCODE_UCS_ELEVATION = 146;
public static final int GROUPCODE_CIRCLE_ZOOM_PERCENT = 72;
public static final int GROUPCODE_VIEWPORT_ID = 69;
public static final int GROUPCODE_VIEWPORT_STATUS = 68;
public static final int GROUPCODE_PLOTSTYLE_NAME = 1;
public static final int GROUPCODE_FROZEN_LAYER = 341;
public static final int GROUPCODE_FROZEN_LAYER_XDATA = 1003;
private int[] xDataConvert = new int[] {
1000, 1002, 1070, 17, 27, 37, 16, 26, 36, 51, 45, 12, 22, 42, 43, 44,
90, 72, 90, 90, 90, 90, 90, 90, 50, 13, 23, 14, 24, 15, 25, 90, 1002
};
private Viewport viewport;
private boolean convertXDATA = false;
private int pos = 0;
public void parseGroup(int groupCode, DXFValue value) {
//check for XDATA
if (convertXDATA && (pos < xDataConvert.length)) {
groupCode = xDataConvert[pos];
pos++;
} else if ((groupCode == 1001) && value.getValue().equals("ACAD")) {
convertXDATA = true;
pos = 0;
} else {
convertXDATA = false;
}
switch (groupCode) {
case GROUPCODE_CENTER_X:
viewport.getCenterPoint().setX(value.getDoubleValue());
break;
case GROUPCODE_CENTER_Y:
viewport.getCenterPoint().setY(value.getDoubleValue());
break;
case GROUPCODE_CENTER_Z:
viewport.getCenterPoint().setZ(value.getDoubleValue());
break;
case GROUPCODE_VIEW_CENTER_X:
viewport.getViewCenterPoint().setX(value.getDoubleValue());
break;
case GROUPCODE_VIEW_CENTER_Y:
viewport.getViewCenterPoint().setY(value.getDoubleValue());
break;
case GROUPCODE_VIEW_CENTER_Z:
viewport.getViewCenterPoint().setZ(value.getDoubleValue());
break;
case GROUPCODE_VIEW_DIRECTION_X:
viewport.getViewDirectionVector().setX(value.getDoubleValue());
break;
case GROUPCODE_VIEW_DIRECTION_Y:
viewport.getViewDirectionVector().setY(value.getDoubleValue());
break;
case GROUPCODE_VIEW_DIRECTION_Z:
viewport.getViewDirectionVector().setZ(value.getDoubleValue());
break;
case GROUPCODE_VIEW_TARGET_X:
viewport.getViewTargetPoint().setX(value.getDoubleValue());
break;
case GROUPCODE_VIEW_TARGET_Y:
viewport.getViewTargetPoint().setY(value.getDoubleValue());
break;
case GROUPCODE_VIEW_TARGET_Z:
viewport.getViewTargetPoint().setZ(value.getDoubleValue());
break;
case GROUPCODE_SNAP_BASE_POINT_X:
viewport.getSnapBasePoint().setX(value.getDoubleValue());
break;
case GROUPCODE_SNAP_BASE_POINT_Y:
viewport.getSnapBasePoint().setY(value.getDoubleValue());
break;
case GROUPCODE_SNAP_SPACING_X:
viewport.getSnapSpacingPoint().setX(value.getDoubleValue());
break;
case GROUPCODE_SNAP_SPACING_Y:
viewport.getSnapSpacingPoint().setY(value.getDoubleValue());
break;
case GROUPCODE_GRID_SPACING_X:
viewport.getGridSpacingPoint().setX(value.getDoubleValue());
break;
case GROUPCODE_GRID_SPACING_Y:
viewport.getGridSpacingPoint().setY(value.getDoubleValue());
break;
case GROUPCODE_VIEWPORT_ID:
viewport.setViewportID(value.getValue());
break;
case GROUPCODE_WIDTH:
viewport.setWidth(value.getDoubleValue());
break;
case GROUPCODE_HEIGHT:
viewport.setHeight(value.getDoubleValue());
break;
case GROUPCODE_FRONT_CLIPPING:
viewport.setFrontClippingPlane(value.getDoubleValue());
break;
case GROUPCODE_BACK_CLIPPING:
viewport.setBackClippingPlane(value.getDoubleValue());
break;
case GROUPCODE_LENS_LENGTH:
viewport.setLensLength(value.getDoubleValue());
break;
case GROUPCODE_RENDER_MODE:
viewport.setRenderMode(value.getIntegerValue());
break;
case GROUPCODE_TWIST_ANGLE:
viewport.setTwistAngle(value.getDoubleValue());
break;
case GROUPCODE_SNAP_ANGLE:
viewport.setSnapAngle(value.getDoubleValue());
break;
case GROUPCODE_CIRCLE_ZOOM_PERCENT:
viewport.setCircleZoom(value.getDoubleValue());
break;
case GROUPCODE_UCS_ELEVATION:
viewport.setUcsElevation(value.getDoubleValue());
break;
case GROUPCODE_UCS_ORIGIN_X:
viewport.getUcsOrigin().setX(value.getDoubleValue());
break;
case GROUPCODE_UCS_ORIGIN_Y:
viewport.getUcsOrigin().setY(value.getDoubleValue());
break;
case GROUPCODE_UCS_ORIGIN_Z:
viewport.getUcsOrigin().setZ(value.getDoubleValue());
break;
case GROUPCODE_UCS_X_AXIS_X:
viewport.getUcsXAxis().setX(value.getDoubleValue());
break;
case GROUPCODE_UCS_X_AXIS_Y:
viewport.getUcsXAxis().setY(value.getDoubleValue());
break;
case GROUPCODE_UCS_X_AXIS_Z:
viewport.getUcsXAxis().setZ(value.getDoubleValue());
break;
case GROUPCODE_UCS_Y_AXIS_X:
viewport.getUcsYAxis().setX(value.getDoubleValue());
break;
case GROUPCODE_UCS_Y_AXIS_Y:
viewport.getUcsYAxis().setY(value.getDoubleValue());
break;
case GROUPCODE_UCS_Y_AXIS_Z:
viewport.getUcsYAxis().setZ(value.getDoubleValue());
break;
case GROUPCODE_UCS_TYPE:
viewport.setUcsType(value.getIntegerValue());
break;
case GROUPCODE_VIEW_HEIGHT:
viewport.setViewHeight(value.getDoubleValue());
break;
case GROUPCODE_VIEWPORT_STATUS:
viewport.setViewportStatus(value.getIntegerValue());
break;
case GROUPCODE_PLOTSTYLE_NAME:
viewport.setPlotStyleName(value.getValue());
break;
case GROUPCODE_FROZEN_LAYER:
viewport.addFrozenLayer(value.getValue());
break;
case GROUPCODE_FROZEN_LAYER_XDATA:
viewport.addFrozenLayer(value.getValue());
break;
default:
super.parseCommonProperty(groupCode, value, viewport);
break;
}
}
public String getDXFEntityType() {
return Constants.ENTITY_TYPE_VIEWPORT;
}
public void endDXFEntity() {
// nothing to do
}
public Entity getDXFEntity() {
return this.viewport;
}
public boolean isFollowSequence() {
return false;
}
public void startDXFEntity() {
this.viewport = new Viewport();
this.viewport.setModelSpace(false);
}
}