62 float *
result,
float *
prev,
float *curr,
float *
next,
float *stroke_normal)
64 float vec[3], inter1[3], inter2[3];
100 float fading_thickness,
101 float fading_opacity)
106 float stroke_normal[3];
108 float thickness_factor;
109 float opacity_factor;
115 if (
len_v3(stroke_normal) < FLT_EPSILON) {
121 "duplicate_temp_result_array_1");
123 "duplicate_temp_result_array_2");
127 for (
int j = 0; j < gps->
totpoints; j++) {
145 for (i =
count - 1; i >= 0; i--) {
156 float offset_fac = (
count == 1) ? 0.5f : (i / (
float)(
count - 1));
159 thickness_factor =
interpf(1.0f - fading_thickness, 1.0f,
fabsf(offset_fac - fading_center));
160 opacity_factor =
interpf(1.0f - fading_opacity, 1.0f,
fabsf(offset_fac - fading_center));
163 for (
int j = 0; j < new_gps->
totpoints; j++) {
173 if (new_gps !=
NULL) {
316 N_(
"MultipleStrokes"),
317 "MultiplyGpencilModifierData",
struct bGPDstroke * BKE_gpencil_stroke_duplicate(struct bGPDstroke *gps_src, bool dup_points, bool dup_curve)
void BKE_gpencil_stroke_normal(const struct bGPDstroke *gps, float r_normal[3])
void BKE_gpencil_stroke_geometry_update(struct bGPdata *gpd, struct bGPDstroke *gps)
void BKE_gpencil_modifier_copydata_generic(const struct GpencilModifierData *md_src, struct GpencilModifierData *md_dst)
struct bGPDframe * BKE_gpencil_frame_retime_get(struct Depsgraph *depsgraph, struct Scene *scene, struct Object *ob, struct bGPDlayer *gpl)
@ eGpencilModifierTypeType_Gpencil
void(* IDWalkFunc)(void *userData, struct Object *ob, struct ID **idpoin, int cb_flag)
BLI_INLINE bool BLI_listbase_is_empty(const struct ListBase *lb)
#define LISTBASE_FOREACH(type, var, list)
void void void BLI_movelisttolist(struct ListBase *dst, struct ListBase *src) ATTR_NONNULL(1
void BLI_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
MINLINE float interpf(float a, float b, float t)
float mat4_to_scale(const float M[4][4])
MINLINE void add_v3_fl(float r[3], float f)
MINLINE float normalize_v3(float r[3])
MINLINE void sub_v3_v3v3(float r[3], const float a[3], const float b[3])
MINLINE void mul_v3_fl(float r[3], float f)
MINLINE void copy_v3_v3(float r[3], const float a[3])
void interp_v3_v3v3(float r[3], const float a[3], const float b[3], float t)
MINLINE void add_v3_v3v3(float r[3], const float a[3], const float b[3])
MINLINE void cross_v3_v3v3(float r[3], const float a[3], const float b[3])
MINLINE float len_v3(const float a[3]) ATTR_WARN_UNUSED_RESULT
#define ARRAY_SET_ITEMS(...)
#define MEMCMP_STRUCT_AFTER_IS_ZERO(struct_var, member)
#define MEMCPY_STRUCT_AFTER(struct_dst, struct_src, member)
struct Depsgraph Depsgraph
struct Scene * DEG_get_evaluated_scene(const struct Depsgraph *graph)
#define DNA_struct_default_get(struct_name)
@ GP_MULTIPLY_ENABLE_FADING
@ GP_MIRROR_INVERT_MATERIAL
@ GP_MIRROR_INVERT_LAYERPASS
struct MultiplyGpencilModifierData MultiplyGpencilModifierData
@ eGpencilModifierType_Multiply
Object is a sort of wrapper for general info.
Read Guarded memory(de)allocation.
PointerRNA * gpencil_modifier_panel_get_property_pointers(Panel *panel, PointerRNA *r_ob_ptr)
void gpencil_modifier_masking_panel_draw(Panel *panel, bool use_material, bool use_vertex)
void gpencil_modifier_panel_end(uiLayout *layout, PointerRNA *ptr)
PanelType * gpencil_modifier_subpanel_register(ARegionType *region_type, const char *name, const char *label, PanelDrawFn draw_header, PanelDrawFn draw, PanelType *parent)
PanelType * gpencil_modifier_panel_register(ARegionType *region_type, GpencilModifierType type, PanelDrawFn draw)
bool is_stroke_affected_by_modifier(Object *ob, char *mlayername, Material *material, const int mpassindex, const int gpl_passindex, const int minpoints, bGPDlayer *gpl, bGPDstroke *gps, const bool inv1, const bool inv2, const bool inv3, const bool inv4)
static void fade_panel_draw(const bContext *UNUSED(C), Panel *panel)
static void duplicateStroke(Object *ob, bGPDstroke *gps, int count, float dist, float offset, ListBase *results, int fading, float fading_center, float fading_thickness, float fading_opacity)
GpencilModifierTypeInfo modifierType_Gpencil_Multiply
static void minter_v3_v3v3v3_ref(float *result, float *prev, float *curr, float *next, float *stroke_normal)
static void mask_panel_draw(const bContext *UNUSED(C), Panel *panel)
static void foreachIDLink(GpencilModifierData *md, Object *ob, IDWalkFunc walk, void *userData)
static void generate_geometry(GpencilModifierData *md, Object *ob, bGPDlayer *gpl, bGPDframe *gpf)
static void copyData(const GpencilModifierData *md, GpencilModifierData *target)
static void panel_draw(const bContext *UNUSED(C), Panel *panel)
static void bakeModifier(Main *UNUSED(bmain), Depsgraph *UNUSED(depsgraph), GpencilModifierData *md, Object *ob)
static void panelRegister(ARegionType *region_type)
static void initData(GpencilModifierData *md)
static void generateStrokes(GpencilModifierData *md, Depsgraph *depsgraph, Object *ob)
static void fade_header_draw(const bContext *UNUSED(C), Panel *panel)
void uiLayoutSetActive(uiLayout *layout, bool active)
uiLayout * uiLayoutColumn(uiLayout *layout, bool align)
void uiLayoutSetPropSep(uiLayout *layout, bool is_sep)
void uiItemR(uiLayout *layout, struct PointerRNA *ptr, const char *propname, int flag, const char *name, int icon)
const Depsgraph * depsgraph
ccl_gpu_kernel_postfix ccl_global float int int int int float bool int offset
void(* MEM_freeN)(void *vmemh)
void *(* MEM_callocN)(size_t len, const char *str)
SymEdge< T > * prev(const SymEdge< T > *se)
int RNA_int_get(PointerRNA *ptr, const char *name)
bool RNA_boolean_get(PointerRNA *ptr, const char *name)
struct Material * material