mirror of https://github.com/CGAL/cgal
Updated testsuite
This commit is contained in:
parent
4623421877
commit
f5d2df8590
|
|
@ -3819,19 +3819,33 @@ Surface_mesh_simplification/examples/Surface_mesh_simplification/edge_collapse_e
|
|||
Surface_mesh_simplification/examples/Surface_mesh_simplification/edge_collapse_polyhedron.cmd eol=lf
|
||||
Surface_mesh_simplification/off2gts/CMakeLists.txt -text
|
||||
Surface_mesh_simplification/off2gts/off2gts.cpp -text
|
||||
Surface_mesh_simplification/test/Surface_mesh_simplification/basics.h -text
|
||||
Surface_mesh_simplification/test/Surface_mesh_simplification/data/FPT.off -text
|
||||
Surface_mesh_simplification/test/Surface_mesh_simplification/data/MODELS -text
|
||||
Surface_mesh_simplification/test/Surface_mesh_simplification/data/anchor.off -text
|
||||
Surface_mesh_simplification/test/Surface_mesh_simplification/data/bones.off -text
|
||||
Surface_mesh_simplification/test/Surface_mesh_simplification/data/bull.off -text
|
||||
Surface_mesh_simplification/test/Surface_mesh_simplification/data/couplingdown.off -text
|
||||
Surface_mesh_simplification/test/Surface_mesh_simplification/data/cow.off -text
|
||||
Surface_mesh_simplification/test/Surface_mesh_simplification/data/cross.off -text
|
||||
Surface_mesh_simplification/test/Surface_mesh_simplification/data/cube.off -text svneol=unset#application/octet-stream
|
||||
Surface_mesh_simplification/test/Surface_mesh_simplification/data/cube_LT.audit -text
|
||||
Surface_mesh_simplification/test/Surface_mesh_simplification/data/cube_MP.audit -text
|
||||
Surface_mesh_simplification/test/Surface_mesh_simplification/data/cube_open.off -text svneol=unset#application/octet-stream
|
||||
Surface_mesh_simplification/test/Surface_mesh_simplification/data/cube_open_LT.audit -text
|
||||
Surface_mesh_simplification/test/Surface_mesh_simplification/data/cube_open_MP.audit -text
|
||||
Surface_mesh_simplification/test/Surface_mesh_simplification/data/dragknob.off -text
|
||||
Surface_mesh_simplification/test/Surface_mesh_simplification/data/eight.off -text svneol=unset#application/octet-stream
|
||||
Surface_mesh_simplification/test/Surface_mesh_simplification/data/eight_LT.audit -text
|
||||
Surface_mesh_simplification/test/Surface_mesh_simplification/data/eight_MP.audit -text
|
||||
Surface_mesh_simplification/test/Surface_mesh_simplification/data/elephant.off -text
|
||||
Surface_mesh_simplification/test/Surface_mesh_simplification/data/ellipsoid.off -text
|
||||
Surface_mesh_simplification/test/Surface_mesh_simplification/data/fandisk.off -text
|
||||
Surface_mesh_simplification/test/Surface_mesh_simplification/data/femur.off -text
|
||||
Surface_mesh_simplification/test/Surface_mesh_simplification/data/genus1.off -text svneol=unset#application/octet-stream
|
||||
Surface_mesh_simplification/test/Surface_mesh_simplification/data/genus1_LT.audit -text
|
||||
Surface_mesh_simplification/test/Surface_mesh_simplification/data/genus1_MP.audit -text
|
||||
Surface_mesh_simplification/test/Surface_mesh_simplification/data/handle.off -text
|
||||
Surface_mesh_simplification/test/Surface_mesh_simplification/data/head_open_with_holes.off -text svneol=unset#application/octet-stream
|
||||
Surface_mesh_simplification/test/Surface_mesh_simplification/data/head_open_with_holes_LT.audit -text
|
||||
Surface_mesh_simplification/test/Surface_mesh_simplification/data/head_open_with_holes_MP.audit -text
|
||||
|
|
@ -3847,12 +3861,27 @@ Surface_mesh_simplification/test/Surface_mesh_simplification/data/helmet_MP.audi
|
|||
Surface_mesh_simplification/test/Surface_mesh_simplification/data/hexagon_open.off -text svneol=unset#application/octet-stream
|
||||
Surface_mesh_simplification/test/Surface_mesh_simplification/data/hexagon_open_LT.audit -text
|
||||
Surface_mesh_simplification/test/Surface_mesh_simplification/data/hexagon_open_MP.audit -text
|
||||
Surface_mesh_simplification/test/Surface_mesh_simplification/data/joint.off -text
|
||||
Surface_mesh_simplification/test/Surface_mesh_simplification/data/knot1.off -text
|
||||
Surface_mesh_simplification/test/Surface_mesh_simplification/data/knot2.off -text
|
||||
Surface_mesh_simplification/test/Surface_mesh_simplification/data/lion-head.off -text
|
||||
Surface_mesh_simplification/test/Surface_mesh_simplification/data/man.off -text
|
||||
Surface_mesh_simplification/test/Surface_mesh_simplification/data/mushroom.off -text
|
||||
Surface_mesh_simplification/test/Surface_mesh_simplification/data/oblong.off -text
|
||||
Surface_mesh_simplification/test/Surface_mesh_simplification/data/oct.off -text svneol=unset#application/octet-stream
|
||||
Surface_mesh_simplification/test/Surface_mesh_simplification/data/oct_LT.audit -text
|
||||
Surface_mesh_simplification/test/Surface_mesh_simplification/data/oct_MP.audit -text
|
||||
Surface_mesh_simplification/test/Surface_mesh_simplification/data/oni.off -text svneol=unset#application/octet-stream
|
||||
Surface_mesh_simplification/test/Surface_mesh_simplification/data/oni_LT.audit -text
|
||||
Surface_mesh_simplification/test/Surface_mesh_simplification/data/oni_MP.audit -text
|
||||
Surface_mesh_simplification/test/Surface_mesh_simplification/data/pinion.off -text
|
||||
Surface_mesh_simplification/test/Surface_mesh_simplification/data/pipe.off -text
|
||||
Surface_mesh_simplification/test/Surface_mesh_simplification/data/pyramid.off -text
|
||||
Surface_mesh_simplification/test/Surface_mesh_simplification/data/remeshed_cube_1.off -text
|
||||
Surface_mesh_simplification/test/Surface_mesh_simplification/data/retinal.off -text
|
||||
Surface_mesh_simplification/test/Surface_mesh_simplification/data/rotor.off -text
|
||||
Surface_mesh_simplification/test/Surface_mesh_simplification/data/sphere.off -text
|
||||
Surface_mesh_simplification/test/Surface_mesh_simplification/data/spool.off -text
|
||||
Surface_mesh_simplification/test/Surface_mesh_simplification/data/square_open.off -text svneol=unset#application/octet-stream
|
||||
Surface_mesh_simplification/test/Surface_mesh_simplification/data/square_open_LT.audit -text
|
||||
Surface_mesh_simplification/test/Surface_mesh_simplification/data/square_open_MP.audit -text
|
||||
|
|
@ -3868,12 +3897,14 @@ Surface_mesh_simplification/test/Surface_mesh_simplification/data/tetra_6f_LT.au
|
|||
Surface_mesh_simplification/test/Surface_mesh_simplification/data/tetra_6f_MP.audit -text
|
||||
Surface_mesh_simplification/test/Surface_mesh_simplification/data/tetra_LT.audit -text
|
||||
Surface_mesh_simplification/test/Surface_mesh_simplification/data/tetra_MP.audit -text
|
||||
Surface_mesh_simplification/test/Surface_mesh_simplification/data/translated-cube.off -text
|
||||
Surface_mesh_simplification/test/Surface_mesh_simplification/data/triangle_open_with_hole.off -text svneol=unset#application/octet-stream
|
||||
Surface_mesh_simplification/test/Surface_mesh_simplification/data/triangle_open_with_hole_LT.audit -text
|
||||
Surface_mesh_simplification/test/Surface_mesh_simplification/data/triangle_open_with_hole_MP.audit -text
|
||||
Surface_mesh_simplification/test/Surface_mesh_simplification/test_LT_strategy.cmd eol=lf
|
||||
Surface_mesh_simplification/test/Surface_mesh_simplification/test_MP_strategy.cmd eol=lf
|
||||
Surface_mesh_simplification/test/Surface_mesh_simplification/data/tripod.off -text
|
||||
Surface_mesh_simplification/test/Surface_mesh_simplification/data/turbine.off -text
|
||||
Surface_mesh_simplification/test/Surface_mesh_simplification/test_edge_collapse_Polyhedron_3.cmd eol=lf
|
||||
Surface_mesh_simplification/test/Surface_mesh_simplification/test_self_intersection.h -text
|
||||
Surface_mesher/demo/Surface_mesher/icons/bbox-red.png -text svneol=unset#image/png
|
||||
Surface_mesher/demo/Surface_mesher/icons/bbox-red.svg -text svneol=unset#image/svg%2Bxml
|
||||
Surface_mesher/demo/Surface_mesher/icons/bbox.png -text svneol=unset#image/png
|
||||
|
|
|
|||
|
|
@ -1,2 +1,4 @@
|
|||
*kdevelop*
|
||||
*kdevses*
|
||||
off2gts
|
||||
|
||||
|
|
|
|||
|
|
@ -230,32 +230,32 @@ private:
|
|||
return get(vertex_point,mSurface,aV);
|
||||
}
|
||||
|
||||
tuple<const_vertex_descriptor,const_vertex_descriptor> get_vertices( const_edge_descriptor const& aEdge ) const
|
||||
boost::tuple<const_vertex_descriptor,const_vertex_descriptor> get_vertices( const_edge_descriptor const& aEdge ) const
|
||||
{
|
||||
const_vertex_descriptor p,q ;
|
||||
p = source(aEdge,mSurface);
|
||||
q = target(aEdge,mSurface);
|
||||
return make_tuple(p,q);
|
||||
p = boost::source(aEdge,mSurface);
|
||||
q = boost::target(aEdge,mSurface);
|
||||
return boost::make_tuple(p,q);
|
||||
}
|
||||
|
||||
tuple<vertex_descriptor,vertex_descriptor> get_vertices( edge_descriptor const& aEdge )
|
||||
boost::tuple<vertex_descriptor,vertex_descriptor> get_vertices( edge_descriptor const& aEdge )
|
||||
{
|
||||
vertex_descriptor p,q ;
|
||||
p = source(aEdge,mSurface);
|
||||
q = target(aEdge,mSurface);
|
||||
return make_tuple(p,q);
|
||||
p = boost::source(aEdge,mSurface);
|
||||
q = boost::target(aEdge,mSurface);
|
||||
return boost::make_tuple(p,q);
|
||||
}
|
||||
|
||||
std::string vertex_to_string( const_vertex_descriptor const& v ) const
|
||||
{
|
||||
Point const& p = get_point(v);
|
||||
return boost::str( boost::format("[V%1%:%2%]") % v->ID % xyz_to_string(p) ) ;
|
||||
return boost::str( boost::format("[V%1%:%2%]") % v->id() % xyz_to_string(p) ) ;
|
||||
}
|
||||
|
||||
std::string edge_to_string ( const_edge_descriptor const& aEdge ) const
|
||||
{
|
||||
const_vertex_descriptor p,q ; tie(p,q) = get_vertices(aEdge);
|
||||
return boost::str( boost::format("{E%1% %2%->%3%}") % aEdge->ID % vertex_to_string(p) % vertex_to_string(q) ) ;
|
||||
const_vertex_descriptor p,q ; boost::tie(p,q) = get_vertices(aEdge);
|
||||
return boost::str( boost::format("{E%1% %2%->%3%}") % aEdge->id() % vertex_to_string(p) % vertex_to_string(q) ) ;
|
||||
}
|
||||
|
||||
Cost_type get_cost ( Profile const& aProfile ) const
|
||||
|
|
|
|||
|
|
@ -50,12 +50,12 @@ EdgeCollapse<M,SP,VIM,EIM,EBM,CF,PF,V>::EdgeCollapse( ECM& aS
|
|||
|
||||
#ifdef CGAL_SURFACE_SIMPLIFICATION_ENABLE_TRACE
|
||||
vertex_iterator vb, ve ;
|
||||
for ( tie(vb,ve) = vertices(mSurface) ; vb != ve ; ++ vb )
|
||||
CGAL_ECMS_TRACE(2, vertex_to_string(*vb) ) ;
|
||||
for ( boost::tie(vb,ve) = boost::vertices(mSurface) ; vb != ve ; ++ vb )
|
||||
CGAL_ECMS_TRACE(1, vertex_to_string(*vb) ) ;
|
||||
|
||||
undirected_edge_iterator eb, ee ;
|
||||
for ( tie(eb,ee) = undirected_edges(mSurface); eb!=ee; ++eb )
|
||||
CGAL_ECMS_TRACE(2, edge_to_string(*eb) ) ;
|
||||
for ( boost::tie(eb,ee) = undirected_edges(mSurface); eb!=ee; ++eb )
|
||||
CGAL_ECMS_TRACE(1, edge_to_string(*eb) ) ;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
@ -122,17 +122,12 @@ void EdgeCollapse<M,SP,VIM,EIM,EBM,CF,PF,V>::Collect()
|
|||
if ( !equal_points(lProfile.p0(),lProfile.p1()) )
|
||||
{
|
||||
Edge_data& lData = get_data(lEdge);
|
||||
|
||||
lData.cost() = get_cost(lProfile) ;
|
||||
insert_in_PQ(lEdge,lData);
|
||||
|
||||
if ( Visitor )
|
||||
Visitor->OnCollected(lProfile
|
||||
,lData.cost()
|
||||
|
||||
#ifdef CGAL_TESTING_SURFACE_MESH_SIMPLIFICATION_USING_EXTENDED_VISITOR
|
||||
,get_placement(lProfile)
|
||||
#endif
|
||||
);
|
||||
Visitor->OnCollected(lProfile,lData.cost());
|
||||
|
||||
CGAL_SURF_SIMPL_TEST_assertion_code ( ++ lInserted ) ;
|
||||
}
|
||||
|
|
@ -168,7 +163,7 @@ void EdgeCollapse<M,SP,VIM,EIM,EBM,CF,PF,V>::Loop()
|
|||
{
|
||||
CGAL_SURF_SIMPL_TEST_assertion ( lLoop_watchdog ++ < mInitialEdgeCount ) ;
|
||||
|
||||
CGAL_ECMS_TRACE(3,"Poped " << edge_to_string(*lEdge) ) ;
|
||||
CGAL_ECMS_TRACE(2,"Poped " << edge_to_string(*lEdge) ) ;
|
||||
|
||||
Profile const& lProfile = create_profile(*lEdge);
|
||||
|
||||
|
|
@ -255,8 +250,18 @@ bool EdgeCollapse<M,SP,VIM,EIM,EBM,CF,PF,V>::Is_collapsable( Profile const& aPro
|
|||
out_edge_iterator eb1, ee1 ;
|
||||
out_edge_iterator eb2, ee2 ;
|
||||
|
||||
CGAL_ECMS_TRACE(4," t=V" << aProfile.vL()->ID << "(%" << aProfile.vL()->vertex_degree() << ")" );
|
||||
CGAL_ECMS_TRACE(4," b=V" << aProfile.vR()->ID << "(%" << aProfile.vR()->vertex_degree() << ")" );
|
||||
CGAL_ECMS_TRACE(4," t=V"
|
||||
<< ( aProfile.left_face_exists() ? aProfile.vL()->id() : -1 )
|
||||
<< "(%"
|
||||
<< ( aProfile.left_face_exists() ? aProfile.vL()->vertex_degree() : 0 )
|
||||
<< ")"
|
||||
);
|
||||
CGAL_ECMS_TRACE(4," b=V"
|
||||
<< ( aProfile.right_face_exists() ? aProfile.vR()->id() : -1 )
|
||||
<< "(%"
|
||||
<< ( aProfile.right_face_exists() ? aProfile.vR()->vertex_degree() :0 )
|
||||
<< ")"
|
||||
);
|
||||
|
||||
// The following loop checks the link condition for v0_v1.
|
||||
// Specifically, that for every vertex 'k' adjacent to both 'p and 'q', 'pkq' is a face of the mesh.
|
||||
|
|
@ -443,7 +448,8 @@ bool EdgeCollapse<M,SP,VIM,EIM,EBM,CF,PF,V>::Is_open_triangle( edge_descriptor c
|
|||
template<class M,class SP, class VIM,class EIM,class EBM, class CF,class PF,class V>
|
||||
void EdgeCollapse<M,SP,VIM,EIM,EBM,CF,PF,V>::Collapse( Profile const& aProfile )
|
||||
{
|
||||
CGAL_ECMS_TRACE(1,"S" << mStep << ". Collapsig " << edge_to_string(aProfile.v0v1()) ) ;
|
||||
|
||||
CGAL_ECMS_TRACE(1,"S" << mStep << ". Collapsig " << edge_to_string(aProfile.v0_v1()) ) ;
|
||||
|
||||
vertex_descriptor rResult ;
|
||||
|
||||
|
|
@ -451,6 +457,7 @@ void EdgeCollapse<M,SP,VIM,EIM,EBM,CF,PF,V>::Collapse( Profile const& aProfile )
|
|||
// satisfying its constrians. In that case the vertex-pair is simply not removed.
|
||||
Placement_type lPlacement = get_placement(aProfile);
|
||||
|
||||
|
||||
if ( Visitor )
|
||||
Visitor->OnCollapsing(aProfile,lPlacement);
|
||||
|
||||
|
|
@ -493,14 +500,14 @@ void EdgeCollapse<M,SP,VIM,EIM,EBM,CF,PF,V>::Collapse( Profile const& aProfile )
|
|||
Edge_data& lData = get_data(lVRV1) ;
|
||||
if ( lData.is_in_PQ() )
|
||||
{
|
||||
CGAL_ECMS_TRACE(2,"Removing E" << lVRV1->ID << " from PQ") ;
|
||||
CGAL_ECMS_TRACE(2,"Removing E" << lVRV1->id() << " from PQ") ;
|
||||
remove_from_PQ(lVRV1,lData) ;
|
||||
}
|
||||
-- mCurrentEdgeCount ;
|
||||
CGAL_SURF_SIMPL_TEST_assertion_code( -- lResultingEdgeCount ) ;
|
||||
}
|
||||
|
||||
CGAL_ECMS_TRACE(1,"Removing:\n v0v1: E" << aProfile.v0v1()->ID << "(V" << lP->ID << "->V" << lQ->ID << ")" );
|
||||
CGAL_ECMS_TRACE(1,"Removing:\n v0v1: E" << aProfile.v0_v1()->id() << "(V" << aProfile.v0()->id() << "->V" << aProfile.v1()->id() << ")" );
|
||||
|
||||
|
||||
// Perform the actuall collapse.
|
||||
|
|
@ -521,7 +528,7 @@ void EdgeCollapse<M,SP,VIM,EIM,EBM,CF,PF,V>::Collapse( Profile const& aProfile )
|
|||
|
||||
CGAL_SURF_SIMPL_TEST_assertion( mSurface.is_valid() && mSurface.is_pure_triangle() ) ;
|
||||
|
||||
CGAL_ECMS_TRACE(1,"V" << rResult->ID << " kept." ) ;
|
||||
CGAL_ECMS_TRACE(1,"V" << rResult->id() << " kept." ) ;
|
||||
|
||||
#ifdef CGAL_SURFACE_SIMPLIFICATION_ENABLE_TRACE
|
||||
out_edge_iterator eb1, ee1 ;
|
||||
|
|
@ -531,10 +538,13 @@ void EdgeCollapse<M,SP,VIM,EIM,EBM,CF,PF,V>::Collapse( Profile const& aProfile )
|
|||
|
||||
if ( lPlacement )
|
||||
{
|
||||
CGAL_ECMS_TRACE(2,"New vertex point: " << xyz_to_string(*lPlacement) ) ;
|
||||
CGAL_ECMS_TRACE(1,"New vertex point: " << xyz_to_string(*lPlacement) ) ;
|
||||
put(vertex_point,mSurface,rResult,*lPlacement) ;
|
||||
}
|
||||
|
||||
if ( Visitor )
|
||||
Visitor->OnCollapsed(aProfile,rResult);
|
||||
|
||||
Update_neighbors(rResult) ;
|
||||
|
||||
CGAL_ECMS_DEBUG_CODE ( ++mStep ; )
|
||||
|
|
@ -568,7 +578,7 @@ void EdgeCollapse<M,SP,VIM,EIM,EBM,CF,PF,V>::Update_neighbors( vertex_descriptor
|
|||
edge_descriptor lEdge2 = primary_edge(*eb2) ;
|
||||
|
||||
Edge_data& lData2 = get_data(lEdge2);
|
||||
CGAL_ECMS_TRACE(4,"Inedge around V" << lAdj_k->ID << edge_to_string(lEdge2) ) ;
|
||||
CGAL_ECMS_TRACE(4,"Inedge around V" << lAdj_k->id() << edge_to_string(lEdge2) ) ;
|
||||
|
||||
// Only those edges still in the PQ _and_ not already collected are updated.
|
||||
if ( lData2.is_in_PQ() && lToUpdate.find(lEdge2) == lToUpdate.end() )
|
||||
|
|
|
|||
|
|
@ -20,6 +20,8 @@
|
|||
|
||||
#include <vector>
|
||||
|
||||
#include <CGAL/Cartesian_converter.h>
|
||||
|
||||
#include <CGAL/Surface_mesh_simplification/Detail/Common.h>
|
||||
#include <CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Edge_profile.h>
|
||||
#include <CGAL/Surface_mesh_simplification/Policies/Edge_collapse/LindstromTurk_params.h>
|
||||
|
|
@ -38,12 +40,13 @@ CGAL_BEGIN_NAMESPACE
|
|||
namespace Surface_mesh_simplification
|
||||
{
|
||||
|
||||
template<class ECM_>
|
||||
template<class ECM_, class Kernel_ = typename Kernel_traits< typename halfedge_graph_traits<ECM_>::Point>::Kernel >
|
||||
class LindstromTurkCore
|
||||
{
|
||||
public:
|
||||
|
||||
typedef ECM_ ECM ;
|
||||
typedef ECM_ ECM ;
|
||||
typedef Kernel_ Kernel ;
|
||||
|
||||
typedef Edge_profile<ECM> Profile ;
|
||||
|
||||
|
|
@ -55,9 +58,11 @@ public:
|
|||
|
||||
typedef LindstromTurk_params Params ;
|
||||
|
||||
typedef typename halfedge_graph_traits<ECM>::Point Point ;
|
||||
typedef typename Kernel::Point_3 Point ;
|
||||
|
||||
typedef typename halfedge_graph_traits<ECM>::Point ECM_Point ;
|
||||
|
||||
typedef typename Kernel_traits<Point>::Kernel Kernel ;
|
||||
typedef typename Kernel_traits<ECM_Point>::Kernel ECM_Kernel ;
|
||||
|
||||
typedef typename Kernel::Vector_3 Vector ;
|
||||
typedef typename Kernel::FT FT ;
|
||||
|
|
@ -100,27 +105,6 @@ private :
|
|||
typedef std::vector<Triangle_data> Triangle_data_vector ;
|
||||
typedef std::vector<Boundary_data> Boundary_data_vector ;
|
||||
|
||||
class Constrians
|
||||
{
|
||||
public:
|
||||
|
||||
Constrians() : n(0), A(NULL_MATRIX), b(NULL_VECTOR) {}
|
||||
|
||||
void Add_if_alpha_compatible( Vector const& Ai, FT const& bi ) ;
|
||||
|
||||
void Add_from_gradient ( Matrix const& H, Vector const& c ) ;
|
||||
|
||||
int n ;
|
||||
Matrix A ;
|
||||
Vector b ;
|
||||
|
||||
private:
|
||||
|
||||
// alpha = 1 degree
|
||||
static FT squared_cos_alpha() { return FT(0.999695413509) ; }
|
||||
static FT squared_sin_alpha() { return FT(3.04586490453e-4); }
|
||||
} ;
|
||||
|
||||
private :
|
||||
|
||||
void Extract_triangle_data();
|
||||
|
|
@ -135,9 +119,9 @@ private :
|
|||
FT Compute_volume_cost ( Vector const& v, Triangle_data_vector const& aTriangles ) ;
|
||||
FT Compute_shape_cost ( Point const& p, vertex_descriptor_vector const& aLink ) ;
|
||||
|
||||
Point const& get_point ( vertex_descriptor const& v ) const
|
||||
Point get_point ( vertex_descriptor const& v ) const
|
||||
{
|
||||
return get(vertex_point,surface(),v);
|
||||
return convert(get(vertex_point,surface(),v));
|
||||
}
|
||||
|
||||
static Vector Point_cross_product ( Point const& a, Point const& b )
|
||||
|
|
@ -168,19 +152,14 @@ private :
|
|||
|
||||
static FT big_value() { return static_cast<FT>((std::numeric_limits<double>::max)()) ; }
|
||||
|
||||
// Returns optional(n) if 'n' is finite, or optional() otherwise.
|
||||
static optional<FT> filter_infinity ( FT n ) { return ( CGAL_NTS is_finite(n) ) ? optional<FT>(n) : optional<FT>() ; }
|
||||
|
||||
// Returns optional(p) if all coordinates of 'p' are finite, or optional() otherwise.
|
||||
static optional<Point> filter_infinity ( Point const& p )
|
||||
{
|
||||
bool lIsFinite = CGAL_NTS is_finite(p.x())
|
||||
&& CGAL_NTS is_finite(p.y())
|
||||
&& CGAL_NTS is_finite(p.z()) ;
|
||||
|
||||
return lIsFinite ? optional<Point>(p) : optional<Point>();
|
||||
}
|
||||
|
||||
static bool is_finite ( FT const& n ) { return CGAL_NTS is_finite(n) ; }
|
||||
static bool is_finite ( Point const& p ) { return is_finite(p.x()) && is_finite(p.y()) && is_finite(p.z()) ; }
|
||||
static bool is_finite ( Vector const& v ) { return is_finite(v.x()) && is_finite(v.y()) && is_finite(v.z()) ; }
|
||||
static bool is_finite ( Matrix const& m ) { return is_finite(m.r0()) && is_finite(m.r1()) && is_finite(m.r2()) ; }
|
||||
|
||||
template<class T>
|
||||
static optional<T> filter_infinity ( T const& n ) { return is_finite(n) ? optional<T>(n) : optional<T>() ; }
|
||||
|
||||
ECM& surface() const { return mProfile.surface() ; }
|
||||
|
||||
private:
|
||||
|
|
@ -188,12 +167,23 @@ private:
|
|||
Params const& mParams ;
|
||||
Profile const& mProfile ;
|
||||
|
||||
void Add_constraint_if_alpha_compatible( Vector const& Ai, FT const& bi ) ;
|
||||
|
||||
void Add_constraint_from_gradient ( Matrix const& H, Vector const& c ) ;
|
||||
|
||||
private:
|
||||
|
||||
Triangle_data_vector mTriangle_data ;
|
||||
Boundary_data_vector mBdry_data ;
|
||||
|
||||
Constrians mConstrians ;
|
||||
int mConstraints_n ;
|
||||
Matrix mConstraints_A ;
|
||||
Vector mConstraints_b ;
|
||||
|
||||
Cartesian_converter<ECM_Kernel,Kernel> convert ;
|
||||
|
||||
FT mSquared_cos_alpha;
|
||||
FT mSquared_sin_alpha;
|
||||
};
|
||||
|
||||
} // namespace Surface_mesh_simplification
|
||||
|
|
|
|||
|
|
@ -31,18 +31,29 @@ CGAL_BEGIN_NAMESPACE
|
|||
namespace Surface_mesh_simplification
|
||||
{
|
||||
|
||||
template<class ECM>
|
||||
LindstromTurkCore<ECM>::LindstromTurkCore( Params const& aParams, Profile const& aProfile )
|
||||
template<class ECM, class K>
|
||||
LindstromTurkCore<ECM,K>::LindstromTurkCore( Params const& aParams, Profile const& aProfile )
|
||||
:
|
||||
mParams(aParams)
|
||||
,mProfile(aProfile)
|
||||
,mConstraints_n(0)
|
||||
,mConstraints_A(NULL_MATRIX)
|
||||
,mConstraints_b(NULL_VECTOR)
|
||||
{
|
||||
double alpha = 1.0 * CGAL_PI / 180.0;
|
||||
|
||||
FT cos_alpha = std::cos(alpha);
|
||||
FT sin_alpha = std::sin(alpha);
|
||||
|
||||
mSquared_cos_alpha = cos_alpha * cos_alpha ;
|
||||
mSquared_sin_alpha = sin_alpha * sin_alpha ;
|
||||
|
||||
Extract_triangle_data();
|
||||
Extract_boundary_data();
|
||||
}
|
||||
|
||||
template<class ECM>
|
||||
void LindstromTurkCore<ECM>::Extract_boundary_data()
|
||||
template<class ECM, class K>
|
||||
void LindstromTurkCore<ECM,K>::Extract_boundary_data()
|
||||
{
|
||||
for ( const_border_edge_iterator it = mProfile.border_edges().begin(), eit = mProfile.border_edges().end() ; it != eit ; ++ it )
|
||||
{
|
||||
|
|
@ -59,7 +70,7 @@ void LindstromTurkCore<ECM>::Extract_boundary_data()
|
|||
Vector v = tp - sp ;
|
||||
Vector n = Point_cross_product(tp,sp) ;
|
||||
|
||||
CGAL_ECMS_LT_TRACE(1,"Boundary edge. S:" << xyz_to_string(sp) << " T:" << xyz_to_string(tp)
|
||||
CGAL_ECMS_LT_TRACE(1," Boundary edge. S:" << xyz_to_string(sp) << " T:" << xyz_to_string(tp)
|
||||
<< " V:" << xyz_to_string(v) << " N:" << xyz_to_string(n)
|
||||
) ;
|
||||
|
||||
|
|
@ -67,8 +78,8 @@ void LindstromTurkCore<ECM>::Extract_boundary_data()
|
|||
}
|
||||
}
|
||||
|
||||
template<class ECM>
|
||||
void LindstromTurkCore<ECM>::Extract_triangle_data()
|
||||
template<class ECM, class K>
|
||||
void LindstromTurkCore<ECM,K>::Extract_triangle_data()
|
||||
{
|
||||
for ( const_triangle_iterator it = mProfile.triangles().begin(), eit = mProfile.triangles().end() ; it != eit ; ++ it )
|
||||
{
|
||||
|
|
@ -85,7 +96,7 @@ void LindstromTurkCore<ECM>::Extract_triangle_data()
|
|||
|
||||
FT lNormalL = Point_cross_product(p0,p1) * (p2-ORIGIN);
|
||||
|
||||
CGAL_ECMS_LT_TRACE(1,"Extracting triangle v" << tri.v0->id() << "->v" << tri.v1->id() << "->v" << tri.v2->id()
|
||||
CGAL_ECMS_LT_TRACE(1," Extracting triangle v" << tri.v0->id() << "->v" << tri.v1->id() << "->v" << tri.v2->id()
|
||||
<< " N:" << xyz_to_string(lNormalV) << " L:" << lNormalL
|
||||
);
|
||||
|
||||
|
|
@ -93,13 +104,13 @@ void LindstromTurkCore<ECM>::Extract_triangle_data()
|
|||
}
|
||||
}
|
||||
|
||||
template<class ECM>
|
||||
typename LindstromTurkCore<ECM>::Optional_point LindstromTurkCore<ECM>::compute_placement()
|
||||
template<class ECM, class K>
|
||||
typename LindstromTurkCore<ECM,K>::Optional_point LindstromTurkCore<ECM,K>::compute_placement()
|
||||
{
|
||||
Optional_point rPlacementP ;
|
||||
Optional_vector lPlacementV ;
|
||||
|
||||
CGAL_ECMS_LT_TRACE(0,"Computing LT data for E" << mProfile.v0v1()->id() << " (V" << mProfile.v0()->id() << "->V" << mProfile.v1()->id() << ")" );
|
||||
CGAL_ECMS_LT_TRACE(0,"Computing LT placement for E" << mProfile.v0_v1()->id() << " (V" << mProfile.v0()->id() << "->V" << mProfile.v1()->id() << ")" );
|
||||
|
||||
//
|
||||
// Each vertex constrian is an equation of the form: Ai * v = bi
|
||||
|
|
@ -127,51 +138,52 @@ typename LindstromTurkCore<ECM>::Optional_point LindstromTurkCore<ECM>::compute_
|
|||
if ( mBdry_data.size() > 0 )
|
||||
Add_boundary_preservation_constrians(mBdry_data);
|
||||
|
||||
if ( mConstrians.n < 3 )
|
||||
if ( mConstraints_n < 3 )
|
||||
Add_volume_preservation_constrians(mTriangle_data);
|
||||
|
||||
if ( mConstrians.n < 3 )
|
||||
if ( mConstraints_n < 3 )
|
||||
Add_boundary_and_volume_optimization_constrians(mBdry_data,mTriangle_data);
|
||||
|
||||
if ( mConstrians.n < 3 )
|
||||
if ( mConstraints_n < 3 )
|
||||
Add_shape_optimization_constrians(mProfile.link());
|
||||
|
||||
// It might happen that there were not enough alpha-compatible constrians.
|
||||
// In that case there is simply no good vertex placement
|
||||
if ( mConstrians.n == 3 )
|
||||
if ( mConstraints_n == 3 )
|
||||
{
|
||||
// If the matrix is singular it's inverse cannot be computed so an 'absent' value is returned.
|
||||
optional<Matrix> lOptional_Ai = inverse_matrix(mConstrians.A);
|
||||
optional<Matrix> lOptional_Ai = inverse_matrix(mConstraints_A);
|
||||
if ( lOptional_Ai )
|
||||
{
|
||||
Matrix const& lAi = *lOptional_Ai ;
|
||||
|
||||
CGAL_ECMS_LT_TRACE(2," b: " << xyz_to_string(mConstrians.b) );
|
||||
CGAL_ECMS_LT_TRACE(2,"inv(A): " << matrix_to_string(lAi) );
|
||||
CGAL_ECMS_LT_TRACE(2," b: " << xyz_to_string(mConstraints_b) );
|
||||
CGAL_ECMS_LT_TRACE(2," inv(A): " << matrix_to_string(lAi) );
|
||||
|
||||
lPlacementV = mConstrians.b * lAi ;
|
||||
lPlacementV = filter_infinity(mConstraints_b * lAi) ;
|
||||
|
||||
CGAL_ECMS_LT_TRACE(0,"New vertex point: " << xyz_to_string(*lPlacementV) );
|
||||
CGAL_ECMS_LT_TRACE(0," New vertex point: " << xyz_to_string(*lPlacementV) );
|
||||
}
|
||||
else
|
||||
CGAL_ECMS_LT_TRACE(1,"Can't solve optimization, singular system.");
|
||||
CGAL_ECMS_LT_TRACE(1," Can't solve optimization, singular system.");
|
||||
}
|
||||
else
|
||||
CGAL_ECMS_LT_TRACE(1,"Can't solve optimization, not enough alpha-compatible constrians.");
|
||||
CGAL_ECMS_LT_TRACE(1," Can't solve optimization, not enough alpha-compatible constrians.");
|
||||
|
||||
if ( lPlacementV )
|
||||
rPlacementP = filter_infinity( ORIGIN + (*lPlacementV) );
|
||||
rPlacementP = ORIGIN + (*lPlacementV) ;
|
||||
|
||||
return rPlacementP;
|
||||
}
|
||||
|
||||
template<class ECM>
|
||||
typename LindstromTurkCore<ECM>::Optional_FT LindstromTurkCore<ECM>::compute_cost( Optional_point const& aP )
|
||||
template<class ECM, class K>
|
||||
typename LindstromTurkCore<ECM,K>::Optional_FT LindstromTurkCore<ECM,K>::compute_cost( Optional_point const& aP )
|
||||
{
|
||||
Optional_FT rCost ;
|
||||
|
||||
if ( aP )
|
||||
{
|
||||
CGAL_ECMS_LT_TRACE(0,"Computing LT cost for E" << mProfile.v0_v1()->id() );
|
||||
Vector lV = (*aP) - ORIGIN ;
|
||||
|
||||
FT lSquaredLength = squared_distance(mProfile.p0(),mProfile.p1());
|
||||
|
|
@ -186,11 +198,11 @@ typename LindstromTurkCore<ECM>::Optional_FT LindstromTurkCore<ECM>::compute_cos
|
|||
|
||||
rCost = filter_infinity(lTotalCost);
|
||||
|
||||
CGAL_ECMS_LT_TRACE(0,"\nSquared edge length: " << lSquaredLength
|
||||
<< "\nBoundary cost: " << lBdryCost << " weight: " << mParams.BoundaryWeight
|
||||
<< "\nVolume cost: " << lVolumeCost << " weight: " << mParams.VolumeWeight
|
||||
<< "\nShape cost: " << lShapeCost << " weight: " << mParams.ShapeWeight
|
||||
<< "\nTOTAL COST: " << lTotalCost
|
||||
CGAL_ECMS_LT_TRACE(0, " Squared edge length: " << lSquaredLength
|
||||
<< "\n Boundary cost: " << lBdryCost << " weight: " << mParams.BoundaryWeight
|
||||
<< "\n Volume cost: " << lVolumeCost << " weight: " << mParams.VolumeWeight
|
||||
<< "\n Shape cost: " << lShapeCost << " weight: " << mParams.ShapeWeight
|
||||
<< "\n TOTAL COST: " << lTotalCost
|
||||
);
|
||||
|
||||
}
|
||||
|
|
@ -199,8 +211,8 @@ typename LindstromTurkCore<ECM>::Optional_FT LindstromTurkCore<ECM>::compute_cos
|
|||
}
|
||||
|
||||
|
||||
template<class ECM>
|
||||
void LindstromTurkCore<ECM>::Add_boundary_preservation_constrians( Boundary_data_vector const& aBdry )
|
||||
template<class ECM, class K>
|
||||
void LindstromTurkCore<ECM,K>::Add_boundary_preservation_constrians( Boundary_data_vector const& aBdry )
|
||||
{
|
||||
|
||||
if ( aBdry.size() > 0 )
|
||||
|
|
@ -223,7 +235,7 @@ void LindstromTurkCore<ECM>::Add_boundary_preservation_constrians( Boundary_data
|
|||
e1y = e1y + vy;
|
||||
e1z = e1z + vz;
|
||||
|
||||
CGAL_ECMS_LT_TRACE(1,"vx:" << vx << " vy:" << vy << " vz:" << vz << " e1x:" << e1x << " e1y:" << e1y << " e1z:" << e1z );
|
||||
CGAL_ECMS_LT_TRACE(1," vx:" << vx << " vy:" << vy << " vz:" << vz << " e1x:" << e1x << " e1y:" << e1y << " e1z:" << e1z );
|
||||
}
|
||||
|
||||
Matrix H = LT_product(e1);
|
||||
|
|
@ -231,20 +243,21 @@ void LindstromTurkCore<ECM>::Add_boundary_preservation_constrians( Boundary_data
|
|||
Vector c = cross_product(e1,e2);
|
||||
|
||||
CGAL_ECMS_LT_TRACE(1
|
||||
,"Adding boundary preservation constrians. SumV:" << xyz_to_string(e1)
|
||||
<< " SumN:" << xyz_to_string(e2)
|
||||
<< "\nH:" << matrix_to_string(H)
|
||||
<< "\nc:" << xyz_to_string(c)
|
||||
," Adding boundary preservation constrians."
|
||||
<< "\n SumV:" << xyz_to_string(e1)
|
||||
<< "\n SumN:" << xyz_to_string(e2)
|
||||
<< "\n H:" << matrix_to_string(H)
|
||||
<< "\n c:" << xyz_to_string(c)
|
||||
);
|
||||
|
||||
mConstrians.Add_from_gradient(H,c);
|
||||
Add_constraint_from_gradient(H,c);
|
||||
}
|
||||
}
|
||||
|
||||
template<class ECM>
|
||||
void LindstromTurkCore<ECM>::Add_volume_preservation_constrians( Triangle_data_vector const& aTriangles )
|
||||
template<class ECM, class K>
|
||||
void LindstromTurkCore<ECM,K>::Add_volume_preservation_constrians( Triangle_data_vector const& aTriangles )
|
||||
{
|
||||
CGAL_ECMS_LT_TRACE(1,"Adding volume preservation constrians. " << aTriangles.size() << " triangles.");
|
||||
CGAL_ECMS_LT_TRACE(1," Adding volume preservation constrians. " << aTriangles.size() << " triangles.");
|
||||
|
||||
Vector lSumV = NULL_VECTOR ;
|
||||
FT lSumL(0) ;
|
||||
|
|
@ -255,18 +268,18 @@ void LindstromTurkCore<ECM>::Add_volume_preservation_constrians( Triangle_data_v
|
|||
lSumL = lSumL + it->NormalL ;
|
||||
}
|
||||
|
||||
CGAL_ECMS_LT_TRACE(1, " SumV:" << xyz_to_string(lSumV) << " SumL:" << lSumL );
|
||||
CGAL_ECMS_LT_TRACE(1, " SumV:" << xyz_to_string(lSumV) << " SumL:" << lSumL );
|
||||
|
||||
mConstrians.Add_if_alpha_compatible(lSumV,lSumL);
|
||||
Add_constraint_if_alpha_compatible(lSumV,lSumL);
|
||||
|
||||
}
|
||||
|
||||
template<class ECM>
|
||||
void LindstromTurkCore<ECM>::Add_boundary_and_volume_optimization_constrians( Boundary_data_vector const& aBdry
|
||||
template<class ECM, class K>
|
||||
void LindstromTurkCore<ECM,K>::Add_boundary_and_volume_optimization_constrians( Boundary_data_vector const& aBdry
|
||||
, Triangle_data_vector const& aTriangles
|
||||
)
|
||||
{
|
||||
CGAL_ECMS_LT_TRACE(1,"Adding boundary and volume optimization constrians. ");
|
||||
CGAL_ECMS_LT_TRACE(1," Adding boundary and volume optimization constrians. ");
|
||||
|
||||
Matrix H = NULL_MATRIX ;
|
||||
Vector c = NULL_VECTOR ;
|
||||
|
|
@ -283,7 +296,7 @@ void LindstromTurkCore<ECM>::Add_boundary_and_volume_optimization_constrians( Bo
|
|||
c = c - ( lTri.NormalL * lTri.NormalV ) ;
|
||||
}
|
||||
|
||||
CGAL_ECMS_LT_TRACE(2,"Hv:" << matrix_to_string(H) << "\ncv:" << xyz_to_string(c) ) ;
|
||||
CGAL_ECMS_LT_TRACE(2," Hv:" << matrix_to_string(H) << "\n cv:" << xyz_to_string(c) ) ;
|
||||
|
||||
|
||||
if ( aBdry.size() > 0 )
|
||||
|
|
@ -303,7 +316,7 @@ void LindstromTurkCore<ECM>::Add_boundary_and_volume_optimization_constrians( Bo
|
|||
cb = cb + c ;
|
||||
}
|
||||
|
||||
CGAL_ECMS_LT_TRACE(2,"Hb:" << matrix_to_string(Hb) << "\ncb:" << xyz_to_string(cb) ) ;
|
||||
CGAL_ECMS_LT_TRACE(2," Hb:" << matrix_to_string(Hb) << "\n cb:" << xyz_to_string(cb) ) ;
|
||||
|
||||
//
|
||||
// Weighted average
|
||||
|
|
@ -316,16 +329,16 @@ void LindstromTurkCore<ECM>::Add_boundary_and_volume_optimization_constrians( Bo
|
|||
H += lScaledBoundaryWeight * Hb ;
|
||||
c = c + ( lScaledBoundaryWeight * cb ) ;
|
||||
|
||||
CGAL_ECMS_LT_TRACE(2,"H:" << matrix_to_string(H) << "\nc:" << xyz_to_string(c) ) ;
|
||||
CGAL_ECMS_LT_TRACE(2,"VolW:" << mParams.VolumeWeight << " BdryW:" << mParams.BoundaryWeight << " ScaledBdryW:" << lScaledBoundaryWeight ) ;
|
||||
CGAL_ECMS_LT_TRACE(2," H:" << matrix_to_string(H) << "\n c:" << xyz_to_string(c) ) ;
|
||||
CGAL_ECMS_LT_TRACE(2," VolW:" << mParams.VolumeWeight << " BdryW:" << mParams.BoundaryWeight << " ScaledBdryW:" << lScaledBoundaryWeight ) ;
|
||||
|
||||
}
|
||||
|
||||
mConstrians.Add_from_gradient(H,c);
|
||||
Add_constraint_from_gradient(H,c);
|
||||
}
|
||||
|
||||
template<class ECM>
|
||||
void LindstromTurkCore<ECM>::Add_shape_optimization_constrians( vertex_descriptor_vector const& aLink )
|
||||
template<class ECM, class K>
|
||||
void LindstromTurkCore<ECM,K>::Add_shape_optimization_constrians( vertex_descriptor_vector const& aLink )
|
||||
{
|
||||
FT s((double)aLink.size());
|
||||
|
||||
|
|
@ -339,14 +352,14 @@ void LindstromTurkCore<ECM>::Add_shape_optimization_constrians( vertex_descripto
|
|||
for( typename vertex_descriptor_vector::const_iterator it = aLink.begin(), eit = aLink.end() ; it != eit ; ++it )
|
||||
c = c + (ORIGIN - get_point(*it)) ;
|
||||
|
||||
CGAL_ECMS_LT_TRACE(1,"Adding shape optimization constrians. Shape vector: " << xyz_to_string(c) );
|
||||
CGAL_ECMS_LT_TRACE(1," Adding shape optimization constrians. Shape vector: " << xyz_to_string(c) );
|
||||
|
||||
mConstrians.Add_from_gradient(H,c);
|
||||
Add_constraint_from_gradient(H,c);
|
||||
}
|
||||
|
||||
template<class ECM>
|
||||
typename LindstromTurkCore<ECM>::FT
|
||||
LindstromTurkCore<ECM>::Compute_boundary_cost( Vector const& v, Boundary_data_vector const& aBdry )
|
||||
template<class ECM, class K>
|
||||
typename LindstromTurkCore<ECM,K>::FT
|
||||
LindstromTurkCore<ECM,K>::Compute_boundary_cost( Vector const& v, Boundary_data_vector const& aBdry )
|
||||
{
|
||||
FT rCost(0);
|
||||
for ( typename Boundary_data_vector::const_iterator it = aBdry.begin() ; it != aBdry.end() ; ++ it )
|
||||
|
|
@ -358,9 +371,9 @@ LindstromTurkCore<ECM>::Compute_boundary_cost( Vector const& v, Boundary_data_ve
|
|||
return rCost / FT(4) ;
|
||||
}
|
||||
|
||||
template<class ECM>
|
||||
typename LindstromTurkCore<ECM>::FT
|
||||
LindstromTurkCore<ECM>::Compute_volume_cost( Vector const& v, Triangle_data_vector const& aTriangles )
|
||||
template<class ECM, class K>
|
||||
typename LindstromTurkCore<ECM,K>::FT
|
||||
LindstromTurkCore<ECM,K>::Compute_volume_cost( Vector const& v, Triangle_data_vector const& aTriangles )
|
||||
{
|
||||
FT rCost(0);
|
||||
|
||||
|
|
@ -377,9 +390,9 @@ LindstromTurkCore<ECM>::Compute_volume_cost( Vector const& v, Triangle_data_vect
|
|||
return rCost / FT(36) ;
|
||||
}
|
||||
|
||||
template<class ECM>
|
||||
typename LindstromTurkCore<ECM>::FT
|
||||
LindstromTurkCore<ECM>::Compute_shape_cost( Point const& p, vertex_descriptor_vector const& aLink )
|
||||
template<class ECM, class K>
|
||||
typename LindstromTurkCore<ECM,K>::FT
|
||||
LindstromTurkCore<ECM,K>::Compute_shape_cost( Point const& p, vertex_descriptor_vector const& aLink )
|
||||
{
|
||||
FT rCost(0);
|
||||
|
||||
|
|
@ -389,95 +402,104 @@ LindstromTurkCore<ECM>::Compute_shape_cost( Point const& p, vertex_descriptor_ve
|
|||
return rCost ;
|
||||
}
|
||||
|
||||
template<class ECM>
|
||||
void LindstromTurkCore<ECM>::Constrians::Add_if_alpha_compatible( Vector const& Ai, FT const& bi )
|
||||
template<class ECM, class K>
|
||||
void LindstromTurkCore<ECM,K>::Add_constraint_if_alpha_compatible( Vector const& Ai, FT const& bi )
|
||||
{
|
||||
CGAL_ECMS_LT_TRACE(3," Adding new constrains if alpha-compatible.\n Ai: " << xyz_to_string(Ai) << "\n bi:" << bi << ")" );
|
||||
|
||||
FT slai = Ai*Ai ;
|
||||
|
||||
CGAL_ECMS_LT_TRACE(3,"[constrians] Adding new if alpha-compatble.\nslai: " << slai );
|
||||
CGAL_ECMS_LT_TRACE(3,"\n slai: " << slai << ")" );
|
||||
|
||||
FT l = CGAL_NTS sqrt(slai) ;
|
||||
|
||||
CGAL_ECMS_LT_TRACE(3,"[constrians] Adding new if alpha-compatble.\nslai: " << slai );
|
||||
|
||||
Vector Ain ;
|
||||
FT bin ;
|
||||
|
||||
if ( !CGAL_NTS is_zero(l) )
|
||||
if ( is_finite(slai) )
|
||||
{
|
||||
Ain = Ai / l ;
|
||||
bin = bi / l ;
|
||||
}
|
||||
else
|
||||
{
|
||||
CGAL_ECMS_LT_TRACE(3,"[constrians] l is ZERO." );
|
||||
|
||||
Ain = Vector( big_value(), big_value(), big_value() ) ;
|
||||
bin = big_value() ;
|
||||
}
|
||||
FT l = CGAL_NTS sqrt( slai ) ;
|
||||
|
||||
CGAL_ECMS_LT_TRACE(3,"[constrians] Ain: " << xyz_to_string(Ain) << " bin:" << bin );
|
||||
|
||||
bool lAddIt = true ;
|
||||
|
||||
if ( n == 1 )
|
||||
{
|
||||
FT d01 = A.r0() * Ai ;
|
||||
CGAL_ECMS_LT_TRACE(3," l: " << l );
|
||||
|
||||
FT sla0 = A.r0() * A.r0() ;
|
||||
FT sd01 = d01 * d01 ;
|
||||
|
||||
FT max = sla0 * slai * squared_cos_alpha() ;
|
||||
Vector Ain ;
|
||||
FT bin ;
|
||||
|
||||
CGAL_ECMS_LT_TRACE(3,"[constrians] Second constrain. d01: " << d01 << " sla0:" << sla0 << " sd01:" << sd01 << " max:" << max );
|
||||
|
||||
if ( sd01 > max )
|
||||
lAddIt = false ;
|
||||
}
|
||||
else if ( n == 2 )
|
||||
{
|
||||
Vector N = cross_product(A.r0(),A.r1());
|
||||
|
||||
FT dc012 = N * Ai ;
|
||||
|
||||
FT slc01 = N * N ;
|
||||
FT sdc012 = dc012 * dc012;
|
||||
|
||||
FT min = slc01 * slai * squared_sin_alpha() ;
|
||||
|
||||
CGAL_ECMS_LT_TRACE(3,"[constrians] Thirds constrain. N: " << xyz_to_string(N) << " dc012:" << dc012 << " slc01:" << slc01
|
||||
<< " sdc012:" << sdc012 << " min:" << min );
|
||||
|
||||
if ( sdc012 <= min )
|
||||
lAddIt = false ;
|
||||
}
|
||||
|
||||
if ( lAddIt )
|
||||
{
|
||||
switch ( n )
|
||||
if ( !CGAL_NTS is_zero(l) )
|
||||
{
|
||||
case 0 :
|
||||
A.r0() = Ain ;
|
||||
b = Vector(bin,b.y(),b.z());
|
||||
break ;
|
||||
case 1 :
|
||||
A.r1() = Ain ;
|
||||
b = Vector(b.x(),bin,b.z());
|
||||
break ;
|
||||
case 2 :
|
||||
A.r2() = Ain ;
|
||||
b = Vector(b.x(),b.y(),bin);
|
||||
break ;
|
||||
Ain = Ai / l ;
|
||||
bin = bi / l ;
|
||||
}
|
||||
else
|
||||
{
|
||||
CGAL_ECMS_LT_TRACE(3," l is ZERO." );
|
||||
|
||||
Ain = Vector( big_value(), big_value(), big_value() ) ;
|
||||
bin = big_value() ;
|
||||
}
|
||||
|
||||
CGAL_ECMS_LT_TRACE(3,"[constrains] Accepting # " << n << " A:" << matrix_to_string(A) << " b:" << xyz_to_string(b) ) ;
|
||||
CGAL_ECMS_LT_TRACE(3," Ain: " << xyz_to_string(Ain) << " bin:" << bin );
|
||||
|
||||
++ n ;
|
||||
bool lAddIt = true ;
|
||||
|
||||
if ( mConstraints_n == 1 )
|
||||
{
|
||||
FT d01 = mConstraints_A.r0() * Ai ;
|
||||
|
||||
FT sla0 = mConstraints_A.r0() * mConstraints_A.r0() ;
|
||||
FT sd01 = d01 * d01 ;
|
||||
|
||||
FT max = sla0 * slai * mSquared_cos_alpha ;
|
||||
|
||||
CGAL_ECMS_LT_TRACE(3," Second constrain. d01: " << d01 << " sla0:" << sla0 << " sd01:" << sd01 << " max:" << max );
|
||||
|
||||
if ( sd01 > max )
|
||||
lAddIt = false ;
|
||||
}
|
||||
else if ( mConstraints_n == 2 )
|
||||
{
|
||||
Vector N = cross_product(mConstraints_A.r0(),mConstraints_A.r1());
|
||||
|
||||
FT dc012 = N * Ai ;
|
||||
|
||||
FT slc01 = N * N ;
|
||||
FT sdc012 = dc012 * dc012;
|
||||
|
||||
FT min = slc01 * slai * mSquared_sin_alpha ;
|
||||
|
||||
CGAL_ECMS_LT_TRACE(3," Third constrain. N: " << xyz_to_string(N) << " dc012:" << dc012 << " slc01:" << slc01
|
||||
<< " sdc012:" << sdc012 << " min:" << min );
|
||||
|
||||
if ( sdc012 <= min )
|
||||
lAddIt = false ;
|
||||
}
|
||||
|
||||
if ( lAddIt )
|
||||
{
|
||||
switch ( mConstraints_n )
|
||||
{
|
||||
case 0 :
|
||||
mConstraints_A.r0() = Ain ;
|
||||
mConstraints_b = Vector(bin,mConstraints_b.y(),mConstraints_b.z());
|
||||
break ;
|
||||
case 1 :
|
||||
mConstraints_A.r1() = Ain ;
|
||||
mConstraints_b = Vector(mConstraints_b.x(),bin,mConstraints_b.z());
|
||||
break ;
|
||||
case 2 :
|
||||
mConstraints_A.r2() = Ain ;
|
||||
mConstraints_b = Vector(mConstraints_b.x(),mConstraints_b.y(),bin);
|
||||
break ;
|
||||
}
|
||||
|
||||
CGAL_ECMS_LT_TRACE(3," Accepting # " << mConstraints_n << " A:" << matrix_to_string(mConstraints_A) << " b:" << xyz_to_string(mConstraints_b) ) ;
|
||||
|
||||
++ mConstraints_n ;
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
CGAL_ECMS_LT_TRACE(3," INCOMPATIBLE. Discarded" ) ;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
CGAL_ECMS_LT_TRACE(3,"[constrains] INCOMPATIBLE. Discarded" ) ;
|
||||
CGAL_ECMS_LT_TRACE(3," OVERFLOW. Discarded" ) ;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -503,26 +525,26 @@ int index_of_max_component ( V const& v )
|
|||
return i ;
|
||||
}
|
||||
|
||||
template<class ECM>
|
||||
void LindstromTurkCore<ECM>::Constrians::Add_from_gradient ( Matrix const& H, Vector const& c )
|
||||
template<class ECM, class K>
|
||||
void LindstromTurkCore<ECM,K>::Add_constraint_from_gradient ( Matrix const& H, Vector const& c )
|
||||
{
|
||||
CGAL_ECMS_LT_TRACE(3,"[constrains] Adding from gradient. Current n=" << n ) ;
|
||||
CGAL_ECMS_LT_TRACE(3," Adding constrains from gradient. Current n=" << mConstraints_n ) ;
|
||||
|
||||
CGAL_precondition(n >= 0 && n<=2 );
|
||||
CGAL_precondition(mConstraints_n >= 0 && mConstraints_n<=2 );
|
||||
|
||||
switch(n)
|
||||
switch(mConstraints_n)
|
||||
{
|
||||
case 0 :
|
||||
|
||||
Add_if_alpha_compatible(H.r0(),-c.x());
|
||||
Add_if_alpha_compatible(H.r1(),-c.y());
|
||||
Add_if_alpha_compatible(H.r2(),-c.z());
|
||||
Add_constraint_if_alpha_compatible(H.r0(),-c.x());
|
||||
Add_constraint_if_alpha_compatible(H.r1(),-c.y());
|
||||
Add_constraint_if_alpha_compatible(H.r2(),-c.z());
|
||||
|
||||
break;
|
||||
|
||||
case 1 :
|
||||
{
|
||||
Vector const& A0 = A.r0();
|
||||
Vector const& A0 = mConstraints_A.r0();
|
||||
|
||||
CGAL_assertion( A0 != NULL_VECTOR ) ;
|
||||
|
||||
|
|
@ -543,7 +565,7 @@ void LindstromTurkCore<ECM>::Constrians::Add_from_gradient ( Matrix const& H, Ve
|
|||
default : Q0 = NULL_VECTOR ; // This should never happen!
|
||||
}
|
||||
|
||||
CGAL_ECMS_LT_TRACE(3,"[constrains] Q0:" << xyz_to_string(Q0) ) ;
|
||||
CGAL_ECMS_LT_TRACE(3," Q0:" << xyz_to_string(Q0) ) ;
|
||||
|
||||
CGAL_assertion( Q0 != NULL_VECTOR ) ;
|
||||
|
||||
|
|
@ -554,10 +576,10 @@ void LindstromTurkCore<ECM>::Constrians::Add_from_gradient ( Matrix const& H, Ve
|
|||
FT b1 = - ( Q0 * c ) ;
|
||||
FT b2 = - ( Q1 * c ) ;
|
||||
|
||||
CGAL_ECMS_LT_TRACE(3,"[constrains] Q1:" << xyz_to_string(Q1) << " A1: " << xyz_to_string(A1) << " A2:" << xyz_to_string(A2) << "\nb1:" << b1 << " b2:" << b2 ) ;
|
||||
CGAL_ECMS_LT_TRACE(3," Q1:" << xyz_to_string(Q1) << " A1: " << xyz_to_string(A1) << " A2:" << xyz_to_string(A2) << "\n b1:" << b1 << " b2:" << b2 ) ;
|
||||
|
||||
Add_if_alpha_compatible(A1,b1);
|
||||
Add_if_alpha_compatible(A2,b2);
|
||||
Add_constraint_if_alpha_compatible(A1,b1);
|
||||
Add_constraint_if_alpha_compatible(A2,b2);
|
||||
|
||||
}
|
||||
break ;
|
||||
|
|
@ -565,14 +587,15 @@ void LindstromTurkCore<ECM>::Constrians::Add_from_gradient ( Matrix const& H, Ve
|
|||
case 2:
|
||||
{
|
||||
|
||||
Vector Q = cross_product(A.r0(),A.r1());
|
||||
Vector Q = cross_product(mConstraints_A.r0(),mConstraints_A.r1());
|
||||
|
||||
Vector A2 = H * Q ;
|
||||
|
||||
FT b2 = - ( Q * c ) ;
|
||||
|
||||
CGAL_ECMS_LT_TRACE(3,"[constrains] Q:" << xyz_to_string(Q) << " A2: " << xyz_to_string(A2) << " b2:" << b2 ) ;
|
||||
Add_if_alpha_compatible(A2,b2);
|
||||
CGAL_ECMS_LT_TRACE(3," Q:" << xyz_to_string(Q) << " A2: " << xyz_to_string(A2) << " b2:" << b2 ) ;
|
||||
|
||||
Add_constraint_if_alpha_compatible(A2,b2);
|
||||
|
||||
}
|
||||
break ;
|
||||
|
|
|
|||
|
|
@ -14,9 +14,9 @@
|
|||
// $Id$
|
||||
//
|
||||
// Author(s) : Fernando Cacciola <fernando_cacciola@ciudad.com.ar>
|
||||
|
||||
#ifndef CGAL_SURFACE_MESH_SIMPLIFICATION_POLICIES_EDGE_COLLAPSE_EDGE_LENGTH_COST_H
|
||||
#define CGAL_SURFACE_MESH_SIMPLIFICATION_POLICIES_EDGE_COLLAPSE_EDGE_LENGTH_COST_H
|
||||
//
|
||||
#ifndef CGAL_SURFACE_MESH_SIMPLIFICATION_POLICIES_EDGE_COLLAPSE_EDGE_LENGHT_COST_H
|
||||
#define CGAL_SURFACE_MESH_SIMPLIFICATION_POLICIES_EDGE_COLLAPSE_EDGE_LENGHT_COST_H
|
||||
|
||||
#include <CGAL/Surface_mesh_simplification/Detail/Common.h>
|
||||
#include <CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Edge_profile.h>
|
||||
|
|
@ -64,6 +64,6 @@ public:
|
|||
|
||||
CGAL_END_NAMESPACE
|
||||
|
||||
#endif // CGAL_SURFACE_MESH_SIMPLIFICATION_POLICIES_EDGE_COLLAPSE_EDGE_LENGTH_COST_H
|
||||
#endif // CGAL_SURFACE_MESH_SIMPLIFICATION_POLICIES_EDGE_COLLAPSE_EDGE_LENGHT_COST_H
|
||||
// EOF //
|
||||
|
||||
|
|
|
|||
|
|
@ -18,6 +18,8 @@
|
|||
#ifndef CGAL_SURFACE_MESH_SIMPLIFICATION_POLICIES_EDGE_COLLAPSE_LINDSTROMTURK_H
|
||||
#define CGAL_SURFACE_MESH_SIMPLIFICATION_POLICIES_EDGE_COLLAPSE_LINDSTROMTURK_H 1
|
||||
|
||||
#include <CGAL/Exact_predicates_exact_constructions_kernel_with_sqrt.h>
|
||||
|
||||
#include <CGAL/Surface_mesh_simplification/Policies/Edge_collapse/LindstromTurk_params.h>
|
||||
#include <CGAL/Surface_mesh_simplification/Policies/Edge_collapse/LindstromTurk_cost.h>
|
||||
#include <CGAL/Surface_mesh_simplification/Policies/Edge_collapse/LindstromTurk_placement.h>
|
||||
|
|
|
|||
|
|
@ -99,6 +99,9 @@ struct Dummy_visitor
|
|||
template<class Profile, class OPoint>
|
||||
void OnCollapsing(Profile const&, OPoint const& ) {}
|
||||
|
||||
template<class Profile, class VH>
|
||||
void OnCollapsed( Profile const&, VH ) {}
|
||||
|
||||
template<class Profile>
|
||||
void OnNonCollapsable(Profile const& ) {}
|
||||
} ;
|
||||
|
|
|
|||
|
|
@ -58,7 +58,7 @@ halfedge_collapse( typename boost::graph_traits< Polyhedron_3<Gt,I,HDS,A> >::edg
|
|||
vertex_descriptor q = pq->vertex();
|
||||
vertex_descriptor p = pq->opposite()->vertex();
|
||||
|
||||
CGAL_ECMS_TRACE(3, "Collapsing p-q E" << pq->ID << " (V" << p->ID << "->V" << q->ID << ")" ) ;
|
||||
CGAL_ECMS_TRACE(3, "Collapsing p-q E" << pq->id() << " (V" << p->id() << "->V" << q->id() << ")" ) ;
|
||||
|
||||
bool lP_Erased = false, lQ_Erased = false ;
|
||||
|
||||
|
|
@ -67,13 +67,13 @@ halfedge_collapse( typename boost::graph_traits< Polyhedron_3<Gt,I,HDS,A> >::edg
|
|||
CGAL_precondition( !pt->opposite()->is_border() ) ; // p-q-t is a face of the mesh
|
||||
if ( lTopLeftFaceExists )
|
||||
{
|
||||
CGAL_ECMS_TRACE(3, "Removing p-t E" << pt->ID << " (V" << p->ID << "->V" << pt->vertex()->ID << ") by joining top-left face" ) ;
|
||||
CGAL_ECMS_TRACE(3, "Removing p-t E" << pt->id() << " (V" << p->id() << "->V" << pt->vertex()->id() << ") by joining top-left face" ) ;
|
||||
|
||||
aSurface.join_facet (pt);
|
||||
}
|
||||
else
|
||||
{
|
||||
CGAL_ECMS_TRACE(3, "Removing p-t E" << pt->ID << " (V" << p->ID << "->V" << pt->vertex()->ID << ") by erasing top face" ) ;
|
||||
CGAL_ECMS_TRACE(3, "Removing p-t E" << pt->id() << " (V" << p->id() << "->V" << pt->vertex()->id() << ") by erasing top face" ) ;
|
||||
|
||||
aSurface.erase_facet(pt->opposite());
|
||||
|
||||
|
|
@ -90,12 +90,12 @@ halfedge_collapse( typename boost::graph_traits< Polyhedron_3<Gt,I,HDS,A> >::edg
|
|||
CGAL_precondition( !qb->opposite()->is_border() ) ; // p-q-b is a face of the mesh
|
||||
if ( lBottomRightFaceExists )
|
||||
{
|
||||
CGAL_ECMS_TRACE(3, "Removing q-b E" << qb->ID << " (V" << q->ID << "->V" << qb->vertex()->ID << ") by joining bottom-right face" ) ;
|
||||
CGAL_ECMS_TRACE(3, "Removing q-b E" << qb->id() << " (V" << q->id() << "->V" << qb->vertex()->id() << ") by joining bottom-right face" ) ;
|
||||
aSurface.join_facet (qb);
|
||||
}
|
||||
else
|
||||
{
|
||||
CGAL_ECMS_TRACE(3, "Removing q-b E" << qb->ID << " (V" << q->ID << "->V" << qb->vertex()->ID << ") by erasing bottom face" ) ;
|
||||
CGAL_ECMS_TRACE(3, "Removing q-b E" << qb->id() << " (V" << q->id() << "->V" << qb->vertex()->id() << ") by erasing bottom face" ) ;
|
||||
|
||||
aSurface.erase_facet(qb->opposite());
|
||||
|
||||
|
|
|
|||
|
|
@ -1,3 +0,0 @@
|
|||
SMS::LindstromTurk_cost <Surface> cost ;
|
||||
SMS::LindstromTurk_placement<Surface> placement ;
|
||||
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
SMS::Edge_length_cost <Surface> cost ;
|
||||
SMS::Midpoint_placement<Surface> placement ;
|
||||
|
||||
|
|
@ -1,305 +0,0 @@
|
|||
// Copyright (c) 2007 GeometryFactory (France).
|
||||
// All rights reserved.
|
||||
//
|
||||
// This file is part of CGAL (www.cgal.org); you may redistribute it under
|
||||
// the terms of the Q Public License version 1.0.
|
||||
// See the file LICENSE.QPL distributed with CGAL.
|
||||
//
|
||||
// Licensees holding a valid commercial license may use this file in
|
||||
// accordance with the commercial license agreement provided with the soNTware.
|
||||
//
|
||||
// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
|
||||
// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
//
|
||||
// $URL$
|
||||
// $Id$
|
||||
//
|
||||
//
|
||||
// Author(s) : Fernando Cacciola <fernando.cacciola@gmail.com>
|
||||
|
||||
|
||||
#include <iostream>
|
||||
#include <iomanip>
|
||||
#include <sstream>
|
||||
#include <string>
|
||||
#include <fstream>
|
||||
#include <exception>
|
||||
|
||||
#include <boost/format.hpp>
|
||||
|
||||
#define CGAL_CHECK_EXPENSIVE
|
||||
|
||||
//#define TRACE_ENABLED
|
||||
|
||||
#ifdef TRACE_ENABLED
|
||||
# define TRACE(m) std::cerr << m << std::endl ;
|
||||
#else
|
||||
# define TRACE(m)
|
||||
#endif
|
||||
|
||||
#include <CGAL/Real_timer.h>
|
||||
#include <CGAL/Simple_cartesian.h>
|
||||
|
||||
#include <CGAL/Surface_mesh_simplification/HalfedgeGraph_Polyhedron_3.h>
|
||||
#include <CGAL/Surface_mesh_simplification/edge_collapse.h>
|
||||
#include <CGAL/Surface_mesh_simplification/Policies/Edge_collapse/LindstromTurk.h>
|
||||
#include <CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Midpoint_and_length.h>
|
||||
#include <CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Count_stop_predicate.h>
|
||||
|
||||
#include <CGAL/IO/Polyhedron_iostream.h>
|
||||
#include <CGAL/Polyhedron_items_with_id_3.h>
|
||||
|
||||
#include <CGAL/assertions_behaviour.h>
|
||||
|
||||
using namespace std ;
|
||||
using namespace boost ;
|
||||
using namespace CGAL ;
|
||||
|
||||
typedef double NT ;
|
||||
|
||||
typedef Simple_cartesian<NT> Kernel;
|
||||
typedef Kernel::Vector_3 Vector;
|
||||
typedef Kernel::Point_3 Point;
|
||||
|
||||
typedef Polyhedron_3<Kernel,Polyhedron_items_with_id_3> Surface;
|
||||
|
||||
typedef Surface::Vertex Vertex;
|
||||
typedef Surface::Vertex_iterator Vertex_iterator;
|
||||
typedef Surface::Vertex_handle Vertex_handle;
|
||||
typedef Surface::Vertex_const_handle Vertex_const_handle;
|
||||
typedef Surface::Halfedge_handle Halfedge_handle;
|
||||
typedef Surface::Halfedge_const_handle Halfedge_const_handle;
|
||||
typedef Surface::Edge_iterator Edge_iterator;
|
||||
typedef Surface::Facet_iterator Facet_iterator;
|
||||
typedef Surface::Halfedge_around_vertex_const_circulator HV_circulator;
|
||||
typedef Surface::Halfedge_around_facet_circulator HF_circulator;
|
||||
typedef Surface::size_type size_type ;
|
||||
|
||||
|
||||
// This is here only to allow a breakpoint to be placed so I can trace back the problem.
|
||||
void error_handler ( char const* what, char const* expr, char const* file, int line, char const* msg )
|
||||
{
|
||||
cerr << "CGAL error: " << what << " violation!" << endl
|
||||
<< "Expr: " << expr << endl
|
||||
<< "File: " << file << endl
|
||||
<< "Line: " << line << endl;
|
||||
if ( msg != 0)
|
||||
cerr << "Explanation:" << msg << endl;
|
||||
|
||||
throw std::runtime_error(expr);
|
||||
}
|
||||
|
||||
namespace SMS = CGAL::Surface_mesh_simplification ;
|
||||
|
||||
typedef SMS::Edge_profile<Surface> Profile ;
|
||||
|
||||
template<class T>
|
||||
string opt2str ( optional<T> const& o )
|
||||
{
|
||||
ostringstream ss ;
|
||||
if ( o )
|
||||
ss << *o ;
|
||||
else ss << "<none>" ;
|
||||
return ss.str();
|
||||
}
|
||||
|
||||
template<class P>
|
||||
string point2str ( P const& p )
|
||||
{
|
||||
ostringstream ss ;
|
||||
ss << "(" << p.x() << "," << p.y() << "," << p.z() << ")" ;
|
||||
return ss.str();
|
||||
}
|
||||
|
||||
template<class V>
|
||||
string vertex2str ( V const& v )
|
||||
{
|
||||
ostringstream ss ;
|
||||
ss << "[V" << v->id() << point2str(v->point()) << "]" ;
|
||||
return ss.str();
|
||||
}
|
||||
|
||||
template<class E>
|
||||
string edge2str ( E const& e )
|
||||
{
|
||||
ostringstream ss ;
|
||||
ss << "{E" << e->id() << vertex2str(e->opposite()->vertex()) << "->" << vertex2str(e->vertex()) << "}" ;
|
||||
return ss.str();
|
||||
}
|
||||
|
||||
template<class D>
|
||||
string audit2str ( boost::shared_ptr<D> const& d )
|
||||
{
|
||||
ostringstream ss ;
|
||||
ss << "[id:" << d->id ;
|
||||
|
||||
if ( d->cost )
|
||||
ss << " <" << *(d->cost) << ">" ;
|
||||
else ss << " <no-cost>" ;
|
||||
|
||||
if ( d->placement )
|
||||
ss << " <" << *(d->placement) << "> ";
|
||||
else ss << " <no-new-placement>" ;
|
||||
|
||||
ss << "]" ;
|
||||
|
||||
return ss.str();
|
||||
}
|
||||
|
||||
template<class T> ostream& operator << ( ostream& os, optional<T> const& o ) { return os << opt2str(o); }
|
||||
|
||||
string normalize_EOL ( string line )
|
||||
{
|
||||
string::size_type l = line.length();
|
||||
string::size_type d = ( l > 0 && line[l-1] == '\r' ) ? 1 : 0 ;
|
||||
return line.substr(0, l-d ) ;
|
||||
}
|
||||
|
||||
#define REPORT_ERROR(msg) error(__FILE__,__LINE__,0,msg);
|
||||
|
||||
#define REPORT_ERROR2(pred,msg) REPORT_ERROR(msg)
|
||||
|
||||
#define CHECK_MSG(pred,msg) if (!(pred)) REPORT_ERROR2(#pred,msg)
|
||||
|
||||
#define CHECK(pred) CHECK_MSG(pred,string(""))
|
||||
|
||||
#define CHECK_EQUAL(x,y) CHECK_MSG(((x)==(y)), str(format("Assertion failed: %1%(=%2%)==%3%(=%4%)") % (#x) % (x) % (#y) % (y) ) )
|
||||
#define CHECK_NOT_EQUAL(x,y) CHECK_MSG(((x)!=(y)), str(format("Assertion failed: %1%(=%2%)!=%3%(=%4%)") % (#x) % (x) % (#y) % (y) ) )
|
||||
|
||||
#ifdef VISITOR_CLASS
|
||||
# include VISITOR_CLASS
|
||||
#endif
|
||||
|
||||
bool Test ( string aName )
|
||||
{
|
||||
bool rSucceeded = false ;
|
||||
|
||||
try
|
||||
{
|
||||
string off_name = aName ;
|
||||
|
||||
ifstream off_is(off_name.c_str());
|
||||
if ( off_is )
|
||||
{
|
||||
Surface lSurface;
|
||||
off_is >> lSurface ;
|
||||
if ( lSurface.is_valid() )
|
||||
{
|
||||
if ( lSurface.is_pure_triangle() )
|
||||
{
|
||||
cerr << "Processing " << aName << " (" << ( lSurface.size_of_halfedges() / 2 ) << " edges)" << endl ;
|
||||
|
||||
CREATE_VISITOR
|
||||
|
||||
set_halfedgeds_items_id(lSurface);
|
||||
|
||||
SMS::Count_stop_predicate<Surface> stop(1);
|
||||
|
||||
#ifdef STRATEGY_POLICIES
|
||||
# include STRATEGY_POLICIES
|
||||
#endif
|
||||
|
||||
Real_timer t ; t.start();
|
||||
edge_collapse(lSurface
|
||||
,stop
|
||||
,get_cost(cost)
|
||||
.get_placement(placement)
|
||||
VISITOR_ARGUMENT
|
||||
);
|
||||
t.stop();
|
||||
|
||||
rSucceeded = lSurface.is_valid() && lSurface.is_pure_triangle() ;
|
||||
|
||||
cerr << "\r" << aName << ( rSucceeded ? " succeeded" : "FAILED" ) << ". Elapsed time=" << t.time() << " seconds." << endl ;
|
||||
}
|
||||
else
|
||||
{
|
||||
cerr << "Surface is not triangulated (has faces with more than 3 sides): " << aName << endl ;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
cerr << "Invalid surface: " << aName << endl ;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
cerr << "Unable to open test file " << aName << endl ;
|
||||
}
|
||||
}
|
||||
catch ( std::exception const& x )
|
||||
{
|
||||
string what(x.what());
|
||||
if ( what.length() > 0 )
|
||||
cerr << "Exception caught: " << what << endl ;
|
||||
}
|
||||
|
||||
|
||||
return rSucceeded ;
|
||||
}
|
||||
|
||||
int aux_main( int argc, char** argv )
|
||||
{
|
||||
set_error_handler (error_handler);
|
||||
set_warning_handler(error_handler);
|
||||
|
||||
cerr << setprecision(4);
|
||||
|
||||
vector<string> lCases ;
|
||||
|
||||
for ( int i = 1 ; i < argc ; ++i )
|
||||
{
|
||||
string c( normalize_EOL( string(argv[i]) ) ) ;
|
||||
string::size_type pos = c.find_last_of(".") ;
|
||||
if ( pos != string::npos )
|
||||
{
|
||||
string ext = c.substr(pos);
|
||||
if ( ext == ".off" )
|
||||
lCases.push_back(c);
|
||||
}
|
||||
}
|
||||
|
||||
if ( lCases.size() == 0 )
|
||||
{
|
||||
cout << "collapse_edge_test file0 file1 ... fileN\n" ;
|
||||
return 1 ;
|
||||
}
|
||||
else
|
||||
{
|
||||
unsigned lOK = 0 ;
|
||||
for ( vector<string>::const_iterator it = lCases.begin(); it != lCases.end() ; ++ it )
|
||||
{
|
||||
if ( Test(*it) )
|
||||
++ lOK ;
|
||||
}
|
||||
|
||||
cout << endl
|
||||
<< lOK << " cases succedded." << endl
|
||||
<< (lCases.size() - lOK ) << " cases failed." << endl ;
|
||||
|
||||
return lOK == lCases.size() ? 0 : 1 ;
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef WHY_DO_THESE_DONT_EXIST_IN_CGAL_UNDER_LINUX
|
||||
namespace CGAL
|
||||
{
|
||||
|
||||
void assertion_fail( const char* expr, const char* file, int line )
|
||||
{
|
||||
assertion_fail(expr,file,line,"");
|
||||
}
|
||||
void precondition_fail( const char* expr, const char* file, int line )
|
||||
{
|
||||
precondition_fail(expr,file,line,"");
|
||||
}
|
||||
void postcondition_fail( const char* expr, const char* file, int line )
|
||||
{
|
||||
postcondition_fail(expr,file,line,"");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
// EOF //
|
||||
|
|
@ -0,0 +1,77 @@
|
|||
#ifndef BASICS_H
|
||||
#define BASICS_H
|
||||
|
||||
#include <iostream>
|
||||
#include <iomanip>
|
||||
#include <sstream>
|
||||
#include <string>
|
||||
#include <fstream>
|
||||
#include <exception>
|
||||
#include <map>
|
||||
|
||||
#include <boost/format.hpp>
|
||||
|
||||
#define CGAL_CHECK_EXPENSIVE
|
||||
|
||||
#define TRACE_ENABLED
|
||||
|
||||
#ifdef TRACE_ENABLED
|
||||
# define TRACE(m) std::cerr << m << std::endl ;
|
||||
#else
|
||||
# define TRACE(m)
|
||||
#endif
|
||||
|
||||
#define CGAL_SURFACE_SIMPLIFICATION_ENABLE_TRACE 4
|
||||
#define CGAL_SURFACE_SIMPLIFICATION_ENABLE_LT_TRACE 4
|
||||
|
||||
void Surface_simplification_external_trace( std::string s )
|
||||
{
|
||||
static std::ofstream out("log.txt");
|
||||
out << s << std::endl ;
|
||||
}
|
||||
|
||||
#include <CGAL/Real_timer.h>
|
||||
#include <CGAL/Simple_cartesian.h>
|
||||
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
|
||||
|
||||
#include <CGAL/Surface_mesh_simplification/HalfedgeGraph_Polyhedron_3.h>
|
||||
#include <CGAL/Surface_mesh_simplification/edge_collapse.h>
|
||||
#include <CGAL/Surface_mesh_simplification/Policies/Edge_collapse/LindstromTurk.h>
|
||||
#include <CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Midpoint_and_length.h>
|
||||
#include <CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Count_stop_predicate.h>
|
||||
|
||||
#include <CGAL/IO/Polyhedron_iostream.h>
|
||||
#include <CGAL/Polyhedron_items_with_id_3.h>
|
||||
#include <CGAL/Polyhedron_incremental_builder_3.h>
|
||||
|
||||
#include <CGAL/assertions_behaviour.h>
|
||||
|
||||
using namespace std ;
|
||||
using namespace boost ;
|
||||
using namespace CGAL ;
|
||||
|
||||
typedef double NT ;
|
||||
|
||||
//typedef Simple_cartesian<NT> Kernel;
|
||||
typedef Exact_predicates_inexact_constructions_kernel Kernel ;
|
||||
|
||||
typedef Kernel::Vector_3 Vector;
|
||||
typedef Kernel::Point_3 Point;
|
||||
|
||||
typedef Polyhedron_3<Kernel,Polyhedron_items_with_id_3> Surface;
|
||||
|
||||
typedef Surface::Vertex Vertex;
|
||||
typedef Surface::Vertex_iterator Vertex_iterator;
|
||||
typedef Surface::Vertex_handle Vertex_handle;
|
||||
typedef Surface::Vertex_const_handle Vertex_const_handle;
|
||||
typedef Surface::Halfedge_handle Halfedge_handle;
|
||||
typedef Surface::Halfedge_const_handle Halfedge_const_handle;
|
||||
typedef Surface::Edge_iterator Edge_iterator;
|
||||
typedef Surface::Facet_iterator Facet_iterator;
|
||||
typedef Surface::Facet_const_iterator Facet_const_iterator;
|
||||
typedef Surface::Facet_const_handle Facet_const_handle;
|
||||
typedef Surface::Halfedge_around_vertex_const_circulator HV_circulator;
|
||||
typedef Surface::Halfedge_around_facet_circulator HF_circulator;
|
||||
typedef Surface::size_type size_type ;
|
||||
|
||||
#endif // BASICS_H
|
||||
|
|
@ -1,254 +0,0 @@
|
|||
#include <vector>
|
||||
#include <boost/tokenizer.hpp>
|
||||
#include <boost/lexical_cast.hpp>
|
||||
|
||||
class Visitor
|
||||
{
|
||||
private :
|
||||
|
||||
struct Data
|
||||
{
|
||||
Data ( size_t i, optional<NT> const& c, optional<Point> const& p )
|
||||
:
|
||||
id(i)
|
||||
,cost(c)
|
||||
,placement(p)
|
||||
{}
|
||||
|
||||
size_t id ;
|
||||
optional<NT> cost ;
|
||||
optional<Point> placement ;
|
||||
} ;
|
||||
typedef boost::shared_ptr<Data> Data_ptr ;
|
||||
|
||||
typedef map<int,Data_ptr> Table ;
|
||||
|
||||
|
||||
private :
|
||||
|
||||
typedef char_separator<char> Separator ;
|
||||
typedef tokenizer<Separator> Tokenizer ;
|
||||
|
||||
|
||||
void ReadAudit( istream& in )
|
||||
{
|
||||
size_t section = 0 ;
|
||||
string line ;
|
||||
while ( getline(in,line) )
|
||||
{
|
||||
line = normalize_EOL(line);
|
||||
if ( line.length() > 0 )
|
||||
{
|
||||
TRACE( str ( format("AUDIT: %1%") % line ) ) ;
|
||||
|
||||
switch ( section )
|
||||
{
|
||||
case 0 : epsilon_cost = compute_epsilon_from_smallest_sample(toNT(line)); break ;
|
||||
case 1 : epsilon_sqdist = compute_epsilon_from_smallest_sample(toNT(line)); break ;
|
||||
|
||||
default :
|
||||
|
||||
Tokenizer tk(line,Separator(" "));
|
||||
vector<string> tokens (tk.begin(),tk.end());
|
||||
|
||||
CHECK_MSG( tokens.size() >= 1, str(format("Invalid audit line of type I, id field missing: %1%") % line) ) ;
|
||||
CHECK_MSG( tokens.size() >= 2, str(format("Invalid audit line of type I, cost field missing: %1%") % line) ) ;
|
||||
CHECK_MSG( tokens.size() >= 5, str(format("Invalid audit line of type I, placement field missing: %1%") % line) ) ;
|
||||
|
||||
size_t id = lexical_cast<size_t>(tokens[0]);
|
||||
|
||||
CHECK_MSG(audit_table.find(id)==audit_table.end()
|
||||
,str(format("Invalid audit line of type I, id field with duplicate value: %1%") % line)
|
||||
);
|
||||
|
||||
|
||||
optional<NT> cost ;
|
||||
|
||||
if ( tokens[1][0] != '?' )
|
||||
cost = toNT(tokens[1]);
|
||||
|
||||
optional<Point> placement ;
|
||||
if ( tokens.size() > 3 )
|
||||
{
|
||||
if ( tokens[2][0] != '?' )
|
||||
{
|
||||
NT x = toNT(tokens[2]);
|
||||
NT y = toNT(tokens[3]);
|
||||
NT z = toNT(tokens[4]);
|
||||
|
||||
placement = Point(x,y,z);
|
||||
}
|
||||
}
|
||||
|
||||
audit_table.insert(make_pair(id,Data_ptr( new Data(id, cost, placement) ) ) ) ;
|
||||
|
||||
break ;
|
||||
}
|
||||
|
||||
++ section ;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public :
|
||||
|
||||
Visitor ( string audit_name ) : infinite_cost(1e+8)
|
||||
{
|
||||
TRACE( str ( format("AUDIT FILE: %1%") % audit_name ) ) ;
|
||||
ifstream in(audit_name.c_str());
|
||||
if ( in )
|
||||
ReadAudit(in);
|
||||
else REPORT_ERROR( str(format("Unable to open audit file: %1%") % audit_name) ) ;
|
||||
}
|
||||
|
||||
void OnStarted( Surface& ) {}
|
||||
|
||||
void OnFinished ( Surface& aSurface )
|
||||
{
|
||||
CHECK(aSurface.is_valid());
|
||||
|
||||
CHECK_EQUAL( audit_table.size(), actual_table.size() ) ;
|
||||
|
||||
size_t total = audit_table.size() ;
|
||||
size_t failed = 0 ;
|
||||
for ( size_t i = 0, ei = total ; i != ei ; ++ i )
|
||||
{
|
||||
size_t idx = i * 2 ;
|
||||
Data_ptr audit_data = audit_table[idx];
|
||||
Data_ptr actual_data = actual_table[idx];
|
||||
|
||||
CHECK(audit_data);
|
||||
CHECK(actual_data);
|
||||
|
||||
match cost_m = equal_cost (audit_data->cost ,actual_data->cost);
|
||||
match placement_m = equal_placement(audit_data->placement,actual_data->placement);
|
||||
|
||||
if ( !cost_m.ok() )
|
||||
{
|
||||
cerr << "Cost mismatch detected: " << cost_m
|
||||
<< "\nExpected: " << audit2str(audit_data)
|
||||
<< "\nGot: " << audit2str(actual_data) << endl ;
|
||||
++ failed ;
|
||||
}
|
||||
if ( !placement_m.ok() )
|
||||
{
|
||||
cerr << "Placement mismatch detected: " << placement_m
|
||||
<< "\nExpected: " << audit2str(audit_data)
|
||||
<< "\nGot: " << audit2str(actual_data) << endl ;
|
||||
++ failed ;
|
||||
}
|
||||
}
|
||||
|
||||
if ( ( failed * 100 / total ) >= 5 )
|
||||
throw runtime_error("");
|
||||
|
||||
}
|
||||
|
||||
void OnStopConditionReached( Profile const& ) {}
|
||||
|
||||
void OnCollected( Profile const& aProfile, optional<NT> const& aCost, optional<Point> const& aP )
|
||||
{
|
||||
TRACE( str ( format("I %1% # %2%") % aProfile.v0_v1()->id() % edge2str(aProfile.v0_v1()) ) ) ;
|
||||
|
||||
actual_table.insert(make_pair(aProfile.v0_v1()->id(), Data_ptr( new Data(aProfile.v0_v1()->id(),aCost,aP) ) ) ) ;
|
||||
}
|
||||
|
||||
void OnSelected( Profile const&, optional<NT> const&, size_t, size_t ) {}
|
||||
|
||||
void OnCollapsing( Profile const&, optional<Point> const& ) {}
|
||||
|
||||
void OnNonCollapsable( Profile const& ) {}
|
||||
|
||||
NT toNT ( string s )
|
||||
{
|
||||
NT r(-1);
|
||||
|
||||
try
|
||||
{
|
||||
r = lexical_cast<NT>(s);
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
cerr << "Cannot convert string[" << s << "] to a numeric value" << endl ;
|
||||
}
|
||||
|
||||
return r ;
|
||||
}
|
||||
|
||||
|
||||
NT compute_epsilon_from_smallest_sample ( NT n ) { return n / NT(256); }
|
||||
|
||||
struct match
|
||||
{
|
||||
match ( std::string aFailure ) : mFailure(aFailure) {}
|
||||
|
||||
bool ok() const { return mFailure.empty() ; }
|
||||
|
||||
friend std::ostream& operator<< ( std::ostream& os, match const& m ) { return os << m.mFailure ; }
|
||||
|
||||
std::string mFailure ;
|
||||
} ;
|
||||
|
||||
match equal_cost ( optional<NT> const& a, optional<NT> const& b )
|
||||
{
|
||||
std::string failure ;
|
||||
|
||||
if ( a && b )
|
||||
{
|
||||
NT actual_diff = CGAL_NTS abs(*a-*b) ;
|
||||
|
||||
if ( actual_diff > epsilon_cost )
|
||||
failure = str(format("actual_diff=%1% max_diff=%1%") % actual_diff % epsilon_cost) ;
|
||||
}
|
||||
else if ( !a && b )
|
||||
{
|
||||
if ( *b < infinite_cost )
|
||||
{
|
||||
failure = "non-collapsable in case A but collapsable in case B" ;
|
||||
}
|
||||
}
|
||||
else if ( a && !b )
|
||||
{
|
||||
if ( *a < infinite_cost )
|
||||
{
|
||||
failure = "non-collapsable in case B but collapsable in case A" ;
|
||||
}
|
||||
}
|
||||
|
||||
return match(failure);
|
||||
}
|
||||
|
||||
match equal_placement ( optional<Point> const& a, optional<Point> const& b )
|
||||
{
|
||||
std::string failure ;
|
||||
|
||||
if ( a && b )
|
||||
{
|
||||
NT actual_diff = squared_distance(*a,*b) ;
|
||||
|
||||
if ( actual_diff > epsilon_sqdist )
|
||||
failure = str(format("actual_diff=%1% max_diff=%1%") % actual_diff % epsilon_sqdist) ;
|
||||
}
|
||||
|
||||
return match(failure);
|
||||
}
|
||||
|
||||
void error ( char const* file, int line, char const* pred, string msg )
|
||||
{
|
||||
cerr << "ERROR in " << file << " at " << line << endl ;
|
||||
if ( pred )
|
||||
cerr << " Assertion failed: " << pred << endl ;
|
||||
cerr << " " << msg << endl ;
|
||||
|
||||
|
||||
throw runtime_error("");
|
||||
}
|
||||
|
||||
private :
|
||||
|
||||
Table audit_table ;
|
||||
Table actual_table ;
|
||||
NT epsilon_cost ;
|
||||
NT epsilon_sqdist ;
|
||||
NT infinite_cost ;
|
||||
} ;
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
5559
Surface_mesh_simplification/test/Surface_mesh_simplification/data/couplingdown.off
Executable file
5559
Surface_mesh_simplification/test/Surface_mesh_simplification/data/couplingdown.off
Executable file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,120 @@
|
|||
OFF
|
||||
40 76 0
|
||||
|
||||
-0.5 0.1 -0.1
|
||||
-0.3 0.1 -0.1
|
||||
-0.1 0.1 -0.1
|
||||
-0.1 0.3 -0.1
|
||||
-0.1 0.5 -0.1
|
||||
0.1 0.5 -0.1
|
||||
0.1 0.3 -0.1
|
||||
0.1 0.1 -0.1
|
||||
0.3 0.1 -0.1
|
||||
0.5 0.1 -0.1
|
||||
0.5 -0.1 -0.1
|
||||
0.3 -0.1 -0.1
|
||||
0.1 -0.1 -0.1
|
||||
0.1 -0.3 -0.1
|
||||
0.1 -0.5 -0.1
|
||||
-0.1 -0.5 -0.1
|
||||
-0.1 -0.3 -0.1
|
||||
-0.1 -0.1 -0.1
|
||||
-0.3 -0.1 -0.1
|
||||
-0.5 -0.1 -0.1
|
||||
-0.5 0.1 0.1
|
||||
-0.3 0.1 0.1
|
||||
-0.1 0.1 0.1
|
||||
-0.1 0.3 0.1
|
||||
-0.1 0.5 0.1
|
||||
0.1 0.5 0.1
|
||||
0.1 0.3 0.1
|
||||
0.1 0.1 0.1
|
||||
0.3 0.1 0.1
|
||||
0.5 0.1 0.1
|
||||
0.5 -0.1 0.1
|
||||
0.3 -0.1 0.1
|
||||
0.1 -0.1 0.1
|
||||
0.1 -0.3 0.1
|
||||
0.1 -0.5 0.1
|
||||
-0.1 -0.5 0.1
|
||||
-0.1 -0.3 0.1
|
||||
-0.1 -0.1 0.1
|
||||
-0.3 -0.1 0.1
|
||||
-0.5 -0.1 0.1
|
||||
3 19 0 1
|
||||
3 18 1 2
|
||||
3 17 2 7
|
||||
3 7 2 3
|
||||
3 6 3 4
|
||||
3 12 7 8
|
||||
3 11 8 9
|
||||
3 17 12 13
|
||||
3 16 13 14
|
||||
3 21 1 0
|
||||
3 22 2 1
|
||||
3 23 3 2
|
||||
3 24 4 3
|
||||
3 25 5 4
|
||||
3 26 6 5
|
||||
3 27 7 6
|
||||
3 28 8 7
|
||||
3 29 9 8
|
||||
3 30 10 9
|
||||
3 31 11 10
|
||||
3 32 12 11
|
||||
3 33 13 12
|
||||
3 34 14 13
|
||||
3 35 15 14
|
||||
3 36 16 15
|
||||
3 37 17 16
|
||||
3 38 18 17
|
||||
3 39 19 18
|
||||
3 20 0 19
|
||||
3 20 39 38
|
||||
3 21 38 37
|
||||
3 22 37 32
|
||||
3 22 27 26
|
||||
3 23 26 25
|
||||
3 27 32 31
|
||||
3 28 31 30
|
||||
3 32 37 36
|
||||
3 33 36 35
|
||||
3 1 18 19
|
||||
3 2 17 18
|
||||
3 7 12 17
|
||||
3 3 6 7
|
||||
3 4 5 6
|
||||
3 8 11 12
|
||||
3 9 10 11
|
||||
3 13 16 17
|
||||
3 14 15 16
|
||||
3 0 20 21
|
||||
3 1 21 22
|
||||
3 2 22 23
|
||||
3 3 23 24
|
||||
3 4 24 25
|
||||
3 5 25 26
|
||||
3 6 26 27
|
||||
3 7 27 28
|
||||
3 8 28 29
|
||||
3 9 29 30
|
||||
3 10 30 31
|
||||
3 11 31 32
|
||||
3 12 32 33
|
||||
3 13 33 34
|
||||
3 14 34 35
|
||||
3 15 35 36
|
||||
3 16 36 37
|
||||
3 17 37 38
|
||||
3 18 38 39
|
||||
3 19 39 20
|
||||
3 38 21 20
|
||||
3 37 22 21
|
||||
3 32 27 22
|
||||
3 26 23 22
|
||||
3 25 24 23
|
||||
3 31 28 27
|
||||
3 30 29 28
|
||||
3 36 33 32
|
||||
3 35 34 33
|
||||
|
||||
|
|
@ -1,14 +1,13 @@
|
|||
OFF
|
||||
8 12 0
|
||||
|
||||
-0.274878 -0.274878 -0.274878
|
||||
-0.274878 0.274878 -0.274878
|
||||
0.274878 0.274878 -0.274878
|
||||
0.274878 -0.274878 -0.274878
|
||||
-0.274878 -0.274878 0.274878
|
||||
-0.274878 0.274878 0.274878
|
||||
0.274878 0.274878 0.274878
|
||||
0.274878 -0.274878 0.274878
|
||||
-1 -1 -1
|
||||
-1 1 -1
|
||||
1 1 -1
|
||||
1 -1 -1
|
||||
-1 -1 1
|
||||
-1 1 1
|
||||
1 1 1
|
||||
1 -1 1
|
||||
3 0 1 3
|
||||
3 3 1 2
|
||||
3 0 4 1
|
||||
|
|
@ -21,4 +20,3 @@ OFF
|
|||
3 6 5 4
|
||||
3 1 5 6
|
||||
3 2 1 6
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,483 @@
|
|||
OFF
|
||||
161 318 0
|
||||
|
||||
-0.222222 -0.332893 0.0171407
|
||||
-0.222222 -0.330685 -0.0419259
|
||||
-0.222222 -0.324022 0.0782296
|
||||
-0.222222 -0.319063 -0.0964926
|
||||
-0.222222 -0.303341 0.138185
|
||||
-0.222222 -0.288674 -0.166667
|
||||
-0.222222 -0.271341 0.193611
|
||||
-0.222222 -0.243096 -0.22807
|
||||
-0.222222 -0.229763 0.241496
|
||||
-0.222222 -0.201652 -0.265419
|
||||
-0.222222 -0.181289 0.279722
|
||||
-0.222222 -0.151604 -0.296863
|
||||
-0.222222 -0.129033 0.307344
|
||||
-0.222222 -0.094263 -0.31973
|
||||
-0.222222 -0.0759667 0.324563
|
||||
-0.222222 -0.032 -0.331793
|
||||
-0.222222 0 0.333333
|
||||
-0.222222 0.032 -0.331793
|
||||
-0.222222 0.0759667 0.324563
|
||||
-0.222222 0.094263 -0.31973
|
||||
-0.222222 0.129033 0.307344
|
||||
-0.222222 0.1516 -0.296863
|
||||
-0.222222 0.181289 0.279722
|
||||
-0.222222 0.201652 -0.265419
|
||||
-0.222222 0.229763 0.241496
|
||||
-0.222222 0.243096 -0.22807
|
||||
-0.222222 0.271341 0.193611
|
||||
-0.222222 0.288674 -0.166667
|
||||
-0.222222 0.303341 0.138181
|
||||
-0.222222 0.319063 -0.0964926
|
||||
-0.222222 0.324022 0.0782296
|
||||
-0.222222 0.330685 -0.0419259
|
||||
-0.222222 0.332893 0.0171407
|
||||
-0.185185 -0.333085 0.0128222
|
||||
-0.185185 -0.329674 -0.0492556
|
||||
-0.185185 -0.325474 0.0719667
|
||||
-0.185185 -0.313478 -0.113326
|
||||
-0.185185 -0.306107 0.131941
|
||||
-0.185185 -0.283441 -0.175419
|
||||
-0.185185 -0.274393 0.189263
|
||||
-0.185185 -0.240193 -0.231126
|
||||
-0.185185 -0.231126 0.240193
|
||||
-0.185185 -0.186193 -0.276485
|
||||
-0.185185 -0.17857 0.281467
|
||||
-0.185185 -0.125296 -0.308889
|
||||
-0.185185 -0.12007 0.310956
|
||||
-0.185185 -0.0619 -0.327537
|
||||
-0.185185 -0.0593926 0.328
|
||||
-0.185185 0 -0.333333
|
||||
-0.185185 0 0.333333
|
||||
-0.185185 0.0593926 0.328
|
||||
-0.185185 0.0619 -0.327537
|
||||
-0.185185 0.12007 0.310956
|
||||
-0.185185 0.125296 -0.308889
|
||||
-0.185185 0.17857 0.281467
|
||||
-0.185185 0.186193 -0.276485
|
||||
-0.185185 0.231126 0.240193
|
||||
-0.185185 0.240193 -0.231126
|
||||
-0.185185 0.274393 0.189263
|
||||
-0.185185 0.283441 -0.175419
|
||||
-0.185185 0.306107 0.131941
|
||||
-0.185185 0.313478 -0.113326
|
||||
-0.185185 0.325474 0.0719667
|
||||
-0.185185 0.329674 -0.0492556
|
||||
-0.185185 0.333085 0.0128222
|
||||
-0.0740741 -0.49963 0.0192296
|
||||
-0.0740741 -0.494511 -0.0738815
|
||||
-0.0740741 -0.488207 0.107948
|
||||
-0.0740741 -0.470219 -0.169985
|
||||
-0.0740741 -0.459163 0.197915
|
||||
-0.0740741 -0.425163 -0.26313
|
||||
-0.0740741 -0.411589 0.283893
|
||||
-0.0740741 -0.360289 -0.346689
|
||||
-0.0740741 -0.346689 0.360289
|
||||
-0.0740741 -0.279289 -0.414726
|
||||
-0.0740741 -0.267852 0.422204
|
||||
-0.0740741 -0.187944 -0.463333
|
||||
-0.0740741 -0.180107 0.466433
|
||||
-0.0740741 -0.0928481 -0.491304
|
||||
-0.0740741 -0.0890889 0.492
|
||||
-0.0740741 0 -0.5
|
||||
-0.0740741 0 0.5
|
||||
-0.0740741 0.0890889 0.492
|
||||
-0.0740741 0.0928481 -0.491304
|
||||
-0.0740741 0.180107 0.466433
|
||||
-0.0740741 0.187944 -0.463333
|
||||
-0.0740741 0.267852 0.422204
|
||||
-0.0740741 0.279289 -0.414726
|
||||
-0.0740741 0.346689 0.360289
|
||||
-0.0740741 0.360289 -0.346689
|
||||
-0.0740741 0.411589 0.283893
|
||||
-0.0740741 0.425163 -0.26313
|
||||
-0.0740741 0.459163 0.197915
|
||||
-0.0740741 0.470219 -0.169985
|
||||
-0.0740741 0.488207 0.107948
|
||||
-0.0740741 0.494511 -0.0738815
|
||||
-0.0740741 0.49963 0.0192296
|
||||
0.166667 -0.222059 0.00854815
|
||||
0.166667 -0.219781 -0.032837
|
||||
0.166667 -0.213585 0.0613519
|
||||
0.166667 -0.208985 -0.0755481
|
||||
0.166667 -0.197933 0.101019
|
||||
0.166667 -0.188959 -0.116948
|
||||
0.166667 -0.182926 0.126174
|
||||
0.166667 -0.16013 -0.154085
|
||||
0.166667 -0.154085 0.16013
|
||||
0.166667 -0.12413 -0.184322
|
||||
0.166667 -0.119044 0.187644
|
||||
0.166667 -0.0835296 -0.205926
|
||||
0.166667 -0.0800481 0.207304
|
||||
0.166667 -0.0412667 -0.218356
|
||||
0.166667 -0.0262 0.220674
|
||||
0.166667 0 -0.222222
|
||||
0.166667 0.017363 0.221544
|
||||
0.166667 0.0412667 -0.218356
|
||||
0.166667 0.0530889 0.215789
|
||||
0.166667 0.0835296 -0.205926
|
||||
0.166667 0.0933333 0.201674
|
||||
0.166667 0.119044 0.187644
|
||||
0.166667 0.12413 -0.184322
|
||||
0.166667 0.154085 0.16013
|
||||
0.166667 0.16013 -0.154085
|
||||
0.166667 0.182926 0.126174
|
||||
0.166667 0.188959 -0.116948
|
||||
0.166667 0.204074 0.087963
|
||||
0.166667 0.208985 -0.0755481
|
||||
0.166667 0.2195 0.0346704
|
||||
0.166667 0.219781 -0.032837
|
||||
0.166667 0.222167 -0.00496296
|
||||
0.222222 -0.444115 0.0170926
|
||||
0.222222 -0.439567 -0.0656741
|
||||
0.222222 -0.433963 0.0959519
|
||||
0.222222 -0.41797 -0.1511
|
||||
0.222222 -0.408144 0.175922
|
||||
0.222222 -0.377922 -0.233893
|
||||
0.222222 -0.365856 0.252352
|
||||
0.222222 -0.320256 -0.308167
|
||||
0.222222 -0.308167 0.320256
|
||||
0.222222 -0.248256 -0.368644
|
||||
0.222222 -0.238093 0.375289
|
||||
0.222222 -0.167063 -0.411852
|
||||
0.222222 -0.160096 0.414607
|
||||
0.222222 -0.0825296 -0.436715
|
||||
0.222222 -0.0791926 0.437333
|
||||
0.222222 0 -0.444444
|
||||
0.222222 0 0.444444
|
||||
0.222222 0.0791926 0.437333
|
||||
0.222222 0.0825296 -0.436715
|
||||
0.222222 0.160096 0.414607
|
||||
0.222222 0.167063 -0.411852
|
||||
0.222222 0.238093 0.375289
|
||||
0.222222 0.248256 -0.368644
|
||||
0.222222 0.308167 0.320256
|
||||
0.222222 0.320256 -0.308167
|
||||
0.222222 0.365856 0.252352
|
||||
0.222222 0.377922 -0.233893
|
||||
0.222222 0.408144 0.175922
|
||||
0.222222 0.41797 -0.1511
|
||||
0.222222 0.433963 0.0959519
|
||||
0.222222 0.439567 -0.0656741
|
||||
0.222222 0.444115 0.0170926
|
||||
3 127 128 125
|
||||
3 128 126 125
|
||||
3 125 126 123
|
||||
3 126 124 123
|
||||
3 123 124 121
|
||||
3 124 122 121
|
||||
3 121 122 119
|
||||
3 122 120 119
|
||||
3 119 120 116
|
||||
3 120 118 116
|
||||
3 116 118 114
|
||||
3 118 117 114
|
||||
3 114 117 112
|
||||
3 117 115 112
|
||||
3 112 115 110
|
||||
3 115 113 110
|
||||
3 110 113 108
|
||||
3 113 111 108
|
||||
3 108 111 106
|
||||
3 111 109 106
|
||||
3 106 109 104
|
||||
3 109 107 104
|
||||
3 104 107 102
|
||||
3 107 105 102
|
||||
3 102 105 100
|
||||
3 105 103 100
|
||||
3 100 103 98
|
||||
3 103 101 98
|
||||
3 98 101 97
|
||||
3 101 99 97
|
||||
3 154 122 156
|
||||
3 122 124 156
|
||||
3 156 124 158
|
||||
3 124 126 158
|
||||
3 158 126 160
|
||||
3 126 128 160
|
||||
3 160 128 159
|
||||
3 128 127 159
|
||||
3 159 127 157
|
||||
3 127 125 157
|
||||
3 157 125 155
|
||||
3 125 123 155
|
||||
3 155 123 153
|
||||
3 123 121 153
|
||||
3 153 121 151
|
||||
3 121 119 151
|
||||
3 151 119 149
|
||||
3 119 116 149
|
||||
3 149 116 147
|
||||
3 116 114 147
|
||||
3 147 114 144
|
||||
3 114 112 144
|
||||
3 144 112 142
|
||||
3 112 110 142
|
||||
3 142 110 140
|
||||
3 110 108 140
|
||||
3 140 108 138
|
||||
3 108 106 138
|
||||
3 138 106 136
|
||||
3 106 104 136
|
||||
3 136 104 134
|
||||
3 104 102 134
|
||||
3 134 102 132
|
||||
3 102 100 132
|
||||
3 132 100 130
|
||||
3 100 98 130
|
||||
3 130 98 129
|
||||
3 98 97 129
|
||||
3 129 97 131
|
||||
3 97 99 131
|
||||
3 131 99 133
|
||||
3 99 101 133
|
||||
3 133 101 135
|
||||
3 101 103 135
|
||||
3 135 103 137
|
||||
3 103 105 137
|
||||
3 137 105 139
|
||||
3 105 107 139
|
||||
3 139 107 141
|
||||
3 107 109 141
|
||||
3 141 109 143
|
||||
3 109 111 143
|
||||
3 143 111 145
|
||||
3 111 113 145
|
||||
3 145 113 146
|
||||
3 113 115 146
|
||||
3 146 115 148
|
||||
3 115 117 148
|
||||
3 148 117 150
|
||||
3 117 118 150
|
||||
3 150 118 152
|
||||
3 118 120 152
|
||||
3 152 120 154
|
||||
3 120 122 154
|
||||
3 80 144 78
|
||||
3 144 142 78
|
||||
3 142 140 78
|
||||
3 78 140 76
|
||||
3 140 138 76
|
||||
3 76 138 74
|
||||
3 138 136 74
|
||||
3 74 136 72
|
||||
3 136 134 72
|
||||
3 72 134 70
|
||||
3 134 132 70
|
||||
3 70 132 68
|
||||
3 132 130 68
|
||||
3 68 130 66
|
||||
3 130 129 66
|
||||
3 66 129 65
|
||||
3 129 131 65
|
||||
3 65 131 67
|
||||
3 131 133 67
|
||||
3 67 133 69
|
||||
3 133 135 69
|
||||
3 69 135 71
|
||||
3 135 137 71
|
||||
3 71 137 73
|
||||
3 137 139 73
|
||||
3 73 139 75
|
||||
3 139 141 75
|
||||
3 75 141 77
|
||||
3 141 143 77
|
||||
3 77 143 79
|
||||
3 143 145 79
|
||||
3 79 145 81
|
||||
3 145 146 81
|
||||
3 81 146 82
|
||||
3 146 148 82
|
||||
3 82 148 84
|
||||
3 148 150 84
|
||||
3 84 150 86
|
||||
3 150 152 86
|
||||
3 86 152 88
|
||||
3 152 154 88
|
||||
3 88 154 90
|
||||
3 154 156 90
|
||||
3 90 156 92
|
||||
3 156 158 92
|
||||
3 92 158 94
|
||||
3 158 160 94
|
||||
3 94 160 96
|
||||
3 160 159 96
|
||||
3 96 159 95
|
||||
3 159 157 95
|
||||
3 95 157 93
|
||||
3 157 155 93
|
||||
3 93 155 91
|
||||
3 155 153 91
|
||||
3 91 153 89
|
||||
3 153 151 89
|
||||
3 89 151 87
|
||||
3 151 149 87
|
||||
3 87 149 85
|
||||
3 149 147 85
|
||||
3 85 147 83
|
||||
3 147 144 83
|
||||
3 83 144 80
|
||||
3 36 68 34
|
||||
3 68 66 34
|
||||
3 34 66 33
|
||||
3 66 65 33
|
||||
3 33 65 35
|
||||
3 65 67 35
|
||||
3 35 67 37
|
||||
3 67 69 37
|
||||
3 37 69 39
|
||||
3 69 71 39
|
||||
3 39 71 41
|
||||
3 71 73 41
|
||||
3 41 73 43
|
||||
3 73 75 43
|
||||
3 43 75 45
|
||||
3 75 77 45
|
||||
3 45 77 47
|
||||
3 77 79 47
|
||||
3 47 79 49
|
||||
3 79 81 49
|
||||
3 49 81 50
|
||||
3 81 82 50
|
||||
3 50 82 52
|
||||
3 82 84 52
|
||||
3 52 84 54
|
||||
3 84 86 54
|
||||
3 54 86 56
|
||||
3 86 88 56
|
||||
3 56 88 58
|
||||
3 88 90 58
|
||||
3 58 90 60
|
||||
3 90 92 60
|
||||
3 60 92 62
|
||||
3 92 94 62
|
||||
3 62 94 64
|
||||
3 94 96 64
|
||||
3 64 96 63
|
||||
3 96 95 63
|
||||
3 63 95 61
|
||||
3 95 93 61
|
||||
3 61 93 59
|
||||
3 93 91 59
|
||||
3 59 91 57
|
||||
3 91 89 57
|
||||
3 57 89 55
|
||||
3 89 87 55
|
||||
3 55 87 53
|
||||
3 87 85 53
|
||||
3 53 85 51
|
||||
3 85 83 51
|
||||
3 51 83 48
|
||||
3 83 80 48
|
||||
3 48 80 46
|
||||
3 80 78 46
|
||||
3 46 78 44
|
||||
3 78 76 44
|
||||
3 44 76 42
|
||||
3 76 74 42
|
||||
3 42 74 40
|
||||
3 74 72 40
|
||||
3 40 72 38
|
||||
3 72 70 38
|
||||
3 38 70 36
|
||||
3 70 68 36
|
||||
3 32 31 30
|
||||
3 31 29 30
|
||||
3 30 29 28
|
||||
3 29 27 28
|
||||
3 28 27 26
|
||||
3 27 25 26
|
||||
3 26 25 24
|
||||
3 25 23 24
|
||||
3 24 23 22
|
||||
3 23 21 22
|
||||
3 22 21 20
|
||||
3 21 19 20
|
||||
3 20 19 18
|
||||
3 19 17 18
|
||||
3 18 17 16
|
||||
3 17 15 16
|
||||
3 16 15 14
|
||||
3 15 13 14
|
||||
3 14 13 12
|
||||
3 13 11 12
|
||||
3 12 11 10
|
||||
3 11 9 10
|
||||
3 10 9 8
|
||||
3 9 7 8
|
||||
3 8 7 6
|
||||
3 7 5 6
|
||||
3 6 5 4
|
||||
3 5 3 4
|
||||
3 4 3 2
|
||||
3 3 1 2
|
||||
3 2 1 0
|
||||
3 12 45 14
|
||||
3 45 47 14
|
||||
3 14 47 16
|
||||
3 47 49 16
|
||||
3 49 50 16
|
||||
3 16 50 18
|
||||
3 50 52 18
|
||||
3 18 52 20
|
||||
3 52 54 20
|
||||
3 20 54 22
|
||||
3 54 56 22
|
||||
3 22 56 24
|
||||
3 24 56 26
|
||||
3 56 58 26
|
||||
3 26 58 28
|
||||
3 58 60 28
|
||||
3 28 60 30
|
||||
3 60 62 30
|
||||
3 30 62 32
|
||||
3 62 64 32
|
||||
3 32 64 31
|
||||
3 64 63 31
|
||||
3 31 63 29
|
||||
3 63 61 29
|
||||
3 29 61 27
|
||||
3 61 59 27
|
||||
3 27 59 25
|
||||
3 59 57 25
|
||||
3 25 57 23
|
||||
3 57 55 23
|
||||
3 23 55 21
|
||||
3 55 53 21
|
||||
3 21 53 19
|
||||
3 53 51 19
|
||||
3 19 51 17
|
||||
3 51 48 17
|
||||
3 17 48 15
|
||||
3 48 46 15
|
||||
3 15 46 13
|
||||
3 46 44 13
|
||||
3 13 44 11
|
||||
3 44 42 11
|
||||
3 11 42 9
|
||||
3 42 40 9
|
||||
3 9 40 7
|
||||
3 40 38 7
|
||||
3 7 38 5
|
||||
3 38 36 5
|
||||
3 5 36 3
|
||||
3 36 34 3
|
||||
3 3 34 1
|
||||
3 34 33 1
|
||||
3 1 33 0
|
||||
3 33 35 0
|
||||
3 0 35 2
|
||||
3 35 37 2
|
||||
3 2 37 4
|
||||
3 37 39 4
|
||||
3 4 39 6
|
||||
3 39 41 6
|
||||
3 6 41 8
|
||||
3 8 41 10
|
||||
3 41 43 10
|
||||
3 10 43 12
|
||||
3 43 45 12
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,486 @@
|
|||
OFF
|
||||
162 320 0
|
||||
|
||||
0 0.3 0
|
||||
0.17888 0.13416 0
|
||||
0.05528 0.13416 -0.42535
|
||||
-0.14472 0.13416 -0.26285
|
||||
-0.14472 0.13416 0.26285
|
||||
0.05528 0.13416 0.42535
|
||||
0.14472 -0.13416 -0.26285
|
||||
-0.05528 -0.13416 -0.42535
|
||||
-0.17888 -0.13416 0
|
||||
-0.05528 -0.13416 0.42535
|
||||
0.14472 -0.13416 0.26285
|
||||
0 -0.3 0
|
||||
0.05466 0.28857 0
|
||||
0.10514 0.25521 0
|
||||
0.14764 0.20238 0
|
||||
0.016888 0.28857 -0.12995
|
||||
0.0325 0.25521 -0.25
|
||||
0.04562 0.20238 -0.351
|
||||
-0.04422 0.28857 -0.0803
|
||||
-0.08506 0.25521 -0.1545
|
||||
-0.11944 0.20238 -0.21695
|
||||
-0.04422 0.28857 0.0803
|
||||
-0.08506 0.25521 0.1545
|
||||
-0.11944 0.20238 0.21695
|
||||
0.016888 0.28857 0.12995
|
||||
0.0325 0.25521 0.25
|
||||
0.04562 0.20238 0.351
|
||||
0.16452 0.15171 -0.12995
|
||||
0.13764 0.15771 -0.25
|
||||
0.10028 0.15171 -0.351
|
||||
0.0014062 0.15171 -0.43135
|
||||
-0.05258 0.15771 -0.4045
|
||||
-0.10256 0.15171 -0.3469
|
||||
-0.16366 0.15171 -0.13665
|
||||
-0.17014 0.15771 0
|
||||
-0.16366 0.15171 0.13665
|
||||
-0.10256 0.15171 0.3469
|
||||
-0.05258 0.15771 0.4045
|
||||
0.0014064 0.15171 0.43135
|
||||
0.10028 0.15171 0.351
|
||||
0.13764 0.15771 0.25
|
||||
0.16452 0.15171 0.12995
|
||||
0.19186 0.06975 -0.0803
|
||||
0.19022 0 -0.1545
|
||||
0.1741 -0.06975 -0.21695
|
||||
0.02874 0.06975 -0.48095
|
||||
0 0 -0.5
|
||||
-0.02874 -0.06975 -0.48095
|
||||
-0.1741 0.06975 -0.21695
|
||||
-0.19022 0 -0.1545
|
||||
-0.19186 -0.06975 -0.0803
|
||||
-0.13632 0.06975 0.3469
|
||||
-0.11756 0 0.4045
|
||||
-0.08984 -0.06975 0.43135
|
||||
0.08984 0.06975 0.43135
|
||||
0.11756 0 0.4045
|
||||
0.13632 -0.06975 0.3469
|
||||
0.19186 0.06975 0.0803
|
||||
0.19022 0 0.1545
|
||||
0.1741 -0.06975 0.21695
|
||||
0.08984 0.06975 -0.43135
|
||||
0.11756 0 -0.4045
|
||||
0.13632 -0.06975 -0.3469
|
||||
-0.13632 0.06975 -0.3469
|
||||
-0.11756 0 -0.4045
|
||||
-0.08984 -0.06975 -0.43135
|
||||
-0.1741 0.06975 0.21695
|
||||
-0.19022 0 0.1545
|
||||
-0.19186 -0.06975 0.0803
|
||||
0.02874 0.06975 0.48095
|
||||
0 0 0.5
|
||||
-0.02874 -0.06975 0.48095
|
||||
0.10256 -0.15171 -0.3469
|
||||
0.05258 -0.15771 -0.4045
|
||||
-0.0014062 -0.15171 -0.43135
|
||||
-0.10028 -0.15171 -0.351
|
||||
-0.13764 -0.15771 -0.25
|
||||
-0.16452 -0.15171 -0.12995
|
||||
-0.16452 -0.15171 0.12995
|
||||
-0.13764 -0.15771 0.25
|
||||
-0.10028 -0.15171 0.351
|
||||
-0.0014062 -0.15171 0.43135
|
||||
0.05258 -0.15771 0.4045
|
||||
0.10256 -0.15171 0.3469
|
||||
0.16366 -0.15171 0.13665
|
||||
0.17014 -0.15771 0
|
||||
0.16366 -0.15171 -0.13665
|
||||
0.04422 -0.28857 -0.0803
|
||||
0.08506 -0.25521 -0.1545
|
||||
0.11944 -0.20238 -0.21695
|
||||
-0.016888 -0.28857 -0.12995
|
||||
-0.0325 -0.25521 -0.25
|
||||
-0.04562 -0.20238 -0.351
|
||||
-0.05466 -0.28857 0
|
||||
-0.10514 -0.25521 0
|
||||
-0.14764 -0.20238 0
|
||||
-0.016888 -0.28857 0.12995
|
||||
-0.0325 -0.25521 0.25
|
||||
-0.04562 -0.20238 0.351
|
||||
0.04422 -0.28857 0.0803
|
||||
0.08506 -0.25521 0.1545
|
||||
0.11944 -0.20238 0.21695
|
||||
0.07236 0.26832 -0.13145
|
||||
0.12358 0.22212 -0.13235
|
||||
0.08854 0.22212 -0.2529
|
||||
-0.02764 0.26832 -0.21265
|
||||
-0.012158 0.22212 -0.3347
|
||||
-0.06886 0.22212 -0.28865
|
||||
-0.08944 0.26832 0
|
||||
-0.13108 0.22212 -0.0745
|
||||
-0.13108 0.22212 0.0745
|
||||
-0.02764 0.26832 0.21265
|
||||
-0.06886 0.22212 0.28865
|
||||
-0.012158 0.22212 0.3347
|
||||
0.07236 0.26832 0.13145
|
||||
0.08854 0.22212 0.2529
|
||||
0.12358 0.22212 0.13235
|
||||
0.2 0 0
|
||||
0.19108 -0.07653 0.0745
|
||||
0.19108 -0.07653 -0.0745
|
||||
0.0618 0 -0.47555
|
||||
0.0874 -0.07653 -0.43125
|
||||
0.0307 -0.07653 -0.47735
|
||||
-0.1618 0 -0.2939
|
||||
-0.13706 -0.07653 -0.34105
|
||||
-0.1721 -0.07653 -0.2205
|
||||
-0.1618 0 0.2939
|
||||
-0.1721 -0.07653 0.2205
|
||||
-0.13706 -0.07653 0.34105
|
||||
0.0618 0 0.47555
|
||||
0.0307 -0.07653 0.47735
|
||||
0.0874 -0.07653 0.43125
|
||||
0.1618 0 -0.2939
|
||||
0.13706 0.07653 -0.34105
|
||||
0.1721 0.07653 -0.2205
|
||||
-0.0618 0 -0.47555
|
||||
-0.0874 0.07653 -0.43125
|
||||
-0.0307 0.07653 -0.47735
|
||||
-0.2 0 0
|
||||
-0.19108 0.07653 0.0745
|
||||
-0.19108 0.07653 -0.0745
|
||||
-0.0618 0 0.47555
|
||||
-0.0307 0.07653 0.47735
|
||||
-0.0874 0.07653 0.43125
|
||||
0.1618 0 0.2939
|
||||
0.1721 0.07653 0.2205
|
||||
0.13706 0.07653 0.34105
|
||||
0.02764 -0.26832 -0.21265
|
||||
0.012158 -0.22212 -0.3347
|
||||
0.06886 -0.22212 -0.28865
|
||||
-0.07236 -0.26832 -0.13145
|
||||
-0.12358 -0.22212 -0.13235
|
||||
-0.08854 -0.22212 -0.2529
|
||||
-0.07236 -0.26832 0.13145
|
||||
-0.08854 -0.22212 0.2529
|
||||
-0.12358 -0.22212 0.13235
|
||||
0.02764 -0.26832 0.21265
|
||||
0.06886 -0.22212 0.28865
|
||||
0.012158 -0.22212 0.3347
|
||||
0.08944 -0.26832 0
|
||||
0.13108 -0.22212 -0.0745
|
||||
0.13108 -0.22212 0.0745
|
||||
3 0 12 15
|
||||
3 12 13 102
|
||||
3 12 102 15
|
||||
3 15 102 16
|
||||
3 13 14 103
|
||||
3 13 103 102
|
||||
3 102 103 104
|
||||
3 102 104 16
|
||||
3 16 104 17
|
||||
3 14 1 27
|
||||
3 14 27 103
|
||||
3 103 27 28
|
||||
3 103 28 104
|
||||
3 104 28 29
|
||||
3 104 29 17
|
||||
3 17 29 2
|
||||
3 0 15 18
|
||||
3 15 16 105
|
||||
3 15 105 18
|
||||
3 18 105 19
|
||||
3 16 17 106
|
||||
3 16 106 105
|
||||
3 105 106 107
|
||||
3 105 107 19
|
||||
3 19 107 20
|
||||
3 17 2 30
|
||||
3 17 30 106
|
||||
3 106 30 31
|
||||
3 106 31 107
|
||||
3 107 31 32
|
||||
3 107 32 20
|
||||
3 20 32 3
|
||||
3 0 18 21
|
||||
3 18 19 108
|
||||
3 18 108 21
|
||||
3 21 108 22
|
||||
3 19 20 109
|
||||
3 19 109 108
|
||||
3 108 109 110
|
||||
3 108 110 22
|
||||
3 22 110 23
|
||||
3 20 3 33
|
||||
3 20 33 109
|
||||
3 109 33 34
|
||||
3 109 34 110
|
||||
3 110 34 35
|
||||
3 110 35 23
|
||||
3 23 35 4
|
||||
3 0 21 24
|
||||
3 21 22 111
|
||||
3 21 111 24
|
||||
3 24 111 25
|
||||
3 22 23 112
|
||||
3 22 112 111
|
||||
3 111 112 113
|
||||
3 111 113 25
|
||||
3 25 113 26
|
||||
3 23 4 36
|
||||
3 23 36 112
|
||||
3 112 36 37
|
||||
3 112 37 113
|
||||
3 113 37 38
|
||||
3 113 38 26
|
||||
3 26 38 5
|
||||
3 0 24 12
|
||||
3 24 25 114
|
||||
3 24 114 12
|
||||
3 12 114 13
|
||||
3 25 26 115
|
||||
3 25 115 114
|
||||
3 114 115 116
|
||||
3 114 116 13
|
||||
3 13 116 14
|
||||
3 26 5 39
|
||||
3 26 39 115
|
||||
3 115 39 40
|
||||
3 115 40 116
|
||||
3 116 40 41
|
||||
3 116 41 14
|
||||
3 14 41 1
|
||||
3 1 57 42
|
||||
3 57 58 117
|
||||
3 57 117 42
|
||||
3 42 117 43
|
||||
3 58 59 118
|
||||
3 58 118 117
|
||||
3 117 118 119
|
||||
3 117 119 43
|
||||
3 43 119 44
|
||||
3 59 10 84
|
||||
3 59 84 118
|
||||
3 118 84 85
|
||||
3 118 85 119
|
||||
3 119 85 86
|
||||
3 119 86 44
|
||||
3 44 86 6
|
||||
3 2 60 45
|
||||
3 60 61 120
|
||||
3 60 120 45
|
||||
3 45 120 46
|
||||
3 61 62 121
|
||||
3 61 121 120
|
||||
3 120 121 122
|
||||
3 120 122 46
|
||||
3 46 122 47
|
||||
3 62 6 72
|
||||
3 62 72 121
|
||||
3 121 72 73
|
||||
3 121 73 122
|
||||
3 122 73 74
|
||||
3 122 74 47
|
||||
3 47 74 7
|
||||
3 3 63 48
|
||||
3 63 64 123
|
||||
3 63 123 48
|
||||
3 48 123 49
|
||||
3 64 65 124
|
||||
3 64 124 123
|
||||
3 123 124 125
|
||||
3 123 125 49
|
||||
3 49 125 50
|
||||
3 65 7 75
|
||||
3 65 75 124
|
||||
3 124 75 76
|
||||
3 124 76 125
|
||||
3 125 76 77
|
||||
3 125 77 50
|
||||
3 50 77 8
|
||||
3 4 66 51
|
||||
3 66 67 126
|
||||
3 66 126 51
|
||||
3 51 126 52
|
||||
3 67 68 127
|
||||
3 67 127 126
|
||||
3 126 127 128
|
||||
3 126 128 52
|
||||
3 52 128 53
|
||||
3 68 8 78
|
||||
3 68 78 127
|
||||
3 127 78 79
|
||||
3 127 79 128
|
||||
3 128 79 80
|
||||
3 128 80 53
|
||||
3 53 80 9
|
||||
3 5 69 54
|
||||
3 69 70 129
|
||||
3 69 129 54
|
||||
3 54 129 55
|
||||
3 70 71 130
|
||||
3 70 130 129
|
||||
3 129 130 131
|
||||
3 129 131 55
|
||||
3 55 131 56
|
||||
3 71 9 81
|
||||
3 71 81 130
|
||||
3 130 81 82
|
||||
3 130 82 131
|
||||
3 131 82 83
|
||||
3 131 83 56
|
||||
3 56 83 10
|
||||
3 6 62 44
|
||||
3 62 61 132
|
||||
3 62 132 44
|
||||
3 44 132 43
|
||||
3 61 60 133
|
||||
3 61 133 132
|
||||
3 132 133 134
|
||||
3 132 134 43
|
||||
3 43 134 42
|
||||
3 60 2 29
|
||||
3 60 29 133
|
||||
3 133 29 28
|
||||
3 133 28 134
|
||||
3 134 28 27
|
||||
3 134 27 42
|
||||
3 42 27 1
|
||||
3 7 65 47
|
||||
3 65 64 135
|
||||
3 65 135 47
|
||||
3 47 135 46
|
||||
3 64 63 136
|
||||
3 64 136 135
|
||||
3 135 136 137
|
||||
3 135 137 46
|
||||
3 46 137 45
|
||||
3 63 3 32
|
||||
3 63 32 136
|
||||
3 136 32 31
|
||||
3 136 31 137
|
||||
3 137 31 30
|
||||
3 137 30 45
|
||||
3 45 30 2
|
||||
3 8 68 50
|
||||
3 68 67 138
|
||||
3 68 138 50
|
||||
3 50 138 49
|
||||
3 67 66 139
|
||||
3 67 139 138
|
||||
3 138 139 140
|
||||
3 138 140 49
|
||||
3 49 140 48
|
||||
3 66 4 35
|
||||
3 66 35 139
|
||||
3 139 35 34
|
||||
3 139 34 140
|
||||
3 140 34 33
|
||||
3 140 33 48
|
||||
3 48 33 3
|
||||
3 9 71 53
|
||||
3 71 70 141
|
||||
3 71 141 53
|
||||
3 53 141 52
|
||||
3 70 69 142
|
||||
3 70 142 141
|
||||
3 141 142 143
|
||||
3 141 143 52
|
||||
3 52 143 51
|
||||
3 69 5 38
|
||||
3 69 38 142
|
||||
3 142 38 37
|
||||
3 142 37 143
|
||||
3 143 37 36
|
||||
3 143 36 51
|
||||
3 51 36 4
|
||||
3 10 59 56
|
||||
3 59 58 144
|
||||
3 59 144 56
|
||||
3 56 144 55
|
||||
3 58 57 145
|
||||
3 58 145 144
|
||||
3 144 145 146
|
||||
3 144 146 55
|
||||
3 55 146 54
|
||||
3 57 1 41
|
||||
3 57 41 145
|
||||
3 145 41 40
|
||||
3 145 40 146
|
||||
3 146 40 39
|
||||
3 146 39 54
|
||||
3 54 39 5
|
||||
3 11 90 87
|
||||
3 90 91 147
|
||||
3 90 147 87
|
||||
3 87 147 88
|
||||
3 91 92 148
|
||||
3 91 148 147
|
||||
3 147 148 149
|
||||
3 147 149 88
|
||||
3 88 149 89
|
||||
3 92 7 74
|
||||
3 92 74 148
|
||||
3 148 74 73
|
||||
3 148 73 149
|
||||
3 149 73 72
|
||||
3 149 72 89
|
||||
3 89 72 6
|
||||
3 11 93 90
|
||||
3 93 94 150
|
||||
3 93 150 90
|
||||
3 90 150 91
|
||||
3 94 95 151
|
||||
3 94 151 150
|
||||
3 150 151 152
|
||||
3 150 152 91
|
||||
3 91 152 92
|
||||
3 95 8 77
|
||||
3 95 77 151
|
||||
3 151 77 76
|
||||
3 151 76 152
|
||||
3 152 76 75
|
||||
3 152 75 92
|
||||
3 92 75 7
|
||||
3 11 96 93
|
||||
3 96 97 153
|
||||
3 96 153 93
|
||||
3 93 153 94
|
||||
3 97 98 154
|
||||
3 97 154 153
|
||||
3 153 154 155
|
||||
3 153 155 94
|
||||
3 94 155 95
|
||||
3 98 9 80
|
||||
3 98 80 154
|
||||
3 154 80 79
|
||||
3 154 79 155
|
||||
3 155 79 78
|
||||
3 155 78 95
|
||||
3 95 78 8
|
||||
3 11 99 96
|
||||
3 99 100 156
|
||||
3 99 156 96
|
||||
3 96 156 97
|
||||
3 100 101 157
|
||||
3 100 157 156
|
||||
3 156 157 158
|
||||
3 156 158 97
|
||||
3 97 158 98
|
||||
3 101 10 83
|
||||
3 101 83 157
|
||||
3 157 83 82
|
||||
3 157 82 158
|
||||
3 158 82 81
|
||||
3 158 81 98
|
||||
3 98 81 9
|
||||
3 11 87 99
|
||||
3 87 88 159
|
||||
3 87 159 99
|
||||
3 99 159 100
|
||||
3 88 89 160
|
||||
3 88 160 159
|
||||
3 159 160 161
|
||||
3 159 161 100
|
||||
3 100 161 101
|
||||
3 89 6 86
|
||||
3 89 86 160
|
||||
3 160 86 85
|
||||
3 160 85 161
|
||||
3 161 85 84
|
||||
3 161 84 101
|
||||
3 101 84 10
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,671 @@
|
|||
OFF
|
||||
221 446 0
|
||||
|
||||
0.18987 0.5 0.0145757
|
||||
0.18987 -0.5 0.0145757
|
||||
0.160511 -0.5 0.0325677
|
||||
0.160511 0.5 0.0325677
|
||||
0.128697 -0.5 0.0457447
|
||||
0.128697 0.5 0.0457447
|
||||
0.0952137 -0.5 0.0537838
|
||||
0.0952137 0.5 0.0537838
|
||||
0.0608858 -0.5 0.0564848
|
||||
0.0608858 0.5 0.0564848
|
||||
0.0265575 -0.5 0.0537838
|
||||
0.0265575 0.5 0.0537838
|
||||
-0.0069256 -0.5 0.0457447
|
||||
-0.0069256 0.5 0.0457447
|
||||
-0.038739 -0.5 0.0325677
|
||||
-0.038739 0.5 0.0325677
|
||||
-0.0680987 -0.5 0.0145757
|
||||
-0.0680987 0.5 0.0145757
|
||||
-0.0942827 -0.5 -0.00778743
|
||||
-0.0942827 0.5 -0.00778743
|
||||
-0.116646 -0.5 -0.0339725
|
||||
-0.116646 0.5 -0.0339725
|
||||
-0.134639 -0.5 -0.0633324
|
||||
-0.134639 0.5 -0.0633324
|
||||
-0.147815 -0.5 -0.0951457
|
||||
-0.147815 0.5 -0.0951457
|
||||
-0.155855 -0.5 -0.128628
|
||||
-0.155855 0.5 -0.128628
|
||||
-0.158556 -0.5 -0.162956
|
||||
-0.158556 0.5 -0.162956
|
||||
-0.155855 -0.5 -0.197285
|
||||
-0.155855 0.5 -0.197285
|
||||
-0.147815 -0.5 -0.230768
|
||||
-0.147815 0.5 -0.230768
|
||||
-0.134639 -0.5 -0.262581
|
||||
-0.134639 0.5 -0.262581
|
||||
-0.116646 -0.5 -0.291941
|
||||
-0.116646 0.5 -0.291941
|
||||
-0.0942827 -0.5 -0.318125
|
||||
-0.0942827 0.5 -0.318125
|
||||
-0.0680987 -0.5 -0.340488
|
||||
-0.0680987 0.5 -0.340488
|
||||
-0.038739 -0.5 -0.358481
|
||||
-0.038739 0.5 -0.358481
|
||||
-0.0069256 -0.5 -0.371658
|
||||
-0.0069256 0.5 -0.371658
|
||||
0.0265574 -0.5 -0.379697
|
||||
0.0265574 0.5 -0.379697
|
||||
0.0608857 -0.5 -0.382398
|
||||
0.0608857 0.5 -0.382398
|
||||
0.0952137 -0.5 -0.379697
|
||||
0.0952137 0.5 -0.379697
|
||||
0.128696 -0.5 -0.371658
|
||||
0.128696 0.5 -0.371658
|
||||
0.16051 -0.5 -0.358481
|
||||
0.16051 0.5 -0.358481
|
||||
0.18987 -0.5 -0.340488
|
||||
0.18987 0.5 -0.340488
|
||||
0.216054 -0.5 -0.318125
|
||||
0.216054 0.5 -0.318125
|
||||
0.238418 -0.5 -0.291941
|
||||
0.238418 0.5 -0.291941
|
||||
0.25641 -0.5 -0.262581
|
||||
0.25641 0.5 -0.262581
|
||||
0.269587 -0.5 -0.230768
|
||||
0.269587 0.5 -0.230768
|
||||
0.277626 -0.5 -0.197285
|
||||
0.277626 0.5 -0.197285
|
||||
0.280327 -0.5 -0.162956
|
||||
0.280327 0.5 -0.162956
|
||||
0.277626 -0.5 -0.128628
|
||||
0.277626 0.5 -0.128628
|
||||
0.269587 -0.5 -0.0951457
|
||||
0.269587 0.5 -0.0951457
|
||||
0.25641 -0.5 -0.0633324
|
||||
0.25641 0.5 -0.0633324
|
||||
0.238418 -0.5 -0.0339725
|
||||
0.238418 0.5 -0.0339725
|
||||
0.216054 -0.5 -0.00778851
|
||||
0.216054 0.5 -0.00778851
|
||||
0.157965 -0.5 -0.461734
|
||||
0.203507 -0.5 -0.442869
|
||||
0.24554 -0.5 -0.417111
|
||||
0.283026 -0.5 -0.385097
|
||||
0.315041 -0.5 -0.347611
|
||||
0.340798 -0.5 -0.305579
|
||||
0.359662 -0.5 -0.260035
|
||||
0.371171 -0.5 -0.212101
|
||||
0.375039 -0.5 -0.162956
|
||||
0.371171 -0.5 -0.113812
|
||||
0.359662 -0.5 -0.0658783
|
||||
0.340799 -0.5 -0.0203345
|
||||
0.315041 -0.5 0.0216976
|
||||
0.283026 -0.5 0.0591838
|
||||
0.245541 -0.5 0.0911989
|
||||
0.203508 -0.5 0.116956
|
||||
0.157965 -0.5 0.13582
|
||||
0.11003 -0.5 0.147329
|
||||
0.0608858 -0.5 0.151196
|
||||
-0.375039 -0.5 -0.162956
|
||||
0.0608858 -0.5 -0.47711
|
||||
0.11003 -0.5 -0.473241
|
||||
0.203508 0.5 0.116956
|
||||
0.245541 0.5 0.0911989
|
||||
0.283026 0.5 0.0591838
|
||||
0.315041 0.5 0.0216986
|
||||
0.340799 0.5 -0.0203345
|
||||
0.359662 0.5 -0.0658783
|
||||
0.371171 0.5 -0.113812
|
||||
0.375039 0.5 -0.162956
|
||||
0.371171 0.5 -0.212101
|
||||
0.359662 0.5 -0.260035
|
||||
0.340798 0.5 -0.305579
|
||||
0.315041 0.5 -0.347611
|
||||
0.283026 0.5 -0.385097
|
||||
0.24554 0.5 -0.417111
|
||||
0.203507 0.5 -0.442869
|
||||
0.157965 0.5 -0.461734
|
||||
0.11003 0.5 -0.473241
|
||||
0.0608858 0.5 -0.47711
|
||||
-0.375039 0.5 -0.162956
|
||||
0.0608858 0.5 0.151196
|
||||
0.11003 0.5 0.147329
|
||||
0.157965 0.5 0.13582
|
||||
-0.375039 -0.5 -0.47711
|
||||
-0.157078 -0.5 0.151196
|
||||
-0.375039 -0.5 0.151196
|
||||
-0.375039 0.5 -0.47711
|
||||
-0.375039 -0.185847 0.47711
|
||||
-0.157078 -0.185847 0.47711
|
||||
-0.157078 0.5 0.47711
|
||||
-0.375039 0.5 0.47711
|
||||
-0.375039 0.5 0.151196
|
||||
-0.157078 0.5 0.151196
|
||||
-0.375039 -0.185847 0.151196
|
||||
-0.375039 -0.5 0.47711
|
||||
-0.157078 -0.5 0.47711
|
||||
0.0608859 -0.5 0.47711
|
||||
0.0608859 -0.185847 0.47711
|
||||
-0.157078 -0.185847 0.151196
|
||||
0.0608858 -0.185847 0.151196
|
||||
-0.375039 -0.315312 0.400904
|
||||
-0.375039 -0.329311 0.404264
|
||||
-0.375039 -0.343663 0.405393
|
||||
-0.375039 -0.358016 0.404264
|
||||
-0.375039 -0.372015 0.400904
|
||||
-0.375039 -0.385316 0.395395
|
||||
-0.375039 -0.397591 0.387872
|
||||
-0.375039 -0.408538 0.378521
|
||||
-0.375039 -0.417888 0.367575
|
||||
-0.375039 -0.42541 0.355299
|
||||
-0.375039 -0.43092 0.341999
|
||||
-0.375039 -0.434281 0.328
|
||||
-0.375039 -0.43541 0.313648
|
||||
-0.375039 -0.434281 0.299295
|
||||
-0.375039 -0.43092 0.285296
|
||||
-0.375039 -0.42541 0.271996
|
||||
-0.375039 -0.417888 0.25972
|
||||
-0.375039 -0.408538 0.248773
|
||||
-0.375039 -0.397591 0.239422
|
||||
-0.375039 -0.385316 0.2319
|
||||
-0.375039 -0.372015 0.22639
|
||||
-0.375039 -0.358016 0.223031
|
||||
-0.375039 -0.343663 0.221901
|
||||
-0.375039 -0.329311 0.223031
|
||||
-0.375039 -0.315312 0.22639
|
||||
-0.375039 -0.302011 0.2319
|
||||
-0.375039 -0.289736 0.239422
|
||||
-0.375039 -0.278789 0.248773
|
||||
-0.375039 -0.269439 0.25972
|
||||
-0.375039 -0.261916 0.271996
|
||||
-0.375039 -0.256407 0.285296
|
||||
-0.375039 -0.253046 0.299295
|
||||
-0.375039 -0.251917 0.313648
|
||||
-0.375039 -0.253046 0.328
|
||||
-0.375039 -0.256407 0.341999
|
||||
-0.375039 -0.261916 0.355299
|
||||
-0.375039 -0.269439 0.367575
|
||||
-0.375039 -0.278789 0.378521
|
||||
-0.375039 -0.289736 0.387872
|
||||
-0.375039 -0.302011 0.395395
|
||||
0.0608859 -0.302011 0.395395
|
||||
0.0608859 -0.289736 0.387872
|
||||
0.0608859 -0.278789 0.378521
|
||||
0.0608859 -0.269439 0.367575
|
||||
0.0608859 -0.261916 0.355299
|
||||
0.0608859 -0.256407 0.341999
|
||||
0.0608859 -0.253046 0.328
|
||||
0.0608859 -0.251917 0.313648
|
||||
0.0608859 -0.253046 0.299295
|
||||
0.0608859 -0.256407 0.285296
|
||||
0.0608859 -0.261916 0.271996
|
||||
0.0608859 -0.269439 0.25972
|
||||
0.0608859 -0.278789 0.248773
|
||||
0.0608859 -0.289736 0.239422
|
||||
0.0608859 -0.302011 0.2319
|
||||
0.0608859 -0.315312 0.22639
|
||||
0.0608859 -0.329311 0.223031
|
||||
0.0608859 -0.343663 0.221901
|
||||
0.0608859 -0.358016 0.223031
|
||||
0.0608859 -0.372015 0.22639
|
||||
0.0608859 -0.385316 0.2319
|
||||
0.0608859 -0.397591 0.239422
|
||||
0.0608859 -0.408538 0.248773
|
||||
0.0608859 -0.417888 0.25972
|
||||
0.0608859 -0.42541 0.271996
|
||||
0.0608859 -0.43092 0.285296
|
||||
0.0608859 -0.434281 0.299295
|
||||
0.0608859 -0.43541 0.313648
|
||||
0.0608859 -0.434281 0.328
|
||||
0.0608859 -0.43092 0.341999
|
||||
0.0608859 -0.42541 0.355299
|
||||
0.0608859 -0.417888 0.367575
|
||||
0.0608859 -0.408538 0.378521
|
||||
0.0608859 -0.397591 0.387872
|
||||
0.0608859 -0.385316 0.395395
|
||||
0.0608859 -0.372015 0.400904
|
||||
0.0608859 -0.358016 0.404264
|
||||
0.0608859 -0.343663 0.405393
|
||||
0.0608859 -0.329311 0.404264
|
||||
0.0608859 -0.315312 0.400904
|
||||
3 3 0 1
|
||||
3 3 1 2
|
||||
3 5 3 2
|
||||
3 5 2 4
|
||||
3 7 5 4
|
||||
3 7 4 6
|
||||
3 9 7 6
|
||||
3 9 6 8
|
||||
3 11 9 8
|
||||
3 11 8 10
|
||||
3 13 11 10
|
||||
3 13 10 12
|
||||
3 15 13 12
|
||||
3 17 14 16
|
||||
3 19 17 16
|
||||
3 23 21 20
|
||||
3 23 20 22
|
||||
3 25 23 22
|
||||
3 25 22 24
|
||||
3 27 25 24
|
||||
3 27 24 26
|
||||
3 29 27 26
|
||||
3 29 26 28
|
||||
3 31 29 28
|
||||
3 31 28 30
|
||||
3 33 31 30
|
||||
3 33 30 32
|
||||
3 35 33 32
|
||||
3 35 32 34
|
||||
3 37 35 34
|
||||
3 37 34 36
|
||||
3 39 37 36
|
||||
3 39 36 38
|
||||
3 41 39 38
|
||||
3 41 38 40
|
||||
3 43 41 40
|
||||
3 43 40 42
|
||||
3 45 43 42
|
||||
3 45 42 44
|
||||
3 47 45 44
|
||||
3 47 44 46
|
||||
3 49 47 46
|
||||
3 49 46 48
|
||||
3 51 49 48
|
||||
3 51 48 50
|
||||
3 53 51 50
|
||||
3 53 50 52
|
||||
3 55 53 52
|
||||
3 55 52 54
|
||||
3 57 55 54
|
||||
3 57 54 56
|
||||
3 59 57 56
|
||||
3 59 56 58
|
||||
3 61 59 58
|
||||
3 61 58 60
|
||||
3 63 61 60
|
||||
3 63 60 62
|
||||
3 65 63 62
|
||||
3 65 62 64
|
||||
3 67 65 64
|
||||
3 67 64 66
|
||||
3 69 67 66
|
||||
3 69 66 68
|
||||
3 71 69 68
|
||||
3 71 68 70
|
||||
3 73 71 70
|
||||
3 77 75 74
|
||||
3 77 74 76
|
||||
3 79 77 76
|
||||
3 79 76 78
|
||||
3 0 79 78
|
||||
3 0 78 1
|
||||
3 99 28 26
|
||||
3 30 28 99
|
||||
3 99 26 24
|
||||
3 32 30 99
|
||||
3 99 24 22
|
||||
3 34 32 99
|
||||
3 80 52 101
|
||||
3 83 60 58
|
||||
3 90 70 89
|
||||
3 99 22 20
|
||||
3 36 34 99
|
||||
3 20 126 99
|
||||
3 124 38 36
|
||||
3 10 97 98
|
||||
3 97 8 6
|
||||
3 97 6 4
|
||||
3 96 2 95
|
||||
3 89 70 68
|
||||
3 87 66 64
|
||||
3 101 52 50
|
||||
3 101 50 48
|
||||
3 100 48 46
|
||||
3 120 29 31
|
||||
3 27 29 120
|
||||
3 120 31 33
|
||||
3 25 27 120
|
||||
3 120 33 35
|
||||
3 23 25 120
|
||||
3 123 95 102
|
||||
3 55 115 116
|
||||
3 120 35 37
|
||||
3 103 79 0
|
||||
3 113 59 61
|
||||
3 37 39 127
|
||||
3 19 21 120
|
||||
3 118 49 51
|
||||
3 118 51 53
|
||||
3 118 53 55
|
||||
3 111 61 63
|
||||
3 111 63 65
|
||||
3 123 0 3
|
||||
3 123 3 5
|
||||
3 122 123 5
|
||||
3 122 5 7
|
||||
3 122 7 9
|
||||
3 122 9 11
|
||||
3 122 11 13
|
||||
3 13 133 121
|
||||
3 15 17 133
|
||||
3 133 17 19
|
||||
3 88 109 108
|
||||
3 88 108 89
|
||||
3 87 110 109
|
||||
3 87 109 88
|
||||
3 86 111 110
|
||||
3 86 110 87
|
||||
3 85 112 111
|
||||
3 85 111 86
|
||||
3 84 113 112
|
||||
3 84 112 85
|
||||
3 83 113 84
|
||||
3 82 114 83
|
||||
3 81 116 115
|
||||
3 81 115 82
|
||||
3 80 116 81
|
||||
3 101 118 117
|
||||
3 101 117 80
|
||||
3 100 119 118
|
||||
3 100 118 101
|
||||
3 97 122 121
|
||||
3 96 123 122
|
||||
3 96 122 97
|
||||
3 95 123 96
|
||||
3 92 105 104
|
||||
3 92 104 93
|
||||
3 91 106 105
|
||||
3 91 105 92
|
||||
3 90 107 106
|
||||
3 90 106 91
|
||||
3 89 108 107
|
||||
3 89 107 90
|
||||
3 131 128 129
|
||||
3 131 129 130
|
||||
3 124 127 119
|
||||
3 124 119 100
|
||||
3 120 127 124
|
||||
3 120 124 99
|
||||
3 120 99 126
|
||||
3 120 126 134
|
||||
3 120 134 132
|
||||
3 128 135 136
|
||||
3 128 136 129
|
||||
3 129 136 137
|
||||
3 129 137 138
|
||||
3 121 133 139
|
||||
3 129 139 133
|
||||
3 129 133 130
|
||||
3 130 133 132
|
||||
3 130 132 131
|
||||
3 131 132 134
|
||||
3 172 128 131
|
||||
3 135 126 125
|
||||
3 135 125 136
|
||||
3 167 168 134
|
||||
3 134 168 169
|
||||
3 166 167 134
|
||||
3 134 169 170
|
||||
3 165 166 134
|
||||
3 165 134 126
|
||||
3 164 165 126
|
||||
3 163 164 126
|
||||
3 162 163 126
|
||||
3 161 162 126
|
||||
3 160 161 126
|
||||
3 159 160 126
|
||||
3 158 159 126
|
||||
3 157 158 126
|
||||
3 156 157 126
|
||||
3 134 170 171
|
||||
3 134 171 172
|
||||
3 128 172 173
|
||||
3 128 173 174
|
||||
3 128 174 175
|
||||
3 128 175 176
|
||||
3 128 176 177
|
||||
3 128 177 178
|
||||
3 128 178 179
|
||||
3 128 179 180
|
||||
3 128 180 141
|
||||
3 135 128 141
|
||||
3 135 141 142
|
||||
3 135 142 143
|
||||
3 135 143 144
|
||||
3 135 144 145
|
||||
3 135 145 146
|
||||
3 135 146 147
|
||||
3 135 147 148
|
||||
3 135 148 149
|
||||
3 135 149 150
|
||||
3 135 150 151
|
||||
3 155 156 126
|
||||
3 155 126 135
|
||||
3 154 155 135
|
||||
3 153 154 135
|
||||
3 152 153 135
|
||||
3 135 151 152
|
||||
3 136 125 98
|
||||
3 136 98 137
|
||||
3 202 203 98
|
||||
3 98 203 204
|
||||
3 201 202 98
|
||||
3 98 204 205
|
||||
3 200 201 98
|
||||
3 200 98 140
|
||||
3 199 200 140
|
||||
3 198 199 140
|
||||
3 197 198 140
|
||||
3 196 197 140
|
||||
3 195 196 140
|
||||
3 194 195 140
|
||||
3 193 194 140
|
||||
3 192 193 140
|
||||
3 191 192 140
|
||||
3 98 205 206
|
||||
3 137 98 206
|
||||
3 137 206 207
|
||||
3 137 207 208
|
||||
3 137 208 209
|
||||
3 137 209 210
|
||||
3 137 210 211
|
||||
3 137 211 212
|
||||
3 137 212 213
|
||||
3 137 213 214
|
||||
3 137 214 215
|
||||
3 137 215 216
|
||||
3 138 137 216
|
||||
3 138 216 217
|
||||
3 138 217 218
|
||||
3 138 218 219
|
||||
3 138 219 220
|
||||
3 138 220 181
|
||||
3 138 181 182
|
||||
3 138 182 183
|
||||
3 138 183 184
|
||||
3 138 184 185
|
||||
3 138 185 186
|
||||
3 190 191 140
|
||||
3 190 140 138
|
||||
3 189 190 138
|
||||
3 188 189 138
|
||||
3 187 188 138
|
||||
3 138 186 187
|
||||
3 138 140 139
|
||||
3 138 139 129
|
||||
3 184 183 178
|
||||
3 184 178 177
|
||||
3 183 182 179
|
||||
3 183 179 178
|
||||
3 182 181 180
|
||||
3 182 180 179
|
||||
3 181 220 141
|
||||
3 181 141 180
|
||||
3 220 219 142
|
||||
3 220 142 141
|
||||
3 219 218 143
|
||||
3 219 143 142
|
||||
3 218 217 144
|
||||
3 218 144 143
|
||||
3 217 216 145
|
||||
3 217 145 144
|
||||
3 216 215 146
|
||||
3 216 146 145
|
||||
3 215 214 147
|
||||
3 215 147 146
|
||||
3 214 213 148
|
||||
3 214 148 147
|
||||
3 213 212 149
|
||||
3 213 149 148
|
||||
3 212 211 150
|
||||
3 212 150 149
|
||||
3 211 210 151
|
||||
3 211 151 150
|
||||
3 210 209 152
|
||||
3 210 152 151
|
||||
3 209 208 153
|
||||
3 209 153 152
|
||||
3 208 207 154
|
||||
3 208 154 153
|
||||
3 207 206 155
|
||||
3 207 155 154
|
||||
3 206 205 156
|
||||
3 206 156 155
|
||||
3 205 204 157
|
||||
3 205 157 156
|
||||
3 204 203 158
|
||||
3 204 158 157
|
||||
3 203 202 159
|
||||
3 203 159 158
|
||||
3 202 201 160
|
||||
3 202 160 159
|
||||
3 201 200 161
|
||||
3 201 161 160
|
||||
3 200 199 162
|
||||
3 200 162 161
|
||||
3 199 198 163
|
||||
3 199 163 162
|
||||
3 198 197 164
|
||||
3 198 164 163
|
||||
3 197 196 165
|
||||
3 197 165 164
|
||||
3 196 195 166
|
||||
3 196 166 165
|
||||
3 195 194 167
|
||||
3 195 167 166
|
||||
3 194 193 168
|
||||
3 194 168 167
|
||||
3 193 192 169
|
||||
3 193 169 168
|
||||
3 192 191 170
|
||||
3 192 170 169
|
||||
3 191 190 171
|
||||
3 191 171 170
|
||||
3 190 189 172
|
||||
3 190 172 171
|
||||
3 189 188 173
|
||||
3 189 173 172
|
||||
3 188 187 174
|
||||
3 188 174 173
|
||||
3 187 186 175
|
||||
3 187 175 174
|
||||
3 186 185 176
|
||||
3 186 176 175
|
||||
3 185 184 177
|
||||
3 185 177 176
|
||||
3 139 140 121
|
||||
3 97 121 140
|
||||
3 115 55 57
|
||||
3 115 57 59
|
||||
3 113 83 114
|
||||
3 59 113 114
|
||||
3 114 82 115
|
||||
3 114 115 59
|
||||
3 117 118 55
|
||||
3 116 80 117
|
||||
3 116 117 55
|
||||
3 132 133 19
|
||||
3 127 41 43
|
||||
3 39 41 127
|
||||
3 105 75 77
|
||||
3 105 77 79
|
||||
3 103 93 104
|
||||
3 79 103 104
|
||||
3 104 105 79
|
||||
3 106 73 75
|
||||
3 65 67 110
|
||||
3 61 111 112
|
||||
3 112 113 61
|
||||
3 110 67 69
|
||||
3 69 71 109
|
||||
3 109 110 69
|
||||
3 108 109 71
|
||||
3 71 73 107
|
||||
3 106 107 73
|
||||
3 75 105 106
|
||||
3 13 15 133
|
||||
3 121 122 13
|
||||
3 102 103 0
|
||||
3 0 123 102
|
||||
3 45 47 119
|
||||
3 49 118 119
|
||||
3 47 49 119
|
||||
3 127 43 45
|
||||
3 45 119 127
|
||||
3 140 98 97
|
||||
3 125 16 14
|
||||
3 14 12 98
|
||||
3 15 12 14
|
||||
3 127 120 37
|
||||
3 110 111 65
|
||||
3 107 108 71
|
||||
3 98 125 14
|
||||
3 131 134 172
|
||||
3 94 93 103
|
||||
3 94 102 95
|
||||
3 95 1 94
|
||||
3 93 1 78
|
||||
3 1 93 94
|
||||
3 1 95 2
|
||||
3 4 96 97
|
||||
3 2 96 4
|
||||
3 78 92 93
|
||||
3 92 78 76
|
||||
3 91 76 74
|
||||
3 74 90 91
|
||||
3 88 68 66
|
||||
3 86 64 62
|
||||
3 85 62 60
|
||||
3 85 60 84
|
||||
3 82 58 56
|
||||
3 81 56 54
|
||||
3 80 54 52
|
||||
3 124 36 99
|
||||
3 10 98 12
|
||||
3 60 83 84
|
||||
3 46 124 100
|
||||
3 44 124 46
|
||||
3 42 124 44
|
||||
3 40 124 42
|
||||
3 38 124 40
|
||||
3 97 10 8
|
||||
3 66 87 88
|
||||
3 48 100 101
|
||||
3 102 94 103
|
||||
3 76 91 92
|
||||
3 72 74 75
|
||||
3 68 88 89
|
||||
3 64 86 87
|
||||
3 62 85 86
|
||||
3 58 82 83
|
||||
3 56 81 82
|
||||
3 54 80 81
|
||||
3 126 16 125
|
||||
3 17 15 14
|
||||
3 120 132 19
|
||||
3 21 19 20
|
||||
3 23 120 21
|
||||
3 16 18 19
|
||||
3 19 18 20
|
||||
3 20 18 126
|
||||
3 16 126 18
|
||||
3 90 74 72
|
||||
3 73 70 72
|
||||
3 72 70 90
|
||||
3 72 75 73
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
25034
Surface_mesh_simplification/test/Surface_mesh_simplification/data/lion-head.off
Executable file
25034
Surface_mesh_simplification/test/Surface_mesh_simplification/data/lion-head.off
Executable file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,484 @@
|
|||
OFF
|
||||
160 320 0
|
||||
|
||||
0.170625 -0.5 -1.40397e-007
|
||||
0.168523 -0.5 -0.0266916
|
||||
0.162273 -0.5 -0.052726
|
||||
0.152027 -0.5 -0.077462
|
||||
0.138038 -0.5 -0.100291
|
||||
0.12065 -0.5 -0.12065
|
||||
0.10029 -0.5 -0.138038
|
||||
0.0774619 -0.5 -0.152028
|
||||
0.0527258 -0.5 -0.162274
|
||||
0.0266915 -0.5 -0.168525
|
||||
-5.55112e-017 -0.5 -0.170625
|
||||
-0.0266915 -0.5 -0.168525
|
||||
-0.0527258 -0.5 -0.162274
|
||||
-0.0774619 -0.5 -0.152028
|
||||
-0.10029 -0.5 -0.138038
|
||||
-0.12065 -0.5 -0.12065
|
||||
-0.138039 -0.5 -0.100291
|
||||
-0.152028 -0.5 -0.077462
|
||||
-0.162274 -0.5 -0.052726
|
||||
-0.168523 -0.5 -0.0266916
|
||||
-0.170625 -0.5 -1.40397e-007
|
||||
-0.168523 -0.5 0.0266914
|
||||
-0.162274 -0.5 0.0527257
|
||||
-0.152028 -0.5 0.0774617
|
||||
-0.138039 -0.5 0.10029
|
||||
-0.12065 -0.5 0.12065
|
||||
-0.10029 -0.5 0.138037
|
||||
-0.0774619 -0.5 0.152028
|
||||
-0.0527258 -0.5 0.162273
|
||||
-0.0266915 -0.5 0.168523
|
||||
-5.55112e-017 -0.5 0.170624
|
||||
0.0266916 -0.5 0.168523
|
||||
0.052726 -0.5 0.162273
|
||||
0.0774619 -0.5 0.152028
|
||||
0.100291 -0.5 0.138037
|
||||
0.12065 -0.5 0.12065
|
||||
0.138038 -0.5 0.10029
|
||||
0.152027 -0.5 0.0774617
|
||||
0.162274 -0.5 0.0527257
|
||||
0.168523 -0.5 0.0266914
|
||||
0.170625 0.5 -1.40397e-007
|
||||
0.168523 0.5 -0.0266916
|
||||
0.162273 0.5 -0.052726
|
||||
0.152027 0.5 -0.077462
|
||||
0.138038 0.5 -0.100291
|
||||
0.12065 0.5 -0.12065
|
||||
0.10029 0.5 -0.138038
|
||||
0.0774619 0.5 -0.152028
|
||||
0.0527258 0.5 -0.162274
|
||||
0.0266915 0.5 -0.168525
|
||||
-5.55112e-017 0.5 -0.170625
|
||||
-0.0266915 0.5 -0.168525
|
||||
-0.0527258 0.5 -0.162274
|
||||
-0.0774619 0.5 -0.152028
|
||||
-0.10029 0.5 -0.138038
|
||||
-0.12065 0.5 -0.12065
|
||||
-0.138039 0.5 -0.100291
|
||||
-0.152028 0.5 -0.077462
|
||||
-0.162274 0.5 -0.052726
|
||||
-0.168523 0.5 -0.0266916
|
||||
-0.170625 0.5 -1.40397e-007
|
||||
-0.168523 0.5 0.0266914
|
||||
-0.162274 0.5 0.0527257
|
||||
-0.152028 0.5 0.0774617
|
||||
-0.138039 0.5 0.10029
|
||||
-0.12065 0.5 0.12065
|
||||
-0.10029 0.5 0.138037
|
||||
-0.0774619 0.5 0.152028
|
||||
-0.0527258 0.5 0.162273
|
||||
-0.0266915 0.5 0.168523
|
||||
-5.55112e-017 0.5 0.170624
|
||||
0.0266916 0.5 0.168523
|
||||
0.052726 0.5 0.162273
|
||||
0.0774619 0.5 0.152028
|
||||
0.100291 0.5 0.138037
|
||||
0.12065 0.5 0.12065
|
||||
0.138038 0.5 0.10029
|
||||
0.152027 0.5 0.0774617
|
||||
0.162274 0.5 0.0527257
|
||||
0.168523 0.5 0.0266914
|
||||
0.311022 0.5 -1.40397e-007
|
||||
0.307192 0.5 -0.0486547
|
||||
0.295799 0.5 -0.0961111
|
||||
0.277122 0.5 -0.141201
|
||||
0.251622 0.5 -0.182814
|
||||
0.219925 0.5 -0.219925
|
||||
0.182814 0.5 -0.251622
|
||||
0.141201 0.5 -0.277122
|
||||
0.096111 0.5 -0.295799
|
||||
0.0486546 0.5 -0.307192
|
||||
-5.55112e-017 0.5 -0.311022
|
||||
-0.0486546 0.5 -0.307192
|
||||
-0.096111 0.5 -0.295799
|
||||
-0.1412 0.5 -0.277122
|
||||
-0.182814 0.5 -0.251622
|
||||
-0.219925 0.5 -0.219925
|
||||
-0.251622 0.5 -0.182814
|
||||
-0.277122 0.5 -0.141201
|
||||
-0.295799 0.5 -0.0961111
|
||||
-0.307192 0.5 -0.0486547
|
||||
-0.311022 0.5 -1.40397e-007
|
||||
-0.307192 0.5 0.0486544
|
||||
-0.295799 0.5 0.0961109
|
||||
-0.277122 0.5 0.1412
|
||||
-0.251622 0.5 0.182814
|
||||
-0.219925 0.5 0.219925
|
||||
-0.182814 0.5 0.251622
|
||||
-0.1412 0.5 0.277122
|
||||
-0.096111 0.5 0.295799
|
||||
-0.0486546 0.5 0.307192
|
||||
-5.55112e-017 0.5 0.311022
|
||||
0.0486546 0.5 0.307192
|
||||
0.0961111 0.5 0.295799
|
||||
0.141201 0.5 0.277122
|
||||
0.182814 0.5 0.251622
|
||||
0.219925 0.5 0.219925
|
||||
0.251622 0.5 0.182814
|
||||
0.277122 0.5 0.1412
|
||||
0.295799 0.5 0.0961109
|
||||
0.307192 0.5 0.0486543
|
||||
0.311022 -0.5 -1.40397e-007
|
||||
0.307192 -0.5 -0.0486547
|
||||
0.295799 -0.5 -0.0961111
|
||||
0.277122 -0.5 -0.141201
|
||||
0.251622 -0.5 -0.182814
|
||||
0.219925 -0.5 -0.219925
|
||||
0.182814 -0.5 -0.251622
|
||||
0.141201 -0.5 -0.277122
|
||||
0.096111 -0.5 -0.295799
|
||||
0.0486546 -0.5 -0.307192
|
||||
-5.55112e-017 -0.5 -0.311022
|
||||
-0.0486546 -0.5 -0.307192
|
||||
-0.096111 -0.5 -0.295799
|
||||
-0.1412 -0.5 -0.277122
|
||||
-0.182814 -0.5 -0.251622
|
||||
-0.219925 -0.5 -0.219925
|
||||
-0.251622 -0.5 -0.182814
|
||||
-0.277122 -0.5 -0.141201
|
||||
-0.295799 -0.5 -0.0961111
|
||||
-0.307192 -0.5 -0.0486547
|
||||
-0.311022 -0.5 -1.40397e-007
|
||||
-0.307192 -0.5 0.0486544
|
||||
-0.295799 -0.5 0.0961109
|
||||
-0.277122 -0.5 0.1412
|
||||
-0.251622 -0.5 0.182814
|
||||
-0.219925 -0.5 0.219925
|
||||
-0.182814 -0.5 0.251622
|
||||
-0.1412 -0.5 0.277122
|
||||
-0.096111 -0.5 0.295799
|
||||
-0.0486546 -0.5 0.307192
|
||||
-5.55112e-017 -0.5 0.311022
|
||||
0.0486546 -0.5 0.307192
|
||||
0.0961111 -0.5 0.295799
|
||||
0.141201 -0.5 0.277122
|
||||
0.182814 -0.5 0.251622
|
||||
0.219925 -0.5 0.219925
|
||||
0.251622 -0.5 0.182814
|
||||
0.277122 -0.5 0.1412
|
||||
0.295799 -0.5 0.0961109
|
||||
0.307192 -0.5 0.0486543
|
||||
3 0 41 1
|
||||
3 0 40 41
|
||||
3 1 42 2
|
||||
3 1 41 42
|
||||
3 2 43 3
|
||||
3 2 42 43
|
||||
3 3 44 4
|
||||
3 3 43 44
|
||||
3 4 45 5
|
||||
3 4 44 45
|
||||
3 5 46 6
|
||||
3 5 45 46
|
||||
3 6 47 7
|
||||
3 6 46 47
|
||||
3 7 48 8
|
||||
3 7 47 48
|
||||
3 8 49 9
|
||||
3 8 48 49
|
||||
3 9 50 10
|
||||
3 9 49 50
|
||||
3 10 51 11
|
||||
3 10 50 51
|
||||
3 11 52 12
|
||||
3 11 51 52
|
||||
3 12 53 13
|
||||
3 12 52 53
|
||||
3 13 54 14
|
||||
3 13 53 54
|
||||
3 14 55 15
|
||||
3 14 54 55
|
||||
3 15 56 16
|
||||
3 15 55 56
|
||||
3 16 57 17
|
||||
3 16 56 57
|
||||
3 17 58 18
|
||||
3 17 57 58
|
||||
3 18 59 19
|
||||
3 18 58 59
|
||||
3 19 60 20
|
||||
3 19 59 60
|
||||
3 20 61 21
|
||||
3 20 60 61
|
||||
3 21 62 22
|
||||
3 21 61 62
|
||||
3 22 63 23
|
||||
3 22 62 63
|
||||
3 23 64 24
|
||||
3 23 63 64
|
||||
3 24 65 25
|
||||
3 24 64 65
|
||||
3 25 66 26
|
||||
3 25 65 66
|
||||
3 26 67 27
|
||||
3 26 66 67
|
||||
3 27 68 28
|
||||
3 27 67 68
|
||||
3 28 69 29
|
||||
3 28 68 69
|
||||
3 29 70 30
|
||||
3 29 69 70
|
||||
3 30 71 31
|
||||
3 30 70 71
|
||||
3 31 72 32
|
||||
3 31 71 72
|
||||
3 32 73 33
|
||||
3 32 72 73
|
||||
3 33 74 34
|
||||
3 33 73 74
|
||||
3 34 75 35
|
||||
3 34 74 75
|
||||
3 35 76 36
|
||||
3 35 75 76
|
||||
3 36 77 37
|
||||
3 36 76 77
|
||||
3 37 78 38
|
||||
3 37 77 78
|
||||
3 38 79 39
|
||||
3 38 78 79
|
||||
3 39 40 0
|
||||
3 39 79 40
|
||||
3 40 81 41
|
||||
3 40 80 81
|
||||
3 41 82 42
|
||||
3 41 81 82
|
||||
3 42 83 43
|
||||
3 42 82 83
|
||||
3 43 84 44
|
||||
3 43 83 84
|
||||
3 44 85 45
|
||||
3 44 84 85
|
||||
3 45 86 46
|
||||
3 45 85 86
|
||||
3 46 87 47
|
||||
3 46 86 87
|
||||
3 47 88 48
|
||||
3 47 87 88
|
||||
3 48 89 49
|
||||
3 48 88 89
|
||||
3 49 90 50
|
||||
3 49 89 90
|
||||
3 50 91 51
|
||||
3 50 90 91
|
||||
3 51 92 52
|
||||
3 51 91 92
|
||||
3 52 93 53
|
||||
3 52 92 93
|
||||
3 53 94 54
|
||||
3 53 93 94
|
||||
3 54 95 55
|
||||
3 54 94 95
|
||||
3 55 96 56
|
||||
3 55 95 96
|
||||
3 56 97 57
|
||||
3 56 96 97
|
||||
3 57 98 58
|
||||
3 57 97 98
|
||||
3 58 99 59
|
||||
3 58 98 99
|
||||
3 59 100 60
|
||||
3 59 99 100
|
||||
3 60 101 61
|
||||
3 60 100 101
|
||||
3 61 102 62
|
||||
3 61 101 102
|
||||
3 62 103 63
|
||||
3 62 102 103
|
||||
3 63 104 64
|
||||
3 63 103 104
|
||||
3 64 105 65
|
||||
3 64 104 105
|
||||
3 65 106 66
|
||||
3 65 105 106
|
||||
3 66 107 67
|
||||
3 66 106 107
|
||||
3 67 108 68
|
||||
3 67 107 108
|
||||
3 68 109 69
|
||||
3 68 108 109
|
||||
3 69 110 70
|
||||
3 69 109 110
|
||||
3 70 111 71
|
||||
3 70 110 111
|
||||
3 71 112 72
|
||||
3 71 111 112
|
||||
3 72 113 73
|
||||
3 72 112 113
|
||||
3 73 114 74
|
||||
3 73 113 114
|
||||
3 74 115 75
|
||||
3 74 114 115
|
||||
3 75 116 76
|
||||
3 75 115 116
|
||||
3 76 117 77
|
||||
3 76 116 117
|
||||
3 77 118 78
|
||||
3 77 117 118
|
||||
3 78 119 79
|
||||
3 78 118 119
|
||||
3 79 80 40
|
||||
3 79 119 80
|
||||
3 80 121 81
|
||||
3 80 120 121
|
||||
3 81 122 82
|
||||
3 81 121 122
|
||||
3 82 123 83
|
||||
3 82 122 123
|
||||
3 83 124 84
|
||||
3 83 123 124
|
||||
3 84 125 85
|
||||
3 84 124 125
|
||||
3 85 126 86
|
||||
3 85 125 126
|
||||
3 86 127 87
|
||||
3 86 126 127
|
||||
3 87 128 88
|
||||
3 87 127 128
|
||||
3 88 129 89
|
||||
3 88 128 129
|
||||
3 89 130 90
|
||||
3 89 129 130
|
||||
3 90 131 91
|
||||
3 90 130 131
|
||||
3 91 132 92
|
||||
3 91 131 132
|
||||
3 92 133 93
|
||||
3 92 132 133
|
||||
3 93 134 94
|
||||
3 93 133 134
|
||||
3 94 135 95
|
||||
3 94 134 135
|
||||
3 95 136 96
|
||||
3 95 135 136
|
||||
3 96 137 97
|
||||
3 96 136 137
|
||||
3 97 138 98
|
||||
3 97 137 138
|
||||
3 98 139 99
|
||||
3 98 138 139
|
||||
3 99 140 100
|
||||
3 99 139 140
|
||||
3 100 141 101
|
||||
3 100 140 141
|
||||
3 101 142 102
|
||||
3 101 141 142
|
||||
3 102 143 103
|
||||
3 102 142 143
|
||||
3 103 144 104
|
||||
3 103 143 144
|
||||
3 104 145 105
|
||||
3 104 144 145
|
||||
3 105 146 106
|
||||
3 105 145 146
|
||||
3 106 147 107
|
||||
3 106 146 147
|
||||
3 107 148 108
|
||||
3 107 147 148
|
||||
3 108 149 109
|
||||
3 108 148 149
|
||||
3 109 150 110
|
||||
3 109 149 150
|
||||
3 110 151 111
|
||||
3 110 150 151
|
||||
3 111 152 112
|
||||
3 111 151 152
|
||||
3 112 153 113
|
||||
3 112 152 153
|
||||
3 113 154 114
|
||||
3 113 153 154
|
||||
3 114 155 115
|
||||
3 114 154 155
|
||||
3 115 156 116
|
||||
3 115 155 156
|
||||
3 116 157 117
|
||||
3 116 156 157
|
||||
3 117 158 118
|
||||
3 117 157 158
|
||||
3 118 159 119
|
||||
3 118 158 159
|
||||
3 119 120 80
|
||||
3 119 159 120
|
||||
3 120 1 121
|
||||
3 120 0 1
|
||||
3 121 2 122
|
||||
3 121 1 2
|
||||
3 122 3 123
|
||||
3 122 2 3
|
||||
3 123 4 124
|
||||
3 123 3 4
|
||||
3 124 5 125
|
||||
3 124 4 5
|
||||
3 125 6 126
|
||||
3 125 5 6
|
||||
3 126 7 127
|
||||
3 126 6 7
|
||||
3 127 8 128
|
||||
3 127 7 8
|
||||
3 128 9 129
|
||||
3 128 8 9
|
||||
3 129 10 130
|
||||
3 129 9 10
|
||||
3 130 11 131
|
||||
3 130 10 11
|
||||
3 131 12 132
|
||||
3 131 11 12
|
||||
3 132 13 133
|
||||
3 132 12 13
|
||||
3 133 14 134
|
||||
3 133 13 14
|
||||
3 134 15 135
|
||||
3 134 14 15
|
||||
3 135 16 136
|
||||
3 135 15 16
|
||||
3 136 17 137
|
||||
3 136 16 17
|
||||
3 137 18 138
|
||||
3 137 17 18
|
||||
3 138 19 139
|
||||
3 138 18 19
|
||||
3 139 20 140
|
||||
3 139 19 20
|
||||
3 140 21 141
|
||||
3 140 20 21
|
||||
3 141 22 142
|
||||
3 141 21 22
|
||||
3 142 23 143
|
||||
3 142 22 23
|
||||
3 143 24 144
|
||||
3 143 23 24
|
||||
3 144 25 145
|
||||
3 144 24 25
|
||||
3 145 26 146
|
||||
3 145 25 26
|
||||
3 146 27 147
|
||||
3 146 26 27
|
||||
3 147 28 148
|
||||
3 147 27 28
|
||||
3 148 29 149
|
||||
3 148 28 29
|
||||
3 149 30 150
|
||||
3 149 29 30
|
||||
3 150 31 151
|
||||
3 150 30 31
|
||||
3 151 32 152
|
||||
3 151 31 32
|
||||
3 152 33 153
|
||||
3 152 32 33
|
||||
3 153 34 154
|
||||
3 153 33 34
|
||||
3 154 35 155
|
||||
3 154 34 35
|
||||
3 155 36 156
|
||||
3 155 35 36
|
||||
3 156 37 157
|
||||
3 156 36 37
|
||||
3 157 38 158
|
||||
3 157 37 38
|
||||
3 158 39 159
|
||||
3 158 38 39
|
||||
3 159 0 120
|
||||
3 159 39 0
|
||||
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
OFF
|
||||
5 5 0
|
||||
|
||||
-1 -0.5 -0.5
|
||||
-1 -0.5 0.5
|
||||
-1 0.5 0.5
|
||||
-1 0.5 -0.5
|
||||
1 0 0
|
||||
|
||||
3 1 0 4
|
||||
3 2 1 4
|
||||
3 3 2 4
|
||||
3 0 3 4
|
||||
4 0 1 2 3
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,486 @@
|
|||
OFF
|
||||
162 320 0
|
||||
|
||||
0 0.5 0
|
||||
0.4472 0.2236 0
|
||||
0.1382 0.2236 -0.42535
|
||||
-0.3618 0.2236 -0.26285
|
||||
-0.3618 0.2236 0.26285
|
||||
0.1382 0.2236 0.42535
|
||||
0.3618 -0.2236 -0.26285
|
||||
-0.1382 -0.2236 -0.42535
|
||||
-0.4472 -0.2236 0
|
||||
-0.1382 -0.2236 0.42535
|
||||
0.3618 -0.2236 0.26285
|
||||
0 -0.5 0
|
||||
0.13665 0.48095 0
|
||||
0.26285 0.42535 0
|
||||
0.3691 0.3373 0
|
||||
0.04222 0.48095 -0.12995
|
||||
0.08125 0.42535 -0.25
|
||||
0.11405 0.3373 -0.351
|
||||
-0.11055 0.48095 -0.0803
|
||||
-0.21265 0.42535 -0.1545
|
||||
-0.2986 0.3373 -0.21695
|
||||
-0.11055 0.48095 0.0803
|
||||
-0.21265 0.42535 0.1545
|
||||
-0.2986 0.3373 0.21695
|
||||
0.04222 0.48095 0.12995
|
||||
0.08125 0.42535 0.25
|
||||
0.11405 0.3373 0.351
|
||||
0.4113 0.25285 -0.12995
|
||||
0.3441 0.26285 -0.25
|
||||
0.2507 0.25285 -0.351
|
||||
0.0035155 0.25285 -0.43135
|
||||
-0.13145 0.26285 -0.4045
|
||||
-0.2564 0.25285 -0.3469
|
||||
-0.40915 0.25285 -0.13665
|
||||
-0.42535 0.26285 0
|
||||
-0.40915 0.25285 0.13665
|
||||
-0.2564 0.25285 0.3469
|
||||
-0.13145 0.26285 0.4045
|
||||
0.003516 0.25285 0.43135
|
||||
0.2507 0.25285 0.351
|
||||
0.3441 0.26285 0.25
|
||||
0.4113 0.25285 0.12995
|
||||
0.47965 0.11625 -0.0803
|
||||
0.47555 0 -0.1545
|
||||
0.43525 -0.11625 -0.21695
|
||||
0.07185 0.11625 -0.48095
|
||||
0 0 -0.5
|
||||
-0.07185 -0.11625 -0.48095
|
||||
-0.43525 0.11625 -0.21695
|
||||
-0.47555 0 -0.1545
|
||||
-0.47965 -0.11625 -0.0803
|
||||
-0.3408 0.11625 0.3469
|
||||
-0.2939 0 0.4045
|
||||
-0.2246 -0.11625 0.43135
|
||||
0.2246 0.11625 0.43135
|
||||
0.2939 0 0.4045
|
||||
0.3408 -0.11625 0.3469
|
||||
0.47965 0.11625 0.0803
|
||||
0.47555 0 0.1545
|
||||
0.43525 -0.11625 0.21695
|
||||
0.2246 0.11625 -0.43135
|
||||
0.2939 0 -0.4045
|
||||
0.3408 -0.11625 -0.3469
|
||||
-0.3408 0.11625 -0.3469
|
||||
-0.2939 0 -0.4045
|
||||
-0.2246 -0.11625 -0.43135
|
||||
-0.43525 0.11625 0.21695
|
||||
-0.47555 0 0.1545
|
||||
-0.47965 -0.11625 0.0803
|
||||
0.07185 0.11625 0.48095
|
||||
0 0 0.5
|
||||
-0.07185 -0.11625 0.48095
|
||||
0.2564 -0.25285 -0.3469
|
||||
0.13145 -0.26285 -0.4045
|
||||
-0.0035155 -0.25285 -0.43135
|
||||
-0.2507 -0.25285 -0.351
|
||||
-0.3441 -0.26285 -0.25
|
||||
-0.4113 -0.25285 -0.12995
|
||||
-0.4113 -0.25285 0.12995
|
||||
-0.3441 -0.26285 0.25
|
||||
-0.2507 -0.25285 0.351
|
||||
-0.0035155 -0.25285 0.43135
|
||||
0.13145 -0.26285 0.4045
|
||||
0.2564 -0.25285 0.3469
|
||||
0.40915 -0.25285 0.13665
|
||||
0.42535 -0.26285 0
|
||||
0.40915 -0.25285 -0.13665
|
||||
0.11055 -0.48095 -0.0803
|
||||
0.21265 -0.42535 -0.1545
|
||||
0.2986 -0.3373 -0.21695
|
||||
-0.04222 -0.48095 -0.12995
|
||||
-0.08125 -0.42535 -0.25
|
||||
-0.11405 -0.3373 -0.351
|
||||
-0.13665 -0.48095 0
|
||||
-0.26285 -0.42535 0
|
||||
-0.3691 -0.3373 0
|
||||
-0.04222 -0.48095 0.12995
|
||||
-0.08125 -0.42535 0.25
|
||||
-0.11405 -0.3373 0.351
|
||||
0.11055 -0.48095 0.0803
|
||||
0.21265 -0.42535 0.1545
|
||||
0.2986 -0.3373 0.21695
|
||||
0.1809 0.4472 -0.13145
|
||||
0.30895 0.3702 -0.13235
|
||||
0.22135 0.3702 -0.2529
|
||||
-0.0691 0.4472 -0.21265
|
||||
-0.030395 0.3702 -0.3347
|
||||
-0.17215 0.3702 -0.28865
|
||||
-0.2236 0.4472 0
|
||||
-0.3277 0.3702 -0.0745
|
||||
-0.3277 0.3702 0.0745
|
||||
-0.0691 0.4472 0.21265
|
||||
-0.17215 0.3702 0.28865
|
||||
-0.030395 0.3702 0.3347
|
||||
0.1809 0.4472 0.13145
|
||||
0.22135 0.3702 0.2529
|
||||
0.30895 0.3702 0.13235
|
||||
0.5 0 0
|
||||
0.4777 -0.12755 0.0745
|
||||
0.4777 -0.12755 -0.0745
|
||||
0.1545 0 -0.47555
|
||||
0.2185 -0.12755 -0.43125
|
||||
0.07675 -0.12755 -0.47735
|
||||
-0.4045 0 -0.2939
|
||||
-0.34265 -0.12755 -0.34105
|
||||
-0.43025 -0.12755 -0.2205
|
||||
-0.4045 0 0.2939
|
||||
-0.43025 -0.12755 0.2205
|
||||
-0.34265 -0.12755 0.34105
|
||||
0.1545 0 0.47555
|
||||
0.07675 -0.12755 0.47735
|
||||
0.2185 -0.12755 0.43125
|
||||
0.4045 0 -0.2939
|
||||
0.34265 0.12755 -0.34105
|
||||
0.43025 0.12755 -0.2205
|
||||
-0.1545 0 -0.47555
|
||||
-0.2185 0.12755 -0.43125
|
||||
-0.07675 0.12755 -0.47735
|
||||
-0.5 0 0
|
||||
-0.4777 0.12755 0.0745
|
||||
-0.4777 0.12755 -0.0745
|
||||
-0.1545 0 0.47555
|
||||
-0.07675 0.12755 0.47735
|
||||
-0.2185 0.12755 0.43125
|
||||
0.4045 0 0.2939
|
||||
0.43025 0.12755 0.2205
|
||||
0.34265 0.12755 0.34105
|
||||
0.0691 -0.4472 -0.21265
|
||||
0.030395 -0.3702 -0.3347
|
||||
0.17215 -0.3702 -0.28865
|
||||
-0.1809 -0.4472 -0.13145
|
||||
-0.30895 -0.3702 -0.13235
|
||||
-0.22135 -0.3702 -0.2529
|
||||
-0.1809 -0.4472 0.13145
|
||||
-0.22135 -0.3702 0.2529
|
||||
-0.30895 -0.3702 0.13235
|
||||
0.0691 -0.4472 0.21265
|
||||
0.17215 -0.3702 0.28865
|
||||
0.030395 -0.3702 0.3347
|
||||
0.2236 -0.4472 0
|
||||
0.3277 -0.3702 -0.0745
|
||||
0.3277 -0.3702 0.0745
|
||||
3 0 12 15
|
||||
3 12 13 102
|
||||
3 12 102 15
|
||||
3 15 102 16
|
||||
3 13 14 103
|
||||
3 13 103 102
|
||||
3 102 103 104
|
||||
3 102 104 16
|
||||
3 16 104 17
|
||||
3 14 1 27
|
||||
3 14 27 103
|
||||
3 103 27 28
|
||||
3 103 28 104
|
||||
3 104 28 29
|
||||
3 104 29 17
|
||||
3 17 29 2
|
||||
3 0 15 18
|
||||
3 15 16 105
|
||||
3 15 105 18
|
||||
3 18 105 19
|
||||
3 16 17 106
|
||||
3 16 106 105
|
||||
3 105 106 107
|
||||
3 105 107 19
|
||||
3 19 107 20
|
||||
3 17 2 30
|
||||
3 17 30 106
|
||||
3 106 30 31
|
||||
3 106 31 107
|
||||
3 107 31 32
|
||||
3 107 32 20
|
||||
3 20 32 3
|
||||
3 0 18 21
|
||||
3 18 19 108
|
||||
3 18 108 21
|
||||
3 21 108 22
|
||||
3 19 20 109
|
||||
3 19 109 108
|
||||
3 108 109 110
|
||||
3 108 110 22
|
||||
3 22 110 23
|
||||
3 20 3 33
|
||||
3 20 33 109
|
||||
3 109 33 34
|
||||
3 109 34 110
|
||||
3 110 34 35
|
||||
3 110 35 23
|
||||
3 23 35 4
|
||||
3 0 21 24
|
||||
3 21 22 111
|
||||
3 21 111 24
|
||||
3 24 111 25
|
||||
3 22 23 112
|
||||
3 22 112 111
|
||||
3 111 112 113
|
||||
3 111 113 25
|
||||
3 25 113 26
|
||||
3 23 4 36
|
||||
3 23 36 112
|
||||
3 112 36 37
|
||||
3 112 37 113
|
||||
3 113 37 38
|
||||
3 113 38 26
|
||||
3 26 38 5
|
||||
3 0 24 12
|
||||
3 24 25 114
|
||||
3 24 114 12
|
||||
3 12 114 13
|
||||
3 25 26 115
|
||||
3 25 115 114
|
||||
3 114 115 116
|
||||
3 114 116 13
|
||||
3 13 116 14
|
||||
3 26 5 39
|
||||
3 26 39 115
|
||||
3 115 39 40
|
||||
3 115 40 116
|
||||
3 116 40 41
|
||||
3 116 41 14
|
||||
3 14 41 1
|
||||
3 1 57 42
|
||||
3 57 58 117
|
||||
3 57 117 42
|
||||
3 42 117 43
|
||||
3 58 59 118
|
||||
3 58 118 117
|
||||
3 117 118 119
|
||||
3 117 119 43
|
||||
3 43 119 44
|
||||
3 59 10 84
|
||||
3 59 84 118
|
||||
3 118 84 85
|
||||
3 118 85 119
|
||||
3 119 85 86
|
||||
3 119 86 44
|
||||
3 44 86 6
|
||||
3 2 60 45
|
||||
3 60 61 120
|
||||
3 60 120 45
|
||||
3 45 120 46
|
||||
3 61 62 121
|
||||
3 61 121 120
|
||||
3 120 121 122
|
||||
3 120 122 46
|
||||
3 46 122 47
|
||||
3 62 6 72
|
||||
3 62 72 121
|
||||
3 121 72 73
|
||||
3 121 73 122
|
||||
3 122 73 74
|
||||
3 122 74 47
|
||||
3 47 74 7
|
||||
3 3 63 48
|
||||
3 63 64 123
|
||||
3 63 123 48
|
||||
3 48 123 49
|
||||
3 64 65 124
|
||||
3 64 124 123
|
||||
3 123 124 125
|
||||
3 123 125 49
|
||||
3 49 125 50
|
||||
3 65 7 75
|
||||
3 65 75 124
|
||||
3 124 75 76
|
||||
3 124 76 125
|
||||
3 125 76 77
|
||||
3 125 77 50
|
||||
3 50 77 8
|
||||
3 4 66 51
|
||||
3 66 67 126
|
||||
3 66 126 51
|
||||
3 51 126 52
|
||||
3 67 68 127
|
||||
3 67 127 126
|
||||
3 126 127 128
|
||||
3 126 128 52
|
||||
3 52 128 53
|
||||
3 68 8 78
|
||||
3 68 78 127
|
||||
3 127 78 79
|
||||
3 127 79 128
|
||||
3 128 79 80
|
||||
3 128 80 53
|
||||
3 53 80 9
|
||||
3 5 69 54
|
||||
3 69 70 129
|
||||
3 69 129 54
|
||||
3 54 129 55
|
||||
3 70 71 130
|
||||
3 70 130 129
|
||||
3 129 130 131
|
||||
3 129 131 55
|
||||
3 55 131 56
|
||||
3 71 9 81
|
||||
3 71 81 130
|
||||
3 130 81 82
|
||||
3 130 82 131
|
||||
3 131 82 83
|
||||
3 131 83 56
|
||||
3 56 83 10
|
||||
3 6 62 44
|
||||
3 62 61 132
|
||||
3 62 132 44
|
||||
3 44 132 43
|
||||
3 61 60 133
|
||||
3 61 133 132
|
||||
3 132 133 134
|
||||
3 132 134 43
|
||||
3 43 134 42
|
||||
3 60 2 29
|
||||
3 60 29 133
|
||||
3 133 29 28
|
||||
3 133 28 134
|
||||
3 134 28 27
|
||||
3 134 27 42
|
||||
3 42 27 1
|
||||
3 7 65 47
|
||||
3 65 64 135
|
||||
3 65 135 47
|
||||
3 47 135 46
|
||||
3 64 63 136
|
||||
3 64 136 135
|
||||
3 135 136 137
|
||||
3 135 137 46
|
||||
3 46 137 45
|
||||
3 63 3 32
|
||||
3 63 32 136
|
||||
3 136 32 31
|
||||
3 136 31 137
|
||||
3 137 31 30
|
||||
3 137 30 45
|
||||
3 45 30 2
|
||||
3 8 68 50
|
||||
3 68 67 138
|
||||
3 68 138 50
|
||||
3 50 138 49
|
||||
3 67 66 139
|
||||
3 67 139 138
|
||||
3 138 139 140
|
||||
3 138 140 49
|
||||
3 49 140 48
|
||||
3 66 4 35
|
||||
3 66 35 139
|
||||
3 139 35 34
|
||||
3 139 34 140
|
||||
3 140 34 33
|
||||
3 140 33 48
|
||||
3 48 33 3
|
||||
3 9 71 53
|
||||
3 71 70 141
|
||||
3 71 141 53
|
||||
3 53 141 52
|
||||
3 70 69 142
|
||||
3 70 142 141
|
||||
3 141 142 143
|
||||
3 141 143 52
|
||||
3 52 143 51
|
||||
3 69 5 38
|
||||
3 69 38 142
|
||||
3 142 38 37
|
||||
3 142 37 143
|
||||
3 143 37 36
|
||||
3 143 36 51
|
||||
3 51 36 4
|
||||
3 10 59 56
|
||||
3 59 58 144
|
||||
3 59 144 56
|
||||
3 56 144 55
|
||||
3 58 57 145
|
||||
3 58 145 144
|
||||
3 144 145 146
|
||||
3 144 146 55
|
||||
3 55 146 54
|
||||
3 57 1 41
|
||||
3 57 41 145
|
||||
3 145 41 40
|
||||
3 145 40 146
|
||||
3 146 40 39
|
||||
3 146 39 54
|
||||
3 54 39 5
|
||||
3 11 90 87
|
||||
3 90 91 147
|
||||
3 90 147 87
|
||||
3 87 147 88
|
||||
3 91 92 148
|
||||
3 91 148 147
|
||||
3 147 148 149
|
||||
3 147 149 88
|
||||
3 88 149 89
|
||||
3 92 7 74
|
||||
3 92 74 148
|
||||
3 148 74 73
|
||||
3 148 73 149
|
||||
3 149 73 72
|
||||
3 149 72 89
|
||||
3 89 72 6
|
||||
3 11 93 90
|
||||
3 93 94 150
|
||||
3 93 150 90
|
||||
3 90 150 91
|
||||
3 94 95 151
|
||||
3 94 151 150
|
||||
3 150 151 152
|
||||
3 150 152 91
|
||||
3 91 152 92
|
||||
3 95 8 77
|
||||
3 95 77 151
|
||||
3 151 77 76
|
||||
3 151 76 152
|
||||
3 152 76 75
|
||||
3 152 75 92
|
||||
3 92 75 7
|
||||
3 11 96 93
|
||||
3 96 97 153
|
||||
3 96 153 93
|
||||
3 93 153 94
|
||||
3 97 98 154
|
||||
3 97 154 153
|
||||
3 153 154 155
|
||||
3 153 155 94
|
||||
3 94 155 95
|
||||
3 98 9 80
|
||||
3 98 80 154
|
||||
3 154 80 79
|
||||
3 154 79 155
|
||||
3 155 79 78
|
||||
3 155 78 95
|
||||
3 95 78 8
|
||||
3 11 99 96
|
||||
3 99 100 156
|
||||
3 99 156 96
|
||||
3 96 156 97
|
||||
3 100 101 157
|
||||
3 100 157 156
|
||||
3 156 157 158
|
||||
3 156 158 97
|
||||
3 97 158 98
|
||||
3 101 10 83
|
||||
3 101 83 157
|
||||
3 157 83 82
|
||||
3 157 82 158
|
||||
3 158 82 81
|
||||
3 158 81 98
|
||||
3 98 81 9
|
||||
3 11 87 99
|
||||
3 87 88 159
|
||||
3 87 159 99
|
||||
3 99 159 100
|
||||
3 88 89 160
|
||||
3 88 160 159
|
||||
3 159 160 161
|
||||
3 159 161 100
|
||||
3 100 161 101
|
||||
3 89 6 86
|
||||
3 89 86 160
|
||||
3 160 86 85
|
||||
3 160 85 161
|
||||
3 161 85 84
|
||||
3 161 84 101
|
||||
3 101 84 10
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -1,40 +1,42 @@
|
|||
OFF
|
||||
14 24 0
|
||||
-1.000000 -1.000000 -1.000000
|
||||
-1.000000 1.000000 -1.000000
|
||||
1.000000 1.000000 -1.000000
|
||||
1.000000 -1.000000 -1.000000
|
||||
-1.000000 -1.000000 1.000000
|
||||
-1.000000 1.000000 1.000000
|
||||
1.000000 1.000000 1.000000
|
||||
1.000000 -1.000000 1.000000
|
||||
4.000000 0.000000 0.000000
|
||||
0.000000 4.000000 0.000000
|
||||
-4.000000 0.000000 0.000000
|
||||
0.000000 -4.000000 0.000000
|
||||
0.000000 0.000000 4.000000
|
||||
0.000000 0.000000 -4.000000
|
||||
3 0 1 13
|
||||
3 1 2 13
|
||||
3 2 3 13
|
||||
3 3 0 13
|
||||
3 3 2 8
|
||||
3 7 3 8
|
||||
3 6 7 8
|
||||
3 2 6 8
|
||||
3 7 6 12
|
||||
3 4 7 12
|
||||
3 5 4 12
|
||||
3 6 5 12
|
||||
3 4 5 10
|
||||
3 5 1 10
|
||||
3 1 0 10
|
||||
3 0 4 10
|
||||
3 5 6 9
|
||||
3 6 2 9
|
||||
3 2 1 9
|
||||
3 1 5 9
|
||||
3 7 4 11
|
||||
3 3 7 11
|
||||
3 0 3 11
|
||||
3 4 0 11
|
||||
|
||||
-0.125 -0.125 -0.125
|
||||
-0.125 0.125 -0.125
|
||||
0.125 0.125 -0.125
|
||||
0.125 -0.125 -0.125
|
||||
-0.125 -0.125 0.125
|
||||
-0.125 0.125 0.125
|
||||
0.125 0.125 0.125
|
||||
0.125 -0.125 0.125
|
||||
0.5 0 0
|
||||
0 0.5 0
|
||||
-0.5 0 0
|
||||
0 -0.5 0
|
||||
0 0 0.5
|
||||
0 0 -0.5
|
||||
3 0 1 13
|
||||
3 1 2 13
|
||||
3 2 3 13
|
||||
3 3 0 13
|
||||
3 3 2 8
|
||||
3 7 3 8
|
||||
3 6 7 8
|
||||
3 2 6 8
|
||||
3 7 6 12
|
||||
3 4 7 12
|
||||
3 5 4 12
|
||||
3 6 5 12
|
||||
3 4 5 10
|
||||
3 5 1 10
|
||||
3 1 0 10
|
||||
3 0 4 10
|
||||
3 5 6 9
|
||||
3 6 2 9
|
||||
3 2 1 9
|
||||
3 1 5 9
|
||||
3 7 4 11
|
||||
3 3 7 11
|
||||
3 0 3 11
|
||||
3 4 0 11
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,23 @@
|
|||
OFF
|
||||
8 12 0
|
||||
1.0 1.0 -1.0
|
||||
1.0 3.0 -1.0
|
||||
3.0 3.0 -1.0
|
||||
3.0 1.0 -1.0
|
||||
1.0 1.0 1.0
|
||||
1.0 3.0 1.0
|
||||
3.0 3.0 1.0
|
||||
3.0 1.0 1.0
|
||||
3 0 1 3
|
||||
3 3 1 2
|
||||
3 0 4 1
|
||||
3 1 4 5
|
||||
3 3 2 7
|
||||
3 7 2 6
|
||||
3 4 0 3
|
||||
3 7 4 3
|
||||
3 6 4 7
|
||||
3 6 5 4
|
||||
3 1 5 6
|
||||
3 2 1 6
|
||||
|
||||
|
|
@ -0,0 +1,72 @@
|
|||
OFF
|
||||
24 44 0
|
||||
|
||||
-0.462837 0.0205318 -0.140203
|
||||
-0.174333 0.0412215 -0.151981
|
||||
-0.144255 0.368209 -0.146404
|
||||
0.0936504 0.361854 -0.147855
|
||||
0.141347 0.0412215 -0.151981
|
||||
0.450915 -0.165801 -0.163699
|
||||
0.357073 -0.405901 -0.137953
|
||||
0.141347 -0.274458 -0.151981
|
||||
-0.174333 -0.274458 -0.151981
|
||||
-0.461176 -0.217462 -0.108519
|
||||
-0.450778 -0.0217283 0.159384
|
||||
-0.174333 0.0412215 0.163699
|
||||
-0.174333 0.356901 0.163699
|
||||
0.106877 0.34047 0.155338
|
||||
0.141347 0.0412215 0.163699
|
||||
0.452244 -0.184928 0.145632
|
||||
0.379439 -0.433293 0.144635
|
||||
0.141347 -0.274458 0.163699
|
||||
-0.174333 -0.274458 0.163699
|
||||
-0.413695 -0.363559 0.134658
|
||||
-0.5 -0.0816885 0.0513155
|
||||
-0.0364476 -0.274458 0.01209
|
||||
0.5 -0.344 -0.0556357
|
||||
0.00831896 0.433293 0.0305898
|
||||
3 0 1 9
|
||||
3 1 4 8
|
||||
3 1 2 4
|
||||
3 4 5 7
|
||||
3 1 0 11
|
||||
3 2 1 12
|
||||
3 4 3 14
|
||||
3 5 4 15
|
||||
3 7 6 17
|
||||
3 9 8 19
|
||||
3 19 18 10
|
||||
3 18 17 11
|
||||
3 14 13 11
|
||||
3 17 16 14
|
||||
3 8 9 1
|
||||
3 7 8 4
|
||||
3 3 4 2
|
||||
3 6 7 5
|
||||
3 10 11 0
|
||||
3 11 12 1
|
||||
3 13 14 3
|
||||
3 14 15 4
|
||||
3 16 17 6
|
||||
3 18 19 8
|
||||
3 11 10 18
|
||||
3 14 11 17
|
||||
3 12 11 13
|
||||
3 15 14 16
|
||||
3 0 20 10
|
||||
3 9 20 0
|
||||
3 19 20 9
|
||||
3 10 20 19
|
||||
3 7 21 8
|
||||
3 17 21 7
|
||||
3 18 21 17
|
||||
3 8 21 18
|
||||
3 15 22 5
|
||||
3 16 22 15
|
||||
3 6 22 16
|
||||
3 5 22 6
|
||||
3 3 23 13
|
||||
3 2 23 3
|
||||
3 12 23 2
|
||||
3 13 23 12
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -1,65 +0,0 @@
|
|||
# Created by the script cgal_create_makefile
|
||||
# This is the makefile for compiling a CGAL application.
|
||||
|
||||
#---------------------------------------------------------------------#
|
||||
# include platform specific settings
|
||||
#---------------------------------------------------------------------#
|
||||
# Choose the right include file from the <cgalroot>/make directory.
|
||||
|
||||
# CGAL_MAKEFILE = ENTER_YOUR_INCLUDE_MAKEFILE_HERE
|
||||
include $(CGAL_MAKEFILE)
|
||||
|
||||
#---------------------------------------------------------------------#
|
||||
# compiler flags
|
||||
#---------------------------------------------------------------------#
|
||||
|
||||
CXXFLAGS = -I../../include/\
|
||||
-I../../../BGL/include\
|
||||
$(TESTSUITE_CXXFLAGS) \
|
||||
$(EXTRA_FLAGS) \
|
||||
$(CGAL_CXXFLAGS)
|
||||
|
||||
#---------------------------------------------------------------------#
|
||||
# linker flags
|
||||
#---------------------------------------------------------------------#
|
||||
|
||||
LIBPATH = \
|
||||
$(TESTSUITE_LIBPATH) \
|
||||
$(CGAL_LIBPATH)
|
||||
|
||||
LDFLAGS = \
|
||||
$(TESTSUITE_LDFLAGS) \
|
||||
$(CGAL_LDFLAGS)
|
||||
|
||||
#---------------------------------------------------------------------#
|
||||
# target entries
|
||||
#---------------------------------------------------------------------#
|
||||
|
||||
all: test_edge_collapse_Polyhedron_3 \
|
||||
test_MP_strategy \
|
||||
test_LT_strategy \
|
||||
|
||||
test_edge_collapse_Polyhedron_3$(EXE_EXT): test_edge_collapse_Polyhedron_3$(OBJ_EXT)
|
||||
$(CGAL_CXX) $(LIBPATH) $(EXE_OPT)test_edge_collapse_Polyhedron_3 test_edge_collapse_Polyhedron_3$(OBJ_EXT) $(LDFLAGS)
|
||||
|
||||
test_MP_strategy$(EXE_EXT): test_MP_strategy$(OBJ_EXT)
|
||||
$(CGAL_CXX) $(LIBPATH) $(EXE_OPT)test_MP_strategy test_MP_strategy$(OBJ_EXT) $(LDFLAGS)
|
||||
|
||||
test_LT_strategy$(EXE_EXT): test_LT_strategy$(OBJ_EXT)
|
||||
$(CGAL_CXX) $(LIBPATH) $(EXE_OPT)test_LT_strategy test_LT_strategy$(OBJ_EXT) $(LDFLAGS)
|
||||
|
||||
|
||||
clean: test_edge_collapse_Polyhedron_3.clean \
|
||||
test_MP_strategy.clean \
|
||||
test_LT_strategy.clean \
|
||||
|
||||
#---------------------------------------------------------------------#
|
||||
# suffix rules
|
||||
#---------------------------------------------------------------------#
|
||||
|
||||
.C$(OBJ_EXT):
|
||||
$(CGAL_CXX) $(CXXFLAGS) $(OBJ_OPT) $<
|
||||
|
||||
.cpp$(OBJ_EXT):
|
||||
$(CGAL_CXX) $(CXXFLAGS) $(OBJ_OPT) $<
|
||||
|
||||
|
|
@ -1,6 +0,0 @@
|
|||
data/cube.off
|
||||
data/cube_open.off
|
||||
data/genus1.off
|
||||
data/hedra.off
|
||||
data/oct.off
|
||||
data/star.off
|
||||
|
|
@ -1,17 +0,0 @@
|
|||
#define STRATEGY_POLICIES "LT_strategy.cpp"
|
||||
|
||||
#define VISITOR_CLASS "check_audit_edge_collapse_visitor.cpp"
|
||||
|
||||
#define CREATE_VISITOR Visitor lVisitor_(aName.substr(0,aName.find_last_of(".")) + "_LT.audit") ; \
|
||||
Visitor* lVisitor = &lVisitor_ ;
|
||||
|
||||
#define VISITOR_ARGUMENT .visitor(lVisitor)
|
||||
|
||||
#define CGAL_TESTING_SURFACE_MESH_SIMPLIFICATION_USING_EXTENDED_VISITOR
|
||||
|
||||
#include "aux_edge_collapse_test_Polyhedron_3.cpp"
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
return aux_main(argc, argv);
|
||||
}
|
||||
|
|
@ -1,14 +0,0 @@
|
|||
data/cube.off
|
||||
data/cube_open.off
|
||||
data/eight.off
|
||||
data/genus1.off
|
||||
data/hedra.off
|
||||
data/hedra_open.off
|
||||
data/hexagon_open.off
|
||||
data/oct.off
|
||||
data/square_open.off
|
||||
data/star.off
|
||||
data/tetra.off
|
||||
data/tetra_12f.off
|
||||
data/tetra_6f.off
|
||||
data/triangle_open_with_hole.off
|
||||
|
|
@ -1,17 +0,0 @@
|
|||
#define STRATEGY_POLICIES "MP_strategy.cpp"
|
||||
|
||||
#define VISITOR_CLASS "check_audit_edge_collapse_visitor.cpp"
|
||||
|
||||
#define CREATE_VISITOR Visitor lVisitor_(aName.substr(0,aName.find_last_of(".")) + "_MP.audit") ; \
|
||||
Visitor* lVisitor = &lVisitor_ ;
|
||||
|
||||
#define VISITOR_ARGUMENT .visitor(lVisitor)
|
||||
|
||||
#define CGAL_TESTING_SURFACE_MESH_SIMPLIFICATION_USING_EXTENDED_VISITOR
|
||||
|
||||
#include "aux_edge_collapse_test_Polyhedron_3.cpp"
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
return aux_main(argc, argv);
|
||||
}
|
||||
|
|
@ -1,14 +1,476 @@
|
|||
#define STRATEGY_POLICIES "MP_strategy.cpp"
|
||||
// Copyright (c) 2007 GeometryFactory (France).
|
||||
// All rights reserved.
|
||||
//
|
||||
// This file is part of CGAL (www.cgal.org); you may redistribute it under
|
||||
// the terms of the Q Public License version 1.0.
|
||||
// See the file LICENSE.QPL distributed with CGAL.
|
||||
//
|
||||
// Licensees holding a valid commercial license may use this file in
|
||||
// accordance with the commercial license agreement provided with the soNTware.
|
||||
//
|
||||
// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
|
||||
// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
//
|
||||
// $URL$
|
||||
// $Id$
|
||||
//
|
||||
//
|
||||
// Author(s) : Fernando Cacciola <fernando.cacciola@gmail.com>
|
||||
|
||||
#define CREATE_VISITOR
|
||||
#include "basics.h"
|
||||
#include "test_self_intersection.h"
|
||||
|
||||
#define VISITOR_ARGUMENT
|
||||
|
||||
#define CGAL_TESTING_SURFACE_MESH_SIMPLIFICATION
|
||||
|
||||
#include "aux_edge_collapse_test_Polyhedron_3.cpp"
|
||||
|
||||
int main(int argc, char **argv)
|
||||
// This is here only to allow a breakpoint to be placed so I can trace back the problem.
|
||||
void error_handler ( char const* what, char const* expr, char const* file, int line, char const* msg )
|
||||
{
|
||||
return aux_main(argc, argv);
|
||||
cerr << "CGAL error: " << what << " violation!" << endl
|
||||
<< "Expr: " << expr << endl
|
||||
<< "File: " << file << endl
|
||||
<< "Line: " << line << endl;
|
||||
if ( msg != 0)
|
||||
cerr << "Explanation:" << msg << endl;
|
||||
|
||||
throw std::runtime_error(expr);
|
||||
}
|
||||
|
||||
namespace SMS = CGAL::Surface_mesh_simplification ;
|
||||
|
||||
typedef SMS::Edge_profile<Surface> Profile ;
|
||||
|
||||
class Dump_link_builder : public CGAL::Modifier_base<Surface::HalfedgeDS>
|
||||
{
|
||||
map<int,int> mMap ;
|
||||
|
||||
int mVIdx ;
|
||||
|
||||
protected:
|
||||
|
||||
typedef boost::graph_traits<Surface> GraphTraits ;
|
||||
|
||||
typedef GraphTraits::out_edge_iterator out_edge_iterator ;
|
||||
typedef GraphTraits::edge_descriptor edge_descriptor ;
|
||||
typedef GraphTraits::vertex_descriptor vertex_descriptor ;
|
||||
|
||||
typedef CGAL::Polyhedron_incremental_builder_3<Surface::HalfedgeDS> Builder ;
|
||||
|
||||
Dump_link_builder() : mVIdx(0) {}
|
||||
|
||||
void add_vertex( Builder& aBuilder, Vertex_const_handle v )
|
||||
{
|
||||
aBuilder.add_vertex(v->point());
|
||||
mMap.insert( make_pair(v->id(),mVIdx++) );
|
||||
}
|
||||
|
||||
void add_triangle( Builder& aBuilder, Profile::Triangle const& aTri )
|
||||
{
|
||||
aBuilder.begin_facet();
|
||||
aBuilder.add_vertex_to_facet( mMap[aTri.v0->id()] );
|
||||
aBuilder.add_vertex_to_facet( mMap[aTri.v1->id()] );
|
||||
aBuilder.add_vertex_to_facet( mMap[aTri.v2->id()] );
|
||||
aBuilder.end_facet();
|
||||
}
|
||||
};
|
||||
|
||||
class Dump_edge_link_builder : public Dump_link_builder
|
||||
{
|
||||
Profile const& mProfile ;
|
||||
|
||||
|
||||
public:
|
||||
|
||||
Dump_edge_link_builder( Profile const& aProfile ) : mProfile(aProfile) {}
|
||||
|
||||
void operator()( Surface::HalfedgeDS& hds)
|
||||
{
|
||||
Builder B( hds, true);
|
||||
|
||||
B.begin_surface( 2 + mProfile.link().size(), mProfile.triangles().size() );
|
||||
|
||||
this->add_vertex(B,mProfile.v0());
|
||||
this->add_vertex(B,mProfile.v1());
|
||||
|
||||
for ( Profile::vertex_descriptor_vector::const_iterator vit = mProfile.link().begin(); vit != mProfile.link().end(); ++ vit )
|
||||
this->add_vertex(B, *vit );
|
||||
|
||||
for ( Profile::Triangle_vector::const_iterator tit = mProfile.triangles().begin(); tit != mProfile.triangles().end(); ++ tit )
|
||||
this->add_triangle(B,*tit);
|
||||
|
||||
B.end_surface();
|
||||
}
|
||||
};
|
||||
|
||||
class Dump_vertex_link_builder : public Dump_link_builder
|
||||
{
|
||||
Surface* mECM ;
|
||||
Vertex_handle mV ;
|
||||
|
||||
Surface& ecm() { return *mECM ; }
|
||||
|
||||
public:
|
||||
|
||||
Dump_vertex_link_builder( Surface& aECM, Vertex_handle aV) : mECM(&aECM), mV(aV) {}
|
||||
|
||||
void operator()( Surface::HalfedgeDS& hds )
|
||||
{
|
||||
Builder B( hds, true);
|
||||
|
||||
B.begin_surface( 1 + boost::out_degree(mV,ecm()), boost::out_degree(mV,ecm()) );
|
||||
|
||||
this->add_vertex(B,mV);
|
||||
Profile::Triangle_vector triangles ;
|
||||
|
||||
out_edge_iterator eb, ee ;
|
||||
for ( tie(eb,ee) = boost::out_edges(mV,ecm()) ; eb != ee ; ++ eb )
|
||||
{
|
||||
edge_descriptor out_edge1 = *eb ;
|
||||
edge_descriptor out_edge2 = out_edge1->opposite()->next();
|
||||
vertex_descriptor v1 = boost::target(out_edge1,ecm());
|
||||
vertex_descriptor v2 = boost::target(out_edge2,ecm());
|
||||
|
||||
this->add_vertex(B,v1);
|
||||
|
||||
triangles.push_back( Profile::Triangle(mV,v1,v2) ) ;
|
||||
}
|
||||
|
||||
for ( Profile::Triangle_vector::const_iterator tit = triangles.begin(); tit != triangles.end(); ++ tit )
|
||||
this->add_triangle(B,*tit);
|
||||
|
||||
B.end_surface();
|
||||
}
|
||||
};
|
||||
|
||||
void dump_edge_link ( Profile const& aProfile, string aName )
|
||||
{
|
||||
Surface lLink ;
|
||||
Dump_edge_link_builder lBuilder(aProfile) ;
|
||||
|
||||
lLink.delegate(lBuilder);
|
||||
|
||||
ofstream out(aName.c_str());
|
||||
out << lLink ;
|
||||
}
|
||||
|
||||
void dump_vertex_link ( Profile const& aProfile, Vertex_handle aV, string aName )
|
||||
{
|
||||
Surface lLink ;
|
||||
Dump_vertex_link_builder lBuilder(aProfile.surface(),aV) ;
|
||||
|
||||
lLink.delegate(lBuilder);
|
||||
|
||||
ofstream out(aName.c_str());
|
||||
out << lLink ;
|
||||
}
|
||||
|
||||
template<class T>
|
||||
string opt2str ( optional<T> const& o )
|
||||
{
|
||||
ostringstream ss ;
|
||||
if ( o )
|
||||
ss << *o ;
|
||||
else ss << "<none>" ;
|
||||
return ss.str();
|
||||
}
|
||||
|
||||
template<class N>
|
||||
string float2str ( N n )
|
||||
{
|
||||
return boost::str( boost::format("%+08.8e") % n ) ;
|
||||
}
|
||||
|
||||
template<class P>
|
||||
string point2str ( P const& p )
|
||||
{
|
||||
return boost::str( boost::format( "(%+08.8e %+08.8e %+08.8e)") % p.x() % p.y() % p.z() ) ;
|
||||
}
|
||||
|
||||
template<class P>
|
||||
string optpoint2str ( optional<P> const& p )
|
||||
{
|
||||
ostringstream ss ;
|
||||
if ( p )
|
||||
ss << point2str(*p);
|
||||
else ss << "<none>" ;
|
||||
|
||||
return ss.str();
|
||||
}
|
||||
template<class N>
|
||||
string optfloat2str ( optional<N> const& n )
|
||||
{
|
||||
ostringstream ss ;
|
||||
if ( n )
|
||||
ss << float2str(*n);
|
||||
else ss << "<none>" ;
|
||||
|
||||
return ss.str();
|
||||
}
|
||||
|
||||
template<class V>
|
||||
string vertex2str ( V const& v )
|
||||
{
|
||||
ostringstream ss ;
|
||||
ss << "[V" << v->id() << point2str(v->point()) << "]" ;
|
||||
return ss.str();
|
||||
}
|
||||
|
||||
template<class E>
|
||||
string edge2str ( E const& e )
|
||||
{
|
||||
ostringstream ss ;
|
||||
ss << "{E" << e->id() << vertex2str(e->opposite()->vertex()) << "->" << vertex2str(e->vertex()) << "}" ;
|
||||
return ss.str();
|
||||
}
|
||||
|
||||
template<class T> ostream& operator << ( ostream& os, optional<T> const& o ) { return os << opt2str(o); }
|
||||
|
||||
string normalize_EOL ( string line )
|
||||
{
|
||||
string::size_type l = line.length();
|
||||
string::size_type d = ( l > 0 && line[l-1] == '\r' ) ? 1 : 0 ;
|
||||
return line.substr(0, l-d ) ;
|
||||
}
|
||||
|
||||
#define REPORT_ERROR(msg) error(__FILE__,__LINE__,0,msg);
|
||||
|
||||
#define REPORT_ERROR2(pred,msg) REPORT_ERROR(msg)
|
||||
|
||||
#define CHECK_MSG(pred,msg) if (!(pred)) REPORT_ERROR2(#pred,msg)
|
||||
|
||||
#define CHECK(pred) CHECK_MSG(pred,string(""))
|
||||
|
||||
#define CHECK_EQUAL(x,y) CHECK_MSG(((x)==(y)), str(format("Assertion failed: %1%(=%2%)==%3%(=%4%)") % (#x) % (x) % (#y) % (y) ) )
|
||||
#define CHECK_NOT_EQUAL(x,y) CHECK_MSG(((x)!=(y)), str(format("Assertion failed: %1%(=%2%)!=%3%(=%4%)") % (#x) % (x) % (#y) % (y) ) )
|
||||
|
||||
class Visitor
|
||||
{
|
||||
|
||||
public :
|
||||
|
||||
void OnStarted( Surface& )
|
||||
{
|
||||
mStep = 0 ;
|
||||
}
|
||||
|
||||
void OnFinished ( Surface& aSurface )
|
||||
{
|
||||
CHECK(aSurface.is_valid());
|
||||
}
|
||||
|
||||
void OnStopConditionReached( Profile const& ) {}
|
||||
|
||||
void OnCollected( Profile const& aProfile, optional<NT> const& aCost )
|
||||
{
|
||||
TRACE( str ( format("Collecting %1% : cost=%2%") % edge2str(aProfile.v0_v1()) % optfloat2str(aCost) ) ) ;
|
||||
}
|
||||
|
||||
void OnSelected( Profile const&, optional<NT> const&, size_t, size_t )
|
||||
{
|
||||
::CGALi::cgal_enable_ecms_trace = mStep == 0 ;
|
||||
}
|
||||
|
||||
void OnCollapsing( Profile const& aProfile, optional<Point> const& aP )
|
||||
{
|
||||
TRACE( str ( format("S %1% - Collapsing %2% : placement=%3%") % mStep % edge2str(aProfile.v0_v1()) % optpoint2str(aP) ) ) ;
|
||||
// if ( mStep == 11 )
|
||||
// dump_edge_link(aProfile,"step-11-before.off");
|
||||
}
|
||||
|
||||
void OnCollapsed( Profile const& aProfile, Vertex_handle aV )
|
||||
{
|
||||
if ( Is_self_intersecting( aProfile.surface() ) )
|
||||
{
|
||||
dump_vertex_link( aProfile, aV, str( format( "step-%1%-after.off" ) % mStep ) ) ;
|
||||
cerr << "Resulting surface self-intersects." << endl ;
|
||||
}
|
||||
|
||||
++ mStep ;
|
||||
}
|
||||
|
||||
void OnNonCollapsable( Profile const& ) {}
|
||||
|
||||
private:
|
||||
|
||||
void error ( char const* file, int line, char const* pred, string msg )
|
||||
{
|
||||
cerr << "ERROR in " << file << " at " << line << endl ;
|
||||
if ( pred )
|
||||
cerr << " Assertion failed: " << pred << endl ;
|
||||
cerr << " " << msg << endl ;
|
||||
|
||||
|
||||
throw runtime_error("");
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
int mStep ;
|
||||
} ;
|
||||
|
||||
bool sWriteResult = false ;
|
||||
bool sUseMP = false ;
|
||||
int sStop = 1 ;
|
||||
|
||||
bool Test ( string aName )
|
||||
{
|
||||
bool rSucceeded = false ;
|
||||
|
||||
try
|
||||
{
|
||||
string off_name = aName ;
|
||||
|
||||
ifstream off_is(off_name.c_str());
|
||||
if ( off_is )
|
||||
{
|
||||
Surface lSurface;
|
||||
off_is >> lSurface ;
|
||||
if ( lSurface.is_valid() )
|
||||
{
|
||||
if ( lSurface.is_pure_triangle() )
|
||||
{
|
||||
cerr << "Processing " << aName << " (" << ( lSurface.size_of_halfedges() / 2 ) << " edges)" << endl ;
|
||||
|
||||
Visitor vis ;
|
||||
|
||||
set_halfedgeds_items_id(lSurface);
|
||||
|
||||
SMS::Count_stop_predicate<Surface> stop(sStop);
|
||||
|
||||
Real_timer t ; t.start();
|
||||
|
||||
if ( sUseMP )
|
||||
{
|
||||
SMS::Edge_length_cost <Surface> cost ;
|
||||
SMS::Midpoint_placement<Surface> placement ;
|
||||
|
||||
edge_collapse(lSurface,stop,get_cost(cost).get_placement(placement).visitor(&vis) );
|
||||
}
|
||||
else
|
||||
{
|
||||
SMS::LindstromTurk_cost <Surface> cost ;
|
||||
SMS::LindstromTurk_placement<Surface> placement ;
|
||||
|
||||
edge_collapse(lSurface,stop,get_cost(cost).get_placement(placement).visitor(&vis) );
|
||||
}
|
||||
|
||||
t.stop();
|
||||
|
||||
rSucceeded = lSurface.is_valid() && lSurface.is_pure_triangle() ;
|
||||
|
||||
cerr << "\r" << aName << ( rSucceeded ? " succeeded" : "FAILED" ) << ". Elapsed time=" << t.time() << " seconds." << endl ;
|
||||
|
||||
if ( sWriteResult )
|
||||
{
|
||||
string out_name = off_name ;
|
||||
out_name.replace( off_name.find_last_of('.'), 15, ".simplified.off");
|
||||
ofstream out(out_name.c_str());
|
||||
out << lSurface ;
|
||||
cerr << "Result written into: " << out_name << endl ;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
cerr << "Surface is not triangulated (has faces with more than 3 sides): " << aName << endl ;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
cerr << "Invalid surface: " << aName << endl ;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
cerr << "Unable to open test file " << aName << endl ;
|
||||
}
|
||||
}
|
||||
catch ( std::exception const& x )
|
||||
{
|
||||
string what(x.what());
|
||||
if ( what.length() > 0 )
|
||||
cerr << "Exception caught: " << what << endl ;
|
||||
}
|
||||
|
||||
|
||||
return rSucceeded ;
|
||||
}
|
||||
|
||||
int main( int argc, char** argv )
|
||||
{
|
||||
set_error_handler (error_handler);
|
||||
set_warning_handler(error_handler);
|
||||
|
||||
cout << setprecision(4);
|
||||
cerr << setprecision(4);
|
||||
|
||||
vector<string> lCases ;
|
||||
|
||||
for ( int i = 1 ; i < argc ; ++i )
|
||||
{
|
||||
|
||||
if ( argv[i][0] == '-' )
|
||||
{
|
||||
switch(argv[i][1])
|
||||
{
|
||||
case 'w': sWriteResult = true ; break ;
|
||||
case 's': sStop = atoi(&argv[i][2]) ; break ;
|
||||
case 'm': sUseMP = true ; break ;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
string c( normalize_EOL( string(argv[i]) ) ) ;
|
||||
string::size_type pos = c.find_last_of(".") ;
|
||||
if ( pos != string::npos )
|
||||
{
|
||||
string ext = c.substr(pos);
|
||||
if ( ext == ".off" )
|
||||
lCases.push_back(c);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( lCases.size() == 0 )
|
||||
{
|
||||
cout << "collapse_edge_test file0 [-w] [-sNUM_EDGES] [-m] file1 ... fileN\n" ;
|
||||
return 1 ;
|
||||
}
|
||||
else
|
||||
{
|
||||
unsigned lOK = 0 ;
|
||||
for ( vector<string>::const_iterator it = lCases.begin(); it != lCases.end() ; ++ it )
|
||||
{
|
||||
if ( Test(*it) )
|
||||
++ lOK ;
|
||||
}
|
||||
|
||||
cout << endl
|
||||
<< lOK << " cases succedded." << endl
|
||||
<< (lCases.size() - lOK ) << " cases failed." << endl ;
|
||||
|
||||
return lOK == lCases.size() ? 0 : 1 ;
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef WHY_DO_THESE_DONT_EXIST_IN_CGAL_UNDER_LINUX
|
||||
namespace CGAL
|
||||
{
|
||||
|
||||
void assertion_fail( const char* expr, const char* file, int line )
|
||||
{
|
||||
assertion_fail(expr,file,line,"");
|
||||
}
|
||||
void precondition_fail( const char* expr, const char* file, int line )
|
||||
{
|
||||
precondition_fail(expr,file,line,"");
|
||||
}
|
||||
void postcondition_fail( const char* expr, const char* file, int line )
|
||||
{
|
||||
postcondition_fail(expr,file,line,"");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
// EOF //
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,117 @@
|
|||
#include "basics.h"
|
||||
|
||||
#include <CGAL/box_intersection_d.h>
|
||||
#include <CGAL/Bbox_3.h>
|
||||
#include <CGAL/intersections.h>
|
||||
|
||||
typedef CGAL::Bbox_3 Bbox;
|
||||
typedef Kernel::Triangle_3 Triangle;
|
||||
typedef Kernel::Segment_3 Segment;
|
||||
typedef CGAL::Box_intersection_d::Box_with_handle_d<double, 3, Facet_const_handle> Box;
|
||||
|
||||
std::vector<Triangle> triangles;
|
||||
|
||||
struct Intersect_facets
|
||||
{
|
||||
void operator()( const Box* b, const Box* c) const
|
||||
{
|
||||
Halfedge_const_handle h = b->handle()->halfedge();
|
||||
// check for shared egde --> no intersection
|
||||
if ( h->opposite()->facet() == c->handle()
|
||||
|| h->next()->opposite()->facet() == c->handle()
|
||||
|| h->next()->next()->opposite()->facet() == c->handle())
|
||||
return;
|
||||
// check for shared vertex --> maybe intersection, maybe not
|
||||
Halfedge_const_handle g = c->handle()->halfedge();
|
||||
Halfedge_const_handle v;
|
||||
if ( h->vertex() == g->vertex())
|
||||
v = g;
|
||||
if ( h->vertex() == g->next()->vertex())
|
||||
v = g->next();
|
||||
if ( h->vertex() == g->next()->next()->vertex())
|
||||
v = g->next()->next();
|
||||
if ( v == Halfedge_const_handle()) {
|
||||
h = h->next();
|
||||
if ( h->vertex() == g->vertex())
|
||||
v = g;
|
||||
if ( h->vertex() == g->next()->vertex())
|
||||
v = g->next();
|
||||
if ( h->vertex() == g->next()->next()->vertex())
|
||||
v = g->next()->next();
|
||||
if ( v == Halfedge_const_handle()) {
|
||||
h = h->next();
|
||||
if ( h->vertex() == g->vertex())
|
||||
v = g;
|
||||
if ( h->vertex() == g->next()->vertex())
|
||||
v = g->next();
|
||||
if ( h->vertex() == g->next()->next()->vertex())
|
||||
v = g->next()->next();
|
||||
}
|
||||
}
|
||||
if ( v != Halfedge_const_handle()) {
|
||||
// found shared vertex:
|
||||
CGAL_assertion( h->vertex() == v->vertex());
|
||||
// geomtric check if the opposite segments intersect the triangles
|
||||
Triangle t1( h->vertex()->point(),
|
||||
h->next()->vertex()->point(),
|
||||
h->next()->next()->vertex()->point());
|
||||
Triangle t2( v->vertex()->point(),
|
||||
v->next()->vertex()->point(),
|
||||
v->next()->next()->vertex()->point());
|
||||
Segment s1( h->next()->vertex()->point(),
|
||||
h->next()->next()->vertex()->point());
|
||||
Segment s2( v->next()->vertex()->point(),
|
||||
v->next()->next()->vertex()->point());
|
||||
if ( CGAL::do_intersect( t1, s2)) {
|
||||
//cerr << "Triangles intersect (t1,s2):\n T1: " << t1
|
||||
// << "\n T2 :" << t2 << endl;
|
||||
triangles.push_back(t1);
|
||||
triangles.push_back(t2);
|
||||
} else if ( CGAL::do_intersect( t2, s1)) {
|
||||
//cerr << "Triangles intersect (t2,s1):\n T1: " << t1
|
||||
// << "\n T2 :" << t2 << endl;
|
||||
triangles.push_back(t1);
|
||||
triangles.push_back(t2);
|
||||
}
|
||||
return;
|
||||
}
|
||||
// check for geometric intersection
|
||||
Triangle t1( h->vertex()->point(),
|
||||
h->next()->vertex()->point(),
|
||||
h->next()->next()->vertex()->point());
|
||||
Triangle t2( g->vertex()->point(),
|
||||
g->next()->vertex()->point(),
|
||||
g->next()->next()->vertex()->point());
|
||||
if ( CGAL::do_intersect( t1, t2)) {
|
||||
//cerr << "Triangles intersect:\n T1: " << t1 << "\n T2 :"
|
||||
// << t2 << endl;
|
||||
triangles.push_back(t1);
|
||||
triangles.push_back(t2);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
bool Is_self_intersecting( Surface const& s )
|
||||
{
|
||||
std::vector<Box> boxes;
|
||||
boxes.reserve( s.size_of_facets());
|
||||
for ( Facet_const_iterator i = s.facets_begin(); i != s.facets_end(); ++i)
|
||||
{
|
||||
boxes.push_back(
|
||||
Box( i->halfedge()->vertex()->point().bbox()
|
||||
+ i->halfedge()->next()->vertex()->point().bbox()
|
||||
+ i->halfedge()->next()->next()->vertex()->point().bbox(),
|
||||
i));
|
||||
}
|
||||
std::vector<const Box*> box_ptr;
|
||||
box_ptr.reserve( s.size_of_facets());
|
||||
for ( std::vector<Box>::iterator j = boxes.begin(); j != boxes.end(); ++j)
|
||||
{
|
||||
box_ptr.push_back( &*j);
|
||||
}
|
||||
CGAL::box_self_intersection_d( box_ptr.begin(), box_ptr.end(),
|
||||
Intersect_facets(), std::ptrdiff_t(2000));
|
||||
|
||||
return triangles.size() > 0 ;
|
||||
}
|
||||
Loading…
Reference in New Issue