1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137
|
// Copyright (c) 1997
// Utrecht University (The Netherlands),
// ETH Zurich (Switzerland),
// INRIA Sophia-Antipolis (France),
// Max-Planck-Institute Saarbruecken (Germany),
// and Tel-Aviv University (Israel). All rights reserved.
//
// This file is part of CGAL (www.cgal.org)
//
// $URL: https://github.com/CGAL/cgal/blob/v6.1/Stream_support/include/CGAL/IO/OFF/File_header_extended_OFF_impl.h $
// $Id: include/CGAL/IO/OFF/File_header_extended_OFF_impl.h b26b07a1242 $
// SPDX-License-Identifier: LGPL-3.0-or-later OR LicenseRef-Commercial
//
//
// Author(s) : Lutz Kettner <kettner@mpi-sb.mpg.de>
#ifdef CGAL_HEADER_ONLY
#define CGAL_INLINE_FUNCTION inline
#else
#define CGAL_INLINE_FUNCTION
#endif
#include <CGAL/IO/OFF/File_header_extended_OFF.h>
#include <CGAL/basic.h>
#include <cstdlib>
#include <cctype>
#include <cstring>
#include <iostream>
#include <sstream>
#include <algorithm>
namespace CGAL {
CGAL_INLINE_FUNCTION
bool File_header_extended_OFF::
is_POL() const {
return is_OFF() && polyhedral_surface();
}
CGAL_INLINE_FUNCTION
bool File_header_extended_OFF::
is_CBP() const {
return is_POL() && triangulated() && non_empty_facets() &&
normalized_to_sphere() && radius() <= 1.0;
}
CGAL_INLINE_FUNCTION
bool File_header_extended_OFF::
is_TRN() const { return is_CBP() && terrain(); }
CGAL_INLINE_FUNCTION
int File_header_extended_OFF::
is_CBPn() const {
if ( is_POL() && triangulated() && non_empty_facets() &&
normalized_to_sphere() && rounded() &&
(radius() <= double( 1l << rounded_bits())))
return rounded_bits();
else
return 0;
}
CGAL_INLINE_FUNCTION
int File_header_extended_OFF::
is_TRNn() const { return ( terrain() ? is_CBPn() : 0); }
// The proper file suffix with respect to file format.
CGAL_INLINE_FUNCTION
std::string File_header_extended_OFF::
suffix() const {
if ( is_TRNn()) {
std::ostringstream out;
out << "trn" << m_rounded_bits << '\0';
return out.str();
}
if ( is_TRN())
return std::string("trn");
if ( is_CBPn()) {
std::ostringstream out;
out << "cbp" << m_rounded_bits << '\0';
return out.str();
}
if ( is_CBP())
return std::string("cbp");
if ( is_POL())
return std::string("pol");
return std::string("off");
}
// The proper format name.
CGAL_INLINE_FUNCTION
std::string File_header_extended_OFF::
format_name() const {
if ( is_TRNn()) {
std::ostringstream out;
out << "TRN" << m_rounded_bits << '\0';
return out.str();
}
if ( is_TRN())
return std::string("TRN");
if ( is_CBPn()) {
std::ostringstream out;
out << "CBP" << m_rounded_bits << '\0';
return out.str();
}
if ( is_CBP())
return std::string("CBP");
if ( is_POL())
return std::string("POL");
return std::string("OFF");
}
CGAL_INLINE_FUNCTION
File_header_extended_OFF& File_header_extended_OFF::
operator+=( const File_header_extended_OFF& header) {
m_verbose = m_verbose || header.m_verbose;
m_polyhedral_surface = m_polyhedral_surface &&
header.m_polyhedral_surface;
m_halfedges += header.m_halfedges;
m_triangulated = m_triangulated && header.m_triangulated;
m_non_empty_facets = m_non_empty_facets &&
header.m_non_empty_facets;
m_terrain = m_terrain && header.m_terrain;
m_normalized_to_sphere = m_normalized_to_sphere &&
header.m_normalized_to_sphere;
m_radius = (std::max)(m_radius, header.m_radius);
m_rounded = m_rounded && header.m_rounded;
m_rounded_bits = (std::max)( m_rounded_bits,
header.m_rounded_bits);
m_off_header = m_off_header && header.m_off_header;
return *this;
}
} //namespace CGAL
// EOF //
|