1 #include "vpathmesure.h"
7 VPath oneSegment(float start, float end, const VPath & path)
10 std::swap(start, end);
12 float array[5] = {0.0f, start, end - start, 1000, 0.0f};
13 VDasher dasher(array, 5);
14 return dasher.dashed(path);
17 VPath VPathMesure::trim(const VPath &path)
19 if (vCompare(mStart, mEnd)) return VPath();
21 if ((vCompare(mStart, 0.0f) && (vCompare(mEnd, 1.0f))) ||
22 (vCompare(mStart, 1.0f) && (vCompare(mEnd, 0.0f)))) return path;
24 if (vIsZero(mOffset)) {
25 float length = path.length();
26 return oneSegment(length * mStart, length * mEnd, path);
28 float length = path.length();
29 float offset = fmod(mOffset, length);
30 float start = length * mStart;
31 float end = length * mEnd;
35 if (start < 0 && end < 0) {
36 return oneSegment(length + start, length + end, path);
37 } else if (start > 0 && end > 0) {
38 if (start > length && end > length)
39 return oneSegment(start - length, end - length, path);
40 else if (start < length && end < length)
41 return oneSegment(start, end, path);
43 float len1 = start > end ? start - length : end - length;
44 float start2 = start < end ? start : end;
45 float gap1 = start2 - len1;
46 float array[5] = {len1, gap1, length - start2, 1000, 0.0f};
47 VDasher dasher(array, 5);
48 return dasher.dashed(path);
51 float len1 = start > end ? start : end;
52 float start2 = start < end ? length + start : length + end;
53 float gap1 = start2 - len1;
54 float array[5] = {len1, gap1, length - start2, 1000, 0.0f};
55 VDasher dasher(array, 5);
56 return dasher.dashed(path);