GSOC 2013 paint
[blender.git] / source / blender / makesdna / DNA_curve_types.h
index a50cd16e351327d2190c296c846c3e7b879772b9..d638d20c6a542a58fdedbc8266795368ef00e6a8 100644 (file)
@@ -68,15 +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;
-       short poly, hole;
-} BevList;
-
 /* These two Lines with # tell makesdna this struct can be excluded. */
 #
 #
@@ -87,28 +78,52 @@ typedef struct BevPoint {
        short split_tag, dupe_tag;
 } BevPoint;
 
-/* Keyframes on F-Curves (allows code reuse of Bezier eval code) and 
+/* 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 
- */
-/* note: alfa location in struct is abused by Key system */
-/* vec in BezTriple looks like this:
- * - vec[0][0]=x location of handle 1
- * - vec[0][1]=y location of handle 1
- * - vec[0][2]=z location of handle 1 (not used for FCurve Points(2d))
- * - vec[1][0]=x location of control point
- * - vec[1][1]=y location of control point
- * - vec[1][2]=z location of control point
- * - vec[2][0]=x location of handle 2
- * - vec[2][1]=y location of handle 2
- * - vec[2][2]=z location of handle 2 (not used for FCurve Points(2d))
+ *
+ * \note alfa location in struct is abused by Key system
+ *
+ * \note vec in BezTriple looks like this:
+ * - vec[0][0] = x location of handle 1
+ * - vec[0][1] = y location of handle 1
+ * - vec[0][2] = z location of handle 1 (not used for FCurve Points(2d))
+ * - vec[1][0] = x location of control point
+ * - vec[1][1] = y location of control point
+ * - vec[1][2] = z location of control point
+ * - vec[2][0] = x location of handle 2
+ * - vec[2][1] = y location of handle 2
+ * - vec[2][2] = z location of handle 2 (not used for FCurve Points(2d))
  */
 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 */
@@ -116,15 +131,20 @@ typedef struct BPoint {
        float vec[4];
        float alfa, weight;             /* alfa: tilt in 3D View, weight: used for softbody goal weight */
        short f1, hide;                 /* f1: selection status,  hide: is point hidden or not */
-       float radius, pad;              /* user-set radius per point for bevelling etc */
+       float radius, pad;              /* user-set radius per point for beveling etc */
 } BPoint;
 
+/**
+ * \note Nurb name is misleading, since it can be used for polygons too,
+ * also, it should be NURBS (Nurb isn't the singular of Nurbs).
+ */
 typedef struct Nurb {
        struct Nurb *next, *prev;       /* multiple nurbs per curve object are allowed */
        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;
@@ -171,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];
@@ -195,8 +211,8 @@ typedef struct Curve {
        float twist_smooth, smallcaps_scale;
 
        int pathlen;
-       short pad, totcol;
-       short flag, bevresol;
+       short bevresol, totcol;
+       int flag;
        float width, ext1, ext2;
        
        /* default */
@@ -205,35 +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 */
-       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 */
+       struct TextBox *tb;
        int totbox, actbox;
-       struct TextBox *tb;     
-       
-       int selstart, selend;   
        
-       struct CharInfo *strinfo;       
+       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 ********************* */
@@ -254,13 +284,14 @@ 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
 #define CU_PATH_RADIUS 4096 /* make use of the path radius if this is enabled (default for new curves) */
 #define CU_DEFORM_FILL 8192 /* fill 2d curve after deformation */
 #define CU_FILL_CAPS   16384 /* fill bevel caps */
+#define CU_MAP_TAPER   32768 /* map taper object to bevelled area */
 
 /* twist mode */
 #define CU_TWIST_Z_UP                  0
@@ -269,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
@@ -309,30 +347,55 @@ typedef struct Curve {
 #define CU_NURB_ENDPOINT       2
 #define CU_NURB_BEZIER         4
 
+#define CU_ACT_NONE            -1
+
 /* *************** BEZTRIPLE **************** */
 
 /* h1 h2 (beztriple) */
 typedef enum eBezTriple_Handle {
-       HD_FREE = 0,
-       HD_AUTO,
-       HD_VECT,
-       HD_ALIGN,
-       HD_AUTO_ANIM    /* auto-clamped handles for animation */
+       HD_FREE = 0,
+       HD_AUTO = 1,
+       HD_VECT = 2,
+       HD_ALIGN = 3,
+       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,           /* linear interpolation */
-       BEZT_IPO_BEZ            /* bezier interpolation */
+       BEZT_IPO_LIN = 1,       /* linear 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 */
-       BEZT_KEYTYPE_EXTREME,           /* 'extreme' keyframe */
-       BEZT_KEYTYPE_BREAKDOWN,         /* 'breakdown' keyframe */
-       BEZT_KEYTYPE_JITTER,            /* 'jitter' keyframe (for adding 'filler' secondary motion) */
+       BEZT_KEYTYPE_EXTREME = 1,       /* 'extreme' keyframe */
+       BEZT_KEYTYPE_BREAKDOWN = 2,     /* 'breakdown' keyframe */
+       BEZT_KEYTYPE_JITTER = 3,        /* 'jitter' keyframe (for adding 'filler' secondary motion) */
 } eBezTriple_KeyframeType;
 
 /* checks if the given BezTriple is selected */
@@ -353,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