[Bf-blender-cvs] [b69a448] alembic_pointcache: Build the archive filename inside the base Reader/Writer constructor from info in the PointCache. This way we can replace it more flexibly with other data streams, packed files, memory buffers etc.

Lukas Tönne noreply at git.blender.org
Thu Oct 16 16:53:58 CEST 2014


Commit: b69a44853103ddbd977c19972359eee9774df9e1
Author: Lukas Tönne
Date:   Thu Dec 5 11:28:51 2013 +0100
Branches: alembic_pointcache
https://developer.blender.org/rBb69a44853103ddbd977c19972359eee9774df9e1

Build the archive filename inside the base Reader/Writer constructor
from info in the PointCache. This way we can replace it more flexibly
with other data streams, packed files, memory buffers etc.

===================================================================

M	source/blender/pointcache/PTC_api.cpp
M	source/blender/pointcache/intern/particles.cpp
M	source/blender/pointcache/intern/particles.h
M	source/blender/pointcache/intern/reader.cpp
M	source/blender/pointcache/intern/reader.h
M	source/blender/pointcache/intern/writer.cpp
M	source/blender/pointcache/intern/writer.h

===================================================================

diff --git a/source/blender/pointcache/PTC_api.cpp b/source/blender/pointcache/PTC_api.cpp
index 46cfa76..7e50cdc 100644
--- a/source/blender/pointcache/PTC_api.cpp
+++ b/source/blender/pointcache/PTC_api.cpp
@@ -25,8 +25,6 @@
 #include "export.h"
 #include "particles.h"
 
-#include "util_path.h"
-
 extern "C" {
 #include "BLI_math.h"
 
@@ -126,9 +124,8 @@ PTCWriter *PTC_writer_particles(Scene *scene, Object *ob, ParticleSystem *psys)
 	PointCache *cache = psys->pointcache;
 	if (!cache)
 		return NULL;
-	std::string filename = ptc_archive_path(cache, &ob->id);
 	
-	PTC::ParticlesWriter *writer = new PTC::ParticlesWriter(filename, scene, ob, psys);
+	PTC::ParticlesWriter *writer = new PTC::ParticlesWriter(scene, ob, psys);
 	return (PTCWriter *)writer;
 }
 
@@ -137,9 +134,8 @@ PTCReader *PTC_reader_particles(Scene *scene, Object *ob, ParticleSystem *psys)
 	PointCache *cache = psys->pointcache;
 	if (!cache)
 		return NULL;
-	std::string filename = ptc_archive_path(cache, &ob->id);
 
-	PTC::ParticlesReader *reader = new PTC::ParticlesReader(filename, scene, ob, psys);
+	PTC::ParticlesReader *reader = new PTC::ParticlesReader(scene, ob, psys);
 	return (PTCReader *)reader;
 }
 
diff --git a/source/blender/pointcache/intern/particles.cpp b/source/blender/pointcache/intern/particles.cpp
index 9b8bbef..0e0668e 100644
--- a/source/blender/pointcache/intern/particles.cpp
+++ b/source/blender/pointcache/intern/particles.cpp
@@ -230,8 +230,8 @@ void OParticlesSchema::init(uint32_t iTsIdx)
 #endif
 
 
-ParticlesWriter::ParticlesWriter(const std::string &filename, Scene *scene, Object *ob, ParticleSystem *psys) :
-    Writer(filename, scene),
+ParticlesWriter::ParticlesWriter(Scene *scene, Object *ob, ParticleSystem *psys) :
+    Writer(scene, &ob->id, psys->pointcache),
     m_ob(ob),
     m_psys(psys)
 {
@@ -272,8 +272,8 @@ void ParticlesWriter::write_sample()
 }
 
 
-ParticlesReader::ParticlesReader(const std::string &filename, Scene *scene, Object *ob, ParticleSystem *psys) :
-    Reader(filename, scene),
+ParticlesReader::ParticlesReader(Scene *scene, Object *ob, ParticleSystem *psys) :
+    Reader(scene, &ob->id, psys->pointcache),
     m_ob(ob),
     m_psys(psys),
     m_totpoint(0)
