#ifdef CGAL_USE_LEDA
#include <CGAL/basic.h>
#include <CGAL/LEDA_basic.h>
#include <CGAL/leda_integer.h>
#include <CGAL/Convex_hull_d.h>
#include <CGAL/IO/Convex_hull_d_window_stream.h>
#include <iostream>
#include <LEDA/random_source.h>
#include <LEDA/d3_window.h>
typedef leda_integer RT;
#define DDKERNEL
#ifdef DDKERNEL
#include <CGAL/Homogeneous_d.h>
typedef CGAL::Homogeneous_d<RT> Kernel_d;
typedef CGAL::Convex_hull_d<Kernel_d> Convex_hull_d;
#else
#include <CGAL/Homogeneous.h>
#include <CGAL/Convex_hull_d_traits_3.h>
typedef CGAL::Homogeneous<RT> Kernel_3;
typedef CGAL::Convex_hull_d_traits_3<Kernel_3> Kernel_d_3;
typedef CGAL::Convex_hull_d<Kernel_d_3> Convex_hull_d;
#endif
typedef Convex_hull_d::Point_d Point;
typedef Convex_hull_d::Simplex_handle Simplex_handle;
leda_vector leda_vec(const Point& p)
{ return leda_vector(CGAL::to_double(p.x()),
CGAL::to_double(p.y()),
CGAL::to_double(p.z()));
}
int main(int argc, char* argv[]) {
CGAL::set_pretty_mode ( std::cerr );
SETDTHREAD(93);
int numpoints = 20;
leda_string ifile("");
if (argc > 1) numpoints = atoi(argv[1]);
if (numpoints == 0 && argc > 2) ifile = leda_string(argv[2]);
leda_string startmess = "we randomly input ";
startmess += leda_string("%i",numpoints);
startmess += " and display the convex hull in space!";
leda_window W("Convex Hulls in Space");
enum { SURFACE, SKELETON, EXIT };
W.button("surface", SURFACE);
W.button("skeleton", SKELETON);
W.button("exit", EXIT);
W.init(-50,50,-50);
W.display();
W.message(startmess);
Convex_hull_d T(3);
leda_list<Point> L;
std::ifstream from(ifile);
if (from) from >> L;
else {
int r = numpoints;
CGAL_LEDA_SCOPE::rand_int.set_range(-r,r);
int x,y,z;
while (r--) {
CGAL_LEDA_SCOPE::rand_int >> x >> y >> z;
L.append(Point(x,y,z,1));
}
}
std::ofstream To("ch3-demo.log");
Point p;
// forall(p,L) { To << p; T.insert(p); T.is_valid(true); }
T.initialize(L.begin(),L.end());
T.print_statistics();
To.flush();
CGAL_LEDA_SCOPE::GRAPH<Point,int> G;
leda_node_array<leda_vector> pos(G);
leda_node v;
leda_d3_window W3(W,G,pos);
int but = SURFACE;
while (but != EXIT) {
switch (but) {
case SKELETON:
W3.set_solid(false);
W3.set_elim(false);
W3.set_node_width(2);
W3.set_node_color(leda_red);
CGAL::d3_graph(T,G);
break;
case SURFACE:
default: // SURFACE
W3.set_solid(true);
W3.set_elim(true);
CGAL::d3_surface_map(T,G);
break;
}
pos.init(G);
forall_nodes(v,G) pos[v] = leda_vec(G[v]);
W3.init(pos);
W3.draw();
while (but != MOUSE_BUTTON(3))
but = W3.move();
but = W.read_mouse();
}
}
#else
#include <iostream>
int main()
{
std::cout << "this program requires LEDA" << std::endl;
return 0;
}
#endif // CGAL_USE_LEDA
syntax highlighted by Code2HTML, v. 0.9.1