juliapluginreader.h

//-----------------------------------------------------------------------------

//$Id: juliapluginreader.h 189 2007-04-19 10:53:38Z robin $

//

// Copyright (c) 2006 Zanja Technologies, Inc

//

// TRADE SECRETS: PROPRIETARY AND CONFIDENTIAL

// Unpublished material - all rights reserved under the

// Copyright Laws of the United States.

//

// Distributed under license by ESRI, Inc.

// For additional information, contact:

// Environmental Systems Research Institute, Inc.

// 380 New York Street

// Redlands, California, USA 92373

//

/*! \file juliapluginreader.h

    \brief <TODO: insert file description here>

    \author Robin Princeley

    \date $Date: 2007-04-19 14:53:38 +0400 (Thu, 19 Apr 2007) $

    \version $Revision: 189 $

*/

//-----------------------------------------------------------------------------

#if !defined( ESRI_IMAGESERVER_PLUGIN_JULIAREADER_H )

#define ESRI_IMAGESERVER_PLUGIN_JULIAREADER_H

#define JULIAERROR_None                           0

#define JULIAERROR_ReadFailed                     1

#define JULIAERROR_NoWidth                        2

#define JULIAERROR_NoHeight                       3

#define JULIAERROR_ReadOverviewOutOfRange         4

typedef struct SimpleROI {

  double_t ulx;

  double_t uly;

  double_t lrx;

  double_t lry;

  inline SimpleROI()

  {

    ulx = 0.00;

    uly = 0.00;

    lrx = 0.00;

    lry = 0.00;

  }

  inline virtual ~SimpleROI()

  {

    ulx = 0.00;

    uly = 0.00;

    lrx = 0.00;

    lry = 0.00;

  }

  double_t getWidth() const

  {

    return ( lrx - ulx );

  }

  double_t getHeight() const

  {

    return ( lry - uly );

  }

} SimpleROI;

class JuliaPluginReader

{

public:

  JuliaPluginReader();

  virtual ~JuliaPluginReader();

  virtual bool open( const std::string &filename, uint32_t index, uint32_t slice,

                     const FC_Parameter *parameters, uint32_t parameterCount );

  virtual bool close();

  virtual bool prepare( const FC_ImageROI *roi,

                        uint32_t rows, uint32_t cols,

                        const FC_Parameter *parameters, uint32_t parameterCount );

  virtual bool readScanlines( byte_t **buffer, uint32_t startRow,

                              uint32_t rows, size_t size, uint32_t plane = );

  inline FC_ImageInformation* getInformation()

  {

    return &mInformation;

  }

  const uint32_t& getIndex() const return mIndex; }

  inline double_t getDX() const

  {

    return ( mFractalROI.getWidth() / static_cast< double_t >( mInformation.width ) );

  }

  inline double_t getDY() const

  {

    return ( mFractalROI.getHeight() / static_cast< double_t >( mInformation.height ) );

  }

  static uint32_t readDescription( const std::string &filename,

                                   FC_ImageInformation &info,

                                   SimpleROI &roi,

                                   std::complex< float > &c,

                                   uint32_t &iterations,

                                   uint32_t &count );

  static bool getOverviewCount( const std::string &filename, uint32_t &count );

protected:

  std::string mFilename;

  FC_ImageInformation mInformation;

  uint32_t mError;

  SimpleROI mFractalROI;

  FC_ImageROI mImageROI;

  uint32_t mIterations;

  std::complex< float > mCenter;

  uint32_t mIndex;

  bool failure( uint32_t errorCode );

  bool success();

};

#endif