Blender  V3.3
DNA_object_types.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later
2  * Copyright 2001-2002 NaN Holding BV. All rights reserved. */
3 
9 #pragma once
10 
11 #include "DNA_object_enums.h"
12 
13 #include "DNA_customdata_types.h"
14 #include "DNA_defs.h"
15 #include "DNA_lineart_types.h"
16 #include "DNA_listBase.h"
17 
18 #include "DNA_ID.h"
19 #include "DNA_action_types.h" /* bAnimVizSettings */
20 #include "DNA_customdata_types.h"
21 #include "DNA_defs.h"
22 #include "DNA_listBase.h"
23 
24 #ifdef __cplusplus
25 extern "C" {
26 #endif
27 
28 struct AnimData;
29 struct BoundBox;
30 struct Curve;
31 struct FluidsimSettings;
32 struct GeometrySet;
33 struct Ipo;
35 struct Material;
36 struct Mesh;
37 struct Object;
38 struct PartDeflect;
39 struct Path;
40 struct RigidBodyOb;
41 struct SculptSession;
42 struct SoftBody;
43 struct bGPdata;
44 
46 typedef struct bDeformGroup {
47  struct bDeformGroup *next, *prev;
49  char name[64];
50  /* need this flag for locking weights */
51  char flag, _pad0[7];
53 
55 typedef struct bFaceMap {
56  struct bFaceMap *next, *prev;
58  char name[64];
59  char flag;
60  char _pad0[7];
62 
63 #define MAX_VGROUP_NAME 64
64 
65 /* bDeformGroup->flag */
66 #define DG_LOCK_WEIGHT 1
67 
89 typedef struct BoundBox {
90  float vec[8][3];
91  int flag;
92  char _pad0[4];
94 
96 enum {
97  /* BOUNDBOX_DISABLED = (1 << 0), */ /* UNUSED */
98  BOUNDBOX_DIRTY = (1 << 1),
99 };
100 
101 struct CustomData_MeshMasks;
102 
104 typedef struct Object_Runtime {
110 
113 
118 
119  char _pad0[2];
120 
123 
129  char _pad1[3];
130 
136 
139 
141  struct BoundBox *bb;
142 
148  struct ID *data_orig;
153  struct ID *data_eval;
154 
162 
168 
169  /* Evaluated mesh cage in edit mode. */
171 
174 
180  struct bGPdata *gpd_orig;
185  struct bGPdata *gpd_eval;
186 
192 
198 
201 
202  unsigned short local_collections_bits;
203  short _pad2[3];
204 
208 
209  int _pad3[3];
211 
212 typedef struct ObjectLineArt {
213  short usage;
214  short flags;
215 
218 
219  unsigned char intersection_priority;
220 
221  char _pad[7];
223 
229  OBJECT_LRT_INCLUDE = (1 << 0),
231  OBJECT_LRT_EXCLUDE = (1 << 2),
235 };
236 
240 };
241 
242 typedef struct Object {
244 
245  ID id;
247  struct AnimData *adt;
249  struct DrawDataList drawdata;
250 
252 
253  short type, partype;
255  int par1, par2, par3;
257  char parsubstr[64];
258  struct Object *parent, *track;
259  /* Proxy pointer are deprecated, only kept for conversion to liboverrides. */
260  struct Object *proxy DNA_DEPRECATED;
261  struct Object *proxy_group DNA_DEPRECATED;
262  struct Object *proxy_from DNA_DEPRECATED;
264  struct Ipo *ipo DNA_DEPRECATED;
265  /* struct Path *path; */
266  struct bAction *action DNA_DEPRECATED; /* XXX deprecated... old animation system */
267  struct bAction *poselib;
269  struct bPose *pose;
271  void *data;
272 
274  struct bGPdata *gpd
275  DNA_DEPRECATED; /* XXX deprecated... replaced by gpencil object, keep for readfile */
276 
281  void *_pad0;
282 
283  ListBase constraintChannels DNA_DEPRECATED; /* XXX deprecated... old animation system */
284  ListBase effect DNA_DEPRECATED; /* XXX deprecated... keep for readfile */
285  ListBase defbase DNA_DEPRECATED; /* Only for versioning, moved to object data. */
294 
296  int mode;
298 
299  /* materials */
301  struct Material **mat;
303  char *matbits;
305  int totcol;
307  int actcol;
308 
309  /* rot en drot have to be together! (transform('r' en 's')) */
310  float loc[3], dloc[3];
312  float scale[3];
314  float dsize[3] DNA_DEPRECATED;
316  float dscale[3];
318  float rot[3], drot[3];
320  float quat[4], dquat[4];
322  float rotAxis[3], drotAxis[3];
326  float obmat[4][4];
328  float parentinv[4][4];
331  float constinv[4][4];
338  float imat[4][4];
339 
341  unsigned int lay DNA_DEPRECATED;
342 
344  short flag;
346  short colbits DNA_DEPRECATED;
347 
352  short nlaflag;
353 
354  char _pad1;
356 
357  /* Depsgraph */
359  short base_flag;
361  unsigned short base_local_view_bits;
362 
364  unsigned short col_group, col_mask;
365 
367  short rotmode;
368 
370  char boundtype;
373 
375  short dtx;
377  char dt;
382 
384  short index;
386  unsigned short actdef DNA_DEPRECATED;
388  unsigned short actfmap;
389  char _pad2[2];
391  float color[4];
392 
394  short softflag;
395 
398 
400  short shapenr;
402  char shapeflag;
403 
404  char _pad3[1];
405 
408  ListBase nlastrips DNA_DEPRECATED; /* XXX deprecated... old animation system */
409  ListBase hooks DNA_DEPRECATED; /* XXX deprecated... old animation system */
412 
414  struct PartDeflect *pd;
416  struct SoftBody *soft;
419 
421  struct FluidsimSettings *fluidsimSettings
422  DNA_DEPRECATED; /* XXX deprecated... replaced by mantaflow, keep for readfile */
423 
425 
430 
432  float ima_ofs[2];
438 
441  char _pad8[4];
442 
444 
446 
449 
453 
455 typedef struct ObHook {
456  struct ObHook *next, *prev;
457 
458  struct Object *parent;
460  float parentinv[4][4];
462  float mat[4][4];
464  float cent[3];
466  float falloff;
467 
469  char name[64];
470 
471  int *indexar;
473  int totindex, curindex;
475  short type, active;
476  float force;
478 
479 /* **************** OBJECT ********************* */
480 
481 /* used many places, should be specialized. */
482 #define SELECT 1
483 
485 enum {
486  OB_EMPTY = 0,
487  OB_MESH = 1,
490  OB_SURF = 3,
491  OB_FONT = 4,
492  OB_MBALL = 5,
493 
494  OB_LAMP = 10,
495  OB_CAMERA = 11,
496 
499 
501 
503 
506 
507  OB_CURVES = 27,
508 
510 
511  OB_VOLUME = 29,
512 
513  /* Keep last. */
515 };
516 
517 /* check if the object type supports materials */
518 #define OB_TYPE_SUPPORT_MATERIAL(_type) \
519  (((_type) >= OB_MESH && (_type) <= OB_MBALL) || ((_type) >= OB_GPENCIL && (_type) <= OB_VOLUME))
522 #define OB_TYPE_IS_GEOMETRY(_type) \
523  (ELEM(_type, \
524  OB_MESH, \
525  OB_SURF, \
526  OB_FONT, \
527  OB_MBALL, \
528  OB_GPENCIL, \
529  OB_CURVES_LEGACY, \
530  OB_CURVES, \
531  OB_POINTCLOUD, \
532  OB_VOLUME))
533 #define OB_TYPE_SUPPORT_VGROUP(_type) (ELEM(_type, OB_MESH, OB_LATTICE, OB_GPENCIL))
534 #define OB_TYPE_SUPPORT_EDITMODE(_type) \
535  (ELEM(_type, \
536  OB_MESH, \
537  OB_FONT, \
538  OB_CURVES_LEGACY, \
539  OB_SURF, \
540  OB_MBALL, \
541  OB_LATTICE, \
542  OB_ARMATURE, \
543  OB_CURVES))
544 #define OB_TYPE_SUPPORT_PARVERT(_type) \
545  (ELEM(_type, OB_MESH, OB_SURF, OB_CURVES_LEGACY, OB_LATTICE))
546 
548 #define OB_DATA_SUPPORT_EDITMODE(_type) \
549  (ELEM(_type, ID_ME, ID_CU_LEGACY, ID_MB, ID_LT, ID_AR) || \
550  (U.experimental.use_new_curves_tools && (_type) == ID_CV))
551 
552 /* is this ID type used as object data */
553 #define OB_DATA_SUPPORT_ID(_id_type) \
554  (ELEM(_id_type, \
555  ID_ME, \
556  ID_CU_LEGACY, \
557  ID_MB, \
558  ID_LA, \
559  ID_SPK, \
560  ID_LP, \
561  ID_CA, \
562  ID_LT, \
563  ID_GD, \
564  ID_AR, \
565  ID_CV, \
566  ID_PT, \
567  ID_VO))
568 
569 #define OB_DATA_SUPPORT_ID_CASE \
570  ID_ME: \
571  case ID_CU_LEGACY: \
572  case ID_MB: \
573  case ID_LA: \
574  case ID_SPK: \
575  case ID_LP: \
576  case ID_CA: \
577  case ID_LT: \
578  case ID_GD: \
579  case ID_AR: \
580  case ID_CV: \
581  case ID_PT: \
582  case ID_VO
583 
585 enum {
586  PARTYPE = (1 << 4) - 1,
588  PARSKEL = 4,
589  PARVERT1 = 5,
590  PARVERT3 = 6,
591  PARBONE = 7,
592 
593 };
594 
596 enum {
598  OB_TRANSFLAG_UNUSED_1 = 1 << 1, /* cleared */
599  OB_NEG_SCALE = 1 << 2,
600  OB_TRANSFLAG_UNUSED_3 = 1 << 3, /* cleared */
601  OB_DUPLIVERTS = 1 << 4,
602  OB_DUPLIROT = 1 << 5,
603  OB_TRANSFLAG_UNUSED_6 = 1 << 6, /* cleared */
604  /* runtime, calculate derivedmesh for dupli before it's used */
605  OB_TRANSFLAG_UNUSED_7 = 1 << 7, /* dirty */
607  OB_DUPLIFACES = 1 << 9,
609  OB_DUPLIPARTS = 1 << 11,
610  OB_TRANSFLAG_UNUSED_12 = 1 << 12, /* cleared */
611  /* runtime constraints disable */
612  OB_NO_CONSTRAINTS = 1 << 13,
613 
615 };
616 
618 enum {
619  OB_POSX = 0,
620  OB_POSY = 1,
621  OB_POSZ = 2,
622  OB_NEGX = 3,
623  OB_NEGY = 4,
624  OB_NEGZ = 5,
625 };
626 
628 enum {
629  OB_DRAWBOUNDOX = 1 << 0,
630  OB_AXIS = 1 << 1,
631  OB_TEXSPACE = 1 << 2,
632  OB_DRAWNAME = 1 << 3,
633  /* OB_DRAWIMAGE = 1 << 4, */ /* UNUSED */
634  /* for solid+wire display */
635  OB_DRAWWIRE = 1 << 5,
636  /* For overdrawing. */
638  /* Enable transparent draw. */
639  OB_DRAWTRANSP = 1 << 7,
640  OB_DRAW_ALL_EDGES = 1 << 8, /* only for meshes currently */
642  /* Enable lights for grease pencil. */
644 };
645 
647 enum {
652  OB_CUBE = 5,
656 };
657 
662 enum {
663  GP_EMPTY = 0,
669 };
670 
672 enum {
677  // OB_BOUND_TRIANGLE_MESH = 4, /* UNUSED */
678  // OB_BOUND_CONVEX_HULL = 5, /* UNUSED */
679  // OB_BOUND_DYN_MESH = 6, /* UNUSED */
681 };
682 
683 /* **************** BASE ********************* */
684 
686 enum {
687  BA_WAS_SEL = (1 << 1),
688  /* NOTE: BA_HAS_RECALC_DATA can be re-used later if freed in readfile.c. */
689  // BA_HAS_RECALC_OB = (1 << 2), /* DEPRECATED */
690  // BA_HAS_RECALC_DATA = (1 << 3), /* DEPRECATED */
693 };
694 
695 /* NOTE: this was used as a proper setting in past, so nullify before using */
696 #define BA_TEMP_TAG (1 << 5)
697 
702 #define BA_TRANSFORM_LOCKED_IN_PLACE (1 << 7)
703 
704 #define BA_TRANSFORM_CHILD (1 << 8) /* child of a transformed object */
705 #define BA_TRANSFORM_PARENT (1 << 13) /* parent of a transformed object */
706 
707 #define OB_FROMDUPLI (1 << 9)
708 #define OB_DONE (1 << 10) /* unknown state, clear before use */
709 #ifdef DNA_DEPRECATED_ALLOW
710 # define OB_FLAG_UNUSED_11 (1 << 11) /* cleared */
711 # define OB_FLAG_UNUSED_12 (1 << 12) /* cleared */
712 #endif
713 
715 enum {
717  OB_HIDE_SELECT = 1 << 1,
718  OB_HIDE_RENDER = 1 << 2,
719  OB_HIDE_CAMERA = 1 << 3,
720  OB_HIDE_DIFFUSE = 1 << 4,
721  OB_HIDE_GLOSSY = 1 << 5,
724  OB_HIDE_SHADOW = 1 << 8,
725  OB_HOLDOUT = 1 << 9,
726  OB_SHADOW_CATCHER = 1 << 10
727 };
728 
730 enum {
731  OB_SHAPE_LOCK = 1 << 0,
732 #ifdef DNA_DEPRECATED_ALLOW
733  OB_SHAPE_FLAG_UNUSED_1 = 1 << 1, /* cleared */
734 #endif
736 };
737 
739 enum {
740  OB_ADS_UNUSED_1 = 1 << 0, /* cleared */
741  OB_ADS_UNUSED_2 = 1 << 1, /* cleared */
742  /* object-channel expanded status */
743  OB_ADS_COLLAPSED = 1 << 10,
744  /* object's ipo-block */
745  /* OB_ADS_SHOWIPO = 1 << 11, */ /* UNUSED */
746  /* object's constraint channels */
747  /* OB_ADS_SHOWCONS = 1 << 12, */ /* UNUSED */
748  /* object's material channels */
749  /* OB_ADS_SHOWMATS = 1 << 13, */ /* UNUSED */
750  /* object's particle channels */
751  /* OB_ADS_SHOWPARTS = 1 << 14, */ /* UNUSED */
752 };
753 
755 enum {
756  OB_LOCK_LOCX = 1 << 0,
757  OB_LOCK_LOCY = 1 << 1,
758  OB_LOCK_LOCZ = 1 << 2,
760  OB_LOCK_ROTX = 1 << 3,
761  OB_LOCK_ROTY = 1 << 4,
762  OB_LOCK_ROTZ = 1 << 5,
764  OB_LOCK_SCALEX = 1 << 6,
765  OB_LOCK_SCALEY = 1 << 7,
766  OB_LOCK_SCALEZ = 1 << 8,
768  OB_LOCK_ROTW = 1 << 9,
769  OB_LOCK_ROT4D = 1 << 10,
770 };
771 
773 enum {
776 };
777 
779 #define OB_EMPTY_IMAGE_DEPTH_DEFAULT 0
780 #define OB_EMPTY_IMAGE_DEPTH_FRONT 1
781 #define OB_EMPTY_IMAGE_DEPTH_BACK 2
782 
784 enum {
790 };
791 
793 enum {
795 };
796 
797 typedef enum ObjectModifierFlag {
800 
801 #define MAX_DUPLI_RECUR 8
802 
803 #ifdef __cplusplus
804 }
805 #endif
typedef float(TangentPoint)[2]
ID and Library types, which are fundamental for sdna.
#define DNA_DEFINE_CXX_METHODS(class_name)
Definition: DNA_defs.h:64
These structs are the foundation for all linked lists in the library system.
struct ObHook ObHook
@ OB_HIDE_TRANSMISSION
@ OB_HOLDOUT
@ OB_HIDE_RENDER
@ OB_HIDE_CAMERA
@ OB_HIDE_SELECT
@ OB_HIDE_GLOSSY
@ OB_HIDE_SHADOW
@ OB_SHADOW_CATCHER
@ OB_HIDE_VIEWPORT
@ OB_HIDE_DIFFUSE
@ OB_HIDE_VOLUME_SCATTER
struct ObjectLineArt ObjectLineArt
@ OB_EMPTY_IMAGE_USE_ALPHA_BLEND
@ OB_EMPTY_CONE
@ OB_SINGLE_ARROW
@ OB_PLAINAXES
@ OB_ARROWS
@ OB_CIRCLE
@ OB_CUBE
@ OB_EMPTY_IMAGE
@ OB_EMPTY_SPHERE
ObjectModifierFlag
@ OB_MODIFIER_FLAG_ADD_REST_POSITION
@ OB_SHAPE_EDIT_MODE
@ OB_SHAPE_LOCK
@ OB_SPEAKER
@ OB_LATTICE
@ OB_MBALL
@ OB_EMPTY
@ OB_SURF
@ OB_CAMERA
@ OB_FONT
@ OB_TYPE_MAX
@ OB_ARMATURE
@ OB_LAMP
@ OB_MESH
@ OB_POINTCLOUD
@ OB_VOLUME
@ OB_CURVES_LEGACY
@ OB_CURVES
@ OB_GPENCIL
@ OB_LIGHTPROBE
eObjectLineArt_Flags
@ OBJECT_LRT_OWN_INTERSECTION_PRIORITY
@ OBJECT_LRT_OWN_CREASE
@ OB_POSX
@ OB_NEGZ
@ OB_POSY
@ OB_NEGX
@ OB_POSZ
@ OB_NEGY
@ BOUNDBOX_DIRTY
@ OB_LOCK_ROTZ
@ OB_LOCK_ROT4D
@ OB_LOCK_ROT
@ OB_LOCK_SCALEZ
@ OB_LOCK_ROTX
@ OB_LOCK_SCALEX
@ OB_LOCK_ROTW
@ OB_LOCK_LOCY
@ OB_LOCK_LOCZ
@ OB_LOCK_ROTY
@ OB_LOCK_SCALEY
@ OB_LOCK_LOC
@ OB_LOCK_LOCX
@ OB_LOCK_SCALE
@ BA_WAS_SEL
@ BA_SNAP_FIX_DEPS_FIASCO
@ OB_DUPLI_FLAG_VIEWPORT
@ OB_DUPLI_FLAG_RENDER
@ GP_STROKE
@ GP_MONKEY
@ GP_EMPTY
@ GP_LRT_OBJECT
@ GP_LRT_COLLECTION
@ GP_LRT_SCENE
@ OB_DRAWNAME
@ OB_DRAWBOUNDOX
@ OB_DRAW_ALL_EDGES
@ OB_AXIS
@ OB_USE_GPENCIL_LIGHTS
@ OB_DRAW_NO_SHADOW_CAST
@ OB_DRAW_IN_FRONT
@ OB_TEXSPACE
@ OB_DRAWWIRE
@ OB_DRAWTRANSP
struct bDeformGroup bDeformGroup
struct BoundBox BoundBox
struct bFaceMap bFaceMap
@ OB_BOUND_CAPSULE
@ OB_BOUND_SPHERE
@ OB_BOUND_CONE
@ OB_BOUND_BOX
@ OB_BOUND_CYLINDER
@ OB_DUPLIFACES
@ OB_TRANSFLAG_UNUSED_7
@ OB_TRANSFORM_ADJUST_ROOT_PARENT_FOR_VIEW_LOCK
@ OB_DUPLI
@ OB_NO_CONSTRAINTS
@ OB_TRANSFLAG_UNUSED_1
@ OB_NEG_SCALE
@ OB_DUPLIPARTS
@ OB_DUPLIVERTS
@ OB_TRANSFLAG_UNUSED_12
@ OB_TRANSFLAG_UNUSED_6
@ OB_TRANSFLAG_UNUSED_3
@ OB_DUPLICOLLECTION
@ OB_DUPLIROT
@ OB_DUPLIFACES_SCALE
@ OB_EMPTY_IMAGE_HIDE_FRONT
@ OB_EMPTY_IMAGE_HIDE_NON_AXIS_ALIGNED
@ OB_EMPTY_IMAGE_HIDE_ORTHOGRAPHIC
@ OB_EMPTY_IMAGE_HIDE_BACK
@ OB_EMPTY_IMAGE_HIDE_PERSPECTIVE
@ OB_ADS_COLLAPSED
@ OB_ADS_UNUSED_1
@ OB_ADS_UNUSED_2
eObjectLineArt_Usage
@ OBJECT_LRT_INCLUDE
@ OBJECT_LRT_NO_INTERSECTION
@ OBJECT_LRT_EXCLUDE
@ OBJECT_LRT_INHERIT
@ OBJECT_LRT_OCCLUSION_ONLY
@ OBJECT_LRT_INTERSECTION_ONLY
@ OBJECT_LRT_FORCE_INTERSECTION
@ PARVERT1
@ PARSKEL
@ PAROBJECT
@ PARTYPE
@ PARVERT3
@ PARBONE
struct Object_Runtime Object_Runtime
SymEdge< T > * prev(const SymEdge< T > *se)
Definition: delaunay_2d.cc:105
unsigned char uint8_t
Definition: stdint.h:78
float vec[8][3]
char _pad0[4]
Definition: DNA_ID.h:368
ustring name
Definition: graph/node.h:174
struct Object * parent
short active
struct ObHook * next
int * indexar
float falloff
unsigned char intersection_priority
struct bGPdata * gpd_orig
struct BoundBox * editmesh_bb_cage
struct CurveCache * curve_cache
CustomData_MeshMasks last_data_mask
float(* crazyspace_deform_imats)[3][3]
unsigned short local_collections_bits
float parent_display_origin[3]
struct Mesh * editmesh_eval_cage
struct Mesh * mesh_deform_eval
double overlay_mode_transfer_start_time
struct ID * data_eval
float(* crazyspace_deform_cos)[3]
struct bGPdata * gpd_eval
struct Curve * object_as_temp_curve
struct GeometrySet * geometry_set_eval
struct ID * data_orig
struct BoundBox * bb
struct Mesh * object_as_temp_mesh
int restore_mode
struct bAction * poselib
short partype
ListBase particlesystem
struct Object * track
short transflag
unsigned short col_group
ListBase constraints
struct Collection * instance_collection
char collision_boundtype
short base_flag
struct bPose * pose
struct Object *proxy DNA_DEPRECATED
float drot[3]
ListBase modifiers
float dquat[4]
struct RigidBodyOb * rigidbody_object
char boundtype
float constinv[4][4]
ListBase greasepencil_modifiers
struct PreviewImage * preview
struct Material ** mat
float loc[3]
char * matbits
struct PartDeflect * pd
float dloc[3]
unsigned short actfmap
float scale[3]
float imat[4][4]
struct SoftBody * soft
short nlaflag
float rot[3]
short shapenr
void * _pad0
float parentinv[4][4]
char empty_drawtype
ListBase shader_fx
Object_Runtime runtime
ImageUser * iuser
short visibility_flag
unsigned short col_mask
char empty_image_flag
uint8_t modifier_flag
ObjectLineArt lineart
float drotAxis[3]
float empty_drawsize
char _pad8[4]
bMotionPath * mpath
float obmat[4][4]
short softflag
float quat[4]
short rotmode
float rotAngle
ListBase pc_ids
float rotAxis[3]
float drotAngle
float color[4]
struct AnimData * adt
float dscale[3]
float instance_faces_scale
short protectflag
char _pad3[1]
char empty_image_depth
struct DrawDataList drawdata
struct Object * parent
short trackflag
char duplicator_visibility_flag
unsigned short base_local_view_bits
struct SculptSession * sculpt
struct RigidBodyCon * rigidbody_constraint
char _pad2[2]
short upflag
void * data
char shapeflag
struct LightgroupMembership * lightgroup
ListBase fmaps
char parsubstr[64]
char empty_image_visibility_flag
bAnimVizSettings avs
float ima_ofs[2]
struct bDeformGroup * next
struct bDeformGroup * prev
struct bFaceMap * next
char _pad0[7]
struct bFaceMap * prev
char name[64]