bvh 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -4,65 +4,86 @@ SHELL = /bin/sh
4
4
  #### Start of system configuration section. ####
5
5
 
6
6
  srcdir = .
7
- topdir = /c/ruby186-mingw/lib/ruby/1.8/i386-mingw32
8
- hdrdir = $(topdir)
9
- VPATH = $(srcdir):$(topdir):$(hdrdir)
10
-
11
- DESTDIR = c:
12
- prefix = $(DESTDIR)/ruby186-mingw
7
+ topdir = /Users/colin/.rvm/rubies/ruby-1.9.2-p0/include/ruby-1.9.1
8
+ hdrdir = /Users/colin/.rvm/rubies/ruby-1.9.2-p0/include/ruby-1.9.1
9
+ arch_hdrdir = /Users/colin/.rvm/rubies/ruby-1.9.2-p0/include/ruby-1.9.1/$(arch)
10
+ VPATH = $(srcdir):$(arch_hdrdir)/ruby:$(hdrdir)/ruby
11
+ prefix = $(DESTDIR)/Users/colin/.rvm/rubies/ruby-1.9.2-p0
12
+ rubylibprefix = $(libdir)/$(RUBY_BASE_NAME)
13
13
  exec_prefix = $(prefix)
14
- sitedir = $(exec_prefix)/lib/ruby/site_ruby
15
- rubylibdir = $(libdir)/ruby/$(ruby_version)
16
- docdir = $(datarootdir)/doc/$(PACKAGE)
17
- dvidir = $(docdir)
18
- datarootdir = $(prefix)/share
19
- archdir = $(rubylibdir)/$(arch)
20
- sbindir = $(exec_prefix)/sbin
21
- psdir = $(docdir)
14
+ vendorhdrdir = $(rubyhdrdir)/vendor_ruby
15
+ sitehdrdir = $(rubyhdrdir)/site_ruby
16
+ rubyhdrdir = $(includedir)/$(RUBY_BASE_NAME)-$(ruby_version)
17
+ vendordir = $(rubylibprefix)/vendor_ruby
18
+ sitedir = $(rubylibprefix)/site_ruby
19
+ ridir = $(datarootdir)/$(RI_BASE_NAME)
20
+ mandir = $(datarootdir)/man
22
21
  localedir = $(datarootdir)/locale
22
+ libdir = $(exec_prefix)/lib
23
+ psdir = $(docdir)
24
+ pdfdir = $(docdir)
25
+ dvidir = $(docdir)
23
26
  htmldir = $(docdir)
24
- datadir = $(datarootdir)
25
- includedir = $(prefix)/include
26
27
  infodir = $(datarootdir)/info
27
- sysconfdir = $(prefix)/etc
28
- mandir = $(datarootdir)/man
29
- libdir = $(exec_prefix)/lib
30
- sharedstatedir = $(prefix)/com
28
+ docdir = $(datarootdir)/doc/$(PACKAGE)
31
29
  oldincludedir = $(DESTDIR)/usr/include
32
- pdfdir = $(docdir)
33
- sitearchdir = $(sitelibdir)/$(sitearch)
30
+ includedir = $(prefix)/include
34
31
  localstatedir = $(prefix)/var
32
+ sharedstatedir = $(prefix)/com
33
+ sysconfdir = $(prefix)/etc
34
+ datadir = $(datarootdir)
35
+ datarootdir = $(prefix)/share
36
+ libexecdir = $(exec_prefix)/libexec
37
+ sbindir = $(exec_prefix)/sbin
35
38
  bindir = $(exec_prefix)/bin
39
+ rubylibdir = $(rubylibprefix)/$(ruby_version)
40
+ archdir = $(rubylibdir)/$(arch)
36
41
  sitelibdir = $(sitedir)/$(ruby_version)
37
- libexecdir = $(exec_prefix)/libexec
42
+ sitearchdir = $(sitelibdir)/$(sitearch)
43
+ vendorlibdir = $(vendordir)/$(ruby_version)
44
+ vendorarchdir = $(vendorlibdir)/$(sitearch)
38
45
 
39
46
  CC = gcc
40
- LIBRUBY = lib$(LIBRUBY_SO).a
47
+ CXX = g++
48
+ LIBRUBY = $(LIBRUBY_SO)
41
49
  LIBRUBY_A = lib$(RUBY_SO_NAME)-static.a
