package org.goko.tools.centerfinder.model; /* * * Goko * Copyright (C) 2013 PsyKo * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * */ import java.util.ArrayList; import java.util.List; import javax.inject.Inject; import org.goko.common.GkUiUtils; import org.goko.common.bindings.AbstractController; import org.goko.common.elements.combo.LabeledValue; import org.goko.core.common.exception.GkException; import org.goko.core.controller.IControllerService; import org.goko.core.math.Tuple6b; import org.goko.tools.centerfinder.EnumPlane; import org.goko.tools.centerfinder.ICenterFinderService; /** *Center finder controller * @author PsyKo * */ public class CenterFinderController extends AbstractController<CenterFinderModel>{ @Inject IControllerService controllerService; @Inject ICenterFinderService centerFinderService; public CenterFinderController() { super(new CenterFinderModel()); } @Override public void initialize() throws GkException { List<LabeledValue<EnumPlane>> lstPlane = new ArrayList<>(); lstPlane.add(new LabeledValue<EnumPlane>(EnumPlane.XY_PLANE, "XY")); lstPlane.add(new LabeledValue<EnumPlane>(EnumPlane.YZ_PLANE, "YZ")); lstPlane.add(new LabeledValue<EnumPlane>(EnumPlane.XZ_PLANE, "XZ")); getDataModel().setAvailablePlane(lstPlane); getDataModel().setSelectedPlane(GkUiUtils.getLabelledValueByKey(EnumPlane.XY_PLANE, lstPlane)); } public void goToCalculatedCenter(){ } @SuppressWarnings("unchecked") public void grabPoint() throws GkException{ List<Tuple6b> lst = getDataModel().getSamplePoints(); Tuple6b tuple = controllerService.getPosition(); lst.add(tuple ); getDataModel().setSamplePoints(lst); getDataModel().setSelectedPoint(tuple); centerFinderService.capturePoint(tuple); if(getDataModel().getSamplePoints().size() >= 3){ getDataModel().setCircleCenterResult(centerFinderService.getCenter(centerFinderService.getCapturedPoint(), getDataModel().getSelectedPlane().getValue())); }else{ getDataModel().setCircleCenterResult(null); } } public void clearSelectedSamplePoints() throws GkException{ if(getDataModel().getSelectedPoint() != null){ int index = getDataModel().getSamplePoints().indexOf(getDataModel().getSelectedPoint()); getDataModel().getSamplePoints().remove(getDataModel().getSelectedPoint()); centerFinderService.removeCapturedPoint(centerFinderService.getCapturedPoint().get(index)); autoSelectPoint(index); } if(getDataModel().getSamplePoints().size() >= 3){ getDataModel().setCircleCenterResult(centerFinderService.getCenter(centerFinderService.getCapturedPoint(), getDataModel().getSelectedPlane().getValue())); }else{ getDataModel().setCircleCenterResult(null); } } protected void autoSelectPoint(int index){ if(getDataModel().getSamplePoints().isEmpty()){ getDataModel().setSelectedPoint(null); }else{ index = Math.max(0, Math.min(index, getDataModel().getSamplePoints().size()-1)); getDataModel().setSelectedPoint((Tuple6b) getDataModel().getSamplePoints().get(index)); } } }