diff options
author | Tamito Kajiyama <rd6t-kjym@asahi-net.or.jp> | 2012-12-29 00:21:05 +0400 |
---|---|---|
committer | Tamito Kajiyama <rd6t-kjym@asahi-net.or.jp> | 2012-12-29 00:21:05 +0400 |
commit | e5791cf48e10ec1336f463b7fccff6b302621eb9 (patch) | |
tree | 58ea33117cc9be35713b6d93ea9d1dfa538ca5bd /source/blender/freestyle/intern/system/PythonInterpreter.h | |
parent | 9fe9c1d6436e400217fdfd8999117a4719efdf68 (diff) |
Another mega (literally :p) code clean-up patch by Bastien Montagne, thanks again!
Diffstat (limited to 'source/blender/freestyle/intern/system/PythonInterpreter.h')
-rw-r--r-- | source/blender/freestyle/intern/system/PythonInterpreter.h | 296 |
1 files changed, 156 insertions, 140 deletions
diff --git a/source/blender/freestyle/intern/system/PythonInterpreter.h b/source/blender/freestyle/intern/system/PythonInterpreter.h index 81e2f70c82e..c6acf502e5e 100644 --- a/source/blender/freestyle/intern/system/PythonInterpreter.h +++ b/source/blender/freestyle/intern/system/PythonInterpreter.h @@ -1,180 +1,196 @@ -// -// Filename : PythonInterpreter.h -// Author(s) : Emmanuel Turquin -// Purpose : Python Interpreter -// Date of creation : 17/04/2003 -// -/////////////////////////////////////////////////////////////////////////////// - - -// -// Copyright (C) : Please refer to the COPYRIGHT file distributed -// with this source distribution. -// -// 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef PYTHON_INTERPRETER_H -# define PYTHON_INTERPRETER_H - -# include <Python.h> -# include <iostream> -# include "StringUtils.h" -# include "Interpreter.h" +/* + * ***** 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) 2010 Blender Foundation. + * All rights reserved. + * + * The Original Code is: all of this file. + * + * Contributor(s): none yet. + * + * ***** END GPL LICENSE BLOCK ***** + */ + +#ifndef __FREESTYLE_PYTHON_INTERPRETER_H__ +#define __FREESTYLE_PYTHON_INTERPRETER_H__ + +/** \file blender/freestyle/intern/system/PythonInterpreter.h + * \ingroup freestyle + * \brief Python Interpreter + * \author Emmanuel Turquin + * \date 17/04/2003 + */ + +#include <iostream> +#include <Python.h> + +#include "StringUtils.h" +#include "Interpreter.h" //soc extern "C" { + #include "MEM_guardedalloc.h" + #include "DNA_text_types.h" -#include "BKE_main.h" + #include "BKE_context.h" #include "BKE_global.h" +#include "BKE_library.h" +#include "BKE_main.h" #include "BKE_report.h" #include "BKE_text.h" -#include "BKE_library.h" + #include "BPY_extern.h" + } class LIB_SYSTEM_EXPORT PythonInterpreter : public Interpreter { - public: - - PythonInterpreter() { - _language = "Python"; - _context = 0; - //Py_Initialize(); - } +public: + PythonInterpreter() + { + _language = "Python"; + _context = 0; + //Py_Initialize(); + } - virtual ~PythonInterpreter() { - //Py_Finalize(); - } + virtual ~PythonInterpreter() + { + //Py_Finalize(); + } - void setContext(bContext *C) { - _context = C; - } + void setContext(bContext *C) + { + _context = C; + } - int interpretFile(const string& filename) { + int interpretFile(const string& filename) + { + initPath(); - initPath(); - - ReportList* reports = CTX_wm_reports(_context); - BKE_reports_clear(reports); - char *fn = const_cast<char*>(filename.c_str()); + ReportList *reports = CTX_wm_reports(_context); + BKE_reports_clear(reports); + char *fn = const_cast<char*>(filename.c_str()); #if 0 - int status = BPY_filepath_exec(_context, fn, reports); + int status = BPY_filepath_exec(_context, fn, reports); #else - int status; - Text *text = BKE_text_load(fn, G.main->name); - if (text) { - status = BPY_text_exec(_context, text, reports, false); - BKE_text_unlink(G.main, text); - BKE_libblock_free(&G.main->text, text); - } else { - BKE_reportf(reports, RPT_ERROR, "Cannot open file: %s", fn); - status = 0; - } + int status; + Text *text = BKE_text_load(fn, G.main->name); + if (text) { + status = BPY_text_exec(_context, text, reports, false); + BKE_text_unlink(G.main, text); + BKE_libblock_free(&G.main->text, text); + } + else { + BKE_reportf(reports, RPT_ERROR, "Cannot open file: %s", fn); + status = 0; + } #endif - if (status != 1) { - cout << "\nError executing Python script from PythonInterpreter::interpretFile" << endl; - cout << "File: " << fn << endl; - cout << "Errors: " << endl; - BKE_reports_print(reports, RPT_ERROR); - return 1; + if (status != 1) { + cout << "\nError executing Python script from PythonInterpreter::interpretFile" << endl; + cout << "File: " << fn << endl; + cout << "Errors: " << endl; + BKE_reports_print(reports, RPT_ERROR); + return 1; + } + + // cleaning up + BKE_reports_clear(reports); + + return 0; } - // cleaning up - BKE_reports_clear(reports); - - return 0; - } + int interpretText(struct Text *text, const string& name) { + initPath(); - int interpretText(struct Text *text, const string& name) { + ReportList *reports = CTX_wm_reports(_context); - initPath(); + BKE_reports_clear(reports); - ReportList* reports = CTX_wm_reports(_context); + if (!BPY_text_exec(_context, text, reports, false)) { + cout << "\nError executing Python script from PythonInterpreter::interpretText" << endl; + cout << "Name: " << name << endl; + cout << "Errors: " << endl; + BKE_reports_print(reports, RPT_ERROR); + return 1; + } - BKE_reports_clear(reports); + BKE_reports_clear(reports); - if (!BPY_text_exec(_context, text, reports, false)) { - cout << "\nError executing Python script from PythonInterpreter::interpretText" << endl; - cout << "Name: " << name << endl; - cout << "Errors: " << endl; - BKE_reports_print(reports, RPT_ERROR); - return 1; + return 0; } - BKE_reports_clear(reports); + struct Options + { + static void setPythonPath(const string& path) + { + _path = path; + } - return 0; - } + static string getPythonPath() + { + return _path; + } + }; - struct Options - { - static void setPythonPath(const string& path) { - _path = path; - } + void reset() + { + Py_Finalize(); + Py_Initialize(); + _initialized = false; + } - static string getPythonPath() { - return _path; - } - }; +private: + bContext *_context; + + void initPath() + { + if (_initialized) + return; + + vector<string> pathnames; + StringUtils::getPathName(_path, "", pathnames); + + struct Text *text = BKE_text_add("tmp_freestyle_initpath.txt"); + string cmd = "import sys\n"; + txt_insert_buf(text, const_cast<char*>(cmd.c_str())); + + for (vector<string>::const_iterator it = pathnames.begin(); it != pathnames.end(); ++it) { + if (!it->empty()) { + cout << "Adding Python path: " << *it << endl; + cmd = "sys.path.append(r\"" + *it + "\")\n"; + txt_insert_buf(text, const_cast<char*>(cmd.c_str())); + } + } - void reset() { - Py_Finalize(); - Py_Initialize(); - _initialized = false; - } + BPY_text_exec(_context, text, NULL, false); -private: + // cleaning up + BKE_text_unlink(G.main, text); + BKE_libblock_free(&G.main->text, text); - bContext* _context; - - void initPath() { - if (_initialized) - return; - - vector<string> pathnames; - StringUtils::getPathName(_path, "", pathnames); - - struct Text *text = BKE_text_add("tmp_freestyle_initpath.txt"); - string cmd = "import sys\n"; - txt_insert_buf(text, const_cast<char*>(cmd.c_str())); - - for (vector<string>::const_iterator it = pathnames.begin(); it != pathnames.end();++it) { - if ( !it->empty() ) { - cout << "Adding Python path: " << *it << endl; - cmd = "sys.path.append(r\"" + *it + "\")\n"; - txt_insert_buf(text, const_cast<char*>(cmd.c_str())); - } + //PyRun_SimpleString("from Freestyle import *"); + _initialized = true; } - - BPY_text_exec(_context, text, NULL, false); - - // cleaning up - BKE_text_unlink(G.main, text); - BKE_libblock_free(&G.main->text, text); - - //PyRun_SimpleString("from Freestyle import *"); - _initialized = true; - } - - static bool _initialized; - static string _path; + + static bool _initialized; + static string _path; }; -#endif // PYTHON_INTERPRETER_H +#endif // __FREESTYLE_PYTHON_INTERPRETER_H__ |