Line |
Branch |
Exec |
Source |
1 |
|
|
//------------------------------------------------------------------------------ |
2 |
|
|
// VERSION 0.1 |
3 |
|
|
// |
4 |
|
|
// LICENSE |
5 |
|
|
// This software is dual-licensed to the public domain and under the following |
6 |
|
|
// license: you are granted a perpetual, irrevocable license to copy, modify, |
7 |
|
|
// publish, and distribute this file as you see fit. |
8 |
|
|
// |
9 |
|
|
// CREDITS |
10 |
|
|
// Written by Michal Cichon |
11 |
|
|
//------------------------------------------------------------------------------ |
12 |
|
|
|
13 |
|
|
#pragma |
14 |
|
|
|
15 |
|
|
#define IMGUI_DEFINE_MATH_OPERATORS |
16 |
|
|
#include <imgui.h> |
17 |
|
|
|
18 |
|
|
// Project point on Cubic Bezier curve. |
19 |
|
|
struct ImProjectResult |
20 |
|
|
{ |
21 |
|
|
ImVec2 Point; // Point on curve |
22 |
|
|
float Time; // [0 - 1] |
23 |
|
|
float Distance; // Distance to curve |
24 |
|
|
}; |
25 |
|
|
|
26 |
|
|
|
27 |
|
|
template <typename T> |
28 |
|
|
inline T ImCubicBezier(const T& p0, const T& p1, const T& p2, const T& p3, float t) |
29 |
|
|
{ |
30 |
|
✗ |
const auto a = 1 - t; |
31 |
|
✗ |
const auto b = a * a * a; |
32 |
|
✗ |
const auto c = t * t * t; |
33 |
|
|
|
34 |
|
✗ |
return b * p0 + 3 * t * a * a * p1 + 3 * t * t * a * p2 + c * p3; |
35 |
|
|
} |
36 |
|
|
|
37 |
|
|
ImProjectResult ImProjectOnCubicBezier(const ImVec2& point, const ImVec2& p0, const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const int subdivisions); |
38 |
|
|
|