[Bf-blender-cvs] [c505141] fluid-mantaflow: first implementation of liquid API (similar to smoke)

Sebastián Barschkis noreply at git.blender.org
Mon May 23 23:45:44 CEST 2016


Commit: c5051412a153d7ab8d1429aec9cbd0e02759bcfe
Author: Sebastián Barschkis
Date:   Sat May 7 16:35:03 2016 +0200
Branches: fluid-mantaflow
https://developer.blender.org/rBc5051412a153d7ab8d1429aec9cbd0e02759bcfe

first implementation of liquid API (similar to smoke)

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

A	intern/mantaflow/extern/manta_liquid_API.h
A	intern/mantaflow/intern/LIQUID.cpp
A	intern/mantaflow/intern/LIQUID.h
A	intern/mantaflow/intern/manta_liquid_API.cpp

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

diff --git a/intern/mantaflow/extern/manta_liquid_API.h b/intern/mantaflow/extern/manta_liquid_API.h
new file mode 100644
index 0000000..5da61c4
--- /dev/null
+++ b/intern/mantaflow/extern/manta_liquid_API.h
@@ -0,0 +1,45 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version. 
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2016 Blender Foundation.
+ * All rights reserved.
+ *
+ * Contributor(s): Sebastian Barschkis (sebbas)
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file mantaflow/extern/manta_liquid_API.h
+ *  \ingroup mantaflow
+ */
+
+#ifndef MANTA_LIQUID_API_H_
+#define MANTA_LIQUID_API_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct LIQUID;
+struct LIQUID *liquid_init();
+void liquid_step(struct LIQUID *liquid, int currentFrame);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* MANTA_LIQUID_API_H_ */
\ No newline at end of file
diff --git a/intern/mantaflow/intern/LIQUID.cpp b/intern/mantaflow/intern/LIQUID.cpp
new file mode 100644
index 0000000..8834544
--- /dev/null
+++ b/intern/mantaflow/intern/LIQUID.cpp
@@ -0,0 +1,108 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version. 
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2016 Blender Foundation.
+ * All rights reserved.
+ *
+ * Contributor(s): Sebastian Barschkis (sebbas)
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file mantaflow/intern/LIQUID.cpp
+ *  \ingroup mantaflow
+ */
+
+#include <sstream>
+#include <fstream>
+#include <iostream>
+
+#include "LIQUID.h"
+#include "registry.h"
+#include "liquid_script.h"
+
+bool LIQUID::mantaInitialized = false;
+
+LIQUID::LIQUID()
+{
+	std::cout << "LIQUID" << std::endl;
+	
+	// Only start Mantaflow once. No need to start whenever new MANTA objected is allocated
+	if (!mantaInitialized)
+		startMantaflow();
+
+	initSetup();
+}
+
+void LIQUID::initSetup()
+{
+	std::string tmpString =
+		manta_import +
+		liquid_flags +
+		liquid_solver_setup +
+		alloc_liquid +
+		prep_domain +
+		mesh_loading +
+		manta_step +
+		liquid_step;
+//	std::string finalString = parseScript(tmpString, smd);
+	mCommands.clear();
+	mCommands.push_back(tmpString);
+	
+	runPythonString(mCommands);
+}
+
+void LIQUID::step(int currentFrame)
+{
+	// Run manta step and handover current frame number
+	mCommands.clear();
+	std::ostringstream manta_step;
+	manta_step <<  "manta_step(" << currentFrame << ")";
+	mCommands.push_back(manta_step.str());
+	
+	runPythonString(mCommands);
+}
+
+LIQUID::~LIQUID()
+{
+	std::cout << "~LIQUID()" << std::endl;
+}
+
+void LIQUID::runPythonString(std::vector<std::string> commands)
+{
+	PyGILState_STATE gilstate = PyGILState_Ensure();
+	for (std::vector<std::string>::iterator it = commands.begin(); it != commands.end(); ++it) {
+		std::string command = *it;
+		PyRun_SimpleString(command.c_str());
+	}
+	PyGILState_Release(gilstate);
+}
+
+void LIQUID::startMantaflow()
+{
+	std::cout << "Starting mantaflow" << std::endl;
+	std::string filename = "manta_scene.py";
+	std::vector<std::string> fill = std::vector<std::string>();
+	
+	// Initialize extension classes and wrappers
+	srand(0);
+	PyGILState_STATE gilstate = PyGILState_Ensure();
+	Pb::setup(filename, fill);  // Namespace from Mantaflow (registry)
+	PyGILState_Release(gilstate);
+	mantaInitialized = true;
+}
+
diff --git a/intern/mantaflow/intern/LIQUID.h b/intern/mantaflow/intern/LIQUID.h
new file mode 100644
index 0000000..6c32d21
--- /dev/null
+++ b/intern/mantaflow/intern/LIQUID.h
@@ -0,0 +1,55 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version. 
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2016 Blender Foundation.
+ * All rights reserved.
+ *
+ * Contributor(s): Sebastian Barschkis (sebbas)
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file mantaflow/intern/LIQUID.h
+ *  \ingroup mantaflow
+ */
+
+#ifndef LIQUID_H
+#define LIQUID_H
+
+#include <string>
+#include <vector>
+
+#include "Python.h"
+
+struct LIQUID {
+public:
+	LIQUID();
+	virtual ~LIQUID();
+	
+	void step(int currentFrame);
+	
+	static bool mantaInitialized;
+
+private:
+	std::vector<std::string> mCommands;
+
+	void initSetup();
+	void startMantaflow();
+	void runPythonString(std::vector<std::string> commands);
+};
+
+#endif
\ No newline at end of file
diff --git a/intern/mantaflow/intern/manta_liquid_API.cpp b/intern/mantaflow/intern/manta_liquid_API.cpp
new file mode 100644
index 0000000..b697633
--- /dev/null
+++ b/intern/mantaflow/intern/manta_liquid_API.cpp
@@ -0,0 +1,42 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version. 
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2016 Blender Foundation.
+ * All rights reserved.
+ *
+ * Contributor(s): Sebastian Barschkis (sebbas)
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file mantaflow/intern/manta_liquid_API.cpp
+ *  \ingroup mantaflow
+ */
+
+#include "LIQUID.h"
+#include "manta_liquid_API.h"
+
+extern "C" LIQUID *liquid_init()
+{
+	LIQUID *liquid = new LIQUID();
+	return liquid;
+}
+
+extern "C" void liquid_step(LIQUID *liquid, int currentFrame)
+{
+	liquid->step(currentFrame);
+}




More information about the Bf-blender-cvs mailing list