Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#include "stdfx.h"
Toshihiro Shimizu 890ddd
e280ae
#ifdef _MSC_VER
Toshihiro Shimizu 890ddd
#pragma warning(disable : 4996)
e280ae
#endif
e280ae
e280ae
#ifdef _WIN32
Toshihiro Shimizu 890ddd
#include "windows.h"
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
#include <vector></vector>
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#include <stdio.h></stdio.h>
Toshihiro Shimizu 890ddd
#include <stdlib.h></stdlib.h>
Toshihiro Shimizu 890ddd
#include <time.h></time.h>
Toshihiro Shimizu 890ddd
#include <sys types.h=""></sys>
Toshihiro Shimizu 890ddd
#include <sys timeb.h=""></sys>
Toshihiro Shimizu 890ddd
#include <string.h></string.h>
Toshihiro Shimizu 890ddd
#include <math.h></math.h>
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#include "tfxparam.h"
Toshihiro Shimizu 890ddd
#include "tdoubleparam.h"
Toshihiro Shimizu 890ddd
#include "ttzpimagefx.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//===================================================================
Toshihiro Shimizu 890ddd
Shinya Kitaoka d1f6c4
class CalligraphicFx final : public TStandardRasterFx {
Shinya Kitaoka 120a6e
  FX_PLUGIN_DECLARATION(CalligraphicFx)
Shinya Kitaoka 120a6e
  TRasterFxPort m_input;
Shinya Kitaoka 120a6e
  TStringParamP m_colorIndex;
Shinya Kitaoka 120a6e
  TDoubleParamP m_thickness;
Shinya Kitaoka 120a6e
  TDoubleParamP m_horizontal;
Shinya Kitaoka 120a6e
  TDoubleParamP m_upWDiagonal;
Shinya Kitaoka 120a6e
  TDoubleParamP m_vertical;
Shinya Kitaoka 120a6e
  TDoubleParamP m_doWDiagonal;
Shinya Kitaoka 120a6e
  TDoubleParamP m_accuracy;
Shinya Kitaoka 120a6e
  TDoubleParamP m_noise;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Shinya Kitaoka 120a6e
  CalligraphicFx()
Shinya Kitaoka 120a6e
      : m_colorIndex(L"1,2,3")
Shinya Kitaoka 120a6e
      , m_thickness(5.0)
Shinya Kitaoka 120a6e
      , m_horizontal(100.0)
Shinya Kitaoka 120a6e
      , m_upWDiagonal(50.0)
Shinya Kitaoka 120a6e
      , m_vertical(0.0)
Shinya Kitaoka 120a6e
      , m_doWDiagonal(50.0)
Shinya Kitaoka 120a6e
      , m_accuracy(50.0)
Shinya Kitaoka 120a6e
      , m_noise(0.0) {
Shinya Kitaoka 120a6e
    m_thickness->setMeasureName("fxLength");
Shinya Kitaoka 120a6e
    addInputPort("Source", m_input);
Shinya Kitaoka 120a6e
    bindParam(this, "Color_Index", m_colorIndex);
Shinya Kitaoka 120a6e
    bindParam(this, "Thickness", m_thickness);
Shinya Kitaoka 120a6e
    bindParam(this, "Accuracy", m_accuracy);
Shinya Kitaoka 120a6e
    bindParam(this, "Noise", m_noise);
Shinya Kitaoka 120a6e
    bindParam(this, "Horizontal", m_horizontal);
Shinya Kitaoka 120a6e
    bindParam(this, "upWDiagonal", m_upWDiagonal);
Shinya Kitaoka 120a6e
    bindParam(this, "Vertical", m_vertical);
Shinya Kitaoka 120a6e
    bindParam(this, "doWDiagonal", m_doWDiagonal);
Shinya Kitaoka 120a6e
    m_thickness->setValueRange(0.0, 60.0);
Shinya Kitaoka 120a6e
    m_horizontal->setValueRange(0.0, 100.0);
Shinya Kitaoka 120a6e
    m_upWDiagonal->setValueRange(0.0, 100.0);
Shinya Kitaoka 120a6e
    m_vertical->setValueRange(0.0, 100.0);
Shinya Kitaoka 120a6e
    m_doWDiagonal->setValueRange(0.0, 100.0);
Shinya Kitaoka 120a6e
    m_accuracy->setValueRange(0.0, 100.0);
Shinya Kitaoka 120a6e
    m_noise->setValueRange(0.0, 100.0);
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  ~CalligraphicFx(){};
Shinya Kitaoka 120a6e
Shinya Kitaoka 38fd86
  bool doGetBBox(double frame, TRectD &bBox,
Shinya Kitaoka 38fd86
                 const TRenderSettings &info) override {
Shinya Kitaoka 120a6e
    if (m_input.isConnected()) {
Shinya Kitaoka 120a6e
      TRenderSettings info2(info);
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
      int shrink = tround((info.m_shrinkX + info.m_shrinkY) / 2.0);
Shinya Kitaoka 120a6e
      int argc   = 8;
Shinya Kitaoka 120a6e
      const char *argv[8];
Shinya Kitaoka 120a6e
      argv[0] = strsave(::to_string(m_colorIndex->getValue()).c_str());
Shinya Kitaoka 120a6e
      getValues(argv, argc, frame);
Shinya Kitaoka 120a6e
      SandorFxRenderData *calligraphicData =
Shinya Kitaoka 120a6e
          new SandorFxRenderData(Calligraphic, argc, argv, 0, shrink);
Shinya Kitaoka 120a6e
      CalligraphicParams ¶ms = calligraphicData->m_callParams;
Shinya Kitaoka 120a6e
      params.m_accuracy          = m_accuracy->getValue(frame);
Shinya Kitaoka 120a6e
      params.m_horizontal        = m_horizontal->getValue(frame);
Shinya Kitaoka 120a6e
      params.m_colorIndex        = m_colorIndex->getValue();
Shinya Kitaoka 120a6e
      params.m_upWDiagonal       = m_upWDiagonal->getValue(frame);
Shinya Kitaoka 120a6e
      params.m_noise             = m_noise->getValue(frame);
Shinya Kitaoka 120a6e
      params.m_doWDiagonal       = m_doWDiagonal->getValue(frame);
Shinya Kitaoka 120a6e
      params.m_thickness         = m_thickness->getValue(frame) * 0.5;
Shinya Kitaoka 120a6e
      params.m_vertical          = m_vertical->getValue(frame);
Shinya Kitaoka 120a6e
      info2.m_data.push_back(calligraphicData);
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
      return m_input->doGetBBox(frame, bBox, info2);
Shinya Kitaoka 120a6e
    } else {
Shinya Kitaoka 120a6e
      bBox = TRectD();
Shinya Kitaoka 120a6e
      return false;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
Shinya Kitaoka 38fd86
  bool canHandle(const TRenderSettings &info, double frame) override {
Shinya Kitaoka 38fd86
    return true;
Shinya Kitaoka 38fd86
  }
Shinya Kitaoka 120a6e
Shinya Kitaoka 473e70
  bool allowUserCacheOnPort(int port) override { return false; }
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
private:
Shinya Kitaoka 120a6e
  void getValues(const char *argv[], int argc, double frame) {
Shinya Kitaoka 120a6e
    double values[8];
Shinya Kitaoka 120a6e
    values[1] = m_noise->getValue(frame);
Shinya Kitaoka 120a6e
    values[2] = m_accuracy->getValue(frame);
Shinya Kitaoka 120a6e
    values[3] = m_doWDiagonal->getValue(frame);
Shinya Kitaoka 120a6e
    values[4] = m_vertical->getValue(frame);
Shinya Kitaoka 120a6e
    values[5] = m_upWDiagonal->getValue(frame);
Shinya Kitaoka 120a6e
    values[6] = m_horizontal->getValue(frame);
Shinya Kitaoka 120a6e
    values[7] = m_thickness->getValue(frame) * 0.5;
Shinya Kitaoka 120a6e
    convertParam(values, argv, argc);
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  //----------------------------------------------------------------------
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  char *strsave(const char *t) {
Shinya Kitaoka 120a6e
    char *s;
Shinya Kitaoka 120a6e
    s = (char *)malloc(strlen(t) + 1);
Shinya Kitaoka 120a6e
    strcpy(s, t);
Shinya Kitaoka 120a6e
    return s;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  //-----------------------------------------------------------------------
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  void convertParam(double param[], const char *cParam[], int cParamLen) {
Shinya Kitaoka 120a6e
    std::string app;
Shinya Kitaoka 120a6e
    for (int i = 1; i < cParamLen; i++) {
Shinya Kitaoka 120a6e
      app       = std::to_string(param[i]);
Shinya Kitaoka 120a6e
      cParam[i] = strsave(app.c_str());
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
Shinya Kitaoka 38fd86
  void doCompute(TTile &tile, double frame,
Shinya Kitaoka 38fd86
                 const TRenderSettings &ri) override {
Shinya Kitaoka 120a6e
    if (!m_input.isConnected()) return;
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
    int shrink = tround((ri.m_shrinkX + ri.m_shrinkY) / 2.0);
Shinya Kitaoka 120a6e
    int argc   = 8;
Shinya Kitaoka 120a6e
    const char *argv[8];
Shinya Kitaoka 120a6e
    argv[0] = strsave(::to_string(m_colorIndex->getValue()).c_str());
Shinya Kitaoka 120a6e
    getValues(argv, argc, frame);
Shinya Kitaoka 120a6e
    TRenderSettings ri2(ri);
Shinya Kitaoka 120a6e
    SandorFxRenderData *calligraphicData =
Shinya Kitaoka 120a6e
        new SandorFxRenderData(Calligraphic, argc, argv, 0, shrink);
Shinya Kitaoka 120a6e
    CalligraphicParams ¶ms = calligraphicData->m_callParams;
Shinya Kitaoka 120a6e
    params.m_accuracy          = m_accuracy->getValue(frame);
Shinya Kitaoka 120a6e
    params.m_horizontal        = m_horizontal->getValue(frame);
Shinya Kitaoka 120a6e
    params.m_colorIndex        = m_colorIndex->getValue();
Shinya Kitaoka 120a6e
    params.m_upWDiagonal       = m_upWDiagonal->getValue(frame);
Shinya Kitaoka 120a6e
    params.m_noise             = m_noise->getValue(frame);
Shinya Kitaoka 120a6e
    params.m_doWDiagonal       = m_doWDiagonal->getValue(frame);
Shinya Kitaoka 120a6e
    params.m_thickness         = m_thickness->getValue(frame) * 0.5;
Shinya Kitaoka 120a6e
    params.m_vertical          = m_vertical->getValue(frame);
Shinya Kitaoka 120a6e
    ri2.m_data.push_back(calligraphicData);
Shinya Kitaoka 120a6e
    ri2.m_userCachable = false;
Shinya Kitaoka 120a6e
    m_input->compute(tile, frame, ri2);
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  void transform(double frame, int port, const TRectD &rectOnOutput,
Shinya Kitaoka 120a6e
                 const TRenderSettings &infoOnOutput, TRectD &rectOnInput,
Shinya Kitaoka 473e70
                 TRenderSettings &infoOnInput) override {
Shinya Kitaoka 120a6e
    rectOnInput = rectOnOutput;
Shinya Kitaoka 120a6e
    infoOnInput = infoOnOutput;
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
    int shrink =
Shinya Kitaoka 120a6e
        tround((infoOnOutput.m_shrinkX + infoOnOutput.m_shrinkY) / 2.0);
Shinya Kitaoka 120a6e
    int argc = 8;
Shinya Kitaoka 120a6e
    const char *argv[8];
Shinya Kitaoka 120a6e
    argv[0] = strsave(::to_string(m_colorIndex->getValue()).c_str());
Shinya Kitaoka 120a6e
    getValues(argv, argc, frame);
Shinya Kitaoka 120a6e
    SandorFxRenderData *calligraphicData =
Shinya Kitaoka 120a6e
        new SandorFxRenderData(Calligraphic, argc, argv, 0, shrink);
Shinya Kitaoka 120a6e
    CalligraphicParams ¶ms = calligraphicData->m_callParams;
Shinya Kitaoka 120a6e
    params.m_accuracy          = m_accuracy->getValue(frame);
Shinya Kitaoka 120a6e
    params.m_horizontal        = m_horizontal->getValue(frame);
Shinya Kitaoka 120a6e
    params.m_colorIndex        = m_colorIndex->getValue();
Shinya Kitaoka 120a6e
    params.m_upWDiagonal       = m_upWDiagonal->getValue(frame);
Shinya Kitaoka 120a6e
    params.m_noise             = m_noise->getValue(frame);
Shinya Kitaoka 120a6e
    params.m_doWDiagonal       = m_doWDiagonal->getValue(frame);
Shinya Kitaoka 120a6e
    params.m_thickness         = m_thickness->getValue(frame);
Shinya Kitaoka 120a6e
    params.m_vertical          = m_vertical->getValue(frame);
Shinya Kitaoka 120a6e
    infoOnInput.m_data.push_back(calligraphicData);
Shinya Kitaoka 120a6e
    infoOnInput.m_userCachable = false;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//===================================================================
Shinya Kitaoka d1f6c4
class OutBorderFx final : public TStandardRasterFx {
Shinya Kitaoka 120a6e
  FX_PLUGIN_DECLARATION(OutBorderFx)
Shinya Kitaoka 120a6e
  TRasterFxPort m_input;
Shinya Kitaoka 120a6e
  TDoubleParamP m_thickness;
Shinya Kitaoka 120a6e
  TDoubleParamP m_horizontal;
Shinya Kitaoka 120a6e
  TDoubleParamP m_upWDiagonal;
Shinya Kitaoka 120a6e
  TDoubleParamP m_vertical;
Shinya Kitaoka 120a6e
  TDoubleParamP m_doWDiagonal;
Shinya Kitaoka 120a6e
  TDoubleParamP m_accuracy;
Shinya Kitaoka 120a6e
  TDoubleParamP m_noise;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Shinya Kitaoka 120a6e
  OutBorderFx()
Shinya Kitaoka 120a6e
      : m_thickness(5.0)
Shinya Kitaoka 120a6e
      , m_horizontal(100.0)
Shinya Kitaoka 120a6e
      , m_upWDiagonal(100.0)
Shinya Kitaoka 120a6e
      , m_vertical(100.0)
Shinya Kitaoka 120a6e
      , m_doWDiagonal(100.0)
Shinya Kitaoka 120a6e
      , m_accuracy(50.0)
Shinya Kitaoka 120a6e
      , m_noise(0.0) {
Shinya Kitaoka 120a6e
    m_thickness->setMeasureName("fxLength");
Shinya Kitaoka 120a6e
    addInputPort("Source", m_input);
Shinya Kitaoka 120a6e
    bindParam(this, "Thickness", m_thickness);
Shinya Kitaoka 120a6e
    bindParam(this, "Accuracy", m_accuracy);
Shinya Kitaoka 120a6e
    bindParam(this, "Noise", m_noise);
Shinya Kitaoka 120a6e
    bindParam(this, "Horizontal", m_horizontal);
Shinya Kitaoka 120a6e
    bindParam(this, "upWDiagonal", m_upWDiagonal);
Shinya Kitaoka 120a6e
    bindParam(this, "Vertical", m_vertical);
Shinya Kitaoka 120a6e
    bindParam(this, "doWDiagonal", m_doWDiagonal);
Shinya Kitaoka 120a6e
    m_thickness->setValueRange(0.0, 30.0);
Shinya Kitaoka 120a6e
    m_horizontal->setValueRange(0.0, 100.0);
Shinya Kitaoka 120a6e
    m_upWDiagonal->setValueRange(0.0, 100.0);
Shinya Kitaoka 120a6e
    m_vertical->setValueRange(0.0, 100.0);
Shinya Kitaoka 120a6e
    m_doWDiagonal->setValueRange(0.0, 100.0);
Shinya Kitaoka 120a6e
    m_accuracy->setValueRange(0.0, 100.0);
Shinya Kitaoka 120a6e
    m_noise->setValueRange(0.0, 100.0);
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  ~OutBorderFx(){};
Shinya Kitaoka 120a6e
Shinya Kitaoka 38fd86
  bool doGetBBox(double frame, TRectD &bBox,
Shinya Kitaoka 38fd86
                 const TRenderSettings &info) override {
Shinya Kitaoka 120a6e
    if (m_input.isConnected()) {
Shinya Kitaoka 120a6e
      TRenderSettings info2(info);
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
      int shrink = tround((info.m_shrinkX + info.m_shrinkY) / 2.0);
Shinya Kitaoka 120a6e
      int argc   = 8;
Shinya Kitaoka 120a6e
      const char *argv[8];
Shinya Kitaoka 120a6e
      argv[0] = "-1";
Shinya Kitaoka 120a6e
      getValues(argv, argc, frame);
Shinya Kitaoka 120a6e
      SandorFxRenderData *outBorderData =
Shinya Kitaoka 120a6e
          new SandorFxRenderData(OutBorder, argc, argv, 0, shrink);
Shinya Kitaoka 120a6e
      CalligraphicParams ¶ms = outBorderData->m_callParams;
Shinya Kitaoka 120a6e
      params.m_accuracy          = m_accuracy->getValue(frame);
Shinya Kitaoka 120a6e
      params.m_horizontal        = m_horizontal->getValue(frame);
Shinya Kitaoka 120a6e
      params.m_colorIndex        = L"-1";
Shinya Kitaoka 120a6e
      params.m_upWDiagonal       = m_upWDiagonal->getValue(frame);
Shinya Kitaoka 120a6e
      params.m_noise             = m_noise->getValue(frame);
Shinya Kitaoka 120a6e
      params.m_doWDiagonal       = m_doWDiagonal->getValue(frame);
Shinya Kitaoka 120a6e
      params.m_thickness         = m_thickness->getValue(frame);
Shinya Kitaoka 120a6e
      params.m_vertical          = m_vertical->getValue(frame);
Shinya Kitaoka 120a6e
      info2.m_data.push_back(outBorderData);
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
      return m_input->doGetBBox(frame, bBox, info2);
Shinya Kitaoka 120a6e
    } else {
Shinya Kitaoka 120a6e
      bBox = TRectD();
Shinya Kitaoka 120a6e
      return false;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
Shinya Kitaoka 38fd86
  bool canHandle(const TRenderSettings &info, double frame) override {
Shinya Kitaoka 38fd86
    return true;
Shinya Kitaoka 38fd86
  }
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
private:
Shinya Kitaoka 120a6e
  void getValues(const char *argv[], int argc, double frame) {
Shinya Kitaoka 120a6e
    double values[8];
Shinya Kitaoka 120a6e
    values[1] = m_noise->getValue(frame);
Shinya Kitaoka 120a6e
    values[2] = m_accuracy->getValue(frame);
Shinya Kitaoka 120a6e
    values[3] = m_doWDiagonal->getValue(frame);
Shinya Kitaoka 120a6e
    values[4] = m_vertical->getValue(frame);
Shinya Kitaoka 120a6e
    values[5] = m_upWDiagonal->getValue(frame);
Shinya Kitaoka 120a6e
    values[6] = m_horizontal->getValue(frame);
Shinya Kitaoka 120a6e
    values[7] = m_thickness->getValue(frame);
Shinya Kitaoka 120a6e
    convertParam(values, argv, argc);
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  //----------------------------------------------------------------------
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  char *strsave(const char *t) {
Shinya Kitaoka 120a6e
    char *s;
Shinya Kitaoka 120a6e
    s = (char *)malloc(strlen(t) + 1);
Shinya Kitaoka 120a6e
    strcpy(s, t);
Shinya Kitaoka 120a6e
    return s;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  //-----------------------------------------------------------------------
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  void convertParam(double param[], const char *cParam[], int cParamLen) {
Shinya Kitaoka 120a6e
    std::string app;
Shinya Kitaoka 120a6e
    for (int i = 1; i < cParamLen; i++) {
Shinya Kitaoka 120a6e
      app       = std::to_string(param[i]);
Shinya Kitaoka 120a6e
      cParam[i] = strsave(app.c_str());
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
Shinya Kitaoka 38fd86
  void doCompute(TTile &tile, double frame,
Shinya Kitaoka 38fd86
                 const TRenderSettings &ri) override {
Shinya Kitaoka 120a6e
    if (!m_input.isConnected()) return;
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
    int shrink = tround((ri.m_shrinkX + ri.m_shrinkY) / 2.0);
Shinya Kitaoka 120a6e
    int argc   = 8;
Shinya Kitaoka 120a6e
    const char *argv[8];
Shinya Kitaoka 120a6e
    argv[0] = "-1";
Shinya Kitaoka 120a6e
    getValues(argv, argc, frame);
Shinya Kitaoka 120a6e
    TRenderSettings ri2(ri);
Shinya Kitaoka 120a6e
    SandorFxRenderData *outBorderData =
Shinya Kitaoka 120a6e
        new SandorFxRenderData(OutBorder, argc, argv, 0, shrink);
Shinya Kitaoka 120a6e
    CalligraphicParams ¶ms = outBorderData->m_callParams;
Shinya Kitaoka 120a6e
    params.m_accuracy          = m_accuracy->getValue(frame);
Shinya Kitaoka 120a6e
    params.m_horizontal        = m_horizontal->getValue(frame);
Shinya Kitaoka 120a6e
    params.m_colorIndex        = L"-1";
Shinya Kitaoka 120a6e
    params.m_upWDiagonal       = m_upWDiagonal->getValue(frame);
Shinya Kitaoka 120a6e
    params.m_noise             = m_noise->getValue(frame);
Shinya Kitaoka 120a6e
    params.m_doWDiagonal       = m_doWDiagonal->getValue(frame);
Shinya Kitaoka 120a6e
    params.m_thickness         = m_thickness->getValue(frame);
Shinya Kitaoka 120a6e
    params.m_vertical          = m_vertical->getValue(frame);
Shinya Kitaoka 120a6e
    ri2.m_data.push_back(outBorderData);
Shinya Kitaoka 120a6e
    m_input->compute(tile, frame, ri2);
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  void transform(double frame, int port, const TRectD &rectOnOutput,
Shinya Kitaoka 120a6e
                 const TRenderSettings &infoOnOutput, TRectD &rectOnInput,
Shinya Kitaoka 473e70
                 TRenderSettings &infoOnInput) override {
Shinya Kitaoka 120a6e
    rectOnInput = rectOnOutput;
Shinya Kitaoka 120a6e
    infoOnInput = infoOnOutput;
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
    int shrink =
Shinya Kitaoka 120a6e
        tround((infoOnOutput.m_shrinkX + infoOnOutput.m_shrinkY) / 2.0);
Shinya Kitaoka 120a6e
    int argc = 8;
Shinya Kitaoka 120a6e
    const char *argv[8];
Shinya Kitaoka 120a6e
    argv[0] = "-1";
Shinya Kitaoka 120a6e
    getValues(argv, argc, frame);
Shinya Kitaoka 120a6e
    SandorFxRenderData *outBorderData =
Shinya Kitaoka 120a6e
        new SandorFxRenderData(OutBorder, argc, argv, 0, shrink);
Shinya Kitaoka 120a6e
    CalligraphicParams ¶ms = outBorderData->m_callParams;
Shinya Kitaoka 120a6e
    params.m_accuracy          = m_accuracy->getValue(frame);
Shinya Kitaoka 120a6e
    params.m_horizontal        = m_horizontal->getValue(frame);
Shinya Kitaoka 120a6e
    params.m_colorIndex        = L"-1";
Shinya Kitaoka 120a6e
    params.m_upWDiagonal       = m_upWDiagonal->getValue(frame);
Shinya Kitaoka 120a6e
    params.m_noise             = m_noise->getValue(frame);
Shinya Kitaoka 120a6e
    params.m_doWDiagonal       = m_doWDiagonal->getValue(frame);
Shinya Kitaoka 120a6e
    params.m_thickness         = m_thickness->getValue(frame);
Shinya Kitaoka 120a6e
    params.m_vertical          = m_vertical->getValue(frame);
Shinya Kitaoka 120a6e
    infoOnInput.m_data.push_back(outBorderData);
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
FX_PLUGIN_IDENTIFIER(CalligraphicFx, "calligraphicFx");
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
FX_PLUGIN_IDENTIFIER(OutBorderFx, "outBorderFx");