30#include "RNA_prototypes.hh"
45 const bool has_custom_curve)
47 if (has_custom_curve) {
107 row = &
col->row(
true);
109 if (use_layer_group_filter) {
115 ICON_GREASEPENCIL_LAYER_GROUP);
123 ICON_OUTLINER_DATA_GP_LAYER);
125 sub = &row->
row(
true);
129 row = &
col->row(
true,
IFACE_(
"Layer Pass"));
131 sub = &row->
row(
true);
133 subsub = &sub->
row(
true);
149 row = &
col->row(
true);
152 ptr,
"material_filter", &obj_data_ptr,
"materials", std::nullopt, ICON_SHADING_TEXTURE);
153 sub = &row->
row(
true);
156 row = &
col->row(
true,
IFACE_(
"Material Pass"));
158 sub = &row->
row(
true);
160 subsub = &sub->
row(
true);
175 row = &
col->row(
true);
177 row->
prop_search(
ptr,
"vertex_group_name", &ob_ptr,
"vertex_groups", std::nullopt, ICON_NONE);
178 sub = &row->
row(
true);
190 row = &layout->
row(
true);
193 if (use_custom_curve) {
207 for (
short i = 0;
i < *totcol;
i++) {
218 const std::optional<StringRef> tree_node_name_filter,
219 const std::optional<int> layer_pass_filter,
220 const bool layer_filter_invert,
221 const bool layer_pass_filter_invert,
224 const IndexMask full_mask = grease_pencil.layers().index_range();
225 if (!tree_node_name_filter && !layer_pass_filter) {
234 const LayerGroup *filter_layer_group =
nullptr;
235 if (tree_node_name_filter) {
236 for (
const LayerGroup *group : grease_pencil.layer_groups()) {
237 if (group->name() == tree_node_name_filter.value()) {
238 filter_layer_group = group;
246 if (tree_node_name_filter) {
247 const Layer *layer = layers[layer_i];
248 if (filter_layer_group) {
249 const bool match = layer->is_child_of(*filter_layer_group);
250 if (match == layer_filter_invert) {
255 const bool match = (layer->name() == tree_node_name_filter.value());
256 if (match == layer_filter_invert) {
261 if (layer_pass_filter) {
262 const int layer_pass = layer_passes.
get(layer_i);
263 const bool match = (layer_pass == layer_pass_filter.value());
264 if (match == layer_pass_filter_invert) {
280 std::make_optional<StringRef>(influence_data.
layer_name) :
283 std::make_optional<int>(influence_data.
layer_pass) :
293 const std::optional<int> material_pass_filter,
294 const bool material_filter_invert,
295 const bool material_pass_filter_invert,
299 if (!material_filter && !material_pass_filter) {
304 const_cast<Object *
>(ob),
const_cast<Material *
>(material_filter));
313 const int material_index = stroke_materials.
get(stroke_i);
314 if (material_filter !=
nullptr) {
315 const bool match = (material_index == material_filter_index);
316 if (match == material_filter_invert) {
320 if (material_pass_filter) {
321 const int material_pass = material_pass_by_index[material_index];
322 const bool match = (material_pass == material_pass_filter.value());
323 if (match == material_pass_filter_invert) {
364 for (const int i : range) {
365 influence_weights_inverted[i] = 1.0f - influence_weights[i];
371 return influence_weights;
381 const Layer &layer = grease_pencil.layer(layer_i);
383 if (
Drawing *drawing = grease_pencil.get_drawing_at(layer, frame)) {
384 drawings.
add(drawing);
398 const Layer &layer = grease_pencil.layer(layer_i);
399 Drawing *drawing = grease_pencil.get_drawing_at(layer, frame);
400 if (drawing ==
nullptr) {
406 drawing_infos.
append({drawing, int(layer_i)});
409 return drawing_infos;
420 const Layer &layer = grease_pencil.layer(layer_i);
421 const std::optional<int> start_frame = layer.
start_frame_at(frame);
425 Drawing *drawing = grease_pencil.get_drawing_at(layer, *start_frame);
426 if (drawing ==
nullptr) {
432 drawing_infos.
append({drawing, *start_frame});
435 return drawing_infos;
Low-level operations for curves.
Low-level operations for grease pencil.
General operations, lookup, etc. for materials.
short * BKE_object_material_len_p(Object *ob)
Material * BKE_object_material_get(Object *ob, short act)
int BKE_object_material_index_get(Object *ob, const Material *ma)
void(*)(void *user_data, Object *ob, ID **idpoin, LibraryForeachIDCallbackFlag cb_flag) IDWalkFunc
#define BLO_read_struct(reader, struct_name, ptr_p)
@ GREASE_PENCIL_INFLUENCE_INVERT_VERTEX_GROUP
@ 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 uiTemplateCurveMapping(uiLayout *layout, PointerRNA *ptr, blender::StringRefNull propname, int type, bool levels, bool brush, bool neg_slope, bool tone, bool presets)
IndexRange index_range() const
static IndexMask from_predicate(const IndexMask &universe, GrainSize grain_size, IndexMaskMemory &memory, Fn &&predicate)
bool contains(const Key &key) const
void add_new(const Key &key)
T get(const int64_t index) const
static VArray from_single(T value, const int64_t size)
static VArray from_container(ContainerT container)
Span< Key > as_span() const
void append(const T &value)
GAttributeReader lookup_or_default(StringRef attribute_id, AttrDomain domain, AttrType data_type, const void *default_value=nullptr) const
IndexRange curves_range() const
AttributeAccessor attributes() const
bke::CurvesGeometry & strokes_for_write()
const bke::CurvesGeometry & strokes() const
void tag_topology_changed()
std::optional< int > start_frame_at(int frame_number) const
void foreach_index(Fn &&fn) const
CurvesGeometry resample_to_evaluated(const CurvesGeometry &src_curves, const IndexMask &selection, const ResampleCurvesOutputAttributeIDs &output_ids={})
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_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)
static IndexMask get_filtered_layer_mask(const GreasePencil &grease_pencil, const std::optional< StringRef > tree_node_name_filter, const std::optional< int > layer_pass_filter, const bool layer_filter_invert, const bool layer_pass_filter_invert, IndexMaskMemory &memory)
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)
void parallel_for(const IndexRange range, const int64_t grain_size, const Function &function, const TaskSizeHints &size_hints=detail::TaskSizeHints_Static(1))
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_discrete(ID *id, StructRNA *type, void *data)
struct Material * material
char vertex_group_name[64]
struct CurveMapping * custom_curve
struct MaterialGPencilStyle * gp_style
void use_property_decorate_set(bool is_sep)
uiLayout & column(bool align)
void prop_search(PointerRNA *ptr, PropertyRNA *prop, PointerRNA *searchptr, PropertyRNA *searchprop, PropertyRNA *item_searchpropname, std::optional< blender::StringRefNull > name, int icon, bool results_are_suggestions)
void active_set(bool active)
uiLayout & row(bool align)
void use_property_split_set(bool value)
void prop(PointerRNA *ptr, PropertyRNA *prop, int index, int value, eUI_Item_Flag flag, std::optional< blender::StringRef > name_opt, int icon, std::optional< blender::StringRef > placeholder=std::nullopt)