From: <ip...@us...> - 2007-06-20 11:20:40
|
Revision: 2124 http://hugin.svn.sourceforge.net/hugin/?rev=2124&view=rev Author: ippei Date: 2007-06-20 04:20:38 -0700 (Wed, 20 Jun 2007) Log Message: ----------- transforming algorithms in PanoramaDataLegacy Modified Paths: -------------- hugin/branches/ippei/src/hugin_base/algorithms/PanoramaAlgorithm.h hugin/branches/ippei/src/hugin_base/algorithms/algorithms.txt hugin/branches/ippei/src/hugin_base/algorithms/to-be-added/PanoramaDataLegacySupport.h hugin/branches/ippei/src/hugin_base/panodata/PanoramaData.h Added Paths: ----------- hugin/branches/ippei/src/hugin_base/algorithms/CalculateFOV.h hugin/branches/ippei/src/hugin_base/algorithms/FitPanorama.h Added: hugin/branches/ippei/src/hugin_base/algorithms/CalculateFOV.h =================================================================== --- hugin/branches/ippei/src/hugin_base/algorithms/CalculateFOV.h (rev 0) +++ hugin/branches/ippei/src/hugin_base/algorithms/CalculateFOV.h 2007-06-20 11:20:38 UTC (rev 2124) @@ -0,0 +1,90 @@ +// -*- c-basic-offset: 4 -*- +/** @file PanoramaDataLegacySupport.h + * + * @author Pablo d'Angelo <pab...@we...> + * + * $Id: Panorama.h 1947 2007-04-15 20:46:00Z dangelo $ + * + * !! from Panorama.h 1947 + * + * This 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 2 of the License, or (at your option) any later version. + * + * This software 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this software; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + + +namespace HuginBase { + + +class CalculateFOV : PanoramaAlgorithm +{ + + public: + /// + CalculateFOV(PanoramaData& panorama) + : PanoramaAlgorithm(panorama) + {}; + + /// + virtual ~CalculateFOV(); + + + public: + /// + bool modifiesPanoramaData() + { return false; } + + /// + bool runAlgorithm() + { + calculateFOV(o_panorama); + return true; // let's hope so. + } + + + public: + + /// + static FDiff2D calculateFOV(const PanoramaData& panorama); + + /// + double getResultHorizontalFOV() + { + // [TODO] if(!hasRunSuccessfully()) DEBUG; + return o_resultFOV.x; + } + + /// + double getResultVerticalFOV() + { + // [TODO] if(!hasRunSuccessfully()) DEBUG; + return o_resultFOV.y; + } + + /// + FDiff2D getResultFOV() + { + // [TODO] if(!hasRunSuccessfully()) DEBUG; + return o_resultFOV; + } + + + protected: + FDiff2D o_resultFOV; +}; + + +} + + \ No newline at end of file Added: hugin/branches/ippei/src/hugin_base/algorithms/FitPanorama.h =================================================================== --- hugin/branches/ippei/src/hugin_base/algorithms/FitPanorama.h (rev 0) +++ hugin/branches/ippei/src/hugin_base/algorithms/FitPanorama.h 2007-06-20 11:20:38 UTC (rev 2124) @@ -0,0 +1,91 @@ +// -*- c-basic-offset: 4 -*- +/** @file PanoramaDataLegacySupport.h + * + * @author Pablo d'Angelo <pab...@we...> + * + * $Id: Panorama.h 1947 2007-04-15 20:46:00Z dangelo $ + * + * !! from Panorama.h 1947 + * + * This 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 2 of the License, or (at your option) any later version. + * + * This software 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this software; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + + +namespace HuginBase { + + +class FitPanorama : PanoramaAlgorithm +{ + + public: + /// + FitPanorama(PanoramaData& panorama) + : PanoramaAlgorithm(panorama) + {}; + + /// + virtual ~FitPanorama(); + + + public: + /// + bool modifiesPanoramaData() + { return false; } + + /// + bool runAlgorithm() + { + fitPano(o_panorama, o_resultHFOV, o_resultHeight); + return true; // let's hope so. + } + + + public: + + /// + static void fitPano(const PanoramaData& panorama, double& HFOV, double& height) + + /// + double getResultHorizontalFOV() + { + // [TODO] if(!hasRunSuccessfully()) DEBUG; + return o_resultHFOV; + } + + /// + double getResultVerticalFOV() + { + // [TODO] if(!hasRunSuccessfully()) DEBUG; + return o_resultHeight; + } + + /// + FDiff2D getResultFOV() + { + // [TODO] if(!hasRunSuccessfully()) DEBUG; + return FDiff2D(getResultHorizontalFOV(), getResultVerticalFOV()); + } + + + protected: + double o_resultHFOV; + double o_resultHeight; +}; + + +} + + \ No newline at end of file Modified: hugin/branches/ippei/src/hugin_base/algorithms/PanoramaAlgorithm.h =================================================================== --- hugin/branches/ippei/src/hugin_base/algorithms/PanoramaAlgorithm.h 2007-06-20 07:39:47 UTC (rev 2123) +++ hugin/branches/ippei/src/hugin_base/algorithms/PanoramaAlgorithm.h 2007-06-20 11:20:38 UTC (rev 2124) @@ -45,7 +45,7 @@ protected: /// PanoramaAlgorithm(PanoramaData& panorama) - : m_panorama(panorama) + : o_panorama(panorama), o_successful(false) { }; public: @@ -57,7 +57,19 @@ /// returns true if the algorithm changes the PanoramaData. virtual bool modifiesPanoramaData() const =0; - /** runs the algorithm. + /// + virtual bool hasRunSuccessfully() + { + return o_successful; + } + + /// runs the algorithm. + virtual void run() + { + o_successful = runAlgorithm(); + } + + /** implementation of the algorithm. * You should override with your algorithm's implementiation. */ virtual bool runAlgorithm() =0; @@ -77,8 +89,8 @@ * */ - - private: + protected: + bool o_successful; PanoramaData& o_panorama; }; Modified: hugin/branches/ippei/src/hugin_base/algorithms/algorithms.txt =================================================================== --- hugin/branches/ippei/src/hugin_base/algorithms/algorithms.txt 2007-06-20 07:39:47 UTC (rev 2123) +++ hugin/branches/ippei/src/hugin_base/algorithms/algorithms.txt 2007-06-20 11:20:38 UTC (rev 2124) @@ -1,14 +1,16 @@ algorithms > stitcher -nona; pano2img, pano2file -PTStitcher, PTmender; pano2file +nona; pano2img, + pano2file / +PTStitcher; pano2file / +PTmender; pano2file / > PanoramaDataLegacy -updateCtrlPointErrors -calcFOV -fitPano +updateCtrlPointErrors / [this is an accessor; move to PanoramaData] +calcFOV / +fitPano / calcOptimalWidth calcCtrlPntsErrorStats calcCtrlPntsRadiStats Modified: hugin/branches/ippei/src/hugin_base/algorithms/to-be-added/PanoramaDataLegacySupport.h =================================================================== --- hugin/branches/ippei/src/hugin_base/algorithms/to-be-added/PanoramaDataLegacySupport.h 2007-06-20 07:39:47 UTC (rev 2123) +++ hugin/branches/ippei/src/hugin_base/algorithms/to-be-added/PanoramaDataLegacySupport.h 2007-06-20 11:20:38 UTC (rev 2124) @@ -52,17 +52,9 @@ // -- Algorithms to be moved out. -- - - /** calculates the horizontal and vertial FOV of the complete panorama - * - * @return HFOV,VFOV - */ - FDiff2D calcFOV() const; + + - /** calculate the HFOV and height so that the whole input - * fits in into the output panorama */ - void fitPano(double & HFOV, double & height); - /** calculate the optimal width for this panorama * * Optimal means that the pixel density at the panorama and @@ -96,7 +88,7 @@ /** try to automatically straighten the panorama */ void straighten(); -} +}; Modified: hugin/branches/ippei/src/hugin_base/panodata/PanoramaData.h =================================================================== --- hugin/branches/ippei/src/hugin_base/panodata/PanoramaData.h 2007-06-20 07:39:47 UTC (rev 2123) +++ hugin/branches/ippei/src/hugin_base/panodata/PanoramaData.h 2007-06-20 11:20:38 UTC (rev 2124) @@ -110,16 +110,16 @@ * This returns a panorama that contains only the images specified by \imgs * Useful for operations on a subset of the panorama */ - virtual PanoramaData getSubset(const PT::UIntSet & imgs) const; + virtual PanoramaData getSubset(const PT::UIntSet & imgs) const =0; /** duplicate the panorama * * returns a copy of the pano state, except for the listeners. */ - virtual PanoramaData duplicate() const; + virtual PanoramaData duplicate() const =0; /** clear the internal state. */ - virtual void reset(); + virtual void reset() =0; // -- Data Access -- @@ -127,50 +127,50 @@ // = images = /// number of images. - virtual std::size_t getNrOfImages() const; + virtual std::size_t getNrOfImages() const =0; /// get a panorama image, counting starts with 0 - virtual const PanoImage & getImage(std::size_t nr) const; + virtual const PanoImage & getImage(std::size_t nr) const =0; /// set a panorama image, counting starts with 0 - virtual void setImage(std::size_t nr, PanoImage img); + virtual void setImage(std::size_t nr, PanoImage img) =0; /// the the number for a specific image -// virtual unsigned int getImageNr(const PanoImage * image) const; +// virtual unsigned int getImageNr(const PanoImage * image) const =0; /** add an Image to the panorama * * The Image must be initialized, the Lens must exist. * */ - virtual unsigned int addImage(const PanoImage &img, const VariableMap &vars); + virtual unsigned int addImage(const PanoImage &img, const VariableMap &vars) =0; /** creates an image, from filename, and a Lens, if needed */ - virtual int addImageAndLens(const std::string & filename, double HFOV); + virtual int addImageAndLens(const std::string & filename, double HFOV) =0; /** add an Image to the panorama * @return image number */ - // virtual unsigned int addImage(const std::string & filename); + // virtual unsigned int addImage(const std::string & filename) =0; /** remove an Image. * * also deletes/updates all associated control points * and the Lens, if it was only used by this image. */ - virtual void removeImage(unsigned int nr); + virtual void removeImage(unsigned int nr) =0; /** swap images. * * swaps the images, image @p img1 becomes @p img2 and the other way round */ - virtual void swapImages(unsigned int img1, unsigned int img2); + virtual void swapImages(unsigned int img1, unsigned int img2) =0; /// get a complete description of a source image - virtual SrcPanoImage getSrcImage(unsigned imgNr) const; + virtual SrcPanoImage getSrcImage(unsigned imgNr) const =0; /** set input image parameters */ - virtual void setSrcImage(unsigned int nr, const SrcPanoImage & img); + virtual void setSrcImage(unsigned int nr, const SrcPanoImage & img) =0; /** set a new image filename * @@ -178,11 +178,11 @@ * as the old image. * */ - virtual void setImageFilename(unsigned int img, const std::string & fname); + virtual void setImageFilename(unsigned int img, const std::string & fname) =0; /** change image properties. */ - virtual void setImageOptions(unsigned int i, const ImageOptions & opts); + virtual void setImageOptions(unsigned int i, const ImageOptions & opts) =0; /** mark an image as active or inactive. * @@ -195,74 +195,74 @@ * active images, and pass these to the respective * functions that do the stitching or optimisation */ - void activateImage(unsigned int imgNr, bool active=true); + void activateImage(unsigned int imgNr, bool active=true) =0; /** get active images */ - UIntSet getActiveImages() const; + UIntSet getActiveImages() const =0; // = CPs = /// number of control points - virtual std::size_t getNrOfCtrlPoints() const; + virtual std::size_t getNrOfCtrlPoints() const =0; /// get a control point, counting starts with 0 - virtual const ControlPoint & getCtrlPoint(std::size_t nr) const; + virtual const ControlPoint & getCtrlPoint(std::size_t nr) const =0; /// get all control point of this Panorama - virtual const CPVector & getCtrlPoints() const; + virtual const CPVector & getCtrlPoints() const =0; /** return all control points for a given image. */ - virtual std::vector<unsigned int> getCtrlPointsForImage(unsigned int imgNr) const; + virtual std::vector<unsigned int> getCtrlPointsForImage(unsigned int imgNr) const =0; /** set all control points (Ippei: Is this supposed to be 'add' method?) */ - virtual void setCtrlPoints(const CPVector & points); + virtual void setCtrlPoints(const CPVector & points) =0; /** add a new control point.*/ - virtual unsigned int addCtrlPoint(const ControlPoint & point); + virtual unsigned int addCtrlPoint(const ControlPoint & point) =0; /** remove a control point. */ - virtual void removeCtrlPoint(unsigned int pNr); + virtual void removeCtrlPoint(unsigned int pNr) =0; /** change a control Point. */ - virtual void changeControlPoint(unsigned int pNr, const ControlPoint & point); + virtual void changeControlPoint(unsigned int pNr, const ControlPoint & point) =0; /// get the number of a control point - // virtual unsigned int getCtrlPointNr(const ControlPoint * point) const; + // virtual unsigned int getCtrlPointNr(const ControlPoint * point) const =0; /** get the next unused line number for t3, ... control point creation */ - virtual int getNextCPTypeLineNumber() const; + virtual int getNextCPTypeLineNumber() const =0; /** assign new mode line numbers, if required */ - virtual void updateLineCtrlPoints(); + virtual void updateLineCtrlPoints() =0; // = Lens = /** get number of lenses */ - virtual unsigned int getNrOfLenses() const; + virtual unsigned int getNrOfLenses() const =0; /** get a lens */ - virtual const Lens & getLens(unsigned int lensNr) const; + virtual const Lens & getLens(unsigned int lensNr) const =0; /** set a lens for this image. * * copies all lens variables into the image. */ - virtual void setLens(unsigned int imgNr, unsigned int lensNr); + virtual void setLens(unsigned int imgNr, unsigned int lensNr) =0; /** add a new lens. * */ - virtual unsigned int addLens(const Lens & lens); + virtual unsigned int addLens(const Lens & lens) =0; /** remove a lens * * it is only possible when it is not used by any image. */ - virtual void removeLens(unsigned int lensNr); + virtual void removeLens(unsigned int lensNr) =0; /** remove unused lenses. * @@ -270,7 +270,7 @@ * referenced by any image. This functions removes them. * */ - virtual void removeUnusedLenses(); + virtual void removeUnusedLenses() =0; /** Change the variable for a single lens * @@ -278,43 +278,43 @@ * all images. * */ - virtual void updateLensVariable(unsigned int lensNr, const LensVariable &var); + virtual void updateLensVariable(unsigned int lensNr, const LensVariable &var) =0; /** update a lens * * Changes the lens variables in all images of this lens. */ - virtual void updateLens(unsigned int lensNr, const Lens & lens); + virtual void updateLens(unsigned int lensNr, const Lens & lens) =0; // = Variables = /// get variables of this panorama - virtual const VariableMapVector & getVariables() const; + virtual const VariableMapVector & getVariables() const =0; /// get variables of an image - virtual const VariableMap & getImageVariables(unsigned int imgNr) const; + virtual const VariableMap & getImageVariables(unsigned int imgNr) const =0; // = Optimise Vector = /** return the optimize settings stored inside panorama */ - virtual const OptimizeVector & getOptimizeVector() const; + virtual const OptimizeVector & getOptimizeVector() const =0; /** set optimize setting */ - virtual void setOptimizeVector(const OptimizeVector & optvec); + virtual void setOptimizeVector(const OptimizeVector & optvec) =0; // = Panorama options = /** returns the options for this panorama */ - virtual const PanoramaOptions & getOptions() const; + virtual const PanoramaOptions & getOptions() const =0; /** set new output settings * This is not used directly for optimizing/stiching, but it can * be feed into runOptimizer() and runStitcher(). */ - virtual void setOptions(const PanoramaOptions & opt); + virtual void setOptions(const PanoramaOptions & opt) =0; @@ -330,13 +330,13 @@ * * @return false on error (could not read optimizer output, parse error) */ - virtual void readOptimizerOutput(const UIntSet & imgs, VariableMapVector & vars, CPVector & ctrlPoints) const; + virtual void readOptimizerOutput(const UIntSet & imgs, VariableMapVector & vars, CPVector & ctrlPoints) const =0; /// read after optimization, fills in control point errors. virtual void parseOptimizerScript(std::istream & i, const UIntSet & imgs, VariableMapVector & imgVars, - CPVector & ctrlPoints) const; + CPVector & ctrlPoints) const =0; /// create an optimizer script @@ -345,11 +345,11 @@ const PanoramaOptions & options, const UIntSet & imgs, bool forPTOptimizer, - const std::string & stripPrefix="") const; + const std::string & stripPrefix="") const =0; /// create the stitcher script virtual void printStitcherScript(std::ostream & o, const PanoramaOptions & target, - const UIntSet & imgs) const; + const UIntSet & imgs) const =0; // -- Algorithms to be modified. -- @@ -360,7 +360,7 @@ * usually used to set the changes from the optimization. * The control points must be the same as in */ - virtual void updateCtrlPointErrors(const CPVector & controlPoints); + virtual void updateCtrlPointErrors(const CPVector & controlPoints) =0; /** update control points for a subset of images. * @@ -368,7 +368,17 @@ * The number and ordering and control points must not be changed * between the call to subset() and this function. */ - void updateCtrlPointErrors(const UIntSet & imgs, const CPVector & cps); + void updateCtrlPointErrors(const UIntSet & imgs, const CPVector & cps) =0; + + +// -- maintainance -- + +public: + /// tells the data container to perform some maintainance if neccesary + virtual void changeFinished() =0; + + /// mark image change for maintainance + void imageChanged(unsigned int imgNr) =0; }; @@ -467,13 +477,14 @@ // -- Observing -- +public: /** add a panorama observer. * * It will recieve all change messages. * An observer can only be added once. if its added twice, * the second addObserver() will have no effect. */ - virtual void addObserver(PanoramaObserver *o); + virtual void addObserver(PanoramaObserver *o) =0; /** remove a panorama observer. * @@ -483,13 +494,13 @@ * * @return true if observer was known, false otherwise. */ - virtual bool removeObserver(PanoramaObserver *observer); + virtual bool removeObserver(PanoramaObserver *observer) =0; /** remove all panorama observers. * * @warning this is a hack. it must not be used on normal Panorama's. */ - virtual void clearObservers(); + virtual void clearObservers() =0; /** notify observers about changes in this class * @@ -500,27 +511,37 @@ * @param keepDirty do not set dirty flag. useful for changing * the dirty flag itself */ - virtual void changeFinished(bool keepDirty=false); + virtual void changeFinished(bool keepDirty=false) =0; + /** mark image for change notification. + * + * Does not send the notification, this is left + * to changedFinished() + */ + virtual void imageChanged(unsigned int imgNr) =0; + // -- Memento interface -- +public: /// get the internal state - virtual PanoramaMemento getMemento() const; + virtual PanoramaMemento getMemento() const =0; /// set the internal state - virtual void setMemento(PanoramaMemento & state); + virtual void setMemento(PanoramaMemento & state) =0; // -- Optimization Status -- +public: /** true if control points or lens variables * have been changed after the last optimisation */ - virtual bool needsOptimization(); + virtual bool needsOptimization() =0; - virtual void markAsOptimized(bool optimized=true); -} + /// + virtual void markAsOptimized(bool optimized=true) =0; +}; } // namespace This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |