1 #pragma once
2 
3 #ifndef TEXTERNFX_H
4 #define TEXTERNFX_H
5 
6 #include "tbasefx.h"
7 #include "trasterfx.h"
8 
9 #undef DVAPI
10 #undef DVVAR
11 #ifdef TFX_EXPORTS
12 #define DVAPI DV_EXPORT_API
13 #define DVVAR DV_EXPORT_VAR
14 #else
15 #define DVAPI DV_IMPORT_API
16 #define DVVAR DV_IMPORT_VAR
17 #endif
18 
19 //---------------------------------------------------------
20 
21 class DVAPI TExternFx : public TBaseRasterFx {
22 public:
TExternFx()23   TExternFx() { setName(L"ExternFx"); }
24 
25   static TExternFx *create(std::string name);
26   void getNames(std::vector<std::string> &names);
27 };
28 
29 //---------------------------------------------------------
30 
31 class DVAPI TExternalProgramFx final : public TExternFx {
FX_DECLARATION(TExternalProgramFx)32   FX_DECLARATION(TExternalProgramFx)
33 
34   class Port {
35   public:
36     std::string m_name;
37     TRasterFxPort *m_port;  // n.b. la porta di output ha m_port=0
38     std::string m_ext;  // estensione del file in cui si legge/scrive l'immagine
39     Port() : m_name(), m_port(0), m_ext() {}
40     Port(std::string name, std::string ext, TRasterFxPort *port)
41         : m_name(name), m_port(port), m_ext(ext) {}
42   };
43 
44   std::map<std::string, Port> m_ports;
45   // std::map<std::string, TParamP> m_params;
46   std::vector<TParamP> m_params;
47 
48   TFilePath m_executablePath;
49   std::string m_args;
50   std::string m_externFxName;
51 
52 public:
53   TExternalProgramFx(std::string name);
54   TExternalProgramFx();
55   ~TExternalProgramFx();
56 
57   void initialize(std::string name);
58 
59   TFx *clone(bool recursive = true) const override;
60 
61   bool doGetBBox(double frame, TRectD &bBox,
62                  const TRenderSettings &info) override;
63   void doCompute(TTile &tile, double frame, const TRenderSettings &ri) override;
64 
canHandle(const TRenderSettings & info,double frame)65   bool canHandle(const TRenderSettings &info, double frame) override {
66     return false;
67   }
68 
setExecutable(TFilePath fp,std::string args)69   void setExecutable(TFilePath fp, std::string args) {
70     m_executablePath = fp;
71     m_args           = args;
72   }
73 
74   void addPort(std::string portName, std::string ext, bool isInput);
75   // void addParam(string paramName, const TParamP &param);
76 
77   void loadData(TIStream &is) override;
78   void saveData(TOStream &os) override;
79 
setExternFxName(std::string name)80   void setExternFxName(std::string name) { m_externFxName = name; }
getExternFxName()81   std::string getExternFxName() const { return m_externFxName; };
82 
83 private:
84   // not implemented
85   TExternalProgramFx(const TExternalProgramFx &);
86   TExternalProgramFx &operator=(const TExternalProgramFx &);
87 };
88 
89 #endif
90