tornavis/source/blender/makesdna/DNA_linestyle_types.h

680 lines
16 KiB
C

/* SPDX-FileCopyrightText: 2010 Blender Authors
*
* SPDX-License-Identifier: GPL-2.0-or-later */
#pragma once
/** \file
* \ingroup DNA
*/
#include "DNA_ID.h"
#include "DNA_listBase.h"
#ifndef MAX_MTEX
# define MAX_MTEX 18
#endif
/* texco (also in DNA_material_types.h) */
#define TEXCO_STROKE 16 /* actually its UV */
struct AnimData;
struct ColorBand;
struct CurveMapping;
struct MTex;
struct Object;
struct bNodeTree;
typedef struct LineStyleModifier {
DNA_DEFINE_CXX_METHODS(LineStyleModifier)
struct LineStyleModifier *next, *prev;
/** MAX_NAME. */
char name[64];
int type;
float influence;
int flags;
int blend;
} LineStyleModifier;
/** #LineStyleModifier::type */
enum {
LS_MODIFIER_ALONG_STROKE = 1,
LS_MODIFIER_DISTANCE_FROM_CAMERA = 2,
LS_MODIFIER_DISTANCE_FROM_OBJECT = 3,
LS_MODIFIER_MATERIAL = 4,
LS_MODIFIER_SAMPLING = 5,
LS_MODIFIER_BEZIER_CURVE = 6,
LS_MODIFIER_SINUS_DISPLACEMENT = 7,
LS_MODIFIER_SPATIAL_NOISE = 8,
LS_MODIFIER_PERLIN_NOISE_1D = 9,
LS_MODIFIER_PERLIN_NOISE_2D = 10,
LS_MODIFIER_BACKBONE_STRETCHER = 11,
LS_MODIFIER_TIP_REMOVER = 12,
LS_MODIFIER_CALLIGRAPHY = 13,
LS_MODIFIER_POLYGONIZATION = 14,
LS_MODIFIER_GUIDING_LINES = 15,
LS_MODIFIER_BLUEPRINT = 16,
LS_MODIFIER_2D_OFFSET = 17,
LS_MODIFIER_2D_TRANSFORM = 18,
LS_MODIFIER_TANGENT = 19,
LS_MODIFIER_NOISE = 20,
LS_MODIFIER_CREASE_ANGLE = 21,
LS_MODIFIER_SIMPLIFICATION = 22,
LS_MODIFIER_CURVATURE_3D = 23,
LS_MODIFIER_NUM = 24,
};
/** #LineStyleModifier::flags */
enum {
LS_MODIFIER_ENABLED = 1,
LS_MODIFIER_EXPANDED = 2,
};
/** Flags (for color) */
enum {
LS_MODIFIER_USE_RAMP = 1,
};
/** Flags (for alpha & thickness) */
enum {
LS_MODIFIER_USE_CURVE = 1,
LS_MODIFIER_INVERT = 2,
};
/** Flags (for asymmetric thickness application). */
enum {
LS_THICKNESS_ASYMMETRIC = 1,
};
/** Blend (for alpha & thickness). */
enum {
LS_VALUE_BLEND = 0,
LS_VALUE_ADD = 1,
LS_VALUE_MULT = 2,
LS_VALUE_SUB = 3,
LS_VALUE_DIV = 4,
LS_VALUE_DIFF = 5,
LS_VALUE_MIN = 6,
LS_VALUE_MAX = 7,
};
/* Along Stroke modifiers */
typedef struct LineStyleColorModifier_AlongStroke {
DNA_DEFINE_CXX_METHODS(LineStyleColorModifier_AlongStroke)
struct LineStyleModifier modifier;
struct ColorBand *color_ramp;
} LineStyleColorModifier_AlongStroke;
typedef struct LineStyleAlphaModifier_AlongStroke {
DNA_DEFINE_CXX_METHODS(LineStyleAlphaModifier_AlongStroke)
struct LineStyleModifier modifier;
struct CurveMapping *curve;
int flags;
char _pad[4];
} LineStyleAlphaModifier_AlongStroke;
typedef struct LineStyleThicknessModifier_AlongStroke {
DNA_DEFINE_CXX_METHODS(LineStyleThicknessModifier_AlongStroke)
struct LineStyleModifier modifier;
struct CurveMapping *curve;
int flags;
float value_min, value_max;
char _pad[4];
} LineStyleThicknessModifier_AlongStroke;
/* Distance from Camera modifiers */
typedef struct LineStyleColorModifier_DistanceFromCamera {
DNA_DEFINE_CXX_METHODS(LineStyleColorModifier_DistanceFromCamera)
struct LineStyleModifier modifier;
struct ColorBand *color_ramp;
float range_min, range_max;
} LineStyleColorModifier_DistanceFromCamera;
typedef struct LineStyleAlphaModifier_DistanceFromCamera {
DNA_DEFINE_CXX_METHODS(LineStyleAlphaModifier_DistanceFromCamera)
struct LineStyleModifier modifier;
struct CurveMapping *curve;
int flags;
float range_min, range_max;
char _pad[4];
} LineStyleAlphaModifier_DistanceFromCamera;
typedef struct LineStyleThicknessModifier_DistanceFromCamera {
DNA_DEFINE_CXX_METHODS(LineStyleThicknessModifier_DistanceFromCamera)
struct LineStyleModifier modifier;
struct CurveMapping *curve;
int flags;
float range_min, range_max;
float value_min, value_max;
char _pad[4];
} LineStyleThicknessModifier_DistanceFromCamera;
/* Distance from Object modifiers */
typedef struct LineStyleColorModifier_DistanceFromObject {
DNA_DEFINE_CXX_METHODS(LineStyleColorModifier_DistanceFromObject)
struct LineStyleModifier modifier;
struct Object *target;
struct ColorBand *color_ramp;
float range_min, range_max;
} LineStyleColorModifier_DistanceFromObject;
typedef struct LineStyleAlphaModifier_DistanceFromObject {
DNA_DEFINE_CXX_METHODS(LineStyleAlphaModifier_DistanceFromObject)
struct LineStyleModifier modifier;
struct Object *target;
struct CurveMapping *curve;
int flags;
float range_min, range_max;
char _pad[4];
} LineStyleAlphaModifier_DistanceFromObject;
typedef struct LineStyleThicknessModifier_DistanceFromObject {
DNA_DEFINE_CXX_METHODS(LineStyleThicknessModifier_DistanceFromObject)
struct LineStyleModifier modifier;
struct Object *target;
struct CurveMapping *curve;
int flags;
float range_min, range_max;
float value_min, value_max;
char _pad[4];
} LineStyleThicknessModifier_DistanceFromObject;
/* 3D curvature modifiers */
typedef struct LineStyleColorModifier_Curvature_3D {
DNA_DEFINE_CXX_METHODS(LineStyleColorModifier_Curvature_3D)
struct LineStyleModifier modifier;
float min_curvature, max_curvature;
struct ColorBand *color_ramp;
float range_min, range_max;
} LineStyleColorModifier_Curvature_3D;
typedef struct LineStyleAlphaModifier_Curvature_3D {
DNA_DEFINE_CXX_METHODS(LineStyleAlphaModifier_Curvature_3D)
struct LineStyleModifier modifier;
struct CurveMapping *curve;
int flags;
float min_curvature, max_curvature;
char _pad[4];
} LineStyleAlphaModifier_Curvature_3D;
typedef struct LineStyleThicknessModifier_Curvature_3D {
DNA_DEFINE_CXX_METHODS(LineStyleThicknessModifier_Curvature_3D)
struct LineStyleModifier modifier;
struct CurveMapping *curve;
int flags;
char _pad[4];
float min_curvature, max_curvature;
float min_thickness, max_thickness;
} LineStyleThicknessModifier_Curvature_3D;
/* Noise modifiers (for color, alpha and thickness) */
typedef struct LineStyleColorModifier_Noise {
DNA_DEFINE_CXX_METHODS(LineStyleColorModifier_Noise)
struct LineStyleModifier modifier;
struct ColorBand *color_ramp;
float period, amplitude;
int seed;
char _pad[4];
} LineStyleColorModifier_Noise;
typedef struct LineStyleAlphaModifier_Noise {
DNA_DEFINE_CXX_METHODS(LineStyleAlphaModifier_Noise)
struct LineStyleModifier modifier;
struct CurveMapping *curve;
int flags;
float period, amplitude;
int seed;
} LineStyleAlphaModifier_Noise;
typedef struct LineStyleThicknessModifier_Noise {
DNA_DEFINE_CXX_METHODS(LineStyleThicknessModifier_Noise)
struct LineStyleModifier modifier;
float period, amplitude;
int flags;
int seed;
} LineStyleThicknessModifier_Noise;
/* Crease Angle modifiers */
typedef struct LineStyleColorModifier_CreaseAngle {
DNA_DEFINE_CXX_METHODS(LineStyleColorModifier_CreaseAngle)
struct LineStyleModifier modifier;
struct ColorBand *color_ramp;
float min_angle, max_angle;
} LineStyleColorModifier_CreaseAngle;
typedef struct LineStyleAlphaModifier_CreaseAngle {
DNA_DEFINE_CXX_METHODS(LineStyleAlphaModifier_CreaseAngle)
struct LineStyleModifier modifier;
struct CurveMapping *curve;
int flags;
float min_angle, max_angle;
char _pad[4];
} LineStyleAlphaModifier_CreaseAngle;
typedef struct LineStyleThicknessModifier_CreaseAngle {
DNA_DEFINE_CXX_METHODS(LineStyleThicknessModifier_CreaseAngle)
struct LineStyleModifier modifier;
struct CurveMapping *curve;
int flags;
char _pad[4];
float min_angle, max_angle;
float min_thickness, max_thickness;
} LineStyleThicknessModifier_CreaseAngle;
/* Tangent modifiers */
typedef struct LineStyleColorModifier_Tangent {
DNA_DEFINE_CXX_METHODS(LineStyleColorModifier_Tangent)
struct LineStyleModifier modifier;
struct ColorBand *color_ramp;
} LineStyleColorModifier_Tangent;
typedef struct LineStyleAlphaModifier_Tangent {
DNA_DEFINE_CXX_METHODS(LineStyleAlphaModifier_Tangent)
struct LineStyleModifier modifier;
struct CurveMapping *curve;
int flags;
char _pad[4];
} LineStyleAlphaModifier_Tangent;
typedef struct LineStyleThicknessModifier_Tangent {
DNA_DEFINE_CXX_METHODS(LineStyleThicknessModifier_Tangent)
struct LineStyleModifier modifier;
struct CurveMapping *curve;
int flags;
float min_thickness, max_thickness;
char _pad[4];
} LineStyleThicknessModifier_Tangent;
/* Material modifiers */
/* mat_attr */
enum {
LS_MODIFIER_MATERIAL_DIFF = 1,
LS_MODIFIER_MATERIAL_DIFF_R = 2,
LS_MODIFIER_MATERIAL_DIFF_G = 3,
LS_MODIFIER_MATERIAL_DIFF_B = 4,
LS_MODIFIER_MATERIAL_SPEC = 5,
LS_MODIFIER_MATERIAL_SPEC_R = 6,
LS_MODIFIER_MATERIAL_SPEC_G = 7,
LS_MODIFIER_MATERIAL_SPEC_B = 8,
LS_MODIFIER_MATERIAL_SPEC_HARD = 9,
LS_MODIFIER_MATERIAL_ALPHA = 10,
LS_MODIFIER_MATERIAL_LINE = 11,
LS_MODIFIER_MATERIAL_LINE_R = 12,
LS_MODIFIER_MATERIAL_LINE_G = 13,
LS_MODIFIER_MATERIAL_LINE_B = 14,
LS_MODIFIER_MATERIAL_LINE_A = 15,
};
typedef struct LineStyleColorModifier_Material {
DNA_DEFINE_CXX_METHODS(LineStyleColorModifier_Material)
struct LineStyleModifier modifier;
struct ColorBand *color_ramp;
int flags;
int mat_attr;
} LineStyleColorModifier_Material;
typedef struct LineStyleAlphaModifier_Material {
DNA_DEFINE_CXX_METHODS(LineStyleAlphaModifier_Material)
struct LineStyleModifier modifier;
struct CurveMapping *curve;
int flags;
int mat_attr;
} LineStyleAlphaModifier_Material;
typedef struct LineStyleThicknessModifier_Material {
DNA_DEFINE_CXX_METHODS(LineStyleThicknessModifier_Material)
struct LineStyleModifier modifier;
struct CurveMapping *curve;
int flags;
float value_min, value_max;
int mat_attr;
} LineStyleThicknessModifier_Material;
/* Geometry modifiers */
typedef struct LineStyleGeometryModifier_Sampling {
DNA_DEFINE_CXX_METHODS(LineStyleGeometryModifier_Sampling)
struct LineStyleModifier modifier;
float sampling;
char _pad[4];
} LineStyleGeometryModifier_Sampling;
typedef struct LineStyleGeometryModifier_BezierCurve {
DNA_DEFINE_CXX_METHODS(LineStyleGeometryModifier_BezierCurve)
struct LineStyleModifier modifier;
float error;
char _pad[4];
} LineStyleGeometryModifier_BezierCurve;
typedef struct LineStyleGeometryModifier_SinusDisplacement {
DNA_DEFINE_CXX_METHODS(LineStyleGeometryModifier_SinusDisplacement)
struct LineStyleModifier modifier;
float wavelength, amplitude, phase;
char _pad[4];
} LineStyleGeometryModifier_SinusDisplacement;
/** #LineStyleGeometryModifier_SpatialNoise::flags */
enum {
LS_MODIFIER_SPATIAL_NOISE_SMOOTH = 1,
LS_MODIFIER_SPATIAL_NOISE_PURERANDOM = 2,
};
typedef struct LineStyleGeometryModifier_SpatialNoise {
DNA_DEFINE_CXX_METHODS(LineStyleGeometryModifier_SpatialNoise)
struct LineStyleModifier modifier;
float amplitude, scale;
unsigned int octaves;
int flags;
} LineStyleGeometryModifier_SpatialNoise;
typedef struct LineStyleGeometryModifier_PerlinNoise1D {
DNA_DEFINE_CXX_METHODS(LineStyleGeometryModifier_PerlinNoise1D)
struct LineStyleModifier modifier;
float frequency, amplitude;
/** In radians. */
float angle;
unsigned int octaves;
int seed;
char _pad1[4];
} LineStyleGeometryModifier_PerlinNoise1D;
typedef struct LineStyleGeometryModifier_PerlinNoise2D {
DNA_DEFINE_CXX_METHODS(LineStyleGeometryModifier_PerlinNoise2D)
struct LineStyleModifier modifier;
float frequency, amplitude;
/** In radians. */
float angle;
unsigned int octaves;
int seed;
char _pad1[4];
} LineStyleGeometryModifier_PerlinNoise2D;
typedef struct LineStyleGeometryModifier_BackboneStretcher {
DNA_DEFINE_CXX_METHODS(LineStyleGeometryModifier_BackboneStretcher)
struct LineStyleModifier modifier;
float backbone_length;
char _pad[4];
} LineStyleGeometryModifier_BackboneStretcher;
typedef struct LineStyleGeometryModifier_TipRemover {
DNA_DEFINE_CXX_METHODS(LineStyleGeometryModifier_TipRemover)
struct LineStyleModifier modifier;
float tip_length;
char _pad[4];
} LineStyleGeometryModifier_TipRemover;
typedef struct LineStyleGeometryModifier_Polygonalization {
DNA_DEFINE_CXX_METHODS(LineStyleGeometryModifier_Polygonalization)
struct LineStyleModifier modifier;
float error;
char _pad[4];
} LineStyleGeometryModifier_Polygonalization;
typedef struct LineStyleGeometryModifier_GuidingLines {
DNA_DEFINE_CXX_METHODS(LineStyleGeometryModifier_GuidingLines)
struct LineStyleModifier modifier;
float offset;
char _pad[4];
} LineStyleGeometryModifier_GuidingLines;
/** #LineStyleGeometryModifier_BluePrintLines::shape */
enum {
LS_MODIFIER_BLUEPRINT_CIRCLES = 1,
LS_MODIFIER_BLUEPRINT_ELLIPSES = 2,
LS_MODIFIER_BLUEPRINT_SQUARES = 4,
};
typedef struct LineStyleGeometryModifier_Blueprint {
DNA_DEFINE_CXX_METHODS(LineStyleGeometryModifier_Blueprint)
struct LineStyleModifier modifier;
int flags;
unsigned int rounds;
float backbone_length;
unsigned int random_radius;
unsigned int random_center;
unsigned int random_backbone;
} LineStyleGeometryModifier_Blueprint;
typedef struct LineStyleGeometryModifier_2DOffset {
DNA_DEFINE_CXX_METHODS(LineStyleGeometryModifier_2DOffset)
struct LineStyleModifier modifier;
float start, end;
float x, y;
} LineStyleGeometryModifier_2DOffset;
/** #LineStyleGeometryModifier_2DTransform::pivot */
enum {
LS_MODIFIER_2D_TRANSFORM_PIVOT_CENTER = 1,
LS_MODIFIER_2D_TRANSFORM_PIVOT_START = 2,
LS_MODIFIER_2D_TRANSFORM_PIVOT_END = 3,
LS_MODIFIER_2D_TRANSFORM_PIVOT_PARAM = 4,
LS_MODIFIER_2D_TRANSFORM_PIVOT_ABSOLUTE = 5,
};
typedef struct LineStyleGeometryModifier_2DTransform {
DNA_DEFINE_CXX_METHODS(LineStyleGeometryModifier_2DTransform)
struct LineStyleModifier modifier;
int pivot;
float scale_x, scale_y;
/** In radians. */
float angle;
float pivot_u;
float pivot_x, pivot_y;
char _pad[4];
} LineStyleGeometryModifier_2DTransform;
typedef struct LineStyleGeometryModifier_Simplification {
DNA_DEFINE_CXX_METHODS(LineStyleGeometryModifier_Simplification)
struct LineStyleModifier modifier;
float tolerance;
char _pad[4];
} LineStyleGeometryModifier_Simplification;
/* Calligraphic thickness modifier */
typedef struct LineStyleThicknessModifier_Calligraphy {
DNA_DEFINE_CXX_METHODS(LineStyleThicknessModifier_Calligraphy)
struct LineStyleModifier modifier;
float min_thickness, max_thickness;
/** In radians. */
float orientation;
char _pad[4];
} LineStyleThicknessModifier_Calligraphy;
/** #FreestyleLineStyle::panel */
enum {
LS_PANEL_STROKES = 1,
LS_PANEL_COLOR = 2,
LS_PANEL_ALPHA = 3,
LS_PANEL_THICKNESS = 4,
LS_PANEL_GEOMETRY = 5,
LS_PANEL_TEXTURE = 6,
LS_PANEL_MISC = 7,
};
/** #FreestyleLineStyle::flag */
enum {
LS_DS_EXPAND = 1 << 0, /* for animation editors */
LS_SAME_OBJECT = 1 << 1,
LS_DASHED_LINE = 1 << 2,
LS_MATERIAL_BOUNDARY = 1 << 3,
LS_MIN_2D_LENGTH = 1 << 4,
LS_MAX_2D_LENGTH = 1 << 5,
LS_NO_CHAINING = 1 << 6,
LS_MIN_2D_ANGLE = 1 << 7,
LS_MAX_2D_ANGLE = 1 << 8,
LS_SPLIT_LENGTH = 1 << 9,
LS_SPLIT_PATTERN = 1 << 10,
LS_NO_SORTING = 1 << 11,
LS_REVERSE_ORDER = 1 << 12, /* for sorting */
LS_TEXTURE = 1 << 13,
LS_CHAIN_COUNT = 1 << 14,
};
/** #FreestyleLineStyle::chaining */
enum {
LS_CHAINING_PLAIN = 1,
LS_CHAINING_SKETCHY = 2,
};
/** #FreestyleLineStyle::caps */
enum {
LS_CAPS_BUTT = 1,
LS_CAPS_ROUND = 2,
LS_CAPS_SQUARE = 3,
};
/** #FreestyleLineStyle::thickness_position */
enum {
LS_THICKNESS_CENTER = 1,
LS_THICKNESS_INSIDE = 2,
LS_THICKNESS_OUTSIDE = 3,
/** Thickness_ratio is used. */
LS_THICKNESS_RELATIVE = 4,
};
/** #FreestyleLineStyle::sort_key */
enum {
LS_SORT_KEY_DISTANCE_FROM_CAMERA = 1,
LS_SORT_KEY_2D_LENGTH = 2,
LS_SORT_KEY_PROJECTED_X = 3,
LS_SORT_KEY_PROJECTED_Y = 4,
};
/** #FreestyleLineStyle::integration_type */
enum {
LS_INTEGRATION_MEAN = 1,
LS_INTEGRATION_MIN = 2,
LS_INTEGRATION_MAX = 3,
LS_INTEGRATION_FIRST = 4,
LS_INTEGRATION_LAST = 5,
};
typedef struct FreestyleLineStyle {
DNA_DEFINE_CXX_METHODS(FreestyleLineStyle)
ID id;
struct AnimData *adt;
float r, g, b, alpha;
float thickness;
int thickness_position;
float thickness_ratio;
int flag, caps;
int chaining;
unsigned int rounds;
float split_length;
/** In radians, for splitting. */
float min_angle, max_angle;
float min_length, max_length;
unsigned int chain_count;
unsigned short split_dash1, split_gap1;
unsigned short split_dash2, split_gap2;
unsigned short split_dash3, split_gap3;
int sort_key, integration_type;
float texstep;
short texact, pr_texture;
short use_nodes;
char _pad[6];
unsigned short dash1, gap1, dash2, gap2, dash3, gap3;
/** For UI. */
int panel;
/** MAX_MTEX. */
struct MTex *mtex[18];
/* nodes */
struct bNodeTree *nodetree;
ListBase color_modifiers;
ListBase alpha_modifiers;
ListBase thickness_modifiers;
ListBase geometry_modifiers;
} FreestyleLineStyle;