[Bf-blender-cvs] [3361620d68a] greasepencil-object: GPencil: reorganize code
Antonio Vazquez
noreply at git.blender.org
Sat Jul 25 16:33:27 CEST 2020
Commit: 3361620d68a99ad3bf10e2366f81aa799c89262c
Author: Antonio Vazquez
Date: Thu Jul 23 23:06:13 2020 +0200
Branches: greasepencil-object
https://developer.blender.org/rB3361620d68a99ad3bf10e2366f81aa799c89262c
GPencil: reorganize code
Prepare to have more exporter types
===================================================================
M source/blender/editors/io/io_gpencil.c
M source/blender/io/gpencil/gpencil_io_exporter.h
M source/blender/io/gpencil/intern/gpencil_io_capi.cc
M source/blender/io/gpencil/intern/gpencil_io_svg.cc
M source/blender/io/gpencil/intern/gpencil_io_svg.h
===================================================================
diff --git a/source/blender/editors/io/io_gpencil.c b/source/blender/editors/io/io_gpencil.c
index 6b33b508fbe..a85cfc54167 100644
--- a/source/blender/editors/io/io_gpencil.c
+++ b/source/blender/editors/io/io_gpencil.c
@@ -100,8 +100,6 @@ static int wm_gpencil_export_invoke(bContext *C, wmOperator *op, const wmEvent *
static int wm_gpencil_export_exec(bContext *C, wmOperator *op)
{
- Scene *scene = CTX_data_scene(C);
-
if (!RNA_struct_property_is_set(op->ptr, "filepath")) {
BKE_report(op->reports, RPT_ERROR, "No filename given");
return OPERATOR_CANCELLED;
@@ -112,12 +110,23 @@ static int wm_gpencil_export_exec(bContext *C, wmOperator *op)
Object *ob = CTX_data_active_object(C);
struct GpencilExportParams params = {
- .frame_start = (params.frame_start == INT_MIN) ? SFRA : RNA_int_get(op->ptr, "start"),
- .frame_end = (params.frame_end == INT_MIN) ? EFRA : RNA_int_get(op->ptr, "end"),
+ .C = C,
.ob = ob,
+ .filename = filename,
+ .mode = GP_EXPORT_TO_SVG,
+ .frame_start = RNA_int_get(op->ptr, "start"),
+ .frame_end = RNA_int_get(op->ptr, "end"),
};
+ /* Take some defaults from the scene, if not specified explicitly. */
+ Scene *scene = CTX_data_scene(C);
+ if (params.frame_start == INT_MIN) {
+ params.frame_start = SFRA;
+ }
+ if (params.frame_end == INT_MIN) {
+ params.frame_end = EFRA;
+ }
- gpencil_io_export(C, filename, ¶ms);
+ gpencil_io_export(¶ms);
return OPERATOR_FINISHED;
}
diff --git a/source/blender/io/gpencil/gpencil_io_exporter.h b/source/blender/io/gpencil/gpencil_io_exporter.h
index 1b9e53e2b16..d71cf505a79 100644
--- a/source/blender/io/gpencil/gpencil_io_exporter.h
+++ b/source/blender/io/gpencil/gpencil_io_exporter.h
@@ -26,16 +26,25 @@ extern "C" {
struct Scene;
struct bContext;
+typedef enum eGpencilExport_Modes {
+ GP_EXPORT_TO_SVG = 0,
+} eGpencilExport_Modes;
+
struct GpencilExportParams {
- double frame_start;
- double frame_end;
+ bContext *C;
/** Grease pencil object. */
struct Object *ob;
+ /** Output filename. */
+ char *filename;
+ /** Export mode. */
+ short mode;
+ /** Start frame. */
+ double frame_start;
+ /** End frame. */
+ double frame_end;
};
-bool gpencil_io_export(struct bContext *C,
- const char *filepath,
- const struct GpencilExportParams *params);
+bool gpencil_io_export(const struct GpencilExportParams *params);
#ifdef __cplusplus
}
diff --git a/source/blender/io/gpencil/intern/gpencil_io_capi.cc b/source/blender/io/gpencil/intern/gpencil_io_capi.cc
index 1d90214fa88..9c470f34e34 100644
--- a/source/blender/io/gpencil/intern/gpencil_io_capi.cc
+++ b/source/blender/io/gpencil/intern/gpencil_io_capi.cc
@@ -23,10 +23,10 @@
#include "gpencil_io_svg.h"
-bool gpencil_io_export(bContext *C, const char *filepath, const GpencilExportParams *params)
+bool gpencil_io_export(const GpencilExportParams *params)
{
- blender::io::gpencil::GpencilSVGwriter mywriter;
- mywriter.write(C, filepath, params);
+ blender::io::gpencil::Gpencilwriter mywriter(params);
+ mywriter.export_object();
return true;
}
diff --git a/source/blender/io/gpencil/intern/gpencil_io_svg.cc b/source/blender/io/gpencil/intern/gpencil_io_svg.cc
index cf6e46cad85..cdb8128b1e2 100644
--- a/source/blender/io/gpencil/intern/gpencil_io_svg.cc
+++ b/source/blender/io/gpencil/intern/gpencil_io_svg.cc
@@ -43,32 +43,60 @@ namespace io {
namespace gpencil {
/* Constructor. */
-GpencilSVGwriter::GpencilSVGwriter(void)
+Gpencilwriter::Gpencilwriter(const struct GpencilExportParams *params)
{
- std::cout << "Constructor\n";
+ this->params = GpencilExportParams();
+ this->params.frame_start = params->frame_start;
+ this->params.frame_end = params->frame_end;
+ this->params.ob = params->ob;
+ this->params.C = params->C;
+ this->params.filename = params->filename;
+ this->params.mode = params->mode;
}
-bool GpencilSVGwriter::write(struct bContext *C,
- const char *filepath,
- const struct GpencilExportParams *params)
+/**
+ * Select type of export
+ * @return
+ */
+bool Gpencilwriter::export_object(void)
{
- Main *bmain = CTX_data_main(C);
+ switch (this->params.mode) {
+ case GP_EXPORT_TO_SVG: {
+ GpencilwriterSVG writter = GpencilwriterSVG(¶ms);
+ writter.write();
+ break;
+ }
+ default:
+ break;
+ }
+
+ return true;
+}
+
+/* Constructor. */
+GpencilwriterSVG::GpencilwriterSVG(struct GpencilExportParams *params)
+{
+ this->params = params;
+}
+
+/* Main write method for SVG format. */
+bool GpencilwriterSVG::write(void)
+{
+ Main *bmain = CTX_data_main(this->params->C);
char svg_filename[FILE_MAX];
- BLI_strncpy(svg_filename, filepath, FILE_MAX);
+ BLI_strncpy(svg_filename, this->params->filename, FILE_MAX);
BLI_path_abs(svg_filename, BKE_main_blendfile_path(bmain));
- Object *ob = params->ob;
+ Object *ob = this->params->ob;
//#ifdef WIN32
// UTF16_ENCODE(svg_filename);
//#endif
/* Create simple XML. */
- pugi::xml_document doc;
-
// tag::code[]
// add node with some name
- pugi::xml_node node = doc.append_child("node");
+ pugi::xml_node node = this->doc.append_child("node");
// add description node with text child
pugi::xml_node descr = node.append_child("object");
diff --git a/source/blender/io/gpencil/intern/gpencil_io_svg.h b/source/blender/io/gpencil/intern/gpencil_io_svg.h
index ece8e4e49a3..95d560ebc2f 100644
--- a/source/blender/io/gpencil/intern/gpencil_io_svg.h
+++ b/source/blender/io/gpencil/intern/gpencil_io_svg.h
@@ -18,6 +18,7 @@
/** \file
* \ingroup bgpencil
*/
+#include "pugixml.hpp"
struct Main;
struct GpencilExportParams;
@@ -26,11 +27,25 @@ namespace blender {
namespace io {
namespace gpencil {
-class GpencilSVGwriter {
+class Gpencilwriter {
public:
- GpencilSVGwriter(void);
- bool write(struct bContext *C, const char *filepath, const struct GpencilExportParams *params);
+ Gpencilwriter(const struct GpencilExportParams *params);
+ bool export_object(void);
+
+ private:
+ GpencilExportParams params;
+};
+
+class GpencilwriterSVG {
+
+ public:
+ GpencilwriterSVG(struct GpencilExportParams *params);
+ bool write(void);
+
+ private:
+ GpencilExportParams *params;
+ pugi::xml_document doc;
};
} // namespace gpencil
More information about the Bf-blender-cvs
mailing list