Cleanup: manually remove header text not handled by automation
[blender.git] / source / blender / collada / BCAnimationCurve.h
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  *
16  * The Original Code is Copyright (C) 2008 Blender Foundation.
17  * All rights reserved.
18  */
19
20 #ifndef __BC_ANIMATION_CURVE_H__
21 #define __BC_ANIMATION_CURVE_H__
22
23 #include "collada_utils.h"
24 #include "BCSampleData.h"
25
26 extern "C"
27 {
28 #include "MEM_guardedalloc.h"
29 #include "BKE_fcurve.h"
30 #include "BKE_armature.h"
31 #include "BKE_material.h"
32 #include "ED_anim_api.h"
33 #include "ED_keyframing.h"
34 #include "ED_keyframes_edit.h"
35 }
36
37 typedef float(TangentPoint)[2];
38
39 typedef std::set<float> BCFrameSet;
40 typedef std::vector<float> BCFrames;
41 typedef std::vector<float> BCValues;
42 typedef std::vector<float> BCTimes;
43 typedef std::map<int, float> BCValueMap;
44
45 typedef enum BC_animation_type {
46         BC_ANIMATION_TYPE_OBJECT,
47         BC_ANIMATION_TYPE_BONE,
48         BC_ANIMATION_TYPE_CAMERA,
49         BC_ANIMATION_TYPE_MATERIAL,
50         BC_ANIMATION_TYPE_LIGHT
51 } BC_animation_type;
52
53 class BCCurveKey {
54 private:
55         BC_animation_type key_type;
56         std::string rna_path;
57         int curve_array_index;
58         int curve_subindex; /* only needed for materials */
59
60 public:
61
62         BCCurveKey();
63         BCCurveKey(const BC_animation_type type, const std::string path, const int array_index, const int subindex = -1);
64         void operator=(const BCCurveKey &other);
65         const std::string get_full_path() const;
66         const std::string get_path() const;
67         const int get_array_index() const;
68         const int get_subindex() const;
69         void set_object_type(BC_animation_type object_type);
70         const BC_animation_type get_animation_type() const;
71         const bool operator<(const BCCurveKey &other) const;
72
73 };
74
75 class BCBezTriple {
76 public:
77         BezTriple & bezt;
78
79         BCBezTriple(BezTriple &bezt);
80         const float get_frame() const;
81         const float get_time(Scene *scene) const;
82         const float get_value() const;
83         const float get_angle() const;
84         void get_in_tangent(Scene *scene, float point[2], bool as_angle) const;
85         void get_out_tangent(Scene *scene, float point[2], bool as_angle) const;
86         void get_tangent(Scene *scene, float point[2], bool as_angle, int index) const;
87
88 };
89
90 class BCAnimationCurve {
91 private:
92         BCCurveKey curve_key;
93         float min = 0;
94         float max = 0;
95
96         bool curve_is_local_copy = false;
97         FCurve *fcurve;
98         PointerRNA id_ptr;
99         void init_pointer_rna(Object *ob);
100         void delete_fcurve(FCurve *fcu);
101         FCurve *create_fcurve(int array_index, const char *rna_path);
102         void create_bezt(float frame, float output);
103         void update_range(float val);
104         void init_range(float val);
105
106 public:
107         BCAnimationCurve();
108         BCAnimationCurve(const BCAnimationCurve &other);
109         BCAnimationCurve(const BCCurveKey &key, Object *ob);
110         BCAnimationCurve(BCCurveKey key, Object *ob, FCurve *fcu);
111         ~BCAnimationCurve();
112
113         const bool is_of_animation_type(BC_animation_type type) const;
114         const int get_interpolation_type(float sample_frame) const;
115         bool is_animated();
116         const bool is_transform_curve() const;
117         const bool is_rotation_curve() const;
118         bool is_keyframe(int frame);
119         void adjust_range(int frame);
120
121         const std::string get_animation_name(Object *ob) const; /* xxx: this is collada specific */
122         const std::string get_channel_target() const;
123         const int get_channel_index() const;
124         const int get_subindex() const;
125         const std::string get_rna_path() const;
126         const FCurve *get_fcurve() const;
127         const int sample_count() const;
128
129         const float get_value(const float frame);
130         void get_values(BCValues &values) const;
131         void get_value_map(BCValueMap &value_map);
132
133         void get_frames(BCFrames &frames) const;
134
135         /* Curve edit functions create a copy of the underlaying FCurve */
136         FCurve *get_edit_fcurve();
137         bool add_value_from_rna(const int frame);
138         bool add_value_from_matrix(const BCSample &sample, const int frame);
139         void add_value(const float val, const int frame);
140         void clean_handles();
141
142         /* experimental stuff */
143         const int closest_index_above(const float sample_frame, const int start_at) const;
144         const int closest_index_below(const float sample_frame) const;
145
146 };
147
148 typedef std::map<BCCurveKey, BCAnimationCurve *> BCAnimationCurveMap;
149
150 #endif