diff --git a/esvg/render/SegmentList.cpp b/esvg/render/SegmentList.cpp
index 354e38c..3c9112b 100644
--- a/esvg/render/SegmentList.cpp
+++ b/esvg/render/SegmentList.cpp
@@ -217,10 +217,6 @@ void esvg::render::SegmentList::createSegmentListStroke(esvg::render::PointList&
}
break;
case esvg::join_round:
- {
- // TODO:
- }
- break;
case esvg::join_bevel:
{
vec2 axePrevious = (it.m_pos-it.m_posPrevious).safeNormalize();
@@ -228,23 +224,43 @@ void esvg::render::SegmentList::createSegmentListStroke(esvg::render::PointList&
// TODO : Add cross at the vector2 ...
float cross = axePrevious.x() * axeNext.y() - axeNext.x() * axePrevious.y();
if (cross > 0.0f) {
- SVG_ERROR(" Turn Right");
+ vec2 right = getIntersect(rightPoint, it.m_pos-it.m_posPrevious, it.m_pos, it.m_miterAxe);
+ vec2 left1 = it.m_pos
+ + it.m_orthoAxePrevious*_width*0.5f;
+ vec2 left2 = it.m_pos
+ + it.m_orthoAxeNext*_width*0.5f;
+ //Draw from previous point:
+ addSegment(leftPoint, left1);
+ SVG_VERBOSE(" segment :" << leftPoint << " -> " << left1);
+ if (_join == esvg::join_bevel) {
+ addSegment(left1, left2);
+ SVG_VERBOSE(" segment :" << left1 << " -> " << left2);
+ }else {
+
+ }
+ addSegment(right, rightPoint);
+ SVG_VERBOSE(" segment :" << right << " -> " << rightPoint);
+ leftPoint = left2;
+ rightPoint = right;
} else {
- SVG_ERROR(" Turn Left");
+ vec2 left = getIntersect(leftPoint, it.m_pos-it.m_posPrevious, it.m_pos, it.m_miterAxe);
+ vec2 right1 = it.m_pos
+ - it.m_orthoAxePrevious*_width*0.5f;
+ vec2 right2 = it.m_pos
+ - it.m_orthoAxeNext*_width*0.5f;//Draw from previous point:
+ addSegment(leftPoint, left);
+ SVG_VERBOSE(" segment :" << leftPoint << " -> " << left);
+ addSegment(right1, rightPoint);
+ SVG_VERBOSE(" segment :" << right1 << " -> " << rightPoint);
+ if (_join == esvg::join_bevel) {
+ addSegment(right2, right1);
+ SVG_VERBOSE(" segment :" << right2 << " -> " << right1);
+ } else {
+
+ }
+ leftPoint = left;
+ rightPoint = right2;
}
- /*
- vec2 left = getIntersect(leftPoint, it.m_pos-it.m_posPrevious, it.m_pos, it.m_miterAxe);
- vec2 right = getIntersect(rightPoint, it.m_pos-it.m_posPrevious, it.m_pos, it.m_miterAxe);
- vec2 left2 = getIntersect(leftPoint, it.m_pos-it.m_posPrevious, it.m_pos, it.m_miterAxe);
- vec2 right2 = getIntersect(rightPoint, it.m_pos-it.m_posPrevious, it.m_pos, it.m_miterAxe);
- //Draw from previous point:
- addSegment(leftPoint, left);
- SVG_VERBOSE(" segment :" << leftPoint << " -> " << left);
- addSegment(right, rightPoint);
- SVG_VERBOSE(" segment :" << right << " -> " << rightPoint);
- leftPoint = left;
- rightPoint = right;
- */
}
break;
}
diff --git a/test/testJoin.cpp b/test/testJoin.cpp
index b624f1c..b6c142f 100644
--- a/test/testJoin.cpp
+++ b/test/testJoin.cpp
@@ -24,36 +24,47 @@ TEST(TestJoin, miter) {
doc.generateAnImage(ivec2(100, 100), "TestJoin_miter.bmp", g_visualDebug);
}
-TEST(TestJoin, round) {
+TEST(TestJoin, roundRight) {
std::string data(""
"");
esvg::Document doc;
doc.parse(data);
- etk::FSNodeWriteAllData("TestJoin_round.svg", data);
- doc.generateAnImage(ivec2(100, 100), "TestJoin_round.bmp", g_visualDebug);
+ etk::FSNodeWriteAllData("TestJoin_roundRight.svg", data);
+ doc.generateAnImage(ivec2(100, 100), "TestJoin_roundRight.bmp", g_visualDebug);
}
-TEST(TestJoin, bevel) {
+TEST(TestJoin, roundLeft) {
+ std::string data(""
+ "");
+ esvg::Document doc;
+ doc.parse(data);
+ etk::FSNodeWriteAllData("TestJoin_roundLeft.svg", data);
+ doc.generateAnImage(ivec2(100, 100), "TestJoin_roundLeft.bmp", g_visualDebug);
+}
+
+TEST(TestJoin, bevelRight) {
std::string data(""
"");
esvg::Document doc;
doc.parse(data);
- etk::FSNodeWriteAllData("TestJoin_bevel.svg", data);
- doc.generateAnImage(ivec2(100, 100), "TestJoin_bevel.bmp", g_visualDebug);
+ etk::FSNodeWriteAllData("TestJoin_bevelRight.svg", data);
+ doc.generateAnImage(ivec2(100, 100), "TestJoin_bevelRight.bmp", g_visualDebug);
}
-TEST(TestJoin, bevel2) {
+TEST(TestJoin, bevelLeft) {
std::string data(""
"");
esvg::Document doc;
doc.parse(data);
- etk::FSNodeWriteAllData("TestJoin_bevel2.svg", data);
- doc.generateAnImage(ivec2(100, 100), "TestJoin_bevel2.bmp", g_visualDebug);
+ etk::FSNodeWriteAllData("TestJoin_bevelLeft.svg", data);
+ doc.generateAnImage(ivec2(100, 100), "TestJoin_bevelLeft.bmp", g_visualDebug);
}
\ No newline at end of file