GSOC 2013 paint
[blender.git] / source / blender / makesdna / DNA_curve_types.h
index 7ff8667f90eb5b58caa7a972decbc841a6d01cd5..d638d20c6a542a58fdedbc8266795368ef00e6a8 100644 (file)
@@ -68,16 +68,6 @@ typedef struct Path {
        float totdist;
 } Path;
 
-/* These two Lines with # tell makesdna this struct can be excluded. */
-#
-#
-typedef struct BevList {
-       struct BevList *next, *prev;
-       int nr, dupe_nr;
-       int poly, hole;
-       int charidx;
-} BevList;
-
 /* These two Lines with # tell makesdna this struct can be excluded. */
 #
 #
@@ -88,6 +78,19 @@ typedef struct BevPoint {
        short split_tag, dupe_tag;
 } BevPoint;
 
+/* These two Lines with # tell makesdna this struct can be excluded. */
+#
+#
+typedef struct BevList {
+       struct BevList *next, *prev;
+       int nr, dupe_nr;
+       int poly, hole;
+       int charidx;
+
+       /* over-alloc */
+       BevPoint bevpoints[0];
+} BevList;
+
 /**
  * Keyframes on F-Curves (allows code reuse of Bezier eval code) and
  * Points on Bezier Curves/Paths are generally BezTriples 
@@ -108,10 +111,19 @@ typedef struct BevPoint {
 typedef struct BezTriple {
        float vec[3][3];
        float alfa, weight, radius;     /* alfa: tilt in 3D View, weight: used for softbody goal weight, radius: for bevel tapering */
-       short ipo;                                      /* ipo: interpolation mode for segment from this BezTriple to the next */
+       
+       char ipo;                                       /* ipo: interpolation mode for segment from this BezTriple to the next */
+       
        char h1, h2;                            /* h1, h2: the handle type of the two handles */
        char f1, f2, f3;                        /* f1, f2, f3: used for selection status */
+       
        char hide;                                      /* hide: used to indicate whether BezTriple is hidden (3D), type of keyframe (eBezTriple_KeyframeTypes) */
+       
+       char easing;                            /* easing: easing type for interpolation mode (eBezTriple_Easing) */
+       float back;                                     /* BEZT_IPO_BACK */
+       float amplitude, period;        /* BEZT_IPO_ELASTIC */
+
+       char  pad[4];
 } BezTriple;
 
 /* note; alfa location in struct is abused by Key system */
