/******************************************************************************* * 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.processing; import java.util.Iterator; import java.util.Map; import org.kabeja.DraftDocument; import org.kabeja.common.DraftEntity; import org.kabeja.common.Layer; import org.kabeja.common.Type; import org.kabeja.common.View; import org.kabeja.math.Bounds; /** * @author <a href="mailto:simon.mieth@gmx.de">Simon Mieth</a> * */ public class ViewFilter extends AbstractPostProcessor { public static final String CONTEXT_OPTION_VIEW_NAME = "view.name"; public void process(DraftDocument doc, Map context) throws ProcessorException { // get the active viewport View view = null; Iterator<View> i = doc.getViews().iterator(); if (context.containsKey(CONTEXT_OPTION_VIEW_NAME)) { String name = (String) context.get(CONTEXT_OPTION_VIEW_NAME); boolean found = false; while (i.hasNext() && !found) { View v = i.next(); if (v.getName().trim().equals(name.trim())) { view = v; found = true; } } } else if (i.hasNext()) { // get the first view view = (View) i.next(); } if (view != null) { double w = view.getWidth() / 2; double h = view.getHeight() / 2; Bounds b = new Bounds(); // the upper right corner b.addToBounds(view.getCenterPoint().getX() + w, view.getCenterPoint().getY() + h, view.getCenterPoint().getZ()); // the lower left corner b.addToBounds(view.getCenterPoint().getX() - w, view.getCenterPoint().getY() - h, view.getCenterPoint().getZ()); filterEntities(b, doc); } } protected void filterEntities(Bounds b, DraftDocument doc) { for( Layer l:doc.getLayers()){ for(Type<?> type:l.getEntityTypes()){ Iterator<? extends DraftEntity> ei = l.getEntitiesByType(type).iterator(); while (ei.hasNext()) { DraftEntity entity = (DraftEntity) ei.next(); Bounds currentBounds = entity.getBounds(); if (!b.contains(currentBounds)) { ei.remove(); } } } } } /* (non-Javadoc) * @see org.kabeja.tools.PostProcessor#setProperties(java.util.Map) */ public void setProperties(Map properties) { // TODO Auto-generated method stub } }