1use sys::*;
2
3use bezier_curve;
4use bspline_curve;
5use catmull_rom_curve;
6use hermite_curve;
7use instance;
8use linear_curve;
9use quad_mesh;
10use triangle_mesh;
11
12pub enum Geometry<'a> {
13 Triangle(triangle_mesh::TriangleMesh<'a>),
14 Quad(quad_mesh::QuadMesh<'a>),
15 Instance(instance::Instance<'a>),
16 LinearCurve(linear_curve::LinearCurve<'a>),
17 BsplineCurve(bspline_curve::BsplineCurve<'a>),
18 BezierCurve(bezier_curve::BezierCurve<'a>),
19 HermiteCurve(hermite_curve::HermiteCurve<'a>),
20 CatmullRomCurve(catmull_rom_curve::CatmullRomCurve<'a>),
21}
22
23impl<'a> Geometry<'a> {
25 pub fn handle(&self) -> RTCGeometry {
26 match self {
27 &Geometry::Triangle(ref m) => m.handle,
28 &Geometry::Quad(ref q) => q.handle,
29 &Geometry::Instance(ref i) => i.handle,
30 &Geometry::LinearCurve(ref lc) => lc.handle,
31 &Geometry::BsplineCurve(ref bsc) => bsc.handle,
32 &Geometry::BezierCurve(ref bzc) => bzc.handle,
33 &Geometry::HermiteCurve(ref hc) => hc.handle,
34 &Geometry::CatmullRomCurve(ref crc) => crc.handle,
35 }
36 }
37 pub fn commit(&mut self) {
38 unsafe {
39 rtcCommitGeometry(self.handle());
40 }
41 }
42}
43
44impl<'a> Drop for Geometry<'a> {
45 fn drop(&mut self) {
46 unsafe {
47 rtcReleaseGeometry(self.handle());
48 }
49 }
50}
51
52impl<'a> PartialEq<Geometry<'a>> for Geometry<'a> {
53 fn eq(&self, other: &Geometry) -> bool {
54 self.handle() == other.handle()
55 }
56}
57
58impl<'a> Eq for Geometry<'a> {}