@@ -131,7 +143,8 @@ typedef struct Nurb {
        short type;
        short mat_nr;           /* index into material list */
        short hide, flag;
-       short pntsu, pntsv;             /* number of points in the U or V directions */
+       int pntsu, pntsv;               /* number of points in the U or V directions */
+       short pad[2];
        short resolu, resolv;   /* tessellation resolution in the U or V directions */
        short orderu, orderv;
        short flagu, flagv;
@@ -178,18 +191,14 @@ typedef struct Curve {
        struct BoundBox *bb;
        
        ListBase nurb;          /* actual data, called splines in rna */
-       ListBase disp;          /* undeformed display list, used mostly for texture space calculation */
        
        EditNurb *editnurb;     /* edited data, not in file, use pointer so we can check for it */
        
        struct Object *bevobj, *taperobj, *textoncurve;
        struct Ipo *ipo    DNA_DEPRECATED;  /* old animation system, deprecated for 2.5 */
-       Path *path;
        struct Key *key;
        struct Material **mat;
        
-       ListBase bev;
-       
        /* texture space, copied as one block in editobject.c */
        float loc[3];
        float size[3];
@@ -212,41 +221,49 @@ typedef struct Curve {
 
        /* edit, index in nurb list */
        int actnu;
-       /* edit, last selected point */
-       void *lastsel;
-       
+       /* edit, index in active nurb (BPoint or BezTriple) */
+       int actvert;
+
+       char pad[4];
+
        /* font part */
-       /* WARNING: cu->len is...
-        * - strlen(cu->str) object-mode (bytes).
-        * - BLI_strlen_utf8(cu->str) in edit-mode.
-        * This should be cleaned up and some point, see 'write_curves' - campbell */
-       short len, lines, pos, spacemode;
+       short lines;
+       char spacemode, pad1;
        float spacing, linedist, shear, fsize, wordspace, ulpos, ulheight;
        float xof, yof;
        float linewidth;
 
+       /* copy of EditFont vars (wchar_t aligned),
+        * warning! don't use in editmode (storage only) */
+       int pos;
+       int selstart, selend;
+
+       /* text data */
+       int len_wchar;  /* number of characters (strinfo) */
+       int len;        /* number of bytes (str - utf8) */
        char *str;
-       struct SelBox *selboxes;
        struct EditFont *editfont;
-       
-       char family[24];
+
+       char family[64];
        struct VFont *vfont;
        struct VFont *vfontb;
        struct VFont *vfonti;
        struct VFont *vfontbi;
-
-       int sepchar;
        
-       float ctime;                    /* current evaltime - for use by Objects parented to curves */
-       int totbox, actbox;
        struct TextBox *tb;
-       
-       int selstart, selend;
+       int totbox, actbox;
        
        struct CharInfo *strinfo;
        struct CharInfo curinfo;
+       /* font part end */
 
+
+       float ctime;                    /* current evaltime - for use by Objects parented to curves */
        float bevfac1, bevfac2;
+       char bevfac1_mapping, bevfac2_mapping;
+
+       char pad2[2];
+
 } Curve;
 
 /* **************** CURVE ********************* */
@@ -267,7 +284,7 @@ typedef struct Curve {
 #define CU_UV_ORCO             32
 #define CU_DEFORM_BOUNDS_OFF 64 
 #define CU_STRETCH             128
-#define CU_OFFS_PATHDIST       256
+/* #define CU_OFFS_PATHDIST    256 */ /* DEPRECATED */
 #define CU_FAST                        512 /* Font: no filling inside editmode */
 /* #define CU_RETOPO               1024 */ /* DEPRECATED */
 #define CU_DS_EXPAND   2048
@@ -283,6 +300,13 @@ typedef struct Curve {
 #define CU_TWIST_MINIMUM               3
 #define CU_TWIST_TANGENT               4
 
+/* bevel factor mapping */
+enum {
+       CU_BEVFAC_MAP_RESOLU = 0,
+       CU_BEVFAC_MAP_SEGMENT = 1,
+       CU_BEVFAC_MAP_SPLINE = 2
+};
+
 /* spacemode */
 #define CU_LEFT                        0
 #define CU_MIDDLE              1
@@ -323,6 +347,8 @@ typedef struct Curve {
 #define CU_NURB_ENDPOINT       2
 #define CU_NURB_BEZIER         4
 
+#define CU_ACT_NONE            -1
+
 /* *************** BEZTRIPLE **************** */
 
 /* h1 h2 (beztriple) */
@@ -331,16 +357,39 @@ typedef enum eBezTriple_Handle {
        HD_AUTO = 1,
        HD_VECT = 2,
        HD_ALIGN = 3,
-       HD_AUTO_ANIM = 4        /* auto-clamped handles for animation */
+       HD_AUTO_ANIM = 4,         /* auto-clamped handles for animation */
+       HD_ALIGN_DOUBLESIDE = 5,  /* align handles, displayed both of them. used for masks */
 } eBezTriple_Handle;
 
 /* interpolation modes (used only for BezTriple->ipo) */
 typedef enum eBezTriple_Interpolation {
+       /* traditional interpolation */
        BEZT_IPO_CONST = 0,     /* constant interpolation */
        BEZT_IPO_LIN = 1,       /* linear interpolation */
-       BEZT_IPO_BEZ = 2        /* bezier interpolation */
+       BEZT_IPO_BEZ = 2,       /* bezier interpolation */
+       
+       /* easing equations */
+       BEZT_IPO_BACK = 3,
+       BEZT_IPO_BOUNCE = 4,
+       BEZT_IPO_CIRC = 5,
+       BEZT_IPO_CUBIC = 6,
+       BEZT_IPO_ELASTIC = 7,
+       BEZT_IPO_EXPO = 8,
+       BEZT_IPO_QUAD = 9,
+       BEZT_IPO_QUART = 10,
+       BEZT_IPO_QUINT = 11,
+       BEZT_IPO_SINE = 12
 } eBezTriple_Interpolation;
 
+/* easing modes (used only for Keyframes - BezTriple->easing) */
+typedef enum eBezTriple_Easing {
+       BEZT_IPO_EASE_AUTO = 0,
+       
+       BEZT_IPO_EASE_IN = 1,
+       BEZT_IPO_EASE_OUT = 2,
+       BEZT_IPO_EASE_IN_OUT = 3
+} eBezTriple_Easing;
+
 /* types of keyframe (used only for BezTriple->hide when BezTriple is used in F-Curves) */
 typedef enum eBezTriple_KeyframeType {
        BEZT_KEYTYPE_KEYFRAME = 0,      /* default - 'proper' Keyframe */
@@ -367,6 +416,8 @@ typedef enum eBezTriple_KeyframeType {
 /* mixed with KEY_LINEAR but define here since only curve supports */
 #define KEY_CU_EASE                    3
 
+/* indicates point has been seen during surface duplication */
+#define SURF_SEEN                      4
 
 #endif