613 lines
15 KiB
C
613 lines
15 KiB
C
/* SPDX-License-Identifier: GPL-2.0-or-later
|
|
* Copyright 2001-2002 NaN Holding BV. All rights reserved. */
|
|
|
|
/** \file
|
|
* \ingroup DNA
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include "DNA_ID.h"
|
|
#include "DNA_defs.h"
|
|
#include "DNA_listBase.h"
|
|
#include "DNA_vec_types.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#define MAXTEXTBOX 256 /* used in readfile.c and editfont.c */
|
|
|
|
struct AnimData;
|
|
struct Curves;
|
|
struct CurveProfile;
|
|
struct EditFont;
|
|
struct GHash;
|
|
struct Ipo;
|
|
struct Key;
|
|
struct Material;
|
|
struct Object;
|
|
struct VFont;
|
|
|
|
/* These two Lines with # tell makesdna this struct can be excluded. */
|
|
#
|
|
#
|
|
typedef struct BevPoint {
|
|
float vec[3], tilt, radius, weight, offset;
|
|
/** 2D Only. */
|
|
float sina, cosa;
|
|
/** 3D Only. */
|
|
float dir[3], tan[3], quat[4];
|
|
short 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;
|
|
int *segbevcount;
|
|
float *seglen;
|
|
BevPoint *bevpoints;
|
|
} BevList;
|
|
|
|
/**
|
|
* Keyframes on F-Curves (allows code reuse of Bezier eval code) and
|
|
* Points on Bezier Curves/Paths are generally BezTriples.
|
|
*
|
|
* \note #BezTriple.tilt 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];
|
|
/** Tilt in 3D View. */
|
|
float tilt;
|
|
/** Used for softbody goal weight. */
|
|
float weight;
|
|
/** For bevel tapering & modifiers. */
|
|
float radius;
|
|
|
|
/** Ipo: interpolation mode for segment from this BezTriple to the next. */
|
|
char ipo;
|
|
|
|
/** H1, h2: the handle type of the two handles. */
|
|
uint8_t h1, h2;
|
|
/** F1, f2, f3: used for selection status. */
|
|
uint8_t f1, f2, f3;
|
|
|
|
/** Hide: used to indicate whether BezTriple is hidden (3D),
|
|
* type of keyframe (eBezTriple_KeyframeType). */
|
|
char hide;
|
|
|
|
/** Easing: easing type for interpolation mode (eBezTriple_Easing). */
|
|
char easing;
|
|
/** BEZT_IPO_BACK. */
|
|
float back;
|
|
/** BEZT_IPO_ELASTIC. */
|
|
float amplitude, period;
|
|
|
|
/** Used during auto handle calculation to mark special cases (local extremes). */
|
|
char auto_handle_type;
|
|
char _pad[3];
|
|
} BezTriple;
|
|
|
|
/**
|
|
* \note #BPoint.tilt location in struct is abused by Key system.
|
|
*/
|
|
typedef struct BPoint {
|
|
float vec[4];
|
|
/** Tilt in 3D View. */
|
|
float tilt;
|
|
/** Used for softbody goal weight. */
|
|
float weight;
|
|
/** F1: selection status, hide: is point hidden or not. */
|
|
uint8_t f1;
|
|
char _pad1[1];
|
|
short hide;
|
|
/** User-set radius per point for beveling etc. */
|
|
float radius;
|
|
char _pad[4];
|
|
} 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 {
|
|
DNA_DEFINE_CXX_METHODS(Nurb)
|
|
|
|
/** Multiple nurbs per curve object are allowed. */
|
|
struct Nurb *next, *prev;
|
|
short type;
|
|
/** Index into material list. */
|
|
short mat_nr;
|
|
short hide, flag;
|
|
/** Number of points in the U or V directions. */
|
|
int pntsu, pntsv;
|
|
char _pad[4];
|
|
/** Tessellation resolution in the U or V directions. */
|
|
short resolu, resolv;
|
|
short orderu, orderv;
|
|
short flagu, flagv;
|
|
|
|
float *knotsu, *knotsv;
|
|
BPoint *bp;
|
|
BezTriple *bezt;
|
|
|
|
/** KEY_LINEAR, KEY_CARDINAL, KEY_BSPLINE. */
|
|
short tilt_interp;
|
|
short radius_interp;
|
|
|
|
/* only used for dynamically generated Nurbs created from OB_FONT's */
|
|
int charidx;
|
|
} Nurb;
|
|
|
|
typedef struct CharInfo {
|
|
short kern;
|
|
/** Index start at 1, unlike mesh & nurbs. */
|
|
short mat_nr;
|
|
char flag;
|
|
char _pad[3];
|
|
} CharInfo;
|
|
|
|
typedef struct TextBox {
|
|
float x, y, w, h;
|
|
} TextBox;
|
|
|
|
/* These two Lines with # tell makesdna this struct can be excluded. */
|
|
#
|
|
#
|
|
typedef struct EditNurb {
|
|
DNA_DEFINE_CXX_METHODS(EditNurb)
|
|
|
|
/* base of nurbs' list (old Curve->editnurb) */
|
|
ListBase nurbs;
|
|
|
|
/* index data for shape keys */
|
|
struct GHash *keyindex;
|
|
|
|
/* shape key being edited */
|
|
int shapenr;
|
|
|
|
/**
|
|
* ID data is older than edit-mode data.
|
|
* Set #Main.is_memfile_undo_flush_needed when enabling.
|
|
*/
|
|
char needs_flush_to_id;
|
|
|
|
} EditNurb;
|
|
|
|
typedef struct Curve {
|
|
DNA_DEFINE_CXX_METHODS(Curve)
|
|
|
|
ID id;
|
|
/** Animation data (must be immediately after id for utilities to use it). */
|
|
struct AnimData *adt;
|
|
|
|
/** Actual data, called splines in rna. */
|
|
ListBase nurb;
|
|
|
|
/** Edited data, not in file, use pointer so we can check for it. */
|
|
EditNurb *editnurb;
|
|
|
|
struct Object *bevobj, *taperobj, *textoncurve;
|
|
/** Old animation system, deprecated for 2.5. */
|
|
struct Ipo *ipo DNA_DEPRECATED;
|
|
struct Key *key;
|
|
struct Material **mat;
|
|
|
|
struct CurveProfile *bevel_profile;
|
|
|
|
/* texture space, copied as one block in editobject.c */
|
|
float loc[3];
|
|
float size[3];
|
|
|
|
/** Creation-time type of curve datablock. */
|
|
short type;
|
|
|
|
char texflag;
|
|
char _pad0[7];
|
|
short twist_mode;
|
|
float twist_smooth, smallcaps_scale;
|
|
|
|
int pathlen;
|
|
short bevresol, totcol;
|
|
int flag;
|
|
float offset, extrude, bevel_radius;
|
|
|
|
/* default */
|
|
short resolu, resolv;
|
|
short resolu_ren, resolv_ren;
|
|
|
|
/* edit, index in nurb list */
|
|
int actnu;
|
|
/* edit, index in active nurb (BPoint or BezTriple) */
|
|
int actvert;
|
|
|
|
char overflow;
|
|
char spacemode, align_y;
|
|
char bevel_mode;
|
|
/**
|
|
* Determine how the effective radius of the bevel point is computed when a taper object is
|
|
* specified. The effective radius is a function of the bevel point radius and the taper radius.
|
|
*/
|
|
char taper_radius_mode;
|
|
char _pad;
|
|
|
|
/* font part */
|
|
short lines;
|
|
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 */
|
|
/**
|
|
* Number of characters (unicode code-points)
|
|
* This is the length of #Curve.strinfo and the result of `BLI_strlen_utf8(cu->str)`.
|
|
*/
|
|
int len_char32;
|
|
/** Number of bytes: `strlen(Curve.str)`. */
|
|
int len;
|
|
char *str;
|
|
struct EditFont *editfont;
|
|
|
|
char family[64];
|
|
struct VFont *vfont;
|
|
struct VFont *vfontb;
|
|
struct VFont *vfonti;
|
|
struct VFont *vfontbi;
|
|
|
|
struct TextBox *tb;
|
|
int totbox, actbox;
|
|
|
|
struct CharInfo *strinfo;
|
|
struct CharInfo curinfo;
|
|
/* font part end */
|
|
|
|
/** Current evaltime - for use by Objects parented to curves. */
|
|
float ctime;
|
|
float bevfac1, bevfac2;
|
|
char bevfac1_mapping, bevfac2_mapping;
|
|
|
|
char _pad2[6];
|
|
float fsize_realtime;
|
|
|
|
/**
|
|
* A pointer to curve data from evaluation. Owned by the object's #geometry_set_eval, either as a
|
|
* geometry instance or the data of the evaluated #CurveComponent. The curve may also contain
|
|
* data in the #nurb list, but for evaluated curves this is the proper place to retrieve data,
|
|
* since it also contains the result of geometry nodes evaluation, and isn't just a copy of the
|
|
* original object data.
|
|
*/
|
|
const struct Curves *curve_eval;
|
|
/**
|
|
* If non-zero, the #editfont and #editnurb pointers are not owned by this #Curve. That means
|
|
* this curve is a container for the result of object geometry evaluation. This only works
|
|
* because evaluated object data never outlives original data.
|
|
*/
|
|
char edit_data_from_original;
|
|
char _pad3[7];
|
|
|
|
void *batch_cache;
|
|
} Curve;
|
|
|
|
#define CURVE_VFONT_ANY(cu) ((cu)->vfont), ((cu)->vfontb), ((cu)->vfonti), ((cu)->vfontbi)
|
|
|
|
/* **************** CURVE ********************* */
|
|
|
|
/** #Curve.texflag */
|
|
enum {
|
|
CU_AUTOSPACE = 1,
|
|
CU_AUTOSPACE_EVALUATED = 2,
|
|
};
|
|
|
|
/** #Curve.flag */
|
|
enum {
|
|
CU_3D = 1 << 0,
|
|
CU_FRONT = 1 << 1,
|
|
CU_BACK = 1 << 2,
|
|
CU_PATH = 1 << 3,
|
|
CU_FOLLOW = 1 << 4,
|
|
CU_PATH_CLAMP = 1 << 5,
|
|
CU_DEFORM_BOUNDS_OFF = 1 << 6,
|
|
CU_STRETCH = 1 << 7,
|
|
/* CU_OFFS_PATHDIST = 1 << 8, */ /* DEPRECATED */
|
|
CU_FAST = 1 << 9, /* Font: no filling inside editmode */
|
|
/* CU_RETOPO = 1 << 10, */ /* DEPRECATED */
|
|
CU_DS_EXPAND = 1 << 11,
|
|
/** make use of the path radius if this is enabled (default for new curves) */
|
|
CU_PATH_RADIUS = 1 << 12,
|
|
/* CU_DEFORM_FILL = 1 << 13, */ /* DEPRECATED */
|
|
/** fill bevel caps */
|
|
CU_FILL_CAPS = 1 << 14,
|
|
/** map taper object to beveled area */
|
|
CU_MAP_TAPER = 1 << 15,
|
|
};
|
|
|
|
/** #Curve.twist_mode */
|
|
enum {
|
|
CU_TWIST_Z_UP = 0,
|
|
/* CU_TWIST_Y_UP = 1, */ /* not used yet */
|
|
/* CU_TWIST_X_UP = 2, */
|
|
CU_TWIST_MINIMUM = 3,
|
|
CU_TWIST_TANGENT = 4,
|
|
};
|
|
|
|
/* Curve.bevfac1_mapping, Curve.bevfac2_mapping, bevel factor mapping */
|
|
enum {
|
|
CU_BEVFAC_MAP_RESOLU = 0,
|
|
CU_BEVFAC_MAP_SEGMENT = 1,
|
|
CU_BEVFAC_MAP_SPLINE = 2,
|
|
};
|
|
|
|
/** #Curve.spacemode */
|
|
enum {
|
|
CU_ALIGN_X_LEFT = 0,
|
|
CU_ALIGN_X_MIDDLE = 1,
|
|
CU_ALIGN_X_RIGHT = 2,
|
|
CU_ALIGN_X_JUSTIFY = 3,
|
|
CU_ALIGN_X_FLUSH = 4,
|
|
};
|
|
|
|
/** #Curve.align_y */
|
|
enum {
|
|
CU_ALIGN_Y_TOP_BASELINE = 0,
|
|
CU_ALIGN_Y_TOP = 1,
|
|
CU_ALIGN_Y_CENTER = 2,
|
|
CU_ALIGN_Y_BOTTOM_BASELINE = 3,
|
|
CU_ALIGN_Y_BOTTOM = 4,
|
|
};
|
|
|
|
/** #Curve.bevel_mode */
|
|
enum {
|
|
CU_BEV_MODE_ROUND = 0,
|
|
CU_BEV_MODE_OBJECT = 1,
|
|
CU_BEV_MODE_CURVE_PROFILE = 2,
|
|
};
|
|
|
|
/** #Curve.taper_radius_mode */
|
|
enum {
|
|
/** Override the radius of the bevel point with the taper radius. */
|
|
CU_TAPER_RADIUS_OVERRIDE = 0,
|
|
/** Multiply the radius of the bevel point by the taper radius. */
|
|
CU_TAPER_RADIUS_MULTIPLY = 1,
|
|
/** Add the radius of the bevel point to the taper radius. */
|
|
CU_TAPER_RADIUS_ADD = 2,
|
|
};
|
|
|
|
/* Curve.overflow. */
|
|
enum {
|
|
CU_OVERFLOW_NONE = 0,
|
|
CU_OVERFLOW_SCALE = 1,
|
|
CU_OVERFLOW_TRUNCATE = 2,
|
|
};
|
|
|
|
/** #Nurb.flag */
|
|
enum {
|
|
CU_SMOOTH = 1 << 0,
|
|
};
|
|
|
|
/** #Nurb.type */
|
|
enum {
|
|
CU_POLY = 0,
|
|
CU_BEZIER = 1,
|
|
CU_NURBS = 4,
|
|
CU_TYPE = (CU_POLY | CU_BEZIER | CU_NURBS),
|
|
|
|
/* only for adding */
|
|
CU_PRIMITIVE = 0xF00,
|
|
|
|
/* 2 or 4 points */
|
|
CU_PRIM_CURVE = 0x100,
|
|
/* 8 points circle */
|
|
CU_PRIM_CIRCLE = 0x200,
|
|
/* 4x4 patch Nurb */
|
|
CU_PRIM_PATCH = 0x300,
|
|
CU_PRIM_TUBE = 0x400,
|
|
CU_PRIM_SPHERE = 0x500,
|
|
CU_PRIM_DONUT = 0x600,
|
|
/* 5 points, 5th order straight line (for anim path) */
|
|
CU_PRIM_PATH = 0x700,
|
|
};
|
|
|
|
/* Nurb.flagu, Nurb.flagv */
|
|
enum {
|
|
CU_NURB_CYCLIC = 1 << 0,
|
|
CU_NURB_ENDPOINT = 1 << 1,
|
|
CU_NURB_BEZIER = 1 << 2,
|
|
};
|
|
|
|
#define CU_ACT_NONE -1
|
|
|
|
/* *************** BEZTRIPLE **************** */
|
|
|
|
/* BezTriple.f1,2,3 */
|
|
typedef enum eBezTriple_Flag {
|
|
/* SELECT */
|
|
BEZT_FLAG_TEMP_TAG = (1 << 1), /* always clear. */
|
|
/* Can be used to ignore keyframe points for certain operations. */
|
|
BEZT_FLAG_IGNORE_TAG = (1 << 2),
|
|
} eBezTriple_Flag;
|
|
|
|
/* h1 h2 (beztriple) */
|
|
typedef enum eBezTriple_Handle {
|
|
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;
|
|
|
|
/* auto_handle_type (beztriple) */
|
|
typedef enum eBezTriple_Auto_Type {
|
|
/* Normal automatic handle that can be refined further. */
|
|
HD_AUTOTYPE_NORMAL = 0,
|
|
/* Handle locked horizontal due to being an Auto Clamped local
|
|
* extreme or a curve endpoint with Constant extrapolation.
|
|
* Further smoothing is disabled. */
|
|
HD_AUTOTYPE_LOCKED_FINAL = 1,
|
|
} eBezTriple_Auto_Type;
|
|
|
|
/* 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 */
|
|
|
|
/* 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 = 1, /* 'extreme' keyframe */
|
|
BEZT_KEYTYPE_BREAKDOWN = 2, /* 'breakdown' keyframe */
|
|
BEZT_KEYTYPE_JITTER = 3, /* 'jitter' keyframe (for adding 'filler' secondary motion) */
|
|
BEZT_KEYTYPE_MOVEHOLD = 4, /* one end of a 'moving hold' */
|
|
} eBezTriple_KeyframeType;
|
|
|
|
/* checks if the given BezTriple is selected */
|
|
#define BEZT_ISSEL_ANY(bezt) \
|
|
(((bezt)->f2 & SELECT) || ((bezt)->f1 & SELECT) || ((bezt)->f3 & SELECT))
|
|
#define BEZT_ISSEL_ALL(bezt) \
|
|
(((bezt)->f2 & SELECT) && ((bezt)->f1 & SELECT) && ((bezt)->f3 & SELECT))
|
|
#define BEZT_ISSEL_ALL_HIDDENHANDLES(v3d, bezt) \
|
|
((((v3d) != NULL) && ((v3d)->overlay.handle_display == CURVE_HANDLE_NONE)) ? \
|
|
(bezt)->f2 & SELECT : \
|
|
BEZT_ISSEL_ALL(bezt))
|
|
#define BEZT_ISSEL_ANY_HIDDENHANDLES(v3d, bezt) \
|
|
((((v3d) != NULL) && ((v3d)->overlay.handle_display == CURVE_HANDLE_NONE)) ? \
|
|
(bezt)->f2 & SELECT : \
|
|
BEZT_ISSEL_ANY(bezt))
|
|
|
|
#define BEZT_ISSEL_IDX(bezt, i) \
|
|
((i == 0 && (bezt)->f1 & SELECT) || (i == 1 && (bezt)->f2 & SELECT) || \
|
|
(i == 2 && (bezt)->f3 & SELECT))
|
|
|
|
#define BEZT_SEL_ALL(bezt) \
|
|
{ \
|
|
(bezt)->f1 |= SELECT; \
|
|
(bezt)->f2 |= SELECT; \
|
|
(bezt)->f3 |= SELECT; \
|
|
} \
|
|
((void)0)
|
|
#define BEZT_DESEL_ALL(bezt) \
|
|
{ \
|
|
(bezt)->f1 &= ~SELECT; \
|
|
(bezt)->f2 &= ~SELECT; \
|
|
(bezt)->f3 &= ~SELECT; \
|
|
} \
|
|
((void)0)
|
|
#define BEZT_SEL_INVERT(bezt) \
|
|
{ \
|
|
(bezt)->f1 ^= SELECT; \
|
|
(bezt)->f2 ^= SELECT; \
|
|
(bezt)->f3 ^= SELECT; \
|
|
} \
|
|
((void)0)
|
|
|
|
#define BEZT_SEL_IDX(bezt, i) \
|
|
{ \
|
|
switch (i) { \
|
|
case 0: \
|
|
(bezt)->f1 |= SELECT; \
|
|
break; \
|
|
case 1: \
|
|
(bezt)->f2 |= SELECT; \
|
|
break; \
|
|
case 2: \
|
|
(bezt)->f3 |= SELECT; \
|
|
break; \
|
|
default: \
|
|
break; \
|
|
} \
|
|
} \
|
|
((void)0)
|
|
|
|
#define BEZT_DESEL_IDX(bezt, i) \
|
|
{ \
|
|
switch (i) { \
|
|
case 0: \
|
|
(bezt)->f1 &= ~SELECT; \
|
|
break; \
|
|
case 1: \
|
|
(bezt)->f2 &= ~SELECT; \
|
|
break; \
|
|
case 2: \
|
|
(bezt)->f3 &= ~SELECT; \
|
|
break; \
|
|
default: \
|
|
break; \
|
|
} \
|
|
} \
|
|
((void)0)
|
|
|
|
#define BEZT_IS_AUTOH(bezt) \
|
|
(ELEM((bezt)->h1, HD_AUTO, HD_AUTO_ANIM) && ELEM((bezt)->h2, HD_AUTO, HD_AUTO_ANIM))
|
|
|
|
/* *************** CHARINFO **************** */
|
|
|
|
/** #CharInfo.flag */
|
|
enum {
|
|
/* NOTE: CU_CHINFO_WRAP, CU_CHINFO_SMALLCAPS_TEST and CU_CHINFO_TRUNCATE are set dynamically. */
|
|
CU_CHINFO_BOLD = 1 << 0,
|
|
CU_CHINFO_ITALIC = 1 << 1,
|
|
CU_CHINFO_UNDERLINE = 1 << 2,
|
|
/** Word-wrap occurred here. */
|
|
CU_CHINFO_WRAP = 1 << 3,
|
|
CU_CHINFO_SMALLCAPS = 1 << 4,
|
|
/** Set at runtime, checks if case switching is needed. */
|
|
CU_CHINFO_SMALLCAPS_CHECK = 1 << 5,
|
|
/** Set at runtime, indicates char that doesn't fit in text boxes. */
|
|
CU_CHINFO_OVERFLOW = 1 << 6,
|
|
};
|
|
|
|
/* 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
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|