001    /*----------------    FILE HEADER  ------------------------------------------
002    
003     This file is part of deegree.
004     Copyright (C) 2001-2007 by:
005     EXSE, Department of Geography, University of Bonn
006     http://www.giub.uni-bonn.de/deegree/
007     lat/lon GmbH
008     http://www.lat-lon.de
009    
010     This library is free software; you can redistribute it and/or
011     modify it under the terms of the GNU Lesser General Public
012     License as published by the Free Software Foundation; either
013     version 2.1 of the License, or (at your option) any later version.
014    
015     This library is distributed in the hope that it will be useful,
016     but WITHOUT ANY WARRANTY; without even the implied warranty of
017     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
018     Lesser General Public License for more details.
019    
020     You should have received a copy of the GNU Lesser General Public
021     License along with this library; if not, write to the Free Software
022     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
023    
024     Contact:
025    
026     Andreas Poth
027     lat/lon GmbH
028     Aennchenstr. 19
029     53177 Bonn
030     Germany
031     E-Mail: poth@lat-lon.de
032    
033     Prof. Dr. Klaus Greve
034     Department of Geography
035     University of Bonn
036     Meckenheimer Allee 166
037     53115 Bonn
038     Germany
039     E-Mail: greve@giub.uni-bonn.de
040    
041     
042     ---------------------------------------------------------------------------*/
043    
044    package org.deegree.ogcwebservices.wpvs.operation;
045    
046    import javax.media.j3d.PickSegment;
047    import javax.vecmath.Point3d;
048    
049    import org.deegree.model.spatialschema.GeometryException;
050    import org.deegree.model.spatialschema.GeometryFactory;
051    import org.deegree.model.spatialschema.Position;
052    import org.deegree.ogcwebservices.wpvs.j3d.ViewPoint;
053    
054    /**
055     * This class represents the geometry needed for a request with a ray of view.
056     * 
057     * @version $Revision: $
058     * @author <a href="mailto:cordes@lat-lon.de">Lyn Buesching</a>
059     * @author last edited by: $Author: $
060     *
061     * @version 1.0. $Revision: $, $Date: $
062     *
063     */
064    public class LineRequest extends RequestGeometry {
065    
066        // end point of the view ray
067        private Point3d endPointLine;
068        
069        /**
070         * Initializes the two Geometrys for the request with a ray.
071         * 
072         * @param request the Get3DFeatureInfo-request 
073         * @throws GeometryException
074         */
075            public LineRequest(Get3DFeatureInfo request)  {
076                    super( request );
077            endPointLine = new Point3d ( calcEndPoint( new ViewPoint( request.getGetViewRequestCopy() ),
078                                                       (int)request.getDepth(), 
079                                                       (int)request.getGetViewRequestCopy().getImageDimension().getWidth(),
080                                                       (int)request.getGetViewRequestCopy().getImageDimension().getHeight(),
081                                                       request.getClickPoint().x, request.getClickPoint().y ) );
082            }
083        
084            @Override
085            public void setPickshape() {
086                    pickshape =  new PickSegment( getBeginPointLine(), endPointLine );
087            }
088    
089            @Override
090            public void setWfsReqGeom() throws GeometryException {
091                    Position p1 = GeometryFactory.createPosition( getBeginPointLine().x, getBeginPointLine().y, getBeginPointLine().z );
092                Position p2 = GeometryFactory.createPosition( endPointLine.x, endPointLine.y, endPointLine.z );
093                    wfsReqGeom = GeometryFactory.createCurve( new Position[]{ p1, p2}, getCrs() );
094            }
095    
096        public Point3d getEndPointLine() {
097            return endPointLine;
098        }
099        
100        
101    }