tornavis/source/blender/makesdna/DNA_gpencil_modifier_types.h

1144 lines
31 KiB
C

/*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
/** \file
* \ingroup DNA
*/
#pragma once
#include "DNA_defs.h"
#include "DNA_listBase.h"
#ifdef __cplusplus
extern "C" {
#endif
struct LatticeDeformData;
struct ShrinkwrapTreeData;
/* WARNING ALERT! TYPEDEF VALUES ARE WRITTEN IN FILES! SO DO NOT CHANGE!
* (ONLY ADD NEW ITEMS AT THE END)
*/
typedef enum GpencilModifierType {
eGpencilModifierType_None = 0,
eGpencilModifierType_Noise = 1,
eGpencilModifierType_Subdiv = 2,
eGpencilModifierType_Thick = 3,
eGpencilModifierType_Tint = 4,
eGpencilModifierType_Array = 5,
eGpencilModifierType_Build = 6,
eGpencilModifierType_Opacity = 7,
eGpencilModifierType_Color = 8,
eGpencilModifierType_Lattice = 9,
eGpencilModifierType_Simplify = 10,
eGpencilModifierType_Smooth = 11,
eGpencilModifierType_Hook = 12,
eGpencilModifierType_Offset = 13,
eGpencilModifierType_Mirror = 14,
eGpencilModifierType_Armature = 15,
eGpencilModifierType_Time = 16,
eGpencilModifierType_Multiply = 17,
eGpencilModifierType_Texture = 18,
eGpencilModifierType_Lineart = 19,
eGpencilModifierType_Length = 20,
eGpencilModifierType_WeightProximity = 21,
eGpencilModifierType_Dash = 22,
eGpencilModifierType_WeightAngle = 23,
eGpencilModifierType_Shrinkwrap = 24,
/* Keep last. */
NUM_GREASEPENCIL_MODIFIER_TYPES,
} GpencilModifierType;
typedef enum GpencilModifierMode {
eGpencilModifierMode_Realtime = (1 << 0),
eGpencilModifierMode_Render = (1 << 1),
eGpencilModifierMode_Editmode = (1 << 2),
#ifdef DNA_DEPRECATED_ALLOW
eGpencilModifierMode_Expanded_DEPRECATED = (1 << 3),
#endif
eGpencilModifierMode_Virtual = (1 << 4),
} GpencilModifierMode;
typedef enum {
/* This modifier has been inserted in local override, and hence can be fully edited. */
eGpencilModifierFlag_OverrideLibrary_Local = (1 << 0),
} GpencilModifierFlag;
typedef struct GpencilModifierData {
struct GpencilModifierData *next, *prev;
int type, mode;
char _pad0[4];
short flag;
/* An "expand" bit for each of the modifier's (sub)panels (uiPanelDataExpansion). */
short ui_expand_flag;
/** MAX_NAME. */
char name[64];
char *error;
} GpencilModifierData;
typedef struct NoiseGpencilModifierData {
GpencilModifierData modifier;
/** Material for filtering. */
struct Material *material;
/** Layer name. */
char layername[64];
/** Material name. */
char materialname[64] DNA_DEPRECATED;
/** Optional vertexgroup name, MAX_VGROUP_NAME. */
char vgname[64];
/** Custom index for passes. */
int pass_index;
/** Several flags. */
int flag;
/** Factor of noise. */
float factor;
float factor_strength;
float factor_thickness;
float factor_uvs;
/** Noise Frequency scaling */
float noise_scale;
float noise_offset;
char _pad[4];
/** How many frames before recalculate randoms. */
int step;
/** Custom index for passes. */
int layer_pass;
/** Random seed */
int seed;
struct CurveMapping *curve_intensity;
} NoiseGpencilModifierData;
typedef enum eNoiseGpencil_Flag {
GP_NOISE_USE_RANDOM = (1 << 0),
GP_NOISE_MOD_LOCATION = (1 << 1), /* Deprecated (only for versioning). */
GP_NOISE_MOD_STRENGTH = (1 << 2), /* Deprecated (only for versioning). */
GP_NOISE_MOD_THICKNESS = (1 << 3), /* Deprecated (only for versioning). */
GP_NOISE_FULL_STROKE = (1 << 4),
GP_NOISE_CUSTOM_CURVE = (1 << 5),
GP_NOISE_INVERT_LAYER = (1 << 6),
GP_NOISE_INVERT_PASS = (1 << 7),
GP_NOISE_INVERT_VGROUP = (1 << 8),
GP_NOISE_MOD_UV = (1 << 9), /* Deprecated (only for versioning). */
GP_NOISE_INVERT_LAYERPASS = (1 << 10),
GP_NOISE_INVERT_MATERIAL = (1 << 11),
} eNoiseGpencil_Flag;
typedef struct SubdivGpencilModifierData {
GpencilModifierData modifier;
/** Material for filtering. */
struct Material *material;
/** Layer name. */
char layername[64];
/** Material name. */
char materialname[64] DNA_DEPRECATED;
/** Custom index for passes. */
int pass_index;
/** Flags. */
int flag;
/** Factor of subdivision. */
int level;
/** Custom index for passes. */
int layer_pass;
/** Type of subdivision */
short type;
char _pad[6];
} SubdivGpencilModifierData;
typedef enum eSubdivGpencil_Flag {
GP_SUBDIV_INVERT_LAYER = (1 << 1),
GP_SUBDIV_INVERT_PASS = (1 << 2),
GP_SUBDIV_INVERT_LAYERPASS = (1 << 3),
GP_SUBDIV_INVERT_MATERIAL = (1 << 4),
} eSubdivGpencil_Flag;
typedef enum eSubdivGpencil_Type {
GP_SUBDIV_CATMULL = 0,
GP_SUBDIV_SIMPLE = 1,
} eSubdivGpencil_Type;
typedef struct ThickGpencilModifierData {
GpencilModifierData modifier;
/** Material for filtering. */
struct Material *material;
/** Layer name. */
char layername[64];
/** Material name. */
char materialname[64] DNA_DEPRECATED;
/** Optional vertexgroup name, MAX_VGROUP_NAME. */
char vgname[64];
/** Custom index for passes. */
int pass_index;
/** Flags. */
int flag;
/** Relative thickness factor. */
float thickness_fac;
/** Absolute thickness override. */
int thickness;
/** Custom index for passes. */
int layer_pass;
char _pad[4];
struct CurveMapping *curve_thickness;
} ThickGpencilModifierData;
typedef enum eThickGpencil_Flag {
GP_THICK_INVERT_LAYER = (1 << 0),
GP_THICK_INVERT_PASS = (1 << 1),
GP_THICK_INVERT_VGROUP = (1 << 2),
GP_THICK_CUSTOM_CURVE = (1 << 3),
GP_THICK_NORMALIZE = (1 << 4),
GP_THICK_INVERT_LAYERPASS = (1 << 5),
GP_THICK_INVERT_MATERIAL = (1 << 6),
GP_THICK_WEIGHT_FACTOR = (1 << 7),
} eThickGpencil_Flag;
typedef struct TimeGpencilModifierData {
GpencilModifierData modifier;
/** Layer name. */
char layername[64];
/** Custom index for passes. */
int layer_pass;
/** Flags. */
int flag;
int offset;
/** Animation scale. */
float frame_scale;
int mode;
/** Start and end frame for custom range. */
int sfra, efra;
char _pad[4];
} TimeGpencilModifierData;
typedef enum eTimeGpencil_Flag {
GP_TIME_INVERT_LAYER = (1 << 0),
GP_TIME_KEEP_LOOP = (1 << 1),
GP_TIME_INVERT_LAYERPASS = (1 << 2),
GP_TIME_CUSTOM_RANGE = (1 << 3),
} eTimeGpencil_Flag;
typedef enum eTimeGpencil_Mode {
GP_TIME_MODE_NORMAL = 0,
GP_TIME_MODE_REVERSE = 1,
GP_TIME_MODE_FIX = 2,
} eTimeGpencil_Mode;
typedef enum eModifyColorGpencil_Flag {
GP_MODIFY_COLOR_BOTH = 0,
GP_MODIFY_COLOR_STROKE = 1,
GP_MODIFY_COLOR_FILL = 2,
GP_MODIFY_COLOR_HARDNESS = 3,
} eModifyColorGpencil_Flag;
typedef enum eOpacityModesGpencil_Flag {
GP_OPACITY_MODE_MATERIAL = 0,
GP_OPACITY_MODE_STRENGTH = 1,
} eOpacityModesGpencil_Flag;
typedef struct ColorGpencilModifierData {
GpencilModifierData modifier;
/** Material for filtering. */
struct Material *material;
/** Layer name. */
char layername[64];
/** Material name. */
char materialname[64] DNA_DEPRECATED;
/** Custom index for passes. */
int pass_index;
/** Flags. */
int flag;
/** HSV factors. */
float hsv[3];
/** Modify stroke, fill or both. */
char modify_color;
char _pad[3];
/** Custom index for passes. */
int layer_pass;
char _pad1[4];
struct CurveMapping *curve_intensity;
} ColorGpencilModifierData;
typedef enum eColorGpencil_Flag {
GP_COLOR_INVERT_LAYER = (1 << 1),
GP_COLOR_INVERT_PASS = (1 << 2),
GP_COLOR_INVERT_LAYERPASS = (1 << 3),
GP_COLOR_INVERT_MATERIAL = (1 << 4),
GP_COLOR_CUSTOM_CURVE = (1 << 5),
} eColorGpencil_Flag;
typedef struct OpacityGpencilModifierData {
GpencilModifierData modifier;
/** Material for filtering. */
struct Material *material;
/** Layer name. */
char layername[64];
/** Material name. */
char materialname[64] DNA_DEPRECATED;
/** Optional vertexgroup name, MAX_VGROUP_NAME. */
char vgname[64];
/** Custom index for passes. */
int pass_index;
/** Flags. */
int flag;
/** Main Opacity factor. */
float factor;
/** Modify stroke, fill or both. */
char modify_color;
char _pad[3];
/** Custom index for passes. */
int layer_pass;
float hardeness;
struct CurveMapping *curve_intensity;
} OpacityGpencilModifierData;
typedef enum eOpacityGpencil_Flag {
GP_OPACITY_INVERT_LAYER = (1 << 0),
GP_OPACITY_INVERT_PASS = (1 << 1),
GP_OPACITY_INVERT_VGROUP = (1 << 2),
GP_OPACITY_INVERT_LAYERPASS = (1 << 4),
GP_OPACITY_INVERT_MATERIAL = (1 << 5),
GP_OPACITY_CUSTOM_CURVE = (1 << 6),
GP_OPACITY_NORMALIZE = (1 << 7),
GP_OPACITY_WEIGHT_FACTOR = (1 << 8),
} eOpacityGpencil_Flag;
typedef struct ArrayGpencilModifierData {
GpencilModifierData modifier;
struct Object *object;
/** Material for filtering. */
struct Material *material;
/** Number of elements in array. */
int count;
/** Several flags. */
int flag;
/** Location increments. */
float offset[3];
/** Shift increment. */
float shift[3];
/** Random Offset. */
float rnd_offset[3];
/** Random Rotation. */
float rnd_rot[3];
/** Random Scales. */
float rnd_scale[3];
char _pad[4];
/** (first element is the index) random values. */
int seed;
/** Custom index for passes. */
int pass_index;
/** Layer name. */
char layername[64];
/** Material name. */
char materialname[64] DNA_DEPRECATED;
/** Material replace (0 keep default). */
int mat_rpl;
/** Custom index for passes. */
int layer_pass;
} ArrayGpencilModifierData;
typedef enum eArrayGpencil_Flag {
GP_ARRAY_INVERT_LAYER = (1 << 2),
GP_ARRAY_INVERT_PASS = (1 << 3),
GP_ARRAY_INVERT_LAYERPASS = (1 << 5),
GP_ARRAY_INVERT_MATERIAL = (1 << 6),
GP_ARRAY_USE_OFFSET = (1 << 7),
GP_ARRAY_USE_RELATIVE = (1 << 8),
GP_ARRAY_USE_OB_OFFSET = (1 << 9),
GP_ARRAY_UNIFORM_RANDOM_SCALE = (1 << 10),
} eArrayGpencil_Flag;
typedef struct BuildGpencilModifierData {
GpencilModifierData modifier;
/** Material for filtering. */
struct Material *material;
/** If set, restrict modifier to operating on this layer. */
char layername[64];
int pass_index;
/** Material name. */
char materialname[64] DNA_DEPRECATED;
/** Custom index for passes. */
int layer_pass;
/**
* If GP_BUILD_RESTRICT_TIME is set,
* the defines the frame range where GP frames are considered.
*/
float start_frame;
float end_frame;
/** For each pair of gp keys, number of frames before strokes start appearing. */
float start_delay;
/** For each pair of gp keys, number of frames that build effect must be completed within. */
float length;
/** (eGpencilBuild_Flag) Options for controlling modifier behavior. */
short flag;
/** (eGpencilBuild_Mode) How are strokes ordered. */
short mode;
/** (eGpencilBuild_Transition) In what order do stroke points appear/disappear. */
short transition;
/**
* (eGpencilBuild_TimeAlignment)
* For the "Concurrent" mode, when should "shorter" strips start/end.
*/
short time_alignment;
/** Factor of the stroke (used instead of frame evaluation. */
float percentage_fac;
char _pad[4];
} BuildGpencilModifierData;
typedef enum eBuildGpencil_Mode {
/* Strokes are shown one by one until all have appeared */
GP_BUILD_MODE_SEQUENTIAL = 0,
/* All strokes start at the same time */
GP_BUILD_MODE_CONCURRENT = 1,
} eBuildGpencil_Mode;
typedef enum eBuildGpencil_Transition {
/* Show in forward order */
GP_BUILD_TRANSITION_GROW = 0,
/* Hide in reverse order */
GP_BUILD_TRANSITION_SHRINK = 1,
/* Hide in forward order */
GP_BUILD_TRANSITION_FADE = 2,
} eBuildGpencil_Transition;
typedef enum eBuildGpencil_TimeAlignment {
/* All strokes start at same time */
GP_BUILD_TIMEALIGN_START = 0,
/* All strokes end at same time */
GP_BUILD_TIMEALIGN_END = 1,
/* TODO: Random Offsets, Stretch-to-Fill */
} eBuildGpencil_TimeAlignment;
typedef enum eBuildGpencil_Flag {
/* Restrict modifier to particular layer/passes? */
GP_BUILD_INVERT_LAYER = (1 << 0),
GP_BUILD_INVERT_PASS = (1 << 1),
/* Restrict modifier to only operating between the nominated frames */
GP_BUILD_RESTRICT_TIME = (1 << 2),
GP_BUILD_INVERT_LAYERPASS = (1 << 3),
/* Use a percentage instead of frame number to evaluate strokes. */
GP_BUILD_PERCENTAGE = (1 << 4),
} eBuildGpencil_Flag;
typedef struct LatticeGpencilModifierData {
GpencilModifierData modifier;
struct Object *object;
/** Material for filtering. */
struct Material *material;
/** Layer name. */
char layername[64];
/** Material name. */
char materialname[64] DNA_DEPRECATED;
/** Optional vertexgroup name, MAX_VGROUP_NAME. */
char vgname[64];
/** Custom index for passes. */
int pass_index;
/** Flags. */
int flag;
float strength;
/** Custom index for passes. */
int layer_pass;
/** Runtime only. */
struct LatticeDeformData *cache_data;
} LatticeGpencilModifierData;
typedef enum eLatticeGpencil_Flag {
GP_LATTICE_INVERT_LAYER = (1 << 0),
GP_LATTICE_INVERT_PASS = (1 << 1),
GP_LATTICE_INVERT_VGROUP = (1 << 2),
GP_LATTICE_INVERT_LAYERPASS = (1 << 3),
GP_LATTICE_INVERT_MATERIAL = (1 << 4),
} eLatticeGpencil_Flag;
typedef struct LengthGpencilModifierData {
GpencilModifierData modifier;
/** Material for filtering. */
struct Material *material;
/** Layer name. */
char layername[64];
/** Custom index for passes. */
int pass_index;
/** Flags. */
int flag;
/** Custom index for passes. */
int layer_pass;
/** Length. */
float start_fac, end_fac;
/** Random length factors. */
float rand_start_fac, rand_end_fac, rand_offset;
/** Overshoot trajectory factor. */
float overshoot_fac;
/** (first element is the index) random values. */
int seed;
/** How many frames before recalculate randoms. */
int step;
/** Modifier mode. */
int mode;
char _pad[4];
/* Curvature parameters. */
float point_density;
float segment_influence;
float max_angle;
} LengthGpencilModifierData;
typedef enum eLengthGpencil_Flag {
GP_LENGTH_INVERT_LAYER = (1 << 0),
GP_LENGTH_INVERT_PASS = (1 << 1),
GP_LENGTH_INVERT_LAYERPASS = (1 << 2),
GP_LENGTH_INVERT_MATERIAL = (1 << 3),
GP_LENGTH_USE_CURVATURE = (1 << 4),
GP_LENGTH_INVERT_CURVATURE = (1 << 5),
GP_LENGTH_USE_RANDOM = (1 << 6),
} eLengthGpencil_Flag;
typedef enum eLengthGpencil_Type {
GP_LENGTH_RELATIVE = 0,
GP_LENGTH_ABSOLUTE = 1,
} eLengthGpencil_Type;
typedef struct DashGpencilModifierSegment {
char name[64];
/* For path reference. */
struct DashGpencilModifierData *dmd;
int dash;
int gap;
float radius;
float opacity;
int mat_nr;
int _pad;
} DashGpencilModifierSegment;
typedef struct DashGpencilModifierData {
GpencilModifierData modifier;
/** Material for filtering. */
struct Material *material;
/** Layer name. */
char layername[64];
/** Custom index for passes. */
int pass_index;
/** Flags. */
int flag;
/** Custom index for passes. */
int layer_pass;
int dash_offset;
DashGpencilModifierSegment *segments;
int segments_len;
int segment_active_index;
} DashGpencilModifierData;
typedef struct MirrorGpencilModifierData {
GpencilModifierData modifier;
struct Object *object;
/** Material for filtering. */
struct Material *material;
/** Layer name. */
char layername[64];
/** Material name. */
char materialname[64] DNA_DEPRECATED;
/** Custom index for passes. */
int pass_index;
/** Flags. */
int flag;
/** Custom index for passes. */
int layer_pass;
char _pad[4];
} MirrorGpencilModifierData;
typedef enum eMirrorGpencil_Flag {
GP_MIRROR_INVERT_LAYER = (1 << 0),
GP_MIRROR_INVERT_PASS = (1 << 1),
GP_MIRROR_CLIPPING = (1 << 2),
GP_MIRROR_AXIS_X = (1 << 3),
GP_MIRROR_AXIS_Y = (1 << 4),
GP_MIRROR_AXIS_Z = (1 << 5),
GP_MIRROR_INVERT_LAYERPASS = (1 << 6),
GP_MIRROR_INVERT_MATERIAL = (1 << 7),
} eMirrorGpencil_Flag;
typedef struct HookGpencilModifierData {
GpencilModifierData modifier;
struct Object *object;
/** Material for filtering. */
struct Material *material;
/** Optional name of bone target, MAX_ID_NAME-2. */
char subtarget[64];
/** Layer name. */
char layername[64];
/** Material name. */
char materialname[64] DNA_DEPRECATED;
/** Optional vertexgroup name, MAX_VGROUP_NAME. */
char vgname[64];
/** Custom index for passes. */
int pass_index;
/** Custom index for passes. */
int layer_pass;
char _pad[4];
int flag;
/** Use enums from WarpGpencilModifier (exact same functionality). */
char falloff_type;
char _pad1[3];
/** Matrix making current transform unmodified. */
float parentinv[4][4];
/** Visualization of hook. */
float cent[3];
/** If not zero, falloff is distance where influence zero. */
float falloff;
float force;
struct CurveMapping *curfalloff;
} HookGpencilModifierData;
typedef enum eHookGpencil_Flag {
GP_HOOK_INVERT_LAYER = (1 << 0),
GP_HOOK_INVERT_PASS = (1 << 1),
GP_HOOK_INVERT_VGROUP = (1 << 2),
GP_HOOK_UNIFORM_SPACE = (1 << 3),
GP_HOOK_INVERT_LAYERPASS = (1 << 4),
GP_HOOK_INVERT_MATERIAL = (1 << 5),
} eHookGpencil_Flag;
typedef enum eHookGpencil_Falloff {
eGPHook_Falloff_None = 0,
eGPHook_Falloff_Curve = 1,
eGPHook_Falloff_Sharp = 2,
eGPHook_Falloff_Smooth = 3,
eGPHook_Falloff_Root = 4,
eGPHook_Falloff_Linear = 5,
eGPHook_Falloff_Const = 6,
eGPHook_Falloff_Sphere = 7,
eGPHook_Falloff_InvSquare = 8,
} eHookGpencil_Falloff;
typedef struct SimplifyGpencilModifierData {
GpencilModifierData modifier;
/** Material for filtering. */
struct Material *material;
/** Layer name. */
char layername[64];
/** Material name. */
char materialname[64] DNA_DEPRECATED;
/** Custom index for passes. */
int pass_index;
/** Flags. */
int flag;
/** Factor of simplify. */
float factor;
/** Type of simplify. */
short mode;
/** Every n vertex to keep. */
short step;
/** Custom index for passes. */
int layer_pass;
/** Sample length */
float length;
/** Merge distance */
float distance;
char _pad[4];
} SimplifyGpencilModifierData;
typedef enum eSimplifyGpencil_Flag {
GP_SIMPLIFY_INVERT_LAYER = (1 << 0),
GP_SIMPLIFY_INVERT_PASS = (1 << 1),
GP_SIMPLIFY_INVERT_LAYERPASS = (1 << 2),
GP_SIMPLIFY_INVERT_MATERIAL = (1 << 3),
} eSimplifyGpencil_Flag;
typedef enum eSimplifyGpencil_Mode {
/* Keep only one vertex every n vertices */
GP_SIMPLIFY_FIXED = 0,
/* Use RDP algorithm */
GP_SIMPLIFY_ADAPTIVE = 1,
/* Sample the stroke using a fixed length */
GP_SIMPLIFY_SAMPLE = 2,
/* Sample the stroke doing vertex merge */
GP_SIMPLIFY_MERGE = 3,
} eSimplifyGpencil_Mode;
typedef struct OffsetGpencilModifierData {
GpencilModifierData modifier;
/** Material for filtering. */
struct Material *material;
/** Layer name. */
char layername[64];
/** Material name. */
char materialname[64] DNA_DEPRECATED;
/** Optional vertexgroup name, MAX_VGROUP_NAME. */
char vgname[64];
/** Custom index for passes. */
int pass_index;
/** Flags. */
int flag;
float loc[3];
float rot[3];
float scale[3];
/** Random Offset. */
float rnd_offset[3];
/** Random Rotation. */
float rnd_rot[3];
/** Random Scales. */
float rnd_scale[3];
/** (first element is the index) random values. */
int seed;
/** Custom index for passes. */
int layer_pass;
} OffsetGpencilModifierData;
typedef enum eOffsetGpencil_Flag {
GP_OFFSET_INVERT_LAYER = (1 << 0),
GP_OFFSET_INVERT_PASS = (1 << 1),
GP_OFFSET_INVERT_VGROUP = (1 << 2),
GP_OFFSET_INVERT_LAYERPASS = (1 << 3),
GP_OFFSET_INVERT_MATERIAL = (1 << 4),
GP_OFFSET_UNIFORM_RANDOM_SCALE = (1 << 5),
} eOffsetGpencil_Flag;
typedef struct SmoothGpencilModifierData {
GpencilModifierData modifier;
/** Material for filtering. */
struct Material *material;
/** Layer name. */
char layername[64];
/** Material name. */
char materialname[64] DNA_DEPRECATED;
/** Optional vertexgroup name, MAX_VGROUP_NAME. */
char vgname[64];
/** Custom index for passes. */
int pass_index;
/** Several flags. */
int flag;
/** Factor of smooth. */
float factor;
/** How many times apply smooth. */
int step;
/** Custom index for passes. */
int layer_pass;
char _pad1[4];
struct CurveMapping *curve_intensity;
} SmoothGpencilModifierData;
typedef enum eSmoothGpencil_Flag {
GP_SMOOTH_MOD_LOCATION = (1 << 0),
GP_SMOOTH_MOD_STRENGTH = (1 << 1),
GP_SMOOTH_MOD_THICKNESS = (1 << 2),
GP_SMOOTH_INVERT_LAYER = (1 << 3),
GP_SMOOTH_INVERT_PASS = (1 << 4),
GP_SMOOTH_INVERT_VGROUP = (1 << 5),
GP_SMOOTH_MOD_UV = (1 << 6),
GP_SMOOTH_INVERT_LAYERPASS = (1 << 7),
GP_SMOOTH_INVERT_MATERIAL = (1 << 4),
GP_SMOOTH_CUSTOM_CURVE = (1 << 8),
} eSmoothGpencil_Flag;
typedef struct ArmatureGpencilModifierData {
GpencilModifierData modifier;
/** #eArmature_DeformFlag use instead of #bArmature.deformflag. */
short deformflag, multi;
int _pad;
struct Object *object;
/** Stored input of previous modifier, for vertex-group blending. */
float (*vert_coords_prev)[3];
/** MAX_VGROUP_NAME. */
char vgname[64];
} ArmatureGpencilModifierData;
typedef struct MultiplyGpencilModifierData {
GpencilModifierData modifier;
/** Material for filtering. */
struct Material *material;
/** Layer name. */
char layername[64];
/** Material name. */
char materialname[64] DNA_DEPRECATED;
/** Custom index for passes. */
int pass_index;
/** Flags. */
int flag;
/** Custom index for passes. */
int layer_pass;
int flags;
int duplications;
float distance;
/* -1:inner 0:middle 1:outer */
float offset;
float fading_center;
float fading_thickness;
float fading_opacity;
} MultiplyGpencilModifierData;
typedef enum eMultiplyGpencil_Flag {
/* GP_MULTIPLY_ENABLE_ANGLE_SPLITTING = (1 << 1), Deprecated. */
GP_MULTIPLY_ENABLE_FADING = (1 << 2),
} eMultiplyGpencil_Flag;
typedef struct TintGpencilModifierData {
GpencilModifierData modifier;
struct Object *object;
/** Material for filtering. */
struct Material *material;
/** Layer name. */
char layername[64];
/** Material name. */
char materialname[64] DNA_DEPRECATED;
/** Optional vertexgroup name, MAX_VGROUP_NAME. */
char vgname[64];
/** Custom index for passes. */
int pass_index;
/** Custom index for passes. */
int layer_pass;
/** Flags. */
int flag;
/** Mode (Stroke/Fill/Both). */
int mode;
float factor;
float radius;
/** Simple Tint color. */
float rgb[3];
/** Type of Tint. */
int type;
struct CurveMapping *curve_intensity;
struct ColorBand *colorband;
} TintGpencilModifierData;
typedef enum eTintGpencil_Type {
GP_TINT_UNIFORM = 0,
GP_TINT_GRADIENT = 1,
} eTintGpencil_Type;
typedef enum eTintGpencil_Flag {
GP_TINT_INVERT_LAYER = (1 << 0),
GP_TINT_INVERT_PASS = (1 << 1),
GP_TINT_INVERT_VGROUP = (1 << 2),
GP_TINT_INVERT_LAYERPASS = (1 << 4),
GP_TINT_INVERT_MATERIAL = (1 << 5),
GP_TINT_CUSTOM_CURVE = (1 << 6),
GP_TINT_WEIGHT_FACTOR = (1 << 7),
} eTintGpencil_Flag;
typedef struct TextureGpencilModifierData {
GpencilModifierData modifier;
/** Material for filtering. */
struct Material *material;
/** Layer name. */
char layername[64];
/** Material name. */
char materialname[64] DNA_DEPRECATED;
/** Optional vertexgroup name, MAX_VGROUP_NAME. */
char vgname[64];
/** Custom index for passes. */
int pass_index;
/** Flags. */
int flag;
/** Offset value to add to uv_fac. */
float uv_offset;
float uv_scale;
float fill_rotation;
float fill_offset[2];
float fill_scale;
/** Custom index for passes. */
int layer_pass;
/** Texture fit options. */
short fit_method;
short mode;
/** Dot texture rotation */
float alignment_rotation;
char _pad[4];
} TextureGpencilModifierData;
typedef enum eTextureGpencil_Flag {
GP_TEX_INVERT_LAYER = (1 << 0),
GP_TEX_INVERT_PASS = (1 << 1),
GP_TEX_INVERT_VGROUP = (1 << 2),
GP_TEX_INVERT_LAYERPASS = (1 << 3),
GP_TEX_INVERT_MATERIAL = (1 << 4),
} eTextureGpencil_Flag;
/* Texture->fit_method */
typedef enum eTextureGpencil_Fit {
GP_TEX_FIT_STROKE = 0,
GP_TEX_CONSTANT_LENGTH = 1,
} eTextureGpencil_Fit;
/* Texture->mode */
typedef enum eTextureGpencil_Mode {
STROKE = 0,
FILL = 1,
STROKE_AND_FILL = 2,
} eTextureGpencil_Mode;
typedef struct WeightProxGpencilModifierData {
GpencilModifierData modifier;
/** Target vertexgroup name, MAX_VGROUP_NAME. */
char target_vgname[64];
/** Material for filtering. */
struct Material *material;
/** Layer name. */
char layername[64];
/** Optional vertexgroup filter name, MAX_VGROUP_NAME. */
char vgname[64];
/** Custom index for passes. */
int pass_index;
/** Flags. */
int flag;
/** Minimum valid weight (clamp value). */
float min_weight;
/** Custom index for passes. */
int layer_pass;
/** Start/end distances. */
float dist_start;
float dist_end;
/** Reference object */
struct Object *object;
} WeightProxGpencilModifierData;
typedef struct WeightAngleGpencilModifierData {
GpencilModifierData modifier;
/** Target vertexgroup name, MAX_VGROUP_NAME. */
char target_vgname[64];
/** Material for filtering. */
struct Material *material;
/** Layer name. */
char layername[64];
/** Optional vertexgroup filter name, MAX_VGROUP_NAME. */
char vgname[64];
/** Custom index for passes. */
int pass_index;
/** Flags. */
int flag;
/** Minimum valid weight (clamp value). */
float min_weight;
/** Custom index for passes. */
int layer_pass;
/** Axis. */
short axis;
/** Space (Local/World). */
short space;
/** Angle */
float angle;
} WeightAngleGpencilModifierData;
typedef enum eWeightGpencil_Flag {
GP_WEIGHT_INVERT_LAYER = (1 << 0),
GP_WEIGHT_INVERT_PASS = (1 << 1),
GP_WEIGHT_INVERT_VGROUP = (1 << 2),
GP_WEIGHT_INVERT_LAYERPASS = (1 << 3),
GP_WEIGHT_INVERT_MATERIAL = (1 << 4),
GP_WEIGHT_MULTIPLY_DATA = (1 << 5),
GP_WEIGHT_INVERT_OUTPUT = (1 << 6),
} eWeightGpencil_Flag;
typedef enum eGpencilModifierSpace {
GP_SPACE_LOCAL = 0,
GP_SPACE_WORLD = 1,
} eGpencilModifierSpace;
typedef enum eLineartGpencilModifierSource {
LRT_SOURCE_COLLECTION = 0,
LRT_SOURCE_OBJECT = 1,
LRT_SOURCE_SCENE = 2,
} eLineartGpencilModifierSource;
/* This enum is for modifier internal state only. */
typedef enum eLineArtGPencilModifierFlags {
/* These two moved to #eLineartMainFlags to keep consistent with flag variable purpose. */
/* LRT_GPENCIL_INVERT_SOURCE_VGROUP = (1 << 0), */
/* LRT_GPENCIL_MATCH_OUTPUT_VGROUP = (1 << 1), */
LRT_GPENCIL_BINARY_WEIGHTS = (1 << 2) /* Deprecated, this is removed for lack of use case. */,
LRT_GPENCIL_IS_BAKED = (1 << 3),
LRT_GPENCIL_USE_CACHE = (1 << 4),
LRT_GPENCIL_OFFSET_TOWARDS_CUSTOM_CAMERA = (1 << 5),
LRT_GPENCIL_INVERT_COLLECTION = (1 << 6),
} eLineArtGPencilModifierFlags;
typedef enum eLineartGpencilMaskSwitches {
LRT_GPENCIL_MATERIAL_MASK_ENABLE = (1 << 0),
/** When set, material mask bit comparisons are done with bit wise "AND" instead of "OR". */
LRT_GPENCIL_MATERIAL_MASK_MATCH = (1 << 1),
LRT_GPENCIL_INTERSECTION_MATCH = (1 << 2),
} eLineartGpencilMaskSwitches;
struct LineartCache;
struct LineartCache;
typedef struct LineartGpencilModifierData {
GpencilModifierData modifier;
/** Line type enable flags, bits in #eLineartEdgeFlag. */
short edge_types;
/** Object or Collection, from #eLineartGpencilModifierSource. */
char source_type;
char use_multiple_levels;
short level_start;
short level_end;
struct Object *source_camera;
struct Object *source_object;
struct Collection *source_collection;
struct Material *target_material;
char target_layer[64];
/**
* These two variables are to pass on vertex group information from mesh to strokes.
* `vgname` specifies which vertex groups our strokes from source_vertex_group will go to.
*/
char source_vertex_group[64];
char vgname[64];
/**
* Camera focal length is divided by `1 + overscan`, before calculation, which give a wider FOV,
* this doesn't change coordinates range internally (-1, 1), but makes the calculated frame
* bigger than actual output. This is for the easier shifting calculation. A value of 0.5 means
* the "internal" focal length become 2/3 of the actual camera.
*/
float overscan;
float opacity;
short thickness;
unsigned char mask_switches; /* #eLineartGpencilMaskSwitches */
unsigned char material_mask_bits;
unsigned char intersection_mask;
char _pad[3];
/** `0..1` range for cosine angle */
float crease_threshold;
/** `0..PI` angle, for splitting strokes at sharp points. */
float angle_splitting_threshold;
/** Strength for smoothing jagged chains. */
float chain_smooth_tolerance;
/* CPU mode */
float chaining_image_threshold;
/* Ported from SceneLineArt flags. */
int calculation_flags;
/* #eLineArtGPencilModifierFlags, modifier internal state. */
int flags;
/* Move strokes towards camera to avoid clipping while preserve depth for the viewport. */
float stroke_depth_offset;
/* Runtime data. */
/* Because we can potentially only compute features lines once per modifier stack (Use Cache), we
* need to have these override values to ensure that we have the data we need is computed and
* stored in the cache. */
char level_start_override;
char level_end_override;
short edge_types_override;
struct LineartCache *cache;
/* Keep a pointer to the render buffer so we can call destroy from ModifierData. */
struct LineartRenderBuffer *render_buffer_ptr;
} LineartGpencilModifierData;
typedef struct ShrinkwrapGpencilModifierData {
GpencilModifierData modifier;
/** Shrink target. */
struct Object *target;
/** Additional shrink target. */
struct Object *aux_target;
/** Material for filtering. */
struct Material *material;
/** Layer name. */
char layername[64];
/** Optional vertexgroup filter name, MAX_VGROUP_NAME. */
char vgname[64];
/** Custom index for passes. */
int pass_index;
/** Flags. */
int flag;
/** Custom index for passes. */
int layer_pass;
/** Distance offset to keep from mesh/projection point. */
float keep_dist;
/** Shrink type projection. */
short shrink_type;
/** Shrink options. */
char shrink_opts;
/** Shrink to surface mode. */
char shrink_mode;
/** Limit the projection ray cast. */
float proj_limit;
/** Axis to project over. */
char proj_axis;
/** If using projection over vertex normal this controls the level of subsurface that must be
* done before getting the vertex coordinates and normal
*/
char subsurf_levels;
char _pad[6];
/** Factor of smooth. */
float smooth_factor;
/** How many times apply smooth. */
int smooth_step;
/** Runtime only. */
struct ShrinkwrapTreeData *cache_data;
} ShrinkwrapGpencilModifierData;
typedef enum eShrinkwrapGpencil_Flag {
GP_SHRINKWRAP_INVERT_LAYER = (1 << 0),
GP_SHRINKWRAP_INVERT_PASS = (1 << 1),
GP_SHRINKWRAP_INVERT_LAYERPASS = (1 << 3),
GP_SHRINKWRAP_INVERT_MATERIAL = (1 << 4),
/* Keep next bit as is to be equals to mesh modifier flag to reuse functions. */
GP_SHRINKWRAP_INVERT_VGROUP = (1 << 6),
} eShrinkwrapGpencil_Flag;
#ifdef __cplusplus
}
#endif