/** * */ package org.goko.tools.autoleveler.io.xml; import java.util.ArrayList; import java.util.List; import org.apache.commons.collections.CollectionUtils; import org.goko.core.common.exception.GkException; import org.goko.core.common.io.xml.XmlTuple6b; import org.goko.core.common.io.xml.quantity.XmlLength; import org.goko.core.common.io.xml.quantity.XmlSpeed; import org.goko.core.common.measure.quantity.Length; import org.goko.core.math.Tuple6b; import org.goko.core.workspace.service.ILoader; import org.goko.core.workspace.service.IMapperService; import org.goko.tools.autoleveler.bean.grid.GridHeightMap; /** * @author PsyKo * @date 16 f�vr. 2016 */ public class GridHeightMapLoader implements ILoader<XmlGridHeightMap, GridHeightMap> { /** (inheritDoc) * @see org.goko.core.workspace.service.ILoader#load(java.lang.Object, org.goko.core.workspace.service.IMapperService) */ @Override public GridHeightMap load(XmlGridHeightMap input, IMapperService mapperService) throws GkException { int xDivision = input.getxDivisionCount(); int yDivision = input.getyDivisionCount(); int[][] vertices = new int[xDivision+1][yDivision+1]; List<Tuple6b> offsets = new ArrayList<Tuple6b>(); Tuple6b start = XmlTuple6b.valueOf(input.getStart()); Tuple6b end = XmlTuple6b.valueOf(input.getEnd()); Length dx = end.getX().subtract(start.getX()); Length dy = end.getY().subtract(start.getY()); if(CollectionUtils.isNotEmpty(input.getOffsets())){ for (XmlGridHeightMapOffset xmlOffset : input.getOffsets()) { Tuple6b tuple = new Tuple6b(); tuple.setX( start.getX().add( dx.multiply( xmlOffset.getxCoord() ))); tuple.setY( start.getY().add( dy.multiply( xmlOffset.getyCoord() ))); tuple.setZ( XmlLength.valueOf(xmlOffset.getOffset()) ); vertices[xmlOffset.getxCoord()][xmlOffset.getyCoord()] = offsets.size(); offsets.add(tuple); } } GridHeightMap map = new GridHeightMap(vertices, offsets); map.setClearanceHeight( XmlLength.valueOf( input.getClearanceHeight() )); map.setEnd( end ); map.setStart( start ); map.setProbed( input.isProbed() ); map.setProbeFeedrate( XmlSpeed.valueOf(input.getProbeFeedrate() )); map.setProbeLowerHeight( XmlLength.valueOf(input.getProbeLowerHeight())); map.setProbeStartHeight( XmlLength.valueOf(input.getProbeStartHeight())); return map; } // // /** (inheritDoc) // * @see org.goko.core.workspace.service.IExporter#export(java.lang.Object, org.goko.core.workspace.service.IMapperService) // */ // @Override // public GridHeightMap load(XmlGridHeightMap input, IMapperService mapperService) throws GkException { // XmlGridHeightMap xmlMap = new XmlGridHeightMap(); // xmlMap.setClearanceHeight( XmlLength.valueOf(input.getClearanceHeight()) ); // xmlMap.setStart( XmlTuple6b.valueOf(input.getStart()) ); // xmlMap.setEnd( XmlTuple6b.valueOf(input.getEnd()) ); // xmlMap.setProbed(input.isProbed()); // xmlMap.setProbeLowerHeight(XmlLength.valueOf(input.getProbeLowerHeight())); // xmlMap.setProbeStartHeight(XmlLength.valueOf(input.getProbeLowerHeight())); // xmlMap.setxDivisionCount(input.getxDivisionCount()); // xmlMap.setyDivisionCount(input.getyDivisionCount()); // xmlMap.setProbeFeedrate( XmlSpeed.valueOf(input.getProbeFeedrate()) ); // ArrayList<XmlTuple6b> xmlOffssets = new ArrayList<XmlTuple6b>(); // // List<Tuple6b> lstOffsets = input.getOffsets(); // if(CollectionUtils.isNotEmpty(lstOffsets)){ // for (Tuple6b tuple6b : lstOffsets) { // xmlOffssets.add( XmlTuple6b.valueOf(tuple6b)); // } // } // xmlMap.setOffsets(xmlOffssets); // return xmlMap; // } /** (inheritDoc) * @see org.goko.core.workspace.service.IExporter#getInputClass() */ @Override public Class<XmlGridHeightMap> getInputClass() { return XmlGridHeightMap.class; } /** (inheritDoc) * @see org.goko.core.workspace.service.IExporter#getOutputClass() */ @Override public Class<GridHeightMap> getOutputClass() { return GridHeightMap.class; } }