svn merge https://svn.blender.org/svnroot/bf-blender/trunk/blender -r22935:23022
[blender.git] / source / blender / makesdna / DNA_curve_types.h
index 88c03a41160073fac27c151ebfe3bddd817c9e20..3655c57558a61d41a6806d89b7af85549cd791dc 100644 (file)
@@ -45,6 +45,9 @@ struct Ipo;
 struct Key;
 struct Material;
 struct VFont;
+struct AnimData;
+struct SelBox;
+struct EditFont;
 
 /* These two Lines with # tell makesdna this struct can be excluded. */
 #
@@ -72,24 +75,28 @@ typedef struct BevPoint {
        short f1, f2;
 } BevPoint;
 
-/* Keyframes on IPO curves and Points on Bezier Curves/Paths are generally BezTriples */
+/* 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 IpoCurve Points(2d))
+       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 IpoCurve Points(2d))
+       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 h1, h2;                           /* h1, h2: the handle type of the two handles */
-       char f1, f2, f3, hide;          /* f1, f2, f3: used for selection status,  hide: used to indicate whether BezTriple is hidden */
+       short 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) */
 } BezTriple;
 
 /* note; alfa location in struct is abused by Key system */
@@ -134,13 +141,17 @@ typedef struct TextBox {
 
 typedef struct Curve {
        ID id;
+       struct AnimData *adt;           /* animation data (must be immediately after id for utilities to use it) */ 
        
        struct BoundBox *bb;
        
-       ListBase nurb;
+       ListBase nurb;          /* actual data */
        ListBase disp;
+       
+       ListBase *editnurb;     /* edited data, not in file, use pointer so we can check for it */
+       
        struct Object *bevobj, *taperobj, *textoncurve;
-       struct Ipo *ipo;
+       struct Ipo *ipo;        // XXX depreceated... old animation system
        Path *path;
        struct Key *key;
        struct Material **mat;
@@ -161,7 +172,11 @@ typedef struct Curve {
        /* default */
        short resolu, resolv;
        short resolu_ren, resolv_ren;
-       int pad2;
+       
+       /* edit, index in nurb list */
+       int actnu;
+       /* edit, last selected bpoint */
+       BPoint *lastselbp;
        
        /* font part */
        short len, lines, pos, spacemode;
@@ -170,6 +185,9 @@ typedef struct Curve {
        float linewidth;
 
        char *str;
+       struct SelBox *selboxes;
+       struct EditFont *editfont;
+       
        char family[24];
        struct VFont *vfont;
        struct VFont *vfontb;
@@ -178,13 +196,14 @@ typedef struct Curve {
 
        int sepchar;
        
-       int totbox, actbox, pad;
+       float ctime;                    /* current evaltime - for use by Objects parented to curves */
+       int totbox, actbox;
        struct TextBox *tb;     
        
        int selstart, selend;   
        
        struct CharInfo *strinfo;       
-       struct CharInfo curinfo;        
+       struct CharInfo curinfo;
 } Curve;
 
 /* **************** CURVE ********************* */
@@ -204,6 +223,7 @@ typedef struct Curve {
 #define CU_OFFS_PATHDIST       256
 #define CU_FAST                        512 /* Font: no filling inside editmode */
 #define CU_RETOPO               1024
+#define CU_DS_EXPAND   2048
 
 #define CU_NO_TWIST            4096
 
@@ -223,17 +243,52 @@ typedef struct Curve {
 #define CU_BSPLINE             2
 #define CU_CARDINAL            3
 #define CU_NURBS               4
+#define CU_TYPE                        7
+
 #define CU_2D                  8
 
+               /* only for adding */
+#define CU_PRIMITIVE   0xF00
+
+               /* 2 or 4 points */
+#define CU_PRIM_CURVE  0x100
+               /* 8 points circle */
+#define CU_PRIM_CIRCLE 0x200
+               /* 4x4 patch Nurb */
+#define CU_PRIM_PATCH  0x300
+#define CU_PRIM_TUBE   0x400
+#define CU_PRIM_SPHERE 0x500
+#define CU_PRIM_DONUT  0x600
+               /* 5 points,  5th order straight line (for anim path) */
+#define CU_PRIM_PATH   0x700
+
+
 /* flagu flagv (nurb) */
 #define CU_CYCLIC              1
 
+/* *************** BEZTRIPLE **************** */
+
 /* h1 h2 (beztriple) */
-#define HD_FREE                        0
-#define HD_AUTO                        1
-#define HD_VECT                        2
-#define HD_ALIGN               3
-#define HD_AUTO_ANIM   4
+typedef enum eBezTriple_Handle {
+       HD_FREE = 0,
+       HD_AUTO,
+       HD_VECT,
+       HD_ALIGN,
+       HD_AUTO_ANIM
+} eBezTriple_Handle;
+
+/* interpolation modes (used only for BezTriple->ipo) */
+typedef enum eBezTriple_Interpolation {
+       BEZT_IPO_CONST = 0,     /* constant interpolation */
+       BEZT_IPO_LIN,           /* linear interpolation */
+       BEZT_IPO_BEZ,           /* bezier interpolation */
+} eBezTriple_Interpolation;
+
+/* 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_BREAKDOWN,         /* 'breakdown' keyframe */
+} eBezTriple_KeyframeType;
 
 /* *************** CHARINFO **************** */