53 std::optional<float> width);
60 if (layer->is_visible()) {
62 if ((frame !=
nullptr) && frame->is_selected()) {
81 const int frame_number = scene.r.cfra;
92 const int orig_frame = scene.r.cfra;
93 for (
int frame_number = scene.r.sfra; frame_number <= scene.r.efra; frame_number++) {
99 scene.r.cfra = frame_number;
110 scene.r.cfra = orig_frame;
129 const Object *ob = info.object;
137 if (!layer->is_visible()) {
140 const Drawing *drawing = grease_pencil_eval->get_drawing_at(*layer, frame_number);
141 if (drawing ==
nullptr) {
156 const float4x4 layer_to_world = layer.to_world_space(
object);
162 const std::optional<float> width,
173 auto hpdf_error_handler = [](HPDF_STATUS error_no, HPDF_STATUS detail_no,
void * ) {
174 printf(
"ERROR: error_no=%04X, detail_no=%u\n", (HPDF_UINT)error_no, (HPDF_UINT)detail_no);
177 pdf_ = HPDF_New(hpdf_error_handler,
nullptr);
179 std::cout <<
"error: cannot create PdfDoc object\n";
189 std::cout <<
"error: cannot create PdfPage\n";
204 const std::optional<float> width)
207 HPDF_Page_SetLineJoin(
page_, HPDF_ROUND_JOIN);
208 HPDF_Page_SetLineWidth(
page_, std::max(*width, 1.0f));
211 const float total_opacity = color.a * opacity;
213 HPDF_Page_GSave(
page_);
214 HPDF_ExtGState gstate = (total_opacity < 1.0f) ? HPDF_CreateExtGState(
pdf_) :
nullptr;
219 HPDF_Page_SetRGBFill(
page_, srgb.
r, srgb.
g, srgb.
b);
220 HPDF_Page_SetRGBStroke(
page_, srgb.
r, srgb.
g, srgb.
b);
222 HPDF_ExtGState_SetAlphaFill(gstate, std::clamp(total_opacity, 0.0f, 1.0f));
223 HPDF_ExtGState_SetAlphaStroke(gstate, std::clamp(total_opacity, 0.0f, 1.0f));
227 HPDF_Page_SetRGBFill(
page_, srgb.
r, srgb.
g, srgb.
b);
229 HPDF_ExtGState_SetAlphaFill(gstate, std::clamp(total_opacity, 0.0f, 1.0f));
233 HPDF_Page_SetExtGState(
page_, gstate);
236 for (
const int i : positions.index_range()) {
239 HPDF_Page_MoveTo(
page_, screen_co.x, screen_co.y);
242 HPDF_Page_LineTo(
page_, screen_co.x, screen_co.y);
246 HPDF_Page_ClosePath(
page_);
250 HPDF_Page_Stroke(
page_);
253 HPDF_Page_Fill(
page_);
256 HPDF_Page_GRestore(
page_);
262 HPDF_STATUS result = 0;
267 std::wstring wstr(filepath_16);
268 result = HPDF_SaveToFile(
pdf_, wstr.c_str());
271 result = HPDF_SaveToFile(
pdf_, filepath.
c_str());
274 return (result == 0) ?
true :
false;
Low-level operations for curves.
Low-level operations for grease pencil.
General operations, lookup, etc. for materials.
bool BKE_scene_camera_switch_update(Scene *scene)
void BKE_scene_graph_update_for_newframe(Depsgraph *depsgraph)
void BLI_kdtree_nd_ free(KDTree *tree)
void linearrgb_to_srgb_v3_v3(float srgb[3], const float linear[3])
Object * DEG_get_evaluated_object(const Depsgraph *depsgraph, Object *object)
constexpr const char * c_str() const
GreasePencilExporter(const IOContext &context, const ExportParams ¶ms)
blender::Bounds< float2 > render_rect_
const ExportParams params_
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)
Vector< ObjectInfo > retrieve_objects() const
float2 project_to_screen(const float4x4 &transform, const float3 &position) const
void export_grease_pencil_objects(int frame_number)
void write_stroke_to_polyline(const float4x4 &transform, const Span< float3 > positions, const bool cyclic, const ColorGeometry4f &color, const float opacity, std::optional< float > width)
void export_grease_pencil_layer(const Object &object, const bke::greasepencil::Layer &layer, const bke::greasepencil::Drawing &drawing)
bool export_scene(Scene &scene, StringRefNull filepath)
bool write_to_file(StringRefNull filepath)
static bool is_selected_frame(const GreasePencil &grease_pencil, const int frame_number)
bool export_pdf(const IOContext &context, const ExportParams ¶ms, Scene &scene, StringRefNull filepath)
wchar_t * alloc_utf16_from_8(const char *in8, size_t add)