Horus Doc || C++ Reference || Class Overview   Pixels   Images   Detector   Geometry   Registry || Doxygen's quick Index  

HxMfBpo Class Reference

Class definition of method frame for binary pixel operations. More...

#include <HxMfBpo.h>

List of all members.

Public Methods

 HxMfBpo (HxImageData *src1, HxImageData *src2, HxString bpoName)
 Constructor. More...

 ~HxMfBpo ()
 Destructor. More...

HxImageDatasource1 () const
 The first argument image of the frame. More...

HxImageDatasource2 () const
 The second argument image of the frame. More...

HxImageDataresult () const
 The result image of the frame. More...

bool preOpIsOk () const
 Indicates whether initialization was OK. More...


Detailed Description

Class definition of method frame for binary pixel operations.

First queries the HxImgFtorRuleBase for an exact match on

resulttype of bpo<src1,src2,bpoName>

If that is not found we look for

argumenttype of bpo<src1,bpoName>

If the argumenttype is not found or it does not match the signature of src2 we try to find

argumenttype of bpo<broadest(src1,src2),bpoName>

If that is also not found, an error is generated. Based on the argumenttype we find the resulttype with

resulttype of bpo<argumenttype,bpoName>


Constructor & Destructor Documentation

HxMfBpo::HxMfBpo HxImageData   src1,
HxImageData   src2,
HxString    bpoName
 

Constructor.

00017     : _src1(src1), _src2(src2), _tmpSrc1(0), _tmpSrc2(0), _preOpIsOk(true)
00018 {
00019     if (!src1 || !src2)
00020     {
00021         _preOpIsOk = false;
00022         return;
00023     }
00024 
00025     HxImageSignature src1Sig(src1->signature());
00026     HxImageSignature src2Sig(src2->signature());
00027     HxImageSignature broadestSig(src1Sig.broadest(src2Sig));
00028     HxImageSignature resultSig;
00029 
00030     HxImgFtorRuleBase::QueryResultType qRes;
00031 
00032     qRes = HxImgFtorRuleBase::instance().getResultType(
00033                 src1Sig, "bpo",
00034                 src1Sig.toString(), src2Sig.toString(), bpoName);
00035 
00036     if (qRes)
00037     {
00038         /*
00039          *  Only very specific combinations of argument types allowed.
00040          *  Argument types stay what they are.
00041          */
00042         resultSig = qRes;
00043     }
00044     else
00045     {
00046         // Type of result and second argument depends on type of first
00047         // argument.
00048 
00049         qRes = HxImgFtorRuleBase::instance().getArgumentType(
00050                     src1Sig, "bpo", src1Sig.toString(), bpoName);
00051 
00052         src1Sig = (qRes && src2Sig.isEqual(qRes)) ? src1Sig : broadestSig;
00053 
00054         // If type of second argument does not fit the required type
00055         // another attempt is made with the broadest signature.
00056         /*  24/01/2001 IMPORTANT DESIGN NOTE:
00057          *  One can argue that if a second argument type can be found  
00058          *  when querying with the original first argument type as key,
00059          *  and the given second argument type does not match the query result,
00060          *  the second argument should be converted to the query result, but
00061          *  only when the query result is broader than the second argument
00062          *  type.
00063          */
00064         // src1Sig = (qRes && src2Sig.broadest(qRes).isEqual(qRes))
00065         //              ? src1Sig : broadestSig;
00066 
00067         qRes = HxImgFtorRuleBase::instance().getArgumentType(
00068                     src2Sig, "bpo", src1Sig.toString(), bpoName);
00069 
00070         if (!qRes)
00071         {
00072             HxEnvironment::instance()->errorStream()
00073                 << "Cannot apply binary pixel operation " << bpoName << " to "
00074                 << "images with type " << src1Sig.toString() << " and "
00075                 << src2Sig.toString() << STD_ENDL;
00076             HxEnvironment::instance()->flush();
00077             _preOpIsOk = false;
00078         }
00079         else
00080         {
00081             src2Sig = qRes;
00082         }
00083 
00084         resultSig = HxImgFtorRuleBase::instance().getResultType(
00085                     src1Sig, "bpo", src1Sig.toString(), bpoName);
00086     }
00087 
00088     HxSizes sizes = src1->sizes().sup(src2->sizes());
00089 
00090     if (!src1Sig.isEqual(src1->signature())) {
00091         _tmpSrc1 = HxImgDataFactory::instance().makeImage(src1Sig, sizes);
00092         _tmpSrc1->set(src1);
00093         _src1 = _tmpSrc1;
00094     }
00095 
00096     if (!src2Sig.isEqual(src2->signature())) {
00097         _tmpSrc2 = HxImgDataFactory::instance().makeImage(src2Sig, sizes);
00098         _tmpSrc2->set(src2);
00099         _src2 = _tmpSrc2;
00100     }
00101 
00102     _result = HxImgDataFactory::instance().makeImage(resultSig, sizes);
00103 
00104 }

HxMfBpo::~HxMfBpo  
 

Destructor.

00107 {
00108     if (_tmpSrc1) 
00109         delete _tmpSrc1;
00110     if (_tmpSrc2) 
00111         delete _tmpSrc2;
00112 }


Member Function Documentation

HxImageData * HxMfBpo::source1   const
 

The first argument image of the frame.

00116 { 
00117     return _src1; 
00118 }

HxImageData * HxMfBpo::source2   const
 

The second argument image of the frame.

00122 { 
00123     return _src2; 
00124 }

HxImageData * HxMfBpo::result   const
 

The result image of the frame.

00128 { 
00129     return _result; 
00130 }

bool HxMfBpo::preOpIsOk   const [inline]
 

Indicates whether initialization was OK.

00072 {
00073     return _preOpIsOk;
00074 }


The documentation for this class was generated from the following files:
Generated on Mon Jan 27 15:49:08 2003 for C++Reference by doxygen1.2.12 written by Dimitri van Heesch, © 1997-2001