Plot fonts in outline mode, not triangulated
Putting 1,000s of tiny triangles on a gerber file will cause mfg fits. Instead, we use easy outline plotting for plots and triangulation for everything else.
This commit is contained in:
parent
33a4c9b08e
commit
e7d0318fb2
|
@ -44,9 +44,22 @@ void CALLBACK_GAL::DrawGlyph( const KIFONT::GLYPH& aGlyph, int aNth, int aTotal
|
||||||
}
|
}
|
||||||
else if( aGlyph.IsOutline() )
|
else if( aGlyph.IsOutline() )
|
||||||
{
|
{
|
||||||
const KIFONT::OUTLINE_GLYPH& glyph = static_cast<const KIFONT::OUTLINE_GLYPH&>( aGlyph );
|
if( m_triangulate )
|
||||||
|
{
|
||||||
|
const KIFONT::OUTLINE_GLYPH& glyph = static_cast<const KIFONT::OUTLINE_GLYPH&>( aGlyph );
|
||||||
|
|
||||||
glyph.Triangulate( m_triangleCallback );
|
glyph.Triangulate( m_triangleCallback );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
KIFONT::OUTLINE_GLYPH glyph = static_cast<const KIFONT::OUTLINE_GLYPH&>( aGlyph );
|
||||||
|
|
||||||
|
if( glyph.HasHoles() )
|
||||||
|
glyph.Fracture( SHAPE_POLY_SET::POLYGON_MODE::PM_FAST );
|
||||||
|
|
||||||
|
for( int ii = 0; ii < glyph.OutlineCount(); ++ii )
|
||||||
|
m_outlineCallback( glyph.Outline( ii ) );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -686,16 +686,10 @@ void PLOTTER::Text( const VECTOR2I& aPos,
|
||||||
LineTo( (wxPoint) aPt2 );
|
LineTo( (wxPoint) aPt2 );
|
||||||
PenFinish();
|
PenFinish();
|
||||||
},
|
},
|
||||||
// Triangulation callback
|
// Polygon callback
|
||||||
[&]( const VECTOR2I& aPt1, const VECTOR2I& aPt2, const VECTOR2I& aPt3 )
|
[&]( const SHAPE_LINE_CHAIN& aPoly )
|
||||||
{
|
{
|
||||||
std::vector<VECTOR2I> cornerList;
|
PlotPoly( aPoly, FILL_T::FILLED_SHAPE, 0, aData );
|
||||||
cornerList.reserve( 3 );
|
|
||||||
|
|
||||||
for( const VECTOR2I& pt : { aPt1, aPt2, aPt3, aPt1 } )
|
|
||||||
cornerList.emplace_back( pt );
|
|
||||||
|
|
||||||
PlotPoly( cornerList, FILL_T::FILLED_SHAPE, 0, aData );
|
|
||||||
} );
|
} );
|
||||||
|
|
||||||
TEXT_ATTRIBUTES attributes;
|
TEXT_ATTRIBUTES attributes;
|
||||||
|
|
|
@ -26,7 +26,6 @@
|
||||||
|
|
||||||
#include <gal/graphics_abstraction_layer.h>
|
#include <gal/graphics_abstraction_layer.h>
|
||||||
|
|
||||||
|
|
||||||
class CALLBACK_GAL: public KIGFX::GAL
|
class CALLBACK_GAL: public KIGFX::GAL
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -40,6 +39,20 @@ public:
|
||||||
{
|
{
|
||||||
m_strokeCallback = aStrokeCallback;
|
m_strokeCallback = aStrokeCallback;
|
||||||
m_triangleCallback = aTriangleCallback;
|
m_triangleCallback = aTriangleCallback;
|
||||||
|
m_outlineCallback = [](const SHAPE_LINE_CHAIN&){};
|
||||||
|
m_triangulate = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
CALLBACK_GAL( KIGFX::GAL_DISPLAY_OPTIONS& aDisplayOptions,
|
||||||
|
std::function<void( const VECTOR2I& aPt1,
|
||||||
|
const VECTOR2I& aPt2 )> aStrokeCallback,
|
||||||
|
std::function<void( const SHAPE_LINE_CHAIN& aPoly )> aOutlineCallback ) :
|
||||||
|
GAL( aDisplayOptions )
|
||||||
|
{
|
||||||
|
m_strokeCallback = aStrokeCallback;
|
||||||
|
m_triangleCallback = []( const VECTOR2I&, const VECTOR2I&, const VECTOR2I& ){};
|
||||||
|
m_outlineCallback = aOutlineCallback;
|
||||||
|
m_triangulate = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -54,6 +67,10 @@ private:
|
||||||
std::function<void( const VECTOR2I& aPt1,
|
std::function<void( const VECTOR2I& aPt1,
|
||||||
const VECTOR2I& aPt2,
|
const VECTOR2I& aPt2,
|
||||||
const VECTOR2I& aPt3 )> m_triangleCallback;
|
const VECTOR2I& aPt3 )> m_triangleCallback;
|
||||||
|
|
||||||
|
std::function<void( const SHAPE_LINE_CHAIN& aPoly )> m_outlineCallback;
|
||||||
|
|
||||||
|
bool m_triangulate;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue