30#include "RNA_prototypes.hh"
43 const bool has_custom_curve)
45 if (has_custom_curve) {
107 row,
ptr,
"layer_filter", &obj_data_ptr,
"layers",
nullptr, ICON_OUTLINER_DATA_GP_LAYER);
134 row,
ptr,
"material_filter", &obj_data_ptr,
"materials",
nullptr, ICON_SHADING_TEXTURE);
159 uiItemPointerR(row,
ptr,
"vertex_group_name", &ob_ptr,
"vertex_groups",
nullptr, ICON_NONE);
175 if (use_custom_curve) {
190 for (
short i = 0; i < *totcol; i++) {
199 const std::optional<StringRef> layer_name_filter,
200 const std::optional<int> layer_pass_filter,
201 const bool layer_filter_invert,
202 const bool layer_pass_filter_invert,
205 const IndexMask full_mask = grease_pencil.layers().index_range();
206 if (!layer_name_filter && !layer_pass_filter) {
217 if (layer_name_filter) {
218 const Layer &layer = *layers[layer_i];
219 const bool match = (layer.name() == layer_name_filter.value());
220 if (match == layer_filter_invert) {
224 if (layer_pass_filter) {
225 const int layer_pass = layer_passes.
get(layer_i);
226 const bool match = (layer_pass == layer_pass_filter.value());
227 if (match == layer_pass_filter_invert) {
243 std::make_optional<StringRef>(influence_data.
layer_name) :
246 std::make_optional<int>(influence_data.
layer_pass) :
256 const std::optional<int> material_pass_filter,
257 const bool material_filter_invert,
258 const bool material_pass_filter_invert,
261 const IndexMask full_mask = curves.curves_range();
262 if (!material_filter && !material_pass_filter) {
267 const_cast<Object *
>(ob),
const_cast<Material *
>(material_filter));
276 const int material_index = stroke_materials.
get(stroke_i);
277 if (material_filter !=
nullptr) {
278 const bool match = (material_index == material_filter_index);
279 if (match == material_filter_invert) {
283 if (material_pass_filter) {
284 const int material_pass = material_pass_by_index[material_index];
285 const bool match = (material_pass == material_pass_filter.value());
286 if (match == material_pass_filter_invert) {
320 return *curves.attributes().lookup_or_default<
float>(
331 const Layer &layer = grease_pencil.layer(layer_i);
333 if (
Drawing *drawing = grease_pencil.get_drawing_at(layer, frame)) {
334 drawings.add(drawing);
348 const Layer &layer = grease_pencil.layer(layer_i);
349 Drawing *drawing = grease_pencil.get_drawing_at(layer, frame);
350 if (drawing ==
nullptr) {
355 drawings.add_new(drawing);
356 drawing_infos.append({drawing, int(layer_i)});
359 return drawing_infos;
370 const Layer &layer = grease_pencil.layer(layer_i);
371 const std::optional<int> start_frame = layer.start_frame_at(frame);
375 Drawing *drawing = grease_pencil.get_drawing_at(layer, *start_frame);
376 if (drawing ==
nullptr) {
381 drawings.add_new(drawing);
382 drawing_infos.append({drawing, *start_frame});
385 return drawing_infos;
396 drawing.
strokes_for_write() = geometry::resample_to_evaluated(curves, bezier_selection);
Low-level operations for curves.
Low-level operations for grease pencil.
General operations, lookup, etc. for materials.
struct Material * BKE_object_material_get(struct Object *ob, short act)
short * BKE_object_material_len_p(struct Object *ob)
int BKE_object_material_index_get(Object *ob, const Material *ma)
void(*)(void *user_data, Object *ob, ID **idpoin, int cb_flag) IDWalkFunc
#define BLO_read_struct(reader, struct_name, ptr_p)
@ GREASE_PENCIL_INFLUENCE_USE_MATERIAL_PASS_FILTER
@ GREASE_PENCIL_INFLUENCE_USE_LAYER_PASS_FILTER
@ GREASE_PENCIL_INFLUENCE_INVERT_LAYER_FILTER
@ GREASE_PENCIL_INFLUENCE_INVERT_MATERIAL_PASS_FILTER
@ GREASE_PENCIL_INFLUENCE_INVERT_MATERIAL_FILTER
@ GREASE_PENCIL_INFLUENCE_INVERT_LAYER_PASS_FILTER
void uiLayoutSetActive(uiLayout *layout, bool active)
void uiTemplateCurveMapping(uiLayout *layout, PointerRNA *ptr, const char *propname, int type, bool levels, bool brush, bool neg_slope, bool tone)
uiLayout * uiLayoutRow(uiLayout *layout, bool align)
void uiLayoutSetPropSep(uiLayout *layout, bool is_sep)
uiLayout * uiLayoutRowWithHeading(uiLayout *layout, bool align, const char *heading)
void uiItemPointerR(uiLayout *layout, PointerRNA *ptr, const char *propname, PointerRNA *searchptr, const char *searchpropname, const char *name, int icon)
void uiLayoutSetPropDecorate(uiLayout *layout, bool is_sep)
uiLayout * uiLayoutColumn(uiLayout *layout, bool align)
void uiItemR(uiLayout *layout, PointerRNA *ptr, const char *propname, eUI_Item_Flag flag, const char *name, int icon)
bool contains(const Key &key) const
T get(const int64_t index) const
static VArray ForSingle(T value, const int64_t size)
Span< Key > as_span() const
GAttributeReader lookup_or_default(StringRef attribute_id, AttrDomain domain, eCustomDataType data_type, const void *default_value=nullptr) const
bke::CurvesGeometry & strokes_for_write()
const bke::CurvesGeometry & strokes() const
void tag_topology_changed()
static IndexMask from_predicate(const IndexMask &universe, GrainSize grain_size, IndexMaskMemory &memory, Fn &&predicate)
void foreach_index(Fn &&fn) const
void read_influence_data(BlendDataReader *reader, GreasePencilModifierInfluenceData *influence_data)
void init_influence_data(GreasePencilModifierInfluenceData *influence_data, const bool has_custom_curve)
Vector< LayerDrawingInfo > get_drawing_infos_by_layer(GreasePencil &grease_pencil, const IndexMask &layer_mask, const int frame)
Vector< FrameDrawingInfo > get_drawing_infos_by_frame(GreasePencil &grease_pencil, const IndexMask &layer_mask, const int frame)
static IndexMask get_filtered_layer_mask(const GreasePencil &grease_pencil, const std::optional< StringRef > layer_name_filter, const std::optional< int > layer_pass_filter, const bool layer_filter_invert, const bool layer_pass_filter_invert, IndexMaskMemory &memory)
static IndexMask get_filtered_stroke_mask(const Object *ob, const bke::CurvesGeometry &curves, const Material *material_filter, const std::optional< int > material_pass_filter, const bool material_filter_invert, const bool material_pass_filter_invert, IndexMaskMemory &memory)
void write_influence_data(BlendWriter *writer, const GreasePencilModifierInfluenceData *influence_data)
void draw_vertex_group_settings(const bContext *, uiLayout *layout, PointerRNA *ptr)
VArray< float > get_influence_vertex_weights(const bke::CurvesGeometry &curves, const GreasePencilModifierInfluenceData &influence_data)
Vector< bke::greasepencil::Drawing * > get_drawings_for_write(GreasePencil &grease_pencil, const IndexMask &layer_mask, const int frame)
void draw_material_filter_settings(const bContext *, uiLayout *layout, PointerRNA *ptr)
void draw_layer_filter_settings(const bContext *, uiLayout *layout, PointerRNA *ptr)
static Vector< int > get_grease_pencil_material_passes(const Object *ob)
void draw_custom_curve_settings(const bContext *, uiLayout *layout, PointerRNA *ptr)
void free_influence_data(GreasePencilModifierInfluenceData *influence_data)
void foreach_influence_ID_link(GreasePencilModifierInfluenceData *influence_data, Object *ob, IDWalkFunc walk, void *user_data)
void copy_influence_data(const GreasePencilModifierInfluenceData *influence_data_src, GreasePencilModifierInfluenceData *influence_data_dst, const int)
void ensure_no_bezier_curves(Drawing &drawing)
PointerRNA RNA_pointer_get(PointerRNA *ptr, const char *name)
int RNA_string_length(PointerRNA *ptr, const char *name)
bool RNA_boolean_get(PointerRNA *ptr, const char *name)
PointerRNA RNA_pointer_create(ID *id, StructRNA *type, void *data)
struct Material * material
char vertex_group_name[64]
struct CurveMapping * custom_curve
struct MaterialGPencilStyle * gp_style