42
50
  LIBRUBYARG_SHARED = -l$(RUBY_SO_NAME)
43
51
  LIBRUBYARG_STATIC = -l$(RUBY_SO_NAME)-static
52
+ OUTFLAG = -o
53
+ COUTFLAG = -o
44
54
 
45
55
  RUBY_EXTCONF_H =
46
- CFLAGS = -g -O2
47
- INCFLAGS = -I. -I$(topdir) -I$(hdrdir) -I$(srcdir)
56
+ cflags = $(optflags) $(debugflags) $(warnflags)
57
+ optflags = -O3
58
+ debugflags = -ggdb
59
+ warnflags = -Wextra -Wno-unused-parameter -Wno-parentheses -Wpointer-arith -Wwrite-strings -Wno-missing-field-initializers -Wshorten-64-to-32 -Wno-long-long
60
+ CFLAGS = -fno-common $(cflags) -fno-common -pipe
61
+ INCFLAGS = -I. -I$(arch_hdrdir) -I$(hdrdir)/ruby/backward -I$(hdrdir) -I$(srcdir)
48
62
  DEFS =
49
- CPPFLAGS = $(DEFS)
50
- CXXFLAGS = $(CFLAGS)
51
- DLDFLAGS = -L. -Wl,--enable-auto-image-base,--enable-auto-import,--export-all
52
- LDSHARED = gcc -shared -s
63
+ CPPFLAGS = -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE $(DEFS) $(cppflags)
64
+ CXXFLAGS = $(CFLAGS) $(cxxflags)
65
+ ldflags = -L. -L/usr/local/lib
66
+ dldflags = -Wl,-undefined,dynamic_lookup -Wl,-multiply_defined,suppress -Wl,-flat_namespace
67
+ ARCH_FLAG =
68
+ DLDFLAGS = $(ldflags) $(dldflags)
69
+ LDSHARED = $(CC) -dynamic -bundle
70
+ LDSHAREDXX = $(CXX) -dynamic -bundle
53
71
  AR = ar
54
- EXEEXT = .exe
72
+ EXEEXT =
55
73
 
74
+ RUBY_BASE_NAME = ruby
56
75
  RUBY_INSTALL_NAME = ruby
57
- RUBY_SO_NAME = msvcrt-ruby18
58
- arch = i386-mingw32
59
- sitearch = i386-msvcrt
60
- ruby_version = 1.8
61
- ruby = c:/ruby186-mingw/bin/ruby
76
+ RUBY_SO_NAME = ruby.1.9.1
77
+ arch = x86_64-darwin10.4.0
78
+ sitearch = $(arch)
79
+ ruby_version = 1.9.1
80
+ ruby = /Users/colin/.rvm/rubies/ruby-1.9.2-p0/bin/ruby
62
81
  RUBY = $(ruby)
63
82
  RM = rm -f
64
- MAKEDIRS = mkdir -p
65
- INSTALL = /bin/install -c
83
+ RM_RF = $(RUBY) -run -e rm -- -rf
84
+ RMDIRS = $(RUBY) -run -e rmdir -- -p
85
+ MAKEDIRS = /opt/local/bin/gmkdir -p
86
+ INSTALL = /usr/bin/install -c
66
87
  INSTALL_PROG = $(INSTALL) -m 0755
67
88
  INSTALL_DATA = $(INSTALL) -m 644
68
89
  COPY = cp
@@ -77,44 +98,58 @@ DEFFILE =
77
98
 
78
99
  CLEANFILES = mkmf.log
79
100
  DISTCLEANFILES =
101
+ DISTCLEANDIRS =
80
102
 
81
103
  extout =
82
104
  extout_prefix =
83
105
  target_prefix =
84
106
  LOCAL_LIBS =
85
- LIBS = $(LIBRUBYARG_SHARED) -lshell32 -lws2_32
107
+ LIBS = $(LIBRUBYARG_SHARED) -lpthread -ldl -lobjc
86
108
  SRCS = bvh.c bvh_parser.c
87
109
  OBJS = bvh.o bvh_parser.o
88
- TARGET = bvh
89
- DLLIB = $(TARGET).so
110
+ TARGET = bvh_c
111
+ DLLIB = $(TARGET).bundle
90
112
  EXTSTATIC =
91
113
  STATIC_LIB =
