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