// Gnurbs - A curve and surface library
// Copyright (C) 2008-2026 Eric Bechet
//
// See the LICENSE file for contributions and license information.
// Please report all bugs and problems to <bechet@cadxfem.org>.
//

#include <iostream>
#include <vector>

#include "nvtkdisplay.h"
#include "nbspline.h"

// fonction that computes the intersections between curves
void intersect(nbspline &crv1,nbspline &crv2,std::vector<npoint> &pts,std::vector<npoint> &pts_crv1,std::vector<npoint> &pts_crv2)
{
  // partie a coder.
  std::cout << pts.size() << " intersection poinbs" << std::endl;
  std::cout << pts_crv1.size() << " intersection poinbs on curve 1" << std::endl;
  std::cout << pts_crv2.size() << " intersection poinbs on curve 2" << std::endl;
}

int main(void)
{
  data_container data;
  nvtkdisplay display;

  std::vector<npoint> list0; // intersection points (xyz)
  std::vector<npoint> list1; // intersection points (t on crv1)
  std::vector<npoint> list2; // intersection points (t on crv2)
  nbspline crv1(5,3),crv2(6,3); // b-splines curves

  crv1.u(0)=0.;crv1.u(1)=0.;crv1.u(2)=0.;crv1.u(3)=0.;
  crv1.u(4)=0.5;
  crv1.u(5)=1.;crv1.u(6)=1.;crv1.u(7)=1.;crv1.u(8)=1.;

  crv2.u(0)=0.;crv2.u(1)=0.;crv2.u(2)=0.;crv2.u(3)=0.;
  crv2.u(4)=0.25;
  crv2.u(5)=0.75;
  crv2.u(6)=1.;crv2.u(7)=1.;crv2.u(8)=1.;crv2.u(9)=1.;

  
  crv1.CP(0)=npoint(0,0,0);  crv1.CP(1)=npoint(1,0,0);
  crv1.CP(2)=npoint(1,1,0);  crv1.CP(3)=npoint(0,1,0);
  crv1.CP(4)=npoint(1,-1,0);
  crv2.CP(0)=npoint(0,1,0);  crv2.CP(1)=npoint(1,1,0);
  crv2.CP(2)=npoint(1,-1,0); crv2.CP(3)=npoint(1,0,0);
  crv2.CP(4)=npoint(0,0,0);  crv2.CP(5)=npoint(1,2,0);

  intersect(crv1,crv2,list0,list1,list2); // call to the function computing intersection points

  for (int i=0;i<list0.size();++i) data.add_point(list0[i]);
  crv1.Display(data);
  crv2.Display(data);
  display.init_data(data);
  display.display();
  return 0;
}

