| //######################################################################################################################################### |
| // Copyright 2004, Eran Guendelman. |
| // This file is part of PhysBAM whose distribution is governed by the license contained in the accompanying file PHYSBAM_COPYRIGHT.txt. |
| //######################################################################################################################################### |
| #include "IMPLICIT_SURFACE_LIST.h" |
| #include "LEVELSET_IMPLICIT_SURFACE.h" |
| using namespace PhysBAM; |
| template class IMPLICIT_SURFACE_LIST<float>; |
| template class IMPLICIT_SURFACE_LIST<double>; |
| template void IMPLICIT_SURFACE_LIST<float>::Read<float> (const std::string& prefix, const int frame); |
| template void IMPLICIT_SURFACE_LIST<double>::Read<double> (const std::string& prefix, const int frame); |
| template void IMPLICIT_SURFACE_LIST<double>::Read<float> (const std::string& prefix, const int frame); |
| template void IMPLICIT_SURFACE_LIST<float>::Write<float> (const std::string& prefix, const int frame) const; |
| template void IMPLICIT_SURFACE_LIST<double>::Write<double> (const std::string& prefix, const int frame) const; |
| template void IMPLICIT_SURFACE_LIST<double>::Write<float> (const std::string& prefix, const int frame) const; |
| //##################################################################### |
| // Function Read |
| //##################################################################### |
| template<class T> template<class RW> void IMPLICIT_SURFACE_LIST<T>:: |
| Read (const std::string& prefix, const int frame) |
| { |
| LIST_ARRAY<int> needs_init; |
| DYNAMIC_LIST<IMPLICIT_SURFACE<T>*>::template Read<RW> (prefix, frame, needs_init); |
| FILE_UTILITIES::Read_From_File<RW> (STRING_UTILITIES::string_sprintf ("%skey", prefix.c_str()), levelset_data); |
| |
| for (int i = 1; i <= needs_init.m; i++) |
| { |
| int id = needs_init (i), index = id_to_index_map (id); |
| assert (index); |
| |
| if (levelset_data (id)) |
| { |
| LEVELSET_IMPLICIT_SURFACE<T>* levelset_implicit_surface = 0; |
| FILE_UTILITIES::Create_From_File<RW> (STRING_UTILITIES::string_sprintf ("%s%d.phi", prefix.c_str(), id), levelset_implicit_surface); |
| array (index) = levelset_implicit_surface; |
| } |
| else |
| { |
| NOT_IMPLEMENTED(); |
| } |
| } |
| } |
| //##################################################################### |
| // Function Write |
| //##################################################################### |
| template<class T> template<class RW> void IMPLICIT_SURFACE_LIST<T>:: |
| Write (const std::string& prefix, const int frame) const |
| { |
| levelset_data.Resize_Array (last_unique_id); |
| DYNAMIC_LIST<IMPLICIT_SURFACE<T>*>::template Write<RW> (prefix, frame); |
| |
| for (int i = 1; i <= needs_write.m; i++) |
| { |
| int id = needs_write (i), index = id_to_index_map (id); |
| assert (index); |
| |
| if (array (index)->levelset_data) |
| { |
| levelset_data (id) = true; |
| FILE_UTILITIES::Write_To_File<RW> (STRING_UTILITIES::string_sprintf ("%s%d.phi", prefix.c_str(), id), * (LEVELSET_IMPLICIT_SURFACE<T>*) array (index)); |
| } |
| else |
| { |
| NOT_IMPLEMENTED(); |
| } |
| } |
| |
| needs_write.Reset_Current_Size_To_Zero(); |
| FILE_UTILITIES::Write_To_File<RW> (STRING_UTILITIES::string_sprintf ("%skey", prefix.c_str()), levelset_data); |
| } |
| //##################################################################### |
| // Function Destroy_Element |
| //##################################################################### |
| template<class T> void IMPLICIT_SURFACE_LIST<T>:: |
| Destroy_Element (IMPLICIT_SURFACE<T>*& implicit_surface, const int id) |
| { |
| implicit_surface->Destroy_Data(); |
| delete implicit_surface; |
| implicit_surface = 0; |
| } |
| //##################################################################### |