mirror of https://github.com/CGAL/cgal
Removed redundant
This commit is contained in:
parent
588b021d51
commit
2b0969d10e
|
|
@ -1,300 +0,0 @@
|
|||
// Copyright (c) 2022 GeometryFactory Sarl (France).
|
||||
// All rights reserved.
|
||||
//
|
||||
// This file is part of CGAL (www.cgal.org).
|
||||
//
|
||||
// $URL$
|
||||
// $Id$
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial
|
||||
//
|
||||
// Author(s): Guillaume Damiand <guillaume.damiand@liris.cnrs.fr>
|
||||
// Mostafa Ashraf <mostaphaashraf1996@gmail.com>
|
||||
|
||||
#ifndef CGAL_DRAW_LCC_H
|
||||
#define CGAL_DRAW_LCC_H
|
||||
|
||||
#include <CGAL/Graphic_buffer.h>
|
||||
#include <CGAL/Drawing_functor.h>
|
||||
#include <CGAL/Qt/Basic_viewer_qt.h>
|
||||
#include <functional>
|
||||
|
||||
#ifdef CGAL_USE_BASIC_VIEWER
|
||||
|
||||
#include <CGAL/Linear_cell_complex_operations.h>
|
||||
#include <CGAL/Random.h>
|
||||
|
||||
namespace CGAL {
|
||||
|
||||
|
||||
// CGAL::IO::Color face_color(const DS &aVal, face_handle dh) const {
|
||||
// CGAL::Random random((unsigned int)(aVal.darts().index(dh)));
|
||||
// return get_random_color(random);
|
||||
// }
|
||||
|
||||
namespace draw_function_for_lcc
|
||||
{
|
||||
|
||||
typedef CGAL::Exact_predicates_inexact_constructions_kernel Local_kernel;
|
||||
typedef Local_kernel::Point_3 Local_point;
|
||||
typedef Local_kernel::Vector_3 Local_vector;
|
||||
|
||||
template <class LCC, class Local_kernel, int dim = LCC::ambient_dimension>
|
||||
struct LCC_geom_utils;
|
||||
|
||||
template <class LCC, class Local_kernel>
|
||||
struct LCC_geom_utils<LCC, Local_kernel, 3>
|
||||
{
|
||||
static typename Local_kernel::Vector_3
|
||||
get_vertex_normal(const LCC &lcc, typename LCC::Dart_const_handle dh)
|
||||
{
|
||||
typename Local_kernel::Vector_3 n =
|
||||
internal::Geom_utils<typename LCC::Traits, Local_kernel>::
|
||||
get_local_vector(CGAL::compute_normal_of_cell_0<LCC>(lcc, dh));
|
||||
n = n / (CGAL::sqrt(n * n));
|
||||
return n;
|
||||
}
|
||||
};
|
||||
|
||||
template <class LCC, class Local_kernel>
|
||||
struct LCC_geom_utils<LCC, Local_kernel, 2>
|
||||
{
|
||||
static typename Local_kernel::Vector_3
|
||||
get_vertex_normal(const LCC &, typename LCC::Dart_const_handle)
|
||||
{
|
||||
typename Local_kernel::Vector_3 n=CGAL::NULL_VECTOR;
|
||||
return n;
|
||||
}
|
||||
};
|
||||
|
||||
template <typename BufferType=float, class LCC, class DrawingFunctorLCC>
|
||||
void compute_face(typename LCC::Dart_const_handle dh,
|
||||
typename LCC::Dart_const_handle voldh, const LCC *lcc,
|
||||
const DrawingFunctorLCC &m_drawing_functor,
|
||||
Graphic_buffer<BufferType> &graphic_buffer)
|
||||
{
|
||||
if (!m_drawing_functor.are_faces_enabled() ||
|
||||
!m_drawing_functor.draw_face(*lcc, dh))
|
||||
{ return; }
|
||||
|
||||
// We fill only closed faces.
|
||||
typename LCC::Dart_const_handle cur=dh;
|
||||
do
|
||||
{
|
||||
if (!lcc->is_next_exist(cur))
|
||||
{ return; } // open face=>not filled
|
||||
cur = lcc->next(cur);
|
||||
}
|
||||
while (cur!=dh);
|
||||
|
||||
if (m_drawing_functor.colored_volume(*lcc, voldh))
|
||||
{
|
||||
CGAL::IO::Color c=m_drawing_functor.volume_color(*lcc, voldh);
|
||||
graphic_buffer.face_begin(c);
|
||||
}
|
||||
else if (m_drawing_functor.colored_face(*lcc, dh))
|
||||
{
|
||||
CGAL::IO::Color c=m_drawing_functor.face_color(*lcc, dh);
|
||||
graphic_buffer.face_begin(c);
|
||||
}
|
||||
else
|
||||
{ graphic_buffer.face_begin(); }
|
||||
|
||||
cur=dh;
|
||||
do
|
||||
{
|
||||
graphic_buffer.add_point_in_face
|
||||
(lcc->point(cur),
|
||||
LCC_geom_utils<LCC, Local_kernel>::get_vertex_normal(*lcc, cur));
|
||||
cur=lcc->next(cur);
|
||||
}
|
||||
while (cur!=dh);
|
||||
|
||||
graphic_buffer.face_end();
|
||||
}
|
||||
|
||||
template <typename BufferType=float, class LCC, class DrawingFunctor>
|
||||
void compute_edge(typename LCC::Dart_const_handle dh, const LCC *lcc,
|
||||
const DrawingFunctor &m_drawing_functor,
|
||||
Graphic_buffer<BufferType> &graphic_buffer)
|
||||
{
|
||||
if (!m_drawing_functor.are_edges_enabled() ||
|
||||
!m_drawing_functor.draw_edge(*lcc, dh))
|
||||
{ return; }
|
||||
|
||||
const typename LCC::Point& p1=lcc->point(dh);
|
||||
typename LCC::Dart_const_handle d2=lcc->other_extremity(dh);
|
||||
if (d2!=nullptr)
|
||||
{
|
||||
if (m_drawing_functor.colored_edge(*lcc, dh))
|
||||
{
|
||||
graphic_buffer.add_segment(p1, lcc->point(d2),
|
||||
m_drawing_functor.edge_color(*lcc, dh));
|
||||
}
|
||||
else
|
||||
{ graphic_buffer.add_segment(p1, lcc->point(d2)); }
|
||||
}
|
||||
}
|
||||
|
||||
template <typename BufferType = float, class LCC, class DrawingFunctorLCC>
|
||||
void compute_vertex(typename LCC::Dart_const_handle dh, const LCC *lcc,
|
||||
const DrawingFunctorLCC &m_drawing_functor,
|
||||
Graphic_buffer<BufferType> &graphic_buffer)
|
||||
{
|
||||
if (!m_drawing_functor.are_vertices_enabled() ||
|
||||
!m_drawing_functor.draw_vertex(*lcc, dh))
|
||||
{ return; }
|
||||
|
||||
if (m_drawing_functor.colored_vertex(*lcc, dh))
|
||||
{
|
||||
graphic_buffer.add_point(lcc->point(dh),
|
||||
m_drawing_functor.vertex_color(*lcc, dh));
|
||||
}
|
||||
else
|
||||
{ graphic_buffer.add_point(lcc->point(dh)); }
|
||||
}
|
||||
|
||||
template <typename BufferType = float, class LCC, class DrawingFunctor>
|
||||
void compute_elements(const LCC *lcc, Graphic_buffer<BufferType> &graphic_buffer,
|
||||
const DrawingFunctor &m_drawing_functor)
|
||||
{
|
||||
if (lcc==nullptr)
|
||||
{ return; }
|
||||
|
||||
typename LCC::size_type markvolumes = lcc->get_new_mark();
|
||||
typename LCC::size_type markfaces = lcc->get_new_mark();
|
||||
typename LCC::size_type markedges = lcc->get_new_mark();
|
||||
typename LCC::size_type markvertices = lcc->get_new_mark();
|
||||
typename LCC::size_type oriented_mark = lcc->get_new_mark();
|
||||
|
||||
lcc->orient(oriented_mark);
|
||||
|
||||
for(typename LCC::Dart_range::const_iterator it=lcc->darts().begin(),
|
||||
itend=lcc->darts().end(); it!=itend; ++it)
|
||||
{
|
||||
if (!lcc->is_marked(it, markvolumes) &&
|
||||
m_drawing_functor.draw_volume(*lcc, it))
|
||||
{
|
||||
for(typename LCC::template Dart_of_cell_basic_range<3>::const_iterator
|
||||
itv=lcc->template darts_of_cell_basic<3>(it, markvolumes).begin(),
|
||||
itvend=lcc->template darts_of_cell_basic<3>(it, markvolumes).end();
|
||||
itv!=itvend; ++itv)
|
||||
{
|
||||
lcc->mark(itv, markvolumes);
|
||||
if (!lcc->is_marked(itv, markfaces) &&
|
||||
lcc->is_marked(itv, oriented_mark) &&
|
||||
m_drawing_functor.draw_face(*lcc, itv))
|
||||
{
|
||||
if (!m_drawing_functor.volume_wireframe(*lcc, itv) &&
|
||||
!m_drawing_functor.face_wireframe(*lcc, itv))
|
||||
{ compute_face(itv, it, lcc, m_drawing_functor, graphic_buffer); }
|
||||
for(typename LCC::template Dart_of_cell_basic_range<2>::const_iterator
|
||||
itf=lcc->template darts_of_cell_basic<2>(itv, markfaces).begin(),
|
||||
itfend=lcc->template darts_of_cell_basic<2>(itv, markfaces).end();
|
||||
itf!=itfend; ++itf)
|
||||
{
|
||||
lcc->mark(itf, markfaces);
|
||||
if (!lcc->is_marked(itf, markedges) &&
|
||||
m_drawing_functor.draw_edge(*lcc, itf))
|
||||
{
|
||||
compute_edge(itf, lcc, m_drawing_functor, graphic_buffer);
|
||||
for(typename LCC::template Dart_of_cell_basic_range<1>::const_iterator
|
||||
ite=lcc->template darts_of_cell_basic<1>(itf, markedges).begin(),
|
||||
iteend=lcc->template darts_of_cell_basic<1>(itf, markedges).end();
|
||||
ite!=iteend; ++ite)
|
||||
{
|
||||
lcc->mark(ite, markedges);
|
||||
if (!lcc->is_marked(ite, markvertices) &&
|
||||
m_drawing_functor.draw_vertex(*lcc, ite))
|
||||
{
|
||||
compute_vertex(ite, lcc, m_drawing_functor, graphic_buffer);
|
||||
CGAL::mark_cell<LCC, 0>(*lcc, ite, markvertices);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (typename LCC::Dart_range::const_iterator it = lcc->darts().begin(),
|
||||
itend = lcc->darts().end(); it != itend; ++it)
|
||||
{
|
||||
lcc->unmark(it, markvertices);
|
||||
lcc->unmark(it, markedges);
|
||||
lcc->unmark(it, markfaces);
|
||||
lcc->unmark(it, markvolumes);
|
||||
lcc->unmark(it, oriented_mark);
|
||||
}
|
||||
|
||||
lcc->free_mark(markvolumes);
|
||||
lcc->free_mark(markfaces);
|
||||
lcc->free_mark(markedges);
|
||||
lcc->free_mark(markvertices);
|
||||
lcc->free_mark(oriented_mark);
|
||||
}
|
||||
|
||||
} // namespace draw_function
|
||||
|
||||
/**
|
||||
* @brief This function is responsible for filling the buffer to allow
|
||||
* visualization.
|
||||
*
|
||||
* @param graphic_buffer
|
||||
* @param m_drawing_functor
|
||||
* @param alcc
|
||||
*/
|
||||
template <typename BufferType = float, class LCC, class DrawingFunctor>
|
||||
void add_in_graphic_buffer_lcc(const LCC &alcc, Graphic_buffer<BufferType> &graphic_buffer,
|
||||
const DrawingFunctor &m_drawing_functor)
|
||||
{
|
||||
draw_function_for_lcc::compute_elements(&alcc, graphic_buffer, m_drawing_functor);
|
||||
}
|
||||
|
||||
template <typename BufferType = float, class LCC>
|
||||
void add_in_graphic_buffer_lcc(const LCC &alcc, Graphic_buffer<BufferType> &graphic_buffer)
|
||||
{
|
||||
Drawing_functor_with_volume<LCC,typename LCC::Dart_const_handle,
|
||||
typename LCC::Dart_const_handle,
|
||||
typename LCC::Dart_const_handle,
|
||||
typename LCC::Dart_const_handle> drawing_functor_with_volume;
|
||||
|
||||
add_in_graphic_buffer_lcc(alcc, graphic_buffer, drawing_functor_with_volume);
|
||||
}
|
||||
|
||||
// Specialization of draw function.
|
||||
#define CGAL_LCC_TYPE \
|
||||
CGAL::Linear_cell_complex_base<d_, ambient_dim, Traits_, Items_, Alloc_, \
|
||||
Map, Refs, Storage_>
|
||||
|
||||
template<unsigned int d_, unsigned int ambient_dim, class Traits_,
|
||||
class Items_, class Alloc_,
|
||||
template <unsigned int, class, class, class, class> class Map,
|
||||
class Refs, class Storage_,
|
||||
class DrawingFunctor>
|
||||
void draw(const CGAL_LCC_TYPE &alcc, const DrawingFunctor &drawing_functor,
|
||||
const char *title = "LCC for CMap Basic Viewer")
|
||||
{
|
||||
Graphic_buffer<float> buffer;
|
||||
add_in_graphic_buffer_lcc(alcc, buffer, drawing_functor);
|
||||
draw_buffer(buffer);
|
||||
}
|
||||
|
||||
template<unsigned int d_, unsigned int ambient_dim, class Traits_,
|
||||
class Items_, class Alloc_,
|
||||
template <unsigned int, class, class, class, class> class Map,
|
||||
class Refs, class Storage_>
|
||||
void draw(const CGAL_LCC_TYPE &alcc, const char *title = "LCC for CMap Basic Viewer")
|
||||
{
|
||||
Graphic_buffer<float> buffer;
|
||||
add_in_graphic_buffer_lcc(alcc, buffer);
|
||||
draw_buffer(buffer);
|
||||
}
|
||||
|
||||
#undef CGAL_LCC_TYPE
|
||||
|
||||
} // End namespace CGAL
|
||||
|
||||
#endif // CGAL_USE_BASIC_VIEWER
|
||||
|
||||
#endif // CGAL_DRAW_LCC_H
|
||||
Loading…
Reference in New Issue