2023-08-15 16:20:26 +02:00
|
|
|
/* SPDX-FileCopyrightText: 2023 Blender Authors
|
2023-05-31 16:19:06 +02:00
|
|
|
*
|
|
|
|
* SPDX-License-Identifier: GPL-2.0-or-later */
|
2020-03-17 14:41:48 +01:00
|
|
|
|
2020-03-20 02:19:09 +01:00
|
|
|
/** \file
|
|
|
|
* \ingroup DNA
|
2020-03-17 14:41:48 +01:00
|
|
|
*/
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include "DNA_ID.h"
|
|
|
|
|
|
|
|
struct PackedFile;
|
|
|
|
|
2024-01-06 13:26:59 +01:00
|
|
|
#ifdef __cplusplus
|
|
|
|
namespace blender::bke {
|
|
|
|
struct VolumeRuntime;
|
|
|
|
}
|
|
|
|
using VolumeRuntimeHandle = blender::bke::VolumeRuntime;
|
|
|
|
#else
|
|
|
|
typedef struct VolumeRuntimeHandle VolumeRuntimeHandle;
|
|
|
|
#endif
|
2020-03-17 14:41:48 +01:00
|
|
|
|
|
|
|
typedef struct VolumeDisplay {
|
|
|
|
float density;
|
|
|
|
int wireframe_type;
|
|
|
|
int wireframe_detail;
|
2020-09-15 17:51:14 +02:00
|
|
|
int interpolation_method;
|
|
|
|
int axis_slice_method;
|
|
|
|
int slice_axis;
|
|
|
|
float slice_depth;
|
2020-03-17 14:41:48 +01:00
|
|
|
int _pad[1];
|
|
|
|
} VolumeDisplay;
|
|
|
|
|
|
|
|
typedef struct VolumeRender {
|
|
|
|
int precision;
|
|
|
|
int space;
|
|
|
|
float step_size;
|
|
|
|
float clipping;
|
|
|
|
} VolumeRender;
|
|
|
|
|
|
|
|
typedef struct Volume {
|
|
|
|
ID id;
|
|
|
|
struct AnimData *adt; /* animation data (must be immediately after id) */
|
|
|
|
|
|
|
|
/* File */
|
|
|
|
char filepath[1024]; /* FILE_MAX */
|
|
|
|
struct PackedFile *packedfile;
|
|
|
|
|
|
|
|
/* Sequence */
|
|
|
|
char is_sequence;
|
|
|
|
char sequence_mode;
|
|
|
|
char _pad1[2];
|
|
|
|
int frame_start;
|
|
|
|
int frame_duration;
|
|
|
|
int frame_offset;
|
|
|
|
|
|
|
|
/* Flag */
|
|
|
|
int flag;
|
|
|
|
|
|
|
|
/* Grids */
|
|
|
|
int active_grid;
|
|
|
|
|
|
|
|
/* Material */
|
|
|
|
struct Material **mat;
|
|
|
|
short totcol;
|
|
|
|
short _pad2[3];
|
|
|
|
|
|
|
|
/* Render & Display Settings */
|
|
|
|
VolumeRender render;
|
|
|
|
VolumeDisplay display;
|
|
|
|
|
2022-04-19 16:28:14 +02:00
|
|
|
/* Velocity field name. */
|
|
|
|
char velocity_grid[64];
|
|
|
|
|
|
|
|
char _pad3[3];
|
|
|
|
|
|
|
|
/* Unit of time the velocity vectors are expressed in.
|
|
|
|
* This uses the same enumeration values as #CacheFile.velocity_unit. */
|
|
|
|
char velocity_unit;
|
|
|
|
|
|
|
|
/* Factor for velocity vector for artistic control. */
|
|
|
|
float velocity_scale;
|
|
|
|
|
2020-03-17 14:41:48 +01:00
|
|
|
/* Draw Cache */
|
|
|
|
void *batch_cache;
|
|
|
|
|
|
|
|
/* Runtime Data */
|
2024-01-06 13:26:59 +01:00
|
|
|
VolumeRuntimeHandle *runtime;
|
2020-03-17 14:41:48 +01:00
|
|
|
} Volume;
|
|
|
|
|
2021-12-20 08:58:37 +01:00
|
|
|
/** #Volume.flag */
|
2020-03-17 14:41:48 +01:00
|
|
|
enum {
|
|
|
|
VO_DS_EXPAND = (1 << 0),
|
|
|
|
};
|
|
|
|
|
2021-12-20 08:58:37 +01:00
|
|
|
/** #Volume.sequence_mode */
|
2020-03-17 14:41:48 +01:00
|
|
|
typedef enum VolumeSequenceMode {
|
|
|
|
VOLUME_SEQUENCE_CLIP = 0,
|
2020-04-24 07:49:25 +02:00
|
|
|
VOLUME_SEQUENCE_EXTEND = 1,
|
|
|
|
VOLUME_SEQUENCE_REPEAT = 2,
|
|
|
|
VOLUME_SEQUENCE_PING_PONG = 3,
|
2020-03-17 14:41:48 +01:00
|
|
|
} VolumeSequenceMode;
|
|
|
|
|
2021-12-20 08:58:37 +01:00
|
|
|
/** #VolumeDisplay.wireframe_type */
|
2020-03-17 14:41:48 +01:00
|
|
|
typedef enum VolumeWireframeType {
|
|
|
|
VOLUME_WIREFRAME_NONE = 0,
|
|
|
|
VOLUME_WIREFRAME_BOUNDS = 1,
|
|
|
|
VOLUME_WIREFRAME_BOXES = 2,
|
|
|
|
VOLUME_WIREFRAME_POINTS = 3,
|
|
|
|
} VolumeWireframeType;
|
|
|
|
|
2021-12-20 08:58:37 +01:00
|
|
|
/** #VolumeDisplay.wireframe_detail */
|
2020-03-17 14:41:48 +01:00
|
|
|
typedef enum VolumeWireframeDetail {
|
|
|
|
VOLUME_WIREFRAME_COARSE = 0,
|
|
|
|
VOLUME_WIREFRAME_FINE = 1,
|
|
|
|
} VolumeWireframeDetail;
|
|
|
|
|
2022-05-20 18:01:26 +02:00
|
|
|
/** #VolumeRender.precision */
|
|
|
|
typedef enum VolumeRenderPrecision {
|
|
|
|
VOLUME_PRECISION_HALF = 0,
|
|
|
|
VOLUME_PRECISION_FULL = 1,
|
|
|
|
VOLUME_PRECISION_VARIABLE = 2,
|
|
|
|
} VolumeRenderPrecision;
|
|
|
|
|
2021-12-20 08:58:37 +01:00
|
|
|
/** #VolumeRender.space */
|
2020-03-17 14:41:48 +01:00
|
|
|
typedef enum VolumeRenderSpace {
|
|
|
|
VOLUME_SPACE_OBJECT = 0,
|
|
|
|
VOLUME_SPACE_WORLD = 1,
|
|
|
|
} VolumeRenderSpace;
|
|
|
|
|
2021-12-20 08:58:37 +01:00
|
|
|
/** #VolumeDisplay.interpolation_method */
|
2020-09-15 17:51:14 +02:00
|
|
|
typedef enum VolumeDisplayInterpMethod {
|
|
|
|
VOLUME_DISPLAY_INTERP_LINEAR = 0,
|
|
|
|
VOLUME_DISPLAY_INTERP_CUBIC = 1,
|
|
|
|
VOLUME_DISPLAY_INTERP_CLOSEST = 2,
|
|
|
|
} VolumeDisplayInterpMethod;
|
|
|
|
|
2021-12-20 08:58:37 +01:00
|
|
|
/** #VolumeDisplay.axis_slice_method */
|
2020-09-15 17:51:14 +02:00
|
|
|
typedef enum AxisAlignedSlicingMethod {
|
|
|
|
VOLUME_AXIS_SLICE_FULL = 0,
|
|
|
|
VOLUME_AXIS_SLICE_SINGLE = 1,
|
|
|
|
} AxisAlignedSlicingMethod;
|
|
|
|
|
2021-12-20 08:58:37 +01:00
|
|
|
/** #VolumeDisplay.slice_axis */
|
2020-09-15 17:51:14 +02:00
|
|
|
typedef enum SliceAxis {
|
|
|
|
VOLUME_SLICE_AXIS_AUTO = 0,
|
|
|
|
VOLUME_SLICE_AXIS_X = 1,
|
|
|
|
VOLUME_SLICE_AXIS_Y = 2,
|
|
|
|
VOLUME_SLICE_AXIS_Z = 3,
|
|
|
|
} SliceAxis;
|
|
|
|
|
2020-03-17 14:41:48 +01:00
|
|
|
/* Only one material supported currently. */
|
|
|
|
#define VOLUME_MATERIAL_NR 1
|