diff --git a/source/blender/pointcache/intern/particles.h b/source/blender/pointcache/intern/particles.h
index 133d4a9..5512528 100644
--- a/source/blender/pointcache/intern/particles.h
+++ b/source/blender/pointcache/intern/particles.h
@@ -477,7 +477,7 @@ typedef Util::shared_ptr< OParticles > OParticlesPtr;
 
 class ParticlesWriter : public Writer {
 public:
-	ParticlesWriter(const std::string &filename, Scene *scene, Object *ob, ParticleSystem *psys);
+	ParticlesWriter(Scene *scene, Object *ob, ParticleSystem *psys);
 	~ParticlesWriter();
 	
 	void write_sample();
@@ -491,7 +491,7 @@ private:
 
 class ParticlesReader : public Reader {
 public:
-	ParticlesReader(const std::string &filename, Scene *scene, Object *ob, ParticleSystem *psys);
+	ParticlesReader(Scene *scene, Object *ob, ParticleSystem *psys);
 	~ParticlesReader();
 	
 	int totpoint() const { return m_totpoint; }
diff --git a/source/blender/pointcache/intern/reader.cpp b/source/blender/pointcache/intern/reader.cpp
index 4ffd833..b6a8a74 100644
--- a/source/blender/pointcache/intern/reader.cpp
+++ b/source/blender/pointcache/intern/reader.cpp
@@ -20,6 +20,7 @@
 #include <Alembic/Abc/ArchiveInfo.h>
 
 #include "reader.h"
+#include "util_path.h"
 
 extern "C" {
 #include "BLI_fileops.h"
@@ -31,10 +32,11 @@ namespace PTC {
 
 using namespace Abc;
 
-Reader::Reader(const std::string &filename, Scene *scene) :
+Reader::Reader(Scene *scene, ID *id, PointCache *cache) :
     FrameMapper(scene),
     m_scene(scene)
 {
+	std::string filename = ptc_archive_path(cache, id);
 	m_archive = IArchive(AbcCoreHDF5::ReadArchive(), filename, ErrorHandler::kNoisyNoopPolicy);
 }
 
diff --git a/source/blender/pointcache/intern/reader.h b/source/blender/pointcache/intern/reader.h
index ad757c3..8ee27bc 100644
--- a/source/blender/pointcache/intern/reader.h
+++ b/source/blender/pointcache/intern/reader.h
@@ -27,6 +27,8 @@
 #include "util/util_frame_mapper.h"
 #include "util/util_types.h"
 
+struct ID;
+struct PointCache;
 struct Scene;
 
 namespace PTC {
@@ -35,7 +37,7 @@ using namespace Alembic;
 
 class Reader : public FrameMapper {
 public:
-	Reader(const std::string &filename, Scene *scene);
+	Reader(Scene *scene, ID *id, PointCache *cache);
 	virtual ~Reader();
 	
 	void get_frame_range(int &start_frame, int &end_frame);
diff --git a/source/blender/pointcache/intern/writer.cpp b/source/blender/pointcache/intern/writer.cpp
index 972d516..28133a2 100644
--- a/source/blender/pointcache/intern/writer.cpp
+++ b/source/blender/pointcache/intern/writer.cpp
@@ -19,6 +19,7 @@
 #include <Alembic/AbcCoreHDF5/ReadWrite.h>
 
 #include "writer.h"
+#include "util_path.h"
 
 extern "C" {
 #include "BLI_fileops.h"
@@ -39,10 +40,11 @@ static void ensure_directory(const char *filename)
 	BLI_dir_create_recursive(dir);
 }
 
-Writer::Writer(const std::string &filename, Scene *scene) :
+Writer::Writer(Scene *scene, ID *id, PointCache *cache) :
     FrameMapper(scene),
     m_scene(scene)
 {
+	std::string filename = ptc_archive_path(cache, id);
 	ensure_directory(filename.c_str());
 	m_archive = OArchive(AbcCoreHDF5::WriteArchive(), filename, ErrorHandler::kThrowPolicy);
 }
diff --git a/source/blender/pointcache/intern/writer.h b/source/blender/pointcache/intern/writer.h
index 3066e16..b1301e2 100644
--- a/source/blender/pointcache/intern/writer.h
+++ b/source/blender/pointcache/intern/writer.h
@@ -25,6 +25,8 @@
 
 #include "util/util_frame_mapper.h"
 
+struct ID;
+struct PointCache;
 struct Scene;
 
 namespace PTC {
@@ -33,7 +35,7 @@ using namespace Alembic;
 
 class Writer : public FrameMapper {
 public:
-	Writer(const std::string &filename, Scene *scene);
+	Writer(Scene *scene, ID *id, PointCache *cache);
 	virtual ~Writer();
 	
 	uint32_t add_frame_sampling();




More information about the Bf-blender-cvs mailing list