#include "ZGo.h"



//---- ZGoDistort3D ----------------------------------------------------------//

//---- ZGoDistort3D

ZGoDistort3D::ZGoDistort3D(ZGo *zgo, ZGoPARAMS *input, ZGoPARAMS *output)
{
  this->zgo = zgo;
  this->input = input->setInput(this);
  this->output = output->setOutput(this);

  this->fnType = new ZGoNAME(zgo, "ZGoDistort3D");

  //  Parameters

  obj = (ZGo3DOBJECT *)input->get("object");
  dist = (ZGoDISTORTION3D *)input->get("distortion");
  result = (ZGo3DOBJECT *)output->get("result");
}



//---- process

void ZGoDistort3D::process()
{
  obj->process();
  dist->process();

  result->clear();

  processObject(obj, NULL, result);
}



//---- processObject

void ZGoDistort3D::processObject(ZGo3DOBJECT *obj, ZGoMATRIX *m, ZGo3DOBJECT *result)
{
  int i;

  //- Set up matrix for this object

  ZGoMATRIX *objm = new ZGoMATRIX(zgo, m, obj->trans);

  //- Distort each point to result

  double tpoint[3];

  for(i=0; i<obj->points; i++)
  {
    //  Transform point

//    tpoint[0] = obj->point[i][0]*objm->m00 + obj->point[i][1]*objm->m01 + obj->point[i][2]*objm->m02 + objm->m03;
//    tpoint[1] = obj->point[i][0]*objm->m10 + obj->point[i][1]*objm->m11 + obj->point[i][2]*objm->m12 + objm->m13;
//    tpoint[2] = obj->point[i][0]*objm->m20 + obj->point[i][1]*objm->m21 + obj->point[i][2]*objm->m22 + objm->m23;

    //  Distort into result

    dist->distort(obj->point[i], result->point[i]);
  }

  result->points = obj->points;

  //- Move faces across

  result->faces = obj->faces;
  result->face = obj->face;

  //- Transfer transformation (was: No transformation)

//  result->trans->identity();
  result->trans = obj->trans;

  //- Move subobjects across

  for(i=0; i<obj->objects; i++)
  {
    result->object[i] = new ZGo3DOBJECT(zgo);
    processObject(obj->object[i], objm, result->object[i]);
  }

  result->objects = obj->objects;

  //- Done

  delete objm;
}



//---- end of file -----------------------------------------------------------//
