Blender V4.3
DNA_curve_types.h
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2001-2002 NaN Holding BV. All rights reserved.
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
9#pragma once
10
11#include "DNA_ID.h"
12#include "DNA_defs.h"
13#include "DNA_listBase.h"
14#include "DNA_vec_types.h"
15
17#define MAXTEXTBOX 256
18
19struct AnimData;
20struct Curves;
21struct CurveProfile;
22struct EditFont;
23struct GHash;
24struct Ipo;
25struct Key;
26struct Material;
27struct Object;
28struct VFont;
29
30/* These two Lines with # tell `makesdna` this struct can be excluded. */
31#
32#
33typedef struct BevPoint {
34 float vec[3], tilt, radius, weight, offset;
36 float sina, cosa;
38 float dir[3], tan[3], quat[4];
39 short dupe_tag;
41
42/* These two Lines with # tell `makesdna` this struct can be excluded. */
43#
44#
45typedef struct BevList {
46 struct BevList *next, *prev;
47 int nr, dupe_nr;
49 int poly;
50 int hole;
53 float *seglen;
56
74typedef struct BezTriple {
75 float vec[3][3];
77 float tilt;
79 float weight;
81 float radius;
82
84 char ipo;
85
90
96 char hide;
97
99 char easing;
101 float back;
104
107 char _pad[3];
109
114#define BEZKEYTYPE(bezt) (eBezTriple_KeyframeType((bezt)->hide))
115#define BEZKEYTYPE_LVALUE(bezt) ((bezt)->hide)
116
120typedef struct BPoint {
121 float vec[4];
123 float tilt;
125 float weight;
128 char _pad1[1];
129 short hide;
131 float radius;
132 char _pad[4];
134
139typedef struct Nurb {
141
142
143 struct Nurb *next, *prev;
144 short type;
146 short mat_nr;
147 short hide, flag;
150 char _pad[4];
154 short flagu, flagv;
155
156 float *knotsu, *knotsv;
159
163
164 /* only used for dynamically generated Nurbs created from OB_FONT's */
167
168typedef struct CharInfo {
169 float kern;
170 short mat_nr;
171 char flag;
172 char _pad[1];
174
175typedef struct TextBox {
176 float x, y, w, h;
178
179/* These two Lines with # tell `makesdna` this struct can be excluded. */
180#
181#
182typedef struct EditNurb {
184
185 /* base of nurbs' list (old Curve->editnurb) */
186 ListBase nurbs;
187
188 /* index data for shape keys */
189 struct GHash *keyindex;
190
191 /* shape key being edited */
192 int shapenr;
193
198 char needs_flush_to_id;
199
201
202typedef struct Curve {
204
205 ID id;
207 struct AnimData *adt;
208
211
213 EditNurb *editnurb;
214
215 struct Object *bevobj, *taperobj, *textoncurve;
217 struct Ipo *ipo DNA_DEPRECATED;
218 struct Key *key;
219 struct Material **mat;
220
221 struct CurveProfile *bevel_profile;
222
223 float texspace_location[3];
224 float texspace_size[3];
225
227 short type;
228
229 char texspace_flag;
230 char _pad0[7];
231 short twist_mode;
232 float twist_smooth, smallcaps_scale;
233
234 int pathlen;
235 short bevresol, totcol;
236 int flag;
237 float offset, extrude, bevel_radius;
238
239 /* default */
240 short resolu, resolv;
241 short resolu_ren, resolv_ren;
242
243 /* edit, index in nurb list */
244 int actnu;
245 /* edit, index in active nurb (BPoint or BezTriple) */
246 int actvert;
247
248 char overflow;
249 char spacemode, align_y;
250 char bevel_mode;
255 char taper_radius_mode;
256 char _pad;
257
258 /* font part */
259 short lines;
260 float spacing, linedist, shear, fsize, wordspace, ulpos, ulheight;
261 float xof, yof;
262 float linewidth;
263
264 /* copy of EditFont vars (wchar_t aligned),
265 * warning! don't use in editmode (storage only) */
266 int pos;
267 int selstart, selend;
268
269 /* text data */
274 int len_char32;
276 int len;
277 char *str;
278 struct EditFont *editfont;
279
280 char family[64];
281 struct VFont *vfont;
282 struct VFont *vfontb;
283 struct VFont *vfonti;
284 struct VFont *vfontbi;
285
286 struct TextBox *tb;
287 int totbox, actbox;
288
289 struct CharInfo *strinfo;
290 struct CharInfo curinfo;
291 /* font part end */
292
294 float ctime;
295 float bevfac1, bevfac2;
296 char bevfac1_mapping, bevfac2_mapping;
297
298 char _pad2[6];
299 float fsize_realtime;
300
308 const struct Curves *curve_eval;
314 char edit_data_from_original;
315 char _pad3[7];
316
317 void *batch_cache;
318} Curve;
319
320#define CURVE_VFONT_ANY(cu) ((cu)->vfont), ((cu)->vfontb), ((cu)->vfonti), ((cu)->vfontbi)
321
322/* **************** CURVE ********************* */
323
325enum {
328};
329
331enum {
332 CU_3D = 1 << 0,
333 CU_FRONT = 1 << 1,
334 CU_BACK = 1 << 2,
335 CU_PATH = 1 << 3,
336 CU_FOLLOW = 1 << 4,
339 CU_STRETCH = 1 << 7,
340 /* CU_OFFS_PATHDIST = 1 << 8, */ /* DEPRECATED */
341 CU_FAST = 1 << 9, /* Font: no filling inside editmode */
342 /* CU_RETOPO = 1 << 10, */ /* DEPRECATED */
343 CU_DS_EXPAND = 1 << 11,
345 CU_PATH_RADIUS = 1 << 12,
346 /* CU_DEFORM_FILL = 1 << 13, */ /* DEPRECATED */
348 CU_FILL_CAPS = 1 << 14,
350 CU_MAP_TAPER = 1 << 15,
351};
352
354enum {
356 /* CU_TWIST_Y_UP = 1, */ /* not used yet */
357 /* CU_TWIST_X_UP = 2, */
360};
361
362/* Curve.bevfac1_mapping, Curve.bevfac2_mapping, bevel factor mapping */
363enum {
367};
368
370enum {
376};
377
379enum {
385};
386
388enum {
392};
393
395enum {
402};
403
404/* Curve.overflow. */
405enum {
409};
410
412enum {
413 CU_SMOOTH = 1 << 0,
414};
415
417enum {
422
423 /* only for adding */
425
426 /* 2 or 4 points */
428 /* 8 points circle */
430 /* 4x4 patch Nurb */
435 /* 5 points, 5th order straight line (for anim path) */
437};
438
439/* Nurb.flagu, Nurb.flagv */
440enum {
444};
445
446#define CU_ACT_NONE -1
447
448/* *************** BEZTRIPLE **************** */
449
451typedef enum eBezTriple_Flag {
452 /* `SELECT = (1 << 0)` */
453 BEZT_FLAG_TEMP_TAG = (1 << 1), /* always clear. */
454 /* Can be used to ignore keyframe points for certain operations. */
457
458/* h1 h2 (beztriple) */
459typedef enum eBezTriple_Handle {
464 HD_AUTO_ANIM = 4, /* auto-clamped handles for animation */
465 HD_ALIGN_DOUBLESIDE = 5, /* align handles, displayed both of them. used for masks */
467
468/* auto_handle_type (beztriple) */
470 /* Normal automatic handle that can be refined further. */
472 /* Handle locked horizontal due to being an Auto Clamped local
473 * extreme or a curve endpoint with Constant extrapolation.
474 * Further smoothing is disabled. */
477
478/* interpolation modes (used only for BezTriple->ipo) */
480 /* traditional interpolation */
481 BEZT_IPO_CONST = 0, /* constant interpolation */
482 BEZT_IPO_LIN = 1, /* linear interpolation */
483 BEZT_IPO_BEZ = 2, /* bezier interpolation */
484
485 /* easing equations */
497
498/* easing modes (used only for Keyframes - BezTriple->easing) */
506
507/* types of keyframe (used only for BezTriple->hide when BezTriple is used in F-Curves) */
509 BEZT_KEYTYPE_KEYFRAME = 0, /* default - 'proper' Keyframe */
510 BEZT_KEYTYPE_EXTREME = 1, /* 'extreme' keyframe */
511 BEZT_KEYTYPE_BREAKDOWN = 2, /* 'breakdown' keyframe */
512 BEZT_KEYTYPE_JITTER = 3, /* 'jitter' keyframe (for adding 'filler' secondary motion) */
513 BEZT_KEYTYPE_MOVEHOLD = 4, /* one end of a 'moving hold' */
520
521/* checks if the given BezTriple is selected */
522#define BEZT_ISSEL_ANY(bezt) \
523 (((bezt)->f2 & SELECT) || ((bezt)->f1 & SELECT) || ((bezt)->f3 & SELECT))
524#define BEZT_ISSEL_ALL(bezt) \
525 (((bezt)->f2 & SELECT) && ((bezt)->f1 & SELECT) && ((bezt)->f3 & SELECT))
526#define BEZT_ISSEL_ALL_HIDDENHANDLES(v3d, bezt) \
527 ((((v3d) != NULL) && ((v3d)->overlay.handle_display == CURVE_HANDLE_NONE)) ? \
528 (bezt)->f2 & SELECT : \
529 BEZT_ISSEL_ALL(bezt))
530#define BEZT_ISSEL_ANY_HIDDENHANDLES(v3d, bezt) \
531 ((((v3d) != NULL) && ((v3d)->overlay.handle_display == CURVE_HANDLE_NONE)) ? \
532 (bezt)->f2 & SELECT : \
533 BEZT_ISSEL_ANY(bezt))
534
535#define BEZT_ISSEL_IDX(bezt, i) \
536 ((i == 0 && (bezt)->f1 & SELECT) || (i == 1 && (bezt)->f2 & SELECT) || \
537 (i == 2 && (bezt)->f3 & SELECT))
538
539#define BEZT_SEL_ALL(bezt) \
540 { \
541 (bezt)->f1 |= SELECT; \
542 (bezt)->f2 |= SELECT; \
543 (bezt)->f3 |= SELECT; \
544 } \
545 ((void)0)
546#define BEZT_DESEL_ALL(bezt) \
547 { \
548 (bezt)->f1 &= ~SELECT; \
549 (bezt)->f2 &= ~SELECT; \
550 (bezt)->f3 &= ~SELECT; \
551 } \
552 ((void)0)
553#define BEZT_SEL_INVERT(bezt) \
554 { \
555 (bezt)->f1 ^= SELECT; \
556 (bezt)->f2 ^= SELECT; \
557 (bezt)->f3 ^= SELECT; \
558 } \
559 ((void)0)
560
561#define BEZT_SEL_IDX(bezt, i) \
562 { \
563 switch (i) { \
564 case 0: \
565 (bezt)->f1 |= SELECT; \
566 break; \
567 case 1: \
568 (bezt)->f2 |= SELECT; \
569 break; \
570 case 2: \
571 (bezt)->f3 |= SELECT; \
572 break; \
573 default: \
574 break; \
575 } \
576 } \
577 ((void)0)
578
579#define BEZT_DESEL_IDX(bezt, i) \
580 { \
581 switch (i) { \
582 case 0: \
583 (bezt)->f1 &= ~SELECT; \
584 break; \
585 case 1: \
586 (bezt)->f2 &= ~SELECT; \
587 break; \
588 case 2: \
589 (bezt)->f3 &= ~SELECT; \
590 break; \
591 default: \
592 break; \
593 } \
594 } \
595 ((void)0)
596
597#define BEZT_IS_AUTOH(bezt) \
598 (ELEM((bezt)->h1, HD_AUTO, HD_AUTO_ANIM) && ELEM((bezt)->h2, HD_AUTO, HD_AUTO_ANIM))
599
600/* *************** CHARINFO **************** */
601
603enum {
604 /* NOTE: CU_CHINFO_WRAP, CU_CHINFO_SMALLCAPS_TEST and CU_CHINFO_TRUNCATE are set dynamically. */
615};
616
618#define CU_CHINFO_STYLE_ALL \
619 (CU_CHINFO_BOLD | CU_CHINFO_ITALIC | CU_CHINFO_UNDERLINE | CU_CHINFO_SMALLCAPS)
620
621/* mixed with KEY_LINEAR but define here since only curve supports */
622#define KEY_CU_EASE 3
623
624/* indicates point has been seen during surface duplication */
625#define SURF_SEEN (1 << 2)
ID and Library types, which are fundamental for SDNA.
enum eAnimEdit_AutoSnap DNA_DEPRECATED
@ CU_TAPER_RADIUS_OVERRIDE
@ CU_TAPER_RADIUS_MULTIPLY
@ CU_TAPER_RADIUS_ADD
struct BevList BevList
@ CU_SMOOTH
@ CU_OVERFLOW_SCALE
@ CU_OVERFLOW_TRUNCATE
@ CU_OVERFLOW_NONE
struct CharInfo CharInfo
@ CU_ALIGN_Y_TOP
@ CU_ALIGN_Y_BOTTOM_BASELINE
@ CU_ALIGN_Y_CENTER
@ CU_ALIGN_Y_BOTTOM
@ CU_ALIGN_Y_TOP_BASELINE
struct BevPoint BevPoint
@ CU_PRIM_SPHERE
@ CU_PRIM_CURVE
@ CU_BEZIER
@ CU_PRIMITIVE
@ CU_TYPE
@ CU_POLY
@ CU_PRIM_DONUT
@ CU_PRIM_TUBE
@ CU_PRIM_CIRCLE
@ CU_NURBS
@ CU_PRIM_PATCH
@ CU_PRIM_PATH
struct BPoint BPoint
@ CU_ALIGN_X_FLUSH
@ CU_ALIGN_X_MIDDLE
@ CU_ALIGN_X_LEFT
@ CU_ALIGN_X_JUSTIFY
@ CU_ALIGN_X_RIGHT
@ CU_FILL_CAPS
@ CU_FAST
@ CU_3D
@ CU_FRONT
@ CU_FOLLOW
@ CU_PATH
@ CU_STRETCH
@ CU_DS_EXPAND
@ CU_PATH_RADIUS
@ CU_PATH_CLAMP
@ CU_MAP_TAPER
@ CU_BACK
@ CU_DEFORM_BOUNDS_OFF
@ CU_BEV_MODE_OBJECT
@ CU_BEV_MODE_ROUND
@ CU_BEV_MODE_CURVE_PROFILE
@ CU_CHINFO_WRAP
@ CU_CHINFO_UNDERLINE
@ CU_CHINFO_BOLD
@ CU_CHINFO_ITALIC
@ CU_CHINFO_SMALLCAPS_CHECK
@ CU_CHINFO_SMALLCAPS
@ CU_CHINFO_OVERFLOW
eBezTriple_Handle
@ HD_AUTO_ANIM
@ HD_VECT
@ HD_FREE
@ HD_AUTO
@ HD_ALIGN_DOUBLESIDE
@ HD_ALIGN
eBezTriple_Auto_Type
@ HD_AUTOTYPE_NORMAL
@ HD_AUTOTYPE_LOCKED_FINAL
@ CU_TEXSPACE_FLAG_AUTO
@ CU_TEXSPACE_FLAG_AUTO_EVALUATED
struct TextBox TextBox
struct BezTriple BezTriple
@ CU_BEVFAC_MAP_SPLINE
@ CU_BEVFAC_MAP_RESOLU
@ CU_BEVFAC_MAP_SEGMENT
eBezTriple_Interpolation
@ BEZT_IPO_ELASTIC
@ BEZT_IPO_CIRC
@ BEZT_IPO_QUART
@ BEZT_IPO_BACK
@ BEZT_IPO_BOUNCE
@ BEZT_IPO_CUBIC
@ BEZT_IPO_EXPO
@ BEZT_IPO_CONST
@ BEZT_IPO_BEZ
@ BEZT_IPO_LIN
@ BEZT_IPO_SINE
@ BEZT_IPO_QUAD
@ BEZT_IPO_QUINT
eBezTriple_Easing
@ BEZT_IPO_EASE_OUT
@ BEZT_IPO_EASE_AUTO
@ BEZT_IPO_EASE_IN
@ BEZT_IPO_EASE_IN_OUT
@ CU_TWIST_MINIMUM
@ CU_TWIST_TANGENT
@ CU_TWIST_Z_UP
@ CU_NURB_CYCLIC
@ CU_NURB_ENDPOINT
@ CU_NURB_BEZIER
eBezTriple_Flag
@ BEZT_FLAG_TEMP_TAG
@ BEZT_FLAG_IGNORE_TAG
eBezTriple_KeyframeType
@ BEZT_KEYTYPE_EXTREME
@ BEZT_KEYTYPE_JITTER
@ BEZT_KEYTYPE_BREAKDOWN
@ BEZT_KEYTYPE_MOVEHOLD
@ BEZT_KEYTYPE_GENERATED
@ BEZT_KEYTYPE_KEYFRAME
#define DNA_DEFINE_CXX_METHODS(class_name)
Definition DNA_defs.h:66
These structs are the foundation for all linked lists in the library system.
SIMD_FORCE_INLINE const btScalar & w() const
Return the w value.
Definition btQuadWord.h:119
int len
#define str(s)
unsigned char uint8_t
Definition stdint.h:78
char _pad1[1]
char _pad[4]
uint8_t f1
float vec[4]
struct BevList * next
float * seglen
BevPoint * bevpoints
int * segbevcount
struct BevList * prev
float dir[3]
float tan[3]
float quat[4]
float vec[3]
char auto_handle_type
float vec[3][3]
Definition DNA_ID.h:413
short flagu
short orderu
struct Nurb * next
short orderv
float * knotsu
short flag
short tilt_interp
float * knotsv
BezTriple * bezt
BPoint * bp
short resolu
struct Nurb * prev
char _pad[4]
short resolv
short radius_interp
short hide
short flagv
short mat_nr
uint8_t flag
Definition wm_window.cc:138