bvh 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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