92
114
 
115
+ BINDIR = $(bindir)
93
116
  RUBYCOMMONDIR = $(sitedir)$(target_prefix)
94
117
  RUBYLIBDIR = $(sitelibdir)$(target_prefix)
95
118
  RUBYARCHDIR = $(sitearchdir)$(target_prefix)
119
+ HDRDIR = $(rubyhdrdir)/ruby$(target_prefix)
120
+ ARCHHDRDIR = $(rubyhdrdir)/$(arch)/ruby$(target_prefix)
96
121
 
97
122
  TARGET_SO = $(DLLIB)
98
- CLEANLIBS = $(TARGET).so $(TARGET).il? $(TARGET).tds $(TARGET).map
99
- CLEANOBJS = *.o *.a *.s[ol] *.pdb *.exp *.bak
100
-
101
- all: $(DLLIB)
102
- static: $(STATIC_LIB)
103
-
104
- clean:
123
+ CLEANLIBS = $(TARGET).bundle
124
+ CLEANOBJS = *.o *.bak
125
+
126
+ all: $(DLLIB)
127
+ static: $(STATIC_LIB)
128
+ .PHONY: all install static install-so install-rb
129
+ .PHONY: clean clean-so clean-rb
130
+
131
+ clean-rb-default::
132
+ clean-rb::
133
+ clean-so::
134
+ clean: clean-so clean-rb-default clean-rb
105
135
  @-$(RM) $(CLEANLIBS) $(CLEANOBJS) $(CLEANFILES)
106
136
 
107
- distclean: clean
137
+ distclean-rb-default::
138
+ distclean-rb::
139
+ distclean-so::
140
+ distclean: clean distclean-so distclean-rb-default distclean-rb
108
141
  @-$(RM) Makefile $(RUBY_EXTCONF_H) conftest.* mkmf.log
109
142
  @-$(RM) core ruby$(EXEEXT) *~ $(DISTCLEANFILES)
143
+ @-$(RMDIRS) $(DISTCLEANDIRS)
110
144
 
111
- realclean: distclean
145
+ realclean: distclean
112
146
  install: install-so install-rb
113
147
 
114
148
  install-so: $(RUBYARCHDIR)
115
149
  install-so: $(RUBYARCHDIR)/$(DLLIB)
116
150
  $(RUBYARCHDIR)/$(DLLIB): $(DLLIB)
117
- $(INSTALL_PROG) $(DLLIB) $(RUBYARCHDIR)
151
+ @-$(MAKEDIRS) $(@D)
152
+ $(INSTALL_PROG) $(DLLIB) $(@D)
118
153
  install-rb: pre-install-rb install-rb-default
119
154
  install-rb-default: pre-install-rb-default
120
155
  pre-install-rb: Makefile
@@ -126,24 +161,27 @@ site-install: site-install-so site-install-rb
126
161
  site-install-so: install-so
127
162
  site-install-rb: install-rb
128
163
 
129
- .SUFFIXES: .c .m .cc .cxx .cpp .o
164
+ .SUFFIXES: .c .m .cc .cxx .cpp .C .o
130
165
 
131
166
  .cc.o:
132
- $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) -c $<
167
+ $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $<
133
168
 
134
169
  .cxx.o:
135
- $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) -c $<
170
+ $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $<
136
171
 
137
172
  .cpp.o:
138
- $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) -c $<
173
+ $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $<
174
+
175
+ .C.o:
176
+ $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $<
139
177
 
140
178
  .c.o:
141
- $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) -c $<
179
+ $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -c $<
142
180
 
143
181
  $(DLLIB): $(OBJS) Makefile
144
- @-$(RM) $@
182
+ @-$(RM) $(@)
145
183
  $(LDSHARED) -o $@ $(OBJS) $(LIBPATH) $(DLDFLAGS) $(LOCAL_LIBS) $(LIBS)
146
184
 
147
185
 
148
186
 
