[Bf-blender-cvs] [09d163ac04c] greasepencil-object: GPencil: Sort objects in zdepth before exporting to SVG
Antonio Vazquez
noreply at git.blender.org
Sat Aug 1 11:19:49 CEST 2020
Commit: 09d163ac04c519da4d2614c7a754a5aa4085c5bb
Author: Antonio Vazquez
Date: Sat Aug 1 11:15:49 2020 +0200
Branches: greasepencil-object
https://developer.blender.org/rB09d163ac04c519da4d2614c7a754a5aa4085c5bb
GPencil: Sort objects in zdepth before exporting to SVG
===================================================================
M source/blender/io/gpencil/intern/gpencil_io_base.cc
M source/blender/io/gpencil/intern/gpencil_io_base.h
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/io/gpencil/intern/gpencil_io_base.cc b/source/blender/io/gpencil/intern/gpencil_io_base.cc
index 762e8546b02..8b1c5fc0a40 100644
--- a/source/blender/io/gpencil/intern/gpencil_io_base.cc
+++ b/source/blender/io/gpencil/intern/gpencil_io_base.cc
@@ -19,7 +19,6 @@
*/
#include <algorithm>
#include <cctype>
-
#include <iostream>
#include <string>
@@ -54,51 +53,61 @@
#include "pugixml.hpp"
-namespace blender {
-namespace io {
-namespace gpencil {
+namespace blender::io::gpencil {
/* Constructor. */
GpencilExporter::GpencilExporter(const struct GpencilExportParams *iparams)
{
- params.frame_start = iparams->frame_start;
- params.frame_end = iparams->frame_end;
- params.obact = iparams->obact;
- params.region = iparams->region;
- params.C = iparams->C;
- params.filename = iparams->filename;
- params.mode = iparams->mode;
- params.flag = iparams->flag;
+ params_.frame_start = iparams->frame_start;
+ params_.frame_end = iparams->frame_end;
+ params_.obact = iparams->obact;
+ params_.region = iparams->region;
+ params_.C = iparams->C;
+ params_.filename = iparams->filename;
+ params_.mode = iparams->mode;
+ params_.flag = iparams->flag;
/* Easy access data. */
- bmain = CTX_data_main(params.C);
- depsgraph = CTX_data_depsgraph_pointer(params.C);
- rv3d = (RegionView3D *)params.region->regiondata;
- gpd = (bGPdata *)params.obact->data;
+ bmain = CTX_data_main(params_.C);
+ depsgraph = CTX_data_depsgraph_pointer(params_.C);
+ rv3d = (RegionView3D *)params_.region->regiondata;
+ gpd = (bGPdata *)params_.obact->data;
- winx = params.region->winx;
- winy = params.region->winy;
+ winx = params_.region->winx;
+ winy = params_.region->winy;
/* Prepare output filename with full path. */
- set_out_filename(params.filename);
+ set_out_filename(params_.filename);
/* Load list of selected objects. */
- ViewLayer *view_layer = CTX_data_view_layer(params.C);
+ float camera_z_axis[3];
+ copy_v3_v3(camera_z_axis, rv3d->viewinv[2]);
+
+ ViewLayer *view_layer = CTX_data_view_layer(params_.C);
LISTBASE_FOREACH (Base *, base, &view_layer->object_bases) {
Object *object = base->object;
if (object->type != OB_GPENCIL) {
continue;
}
- if (((params.flag & GP_EXPORT_SELECTED_OBJECTS) == 0) && (params.obact != object)) {
+ if (((params_.flag & GP_EXPORT_SELECTED_OBJECTS) == 0) && (params_.obact != object)) {
continue;
}
if (base->flag & BASE_SELECTED) {
- ob_list.push_back(object);
+ /* Save zdepth from view to sort from back to front. */
+ float camera_z = dot_v3v3(camera_z_axis, object->obmat[3]);
+ ObjectZ obz = {camera_z, object};
+ // obz.zdepth = camera_z;
+ // obz.ob = object;
+ ob_list.push_back(obz);
}
}
+
+ /* Sort list of objects from point of view. */
+ ob_list.sort([](const ObjectZ &obz1, const ObjectZ &obz2) { return obz1.zdepth < obz2.zdepth; });
}
+
/**
* Set output file input_text full path.
* \param C: Context.
@@ -122,7 +131,7 @@ bool GpencilExporter::gpencil_3d_point_to_screen_space(const float co[3], float
mul_v3_m4v3(parent_co, diff_mat, co);
float screen_co[2];
eV3DProjTest test = (eV3DProjTest)(V3D_PROJ_RET_OK);
- if (ED_view3d_project_float_global(params.region, parent_co, screen_co, test) ==
+ if (ED_view3d_project_float_global(params_.region, parent_co, screen_co, test) ==
V3D_PROJ_RET_OK) {
if (!ELEM(V2D_IS_CLIPPED, screen_co[0], screen_co[1])) {
copy_v2_v2(r_co, screen_co);
@@ -270,7 +279,7 @@ struct bGPDlayer *GpencilExporter::gpl_current_get(void)
void GpencilExporter::gpl_current_set(struct bGPDlayer *gpl)
{
gpl_cur = gpl;
- BKE_gpencil_parent_matrix_get(depsgraph, params.obact, gpl, diff_mat);
+ BKE_gpencil_parent_matrix_get(depsgraph, params_.obact, gpl, diff_mat);
}
struct bGPDframe *GpencilExporter::gpf_current_get(void)
@@ -342,6 +351,4 @@ float GpencilExporter::stroke_average_opacity(void)
return avg_opacity;
}
-} // namespace gpencil
-} // namespace io
-} // namespace blender
+} // namespace blender::io::gpencil
diff --git a/source/blender/io/gpencil/intern/gpencil_io_base.h b/source/blender/io/gpencil/intern/gpencil_io_base.h
index d0139548d87..38e53d8079f 100644
--- a/source/blender/io/gpencil/intern/gpencil_io_base.h
+++ b/source/blender/io/gpencil/intern/gpencil_io_base.h
@@ -38,9 +38,7 @@ struct bGPDframe;
struct bGPDstroke;
struct MaterialGPencilStyle;
-namespace blender {
-namespace io {
-namespace gpencil {
+namespace blender::io::gpencil {
class GpencilExporter {
@@ -61,10 +59,18 @@ class GpencilExporter {
protected:
bool invert_axis[2];
float diff_mat[4][4];
- GpencilExportParams params;
+ GpencilExportParams params_;
char out_filename[FILE_MAX];
- std::list<Object *> ob_list;
+ struct ObjectZ {
+ float zdepth;
+ struct Object *ob;
+ // ObjectZ(int izdepth, Object *iob) : zdepth(izdepth), ob(iob)
+ //{
+ //}
+ };
+
+ std::list<ObjectZ> ob_list;
/* Data for easy access. */
struct Depsgraph *depsgraph;
@@ -99,6 +105,4 @@ class GpencilExporter {
void set_out_filename(char *filename);
};
-} // namespace gpencil
-} // namespace io
-} // namespace blender
+} // namespace blender::io::gpencil
diff --git a/source/blender/io/gpencil/intern/gpencil_io_svg.cc b/source/blender/io/gpencil/intern/gpencil_io_svg.cc
index 246bb2ed730..66446ee0cfb 100644
--- a/source/blender/io/gpencil/intern/gpencil_io_svg.cc
+++ b/source/blender/io/gpencil/intern/gpencil_io_svg.cc
@@ -18,7 +18,6 @@
* \ingroup bgpencil
*/
#include <iostream>
-#include <iterator>
#include <list>
#include <string>
@@ -58,9 +57,7 @@
#include "pugixml.hpp"
-namespace blender {
-namespace io {
-namespace gpencil {
+namespace blender ::io ::gpencil {
/* Constructor. */
GpencilExporterSVG::GpencilExporterSVG(const struct GpencilExportParams *iparams)
@@ -119,11 +116,10 @@ void GpencilExporterSVG::create_document_header(void)
/* Main layer loop. */
void GpencilExporterSVG::export_layers(void)
{
- std::list<Object *>::iterator it;
- for (it = ob_list.begin(); it != ob_list.end(); ++it) {
- Object *ob = (Object *)*it;
+ for (ObjectZ &obz : ob_list) {
+ Object *ob = obz.ob;
pugi::xml_node ob_node = main_node.append_child("g");
- ob_node.append_attribute("id").set_value(ob->id.name + 2);
+ ob_node.append_attribute("zdepth").set_value(ob->id.name + 2);
/* Use evaluated version to get strokes with modifiers. */
Object *ob_eval_ = (Object *)DEG_get_evaluated_id(depsgraph, &ob->id);
@@ -140,7 +136,7 @@ void GpencilExporterSVG::export_layers(void)
txt.append(gpl->info);
main_node.append_child(pugi::node_comment).set_value(txt.c_str());
pugi::xml_node gpl_node = ob_node.append_child("g");
- gpl_node.append_attribute("id").set_value(gpl->info);
+ gpl_node.append_attribute("zdepth").set_value(gpl->info);
bGPDframe *gpf = gpl->actframe;
if (gpf == NULL) {
@@ -167,11 +163,11 @@ void GpencilExporterSVG::export_layers(void)
export_point(gpl_node);
}
else {
- bool is_normalized = ((params.flag & GP_EXPORT_NORM_THICKNESS) != 0) ||
+ bool is_normalized = ((params_.flag & GP_EXPORT_NORM_THICKNESS) != 0) ||
is_stroke_thickness_constant(gps);
/* Fill. */
- if ((gp_style_is_fill()) && (params.flag & GP_EXPORT_FILL)) {
+ if ((gp_style_is_fill()) && (params_.flag & GP_EXPORT_FILL)) {
if (is_normalized) {
export_stroke_polyline(gpl_node, true);
}
@@ -377,6 +373,4 @@ void GpencilExporterSVG::color_string_set(pugi::xml_node gps_node, const bool is
}
}
-} // namespace gpencil
-} // namespace io
-} // namespace blender
+} // namespace blender::io::gpencil
diff --git a/source/blender/io/gpencil/intern/gpencil_io_svg.h b/source/blender/io/gpencil/intern/gpencil_io_svg.h
index ae67b903812..76ab3986652 100644
--- a/source/blender/io/gpencil/intern/gpencil_io_svg.h
+++ b/source/blender/io/gpencil/intern/gpencil_io_svg.h
@@ -36,9 +36,7 @@ struct MaterialGPencilStyle;
#define SVG_EXPORTER_VERSION " Generator: Blender, SVG Export for Grease Pencil v1.0 "
-namespace blender {
-namespace io {
-namespace gpencil {
+namespace blender::io::gpencil {
class GpencilExporterSVG : public GpencilExporter {
@@ -64,6 +62,4 @@ class GpencilExporterSVG : public GpencilExporter {
void color_string_set(pugi::xml_node gps_node, const bool is_fill);
};
-} // namespace gpencil
-} // namespace io
-} // namespace blender
+} // namespace blender::io::gpencil
More information about the Bf-blender-cvs
mailing list