mirror of
https://github.com/SatDump/SatDump
synced 2026-08-13 17:47:30 -04:00
131 lines
No EOL
5.3 KiB
C++
131 lines
No EOL
5.3 KiB
C++
#include "angelscript/scriptarray/scriptarray.h"
|
|
#include "bind_satdump.h"
|
|
|
|
#include "projection/projection.h"
|
|
|
|
#include "bind_geodetic.h"
|
|
#include "bind_image.h"
|
|
#include "bind_json.h"
|
|
#include "projection/reproject_img.h"
|
|
|
|
namespace satdump
|
|
{
|
|
namespace script
|
|
{
|
|
namespace
|
|
{
|
|
class CScriptProjection
|
|
{
|
|
public:
|
|
// Constructors
|
|
CScriptProjection()
|
|
{
|
|
refCount = 1;
|
|
p = new proj::Projection();
|
|
}
|
|
|
|
CScriptProjection(proj::Projection i)
|
|
{
|
|
refCount = 1;
|
|
p = new proj::Projection();
|
|
*p = i;
|
|
}
|
|
|
|
// Memory management
|
|
int AddRef() const
|
|
{
|
|
// Increase counter
|
|
return asAtomicInc(refCount);
|
|
}
|
|
|
|
int Release() const
|
|
{
|
|
// Decrease the ref counter
|
|
if (asAtomicDec(refCount) == 0)
|
|
{
|
|
// Delete this object as no more references to it exists
|
|
delete this;
|
|
return 0;
|
|
}
|
|
|
|
return refCount;
|
|
}
|
|
|
|
// Copy the stored value from another any object
|
|
CScriptProjection &operator=(const CScriptProjection &other)
|
|
{
|
|
*p = *other.p;
|
|
return *this;
|
|
}
|
|
|
|
protected:
|
|
virtual ~CScriptProjection() { delete p; }
|
|
|
|
mutable int refCount;
|
|
|
|
public:
|
|
proj::Projection *p;
|
|
|
|
public:
|
|
bool init(bool fwd, bool inv) { return p->init(fwd, inv); }
|
|
bool forward(CScriptGeodeticCoords *pos, double &x, double &y) { return p->forward(*pos->p, x, y); }
|
|
bool inverse(double x, double y, CScriptGeodeticCoords *pos) { return p->inverse(x, y, *pos->p); }
|
|
|
|
CScriptProjection &operator=(const CScriptJson &v)
|
|
{
|
|
*p = *v.j;
|
|
return *this;
|
|
}
|
|
|
|
CScriptJson *opConv_json() { return new CScriptJson(*p); }
|
|
};
|
|
|
|
static CScriptProjection *ScriptProjectionFactory() { return new CScriptProjection(); }
|
|
} // namespace
|
|
|
|
namespace pro
|
|
{
|
|
CScriptImage *reprojectImage(CScriptImage *img, CScriptProjection *p) { return new CScriptImage(proj::reprojectImage(*img->img, *p->p)); }
|
|
CScriptImage *reprojectImageJ(CScriptImage *img, CScriptJson *p) { return new CScriptImage(proj::reprojectImage(*img->img, *p->j)); }
|
|
} // namespace pro
|
|
|
|
void registerProj(asIScriptEngine *engine)
|
|
{
|
|
engine->SetDefaultNamespace("proj");
|
|
|
|
////////////////////////////////
|
|
//////// Core Projection Class
|
|
////////////////////////////////
|
|
|
|
// Base type
|
|
engine->RegisterObjectType("Projection", sizeof(CScriptProjection), asOBJ_REF);
|
|
|
|
// Constructors
|
|
engine->RegisterObjectBehaviour("Projection", asBEHAVE_FACTORY, "Projection@ f()", asFUNCTION(ScriptProjectionFactory), asCALL_CDECL);
|
|
|
|
// Angelscript stuff
|
|
engine->RegisterObjectBehaviour("Projection", asBEHAVE_ADDREF, "void f()", asMETHOD(CScriptProjection, AddRef), asCALL_THISCALL);
|
|
engine->RegisterObjectBehaviour("Projection", asBEHAVE_RELEASE, "void f()", asMETHOD(CScriptProjection, Release), asCALL_THISCALL);
|
|
|
|
// Copy operator
|
|
engine->RegisterObjectMethod("Projection", "Projection &opAssign(const Projection &in)", asMETHODPR(CScriptProjection, operator=, (const CScriptProjection &), CScriptProjection &),
|
|
asCALL_THISCALL);
|
|
engine->RegisterObjectMethod("Projection", "Projection &opAssign(const nlohmann::json &in)", asMETHODPR(CScriptProjection, operator=, (const CScriptJson &), CScriptProjection &),
|
|
asCALL_THISCALL);
|
|
|
|
engine->RegisterObjectMethod("Projection", "nlohmann::json@ opImplConv()", asMETHOD(CScriptProjection, opConv_json), asCALL_THISCALL);
|
|
|
|
// Other funcs
|
|
engine->RegisterObjectMethod("Projection", "bool init(bool, bool)", asMETHOD(CScriptProjection, init), asCALL_THISCALL);
|
|
engine->RegisterObjectMethod("Projection", "bool forward(geodetic::geodetic_coords_t@, double &out, double &out)", asMETHOD(CScriptProjection, forward), asCALL_THISCALL);
|
|
engine->RegisterObjectMethod("Projection", "bool inverse(double, double, geodetic::geodetic_coords_t@)", asMETHOD(CScriptProjection, inverse), asCALL_THISCALL);
|
|
|
|
////////////////////////////////
|
|
//////// Other funcs
|
|
////////////////////////////////
|
|
|
|
engine->RegisterGlobalFunction("image::Image@ reprojectImage(image::Image &, nlohmann::json &)", asFUNCTION(pro::reprojectImageJ), asCALL_CDECL);
|
|
engine->RegisterGlobalFunction("image::Image@ reprojectImage(image::Image &, Projection &)", asFUNCTION(pro::reprojectImage), asCALL_CDECL);
|
|
}
|
|
} // namespace script
|
|
} // namespace satdump
|