Blender V5.0
grease_pencil_io_intern.hh
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2024 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
5#include "BLI_bounds_types.hh"
6#include "BLI_color_types.hh"
7#include "BLI_function_ref.hh"
9#include "BLI_string_ref.hh"
10#include "BLI_vector.hh"
11
12#include "grease_pencil_io.hh"
13
14#include <cstdint>
15#include <optional>
16
17#pragma once
18
22
23struct Scene;
24struct Object;
25struct Material;
26struct RegionView3D;
28class Layer;
29class Drawing;
30} // namespace blender::bke::greasepencil
31
33
35 protected:
38
39 Object *object_ = nullptr;
40
41 public:
42 GreasePencilImporter(const IOContext &context, const ImportParams &params);
43
45 int32_t create_material(StringRefNull name, bool stroke, bool fill);
46};
47
49 public:
50 struct ObjectInfo {
52 float depth;
53 };
54
55 protected:
58
59 /* Camera projection matrix, only available with an active camera. */
60 std::optional<float4x4> camera_persmat_;
64
65 public:
66 GreasePencilExporter(const IOContext &context, const ExportParams &params);
67
68 void prepare_render_params(Scene &scene, int frame_number);
69
71 const Span<ColorGeometry4f> vertex_colors);
72 static float compute_average_stroke_opacity(const Span<float> opacities);
73
74 /* Returns a value if point sizes are all equal. */
75 static std::optional<float> try_get_uniform_point_width(const RegionView3D &rv3d,
76 const Span<float3> world_positions,
77 const Span<float> radii);
78
80
81 using WriteStrokeFn = FunctionRef<void(const Span<float3> positions,
82 const Span<float3> positions_left,
83 const Span<float3> positions_right,
84 bool cyclic,
85 int8_t type,
87 float opacity,
88 std::optional<float> width,
89 bool round_cap,
90 bool is_outline)>;
91
92 void foreach_stroke_in_layer(const Object &object,
93 const bke::greasepencil::Layer &layer,
94 const bke::greasepencil::Drawing &drawing,
95 WriteStrokeFn stroke_fn);
96
97 float2 project_to_screen(const float4x4 &transform, const float3 &position) const;
98
99 bool is_selected_frame(const GreasePencil &grease_pencil, int frame_number) const;
100
101 std::string coord_to_svg_string(const float2 &screen_co) const;
102
103 private:
104 std::optional<Bounds<float2>> compute_screen_space_drawing_bounds(
105 const RegionView3D &rv3d,
106 Object &object,
107 int layer_index,
108 const bke::greasepencil::Drawing &drawing);
109 std::optional<Bounds<float2>> compute_objects_bounds(
110 const RegionView3D &rv3d,
111 const Depsgraph &depsgraph,
113 int frame_number);
114};
115
116} // namespace blender::io::grease_pencil
BPy_StructRNA * depsgraph
SIMD_FORCE_INLINE btVector3 transform(const btVector3 &point) const
GreasePencilExporter(const IOContext &context, const ExportParams &params)
std::string coord_to_svg_string(const float2 &screen_co) const
static std::optional< float > try_get_uniform_point_width(const RegionView3D &rv3d, const Span< float3 > world_positions, const Span< float > radii)
FunctionRef< void(const Span< float3 > positions, const Span< float3 > positions_left, const Span< float3 > positions_right, bool cyclic, int8_t type, const ColorGeometry4f &color, float opacity, std::optional< float > width, bool round_cap, bool is_outline)> WriteStrokeFn
static ColorGeometry4f compute_average_stroke_color(const Material &material, const Span< ColorGeometry4f > vertex_colors)
void prepare_render_params(Scene &scene, int frame_number)
void foreach_stroke_in_layer(const Object &object, const bke::greasepencil::Layer &layer, const bke::greasepencil::Drawing &drawing, WriteStrokeFn stroke_fn)
bool is_selected_frame(const GreasePencil &grease_pencil, int frame_number) const
static float compute_average_stroke_opacity(const Span< float > opacities)
float2 project_to_screen(const float4x4 &transform, const float3 &position) const
GreasePencilImporter(const IOContext &context, const ImportParams &params)
int32_t create_material(StringRefNull name, bool stroke, bool fill)
uiWidgetBaseParameters params[MAX_WIDGET_BASE_BATCH]
MatBase< float, 4, 4 > float4x4
VecBase< float, 2 > float2
ColorSceneLinear4f< eAlpha::Premultiplied > ColorGeometry4f
VecBase< float, 3 > float3
const char * name