1// tPath.cpp 
2// 
3// This file implements scene splines and paths. 
4// 
5// Copyright (c) 2006, 2017 Tristan Grimmer. 
6// Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby 
7// granted, provided that the above copyright notice and this permission notice appear in all copies. 
8// 
9// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL 
10// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, 
11// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN 
12// AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 
13// PERFORMANCE OF THIS SOFTWARE. 
14 
15#include "Scene/tPath.h" 
16using namespace tMath
17namespace tScene 
18
19 
20 
21tPath::tPath(const tBezierPath& src, const tString& name, uint32 id) : 
22 tObject(name, id
23
24 if (!src.IsValid()) 
25 return
26 
27 Type = tType::CubicBezier
28 IsClosed = src.IsClosed(); 
29 
30 NumControlVerts = src.GetNumControlVerts(); 
31 tAssert((NumControlVerts >= 4) && (((NumControlVerts-1) % 3) == 0)); 
32 
33 ControlVerts = new tVector3[NumControlVerts]; 
34 for (int cv = 0; cv < NumControlVerts; cv++) 
35 ControlVerts[cv] = src.GetControlVerts()[cv]; 
36
37 
38 
39void tPath::Save(tChunkWriter& chunk) const 
40
41 if (!IsValid()) 
42 return
43 tAssert((NumControlVerts > 0) && ControlVerts); 
44 
45 chunk.Begin(tChunkID::Scene_Path); 
46
47 tObject::Save(chunk); 
48 
49 chunk.Begin(tChunkID::Scene_PathParameters); 
50 chunk.Write(Type); 
51 chunk.Write(NumControlVerts); 
52 chunk.Write(IsClosed); 
53 chunk.End(); 
54 
55 chunk.Begin(tChunkID::Scene_PathControlVertTable); 
56 chunk.Write(ControlVerts, NumControlVerts); 
57 chunk.End(); 
58
59 chunk.End(); 
60
61 
62 
63void tPath::Load(const tChunk& splineChunk
64
65 tAssert(splineChunk.ID() == tChunkID::Scene_Path); 
66 Clear(); 
67 
68 for (tChunk chunk = splineChunk.First(); chunk.Valid(); chunk = chunk.Next()) 
69
70 switch (chunk.ID()) 
71
72 case tChunkID::Scene_Object
73 tObject::Load(chunk); 
74 break
75 
76 case tChunkID::Scene_PathParameters
77 chunk.GetItem(Type); 
78 chunk.GetItem(NumControlVerts); 
79 chunk.GetItem(IsClosed); 
80 break
81 
82 case tChunkID::Scene_PathControlVertTable
83 tAssert((NumControlVerts > 0) && !ControlVerts); 
84 ControlVerts = new tVector3[NumControlVerts]; 
85 tStd::tMemcpy(ControlVerts, chunk.GetData(), sizeof(tVector3) * NumControlVerts); 
86 break
87
88
89
90 
91 
92
93