diff options
author | Antonio Vazquez <blendergit@gmail.com> | 2021-04-15 18:26:18 +0300 |
---|---|---|
committer | Antonio Vazquez <blendergit@gmail.com> | 2021-04-15 18:26:18 +0300 |
commit | 09eb04c0a865c8b847e50afe287eee3a389f42b8 (patch) | |
tree | b639667fcbd6c83ce5b02b63ce7e6414d56de658 /source/blender | |
parent | ced26bacb7f6928fe17c6c21527bd33410185264 (diff) | |
parent | 5425388e6075ad72914324069fb3c6a1eec8677c (diff) |
Merge branch 'blender-v2.93-release'
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/io/gpencil/intern/gpencil_io_export_pdf.cc | 39 | ||||
-rw-r--r-- | source/blender/io/gpencil/intern/gpencil_io_export_pdf.hh | 2 |
2 files changed, 28 insertions, 13 deletions
diff --git a/source/blender/io/gpencil/intern/gpencil_io_export_pdf.cc b/source/blender/io/gpencil/intern/gpencil_io_export_pdf.cc index 9b2dc6d12a3..11278a3ccd7 100644 --- a/source/blender/io/gpencil/intern/gpencil_io_export_pdf.cc +++ b/source/blender/io/gpencil/intern/gpencil_io_export_pdf.cc @@ -69,7 +69,6 @@ GpencilExporterPDF::GpencilExporterPDF(const char *filename, const GpencilIOPara pdf_ = nullptr; page_ = nullptr; - gstate_ = nullptr; } bool GpencilExporterPDF::new_document() @@ -169,15 +168,27 @@ void GpencilExporterPDF::export_gpencil_layers() if (!ED_gpencil_stroke_material_visible(ob, gps)) { continue; } - /* Duplicate the stroke to apply any layer thickness change. */ - bGPDstroke *gps_duplicate = BKE_gpencil_stroke_duplicate(gps, true, false); - MaterialGPencilStyle *gp_style = BKE_gpencil_material_settings(ob, - gps_duplicate->mat_nr + 1); + /* Skip invisible lines. */ + const float fill_opacity = fill_color_[3] * gpl->opacity; + const float stroke_opacity = stroke_color_[3] * stroke_average_opacity_get() * + gpl->opacity; + if ((fill_opacity < GPENCIL_ALPHA_OPACITY_THRESH) && + (stroke_opacity < GPENCIL_ALPHA_OPACITY_THRESH)) { + continue; + } + MaterialGPencilStyle *gp_style = BKE_gpencil_material_settings(ob, gps->mat_nr + 1); const bool is_stroke = ((gp_style->flag & GP_MATERIAL_STROKE_SHOW) && (gp_style->stroke_rgba[3] > GPENCIL_ALPHA_OPACITY_THRESH)); const bool is_fill = ((gp_style->flag & GP_MATERIAL_FILL_SHOW) && (gp_style->fill_rgba[3] > GPENCIL_ALPHA_OPACITY_THRESH)); + + if ((!is_stroke) && (!is_fill)) { + continue; + } + + /* Duplicate the stroke to apply any layer thickness change. */ + bGPDstroke *gps_duplicate = BKE_gpencil_stroke_duplicate(gps, true, false); prepare_stroke_export_colors(ob, gps_duplicate); /* Apply layer thickness change. */ @@ -283,29 +294,35 @@ void GpencilExporterPDF::color_set(bGPDlayer *gpl, const bool do_fill) { const float fill_opacity = fill_color_[3] * gpl->opacity; const float stroke_opacity = stroke_color_[3] * stroke_average_opacity_get() * gpl->opacity; + const bool need_state = (do_fill && fill_opacity < 1.0f) || (stroke_opacity < 1.0f); HPDF_Page_GSave(page_); - gstate_ = HPDF_CreateExtGState(pdf_); + HPDF_ExtGState gstate = (need_state) ? HPDF_CreateExtGState(pdf_) : nullptr; float col[3]; if (do_fill) { interp_v3_v3v3(col, fill_color_, gpl->tintcolor, gpl->tintcolor[3]); linearrgb_to_srgb_v3_v3(col, col); CLAMP3(col, 0.0f, 1.0f); - - HPDF_ExtGState_SetAlphaFill(gstate_, clamp_f(fill_opacity, 0.0f, 1.0f)); HPDF_Page_SetRGBFill(page_, col[0], col[1], col[2]); + if (gstate) { + HPDF_ExtGState_SetAlphaFill(gstate, clamp_f(fill_opacity, 0.0f, 1.0f)); + } } else { interp_v3_v3v3(col, stroke_color_, gpl->tintcolor, gpl->tintcolor[3]); linearrgb_to_srgb_v3_v3(col, col); CLAMP3(col, 0.0f, 1.0f); - HPDF_ExtGState_SetAlphaFill(gstate_, clamp_f(stroke_opacity, 0.0f, 1.0f)); - HPDF_ExtGState_SetAlphaStroke(gstate_, clamp_f(stroke_opacity, 0.0f, 1.0f)); HPDF_Page_SetRGBFill(page_, col[0], col[1], col[2]); HPDF_Page_SetRGBStroke(page_, col[0], col[1], col[2]); + if (gstate) { + HPDF_ExtGState_SetAlphaFill(gstate, clamp_f(stroke_opacity, 0.0f, 1.0f)); + HPDF_ExtGState_SetAlphaStroke(gstate, clamp_f(stroke_opacity, 0.0f, 1.0f)); + } + } + if (gstate) { + HPDF_Page_SetExtGState(page_, gstate); } - HPDF_Page_SetExtGState(page_, gstate_); } } // namespace blender::io::gpencil diff --git a/source/blender/io/gpencil/intern/gpencil_io_export_pdf.hh b/source/blender/io/gpencil/intern/gpencil_io_export_pdf.hh index 20970151344..89d97f79783 100644 --- a/source/blender/io/gpencil/intern/gpencil_io_export_pdf.hh +++ b/source/blender/io/gpencil/intern/gpencil_io_export_pdf.hh @@ -49,8 +49,6 @@ class GpencilExporterPDF : public GpencilExporter { HPDF_Doc pdf_; /* PDF page. */ HPDF_Page page_; - /* State. */ - HPDF_ExtGState gstate_; bool create_document(); bool add_page(); |