Initial Grease Pencil 3.0 stage #106848
|
@ -1,6 +0,0 @@
|
||||||
#include "BKE_grease_pencil.hh"
|
|
||||||
|
|
||||||
Span<GreasePencilDrawing> blender::bke::GreasePencil::drawings() const
|
|
||||||
{
|
|
||||||
return Span<GreasePencilDrawing>{this->drawing_array, this->drawing_array_size};
|
|
||||||
}
|
|
|
@ -8,6 +8,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "BLI_map.hh"
|
#include "BLI_map.hh"
|
||||||
|
#include "DNA_gpencil_legacy_types.h"
|
||||||
#include "DNA_grease_pencil_types.h"
|
#include "DNA_grease_pencil_types.h"
|
||||||
|
|
||||||
namespace blender::bke {
|
namespace blender::bke {
|
||||||
|
@ -17,6 +18,11 @@ class GreasePencilLayerRuntime {
|
||||||
Map<int, int> frames;
|
Map<int, int> frames;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
namespace gpencil::convert {
|
||||||
|
|
||||||
|
CurvesGeometry &legacy_gpencil_frame_to_curves_geometry(bGPDframe &gpf);
|
||||||
filedescriptor marked this conversation as resolved
Outdated
|
|||||||
|
|
||||||
|
} // namespace gpencil::convert
|
||||||
|
|
||||||
} // namespace blender::bke
|
} // namespace blender::bke
|
||||||
|
|
||||||
|
|
|
@ -148,6 +148,7 @@ set(SRC
|
||||||
intern/gpencil_geom_legacy.cc
|
intern/gpencil_geom_legacy.cc
|
||||||
intern/gpencil_modifier_legacy.c
|
intern/gpencil_modifier_legacy.c
|
||||||
intern/gpencil_update_cache_legacy.c
|
intern/gpencil_update_cache_legacy.c
|
||||||
|
intern/grease_pencil_convert_legacy.cc
|
||||||
intern/grease_pencil.cc
|
intern/grease_pencil.cc
|
||||||
intern/icons.cc
|
intern/icons.cc
|
||||||
intern/icons_rasterize.c
|
intern/icons_rasterize.c
|
||||||
|
@ -389,6 +390,7 @@ set(SRC
|
||||||
BKE_gpencil_geom_legacy.h
|
BKE_gpencil_geom_legacy.h
|
||||||
BKE_gpencil_modifier_legacy.h
|
BKE_gpencil_modifier_legacy.h
|
||||||
BKE_gpencil_update_cache_legacy.h
|
BKE_gpencil_update_cache_legacy.h
|
||||||
|
BKE_grease_pencil.hh
|
||||||
BKE_icons.h
|
BKE_icons.h
|
||||||
BKE_idprop.h
|
BKE_idprop.h
|
||||||
BKE_idprop.hh
|
BKE_idprop.hh
|
||||||
|
|
|
@ -0,0 +1,83 @@
|
||||||
|
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||||
|
|
||||||
|
/** \file
|
||||||
|
* \ingroup bke
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "BKE_curves.hh"
|
||||||
|
#include "BKE_grease_pencil.hh"
|
||||||
|
|
||||||
|
#include "BLI_listbase.h"
|
||||||
|
#include "BLI_math_vector_types.hh"
|
||||||
|
#include "BLI_vector.hh"
|
||||||
|
|
||||||
|
#include "DNA_gpencil_legacy_types.h"
|
||||||
|
#include "DNA_grease_pencil_types.h"
|
||||||
|
|
||||||
|
namespace blender::bke::gpencil::convert {
|
||||||
|
|
||||||
|
CurvesGeometry &legacy_gpencil_frame_to_curves_geometry(bGPDframe &gpf)
|
||||||
filedescriptor marked this conversation as resolved
Outdated
Falk David
commented
`legacy_gpencil_frame_to_grease_pencil_drawing`
|
|||||||
|
{
|
||||||
|
/* Get the number of points, number of strokes and the offsets for each stroke. */
|
||||||
|
Vector<int> offsets;
|
||||||
Hans Goudey
commented
Order return argument last, make the Order return argument last, make the `gpf` argument const
|
|||||||
|
offsets.append(0);
|
||||||
|
int num_strokes = 0;
|
||||||
|
int num_points = 0;
|
||||||
|
LISTBASE_FOREACH (bGPDstroke *, gps, &gpf.strokes) {
|
||||||
|
num_points += gps->totpoints;
|
||||||
|
offsets.append(num_points);
|
||||||
|
num_strokes++;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Create a new CurvesGeometry. */
|
||||||
|
CurvesGeometry curves{num_points, num_strokes};
|
||||||
|
curves.offsets_for_write().copy_from(offsets);
|
||||||
|
OffsetIndices<int> points_by_curve = curves.points_by_curve();
|
||||||
|
MutableAttributeAccessor attributes = curves.attributes_for_write();
|
||||||
|
|
||||||
|
/* All strokes are poly curves. */
|
||||||
|
curves.curve_types_for_write().fill(CURVE_TYPE_POLY);
|
||||||
|
|
||||||
|
/* Point Attributes. */
|
||||||
|
MutableSpan<float3> positions = curves.positions_for_write();
|
||||||
|
MutableSpan<float> radii =
|
||||||
|
attributes.lookup_or_add_for_write_span<float>("radius", ATTR_DOMAIN_POINT).span;
|
||||||
|
MutableSpan<float> opacities =
|
||||||
|
attributes.lookup_or_add_for_write_span<float>("opacity", ATTR_DOMAIN_POINT).span;
|
||||||
|
MutableSpan<bool> selection =
|
||||||
|
attributes.lookup_or_add_for_write_span<bool>(".selection", ATTR_DOMAIN_POINT).span;
|
||||||
|
|
||||||
|
/* Curve Attributes. */
|
||||||
|
MutableSpan<bool> curve_cyclic =
|
||||||
|
attributes.lookup_or_add_for_write_span<bool>("cyclic", ATTR_DOMAIN_CURVE).span;
|
||||||
|
MutableSpan<int> curve_materials =
|
||||||
|
attributes.lookup_or_add_for_write_span<int>("material_index", ATTR_DOMAIN_CURVE).span;
|
||||||
|
|
||||||
|
int i = 0;
|
||||||
|
LISTBASE_FOREACH_INDEX (bGPDstroke *, gps, &gpf.strokes, i) {
|
||||||
|
/* Write curve attributes. */
|
||||||
|
curve_cyclic[i] = (gps->flag & GP_STROKE_CYCLIC) != 0;
|
||||||
|
curve_materials[i] = gps->mat_nr;
|
||||||
|
|
||||||
|
/* Write point attributes. */
|
||||||
|
IndexRange curve_points = points_by_curve[i];
|
||||||
|
Span<bGPDspoint> stroke_points{gps->points, gps->totpoints};
|
||||||
|
|
||||||
|
MutableSpan<float3> curve_positions = positions.slice(curve_points);
|
||||||
|
MutableSpan<float> curve_radii = radii.slice(curve_points);
|
||||||
|
MutableSpan<float> curve_opacities = opacities.slice(curve_points);
|
||||||
|
MutableSpan<bool> curve_selections = selection.slice(curve_points);
|
||||||
|
|
||||||
|
for (const int j : stroke_points.index_range()) {
|
||||||
|
const bGPDspoint &pt = stroke_points[j];
|
||||||
|
curve_positions[j] = float3(pt.x, pt.y, pt.z);
|
||||||
|
curve_radii[j] = pt.pressure;
|
||||||
|
curve_opacities[j] = pt.strength;
|
||||||
|
curve_selections[j] = (pt.flag & GP_SPOINT_SELECT) != 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return curves;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace blender::bke::gpencil::convert
|
Loading…
Reference in New Issue
Decide on the namespace here. Should it maybe be just
gp
?