149
- $(OBJS): ruby.h defines.h
187
+ $(OBJS): $(hdrdir)/ruby.h $(hdrdir)/ruby/defines.h $(arch_hdrdir)/ruby/config.h
@@ -1,10 +1,10 @@
1
- #include "bvh.h"
2
-
3
- VALUE rb_cBvh = Qnil;
4
-
5
- void Init_bvh()
6
- {
7
- rb_cBvh = rb_define_class("Bvh", rb_cObject);
8
-
9
- bvh_init_parser();
10
- }
1
+ #include "bvh.h"
2
+
3
+ VALUE rb_cBvh = Qnil;
4
+
5
+ void Init_bvh_c()
6
+ {
7
+ rb_cBvh = rb_define_class("Bvh", rb_cObject);
8
+
9
+ bvh_init_parser();
10
+ }
@@ -1,10 +1,18 @@
1
- #ifndef BVH_EXT_H
2
- #define BVH_EXT_H
3
-
4
- #include "ruby.h"
5
-
6
- extern void bvh_init_parser();
7
-
8
- extern VALUE rb_cBvh;
9
-
10
- #endif//BVH_EXT_H
1
+ #ifndef BVH_EXT_H
2
+ #define BVH_EXT_H
3
+
4
+ #include "ruby.h"
5
+
6
+ #ifndef RARRAY_PTR
7
+ #define RARRAY_PTR(x) RArray(x)->ptr
8
+ #endif
9
+
10
+ #ifndef RARRAY_LEN
11
+ #define RARRAY_LEN(x) RArray(x)->len
12
+ #endif
13
+
14
+ extern void bvh_init_parser();
15
+
16
+ extern VALUE rb_cBvh;
17
+
18
+ #endif//BVH_EXT_H
@@ -1,63 +1,65 @@
1
- #include "bvh.h"
2
-
3
- static VALUE rb_fParseChannelData(VALUE self, VALUE channels, VALUE bone);
4
-
5
- static VALUE rb_cBvhParser = Qnil;
6
- static VALUE rb_cMotion = Qnil;
7
- static VALUE rb_cChannelData = Qnil;
8
-
9
- void bvh_init_parser()
10
- {
11
- rb_cBvhParser = rb_define_class_under(rb_cBvh, "Parser", rb_cObject);
12
- rb_cMotion = rb_define_class_under(rb_cBvh, "Motion", rb_cObject);
13
- rb_cChannelData = rb_define_class_under(rb_cMotion, "ChannelData", rb_cHash);
14
-
15
- rb_define_private_method(rb_cBvhParser, "channel_data", rb_fParseChannelData, 2);
16
- }
17
-
18
- static void debug(const char *text)
19
- {
20
- rb_funcall(rb_cObject, rb_intern("puts"), rb_str_new2(text));
21
- }
22
-
23
- static VALUE rb_fParseChannelData(VALUE self, VALUE channels, VALUE bone)
24
- {
25
- char buf[256];
26
-
27
- VALUE data;
28
- struct RArray *rchannels, *joints;
29
- long i;
30
- VALUE channel, joint;
31
- VALUE r = rb_ary_new();
32
-
33
- // return [] unless bone.respond_to? :channels
34
- if (!rb_respond_to(bone, rb_intern("channels")))
35
- return r;
36
-
37
- // data = Bvh::Motion::ChannelData.new(bone)
38
- data = rb_funcall(rb_cChannelData, rb_intern("new"), 1, bone);
39
-
40
- // bone.channels.each { |channel| data[channel] = channels.shift }
41
- rchannels = RARRAY(rb_funcall(bone, rb_intern("channels"), 0));
42
- for (i = 0; i < rchannels->len; i++)
43
- {
44
- channel = *(rchannels->ptr+i);
45
- //... data[channel] = channels.shift ...
46
- rb_hash_aset(data, channel, rb_funcall(channels, rb_intern("shift"), 0));
47
- }
48
-
49
- // r = [data]
50
- rb_ary_push(r, data);
51
-
52
- // bone.joints.each { |joint| r.concat channel_data(channels, joint) }
53
- joints = RARRAY(rb_funcall(bone, rb_intern("joints"), 0));
54
- for (i = 0; i < joints->len; i++)
55
- {
56
- joint = *(joints->ptr+i);
57
- // ... r.concat(channel_data(channels, joint)) ...
58
- rb_funcall(r, rb_intern("concat"), 1, rb_fParseChannelData(self, channels, joint));
59
- }
60
-
61
- // r
62
- return r;
63
- }
1
+ #include "bvh.h"
2
+
3
+ static VALUE rb_fParseChannelData(VALUE self, VALUE channels, VALUE bone);
4
+
5
+ static VALUE rb_cBvhParser = Qnil;
6
+ static VALUE rb_cMotion = Qnil;
7
+ static VALUE rb_cChannelData = Qnil;
8
+
9
+ void bvh_init_parser()
10
+ {
11
+ rb_cBvhParser = rb_define_class_under(rb_cBvh, "Parser", rb_cObject);
12
+ rb_cMotion = rb_define_class_under(rb_cBvh, "Motion", rb_cObject);
13
+ rb_cChannelData = rb_define_class_under(rb_cMotion, "ChannelData", rb_cHash);
14
+
15
+ rb_define_private_method(rb_cBvhParser, "channel_data", rb_fParseChannelData, 2);
16
+ }
17
+
18
+ static void debug(const char *text)
19
+ {
20
+ rb_funcall(rb_cObject, rb_intern("puts"), rb_str_new2(text));
21
+ }
22
+
23
+ static VALUE rb_fParseChannelData(VALUE self, VALUE channels, VALUE bone)
24
+ {
25
+ char buf[256];
26
+
27
+ VALUE data;
28
+ //struct RArray *rchannels, *joints;
29
+ VALUE rchannels, joints;
30
+ long i;
31
+ VALUE channel, joint;
32
+ VALUE r = rb_ary_new();
33
+
34
+ // return [] unless bone.respond_to? :channels
35
+ if (!rb_respond_to(bone, rb_intern("channels")))
36
+ return r;
37
+
38
+ // data = Bvh::Motion::ChannelData.new(bone)
39
+ data = rb_funcall(rb_cChannelData, rb_intern("new"), 1, bone);
40
+
41
+ // bone.channels.each { |channel| data[channel] = channels.shift }
42
+ //rchannels = RARRAY(rb_funcall(bone, rb_intern("channels"), 0));
43
+ rchannels = rb_funcall(bone, rb_intern("channels"), 0);
44
+ for (i = 0; i < RARRAY_LEN(rchannels); i++)
45
+ {
46
+ channel = *(RARRAY_PTR(rchannels)+i);
47
+ //... data[channel] = channels.shift ...
48
+ rb_hash_aset(data, channel, rb_funcall(channels, rb_intern("shift"), 0));
49
+ }
50
+
51
+ // r = [data]
52
+ rb_ary_push(r, data);
53
+
54
+ // bone.joints.each { |joint| r.concat channel_data(channels, joint) }
55
+ joints = rb_funcall(bone, rb_intern("joints"), 0);
56
+ for (i = 0; i < RARRAY_LEN(joints); i++)
57
+ {
58
+ joint = *(RARRAY_PTR(joints)+i);
59
+ // ... r.concat(channel_data(channels, joint)) ...
60
+ rb_funcall(r, rb_intern("concat"), 1, rb_fParseChannelData(self, channels, joint));
61
+ }
62
+
63
+ // r
64
+ return r;
65
+ }
@@ -1,4 +1,4 @@
1
- require 'mkmf'
2
-
3
- dir_config('bvh')
4
- create_makefile('bvh')
1
+ require 'mkmf'
2
+
3
+ dir_config('bvh')
4
+ create_makefile('bvh_c')
data/lib/bvh.rb CHANGED
@@ -1,74 +1,74 @@
1
- require 'bvh.so'
2
- require 'bvh/matrix'
3
- require 'bvh/motion'
4
- require 'bvh/motion/channel_data'
5
- require 'bvh/motion/frame'
6
- require 'bvh/skeleton'
7
- require 'bvh/parser'
8
- require 'bvh/exporter'
9
-
10
-
11
- class Bvh
12
- # The array of skeletons associated with this BVH.
13
- attr_reader :skeletons
14
-
15
- # The motion capture data associated with this BVH.
16
- attr_reader :motion
17
-
18
- def initialize
19
- @motion = Bvh::Motion.new
20
- @skeletons = []
21
- end
22
-
23
- # Assigns the root bone in #skeleton
24
- def root=(a); skeleton.root = a; end
25
-
26
- # Returns the root bone in #skeleton
27
- def root; skeleton.root; end
28
-
29
- # Returns the frame data associated with this BVH file.
30
- def frames; motion.frames; end
31
-
32
- # Returns the last frame associated with this animation.
33
- def last_frame; frames.last; end
34
-
35
- # Returns the amount of time, in seconds, each frame occupies. Most BVH files have this set to
36
- # 0.333333, which is equal to 30 frames per second.
37
- def frame_time; motion.frame_time; end
38
-
39
- # Sets the amount of time, in seconds, each frame occupies. Most BVH files have this set to
40
- # 0.333333, which is equal to 30 frames per second.
41
- def frame_time=(a); motion.frame_time = a; end
42
-
43
- # Returns the frames per second calculated by (1 / frame_time)
44
- def frames_per_second; motion.frames_per_second; end
45
-
46
- # Assigns the frame_time by calculating it from (1 / frames_per_second)
47
- def frames_per_second=(a); motion.frames_per_second = a; end
48
-
49
- # Returns the number of frames in the motion capture data.
50
- def frame_count; motion.frame_count; end
51
-
52
- # Returns the first (and usually the only) skeleton in the #skeletons array.
53
- def skeleton; @skeletons.first; end
54
-
55
- # Creates a new skeleton, adds it to the #skeletons array, and returns it.
56
- def create_skeleton!; (@skeletons << Bvh::Skeleton.new).last; end
57
-
58
- class << self
59
- # Instantiates a new BVH and imports its data from the specified file
60
- def import(file)
61
- bvh = self.new
62
- parser = Bvh::Parser.new(file)
63
- parser.parse(bvh)
64
- bvh
65
- end
66
- end
67
-
68
- # Exports this BVH into the specified file.
69
- def export(file)
70
- exporter = Bvh::Exporter.new(file)
71
- exporter.export(self)
72
- self
73
- end
74
- end
1
+ require 'bvh_c'
2
+ require 'bvh/matrix'
3
+ require 'bvh/motion'
4
+ require 'bvh/motion/channel_data'
5
+ require 'bvh/motion/frame'
6
+ require 'bvh/skeleton'
7
+ require 'bvh/parser'
8
+ require 'bvh/exporter'
9
+
10
+
11
+ class Bvh
12
+ # The array of skeletons associated with this BVH.
13
+ attr_reader :skeletons
14
+
15
+ # The motion capture data associated with this BVH.
16
+ attr_reader :motion
17
+
18
+ def initialize
19
+ @motion = Bvh::Motion.new
20
+ @skeletons = []
21
+ end
22
+
23
+ # Assigns the root bone in #skeleton
24
+ def root=(a); skeleton.root = a; end
25
+
26
+ # Returns the root bone in #skeleton
27
+ def root; skeleton.root; end
28
+
29
+ # Returns the frame data associated with this BVH file.
30
+ def frames; motion.frames; end
31
+
32
+ # Returns the last frame associated with this animation.
33
+ def last_frame; frames.last; end
34
+
35
+ # Returns the amount of time, in seconds, each frame occupies. Most BVH files have this set to
36
+ # 0.333333, which is equal to 30 frames per second.
37
+ def frame_time; motion.frame_time; end
38
+
39
+ # Sets the amount of time, in seconds, each frame occupies. Most BVH files have this set to
40
+ # 0.333333, which is equal to 30 frames per second.
41
+ def frame_time=(a); motion.frame_time = a; end
42
+
43
+ # Returns the frames per second calculated by (1 / frame_time)
44
+ def frames_per_second; motion.frames_per_second; end
45
+
46
+ # Assigns the frame_time by calculating it from (1 / frames_per_second)
47
+ def frames_per_second=(a); motion.frames_per_second = a; end
48
+
49
+ # Returns the number of frames in the motion capture data.
50
+ def frame_count; motion.frame_count; end
51
+
52
+ # Returns the first (and usually the only) skeleton in the #skeletons array.
53
+ def skeleton; @skeletons.first; end
54
+
55
+ # Creates a new skeleton, adds it to the #skeletons array, and returns it.
56
+ def create_skeleton!; (@skeletons << Bvh::Skeleton.new).last; end
57
+
58
+ class << self
59
+ # Instantiates a new BVH and imports its data from the specified file
60
+ def import(file)
61
+ bvh = self.new
62
+ parser = Bvh::Parser.new(file)
63
+ parser.parse(bvh)
64
+ bvh
65
+ end
66
+ end
67
+
68
+ # Exports this BVH into the specified file.
69
+ def export(file)
70
+ exporter = Bvh::Exporter.new(file)
71
+ exporter.export(self)
72
+ self
73
+ end
74
+ end