You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

112 lines
3.2 KiB

#ifndef MODGMT_MAP_H
#define MODGMT_MAP_H
#include <cmath>
#include "common.h"
class GMTBlob: public ObjectBase
{
GMTBlob()=delete;
protected:
std::shared_ptr<std::string> data;
GMTBlob(const GMTBlob& b)=default;
GMTBlob(GMTBlob&& b)=default;
GMTBlob(const GMTBlob* p):data(p->data) {}
GMTBlob(std::string* s):data(s) {}
public:
// Pure virtual overrides
bool Print() const override
{
COUT(NORMAL)<<std::endl<<"Object type: "<<Type()<<std::endl;
return true;
}
const int8_t* Blob(size_t* size) const override
{
*size=data->size();
return reinterpret_cast<const int8_t*>(data->data());
}
// Data access
const std::string* pValue() const {return data.get();}
};
class GMTMap: public GMTBlob
{
protected:
int32_t bblx,bbly,bbrx,bbry;
GMTMap(const GMTMap* p):GMTBlob(p),bblx(p->bblx),bbly(p->bbly),bbrx(p->bbrx),bbry(p->bbry) {};
GMTMap(std::string* s, int nbblx, int nbbly, int nbbrx, int nbbry):GMTBlob(s),bblx(nbblx),bbly(nbbly),bbrx(nbbrx),bbry(nbbry) {};
public:
int32_t Bblx() const {return bblx;}
int32_t Bbly() const {return bbly;}
int32_t Bbrx() const {return bbrx;}
int32_t Bbry() const {return bbry;}
};
class ObjectGMTMapPDF: public GMTMap
{
ObjectGMTMapPDF(const ObjectGMTMapPDF* p):GMTMap(p) {};
public:
ObjectGMTMapPDF(std::string* s, int nbblx, int nbbly, int nbbrx, int nbbry):GMTMap(s,nbblx,nbbly,nbbrx,nbbry) {};
// Pure virtual overrides
ObjectBase* Copy() const override {return new ObjectGMTMapPDF(this);}
std::string Type() const override {return "GMTMapPDF";}
};
class ObjectGMTMap: public GMTMap
{
ObjectGMTMap(const ObjectGMTMap* p):GMTMap(p) {};
public:
ObjectGMTMap(std::string* s, int nbblx, int nbbly, int nbbrx, int nbbry):GMTMap(s,nbblx,nbbly,nbbrx,nbbry) {};
// Pure virtual overrides
ObjectBase* Copy() const override {return new ObjectGMTMap(this);}
std::string Type() const override {return "GMTMap";}
};
class ObjectGMTImage: public GMTBlob
{
ObjectGMTImage(const ObjectGMTImage* p):GMTBlob(p) {};
public:
ObjectGMTImage(std::string* s):GMTBlob(s) {};
// Pure virtual overrides
ObjectBase* Copy() const override {return new ObjectGMTImage(this);}
std::string Type() const override {return "GMTImage";}
};
// Convertor to search object
template<class Object>
class SearchObject
{
public:
using ValueType=const Object*;
template<class... Args>
ValueType Convert(const ObjectBase* ob, bool* res, std::string& err, Args... args)
{
OBType<Object> gp(ob);
switch(gp.Error())
{
case(OBTypeErr::OK): return gp;
case(OBTypeErr::NULLPTR): {err="Can't convert zero ObjectBase pointer to something meaningfull"; break;}
case(OBTypeErr::TYPEMISMATCH): {err=ob->Type()+" is not correct: type mismatch"; break;}
}
*res=false;
return nullptr;
}
};
// Convertor to search GMTMap objects
using SearchGMTMap=SearchObject<ObjectGMTMap>;
using SearchGMTMapPDF=SearchObject<ObjectGMTMapPDF>;
// Creating eps map from set of layers
const ObjectBase* GMT_Map(const ObjectList* input);
// Converting map to pdf
const ObjectBase* GMT_Convert2PDF(const ObjectList* input);
// Converting map to png
const ObjectBase* GMT_Convert2PNG(const ObjectList* input);
// Converting map to jpeg
const ObjectBase* GMT_Convert2JPG(const ObjectList* input);
#endif