1
// Copyright (c) 2007, Rodrigo Braz Monteiro
2
// All rights reserved.
4
// Redistribution and use in source and binary forms, with or without
5
// modification, are permitted provided that the following conditions are met:
7
// * Redistributions of source code must retain the above copyright notice,
8
// this list of conditions and the following disclaimer.
9
// * Redistributions in binary form must reproduce the above copyright notice,
10
// this list of conditions and the following disclaimer in the documentation
11
// and/or other materials provided with the distribution.
12
// * Neither the name of the Aegisub Group nor the names of its contributors
13
// may be used to endorse or promote products derived from this software
14
// without specific prior written permission.
16
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
20
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26
// POSSIBILITY OF SUCH DAMAGE.
28
// -----------------------------------------------------------------------------
32
// Website: http://aegisub.cellosoft.com
33
// Contact: mailto:zeratul@cellosoft.com
42
#include <wx/wxprec.h>
43
#include <wx/gdicmn.h>
46
#include "spline_curve.h"
49
/////////////////////////
50
// Spline managing class
53
std::list<SplineCurve> curves;
57
wxString EncodeToASS();
58
void DecodeFromASS(wxString str);
60
void AppendCurve(SplineCurve &curve) { InsertCurve(curve,-1); }
61
void InsertCurve(SplineCurve &curve,int index);
62
void MovePoint(int curveIndex,int point,wxPoint pos);
63
void Smooth(float smooth=1.0f);
65
void GetPointList(std::vector<Vector2D> &points,std::vector<int> &pointCurve);
66
SplineCurve *GetCurve(int index);
68
void GetClosestParametricPoint(Vector2D reference,int &curve,float &t,Vector2D &point);
69
Vector2D GetClosestPoint(Vector2D reference);
70
Vector2D GetClosestControlPoint(Vector2D reference);