[DEV] join bevel is now ok (round need to be done)
This commit is contained in:
parent
fe6235a828
commit
9b7a8a6d5a
@ -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;
|
||||
}
|
||||
|
@ -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("<?xml version='1.0' encoding='UTF-8' standalone='no'?>"
|
||||
"<svg height='100' width='100'>"
|
||||
" <polyline points='20,20 50,50 20,80' stroke='green' stroke-width='20' fill='none' stroke-linejoin='round'/>"
|
||||
"</svg>");
|
||||
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("<?xml version='1.0' encoding='UTF-8' standalone='no'?>"
|
||||
"<svg height='100' width='100'>"
|
||||
" <polyline points='80,20 50,50 80,80' stroke='green' stroke-width='20' fill='none' stroke-linejoin='round'/>"
|
||||
"</svg>");
|
||||
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("<?xml version='1.0' encoding='UTF-8' standalone='no'?>"
|
||||
"<svg height='100' width='100'>"
|
||||
" <polyline points='20,20 50,50 20,80' stroke='green' stroke-width='20' fill='none' stroke-linejoin='bevel'/>"
|
||||
"</svg>");
|
||||
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("<?xml version='1.0' encoding='UTF-8' standalone='no'?>"
|
||||
"<svg height='100' width='100'>"
|
||||
" <polyline points='80,20 60,50 80,80' stroke='green' stroke-width='20' fill='none' stroke-linejoin='bevel'/>"
|
||||
"</svg>");
|
||||
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);
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user