30#include "RNA_prototypes.hh"
44 const bool has_custom_curve)
46 if (has_custom_curve) {
106 row = &
col->row(
true);
108 if (use_layer_group_filter) {
115 ICON_GREASEPENCIL_LAYER_GROUP);
124 ICON_OUTLINER_DATA_GP_LAYER);
126 sub = &row->
row(
true);
130 row = &
col->row(
true,
IFACE_(
"Layer Pass"));
132 sub = &row->
row(
true);
134 subsub = &sub->
row(
true);
150 row = &
col->row(
true);
153 row,
ptr,
"material_filter", &obj_data_ptr,
"materials", std::nullopt, ICON_SHADING_TEXTURE);
154 sub = &row->
row(
true);
157 row = &
col->row(
true,
IFACE_(
"Material Pass"));
159 sub = &row->
row(
true);
161 subsub = &sub->
row(
true);
176 row = &
col->row(
true);
178 uiItemPointerR(row,
ptr,
"vertex_group_name", &ob_ptr,
"vertex_groups", std::nullopt, ICON_NONE);
179 sub = &row->
row(
true);
191 row = &layout->
row(
true);
194 if (use_custom_curve) {
208 for (
short i = 0;
i < *totcol;
i++) {
219 const std::optional<StringRef> tree_node_name_filter,
220 const std::optional<int> layer_pass_filter,
221 const bool layer_filter_invert,
222 const bool layer_pass_filter_invert,
225 const IndexMask full_mask = grease_pencil.layers().index_range();
226 if (!tree_node_name_filter && !layer_pass_filter) {
235 const LayerGroup *filter_layer_group =
nullptr;
236 if (tree_node_name_filter) {
237 for (
const LayerGroup *group : grease_pencil.layer_groups()) {
238 if (group->name() == tree_node_name_filter.value()) {
239 filter_layer_group = group;
247 if (tree_node_name_filter) {
248 const Layer *layer = layers[layer_i];
249 if (filter_layer_group) {
250 const bool match = layer->is_child_of(*filter_layer_group);
251 if (match == layer_filter_invert) {
256 const bool match = (layer->name() == tree_node_name_filter.value());
257 if (match == layer_filter_invert) {
262 if (layer_pass_filter) {
263 const int layer_pass = layer_passes.
get(layer_i);
264 const bool match = (layer_pass == layer_pass_filter.value());
265 if (match == layer_pass_filter_invert) {
281 std::make_optional<StringRef>(influence_data.
layer_name) :
284 std::make_optional<int>(influence_data.
layer_pass) :
294 const std::optional<int> material_pass_filter,
295 const bool material_filter_invert,
296 const bool material_pass_filter_invert,
300 if (!material_filter && !material_pass_filter) {
305 const_cast<Object *
>(ob),
const_cast<Material *
>(material_filter));
314 const int material_index = stroke_materials.
get(stroke_i);
315 if (material_filter !=
nullptr) {
316 const bool match = (material_index == material_filter_index);
317 if (match == material_filter_invert) {
321 if (material_pass_filter) {
322 const int material_pass = material_pass_by_index[material_index];
323 const bool match = (material_pass == material_pass_filter.value());
324 if (match == material_pass_filter_invert) {
365 for (const int i : range) {
366 influence_weights_inverted[i] = 1.0f - influence_weights[i];
372 return influence_weights;
382 const Layer &layer = grease_pencil.layer(layer_i);
384 if (
Drawing *drawing = grease_pencil.get_drawing_at(layer, frame)) {
385 drawings.
add(drawing);
399 const Layer &layer = grease_pencil.layer(layer_i);
400 Drawing *drawing = grease_pencil.get_drawing_at(layer, frame);
401 if (drawing ==
nullptr) {
407 drawing_infos.
append({drawing, int(layer_i)});
410 return drawing_infos;
421 const Layer &layer = grease_pencil.layer(layer_i);
422 const std::optional<int> start_frame = layer.
start_frame_at(frame);
426 Drawing *drawing = grease_pencil.get_drawing_at(layer, *start_frame);
427 if (drawing ==
nullptr) {
433 drawing_infos.
append({drawing, *start_frame});
436 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)
void uiLayoutSetActive(uiLayout *layout, bool active)
void uiItemPointerR(uiLayout *layout, PointerRNA *ptr, blender::StringRefNull propname, PointerRNA *searchptr, blender::StringRefNull searchpropname, std::optional< blender::StringRefNull > name, int icon)
void uiLayoutSetPropSep(uiLayout *layout, bool is_sep)
void uiLayoutSetPropDecorate(uiLayout *layout, bool is_sep)
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 ForContainer(ContainerT container)
static VArray ForSingle(T value, const int64_t size)
Span< Key > as_span() const
void append(const T &value)
GAttributeReader lookup_or_default(StringRef attribute_id, AttrDomain domain, eCustomDataType 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
uiLayout & column(bool align)
uiLayout & row(bool align)
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)