Commit 4f991329 authored by Mikhail Karpenko's avatar Mikhail Karpenko

Merge branch 'master' into teardrops

parents c5973eb8 7eaceffd
...@@ -31,6 +31,8 @@ install_manifest.txt ...@@ -31,6 +31,8 @@ install_manifest.txt
Documentation/doxygen Documentation/doxygen
Documentation/development/doxygen Documentation/development/doxygen
*.bak *.bak
.*.swp
*.~*
common/pcb_plot_params_keywords.cpp common/pcb_plot_params_keywords.cpp
include/pcb_plot_params_lexer.h include/pcb_plot_params_lexer.h
pcbnew/specctra_keywords.cpp pcbnew/specctra_keywords.cpp
......
...@@ -95,7 +95,7 @@ EDA_3D_CANVAS::EDA_3D_CANVAS( EDA_3D_FRAME* parent, int* attribList ) : ...@@ -95,7 +95,7 @@ EDA_3D_CANVAS::EDA_3D_CANVAS( EDA_3D_FRAME* parent, int* attribList ) :
m_ZBottom = 0.0; m_ZBottom = 0.0;
m_ZTop = 0.0; m_ZTop = 0.0;
m_lightPos = S3D_VERTEX(0.0f, 0.0f, 50.0f); m_lightPos = S3D_VERTEX(0.0f, 0.0f, 30.0f);
// Clear all gl list identifiers: // Clear all gl list identifiers:
for( int ii = GL_ID_BEGIN; ii < GL_ID_END; ii++ ) for( int ii = GL_ID_BEGIN; ii < GL_ID_END; ii++ )
...@@ -496,7 +496,7 @@ void EDA_3D_CANVAS::DisplayStatus() ...@@ -496,7 +496,7 @@ void EDA_3D_CANVAS::DisplayStatus()
msg.Printf( wxT( "dy %3.2f" ), m_draw3dOffset.y ); msg.Printf( wxT( "dy %3.2f" ), m_draw3dOffset.y );
Parent()->SetStatusText( msg, 2 ); Parent()->SetStatusText( msg, 2 );
msg.Printf( wxT( "View: %3.1f" ), 45 * GetPrm3DVisu().m_Zoom ); msg.Printf( _( "Zoom: %3.1f" ), 45 * GetPrm3DVisu().m_Zoom );
Parent()->SetStatusText( msg, 3 ); Parent()->SetStatusText( msg, 3 );
} }
...@@ -591,7 +591,7 @@ void EDA_3D_CANVAS::SetLights() ...@@ -591,7 +591,7 @@ void EDA_3D_CANVAS::SetLights()
light_color[3] = 1.0; light_color[3] = 1.0;
// Light above the xy plane // Light above the xy plane
light_color[0] = light_color[1] = light_color[2] = 0.2; light_color[0] = light_color[1] = light_color[2] = 0.0;
glLightfv( GL_LIGHT0, GL_AMBIENT, light_color ); glLightfv( GL_LIGHT0, GL_AMBIENT, light_color );
light_color[0] = light_color[1] = light_color[2] = 1.0; light_color[0] = light_color[1] = light_color[2] = 1.0;
...@@ -605,6 +605,8 @@ void EDA_3D_CANVAS::SetLights() ...@@ -605,6 +605,8 @@ void EDA_3D_CANVAS::SetLights()
light_color[0] = light_color[1] = light_color[2] = 0.2; light_color[0] = light_color[1] = light_color[2] = 0.2;
glLightModelfv( GL_LIGHT_MODEL_AMBIENT, light_color ); glLightModelfv( GL_LIGHT_MODEL_AMBIENT, light_color );
glLightModeli( GL_LIGHT_MODEL_TWO_SIDE, GL_FALSE );
glEnable( GL_LIGHT0 ); // White spot on Z axis ( top ) glEnable( GL_LIGHT0 ); // White spot on Z axis ( top )
glEnable( GL_LIGHTING ); glEnable( GL_LIGHTING );
} }
......
...@@ -50,6 +50,7 @@ ...@@ -50,6 +50,7 @@
class BOARD_DESIGN_SETTINGS; class BOARD_DESIGN_SETTINGS;
class EDA_3D_FRAME; class EDA_3D_FRAME;
class CPOLYGONS_LIST; class CPOLYGONS_LIST;
class REPORTER;
class VIA; class VIA;
class D_PAD; class D_PAD;
...@@ -80,7 +81,8 @@ class EDA_3D_CANVAS : public wxGLCanvas ...@@ -80,7 +81,8 @@ class EDA_3D_CANVAS : public wxGLCanvas
{ {
private: private:
bool m_init; bool m_init;
bool m_reportWarnings; ///< true to report all wranings when build the 3D scene false to report errors only bool m_reportWarnings; ///< true to report all warnings when building the 3D scene
///< false to report errors only
GLuint m_glLists[GL_ID_END]; ///< GL lists GLuint m_glLists[GL_ID_END]; ///< GL lists
wxGLContext* m_glRC; wxGLContext* m_glRC;
wxRealPoint m_draw3dOffset; ///< offset to draw the 3D mesh. wxRealPoint m_draw3dOffset; ///< offset to draw the 3D mesh.
...@@ -148,11 +150,11 @@ public: ...@@ -148,11 +150,11 @@ public:
* Function CreateDrawGL_List * Function CreateDrawGL_List
* Prepares the parameters of the OpenGL draw list * Prepares the parameters of the OpenGL draw list
* creates the OpenGL draw list items (board, grid ...) * creates the OpenGL draw list items (board, grid ...)
* @param aErrorMessages = a wxString which will filled with error messages, * @param aErrorMessages = a REPORTER which will filled with error messages,
* if any * if any
* @param aShowWarnings = true to show all messages, false to show errors only * @param aActivity = a REPORTER to display activity state
*/ */
void CreateDrawGL_List( wxString* aErrorMessages, bool aShowWarnings ); void CreateDrawGL_List( REPORTER* aErrorMessages, REPORTER* aActivity );
void InitGL(); void InitGL();
void ReportWarnings( bool aReport ) { m_reportWarnings = aReport; } void ReportWarnings( bool aReport ) { m_reportWarnings = aReport; }
...@@ -231,24 +233,25 @@ private: ...@@ -231,24 +233,25 @@ private:
* Populates the OpenGL GL_ID_BOARD draw list with board items only on copper layers. * Populates the OpenGL GL_ID_BOARD draw list with board items only on copper layers.
* 3D footprint shapes, tech layers and aux layers are not on this list * 3D footprint shapes, tech layers and aux layers are not on this list
* Fills aErrorMessages with error messages created by some calculation function * Fills aErrorMessages with error messages created by some calculation function
* display activity state
* @param aBoardList = * @param aBoardList =
* @param aBodyOnlyList = * @param aBodyOnlyList =
* @param aErrorMessages = a wxString to add error and warning messages * @param aErrorMessages = a REPORTER to add error and warning messages
* created by the build process (can be NULL) * created by the build process (can be NULL)
* @param aShowWarnings = true to show all messages, false to show errors only * @param aActivity = a REPORTER to display activity state
*/ */
void buildBoard3DView( GLuint aBoardList, GLuint aBodyOnlyList, void buildBoard3DView( GLuint aBoardList, GLuint aBodyOnlyList,
wxString* aErrorMessages, bool aShowWarnings ); REPORTER* aErrorMessages, REPORTER* aActivity );
/** /**
* Function buildTechLayers3DView * Function buildTechLayers3DView
* Called by CreateDrawGL_List() * Called by CreateDrawGL_List()
* Populates the OpenGL GL_ID_TECH_LAYERS draw list with items on tech layers * Populates the OpenGL GL_ID_TECH_LAYERS draw list with items on tech layers
* @param aErrorMessages = a wxString to add error and warning messages * @param aErrorMessages = a REPORTER to add error and warning messages
* created by the build process (can be NULL) * created by the build process (can be NULL)
* @param aShowWarnings = true to show all messages, false to show errors only * @param aActivity = a REPORTER to display activity state
*/ */
void buildTechLayers3DView( wxString* aErrorMessages, bool aShowWarnings ); void buildTechLayers3DView( REPORTER* aErrorMessages, REPORTER* aActivity );
/** /**
* Function buildShadowList * Function buildShadowList
...@@ -263,17 +266,25 @@ private: ...@@ -263,17 +266,25 @@ private:
* draw lists with 3D footprint shapes * draw lists with 3D footprint shapes
* @param aOpaqueList is the gl list for non transparent items * @param aOpaqueList is the gl list for non transparent items
* @param aTransparentList is the gl list for non transparent items, * @param aTransparentList is the gl list for non transparent items,
* @param aErrorMessages = a REPORTER to add error and warning messages
* created by the build process (can be NULL)
* @param aActivity = a REPORTER to display activity state
* which need to be drawn after all other items * which need to be drawn after all other items
*/ */
void buildFootprintShape3DList( GLuint aOpaqueList, void buildFootprintShape3DList( GLuint aOpaqueList,
GLuint aTransparentList ); GLuint aTransparentList,
REPORTER* aErrorMessages, REPORTER* aActivity );
/** /**
* Function buildBoard3DAuxLayers * Function buildBoard3DAuxLayers
* Called by CreateDrawGL_List() * Called by CreateDrawGL_List()
* Fills the OpenGL GL_ID_AUX_LAYERS draw list * Fills the OpenGL GL_ID_AUX_LAYERS draw list
* with items on aux layers only * with items on aux layers only
* @param aErrorMessages = a REPORTER to add error and warning messages
* created by the build process (can be NULL)
* @param aActivity = a REPORTER to display activity state
* which need to be drawn after all other items
*/ */
void buildBoard3DAuxLayers(); void buildBoard3DAuxLayers( REPORTER* aErrorMessages, REPORTER* aActivity );
void draw3DGrid( double aGriSizeMM ); void draw3DGrid( double aGriSizeMM );
void draw3DAxis(); void draw3DAxis();
...@@ -329,11 +340,11 @@ private: ...@@ -329,11 +340,11 @@ private:
* function generateFakeShadowsTextures * function generateFakeShadowsTextures
* creates shadows of the board an footprints * creates shadows of the board an footprints
* for aesthetical purpose * for aesthetical purpose
* @param aErrorMessages = a wxString to add error and warning messages * @param aErrorMessages = a REPORTER to add error and warning messages
* created by the build process (can be NULL) * created by the build process (can be NULL)
* @param aShowWarnings = true to show all messages, false to show errors only * @param aActivity = a REPORTER to display activity state
*/ */
void generateFakeShadowsTextures( wxString* aErrorMessages, bool aShowWarnings ); void generateFakeShadowsTextures( REPORTER* aErrorMessages, REPORTER* aActivity );
DECLARE_EVENT_TABLE() DECLARE_EVENT_TABLE()
}; };
......
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
/** /**
* @file 3d_class.cpp * @file 3d_class.cpp
*/ */
#include <fctsys.h> #include <fctsys.h>
#include "3d_viewer.h" #include "3d_viewer.h"
...@@ -54,7 +54,7 @@ S3D_MASTER::S3D_MASTER( EDA_ITEM* aParent ) : ...@@ -54,7 +54,7 @@ S3D_MASTER::S3D_MASTER( EDA_ITEM* aParent ) :
EDA_ITEM( aParent, NOT_USED ) EDA_ITEM( aParent, NOT_USED )
{ {
m_MatScale.x = m_MatScale.y = m_MatScale.z = 1.0; m_MatScale.x = m_MatScale.y = m_MatScale.z = 1.0;
m_3D_Drawings = NULL; m_3D_Drawings = NULL;
m_Materials = NULL; m_Materials = NULL;
m_parser = NULL; m_parser = NULL;
...@@ -85,7 +85,7 @@ S3D_MASTER:: ~S3D_MASTER() ...@@ -85,7 +85,7 @@ S3D_MASTER:: ~S3D_MASTER()
{ {
nextmat = m_Materials->Next(); nextmat = m_Materials->Next();
delete m_Materials; delete m_Materials;
m_Materials = 0; m_Materials = NULL;
} }
} }
......
This diff is collapsed.
...@@ -54,17 +54,6 @@ static void CALLBACK tessEndCB(); ...@@ -54,17 +54,6 @@ static void CALLBACK tessEndCB();
static void CALLBACK tessErrorCB( GLenum errorCode ); static void CALLBACK tessErrorCB( GLenum errorCode );
static void CALLBACK tessCPolyPt2Vertex( const GLvoid* data ); static void CALLBACK tessCPolyPt2Vertex( const GLvoid* data );
// 2 helper functions to set the current normal vector for gle items
static inline void SetNormalZpos()
{
glNormal3f( 0.0, 0.0, 1.0 );
}
static inline void SetNormalZneg()
{
glNormal3f( 0.0, 0.0, -1.0 );
}
void TransfertToGLlist( std::vector< S3D_VERTEX >& aVertices, double aBiuTo3DUnits ); void TransfertToGLlist( std::vector< S3D_VERTEX >& aVertices, double aBiuTo3DUnits );
/* Draw3D_VerticalPolygonalCylinder is a helper function. /* Draw3D_VerticalPolygonalCylinder is a helper function.
...@@ -160,7 +149,8 @@ void SetGLTexture( GLuint text_id, float scale ) ...@@ -160,7 +149,8 @@ void SetGLTexture( GLuint text_id, float scale )
*/ */
void Draw3D_SolidHorizontalPolyPolygons( const CPOLYGONS_LIST& aPolysList, void Draw3D_SolidHorizontalPolyPolygons( const CPOLYGONS_LIST& aPolysList,
int aZpos, int aThickness, double aBiuTo3DUnits, int aZpos, int aThickness, double aBiuTo3DUnits,
bool aUseTextures ) bool aUseTextures,
float aNormal_Z_Orientation )
{ {
// for Tess callback functions: // for Tess callback functions:
s_biuTo3Dunits = aBiuTo3DUnits; s_biuTo3Dunits = aBiuTo3DUnits;
...@@ -173,16 +163,17 @@ void Draw3D_SolidHorizontalPolyPolygons( const CPOLYGONS_LIST& aPolysList, ...@@ -173,16 +163,17 @@ void Draw3D_SolidHorizontalPolyPolygons( const CPOLYGONS_LIST& aPolysList,
gluTessCallback( tess, GLU_TESS_ERROR, ( void (CALLBACK*) () )tessErrorCB ); gluTessCallback( tess, GLU_TESS_ERROR, ( void (CALLBACK*) () )tessErrorCB );
gluTessCallback( tess, GLU_TESS_VERTEX, ( void (CALLBACK*) () )tessCPolyPt2Vertex ); gluTessCallback( tess, GLU_TESS_VERTEX, ( void (CALLBACK*) () )tessCPolyPt2Vertex );
GLdouble v_data[3]; GLdouble v_data[3];
double zpos = ( aZpos + (aThickness / 2.0) ) * aBiuTo3DUnits; double zpos = ( aZpos + (aThickness / 2.0) ) * aBiuTo3DUnits;
s_currentZpos = zpos; // for Tess callback functions s_currentZpos = zpos; // for Tess callback functions
v_data[2] = aZpos + (aThickness / 2.0); v_data[2] = zpos;
// Set normal toward positive Z axis, for a solid object on the top side // Set normal toward positive Z axis, for a solid object on the top side
if( aThickness )
SetNormalZpos();
// gluTessProperty(tess, GLU_TESS_WINDING_RULE, GLU_TESS_WINDING_ODD); //gluTessProperty( tess, GLU_TESS_BOUNDARY_ONLY, GL_TRUE );
//gluTessProperty( tess, GLU_TESS_WINDING_RULE, GLU_TESS_WINDING_ODD );
glNormal3f( 0.0, 0.0, aNormal_Z_Orientation );
// Draw solid areas contained in this list // Draw solid areas contained in this list
CPOLYGONS_LIST polylist = aPolysList; // temporary copy for gluTessVertex CPOLYGONS_LIST polylist = aPolysList; // temporary copy for gluTessVertex
...@@ -202,11 +193,6 @@ void Draw3D_SolidHorizontalPolyPolygons( const CPOLYGONS_LIST& aPolysList, ...@@ -202,11 +193,6 @@ void Draw3D_SolidHorizontalPolyPolygons( const CPOLYGONS_LIST& aPolysList,
startContour = 0; startContour = 0;
} }
// https://www.opengl.org/sdk/docs/man2/xhtml/gluTessNormal.xml
if( !aThickness )
gluTessNormal( tess, 0.0, 0.0, 0.0 );
v_data[0] = polylist.GetX( ii ) * aBiuTo3DUnits; v_data[0] = polylist.GetX( ii ) * aBiuTo3DUnits;
v_data[1] = -polylist.GetY( ii ) * aBiuTo3DUnits; v_data[1] = -polylist.GetY( ii ) * aBiuTo3DUnits;
// gluTessVertex store pointers on data, not data, so do not store // gluTessVertex store pointers on data, not data, so do not store
...@@ -231,9 +217,8 @@ void Draw3D_SolidHorizontalPolyPolygons( const CPOLYGONS_LIST& aPolysList, ...@@ -231,9 +217,8 @@ void Draw3D_SolidHorizontalPolyPolygons( const CPOLYGONS_LIST& aPolysList,
zpos = ( aZpos - (aThickness / 2.0) ) * aBiuTo3DUnits; zpos = ( aZpos - (aThickness / 2.0) ) * aBiuTo3DUnits;
s_currentZpos = zpos; // for Tess callback functions s_currentZpos = zpos; // for Tess callback functions
v_data[2] = zpos; v_data[2] = zpos;
// Set normal toward negative Z axis, for a solid object on bottom side
if( aThickness ) glNormal3f( 0.0, 0.0, -aNormal_Z_Orientation );
SetNormalZneg();
} }
if( startContour == 0 ) if( startContour == 0 )
...@@ -245,12 +230,11 @@ void Draw3D_SolidHorizontalPolyPolygons( const CPOLYGONS_LIST& aPolysList, ...@@ -245,12 +230,11 @@ void Draw3D_SolidHorizontalPolyPolygons( const CPOLYGONS_LIST& aPolysList,
gluDeleteTess( tess ); gluDeleteTess( tess );
if( aThickness == 0 ) if( aThickness == 0 )
{
return; return;
}
// Build the 3D data : vertical side // Build the 3D data : vertical side
Draw3D_VerticalPolygonalCylinder( polylist, aThickness, aZpos - (aThickness / 2.0), true, aBiuTo3DUnits ); Draw3D_VerticalPolygonalCylinder( polylist, aThickness, aZpos - (aThickness / 2.0),
true, aBiuTo3DUnits );
} }
...@@ -260,12 +244,14 @@ void Draw3D_SolidHorizontalPolyPolygons( const CPOLYGONS_LIST& aPolysList, ...@@ -260,12 +244,14 @@ void Draw3D_SolidHorizontalPolyPolygons( const CPOLYGONS_LIST& aPolysList,
*/ */
void Draw3D_SolidHorizontalPolygonWithHoles( const CPOLYGONS_LIST& aPolysList, void Draw3D_SolidHorizontalPolygonWithHoles( const CPOLYGONS_LIST& aPolysList,
int aZpos, int aThickness, int aZpos, int aThickness,
double aBiuTo3DUnits, bool aUseTextures ) double aBiuTo3DUnits, bool aUseTextures,
float aNormal_Z_Orientation )
{ {
CPOLYGONS_LIST polygon; CPOLYGONS_LIST polygon;
ConvertPolysListWithHolesToOnePolygon( aPolysList, polygon ); ConvertPolysListWithHolesToOnePolygon( aPolysList, polygon );
Draw3D_SolidHorizontalPolyPolygons( polygon, aZpos, aThickness, aBiuTo3DUnits, aUseTextures ); Draw3D_SolidHorizontalPolyPolygons( polygon, aZpos, aThickness, aBiuTo3DUnits, aUseTextures,
aNormal_Z_Orientation );
} }
...@@ -294,7 +280,7 @@ void Draw3D_ZaxisCylinder( wxPoint aCenterPos, int aRadius, ...@@ -294,7 +280,7 @@ void Draw3D_ZaxisCylinder( wxPoint aCenterPos, int aRadius,
if( aHeight ) if( aHeight )
{ {
// Draw the vertical outer side // Draw the vertical outer side
Draw3D_VerticalPolygonalCylinder( outer_cornerBuffer, Draw3D_VerticalPolygonalCylinder( outer_cornerBuffer,
aHeight, aZpos, false, aBiuTo3DUnits ); aHeight, aZpos, false, aBiuTo3DUnits );
...@@ -308,23 +294,21 @@ void Draw3D_ZaxisCylinder( wxPoint aCenterPos, int aRadius, ...@@ -308,23 +294,21 @@ void Draw3D_ZaxisCylinder( wxPoint aCenterPos, int aRadius,
if( aThickness ) if( aThickness )
{ {
// draw top (front) and bottom (back) horizontal sides (rings) // draw top (front) and bottom (back) horizontal sides (rings)
SetNormalZpos();
outer_cornerBuffer.Append( inner_cornerBuffer ); outer_cornerBuffer.Append( inner_cornerBuffer );
CPOLYGONS_LIST polygon; CPOLYGONS_LIST polygon;
ConvertPolysListWithHolesToOnePolygon( outer_cornerBuffer, polygon ); ConvertPolysListWithHolesToOnePolygon( outer_cornerBuffer, polygon );
// draw top (front) horizontal ring // draw top (front) horizontal ring
Draw3D_SolidHorizontalPolyPolygons( polygon, aZpos + aHeight, 0, aBiuTo3DUnits, false ); Draw3D_SolidHorizontalPolyPolygons( polygon, aZpos + aHeight, 0, aBiuTo3DUnits, false,
1.0f );
if( aHeight ) if( aHeight )
{ {
// draw bottom (back) horizontal ring // draw bottom (back) horizontal ring
SetNormalZneg(); Draw3D_SolidHorizontalPolyPolygons( polygon, aZpos, 0, aBiuTo3DUnits, false,
Draw3D_SolidHorizontalPolyPolygons( polygon, aZpos, 0, aBiuTo3DUnits, false ); -1.0f );
} }
} }
SetNormalZpos();
} }
...@@ -373,18 +357,16 @@ void Draw3D_ZaxisOblongCylinder( wxPoint aAxis1Pos, wxPoint aAxis2Pos, ...@@ -373,18 +357,16 @@ void Draw3D_ZaxisOblongCylinder( wxPoint aAxis1Pos, wxPoint aAxis2Pos,
ConvertPolysListWithHolesToOnePolygon( outer_cornerBuffer, polygon ); ConvertPolysListWithHolesToOnePolygon( outer_cornerBuffer, polygon );
// draw top (front) horizontal side (ring) // draw top (front) horizontal side (ring)
SetNormalZpos(); Draw3D_SolidHorizontalPolyPolygons( polygon, aZpos + aHeight, 0, aBiuTo3DUnits, false,
Draw3D_SolidHorizontalPolyPolygons( polygon, aZpos + aHeight, 0, aBiuTo3DUnits, false ); 1.0f );
if( aHeight ) if( aHeight )
{ {
// draw bottom (back) horizontal side (ring) // draw bottom (back) horizontal side (ring)
SetNormalZneg(); Draw3D_SolidHorizontalPolyPolygons( polygon, aZpos, 0, aBiuTo3DUnits, false,
Draw3D_SolidHorizontalPolyPolygons( polygon, aZpos, 0, aBiuTo3DUnits, false ); -1.0f );
} }
} }
SetNormalZpos();
} }
...@@ -402,7 +384,7 @@ void Draw3D_SolidSegment( const wxPoint& aStart, const wxPoint& aEnd, ...@@ -402,7 +384,7 @@ void Draw3D_SolidSegment( const wxPoint& aStart, const wxPoint& aEnd,
TransformRoundedEndsSegmentToPolygon( cornerBuffer, aStart, aEnd, slice, aWidth ); TransformRoundedEndsSegmentToPolygon( cornerBuffer, aStart, aEnd, slice, aWidth );
Draw3D_SolidHorizontalPolyPolygons( cornerBuffer, aZpos, aThickness, aBiuTo3DUnits, false ); Draw3D_SolidHorizontalPolyPolygons( cornerBuffer, aZpos, aThickness, aBiuTo3DUnits, false, 1.0f );
} }
...@@ -416,7 +398,7 @@ void Draw3D_ArcSegment( const wxPoint& aCenterPos, const wxPoint& aStartPoint, ...@@ -416,7 +398,7 @@ void Draw3D_ArcSegment( const wxPoint& aCenterPos, const wxPoint& aStartPoint,
TransformArcToPolygon( cornerBuffer, aCenterPos, aStartPoint, aArcAngle, TransformArcToPolygon( cornerBuffer, aCenterPos, aStartPoint, aArcAngle,
slice, aWidth ); slice, aWidth );
Draw3D_SolidHorizontalPolyPolygons( cornerBuffer, aZpos, aThickness, aBiuTo3DUnits, false ); Draw3D_SolidHorizontalPolyPolygons( cornerBuffer, aZpos, aThickness, aBiuTo3DUnits, false, 1.0f );
} }
......
...@@ -37,6 +37,7 @@ ...@@ -37,6 +37,7 @@
* @param aThickness = thickness in board internal units * @param aThickness = thickness in board internal units
* @param aBiuTo3DUnits = board internal units to 3D units scaling value * @param aBiuTo3DUnits = board internal units to 3D units scaling value
* @param aUseTextures = true to use textxures for the polygons * @param aUseTextures = true to use textxures for the polygons
* @param aNormal_Z_Orientation = the normal Z orientation to apply
* If aThickness = 0, a polygon area is drawn in a XY plane at Z position = aZpos. * If aThickness = 0, a polygon area is drawn in a XY plane at Z position = aZpos.
* If aThickness > 0, a solid object is drawn. * If aThickness > 0, a solid object is drawn.
* The top side is located at aZpos + aThickness / 2 * The top side is located at aZpos + aThickness / 2
...@@ -44,7 +45,8 @@ ...@@ -44,7 +45,8 @@
*/ */
void Draw3D_SolidHorizontalPolyPolygons( const CPOLYGONS_LIST& aPolysList, void Draw3D_SolidHorizontalPolyPolygons( const CPOLYGONS_LIST& aPolysList,
int aZpos, int aThickness, double aBiuTo3DUnits, int aZpos, int aThickness, double aBiuTo3DUnits,
bool aUseTextures ); bool aUseTextures,
float aNormal_Z_Orientation );
/** draw the solid polygon found in aPolysList /** draw the solid polygon found in aPolysList
* The first polygonj is the main polygon, others are holes * The first polygonj is the main polygon, others are holes
...@@ -53,6 +55,7 @@ void Draw3D_SolidHorizontalPolyPolygons( const CPOLYGONS_LIST& aPolysList, ...@@ -53,6 +55,7 @@ void Draw3D_SolidHorizontalPolyPolygons( const CPOLYGONS_LIST& aPolysList,
* @param aThickness = thickness in board internal units * @param aThickness = thickness in board internal units
* @param aBiuTo3DUnits = board internal units to 3D units scaling value * @param aBiuTo3DUnits = board internal units to 3D units scaling value
* @param aUseTextures = true to use textxures for the polygons * @param aUseTextures = true to use textxures for the polygons
* @param aNormal_Z_Orientation = the normal Z orientation to apply
* If aThickness = 0, a polygon area is drawn in a XY plane at Z position = aZpos. * If aThickness = 0, a polygon area is drawn in a XY plane at Z position = aZpos.
* If aThickness > 0, a solid object is drawn. * If aThickness > 0, a solid object is drawn.
* The top side is located at aZpos + aThickness / 2 * The top side is located at aZpos + aThickness / 2
...@@ -60,7 +63,8 @@ void Draw3D_SolidHorizontalPolyPolygons( const CPOLYGONS_LIST& aPolysList, ...@@ -60,7 +63,8 @@ void Draw3D_SolidHorizontalPolyPolygons( const CPOLYGONS_LIST& aPolysList,
*/ */
void Draw3D_SolidHorizontalPolygonWithHoles( const CPOLYGONS_LIST& aPolysList, void Draw3D_SolidHorizontalPolygonWithHoles( const CPOLYGONS_LIST& aPolysList,
int aZpos, int aThickness, double aBiuTo3DUnits, int aZpos, int aThickness, double aBiuTo3DUnits,
bool aUseTextures ); bool aUseTextures,
float aNormal_Z_Orientation );
/** draw a thick segment using 3D primitives, in a XY plane /** draw a thick segment using 3D primitives, in a XY plane
* @param aStart = YX position of start point in board units * @param aStart = YX position of start point in board units
......
...@@ -368,8 +368,9 @@ void EDA_3D_CANVAS::draw3DPadHole( const D_PAD* aPad ) ...@@ -368,8 +368,9 @@ void EDA_3D_CANVAS::draw3DPadHole( const D_PAD* aPad )
if( drillsize.x == drillsize.y ) // usual round hole if( drillsize.x == drillsize.y ) // usual round hole
{ {
int hole_radius = ( drillsize.x + thickness ) / 2;
Draw3D_ZaxisCylinder( aPad->GetPosition(), Draw3D_ZaxisCylinder( aPad->GetPosition(),
(drillsize.x + thickness / 2) / 2, holeHeight, hole_radius, holeHeight,
thickness, holeZpoz, GetPrm3DVisu().m_BiuTo3Dunits ); thickness, holeZpoz, GetPrm3DVisu().m_BiuTo3Dunits );
} }
else // Oblong hole else // Oblong hole
......
...@@ -260,7 +260,7 @@ void EDA_3D_FRAME::LoadSettings( wxConfigBase* aCfg ) ...@@ -260,7 +260,7 @@ void EDA_3D_FRAME::LoadSettings( wxConfigBase* aCfg )
aCfg->Read( keyRenderShowModelBBox, &tmp, false ); aCfg->Read( keyRenderShowModelBBox, &tmp, false );
prms.SetFlag( FL_RENDER_SHOW_MODEL_BBOX, tmp ); prms.SetFlag( FL_RENDER_SHOW_MODEL_BBOX, tmp );
aCfg->Read( keyShowAxis, &tmp, true ); aCfg->Read( keyShowAxis, &tmp, true );
prms.SetFlag( FL_AXIS, tmp ); prms.SetFlag( FL_AXIS, tmp );
...@@ -324,7 +324,7 @@ void EDA_3D_FRAME::SaveSettings( wxConfigBase* aCfg ) ...@@ -324,7 +324,7 @@ void EDA_3D_FRAME::SaveSettings( wxConfigBase* aCfg )
aCfg->Write( keyRenderUseModelNormals, prms.GetFlag( FL_RENDER_USE_MODEL_NORMALS ) ); aCfg->Write( keyRenderUseModelNormals, prms.GetFlag( FL_RENDER_USE_MODEL_NORMALS ) );
aCfg->Write( keyRenderMaterial, prms.GetFlag( FL_RENDER_MATERIAL ) ); aCfg->Write( keyRenderMaterial, prms.GetFlag( FL_RENDER_MATERIAL ) );
aCfg->Write( keyRenderShowModelBBox, prms.GetFlag( FL_RENDER_SHOW_MODEL_BBOX ) ); aCfg->Write( keyRenderShowModelBBox, prms.GetFlag( FL_RENDER_SHOW_MODEL_BBOX ) );
aCfg->Write( keyShowAxis, prms.GetFlag( FL_AXIS ) ); aCfg->Write( keyShowAxis, prms.GetFlag( FL_AXIS ) );
aCfg->Write( keyShowGrid, prms.GetFlag( FL_GRID ) ); aCfg->Write( keyShowGrid, prms.GetFlag( FL_GRID ) );
aCfg->Write( keyShowGridSize, prms.m_3D_Grid ); aCfg->Write( keyShowGridSize, prms.m_3D_Grid );
......
...@@ -50,6 +50,7 @@ S3D_MATERIAL::S3D_MATERIAL( S3D_MASTER* father, const wxString& name ) : ...@@ -50,6 +50,7 @@ S3D_MATERIAL::S3D_MATERIAL( S3D_MASTER* father, const wxString& name ) :
m_SpecularColor.clear(); m_SpecularColor.clear();
m_Shininess.clear(); m_Shininess.clear();
m_Transparency.clear(); m_Transparency.clear();
m_ColorPerVertex = false;
} }
...@@ -81,17 +82,29 @@ bool S3D_MATERIAL::SetOpenGLMaterial( unsigned int aMaterialIndex, bool aUseMate ...@@ -81,17 +82,29 @@ bool S3D_MATERIAL::SetOpenGLMaterial( unsigned int aMaterialIndex, bool aUseMate
{ {
transparency_value = m_Transparency[aMaterialIndex]; transparency_value = m_Transparency[aMaterialIndex];
} }
else
{
if( m_Transparency.size() > 0 )
transparency_value = m_Transparency[0];
}
if( m_DiffuseColor.size() > aMaterialIndex ) if( m_DiffuseColor.size() > aMaterialIndex )
{ {
glm::vec3 color = m_DiffuseColor[aMaterialIndex]; glm::vec3 color = m_DiffuseColor[aMaterialIndex];
glColor4f( color.x, color.y, color.z, 1.0 - transparency_value ); glColor4f( color.x, color.y, color.z, 1.0f - transparency_value );
}
else
{
if( m_DiffuseColor.size() == 0 )
{
glColor4f( 0.8f, 0.8f, 0.8f, 1.0f );
}
} }
if( m_Shininess.size() > aMaterialIndex ) if( m_Shininess.size() > 0 )
{ {
glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, m_Shininess[aMaterialIndex] ); glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, m_Shininess[0] );
} }
// emissive // emissive
......
...@@ -48,6 +48,7 @@ public: ...@@ -48,6 +48,7 @@ public:
std::vector< glm::vec3 > m_SpecularColor; std::vector< glm::vec3 > m_SpecularColor;
std::vector< float > m_Shininess; std::vector< float > m_Shininess;
std::vector< float > m_Transparency; std::vector< float > m_Transparency;
bool m_ColorPerVertex;
public: public:
S3D_MATERIAL( S3D_MASTER* father, const wxString& name ); S3D_MATERIAL( S3D_MASTER* father, const wxString& name );
......
This diff is collapsed.
...@@ -24,12 +24,14 @@ ...@@ -24,12 +24,14 @@
/** /**
* @file 3d_mesh_model.h * @file 3d_mesh_model.h
* @brief * @brief
*/ */
#ifndef __3D_MESH_MODEL_H__ #ifndef __3D_MESH_MODEL_H__
#define __3D_MESH_MODEL_H__ #define __3D_MESH_MODEL_H__
#include <memory>
#include <boost/shared_ptr.hpp>
#include <vector> #include <vector>
#define GLM_FORCE_RADIANS #define GLM_FORCE_RADIANS
#include <gal/opengl/glm/glm.hpp> #include <gal/opengl/glm/glm.hpp>
...@@ -37,9 +39,14 @@ ...@@ -37,9 +39,14 @@
#include "3d_material.h" #include "3d_material.h"
#include "CBBox.h" #include "CBBox.h"
class S3D_MESH; class S3D_MESH;
/** A smart pointer to an S3D_MESH object */
typedef boost::shared_ptr<S3D_MESH> S3D_MESH_PTR;
/** A container of smar S3D_MESH object pointers */
typedef std::vector<S3D_MESH_PTR> S3D_MESH_PTRS;
class S3D_MESH class S3D_MESH
{ {
public: public:
...@@ -59,8 +66,9 @@ public: ...@@ -59,8 +66,9 @@ public:
std::vector< S3D_VERTEX > m_PerFaceColor; std::vector< S3D_VERTEX > m_PerFaceColor;
std::vector< S3D_VERTEX > m_PerFaceNormalsNormalized; std::vector< S3D_VERTEX > m_PerFaceNormalsNormalized;
std::vector< S3D_VERTEX > m_PerVertexNormalsNormalized; std::vector< S3D_VERTEX > m_PerVertexNormalsNormalized;
std::vector< int > m_MaterialIndex; std::vector< int > m_MaterialIndexPerFace;
std::vector< S3D_MESH * > childs; std::vector< std::vector<int> > m_MaterialIndexPerVertex;
S3D_MESH_PTRS childs;
S3D_VERTEX m_translation; S3D_VERTEX m_translation;
glm::vec4 m_rotation; glm::vec4 m_rotation;
......
...@@ -54,20 +54,8 @@ S3D_MODEL_PARSER *S3D_MODEL_PARSER::Create( S3D_MASTER* aMaster, ...@@ -54,20 +54,8 @@ S3D_MODEL_PARSER *S3D_MODEL_PARSER::Create( S3D_MASTER* aMaster,
int S3D_MASTER::ReadData( S3D_MODEL_PARSER* aParser ) int S3D_MASTER::ReadData( S3D_MODEL_PARSER* aParser )
{ {
if( m_Shape3DName.IsEmpty() ) if( m_Shape3DFullFilename.IsEmpty() || aParser == NULL )
{
//DBG( printf("m_Shape3DName.IsEmpty") );
return -1;
}
if( m_Shape3DFullFilename.IsEmpty() )
{
//DBG( printf("m_Shape3DFullFilename.IsEmpty") );
return -1;
}
if( aParser == NULL )
return -1; return -1;
wxString filename = m_Shape3DFullFilename; wxString filename = m_Shape3DFullFilename;
...@@ -107,7 +95,7 @@ void S3D_MASTER::Render( bool aIsRenderingJustNonTransparentObjects, ...@@ -107,7 +95,7 @@ void S3D_MASTER::Render( bool aIsRenderingJustNonTransparentObjects,
{ {
if( m_parser == NULL ) if( m_parser == NULL )
return; return;
double aVrmlunits_to_3Dunits = g_Parm_3D_Visu.m_BiuTo3Dunits * UNITS3D_TO_UNITSPCB; double aVrmlunits_to_3Dunits = g_Parm_3D_Visu.m_BiuTo3Dunits * UNITS3D_TO_UNITSPCB;
glScalef( aVrmlunits_to_3Dunits, aVrmlunits_to_3Dunits, aVrmlunits_to_3Dunits ); glScalef( aVrmlunits_to_3Dunits, aVrmlunits_to_3Dunits, aVrmlunits_to_3Dunits );
...@@ -141,7 +129,7 @@ CBBOX &S3D_MASTER::getFastAABBox( ) ...@@ -141,7 +129,7 @@ CBBOX &S3D_MASTER::getFastAABBox( )
{ {
if( !m_fastAABBox.IsInitialized() ) if( !m_fastAABBox.IsInitialized() )
calcBBox(); calcBBox();
return m_fastAABBox; return m_fastAABBox;
} }
...@@ -152,7 +140,7 @@ void S3D_MASTER::calcBBox() ...@@ -152,7 +140,7 @@ void S3D_MASTER::calcBBox()
return; return;
bool firstBBox = true; bool firstBBox = true;
for( unsigned int idx = 0; idx < m_parser->childs.size(); idx++ ) for( unsigned int idx = 0; idx < m_parser->childs.size(); idx++ )
if( firstBBox ) if( firstBBox )
{ {
...@@ -175,7 +163,7 @@ void S3D_MASTER::calcBBox() ...@@ -175,7 +163,7 @@ void S3D_MASTER::calcBBox()
fullTransformMatrix = glm::translate( fullTransformMatrix, S3D_VERTEX( m_MatPosition.x * SCALE_3D_CONV, fullTransformMatrix = glm::translate( fullTransformMatrix, S3D_VERTEX( m_MatPosition.x * SCALE_3D_CONV,
m_MatPosition.y * SCALE_3D_CONV, m_MatPosition.y * SCALE_3D_CONV,
m_MatPosition.z * SCALE_3D_CONV) ); m_MatPosition.z * SCALE_3D_CONV) );
if( m_MatRotation.z != 0.0 ) if( m_MatRotation.z != 0.0 )
fullTransformMatrix = glm::rotate( fullTransformMatrix, glm::radians(-(float)m_MatRotation.z), S3D_VERTEX( 0.0f, 0.0f, 1.0f ) ); fullTransformMatrix = glm::rotate( fullTransformMatrix, glm::radians(-(float)m_MatRotation.z), S3D_VERTEX( 0.0f, 0.0f, 1.0f ) );
if( m_MatRotation.y != 0.0 ) if( m_MatRotation.y != 0.0 )
...@@ -184,7 +172,7 @@ void S3D_MASTER::calcBBox() ...@@ -184,7 +172,7 @@ void S3D_MASTER::calcBBox()
fullTransformMatrix = glm::rotate( fullTransformMatrix, glm::radians(-(float)m_MatRotation.x), S3D_VERTEX( 1.0f, 0.0f, 0.0f ) ); fullTransformMatrix = glm::rotate( fullTransformMatrix, glm::radians(-(float)m_MatRotation.x), S3D_VERTEX( 1.0f, 0.0f, 0.0f ) );
fullTransformMatrix = glm::scale( fullTransformMatrix, S3D_VERTEX( m_MatScale.x, m_MatScale.y, m_MatScale.z ) ); fullTransformMatrix = glm::scale( fullTransformMatrix, S3D_VERTEX( m_MatScale.x, m_MatScale.y, m_MatScale.z ) );
// Apply transformation // Apply transformation
m_fastAABBox = m_BBox; m_fastAABBox = m_BBox;
m_fastAABBox.ApplyTransformationAA( fullTransformMatrix ); m_fastAABBox.ApplyTransformationAA( fullTransformMatrix );
......
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
#define MODELPARSERS_H #define MODELPARSERS_H
#include <map> #include <map>
#include <memory>
#include <vector> #include <vector>
#include <wx/string.h> #include <wx/string.h>
#include <3d_mesh_model.h> #include <3d_mesh_model.h>
...@@ -71,11 +72,11 @@ public: ...@@ -71,11 +72,11 @@ public:
* @param aFilename = the full file name of the file to load * @param aFilename = the full file name of the file to load
* @return true if as succeeded * @return true if as succeeded
*/ */
virtual bool Load( const wxString& aFilename ) { virtual bool Load( const wxString& aFilename ) {
return false; return false;
}; };
std::vector< S3D_MESH* > childs; S3D_MESH_PTRS childs;
private: private:
S3D_MASTER* master; S3D_MASTER* master;
...@@ -118,16 +119,9 @@ public: ...@@ -118,16 +119,9 @@ public:
*/ */
static void GetNodeProperties( wxXmlNode* aNode, PROPERTY_MAP& aProps ); static void GetNodeProperties( wxXmlNode* aNode, PROPERTY_MAP& aProps );
/**
* Return string representing x3d file in vrml2 format
* Function Load must be called before this function, otherwise empty
* data set is returned.
*/
wxString VRML2_representation();
private: private:
wxString m_Filename; wxString m_Filename;
S3D_MESH* m_model; S3D_MESH_PTR m_model;
std::vector< wxString > vrml_materials; std::vector< wxString > vrml_materials;
std::vector< wxString > vrml_points; std::vector< wxString > vrml_points;
...@@ -143,7 +137,7 @@ private: ...@@ -143,7 +137,7 @@ private:
typedef std::map< std::string, std::vector< glm::vec3 > > VRML2_COORDINATE_MAP; typedef std::map< std::string, std::vector< glm::vec3 > > VRML2_COORDINATE_MAP;
typedef std::map< std::string, S3D_MESH* > VRML2_DEF_GROUP_MAP; typedef std::map< std::string, S3D_MESH_PTR > VRML2_DEF_GROUP_MAP;
/** /**
* class VRML2_MODEL_PARSER * class VRML2_MODEL_PARSER
...@@ -164,7 +158,7 @@ public: ...@@ -164,7 +158,7 @@ public:
* @param aTransformationModel a model with translation, rotation and scale to apply to default root * @param aTransformationModel a model with translation, rotation and scale to apply to default root
* @return bool - true if finnished with success * @return bool - true if finnished with success
*/ */
bool Load( const wxString& aFilename, S3D_MESH *aTransformationModel ); bool Load( const wxString& aFilename, S3D_MESH_PTR aTransformationModel );
/** /**
* Return string representing VRML2 file in vrml2 format * Return string representing VRML2 file in vrml2 format
...@@ -174,7 +168,7 @@ public: ...@@ -174,7 +168,7 @@ public:
wxString VRML2_representation(); wxString VRML2_representation();
private: private:
int loadFileModel( S3D_MESH *transformationModel ); int loadFileModel( S3D_MESH_PTR transformationModel );
int read_Transform(); int read_Transform();
int read_DEF(); int read_DEF();
int read_DEF_Coordinate(); int read_DEF_Coordinate();
...@@ -211,7 +205,7 @@ private: ...@@ -211,7 +205,7 @@ private:
bool m_normalPerVertex; bool m_normalPerVertex;
bool colorPerVertex; bool colorPerVertex;
S3D_MESH* m_model; ///< It stores the current model that the parsing is adding data S3D_MESH_PTR m_model; ///< It stores the current model that the parsing is adding data
FILE* m_file; FILE* m_file;
wxFileName m_Filename; wxFileName m_Filename;
VRML2_COORDINATE_MAP m_defCoordinateMap; VRML2_COORDINATE_MAP m_defCoordinateMap;
...@@ -266,7 +260,7 @@ private: ...@@ -266,7 +260,7 @@ private:
bool m_normalPerVertex; bool m_normalPerVertex;
bool colorPerVertex; bool colorPerVertex;
S3D_MESH* m_model; S3D_MESH_PTR m_model;
FILE* m_file; FILE* m_file;
wxString m_Filename; wxString m_Filename;
S3D_MODEL_PARSER* m_ModelParser; S3D_MODEL_PARSER* m_ModelParser;
......
...@@ -224,7 +224,7 @@ int ParseVertexList( FILE* File, std::vector<glm::vec3>& dst_vector ) ...@@ -224,7 +224,7 @@ int ParseVertexList( FILE* File, std::vector<glm::vec3>& dst_vector )
glm::vec3 vertex; glm::vec3 vertex;
while( ParseVertex( File, vertex ) == 3 ) while( ParseVertex( File, vertex ) )
{ {
dst_vector.push_back( vertex ); dst_vector.push_back( vertex );
} }
......
...@@ -51,7 +51,7 @@ VRML1_MODEL_PARSER::VRML1_MODEL_PARSER( S3D_MODEL_PARSER* aModelParser ) ...@@ -51,7 +51,7 @@ VRML1_MODEL_PARSER::VRML1_MODEL_PARSER( S3D_MODEL_PARSER* aModelParser )
{ {
m_ModelParser = aModelParser; m_ModelParser = aModelParser;
m_Master = m_ModelParser->GetMaster(); m_Master = m_ModelParser->GetMaster();
m_model = NULL; m_model.reset();
m_file = NULL; m_file = NULL;
m_normalPerVertex = true; m_normalPerVertex = true;
colorPerVertex = true; colorPerVertex = true;
...@@ -88,7 +88,7 @@ bool VRML1_MODEL_PARSER::Load( const wxString& aFilename ) ...@@ -88,7 +88,7 @@ bool VRML1_MODEL_PARSER::Load( const wxString& aFilename )
if( strcmp( text, "Separator" ) == 0 ) if( strcmp( text, "Separator" ) == 0 )
{ {
m_model = new S3D_MESH(); m_model.reset( new S3D_MESH() );
m_ModelParser->childs.push_back( m_model ); m_ModelParser->childs.push_back( m_model );
read_separator(); read_separator();
} }
...@@ -122,18 +122,18 @@ int VRML1_MODEL_PARSER::read_separator() ...@@ -122,18 +122,18 @@ int VRML1_MODEL_PARSER::read_separator()
} }
else if( strcmp( text, "Separator" ) == 0 ) else if( strcmp( text, "Separator" ) == 0 )
{ {
S3D_MESH* parent = m_model; S3D_MESH_PTR parent( m_model.get() );
S3D_MESH* new_mesh_model = new S3D_MESH(); S3D_MESH_PTR new_mesh_model( new S3D_MESH() );
m_model->childs.push_back( new_mesh_model ); m_model->childs.push_back( new_mesh_model );
m_model = new_mesh_model; m_model.reset( new_mesh_model.get() );
// recursive // recursive
read_separator(); read_separator();
m_model = parent; m_model.reset( parent.get() );
} }
else if( ( *text != '}' ) ) else if( ( *text != '}' ) )
{ {
...@@ -212,7 +212,7 @@ int VRML1_MODEL_PARSER::readCoordinate3() ...@@ -212,7 +212,7 @@ int VRML1_MODEL_PARSER::readCoordinate3()
// DBG( printf( " readCoordinate3\n" ) ); // DBG( printf( " readCoordinate3\n" ) );
while( GetNextTag( m_file, text, sizeof(text) ) ) while( GetNextTag( m_file, text, sizeof( text ) ) )
{ {
if( *text == ']' ) if( *text == ']' )
{ {
...@@ -401,12 +401,14 @@ int VRML1_MODEL_PARSER::readIndexedFaceSet_coordIndex() ...@@ -401,12 +401,14 @@ int VRML1_MODEL_PARSER::readIndexedFaceSet_coordIndex()
|| (coord[0] == coord[2]) || (coord[0] == coord[2])
|| (coord[2] == coord[1]) ) || (coord[2] == coord[1]) )
{ {
wxLogTrace( traceVrmlV1Parser, wxT( " invalid coordIndex at index %u (%d, %d, %d, %d)" ), (unsigned int)m_model->m_CoordIndex.size() + 1,coord[0], coord[1], coord[2], dummy ); wxLogTrace( traceVrmlV1Parser, wxT( " invalid coordIndex at index %zu (%d, %d, %d, %d)" ),
m_model->m_CoordIndex.size() + 1, coord[0], coord[1], coord[2], dummy );
} }
if( dummy != -1 ) if( dummy != -1 )
{ {
wxLogTrace( traceVrmlV1Parser, wxT( " Error at index %u, -1 Expected, got %d" ), (unsigned int)m_model->m_CoordIndex.size() + 1, dummy ); wxLogTrace( traceVrmlV1Parser, wxT( " Error at index %zu, -1 Expected, got %d" ),
m_model->m_CoordIndex.size() + 1, dummy );
} }
m_model->m_CoordIndex.push_back( coord_list ); m_model->m_CoordIndex.push_back( coord_list );
...@@ -422,16 +424,16 @@ int VRML1_MODEL_PARSER::readIndexedFaceSet_materialIndex() ...@@ -422,16 +424,16 @@ int VRML1_MODEL_PARSER::readIndexedFaceSet_materialIndex()
{ {
// DBG( printf( " readIndexedFaceSet_materialIndex\n" ) ); // DBG( printf( " readIndexedFaceSet_materialIndex\n" ) );
m_model->m_MaterialIndex.clear(); m_model->m_MaterialIndexPerFace.clear();
int index; int index;
while( fscanf( m_file, "%d,", &index ) ) while( fscanf( m_file, "%d,", &index ) )
{ {
m_model->m_MaterialIndex.push_back( index ); m_model->m_MaterialIndexPerFace.push_back( index );
} }
// DBG( printf( " m_MaterialIndex.size: %ld\n", m_model->m_MaterialIndex.size() ) ); // DBG( printf( " m_MaterialIndexPerFace.size: %ld\n", m_model->m_MaterialIndexPerFace.size() ) );
return 0; return 0;
} }
This diff is collapsed.
...@@ -45,14 +45,6 @@ VRML_MODEL_PARSER::VRML_MODEL_PARSER( S3D_MASTER* aMaster ) : ...@@ -45,14 +45,6 @@ VRML_MODEL_PARSER::VRML_MODEL_PARSER( S3D_MASTER* aMaster ) :
VRML_MODEL_PARSER::~VRML_MODEL_PARSER() VRML_MODEL_PARSER::~VRML_MODEL_PARSER()
{ {
for( unsigned int idx = 0; idx < childs.size(); idx++ )
{
if( childs[idx] )
{
delete childs[idx];
childs[idx] = 0;
}
}
} }
bool VRML_MODEL_PARSER::Load( const wxString& aFilename ) bool VRML_MODEL_PARSER::Load( const wxString& aFilename )
......
...@@ -52,20 +52,12 @@ static const wxChar* traceX3DParser = wxT( "KI_TRACE_X3D_PARSER" ); ...@@ -52,20 +52,12 @@ static const wxChar* traceX3DParser = wxT( "KI_TRACE_X3D_PARSER" );
X3D_MODEL_PARSER::X3D_MODEL_PARSER( S3D_MASTER* aMaster ) : X3D_MODEL_PARSER::X3D_MODEL_PARSER( S3D_MASTER* aMaster ) :
S3D_MODEL_PARSER( aMaster ) S3D_MODEL_PARSER( aMaster )
{ {
m_model = NULL; m_model.reset();
} }
X3D_MODEL_PARSER::~X3D_MODEL_PARSER() X3D_MODEL_PARSER::~X3D_MODEL_PARSER()
{ {
for( unsigned int idx = 0; idx < childs.size(); idx++ )
{
if( childs[idx] )
{
delete childs[idx];
childs[idx] = 0;
}
}
} }
...@@ -102,44 +94,20 @@ bool X3D_MODEL_PARSER::Load( const wxString& aFilename ) ...@@ -102,44 +94,20 @@ bool X3D_MODEL_PARSER::Load( const wxString& aFilename )
node_it != transforms.end(); node_it != transforms.end();
node_it++ ) node_it++ )
{ {
m_model = new S3D_MESH(); m_model.reset( new S3D_MESH() );
childs.push_back( m_model ); childs.push_back( m_model );
readTransform( *node_it ); wxXmlNode* node = *node_it;
} wxXmlAttribute* prop = node->GetAttributes();
return true; wxLogTrace( traceX3DParser, wxT( "Transform: %s %s" ), prop->GetName(), prop->GetValue() );
}
readTransform( node );
wxString X3D_MODEL_PARSER::VRML2_representation()
{
wxString output;
for( unsigned i = 0; i < vrml_points.size(); i++ )
{
output +=
wxT( "Shape {\n"
" appearance Appearance {\n"
" material Material {\n" ) +
vrml_materials[i] +
wxT( " }\n"
" }\n"
" geometry IndexedFaceSet {\n"
" solid TRUE\n"
" coord Coordinate {\n"
" point [\n" ) +
vrml_points[i] +
wxT( " ]\n"
" }\n"
" coordIndex [\n" ) +
vrml_coord_indexes[i] +
wxT( " ]\n"
" }\n"
"},\n" );
} }
return output; return true;
} }
...@@ -147,7 +115,9 @@ void X3D_MODEL_PARSER::GetChildsByName( wxXmlNode* aParent, ...@@ -147,7 +115,9 @@ void X3D_MODEL_PARSER::GetChildsByName( wxXmlNode* aParent,
const wxString aName, const wxString aName,
std::vector<wxXmlNode*>& aResult ) std::vector<wxXmlNode*>& aResult )
{ {
// Breadth-first search (BFS) // (-Breadth-first search (BFS)-)
// **NOTE** This function was changed to get only the first depth of ocorrences
// so it will be an workarround for the Bug #1443431
std::queue<wxXmlNode*> found; std::queue<wxXmlNode*> found;
found.push( aParent ); found.push( aParent );
...@@ -161,11 +131,9 @@ void X3D_MODEL_PARSER::GetChildsByName( wxXmlNode* aParent, ...@@ -161,11 +131,9 @@ void X3D_MODEL_PARSER::GetChildsByName( wxXmlNode* aParent,
child = child->GetNext() ) child = child->GetNext() )
{ {
if( child->GetName() == aName ) if( child->GetName() == aName )
{
aResult.push_back( child ); aResult.push_back( child );
} else // **NOTE** This function was changed here to get only the first depth of ocorrences
found.push( child );
found.push( child );
} }
found.pop(); found.pop();
...@@ -206,6 +174,9 @@ void X3D_MODEL_PARSER::readTransform( wxXmlNode* aTransformNode ) ...@@ -206,6 +174,9 @@ void X3D_MODEL_PARSER::readTransform( wxXmlNode* aTransformNode )
PROPERTY_MAP properties; PROPERTY_MAP properties;
GetNodeProperties( aTransformNode, properties ); GetNodeProperties( aTransformNode, properties );
GetChildsByName( aTransformNode, wxT( "IndexedFaceSet" ), childnodes ); GetChildsByName( aTransformNode, wxT( "IndexedFaceSet" ), childnodes );
for( NODE_LIST::iterator node = childnodes.begin(); for( NODE_LIST::iterator node = childnodes.begin();
...@@ -438,7 +409,7 @@ void X3D_MODEL_PARSER::readIndexedFaceSet( wxXmlNode* aFaceNode, ...@@ -438,7 +409,7 @@ void X3D_MODEL_PARSER::readIndexedFaceSet( wxXmlNode* aFaceNode,
double angle = 0.0; double angle = 0.0;
wxStringTokenizer tokens( aTransformProps[ wxT( "rotation" ) ] ); wxStringTokenizer tokens( aTransformProps[ wxT( "rotation" ) ] );
double x, y, z; double x = 0.0, y = 0.0, z = 0.0;
if( !( tokens.GetNextToken().ToDouble( &x ) if( !( tokens.GetNextToken().ToDouble( &x )
&& tokens.GetNextToken().ToDouble( &y ) && tokens.GetNextToken().ToDouble( &y )
...@@ -559,7 +530,7 @@ void X3D_MODEL_PARSER::readIndexedFaceSet( wxXmlNode* aFaceNode, ...@@ -559,7 +530,7 @@ void X3D_MODEL_PARSER::readIndexedFaceSet( wxXmlNode* aFaceNode,
for( unsigned id = 0; id < color_points.size() / 3; id++ ) for( unsigned id = 0; id < color_points.size() / 3; id++ )
{ {
m_model->m_MaterialIndex.push_back( id ); m_model->m_MaterialIndexPerFace.push_back( id );
int color_triplet_indx = id * 3; int color_triplet_indx = id * 3;
glm::vec3 colorface( color_points[ color_triplet_indx + 0 ], glm::vec3 colorface( color_points[ color_triplet_indx + 0 ],
......
...@@ -94,7 +94,7 @@ set( KICAD_REPO_NAME "product" CACHE STRING "Name of the tree from which this bu ...@@ -94,7 +94,7 @@ set( KICAD_REPO_NAME "product" CACHE STRING "Name of the tree from which this bu
set( DOWNLOAD_DIR ${PROJECT_SOURCE_DIR}/.downloads-by-cmake set( DOWNLOAD_DIR ${PROJECT_SOURCE_DIR}/.downloads-by-cmake
CACHE PATH "Location of KiCad downloads, suggested is a dir common to all builds, i.e. global." ) CACHE PATH "Location of KiCad downloads, suggested is a dir common to all builds, i.e. global." )
#Add option to add user directories for linker, if any # Add option to add user directories for linker, if any
LINK_DIRECTORIES( ${LINK_DIRECTORIES_PATH} ) LINK_DIRECTORIES( ${LINK_DIRECTORIES_PATH} )
if( UNIX ) if( UNIX )
...@@ -104,6 +104,21 @@ elseif( MINGW ) ...@@ -104,6 +104,21 @@ elseif( MINGW )
endif() endif()
mark_as_advanced( KICAD_USER_CONFIG_DIR ) mark_as_advanced( KICAD_USER_CONFIG_DIR )
# Set default data file path to CMAKE_INSTALL_PREFIX if it wasn't specified during the
# CMake configuration. The value of DEFAULT_INSTALL_PATH is expanded in config.h and
# used in the source code to define the base path for kicad search paths and environment
# variables.
if( NOT DEFAULT_INSTALL_PATH )
set( DEFAULT_INSTALL_PATH "${CMAKE_INSTALL_PREFIX}"
CACHE
PATH
"Location of KiCad data files." )
endif()
# Generate build system specific header file.
include( PerformFeatureChecks )
perform_feature_checks()
#================================================ #================================================
# Set flags for GCC, or treat llvm as GCC # Set flags for GCC, or treat llvm as GCC
...@@ -553,10 +568,6 @@ endif() ...@@ -553,10 +568,6 @@ endif()
# Include MinGW resource compiler. # Include MinGW resource compiler.
include( MinGWResourceCompiler ) include( MinGWResourceCompiler )
# Generate build system specific header file.
include( PerformFeatureChecks )
perform_feature_checks()
# Find GDI+ on windows if wxGraphicsContext is available. # Find GDI+ on windows if wxGraphicsContext is available.
if( MINGW AND USE_WX_GRAPHICS_CONTEXT ) if( MINGW AND USE_WX_GRAPHICS_CONTEXT )
find_package( GdiPlus ) find_package( GdiPlus )
......
...@@ -147,7 +147,7 @@ if(WIN32 AND NOT CYGWIN) ...@@ -147,7 +147,7 @@ if(WIN32 AND NOT CYGWIN)
set(SSL_EAY_LIBRARY_DEBUG "${SSL_EAY_DEBUG}") set(SSL_EAY_LIBRARY_DEBUG "${SSL_EAY_DEBUG}")
set(SSL_EAY_LIBRARY_RELEASE "${SSL_EAY_RELEASE}") set(SSL_EAY_LIBRARY_RELEASE "${SSL_EAY_RELEASE}")
include({CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake) include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake)
select_library_configurations(LIB_EAY) select_library_configurations(LIB_EAY)
select_library_configurations(SSL_EAY) select_library_configurations(SSL_EAY)
......
...@@ -58,17 +58,8 @@ ...@@ -58,17 +58,8 @@
/// The legacy file format revision of the *.brd file created by this build /// The legacy file format revision of the *.brd file created by this build
#define LEGACY_BOARD_FILE_VERSION 2 #define LEGACY_BOARD_FILE_VERSION 2
/// The install prefix defined in CMAKE_INSTALL_PREFIX. /// The install prefix defined during CMake configuration or fall back to CMAKE_INSTALL_PREFIX.
#define DEFAULT_INSTALL_PATH "@CMAKE_INSTALL_PREFIX@" #define DEFAULT_INSTALL_PATH "@DEFAULT_INSTALL_PATH@"
/// The install prefix used for KiCad's libraries.
/// These paths are only intended to be reasonable default values that work if
/// the user installs KiCad in the default path for a given platform.
#if defined( __APPLE__ )
#define KICAD_DATA_PATH "/Library/Application Support/kicad"
#else
#define KICAD_DATA_PATH "@CMAKE_INSTALL_PREFIX@/@KICAD_DATA@"
#endif
/// The wxPython version found during configuration. /// The wxPython version found during configuration.
#if defined( KICAD_SCRIPTING_WXPYTHON ) #if defined( KICAD_SCRIPTING_WXPYTHON )
......
...@@ -535,6 +535,8 @@ set( BMAPS_MID ...@@ -535,6 +535,8 @@ set( BMAPS_MID
up up
use_3D_copper_thickness use_3D_copper_thickness
via via
via_buried
via_microvia
via_sketch via_sketch
warning warning
web_support web_support
......
...@@ -8,45 +8,44 @@ ...@@ -8,45 +8,44 @@
static const unsigned char png[] = { static const unsigned char png[] = {
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c,
0xce, 0x00, 0x00, 0x02, 0x51, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xa5, 0x96, 0x4f, 0x6c, 0x4c, 0xce, 0x00, 0x00, 0x02, 0x47, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xa5, 0x96, 0x3b, 0x68, 0x14,
0x51, 0x14, 0xc6, 0x7f, 0xa3, 0xff, 0xa4, 0xd5, 0x4a, 0x34, 0xb5, 0x20, 0x4d, 0xc5, 0x42, 0x5a, 0x51, 0x14, 0x86, 0xbf, 0x35, 0x2f, 0x51, 0x13, 0x91, 0x10, 0x0b, 0x25, 0xac, 0x58, 0xc8, 0xfa,
0x74, 0xa9, 0x34, 0x44, 0x42, 0x10, 0x82, 0x48, 0x2c, 0x84, 0x88, 0x58, 0x58, 0xd0, 0x8d, 0xda, 0x48, 0xe9, 0x62, 0x10, 0x04, 0xc5, 0x07, 0x62, 0x40, 0x10, 0x14, 0x15, 0xb4, 0xb1, 0x50, 0x9b,
0x48, 0x49, 0xa4, 0xe9, 0x06, 0x8b, 0x62, 0x31, 0xb4, 0xe3, 0xdd, 0x73, 0xdf, 0x8c, 0x69, 0xaa, 0x60, 0x63, 0x44, 0xf0, 0xd5, 0xa8, 0x20, 0xb1, 0x70, 0x35, 0xbb, 0x99, 0x7b, 0xee, 0x64, 0x4d,
0x99, 0x94, 0x11, 0xed, 0x58, 0xb1, 0x60, 0x67, 0x6d, 0x65, 0x6b, 0x63, 0x67, 0x61, 0x23, 0xb1, 0x70, 0x31, 0x24, 0x11, 0x93, 0xc1, 0x4a, 0x0b, 0xed, 0xac, 0xad, 0x6c, 0x6d, 0xec, 0x2c, 0x6c,
0x20, 0xd7, 0xe6, 0x78, 0xf3, 0x5a, 0x33, 0xef, 0xde, 0xc6, 0xe2, 0x25, 0x2f, 0x99, 0xef, 0xe4, 0x04, 0x0b, 0xe5, 0x5a, 0x78, 0x9c, 0x8c, 0x71, 0x77, 0xee, 0x5d, 0x2c, 0x06, 0x06, 0xe6, 0x3f,
0x77, 0xee, 0x79, 0xe7, 0xfb, 0xee, 0xe0, 0x9c, 0x23, 0xf4, 0x61, 0x8a, 0x75, 0x6b, 0xd2, 0x43, 0x7c, 0xe7, 0x7d, 0x06, 0xe7, 0x1c, 0xa1, 0x0f, 0x77, 0x58, 0xd5, 0x96, 0x1e, 0x0a, 0xe9, 0x7b,
0x2e, 0x79, 0x0f, 0x2e, 0x12, 0xc6, 0x10, 0xde, 0x11, 0xd3, 0x1d, 0xa4, 0x37, 0x5c, 0xc4, 0x30, 0xb0, 0x91, 0x70, 0x19, 0xe1, 0x0d, 0x31, 0xbd, 0x41, 0x7a, 0xcb, 0x59, 0x2c, 0x63, 0xbc, 0xa5,
0xc1, 0x7b, 0x5a, 0x83, 0x41, 0x08, 0x67, 0x11, 0x7e, 0x23, 0x38, 0x84, 0x9b, 0x01, 0x90, 0x13, 0x33, 0x18, 0x84, 0x70, 0x02, 0xe1, 0x27, 0x82, 0x43, 0xb8, 0xea, 0xd5, 0x1b, 0x8e, 0x22, 0x24,
0x08, 0x35, 0x84, 0x1a, 0x31, 0x87, 0x82, 0x40, 0x58, 0x0e, 0x22, 0xfc, 0x54, 0xc8, 0x0b, 0xdf, 0x08, 0x09, 0x11, 0xfb, 0x83, 0x40, 0x58, 0xf6, 0x21, 0x7c, 0x57, 0xc8, 0xbc, 0x2f, 0x7d, 0x4c,
0xf8, 0x88, 0x19, 0x45, 0x58, 0x56, 0xd0, 0x58, 0xd0, 0xe8, 0x88, 0x18, 0x46, 0xf8, 0xae, 0x90, 0x32, 0x8c, 0x61, 0x09, 0x21, 0xc1, 0x70, 0x29, 0x28, 0x75, 0x44, 0x0c, 0x21, 0x7c, 0x55, 0xc8,
0x0f, 0xe4, 0xe9, 0xf0, 0x9c, 0x64, 0x17, 0x42, 0x15, 0xa1, 0x86, 0xe5, 0x36, 0x2e, 0xe0, 0x1b, 0x3b, 0x2a, 0xf4, 0x78, 0x22, 0xd9, 0x89, 0x65, 0x41, 0x21, 0xd7, 0x71, 0x01, 0x35, 0xc2, 0x52,
0x61, 0x19, 0x40, 0xf8, 0xaa, 0x90, 0x4f, 0x44, 0x6c, 0xf4, 0x9c, 0x7c, 0x00, 0xa1, 0xa2, 0x27, 0x44, 0xf8, 0xac, 0x90, 0x0f, 0x44, 0xac, 0xf7, 0x44, 0x5e, 0xc4, 0xf0, 0x5c, 0x53, 0x76, 0x9f,
0xb9, 0x4f, 0x44, 0xdb, 0x8a, 0xdf, 0x1b, 0x16, 0x95, 0xe9, 0x45, 0xf8, 0xac, 0x90, 0x2f, 0xc4, 0x88, 0xae, 0xbf, 0xbe, 0x37, 0x35, 0x9a, 0xa6, 0x1f, 0xe1, 0xa3, 0x42, 0x3e, 0x11, 0xb3, 0x29,
0x6c, 0xc9, 0x84, 0x14, 0xe9, 0x43, 0x78, 0xa6, 0x90, 0x27, 0xcc, 0xd1, 0xf5, 0x8f, 0xa6, 0xc1, 0x17, 0x32, 0xc5, 0x00, 0x96, 0x3a, 0x42, 0x82, 0xe5, 0x31, 0x33, 0xac, 0xfd, 0x47, 0xd3, 0x24,
0xb8, 0x3a, 0x11, 0x3e, 0x2a, 0xe4, 0x1b, 0x11, 0x83, 0x9e, 0x6f, 0xd2, 0x8d, 0x50, 0x50, 0x48, 0x5d, 0x6b, 0x10, 0xde, 0x2b, 0xe4, 0x0b, 0x11, 0xa5, 0x5c, 0x48, 0x4c, 0x2f, 0x42, 0x55, 0xd3,
0x91, 0x32, 0xbd, 0x0d, 0x75, 0xab, 0x7c, 0xd2, 0x8a, 0xe1, 0x8d, 0x42, 0x7e, 0x10, 0x33, 0x9a, 0x15, 0xf3, 0x84, 0xfe, 0xa6, 0xba, 0x15, 0x73, 0xd2, 0x89, 0xe1, 0x95, 0x42, 0xbe, 0x11, 0x33,
0x09, 0xc9, 0xd3, 0x81, 0x61, 0x5a, 0x21, 0x0b, 0xcc, 0xd0, 0xdf, 0x54, 0xbb, 0x6a, 0xce, 0x25, 0x9c, 0x0b, 0xa9, 0xd0, 0x83, 0xf0, 0x40, 0x23, 0x69, 0x30, 0xc1, 0x60, 0x4b, 0xed, 0x8a, 0x3c,
0x85, 0xfc, 0xc2, 0x70, 0x2a, 0x13, 0xb2, 0x48, 0x0b, 0x86, 0x49, 0x85, 0x54, 0x11, 0x86, 0x32, 0xd7, 0x15, 0xf2, 0x03, 0xc3, 0x48, 0x2e, 0x64, 0x8e, 0x0e, 0x84, 0x9b, 0x1a, 0xc9, 0x02, 0x75,
0xf5, 0xa9, 0x8d, 0xb9, 0xa7, 0x10, 0x87, 0x70, 0x25, 0xc0, 0x5b, 0xd7, 0x75, 0xbb, 0x96, 0x88, 0x4f, 0xe4, 0x99, 0x8e, 0xb9, 0xa7, 0x10, 0x87, 0x70, 0x21, 0x60, 0xb6, 0x46, 0xb5, 0xf0, 0x8b,
0xd8, 0xeb, 0xd5, 0x6b, 0xd1, 0x85, 0x04, 0x62, 0xb8, 0x13, 0x00, 0x39, 0x93, 0x32, 0xe4, 0xb1, 0x58, 0xca, 0x5e, 0xbd, 0x1a, 0x9d, 0x49, 0x21, 0x86, 0x1b, 0x01, 0x90, 0xe3, 0x99, 0x81, 0x3c,
0x20, 0xd3, 0x3b, 0xe7, 0x60, 0x86, 0x0d, 0x08, 0x6f, 0x11, 0x66, 0x9b, 0x0a, 0x0b, 0x6c, 0x45, 0x1c, 0x34, 0xf4, 0xce, 0x39, 0x98, 0x60, 0x1d, 0xc2, 0x6b, 0x84, 0x6a, 0x4b, 0x61, 0x8d, 0xcd,
0x38, 0xec, 0x9c, 0x83, 0x79, 0x7a, 0x30, 0x3c, 0xc2, 0x72, 0x3e, 0xc3, 0x53, 0x3b, 0xd2, 0x27, 0x08, 0x07, 0xb4, 0x36, 0x7d, 0x58, 0x1e, 0x62, 0x38, 0x9d, 0x33, 0x53, 0xdb, 0xb2, 0x91, 0x66,
0x4d, 0xcf, 0xbc, 0xbd, 0x99, 0xeb, 0xb1, 0x6c, 0xc2, 0x10, 0xeb, 0xa8, 0x8e, 0xeb, 0xe2, 0xb4, 0x73, 0xde, 0xdd, 0x6a, 0xea, 0x69, 0xb0, 0x01, 0xc1, 0x6a, 0x3d, 0x8e, 0x68, 0xe3, 0x74, 0x7b,
0x7b, 0x9a, 0x7a, 0x8e, 0x65, 0x09, 0x61, 0x5f, 0x58, 0x04, 0x4d, 0xd3, 0x85, 0xe1, 0xb1, 0x8e, 0x9c, 0x7a, 0x86, 0xb0, 0x88, 0xb0, 0x27, 0x6c, 0x05, 0xfd, 0x6e, 0xf7, 0x8a, 0xa6, 0xea, 0x29,
0xaa, 0x4c, 0x91, 0x3e, 0x8f, 0x71, 0xeb, 0x4d, 0x19, 0x9e, 0xfe, 0x0d, 0x61, 0x5f, 0x04, 0xb5, 0x53, 0x0c, 0xe4, 0xea, 0xb3, 0x4e, 0x09, 0xb5, 0x3f, 0x4b, 0xd8, 0x07, 0xe9, 0x42, 0xb8, 0xab,
0xe9, 0x92, 0xd4, 0x10, 0x2a, 0x14, 0xd8, 0xe6, 0xd1, 0x77, 0x22, 0xe4, 0x93, 0xa6, 0x0a, 0x6c, 0x46, 0xb3, 0x58, 0x8a, 0x01, 0x4e, 0x3d, 0x52, 0xfd, 0x34, 0x35, 0x36, 0xfa, 0x57, 0x90, 0xa3,
0xf6, 0x47, 0x90, 0x23, 0x87, 0x70, 0x4b, 0x8b, 0x5e, 0x61, 0xd9, 0xed, 0x6d, 0x4a, 0xb8, 0x9b, 0x80, 0xe5, 0x9a, 0x1a, 0xbd, 0xc0, 0xb2, 0xab, 0x2d, 0xa7, 0xea, 0x6c, 0xf1, 0xae, 0x20, 0x9d,
0x34, 0x55, 0x5a, 0xd9, 0x54, 0x56, 0x40, 0x5e, 0xd3, 0xa2, 0x65, 0x2c, 0xfb, 0xb3, 0x37, 0x8a, 0xa9, 0x8b, 0x5a, 0x93, 0x25, 0x2c, 0x7b, 0xf3, 0x3b, 0x8a, 0x02, 0x26, 0xe3, 0x54, 0xc4, 0x90,
0x1c, 0x96, 0x89, 0xa4, 0xa9, 0x88, 0x61, 0x6f, 0x04, 0x29, 0xe4, 0x5c, 0xb2, 0xbe, 0x96, 0x93, 0x77, 0x05, 0x69, 0xc7, 0x9c, 0xca, 0xb4, 0xef, 0xb1, 0x80, 0x3a, 0x7a, 0x9d, 0x6a, 0x36, 0x23,
0x01, 0x57, 0xc9, 0xd5, 0xa4, 0xa9, 0x88, 0x03, 0xde, 0x64, 0x50, 0x8f, 0x1c, 0x4d, 0x41, 0x2e, 0x87, 0x52, 0x88, 0xe1, 0x5c, 0xc0, 0xbd, 0x3a, 0x99, 0xd1, 0x8f, 0x84, 0xae, 0xa0, 0xb2, 0xb6,
0x05, 0x5c, 0x72, 0xe9, 0xa6, 0x4e, 0x87, 0x46, 0xd0, 0x88, 0xae, 0x64, 0x0d, 0xc3, 0x78, 0x00, 0x64, 0x82, 0x30, 0x1a, 0x70, 0x49, 0x0f, 0xa6, 0x10, 0xe1, 0x7c, 0xd8, 0x0a, 0x8a, 0x28, 0x61,
0xe4, 0x48, 0x0a, 0x72, 0x39, 0x2c, 0x82, 0x22, 0x06, 0x53, 0x97, 0xd6, 0x24, 0x8b, 0xb4, 0x78, 0xd2, 0xa3, 0x75, 0x8b, 0x39, 0x3a, 0x3c, 0x90, 0xdd, 0x18, 0x5e, 0x2a, 0xe4, 0x4a, 0xe8, 0x66,
0x20, 0x7b, 0x10, 0x5e, 0x2b, 0xe8, 0x46, 0x68, 0x32, 0xf4, 0x23, 0x2c, 0x68, 0xd1, 0x03, 0xef, 0x18, 0xc4, 0xd2, 0x50, 0xa3, 0x71, 0xef, 0x25, 0x8d, 0x28, 0x21, 0xcc, 0xab, 0xfe, 0xb6, 0xcf,
0x4d, 0x1a, 0x31, 0x88, 0xe5, 0xa5, 0xea, 0xa7, 0x7c, 0x4d, 0xd5, 0x41, 0x45, 0x76, 0x22, 0x54, 0xa9, 0x65, 0xd0, 0x24, 0x3b, 0x10, 0x66, 0xb3, 0x03, 0xe6, 0xa9, 0x4b, 0x59, 0x4f, 0xf6, 0x38,
0xd2, 0x06, 0xf3, 0x7c, 0xfc, 0x11, 0x84, 0x2a, 0x96, 0x87, 0x94, 0x58, 0x1f, 0x9c, 0x75, 0xce, 0x75, 0x56, 0x07, 0xef, 0x3a, 0xe7, 0x1c, 0x54, 0xd9, 0xca, 0xcc, 0xf2, 0x80, 0x05, 0x2c, 0xd6,
0x39, 0x98, 0x65, 0x3b, 0x73, 0x75, 0x83, 0x05, 0x04, 0xeb, 0x10, 0xf3, 0xf4, 0x04, 0xeb, 0xd7, 0xed, 0x54, 0xe8, 0x0b, 0xd6, 0xb7, 0xf3, 0x43, 0xf8, 0x3f, 0xcf, 0x2f, 0x78, 0xbb, 0x45, 0x34,
0xf2, 0x87, 0xf0, 0x7f, 0x9e, 0x3f, 0x6d, 0x57, 0x45, 0xa7, 0xea, 0xac, 0xbd, 0xc8, 0x00, 0x00, 0xcd, 0x8e, 0xb0, 0xa7, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
}; };
const BITMAP_OPAQUE array_line_xpm[1] = {{ png, sizeof( png ), "array_line_xpm" }}; const BITMAP_OPAQUE array_line_xpm[1] = {{ png, sizeof( png ), "array_line_xpm" }};
......
This diff is collapsed.
...@@ -8,30 +8,30 @@ ...@@ -8,30 +8,30 @@
static const unsigned char png[] = { static const unsigned char png[] = {
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c,
0xce, 0x00, 0x00, 0x01, 0x59, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xed, 0x96, 0xb1, 0x6a, 0x02, 0xce, 0x00, 0x00, 0x01, 0x5a, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xed, 0x96, 0xbf, 0x6a, 0xc2,
0x41, 0x10, 0x86, 0x07, 0x7c, 0x06, 0xad, 0x0c, 0xd8, 0x48, 0xb0, 0x31, 0x36, 0xd6, 0x22, 0x58, 0x50, 0x14, 0x87, 0x3f, 0xf0, 0x19, 0x74, 0xaa, 0xe0, 0x22, 0xd2, 0x41, 0x9c, 0x9c, 0x25, 0xe0,
0x5a, 0xa4, 0xb8, 0x4a, 0xc8, 0x1b, 0x58, 0xa5, 0xca, 0x95, 0xa9, 0x7c, 0x82, 0x20, 0xec, 0xed, 0xe6, 0xe2, 0xe0, 0x24, 0xf8, 0x06, 0x4e, 0x4e, 0xe9, 0xe6, 0xe6, 0x13, 0x88, 0xc9, 0xbd, 0x37,
0xa9, 0x98, 0xce, 0xca, 0x60, 0x93, 0xd6, 0x77, 0xb1, 0xf0, 0x1d, 0x0c, 0x5c, 0x66, 0x6f, 0xe6, 0x06, 0x1c, 0x5d, 0x2c, 0x9d, 0xba, 0xfa, 0x2e, 0x0e, 0x7d, 0x07, 0x0b, 0xe9, 0x70, 0xae, 0xb1,
0xbc, 0xec, 0xe6, 0x76, 0xdd, 0x1c, 0x41, 0x10, 0xee, 0xe0, 0x67, 0x6f, 0x66, 0xff, 0xe1, 0x63, 0x49, 0x73, 0x6d, 0x1a, 0x4a, 0xa1, 0xe0, 0xf0, 0x1b, 0xce, 0x9f, 0x1f, 0x1f, 0xc9, 0xe1, 0x1c,
0xef, 0x98, 0x61, 0x21, 0x49, 0x12, 0xb8, 0x86, 0xf0, 0x91, 0x53, 0x80, 0xe8, 0xe8, 0x2f, 0xe5, 0x2e, 0x49, 0x92, 0xf0, 0x17, 0x02, 0xcc, 0x1c, 0xf4, 0x5b, 0x79, 0x99, 0x39, 0x98, 0x11, 0xa8,
0x17, 0x63, 0x7c, 0x7f, 0xf7, 0x97, 0xf2, 0x43, 0xf4, 0x82, 0x42, 0x64, 0x74, 0x40, 0x7d, 0xa2, 0x5d, 0x79, 0x99, 0x11, 0xa0, 0x7d, 0xd0, 0x09, 0xe8, 0x13, 0xe8, 0x57, 0xd0, 0x47, 0x1b, 0x5f,
0xf6, 0x1c, 0x67, 0xda, 0x73, 0xfe, 0xc0, 0xb1, 0xf2, 0x07, 0xa8, 0x1d, 0x6a, 0x85, 0xe0, 0x57, 0x74, 0xb4, 0xf9, 0x93, 0x8d, 0x7d, 0xd0, 0x13, 0xd0, 0x2f, 0x60, 0x62, 0xd0, 0x4b, 0xd0, 0x2b,
0x5c, 0x67, 0x1c, 0x67, 0x9a, 0x71, 0x7e, 0xc5, 0x71, 0x90, 0x81, 0xbe, 0x90, 0xda, 0xa7, 0x23, 0x89, 0x53, 0xad, 0x24, 0x6f, 0x62, 0x1b, 0x4f, 0x2e, 0xa0, 0x77, 0x50, 0x7d, 0xf9, 0xc4, 0x4d,
0xce, 0x5b, 0x3a, 0x68, 0xde, 0xa2, 0xbc, 0xe8, 0x93, 0x2f, 0x03, 0xc9, 0x0f, 0x80, 0x65, 0x9b, 0x2b, 0x0b, 0xda, 0xb4, 0x24, 0xaf, 0xfa, 0xd2, 0x97, 0x82, 0x9e, 0x21, 0x68, 0x4b, 0x6d, 0xd7,
0xf6, 0xd6, 0x0d, 0x1d, 0xb4, 0x6e, 0x50, 0x7e, 0xd9, 0x26, 0x1f, 0x81, 0x3a, 0x00, 0xf1, 0x30, 0xc8, 0x82, 0x76, 0x0d, 0xc9, 0x07, 0x6d, 0xe9, 0x13, 0xd0, 0x23, 0x44, 0xde, 0xf5, 0x5f, 0x16,
0xff, 0x96, 0xc5, 0x20, 0xda, 0x8b, 0x87, 0xe4, 0x7f, 0xbb, 0xc3, 0xb5, 0x9b, 0xe7, 0x8b, 0x41, 0x83, 0xa4, 0x16, 0x79, 0xd2, 0xbf, 0x6e, 0x42, 0xdc, 0xbd, 0xe6, 0x8b, 0x41, 0x52, 0x8b, 0xbb,
0xb4, 0x17, 0x75, 0x53, 0xff, 0xef, 0x9f, 0x66, 0x07, 0xd9, 0x7f, 0xb4, 0x1d, 0x74, 0xf6, 0x54, 0xb0, 0x6e, 0x16, 0x0c, 0xcd, 0x0d, 0x72, 0x0f, 0xda, 0x0d, 0x4a, 0x7b, 0xee, 0xa0, 0xff, 0x08,
0xa0, 0x5b, 0x04, 0x89, 0x91, 0x0e, 0x12, 0xa3, 0xcb, 0x20, 0xd1, 0xd3, 0x41, 0xa2, 0xe7, 0x04, 0x52, 0xc3, 0x2c, 0x48, 0x0d, 0xbf, 0x07, 0x45, 0xbd, 0x2c, 0x28, 0xea, 0xdd, 0x04, 0x81, 0x5a,
0xa1, 0xe1, 0x19, 0x8d, 0x27, 0xa3, 0x61, 0x4f, 0x2a, 0x6f, 0x87, 0xc8, 0x47, 0xf4, 0x6c, 0x8d, 0x80, 0x3e, 0xe7, 0x16, 0xf6, 0x0c, 0x6a, 0xe1, 0x86, 0x84, 0x63, 0x50, 0x87, 0x2c, 0x48, 0x1d,
0x86, 0xdd, 0xaa, 0xbc, 0x03, 0x24, 0x27, 0xdc, 0x90, 0x86, 0xe4, 0xc4, 0x71, 0x9a, 0x01, 0x4f, 0x20, 0x1c, 0xdf, 0x00, 0x99, 0xa9, 0x5d, 0xc8, 0x9c, 0xcc, 0xd4, 0x0d, 0x52, 0x03, 0xbb, 0xc0,
0x0a, 0x43, 0x62, 0x60, 0xcc, 0xba, 0xf8, 0xbe, 0xd8, 0x68, 0x93, 0xf2, 0x97, 0xa9, 0xc9, 0xe7, 0x39, 0xa9, 0x41, 0xee, 0xd6, 0x45, 0x9d, 0xe2, 0x46, 0x97, 0xa2, 0x4e, 0x35, 0x4f, 0x7a, 0xb7,
0x96, 0xaf, 0x82, 0x72, 0x35, 0xe7, 0x22, 0xf9, 0x84, 0x6b, 0x13, 0xe9, 0x0f, 0xba, 0x29, 0x8d, 0x4a, 0x6b, 0x52, 0xcd, 0x93, 0x9a, 0xd4, 0x0c, 0xf4, 0x03, 0x04, 0xb9, 0xc1, 0x06, 0x3d, 0xc9,
0x9b, 0xbc, 0x6f, 0x80, 0xfe, 0x52, 0x93, 0xce, 0x2f, 0x19, 0x02, 0x6c, 0x6a, 0xee, 0x01, 0xb9, 0xab, 0xd9, 0x57, 0xd0, 0x4f, 0x3c, 0x84, 0x1e, 0xa8, 0x27, 0xd8, 0xd7, 0x6e, 0x1f, 0xc8, 0x7d,
0xa9, 0x91, 0x4f, 0xf9, 0x4b, 0xd4, 0x94, 0xe9, 0x89, 0x7f, 0xea, 0xa3, 0x0a, 0x54, 0x81, 0xd2, 0x4d, 0xfa, 0x42, 0xaf, 0x92, 0xa7, 0xca, 0x4e, 0xfc, 0xd2, 0x1e, 0xdd, 0x41, 0x77, 0x50, 0x92,
0x82, 0x45, 0x9d, 0x2f, 0x15, 0x3f, 0x8a, 0x54, 0xbc, 0xa8, 0xdb, 0x21, 0x7e, 0x35, 0xe6, 0xdc, 0x00, 0xdb, 0xba, 0x7d, 0x6c, 0x7c, 0x5e, 0xb6, 0x25, 0x6c, 0xeb, 0x6e, 0x48, 0x39, 0x4f, 0xce,
0x0a, 0x2d, 0xd7, 0xa5, 0xd0, 0x31, 0xeb, 0xbc, 0x6a, 0xe0, 0x5a, 0x17, 0xc8, 0x6f, 0x28, 0x7d, 0xa4, 0xfd, 0xe2, 0xe7, 0x92, 0xf6, 0xdd, 0xa0, 0x72, 0x1e, 0xfe, 0xea, 0x01, 0xf9, 0x01, 0xbd,
0x35, 0x0d, 0xec, 0xf1, 0xfb, 0x82, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x5c, 0x34, 0x23, 0x26, 0x7e, 0x75, 0xbb, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae,
0x60, 0x82, 0x42, 0x60, 0x82,
}; };
const BITMAP_OPAQUE array_text_xpm[1] = {{ png, sizeof( png ), "array_text_xpm" }}; const BITMAP_OPAQUE array_text_xpm[1] = {{ png, sizeof( png ), "array_text_xpm" }};
......
/* Do not modify this file, it was automatically generated by the
* PNG2cpp CMake script, using a *.png file as input.
*/
#include <bitmaps.h>
static const unsigned char png[] = {
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c,
0xce, 0x00, 0x00, 0x04, 0x5f, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xbd, 0x56, 0x6d, 0x4c, 0x9b,
0x55, 0x14, 0xbe, 0xa5, 0xac, 0xb6, 0xb0, 0xda, 0x52, 0x3e, 0x0a, 0x5d, 0x81, 0x36, 0xa5, 0x40,
0x5d, 0x58, 0x09, 0xd8, 0xc9, 0x36, 0x42, 0x04, 0x01, 0xb7, 0xb4, 0x1d, 0x1f, 0x1d, 0x58, 0xa1,
0x50, 0x0a, 0x14, 0x68, 0x29, 0x13, 0xff, 0x40, 0xdc, 0xd4, 0x60, 0xe2, 0x0c, 0xfb, 0xc8, 0x66,
0x42, 0xa2, 0xce, 0x25, 0x9b, 0x66, 0xe8, 0xb2, 0xf9, 0xf1, 0x43, 0xff, 0xb8, 0x98, 0xf8, 0x4b,
0x13, 0xb3, 0x90, 0xfd, 0x72, 0x66, 0x59, 0xf4, 0x07, 0x46, 0xd4, 0x39, 0x32, 0x96, 0x30, 0x29,
0xeb, 0x94, 0xeb, 0x73, 0x9a, 0xf7, 0xad, 0x5d, 0x6d, 0x37, 0x9c, 0x64, 0x4d, 0x9e, 0xbc, 0xf7,
0x9e, 0x7b, 0xee, 0x7d, 0xce, 0x39, 0xf7, 0x9c, 0x73, 0xcb, 0x38, 0xe7, 0xec, 0x51, 0xe0, 0xbf,
0x29, 0x33, 0x26, 0x05, 0xd2, 0xe9, 0x2b, 0xcc, 0x25, 0xc0, 0x63, 0xc0, 0x26, 0x61, 0x4d, 0xf2,
0xbf, 0x88, 0xf0, 0x4b, 0x03, 0x32, 0x81, 0xea, 0xfc, 0xfc, 0xfc, 0x0e, 0x7c, 0x6d, 0x44, 0xe8,
0xf1, 0x78, 0x76, 0xaa, 0xd5, 0x6a, 0x2f, 0xc6, 0x4e, 0xa0, 0x06, 0xc8, 0x22, 0xdd, 0x87, 0x22,
0x22, 0x2b, 0x6b, 0x6b, 0x6b, 0xab, 0x7b, 0x7b, 0x7b, 0xbf, 0x0e, 0x06, 0x83, 0x2b, 0xfd, 0xfd,
0xfd, 0x3f, 0x42, 0xb6, 0xdb, 0x60, 0x30, 0xc8, 0x43, 0xa1, 0xd0, 0x0a, 0xb0, 0x36, 0x38, 0x38,
0xb8, 0x50, 0x5f, 0x5f, 0x7f, 0x12, 0x72, 0x32, 0x22, 0x27, 0x99, 0x67, 0x0f, 0x24, 0x0a, 0x04,
0x02, 0xf6, 0xd1, 0xd1, 0xd1, 0x65, 0x1c, 0xc8, 0x09, 0x18, 0x87, 0x15, 0x0a, 0x85, 0x7e, 0x64,
0x64, 0xc4, 0x80, 0x79, 0x4c, 0x4e, 0x68, 0x6a, 0x6a, 0x3a, 0x24, 0x84, 0x52, 0x92, 0xe8, 0xd9,
0x7d, 0x3d, 0x01, 0xe4, 0x03, 0x03, 0x03, 0x65, 0x64, 0x39, 0x08, 0xe7, 0xbd, 0x5e, 0x6f, 0x77,
0x57, 0x57, 0x57, 0xcc, 0xe2, 0xa9, 0xa9, 0xa9, 0x34, 0xac, 0x55, 0x80, 0xfc, 0x5d, 0xe0, 0x92,
0x4a, 0xa5, 0xca, 0x12, 0xee, 0x30, 0x0f, 0x30, 0x8b, 0x77, 0x79, 0x5f, 0xa2, 0x8e, 0x8e, 0x8e,
0x6a, 0x99, 0x4c, 0xd6, 0x4a, 0xf7, 0xe2, 0xf7, 0xfb, 0x1b, 0x9c, 0x4e, 0x67, 0x86, 0x68, 0xa9,
0x00, 0x49, 0x5c, 0x72, 0xa4, 0x81, 0x54, 0x46, 0x5f, 0x18, 0xd2, 0xd7, 0xd3, 0xd3, 0x73, 0x49,
0x2a, 0x95, 0x76, 0x63, 0x5e, 0x20, 0x1a, 0x25, 0x5a, 0xbe, 0x29, 0x1e, 0x76, 0xbb, 0x7d, 0x0b,
0xee, 0x63, 0x11, 0xde, 0xcc, 0x1b, 0x8d, 0xc6, 0x10, 0x64, 0x6a, 0x61, 0x4d, 0x01, 0x58, 0x80,
0x27, 0x91, 0x1b, 0x15, 0xe9, 0xe9, 0xd9, 0x8d, 0x18, 0xef, 0x05, 0xca, 0xe9, 0x9c, 0xf1, 0xf1,
0x71, 0x0a, 0x67, 0x84, 0xc2, 0x88, 0x33, 0x2e, 0x40, 0xf6, 0x2c, 0x19, 0x22, 0x12, 0x91, 0xbb,
0x0e, 0x61, 0x43, 0x14, 0x6d, 0x6d, 0x6d, 0xe7, 0x48, 0x19, 0x9e, 0x2c, 0x23, 0x1c, 0x93, 0x90,
0x91, 0x67, 0x2d, 0x99, 0x05, 0xc3, 0x67, 0x37, 0x17, 0x8c, 0x5e, 0xc1, 0xf8, 0xbc, 0x5c, 0xd5,
0xf0, 0xad, 0xda, 0x34, 0x73, 0x27, 0x53, 0xeb, 0xfd, 0x1e, 0x8e, 0xbc, 0x0a, 0x99, 0x8c, 0x0e,
0xc4, 0xbe, 0x83, 0xb4, 0x17, 0x86, 0x86, 0xe1, 0x55, 0x17, 0x85, 0x3f, 0x4a, 0xb4, 0xc2, 0xd8,
0xa7, 0xb7, 0x18, 0x5b, 0x58, 0x62, 0xec, 0x57, 0x11, 0x6f, 0x3a, 0x9d, 0xab, 0xa4, 0xfc, 0xe1,
0x8e, 0x1d, 0xe1, 0x45, 0xc6, 0xae, 0xdf, 0x84, 0xec, 0x9a, 0x54, 0x75, 0x3d, 0xaf, 0xe4, 0xed,
0xb5, 0xdc, 0x92, 0x77, 0xf8, 0x65, 0xa9, 0x32, 0xfc, 0xb2, 0xc6, 0x1e, 0xa1, 0x71, 0x5d, 0x56,
0xe3, 0x02, 0x22, 0x38, 0x43, 0xde, 0xd2, 0x81, 0x13, 0x13, 0x13, 0x4a, 0xec, 0xfd, 0x8b, 0xf6,
0x57, 0x55, 0x55, 0xf5, 0x09, 0x65, 0x21, 0x61, 0x11, 0xc6, 0xe6, 0xa2, 0x57, 0x15, 0x87, 0x03,
0x3e, 0x5f, 0x34, 0x8b, 0xbe, 0x2b, 0x2e, 0xbe, 0x47, 0xfe, 0xbb, 0xf4, 0x71, 0x3e, 0x27, 0x37,
0xc6, 0xe6, 0x37, 0xa4, 0x4a, 0xfe, 0x22, 0x63, 0x57, 0x25, 0xd2, 0x8c, 0x8f, 0x28, 0x9c, 0xe2,
0xfd, 0x22, 0x31, 0xde, 0x42, 0xd8, 0xa7, 0x91, 0xf2, 0x5b, 0x63, 0xa1, 0x4b, 0x46, 0x74, 0x5b,
0x2e, 0xe7, 0x57, 0x8a, 0x8a, 0x78, 0x58, 0x26, 0x8b, 0xc9, 0x56, 0x25, 0xe9, 0xfc, 0x63, 0xe5,
0x76, 0x1e, 0x91, 0x48, 0xef, 0xd1, 0xad, 0xd6, 0x8f, 0x2d, 0x2b, 0xf5, 0x93, 0x3f, 0xe3, 0xc0,
0x3d, 0x71, 0x25, 0xd1, 0xda, 0xdc, 0xdc, 0x7c, 0x44, 0xa7, 0xd3, 0x8d, 0x42, 0x6e, 0x8a, 0x26,
0x4f, 0x32, 0xa2, 0x64, 0x08, 0x6a, 0x7d, 0x3c, 0xcb, 0x7c, 0x8a, 0x5f, 0x50, 0x3e, 0x15, 0x93,
0x5d, 0x96, 0x1b, 0xa2, 0x32, 0x95, 0x61, 0x1a, 0x11, 0x66, 0xa5, 0x22, 0x11, 0xee, 0xe7, 0x1b,
0x8a, 0x88, 0xc3, 0xe1, 0x38, 0x0f, 0x79, 0x6e, 0x34, 0x74, 0x77, 0x19, 0xfb, 0xec, 0x0e, 0xee,
0x08, 0xf8, 0x45, 0xc4, 0x97, 0x56, 0xeb, 0xad, 0xa3, 0x2e, 0x57, 0xe4, 0x8b, 0x6d, 0xdb, 0xfe,
0x58, 0x66, 0xec, 0xc6, 0x2a, 0x64, 0x5f, 0x65, 0x94, 0x2d, 0xba, 0x75, 0xa1, 0xd5, 0x8b, 0xea,
0x4a, 0x3e, 0xa7, 0x2c, 0xe1, 0x9f, 0x64, 0xd5, 0xf0, 0xf9, 0x4c, 0x2d, 0x77, 0xe8, 0xf6, 0x5d,
0x53, 0xe4, 0xb4, 0x9f, 0x10, 0x6b, 0x06, 0x65, 0x21, 0x13, 0x3a, 0x06, 0xb7, 0xd9, 0x6c, 0xaf,
0x51, 0x01, 0xa7, 0xac, 0x23, 0xc4, 0x78, 0x86, 0x14, 0x7d, 0x3e, 0xdf, 0x55, 0x28, 0x52, 0xe6,
0x68, 0xc9, 0xaa, 0xa2, 0xba, 0x29, 0x7d, 0x59, 0xeb, 0x07, 0x3c, 0xbf, 0xea, 0x34, 0xd7, 0x94,
0x9e, 0xe2, 0x66, 0xc7, 0x2c, 0xd7, 0x98, 0x1d, 0xc7, 0xb1, 0x66, 0x17, 0xf7, 0xa2, 0x63, 0x38,
0x84, 0x4e, 0xb1, 0xa6, 0xd1, 0x68, 0xfe, 0x49, 0xef, 0x64, 0x44, 0x63, 0x63, 0x63, 0xdb, 0xa1,
0xf8, 0x27, 0x6d, 0x40, 0xac, 0xdf, 0x83, 0xf2, 0xd3, 0xb4, 0xa1, 0x70, 0xd7, 0x81, 0x28, 0xd1,
0x96, 0x9a, 0x33, 0x5c, 0x67, 0x3b, 0xc3, 0xcd, 0xf6, 0x59, 0x9e, 0x5d, 0xda, 0x72, 0x98, 0x88,
0x84, 0x7a, 0x4c, 0x47, 0x12, 0x3c, 0x03, 0x43, 0x7f, 0x1a, 0x1a, 0x1a, 0xfa, 0x1c, 0xf3, 0xcd,
0xb1, 0x82, 0x4d, 0xd5, 0x19, 0xa0, 0x7c, 0x88, 0x88, 0x86, 0x87, 0x87, 0x7f, 0x10, 0x5a, 0x4b,
0x5a, 0x8e, 0x65, 0x9f, 0x85, 0x88, 0xe2, 0x21, 0x10, 0xb5, 0x98, 0x4c, 0xa6, 0xc2, 0xca, 0xca,
0xca, 0x41, 0x8c, 0xeb, 0xda, 0xdb, 0xdb, 0xb3, 0xd1, 0x68, 0x35, 0xf1, 0xcd, 0x35, 0x25, 0x11,
0xb5, 0x14, 0x78, 0xf6, 0x4a, 0x67, 0x67, 0xa7, 0x8a, 0x48, 0xdc, 0x6e, 0xf7, 0x73, 0x6a, 0xad,
0xf9, 0x85, 0x44, 0x22, 0x4d, 0xe9, 0xde, 0xe3, 0x56, 0xab, 0xf5, 0x24, 0x3c, 0xf8, 0x0d, 0x61,
0x5b, 0xc2, 0xb3, 0x41, 0xb5, 0x93, 0x9d, 0xd8, 0xc1, 0xd7, 0xf5, 0x1e, 0xe1, 0x10, 0x2b, 0xbc,
0xbb, 0x1b, 0x08, 0x04, 0x57, 0x9e, 0x1f, 0x3c, 0xc8, 0xed, 0xde, 0x69, 0xbe, 0xb5, 0xed, 0x7d,
0x6e, 0x69, 0x9b, 0xe5, 0x03, 0xfe, 0xc0, 0xa2, 0xd8, 0xbd, 0x91, 0x6d, 0xb7, 0x5d, 0x2e, 0x57,
0x6b, 0xb2, 0x37, 0x69, 0x5d, 0x44, 0x08, 0x23, 0x5d, 0xf0, 0xcd, 0xd8, 0x53, 0x11, 0x1a, 0xe3,
0x96, 0xd6, 0xb3, 0x51, 0x8f, 0xfc, 0x43, 0xc1, 0x25, 0xa1, 0x5d, 0x5d, 0x44, 0x43, 0x2d, 0x4e,
0xf5, 0xca, 0xae, 0xfb, 0x19, 0x47, 0xc3, 0x54, 0x77, 0xfb, 0xf6, 0x7b, 0xf6, 0xf4, 0x1e, 0xe6,
0x2d, 0x7d, 0xaf, 0xc7, 0x42, 0x67, 0x6b, 0xf0, 0x9c, 0xab, 0xa8, 0xa8, 0x08, 0xa5, 0x7a, 0x59,
0x1f, 0xea, 0x3f, 0x43, 0xe1, 0xae, 0x97, 0x0a, 0xfe, 0x95, 0x0c, 0xe5, 0xed, 0x47, 0xe2, 0xd3,
0x7b, 0x43, 0x88, 0xf4, 0x3b, 0x27, 0xf3, 0x13, 0x89, 0x72, 0xca, 0x5d, 0x47, 0x1f, 0x15, 0xd1,
0x31, 0xfa, 0x73, 0xb2, 0xa1, 0x44, 0x28, 0xd8, 0xbc, 0x44, 0xa2, 0xdc, 0x27, 0xdc, 0x6f, 0x80,
0xa8, 0x79, 0x43, 0x89, 0x8c, 0x8d, 0xc7, 0xb2, 0x13, 0x89, 0x74, 0xb6, 0xfd, 0x41, 0x10, 0x95,
0x3c, 0x68, 0xef, 0xdf, 0xad, 0xa1, 0x40, 0x75, 0x04, 0xe6, 0x71, 0xd8, 0x00, 0x00, 0x00, 0x00,
0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
};
const BITMAP_OPAQUE via_buried_xpm[1] = {{ png, sizeof( png ), "via_buried_xpm" }};
//EOF
/* Do not modify this file, it was automatically generated by the
* PNG2cpp CMake script, using a *.png file as input.
*/
#include <bitmaps.h>
static const unsigned char png[] = {
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c,
0xce, 0x00, 0x00, 0x03, 0x61, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0x63, 0xf8, 0xff, 0xff, 0x3f,
0x03, 0x3d, 0x30, 0xc3, 0xc8, 0xb6, 0x08, 0x08, 0x18, 0x81, 0x98, 0x19, 0x88, 0x59, 0x81, 0x98,
0x0d, 0x88, 0xb9, 0x81, 0x98, 0x1d, 0xca, 0x67, 0x01, 0x62, 0x26, 0x8a, 0x2d, 0x82, 0x1a, 0x24,
0x00, 0xc4, 0xfa, 0x40, 0x6c, 0x07, 0xc4, 0xbe, 0x5a, 0x5c, 0x5c, 0xe9, 0x6c, 0xcc, 0xcc, 0x21,
0x40, 0xb6, 0x33, 0x10, 0x1b, 0x03, 0xb1, 0x14, 0xc8, 0x52, 0xb2, 0x2d, 0x82, 0xba, 0x5e, 0x8d,
0x87, 0x99, 0x39, 0xb4, 0x5c, 0x41, 0x61, 0xde, 0x54, 0x0d, 0x8d, 0x63, 0x0b, 0xb4, 0xb5, 0xdf,
0x2f, 0xd2, 0xd6, 0xfe, 0xbf, 0x50, 0x5b, 0xfb, 0xdb, 0x4c, 0x4d, 0xcd, 0x73, 0x4d, 0xca, 0xca,
0x2b, 0xe4, 0x39, 0x38, 0x92, 0x80, 0xea, 0x4c, 0xa0, 0x3e, 0x65, 0x24, 0xc9, 0x22, 0x20, 0xe0,
0x04, 0x62, 0x7b, 0x67, 0x21, 0xa1, 0xe2, 0xd9, 0x9a, 0x9a, 0xb7, 0x41, 0x86, 0xe3, 0xc2, 0x0b,
0xb4, 0xb4, 0x5e, 0xc5, 0x4a, 0x48, 0x34, 0x02, 0xd5, 0x7b, 0x01, 0xb1, 0x28, 0xb2, 0x65, 0xc4,
0x04, 0x97, 0x51, 0x9a, 0xb4, 0x74, 0x0f, 0xd0, 0xe5, 0xbf, 0x90, 0x0d, 0x9d, 0xa3, 0xab, 0xf3,
0xbf, 0xcd, 0x4c, 0xef, 0xfb, 0x34, 0x03, 0x1d, 0x0c, 0x0b, 0x9b, 0x94, 0x94, 0x16, 0x03, 0xf5,
0xb9, 0x82, 0x1c, 0x49, 0xd0, 0x22, 0x68, 0xc4, 0x4b, 0x19, 0xf0, 0xf0, 0x64, 0x02, 0x2d, 0xf9,
0x82, 0x64, 0xd0, 0x37, 0x20, 0x2e, 0x73, 0x0f, 0x30, 0x69, 0x30, 0x89, 0x30, 0xfb, 0x0f, 0xc2,
0x16, 0xe1, 0xa6, 0xef, 0x3a, 0xcd, 0x74, 0x5f, 0x23, 0xa9, 0xf9, 0x17, 0x2e, 0x26, 0x56, 0x0f,
0x8d, 0x4f, 0x16, 0xa8, 0x79, 0x60, 0x57, 0xb3, 0x63, 0xc1, 0x3c, 0xc0, 0xe4, 0xe5, 0x3b, 0x4d,
0x43, 0xe3, 0x12, 0x92, 0x01, 0x0f, 0xe6, 0xeb, 0xea, 0x6a, 0x80, 0x34, 0x9a, 0x85, 0x9b, 0xe9,
0xc3, 0x2c, 0x02, 0xe2, 0x3b, 0x45, 0x56, 0x86, 0x72, 0x40, 0xf9, 0x7d, 0x30, 0xb5, 0xf3, 0xb5,
0xb4, 0x5e, 0x48, 0x73, 0x70, 0xc4, 0x43, 0x13, 0x10, 0x23, 0xc3, 0x44, 0x06, 0x86, 0xf8, 0x36,
0x06, 0x86, 0x2a, 0x74, 0x0c, 0x74, 0x4e, 0x43, 0x39, 0x1f, 0xdf, 0x1e, 0x98, 0xc6, 0x69, 0x06,
0xba, 0x7f, 0xdd, 0x03, 0x4d, 0x57, 0x1a, 0xfb, 0x1a, 0x73, 0x81, 0x5d, 0xd8, 0xc0, 0xc0, 0x64,
0x1a, 0x61, 0x76, 0xdc, 0x24, 0xdc, 0xec, 0xbd, 0x69, 0x84, 0xa9, 0x15, 0x48, 0x6c, 0x99, 0x8e,
0x8e, 0x38, 0x50, 0x2d, 0xdc, 0x67, 0x65, 0xf2, 0xf2, 0xa0, 0x20, 0x54, 0x06, 0x25, 0x7b, 0x86,
0xaf, 0x0c, 0x0c, 0x0f, 0xc1, 0x21, 0x88, 0x05, 0x5f, 0x11, 0x11, 0x81, 0x87, 0x7b, 0x88, 0xab,
0xc1, 0x63, 0xb0, 0xeb, 0x23, 0xcd, 0x6e, 0x98, 0x44, 0x98, 0x18, 0xc2, 0x82, 0xd8, 0xc1, 0xc1,
0x81, 0x05, 0x39, 0xc8, 0xa7, 0x1a, 0xe9, 0x96, 0xc1, 0xf4, 0x4c, 0x50, 0x53, 0x3b, 0x0c, 0x4d,
0xf6, 0x2c, 0x78, 0x2d, 0x3a, 0x20, 0x2b, 0x0b, 0xb7, 0xc8, 0x36, 0xc0, 0xf8, 0x39, 0x2c, 0xa8,
0x4c, 0xc3, 0x4d, 0x83, 0xd0, 0xe3, 0xd4, 0x24, 0xc2, 0x74, 0x8a, 0x71, 0xa4, 0xd9, 0x55, 0xa0,
0x2f, 0xff, 0xce, 0xd6, 0x83, 0xe8, 0x99, 0xa7, 0xa9, 0xf9, 0x0a, 0x9a, 0xc7, 0x58, 0xf1, 0x5a,
0xb4, 0x55, 0x49, 0x09, 0x6e, 0x91, 0x59, 0xa8, 0xc9, 0x47, 0xa0, 0x25, 0x8f, 0x4c, 0x22, 0xcc,
0xd7, 0x9a, 0xc5, 0x99, 0x09, 0x63, 0x5a, 0x04, 0x92, 0x33, 0xfb, 0x65, 0x1e, 0x66, 0xbe, 0x12,
0x94, 0x22, 0xc1, 0x79, 0x4c, 0x4b, 0xeb, 0x2f, 0x37, 0x0b, 0x8b, 0x2b, 0x41, 0x8b, 0x8e, 0x4b,
0x49, 0xc1, 0x2d, 0x2a, 0x57, 0x57, 0x59, 0x82, 0x2b, 0x85, 0x9a, 0x44, 0x58, 0x38, 0xc0, 0x7d,
0x1b, 0x61, 0xf6, 0x63, 0x21, 0x54, 0xcf, 0x4c, 0x0d, 0x8d, 0x7b, 0xa0, 0xec, 0x01, 0x0e, 0xba,
0x2f, 0x0c, 0x0c, 0x67, 0x7e, 0x32, 0x30, 0xbc, 0x43, 0xc7, 0x3f, 0x18, 0x18, 0xde, 0x5f, 0x16,
0x14, 0xfc, 0x01, 0xb3, 0x68, 0x96, 0xa6, 0xe6, 0xd5, 0x55, 0xa1, 0xa1, 0xcc, 0x20, 0x83, 0x8d,
0x22, 0xcc, 0x6c, 0x8d, 0x23, 0x4d, 0x27, 0x18, 0x85, 0x9b, 0x5b, 0x80, 0xf9, 0x91, 0x66, 0x4e,
0xc0, 0xa0, 0x7b, 0x0a, 0xb2, 0xc8, 0xc7, 0xcf, 0xe4, 0x1e, 0x4c, 0x4f, 0xab, 0xb2, 0xf2, 0x6e,
0xa0, 0x25, 0x4a, 0xe0, 0xc4, 0x80, 0x27, 0x1f, 0xb1, 0xda, 0x09, 0x08, 0xc4, 0x83, 0xbc, 0x0f,
0x4f, 0xde, 0x5a, 0x5a, 0x95, 0xd6, 0x7e, 0xd6, 0xbc, 0xc6, 0x11, 0x66, 0xf7, 0x61, 0x09, 0x03,
0xa6, 0x5e, 0x37, 0xca, 0x46, 0xd0, 0x25, 0xc8, 0x64, 0xf3, 0x74, 0x03, 0x9d, 0x7f, 0x30, 0xf5,
0xc9, 0xd2, 0xd2, 0xbd, 0x40, 0x73, 0xf8, 0xc1, 0xc9, 0x9b, 0x40, 0x86, 0x15, 0xaf, 0x55, 0x52,
0x5a, 0x87, 0x94, 0x8f, 0x7e, 0xc5, 0xb8, 0x1b, 0x6d, 0x46, 0xca, 0x3f, 0x5f, 0x42, 0xa1, 0xbe,
0x5c, 0xa8, 0xa3, 0x13, 0x08, 0x94, 0x7f, 0x03, 0x53, 0xdb, 0xaf, 0xae, 0x7e, 0x16, 0xa8, 0x5f,
0x07, 0x9e, 0x61, 0x09, 0x15, 0x41, 0xc2, 0xac, 0xac, 0xa6, 0xd3, 0x81, 0x61, 0x0d, 0x33, 0x00,
0x14, 0xfe, 0xa5, 0xb6, 0xfa, 0x77, 0x7d, 0xfd, 0x8c, 0x2f, 0x58, 0x87, 0x9a, 0x3e, 0x68, 0x37,
0xd3, 0x6b, 0x06, 0x8a, 0x6f, 0x41, 0x2e, 0x82, 0x80, 0x99, 0xf5, 0x23, 0xb0, 0x44, 0x09, 0x05,
0xea, 0xe7, 0x20, 0xa9, 0x50, 0x75, 0x12, 0x12, 0x0a, 0x9d, 0xa6, 0xae, 0x7e, 0x17, 0x5f, 0x81,
0x0a, 0x2f, 0x03, 0x35, 0x35, 0x5f, 0x87, 0x8a, 0x89, 0x15, 0x01, 0xf5, 0x09, 0x13, 0x5d, 0xa8,
0x22, 0x57, 0x13, 0x22, 0xec, 0xec, 0xaa, 0xc0, 0x60, 0x5c, 0x0e, 0x8c, 0xb3, 0x3f, 0xb8, 0x2c,
0xe9, 0x50, 0x51, 0x39, 0xa8, 0xc5, 0xcb, 0x6b, 0x03, 0x54, 0xcf, 0x45, 0x72, 0x35, 0x81, 0x64,
0x19, 0x13, 0x10, 0xf3, 0xfa, 0x88, 0x89, 0xb9, 0x95, 0xc8, 0xcb, 0xb7, 0xb4, 0x2b, 0x2b, 0x6f,
0x99, 0xac, 0xae, 0x7e, 0xa3, 0x4b, 0x45, 0x65, 0x6f, 0x85, 0x82, 0x42, 0x5f, 0x84, 0xb8, 0x78,
0x38, 0x50, 0x5e, 0x0c, 0x16, 0x27, 0xd4, 0xae, 0xca, 0x39, 0xa1, 0x34, 0xac, 0x2a, 0x67, 0x1c,
0x6d, 0x05, 0x51, 0x1d, 0x03, 0x00, 0x45, 0x34, 0x8d, 0xac, 0x3d, 0x67, 0x8a, 0xf1, 0x00, 0x00,
0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
};
const BITMAP_OPAQUE via_microvia_xpm[1] = {{ png, sizeof( png ), "via_microvia_xpm" }};
//EOF
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
height="48"
width="48"
version="1.1"
id="svg2"
inkscape:version="0.48.4 r9939"
sodipodi:docname="via_buried.svg">
<metadata
id="metadata16">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs14">
<filter
inkscape:collect="always"
id="filter3808">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="0.79203718"
id="feGaussianBlur3810" />
</filter>
</defs>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1033"
id="namedview12"
showgrid="false"
inkscape:snap-grids="false"
inkscape:snap-to-guides="false"
inkscape:zoom="10.873341"
inkscape:cx="-19.296475"
inkscape:cy="18.719379"
inkscape:window-x="-4"
inkscape:window-y="-4"
inkscape:window-maximized="1"
inkscape:current-layer="svg2" />
<g
id="g3764"
transform="translate(59.04349,6.8976039)">
<rect
style="opacity:0.38671875;fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-opacity:1;filter:url(#filter3808)"
id="rect4-4"
x="-57.013744"
y="8.5595407"
width="29.813433"
height="8.7306871"
ry="2.3031542"
rx="0" />
<rect
style="opacity:0.38671875;fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-opacity:1;filter:url(#filter3808)"
id="rect6-8"
x="11.503523"
y="-123.2624"
width="30.819489"
height="8.5042381"
ry="2.243417"
rx="0"
transform="matrix(0,1,-1,0,-150.16292,-2.7838396)" />
<path
style="opacity:0.38671875;fill:none;stroke:#000000;stroke-width:4;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:8, 4;stroke-dashoffset:0;filter:url(#filter3808)"
inkscape:connector-curvature="0"
id="path8-1"
d="m -15.8481,13.195204 a 15.30449,14.862257 0 0 1 -30.60898,0 15.30449,14.862257 0 1 1 30.60898,0 z" />
<path
style="opacity:0.38671875;fill:#000000;stroke:#000000;stroke-width:3.44060159;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:3.44060159, 3.44060159;stroke-dashoffset:0;filter:url(#filter3808)"
inkscape:connector-curvature="0"
id="path10-0"
d="m -25.72992,13.088622 a 5.7326026,5.8850078 0 0 1 -11.4652,0 5.7326026,5.8850078 0 1 1 11.4652,0 z" />
</g>
<path
style="fill:none;stroke:#2750a5;stroke-width:8;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
d="m 25.989245,20.890398 0.07543,27.180597"
id="path3766"
inkscape:connector-curvature="0" />
<rect
rx="0"
ry="2.3031542"
height="8.7306871"
width="29.813433"
y="16.90716"
x="0.41774505"
id="rect4"
style="fill:#ff0000;fill-rule:evenodd" />
<path
d="m 41.583387,21.542825 a 15.304489,14.862256 0 1 1 -30.608977,0 15.304489,14.862256 0 1 1 30.608977,0 z"
id="path8"
inkscape:connector-curvature="0"
style="fill:none;stroke:#6c6c6c;stroke-width:4;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:8,4;stroke-dashoffset:0" />
<path
d="m 31.701569,21.436243 a 5.7326025,5.8850077 0 1 1 -11.465205,0 5.7326025,5.8850077 0 1 1 11.465205,0 z"
id="path10"
inkscape:connector-curvature="0"
style="fill:none;stroke:#11259b;stroke-width:3.44060159;stroke-miterlimit:4;stroke-dasharray:3.44060159,3.44060159;stroke-dashoffset:0;stroke-opacity:1" />
</svg>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
height="26"
width="26"
version="1.1"
id="svg2"
inkscape:version="0.48.4 r9939"
sodipodi:docname="via_microvia.svg">
<metadata
id="metadata16">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs14">
<filter
inkscape:collect="always"
id="filter3808"
color-interpolation-filters="sRGB">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="0.79203718"
id="feGaussianBlur3810" />
</filter>
</defs>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1033"
id="namedview12"
showgrid="false"
inkscape:snap-grids="false"
inkscape:snap-to-guides="false"
inkscape:zoom="18.083052"
inkscape:cx="2.8651129"
inkscape:cy="14.092202"
inkscape:window-x="-4"
inkscape:window-y="-4"
inkscape:window-maximized="1"
inkscape:current-layer="svg2" />
<rect
rx="0"
ry="2.3031542"
height="8.7306871"
width="29.813433"
y="11.34338"
x="93.149178"
id="rect4-4"
style="opacity:0.38671875;fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-opacity:1;filter:url(#filter3808)"
transform="matrix(0.32916033,0,0,0.5784203,-29.973503,3.7304857)" />
<path
d="m 134.31482,15.979044 a 15.30449,14.862257 0 1 1 -30.60898,0 15.30449,14.862257 0 1 1 30.60898,0 z"
id="path8-1"
inkscape:connector-curvature="0"
style="opacity:0.38671875;fill:none;stroke:#000000;stroke-width:2.2720027;stroke-opacity:1;filter:url(#filter3808)"
transform="matrix(0.55897873,0,0,0.56826567,-50.880408,3.890002)" />
<rect
rx="0"
ry="1.3569629"
height="5.1439104"
width="9.5338955"
y="10.763303"
x="0.15463093"
id="rect4"
style="fill:#ff0000;fill-rule:evenodd" />
<path
d="m 22.535868,13.331969 a 6.9305552,6.9592077 0 0 1 -13.8611104,0 6.9305552,6.9592077 0 1 1 13.8611104,0 z"
id="path8"
inkscape:connector-curvature="0"
style="fill:none;stroke:#a22b2b;stroke-width:3.00612569;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
d="m 19.704199,13.293377 a 4.0641003,4.0542914 0 0 1 -8.128199,0 4.0641003,4.0542914 0 1 1 8.128199,0 z"
id="path10"
inkscape:connector-curvature="0"
style="fill:none;stroke:#345836;stroke-width:3;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:3,3;stroke-dashoffset:0" />
</svg>
...@@ -56,9 +56,14 @@ set( GAL_SRCS ...@@ -56,9 +56,14 @@ set( GAL_SRCS
add_library( gal STATIC ${GAL_SRCS} ) add_library( gal STATIC ${GAL_SRCS} )
add_dependencies( gal shader_headers ) add_dependencies( gal shader_headers )
add_dependencies( gal lib-dependencies ) add_dependencies( gal lib-dependencies )
add_dependencies( shader_headers lib-dependencies )
target_link_libraries( gal
${GLEW_LIBRARIES}
${CAIRO_LIBRARIES}
${PIXMAN_LIBRARY}
${OPENGL_LIBRARIES}
)
# Only for win32 cross compilation using MXE # Only for win32 cross compilation using MXE
...@@ -247,7 +252,7 @@ set( COMMON_SRCS ...@@ -247,7 +252,7 @@ set( COMMON_SRCS
) )
add_library( common STATIC ${COMMON_SRCS} ) add_library( common STATIC ${COMMON_SRCS} )
add_dependencies( common lib-dependencies ) add_dependencies( common lib-dependencies )
target_link_libraries( common ${Boost_LIBRARIES} )
set( PCB_COMMON_SRCS set( PCB_COMMON_SRCS
base_screen.cpp base_screen.cpp
......
...@@ -632,13 +632,6 @@ void EDA_BASE_FRAME::CopyVersionInfoToClipboard( wxCommandEvent& event ) ...@@ -632,13 +632,6 @@ void EDA_BASE_FRAME::CopyVersionInfoToClipboard( wxCommandEvent& event )
tmp << wxT( "OFF\n" ); tmp << wxT( "OFF\n" );
#endif #endif
tmp << wxT( " KICAD_USE_WEBKIT=" );
#ifdef KICAD_USE_WEBKIT
tmp << wxT( "ON\n" );
#else
tmp << wxT( "OFF\n" );
#endif
wxMessageBox( tmp, _("Version Information (copied to the clipboard)") ); wxMessageBox( tmp, _("Version Information (copied to the clipboard)") );
wxTheClipboard->SetData( new wxTextDataObject( tmp ) ); wxTheClipboard->SetData( new wxTextDataObject( tmp ) );
...@@ -699,7 +692,7 @@ void EDA_BASE_FRAME::CheckForAutoSaveFile( const wxFileName& aFileName, ...@@ -699,7 +692,7 @@ void EDA_BASE_FRAME::CheckForAutoSaveFile( const wxFileName& aFileName,
wxFileName autoSaveFileName = aFileName; wxFileName autoSaveFileName = aFileName;
// Check for auto save file. // Check for auto save file.
autoSaveFileName.SetName( wxT( "$" ) + aFileName.GetName() ); autoSaveFileName.SetName( AUTOSAVE_PREFIX_FILENAME + aFileName.GetName() );
wxLogTrace( traceAutoSave, wxLogTrace( traceAutoSave,
wxT( "Checking for auto save file " ) + autoSaveFileName.GetFullPath() ); wxT( "Checking for auto save file " ) + autoSaveFileName.GetFullPath() );
...@@ -708,9 +701,10 @@ void EDA_BASE_FRAME::CheckForAutoSaveFile( const wxFileName& aFileName, ...@@ -708,9 +701,10 @@ void EDA_BASE_FRAME::CheckForAutoSaveFile( const wxFileName& aFileName,
return; return;
wxString msg = wxString::Format( _( wxString msg = wxString::Format( _(
"Well this is potentially embarrassing! It appears that the last time " "Well this is potentially embarrassing!\n"
"you were editing the file '%s' it was not saved properly. Do you wish to restore the last " "It appears that the last time you were editing the file\n"
"edits you made?" ), "'%s'\n"
"it was not saved properly. Do you wish to restore the last saved edits you made?" ),
GetChars( aFileName.GetFullName() ) GetChars( aFileName.GetFullName() )
); );
......
...@@ -30,7 +30,7 @@ ...@@ -30,7 +30,7 @@
#endif #endif
#ifndef KICAD_BUILD_VERSION #ifndef KICAD_BUILD_VERSION
# define KICAD_BUILD_VERSION "(after 2015-mar-04 BZR unknown)" # define KICAD_BUILD_VERSION "(after 2015-may-01 BZR unknown)"
#endif #endif
/** /**
......
...@@ -201,7 +201,7 @@ static void InitKiCadAboutNew( AboutAppInfo& info ) ...@@ -201,7 +201,7 @@ static void InitKiCadAboutNew( AboutAppInfo& info )
<< HtmlNewline( 4 ) << HtmlNewline( 4 )
<< _( "The complete KiCad EDA Suite is released under the" ) << HtmlNewline( 2 ) << _( "The complete KiCad EDA Suite is released under the" ) << HtmlNewline( 2 )
<< HtmlHyperlink( wxT( "http://www.gnu.org/licenses" ), << HtmlHyperlink( wxT( "http://www.gnu.org/licenses" ),
_( "GNU General Public License (GPL) version 2" ) ) _( "GNU General Public License (GPL) version 2 or any later version" ) )
<< wxT( "</div>" ); << wxT( "</div>" );
info.SetLicense( license ); info.SetLicense( license );
......
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Nov 6 2013) // C++ code generated with wxFormBuilder (version Jun 5 2014)
// http://www.wxformbuilder.org/ // http://www.wxformbuilder.org/
// //
// PLEASE DO "NOT" EDIT THIS FILE! // PLEASE DO "NOT" EDIT THIS FILE!
...@@ -65,23 +65,18 @@ dialog_about_base::dialog_about_base( wxWindow* parent, wxWindowID id, const wxS ...@@ -65,23 +65,18 @@ dialog_about_base::dialog_about_base( wxWindow* parent, wxWindowID id, const wxS
bSizer1->Add( m_auiNotebook, 2, wxEXPAND | wxALL, 5 ); bSizer1->Add( m_auiNotebook, 2, wxEXPAND | wxALL, 5 );
m_buttonOK = new wxButton( this, wxID_CANCEL, _("OK"), wxDefaultPosition, wxDefaultSize, 0 ); m_sdbSizer = new wxStdDialogButtonSizer();
m_buttonOK->SetDefault(); m_sdbSizerOK = new wxButton( this, wxID_OK );
bSizer1->Add( m_buttonOK, 0, wxALIGN_CENTER|wxALL, 5 ); m_sdbSizer->AddButton( m_sdbSizerOK );
m_sdbSizer->Realize();
bSizer1->Add( m_sdbSizer, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 );
this->SetSizer( bSizer1 ); this->SetSizer( bSizer1 );
this->Layout(); this->Layout();
// Connect Events
this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( dialog_about_base::OnClose ) );
m_buttonOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( dialog_about_base::OnOkClick ), NULL, this );
} }
dialog_about_base::~dialog_about_base() dialog_about_base::~dialog_about_base()
{ {
// Disconnect Events
this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( dialog_about_base::OnClose ) );
m_buttonOK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( dialog_about_base::OnOkClick ), NULL, this );
} }
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<wxFormBuilder_Project> <wxFormBuilder_Project>
<FileVersion major="1" minor="11" /> <FileVersion major="1" minor="13" />
<object class="Project" expanded="1"> <object class="Project" expanded="1">
<property name="class_decoration"></property> <property name="class_decoration"></property>
<property name="code_generation">C++</property> <property name="code_generation">C++</property>
...@@ -44,7 +44,7 @@ ...@@ -44,7 +44,7 @@
<property name="minimum_size">-1,-1</property> <property name="minimum_size">-1,-1</property>
<property name="name">dialog_about_base</property> <property name="name">dialog_about_base</property>
<property name="pos"></property> <property name="pos"></property>
<property name="size">750,450</property> <property name="size">750,437</property>
<property name="style">wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER|wxSTAY_ON_TOP</property> <property name="style">wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER|wxSTAY_ON_TOP</property>
<property name="subclass"></property> <property name="subclass"></property>
<property name="title">About...</property> <property name="title">About...</property>
...@@ -61,7 +61,7 @@ ...@@ -61,7 +61,7 @@
<event name="OnAuiPaneRestore"></event> <event name="OnAuiPaneRestore"></event>
<event name="OnAuiRender"></event> <event name="OnAuiRender"></event>
<event name="OnChar"></event> <event name="OnChar"></event>
<event name="OnClose">OnClose</event> <event name="OnClose"></event>
<event name="OnEnterWindow"></event> <event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event> <event name="OnEraseBackground"></event>
<event name="OnHibernate"></event> <event name="OnHibernate"></event>
...@@ -88,7 +88,7 @@ ...@@ -88,7 +88,7 @@
<event name="OnSetFocus"></event> <event name="OnSetFocus"></event>
<event name="OnSize"></event> <event name="OnSize"></event>
<event name="OnUpdateUI"></event> <event name="OnUpdateUI"></event>
<object class="wxBoxSizer" expanded="0"> <object class="wxBoxSizer" expanded="1">
<property name="minimum_size"></property> <property name="minimum_size"></property>
<property name="name">bSizer1</property> <property name="name">bSizer1</property>
<property name="orient">wxVERTICAL</property> <property name="orient">wxVERTICAL</property>
...@@ -720,92 +720,30 @@ ...@@ -720,92 +720,30 @@
<event name="OnUpdateUI"></event> <event name="OnUpdateUI"></event>
</object> </object>
</object> </object>
<object class="sizeritem" expanded="0"> <object class="sizeritem" expanded="1">
<property name="border">5</property> <property name="border">5</property>
<property name="flag">wxALIGN_CENTER|wxALL</property> <property name="flag">wxALL|wxALIGN_CENTER_HORIZONTAL</property>
<property name="proportion">0</property> <property name="proportion">0</property>
<object class="wxButton" expanded="0"> <object class="wxStdDialogButtonSizer" expanded="1">
<property name="BottomDockable">1</property> <property name="Apply">0</property>
<property name="LeftDockable">1</property> <property name="Cancel">0</property>
<property name="RightDockable">1</property> <property name="ContextHelp">0</property>
<property name="TopDockable">1</property> <property name="Help">0</property>
<property name="aui_layer"></property> <property name="No">0</property>
<property name="aui_name"></property> <property name="OK">1</property>
<property name="aui_position"></property> <property name="Save">0</property>
<property name="aui_row"></property> <property name="Yes">0</property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_CANCEL</property>
<property name="label">OK</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property> <property name="minimum_size"></property>
<property name="moveable">1</property> <property name="name">m_sdbSizer</property>
<property name="name">m_buttonOK</property> <property name="permission">protected</property>
<property name="pane_border">1</property> <event name="OnApplyButtonClick"></event>
<property name="pane_position"></property> <event name="OnCancelButtonClick"></event>
<property name="pane_size"></property> <event name="OnContextHelpButtonClick"></event>
<property name="permission">private</property> <event name="OnHelpButtonClick"></event>
<property name="pin_button">1</property> <event name="OnNoButtonClick"></event>
<property name="pos"></property> <event name="OnOKButtonClick"></event>
<property name="resize">Resizable</property> <event name="OnSaveButtonClick"></event>
<property name="show">1</property> <event name="OnYesButtonClick"></event>
<property name="size"></property>
<property name="style"></property>
<property name="subclass"></property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnButtonClick">OnOkClick</event>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
</object> </object>
</object> </object>
</object> </object>
......
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Nov 6 2013) // C++ code generated with wxFormBuilder (version Jun 5 2014)
// http://www.wxformbuilder.org/ // http://www.wxformbuilder.org/
// //
// PLEASE DO "NOT" EDIT THIS FILE! // PLEASE DO "NOT" EDIT THIS FILE!
...@@ -35,7 +35,6 @@ ...@@ -35,7 +35,6 @@
class dialog_about_base : public wxDialog class dialog_about_base : public wxDialog
{ {
private: private:
wxButton* m_buttonOK;
protected: protected:
wxStaticBitmap* m_bitmapApp; wxStaticBitmap* m_bitmapApp;
...@@ -44,15 +43,12 @@ class dialog_about_base : public wxDialog ...@@ -44,15 +43,12 @@ class dialog_about_base : public wxDialog
wxStaticText* m_staticTextBuildVersion; wxStaticText* m_staticTextBuildVersion;
wxStaticText* m_staticTextLibVersion; wxStaticText* m_staticTextLibVersion;
wxAuiNotebook* m_auiNotebook; wxAuiNotebook* m_auiNotebook;
wxStdDialogButtonSizer* m_sdbSizer;
// Virtual event handlers, overide them in your derived class wxButton* m_sdbSizerOK;
virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
virtual void OnOkClick( wxCommandEvent& event ) { event.Skip(); }
public: public:
dialog_about_base( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("About..."), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 750,450 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER|wxSTAY_ON_TOP ); dialog_about_base( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("About..."), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 750,437 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER|wxSTAY_ON_TOP );
~dialog_about_base(); ~dialog_about_base();
}; };
......
...@@ -275,7 +275,7 @@ HOTKEYS_EDITOR_DIALOG::HOTKEYS_EDITOR_DIALOG( EDA_BASE_FRAME* aParent, ...@@ -275,7 +275,7 @@ HOTKEYS_EDITOR_DIALOG::HOTKEYS_EDITOR_DIALOG( EDA_BASE_FRAME* aParent,
for( section = m_hotkeys; section->m_HK_InfoList; section++ ) for( section = m_hotkeys; section->m_HK_InfoList; section++ )
{ {
m_hotkeySectionPages.push_back( new HOTKEY_SECTION_PAGE( this, m_hotkeySections, m_hotkeySectionPages.push_back( new HOTKEY_SECTION_PAGE( this, m_hotkeySections,
_( *section->m_Title ), wxGetTranslation( *section->m_Title ),
section ) ); section ) );
} }
......
This diff is collapsed.
...@@ -1495,7 +1495,9 @@ void EDA_DRAW_PANEL::CallMouseCapture( wxDC* aDC, const wxPoint& aPosition, bool ...@@ -1495,7 +1495,9 @@ void EDA_DRAW_PANEL::CallMouseCapture( wxDC* aDC, const wxPoint& aPosition, bool
void EDA_DRAW_PANEL::CallEndMouseCapture( wxDC* aDC ) void EDA_DRAW_PANEL::CallEndMouseCapture( wxDC* aDC )
{ {
wxCHECK_RET( aDC != NULL, wxT( "Invalid device context." ) ); wxCHECK_RET( aDC != NULL, wxT( "Invalid device context." ) );
wxCHECK_RET( m_endMouseCaptureCallback != NULL, wxT( "End mouse capture callback not set." ) );
m_endMouseCaptureCallback( this, aDC ); // CallEndMouseCapture is sometimes called with m_endMouseCaptureCallback == NULL
// for instance after an ABORT in block paste.
if( m_endMouseCaptureCallback )
m_endMouseCaptureCallback( this, aDC );
} }
...@@ -99,17 +99,10 @@ EDA_DRAW_PANEL_GAL::EDA_DRAW_PANEL_GAL( wxWindow* aParentWindow, wxWindowID aWin ...@@ -99,17 +99,10 @@ EDA_DRAW_PANEL_GAL::EDA_DRAW_PANEL_GAL( wxWindow* aParentWindow, wxWindowID aWin
EDA_DRAW_PANEL_GAL::~EDA_DRAW_PANEL_GAL() EDA_DRAW_PANEL_GAL::~EDA_DRAW_PANEL_GAL()
{ {
if( m_painter ) delete m_painter;
delete m_painter; delete m_viewControls;
delete m_view;
if( m_viewControls ) delete m_gal;
delete m_viewControls;
if( m_view )
delete m_view;
if( m_gal )
delete m_gal;
} }
...@@ -194,42 +187,29 @@ void EDA_DRAW_PANEL_GAL::SetEventDispatcher( TOOL_DISPATCHER* aEventDispatcher ) ...@@ -194,42 +187,29 @@ void EDA_DRAW_PANEL_GAL::SetEventDispatcher( TOOL_DISPATCHER* aEventDispatcher )
m_eventDispatcher = aEventDispatcher; m_eventDispatcher = aEventDispatcher;
#if wxCHECK_VERSION( 3, 0, 0 ) #if wxCHECK_VERSION( 3, 0, 0 )
if( m_eventDispatcher ) const wxEventType eventTypes[] = { wxEVT_TOOL };
{
m_parent->Connect( wxEVT_TOOL,
wxCommandEventHandler( TOOL_DISPATCHER::DispatchWxCommand ),
NULL, m_eventDispatcher );
}
else
{
// While loops are used to be sure, that we are removing all event handlers
while( m_parent->Disconnect( wxEVT_TOOL,
wxCommandEventHandler( TOOL_DISPATCHER::DispatchWxCommand ),
NULL, m_eventDispatcher ) );
}
#else #else
const wxEventType eventTypes[] = { wxEVT_COMMAND_MENU_SELECTED, wxEVT_COMMAND_TOOL_CLICKED };
#endif
if( m_eventDispatcher ) if( m_eventDispatcher )
{ {
m_parent->Connect( wxEVT_COMMAND_MENU_SELECTED, BOOST_FOREACH( wxEventType type, eventTypes )
wxCommandEventHandler( TOOL_DISPATCHER::DispatchWxCommand ), {
NULL, m_eventDispatcher ); m_parent->Connect( type, wxCommandEventHandler( TOOL_DISPATCHER::DispatchWxCommand ),
NULL, m_eventDispatcher );
m_parent->Connect( wxEVT_COMMAND_TOOL_CLICKED, }
wxCommandEventHandler( TOOL_DISPATCHER::DispatchWxCommand ),
NULL, m_eventDispatcher );
} }
else else
{ {
// While loops are used to be sure, that we are removing all event handlers BOOST_FOREACH( wxEventType type, eventTypes )
while( m_parent->Disconnect( wxEVT_COMMAND_MENU_SELECTED, {
wxCommandEventHandler( TOOL_DISPATCHER::DispatchWxCommand ), // While loop is used to be sure that all event handlers are removed.
NULL, m_eventDispatcher ) ); while( m_parent->Disconnect( type,
wxCommandEventHandler( TOOL_DISPATCHER::DispatchWxCommand ),
while( m_parent->Disconnect( wxEVT_COMMAND_TOOL_CLICKED, NULL, m_eventDispatcher ) );
wxCommandEventHandler( TOOL_DISPATCHER::DispatchWxCommand ), }
NULL, m_eventDispatcher ) );
} }
#endif
} }
...@@ -316,7 +296,7 @@ bool EDA_DRAW_PANEL_GAL::SwitchBackend( GalType aGalType ) ...@@ -316,7 +296,7 @@ bool EDA_DRAW_PANEL_GAL::SwitchBackend( GalType aGalType )
m_backend = aGalType; m_backend = aGalType;
} }
catch (std::runtime_error& err) catch( std::runtime_error& err )
{ {
DisplayError( m_parent, wxString( err.what() ) ); DisplayError( m_parent, wxString( err.what() ) );
return false; return false;
......
...@@ -36,46 +36,29 @@ ...@@ -36,46 +36,29 @@
#endif /* __WXDEBUG__ */ #endif /* __WXDEBUG__ */
#include <limits> #include <limits>
#include <boost/bind.hpp>
using namespace KIGFX; using namespace KIGFX;
// Prototypes static void InitTesselatorCallbacks( GLUtesselator* aTesselator );
void InitTesselatorCallbacks( GLUtesselator* aTesselator ); const int glAttributes[] = { WX_GL_RGBA, WX_GL_DOUBLEBUFFER, WX_GL_DEPTH_SIZE, 16, 0 };
const int glAttributes[] = { WX_GL_RGBA, WX_GL_DOUBLEBUFFER, WX_GL_DEPTH_SIZE, 24, 0 };
wxGLContext* OPENGL_GAL::glContext = NULL; wxGLContext* OPENGL_GAL::glContext = NULL;
OPENGL_GAL::OPENGL_GAL( wxWindow* aParent, wxEvtHandler* aMouseListener, OPENGL_GAL::OPENGL_GAL( wxWindow* aParent, wxEvtHandler* aMouseListener,
wxEvtHandler* aPaintListener, const wxString& aName ) : wxEvtHandler* aPaintListener, const wxString& aName ) :
wxGLCanvas( aParent, wxID_ANY, (int*) glAttributes, wxDefaultPosition, wxDefaultSize, wxGLCanvas( aParent, wxID_ANY, (int*) glAttributes, wxDefaultPosition, wxDefaultSize,
wxEXPAND, aName ), wxEXPAND, aName ),
parentWindow( aParent ),
mouseListener( aMouseListener ), mouseListener( aMouseListener ),
paintListener( aPaintListener ), paintListener( aPaintListener ),
cachedManager( true ), cachedManager( true ),
nonCachedManager( false ), nonCachedManager( false ),
overlayManager( false ) overlayManager( false )
{ {
// Create the OpenGL-Context
if( glContext == NULL ) if( glContext == NULL )
glContext = new wxGLContext( this ); glContext = new wxGLContext( this );
aParent->Show(); // wxWidgets require the window to be visible to set its GL context // Check if OpenGL requirements are met
runTest();
// Initialize GLEW, FBOs & VBOs
SetCurrent( *glContext );
initGlew();
// Prepare shaders
if( !shader.LoadBuiltinShader( 0, SHADER_TYPE_VERTEX ) )
throw std::runtime_error( "Cannot compile vertex shader!" );
if( !shader.LoadBuiltinShader( 1, SHADER_TYPE_FRAGMENT ) )
throw std::runtime_error( "Cannot compile fragment shader!" );
if( !shader.Link() )
throw std::runtime_error( "Cannot link the shaders!" );
// Make VBOs use shaders // Make VBOs use shaders
cachedManager.SetShader( shader ); cachedManager.SetShader( shader );
...@@ -88,7 +71,7 @@ OPENGL_GAL::OPENGL_GAL( wxWindow* aParent, wxEvtHandler* aMouseListener, ...@@ -88,7 +71,7 @@ OPENGL_GAL::OPENGL_GAL( wxWindow* aParent, wxEvtHandler* aMouseListener,
groupCounter = 0; groupCounter = 0;
// Connecting the event handlers // Connecting the event handlers
Connect( wxEVT_PAINT, wxPaintEventHandler( OPENGL_GAL::onPaint ) ); Connect( wxEVT_PAINT, wxPaintEventHandler( OPENGL_GAL::onPaint ) );
// Mouse events are skipped to the parent // Mouse events are skipped to the parent
Connect( wxEVT_MOTION, wxMouseEventHandler( OPENGL_GAL::skipMouseEvent ) ); Connect( wxEVT_MOTION, wxMouseEventHandler( OPENGL_GAL::skipMouseEvent ) );
...@@ -145,7 +128,8 @@ void OPENGL_GAL::BeginDrawing() ...@@ -145,7 +128,8 @@ void OPENGL_GAL::BeginDrawing()
glViewport( 0, 0, (GLsizei) screenSize.x, (GLsizei) screenSize.y ); glViewport( 0, 0, (GLsizei) screenSize.x, (GLsizei) screenSize.y );
// Create the screen transformation // Create the screen transformation
glOrtho( 0, (GLint) screenSize.x, 0, (GLsizei) screenSize.y, -depthRange.x, -depthRange.y ); glOrtho( 0, (GLint) screenSize.x, 0, (GLsizei) screenSize.y,
-depthRange.x, -depthRange.y );
if( !isFramebufferInitialized ) if( !isFramebufferInitialized )
{ {
...@@ -914,37 +898,6 @@ void OPENGL_GAL::skipMouseEvent( wxMouseEvent& aEvent ) ...@@ -914,37 +898,6 @@ void OPENGL_GAL::skipMouseEvent( wxMouseEvent& aEvent )
} }
void OPENGL_GAL::initGlew()
{
// Initialize GLEW library
GLenum err = glewInit();
if( GLEW_OK != err )
{
throw std::runtime_error( (const char*) glewGetErrorString( err ) );
}
else
{
wxLogDebug( wxString( wxT( "Status: Using GLEW " ) ) +
FROM_UTF8( (char*) glewGetString( GLEW_VERSION ) ) );
}
// Check the OpenGL version (minimum 2.1 is required)
if( GLEW_VERSION_2_1 )
wxLogInfo( wxT( "OpenGL 2.1 supported." ) );
else
throw std::runtime_error( "OpenGL 2.1 or higher is required!" );
// Framebuffers have to be supported
if( !GLEW_EXT_framebuffer_object )
throw std::runtime_error( "Framebuffer objects are not supported!" );
// Vertex buffer has to be supported
if( !GLEW_ARB_vertex_buffer_object )
throw std::runtime_error( "Vertex buffer objects are not supported!" );
}
void OPENGL_GAL::blitCursor() void OPENGL_GAL::blitCursor()
{ {
if( !isCursorEnabled ) if( !isCursorEnabled )
...@@ -984,11 +937,112 @@ unsigned int OPENGL_GAL::getNewGroupNumber() ...@@ -984,11 +937,112 @@ unsigned int OPENGL_GAL::getNewGroupNumber()
} }
// ------------------------------------- bool OPENGL_GAL::runTest()
// Callback functions for the tesselator {
// ------------------------------------- wxDialog* dialog = new wxDialog( GetParent(), -1, wxT( "opengl test" ),
wxPoint( 50, 50 ), wxSize( 50, 50 ) );
OPENGL_TEST* test = new OPENGL_TEST( dialog, this );
dialog->ShowModal();
bool result = test->IsOk();
if( !result )
throw std::runtime_error( test->GetError() );
return result;
}
OPENGL_GAL::OPENGL_TEST::OPENGL_TEST( wxDialog* aParent, OPENGL_GAL* aGal ) :
wxGLCanvas( aParent, wxID_ANY, glAttributes, wxDefaultPosition,
wxDefaultSize, 0, wxT( "GLCanvas" ) ),
m_parent( aParent ), m_gal( aGal ), m_tested( false ), m_result( false )
{
Connect( wxEVT_PAINT, wxPaintEventHandler( OPENGL_GAL::OPENGL_TEST::Render ) );
}
void OPENGL_GAL::OPENGL_TEST::Render( wxPaintEvent& WXUNUSED( aEvent ) )
{
if( !m_tested )
{
m_result = true; // Assume everything is fine, until proven otherwise
// One test is enough - close the testing dialog when the test is finished
Disconnect( wxEVT_PAINT, wxPaintEventHandler( OPENGL_GAL::OPENGL_TEST::Render ) );
CallAfter( boost::bind( &wxDialog::EndModal, m_parent, wxID_NONE ) );
SetCurrent( *OPENGL_GAL::glContext );
GLenum err = glewInit();
if( GLEW_OK != err )
{
error( (const char*) glewGetErrorString( err ) );
return;
}
else
{
wxLogDebug( wxString( wxT( "Status: Using GLEW " ) ) +
FROM_UTF8( (char*) glewGetString( GLEW_VERSION ) ) );
}
// Check the OpenGL version (minimum 2.1 is required)
if( GLEW_VERSION_2_1 )
{
wxLogInfo( wxT( "OpenGL 2.1 supported." ) );
}
else
{
error( "OpenGL 2.1 or higher is required!" );
return;
}
// Framebuffers have to be supported
if( !GLEW_EXT_framebuffer_object )
{
error( "Framebuffer objects are not supported!" );
return;
}
// Vertex buffer has to be supported
if( !GLEW_ARB_vertex_buffer_object )
{
error( "Vertex buffer objects are not supported!" );
return;
}
// Prepare shaders
if( !m_gal->shader.LoadBuiltinShader( 0, SHADER_TYPE_VERTEX ) )
{
error( "Cannot compile vertex shader!" );
return;
}
if( !m_gal->shader.LoadBuiltinShader( 1, SHADER_TYPE_FRAGMENT ) )
{
error( "Cannot compile fragment shader!" );
return;
}
if( !m_gal->shader.Link() )
{
error( "Cannot link the shaders!" );
return;
}
m_tested = true;
}
}
void OPENGL_GAL::OPENGL_TEST::error(const std::string& aError )
{
m_result = false;
m_tested = true;
m_error = aError;
}
// Compare Redbook Chapter 11 // ------------------------------------- // Callback functions for the tesselator // ------------------------------------- // Compare Redbook Chapter 11
void CALLBACK VertexCallback( GLvoid* aVertexPtr, void* aData ) void CALLBACK VertexCallback( GLvoid* aVertexPtr, void* aData )
{ {
GLdouble* vertex = static_cast<GLdouble*>( aVertexPtr ); GLdouble* vertex = static_cast<GLdouble*>( aVertexPtr );
...@@ -1029,7 +1083,7 @@ void CALLBACK ErrorCallback( GLenum aErrorCode ) ...@@ -1029,7 +1083,7 @@ void CALLBACK ErrorCallback( GLenum aErrorCode )
} }
void InitTesselatorCallbacks( GLUtesselator* aTesselator ) static void InitTesselatorCallbacks( GLUtesselator* aTesselator )
{ {
gluTessCallback( aTesselator, GLU_TESS_VERTEX_DATA, ( void (CALLBACK*)() )VertexCallback ); gluTessCallback( aTesselator, GLU_TESS_VERTEX_DATA, ( void (CALLBACK*)() )VertexCallback );
gluTessCallback( aTesselator, GLU_TESS_COMBINE_DATA, ( void (CALLBACK*)() )CombineCallback ); gluTessCallback( aTesselator, GLU_TESS_COMBINE_DATA, ( void (CALLBACK*)() )CombineCallback );
......
/* /*
* This program source code file is part of KiCad, a free EDA CAD application. * This program source code file is part of KiCad, a free EDA CAD application.
* *
* Copyright (C) 2013 Jean-Pierre Charras, j-p.charras at wanadoo.fr * Copyright (C) 2015 Jean-Pierre Charras, j-p.charras at wanadoo.fr
* Copyright (C) 2010-2011 Wayne Stambaugh <stambaughw@verizon.net> * Copyright (C) 2010-2011 Wayne Stambaugh <stambaughw@verizon.net>
* Copyright (C) 1992-2011 KiCad Developers, see AUTHORS.txt for contributors. * Copyright (C) 1992-2015 KiCad Developers, see AUTHORS.txt for contributors.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
...@@ -39,6 +39,7 @@ ...@@ -39,6 +39,7 @@
#include <macros.h> #include <macros.h>
#include <dialog_hotkeys_editor.h> #include <dialog_hotkeys_editor.h>
#include <menus_helpers.h> #include <menus_helpers.h>
#include <tool/tool_manager.h>
#include <wx/apptrait.h> #include <wx/apptrait.h>
#include <wx/stdpaths.h> #include <wx/stdpaths.h>
...@@ -47,16 +48,6 @@ ...@@ -47,16 +48,6 @@
#define HOTKEYS_CONFIG_KEY wxT( "Keys" ) #define HOTKEYS_CONFIG_KEY wxT( "Keys" )
wxString g_CommonSectionTag( wxT( "[common]" ) ); wxString g_CommonSectionTag( wxT( "[common]" ) );
wxString g_SchematicSectionTag( wxT( "[eeschema]" ) );
wxString g_LibEditSectionTag( wxT( "[libedit]" ) );
wxString g_BoardEditorSectionTag( wxT( "[pcbnew]" ) );
wxString g_ModuleEditSectionTag( wxT( "[footprinteditor]" ) );
wxString g_CommonSectionTitle( wxT( "Common" ) );
wxString g_SchematicSectionTitle( wxT( "Schematic Editor" ) );
wxString g_LibEditSectionTitle( wxT( "Library Editor" ) );
wxString g_BoardEditorSectionTitle( wxT( "Board Editor" ) );
wxString g_ModuleEditSectionTitle( wxT( "Footprint Editor" ) );
/* Class to handle hotkey commnands. hotkeys have a default value /* Class to handle hotkey commnands. hotkeys have a default value
...@@ -492,6 +483,20 @@ EDA_HOTKEY* GetDescriptorFromHotkey( int aKey, EDA_HOTKEY** aList ) ...@@ -492,6 +483,20 @@ EDA_HOTKEY* GetDescriptorFromHotkey( int aKey, EDA_HOTKEY** aList )
} }
EDA_HOTKEY* GetDescriptorFromCommand( int aCommand, EDA_HOTKEY** aList )
{
for( ; *aList != NULL; aList++ )
{
EDA_HOTKEY* hk_decr = *aList;
if( hk_decr->m_Idcommand == aCommand )
return hk_decr;
}
return NULL;
}
int EDA_BASE_FRAME::WriteHotkeyConfig( struct EDA_HOTKEY_CONFIG* aDescList, int EDA_BASE_FRAME::WriteHotkeyConfig( struct EDA_HOTKEY_CONFIG* aDescList,
wxString* aFullFileName ) wxString* aFullFileName )
{ {
......
...@@ -423,7 +423,7 @@ bool PGM_BASE::initPgm() ...@@ -423,7 +423,7 @@ bool PGM_BASE::initPgm()
m_local_env_vars[ envVarName ] = envVarItem; m_local_env_vars[ envVarName ] = envVarItem;
wxFileName tmpFileName; wxFileName tmpFileName;
tmpFileName.AssignDir( wxString( wxT( KICAD_DATA_PATH ) ) ); tmpFileName.AssignDir( wxString( wxT( DEFAULT_INSTALL_PATH ) ) );
tmpFileName.AppendDir( wxT( "modules" ) ); tmpFileName.AppendDir( wxT( "modules" ) );
envVarName = wxT( "KISYSMOD" ); envVarName = wxT( "KISYSMOD" );
envVarItem.SetValue( tmpFileName.GetPath() ); envVarItem.SetValue( tmpFileName.GetPath() );
......
...@@ -93,12 +93,19 @@ const wxString PROJECT::GetProjectFullName() const ...@@ -93,12 +93,19 @@ const wxString PROJECT::GetProjectFullName() const
return m_project_name.GetFullPath(); return m_project_name.GetFullPath();
} }
const wxString PROJECT::GetProjectPath() const const wxString PROJECT::GetProjectPath() const
{ {
return m_project_name.GetPathWithSep(); return m_project_name.GetPathWithSep();
} }
const wxString PROJECT::GetProjectName() const
{
return m_project_name.GetName();
}
const wxString PROJECT::FootprintLibTblName() const const wxString PROJECT::FootprintLibTblName() const
{ {
wxFileName fn = GetProjectFullName(); wxFileName fn = GetProjectFullName();
...@@ -350,7 +357,6 @@ const wxString PROJECT::AbsolutePath( const wxString& aFileName ) const ...@@ -350,7 +357,6 @@ const wxString PROJECT::AbsolutePath( const wxString& aFileName ) const
if( !fn.IsAbsolute() ) if( !fn.IsAbsolute() )
{ {
wxString pro_dir = wxPathOnly( GetProjectFullName() ); wxString pro_dir = wxPathOnly( GetProjectFullName() );
fn.Normalize( wxPATH_NORM_ALL, pro_dir ); fn.Normalize( wxPATH_NORM_ALL, pro_dir );
} }
......
This diff is collapsed.
This diff is collapsed.
...@@ -23,6 +23,24 @@ ...@@ -23,6 +23,24 @@
*/ */
#include <tool/tool_action.h> #include <tool/tool_action.h>
#include <tool/action_manager.h>
TOOL_ACTION::TOOL_ACTION( const std::string& aName, TOOL_ACTION_SCOPE aScope,
int aDefaultHotKey, const wxString aMenuItem, const wxString& aMenuDesc,
const BITMAP_OPAQUE* aIcon, TOOL_ACTION_FLAGS aFlags, void* aParam ) :
m_name( aName ), m_scope( aScope ), m_defaultHotKey( aDefaultHotKey ),
m_currentHotKey( aDefaultHotKey ), m_menuItem( aMenuItem ), m_menuDescription( aMenuDesc ),
m_icon( aIcon ), m_id( -1 ), m_flags( aFlags ), m_param( aParam )
{
ACTION_MANAGER::GetActionList().push_back( this );
}
TOOL_ACTION::~TOOL_ACTION()
{
ACTION_MANAGER::GetActionList().remove( this );
}
std::string TOOL_ACTION::GetToolName() const std::string TOOL_ACTION::GetToolName() const
{ {
......
This diff is collapsed.
...@@ -102,8 +102,7 @@ void VIEW::Add( VIEW_ITEM* aItem ) ...@@ -102,8 +102,7 @@ void VIEW::Add( VIEW_ITEM* aItem )
if( m_dynamic ) if( m_dynamic )
aItem->viewAssign( this ); aItem->viewAssign( this );
if( aItem->viewRequiredUpdate() != VIEW_ITEM::NONE ) aItem->ViewUpdate( VIEW_ITEM::ALL );
MarkForUpdate( aItem );
} }
...@@ -119,6 +118,8 @@ void VIEW::Remove( VIEW_ITEM* aItem ) ...@@ -119,6 +118,8 @@ void VIEW::Remove( VIEW_ITEM* aItem )
if( item != m_needsUpdate.end() ) if( item != m_needsUpdate.end() )
m_needsUpdate.erase( item ); m_needsUpdate.erase( item );
aItem->clearUpdateFlags();
} }
int layers[VIEW::VIEW_MAX_LAYERS], layers_count; int layers[VIEW::VIEW_MAX_LAYERS], layers_count;
......
...@@ -54,8 +54,9 @@ const wxString DrillFileExtension( wxT( "drl" ) ); ...@@ -54,8 +54,9 @@ const wxString DrillFileExtension( wxT( "drl" ) );
const wxString SVGFileExtension( wxT( "svg" ) ); const wxString SVGFileExtension( wxT( "svg" ) );
const wxString ReportFileExtension( wxT( "rpt" ) ); const wxString ReportFileExtension( wxT( "rpt" ) );
const wxString FootprintPlaceFileExtension( wxT( "pos" ) ); const wxString FootprintPlaceFileExtension( wxT( "pos" ) );
const wxString KiCadLib3DShapesPathExtension( wxT( "3dshapes" ) ); ///< 3D shapes default libpath
const wxString KiCadFootprintLibPathExtension( wxT( "pretty" ) ); ///< KICAD PLUGIN libpath const wxString KiCadFootprintLibPathExtension( wxT( "pretty" ) ); ///< KICAD PLUGIN libpath
const wxString LegacyFootprintLibPathExtension( wxT( "mod" ) ); const wxString LegacyFootprintLibPathExtension( wxT( "mod" ) );
const wxString EagleFootprintLibPathExtension( wxT( "lbr" ) ); const wxString EagleFootprintLibPathExtension( wxT( "lbr" ) );
......
This diff is collapsed.
...@@ -117,26 +117,9 @@ target_link_libraries( cvpcb_kiface ...@@ -117,26 +117,9 @@ target_link_libraries( cvpcb_kiface
polygon polygon
gal gal
${wxWidgets_LIBRARIES} ${wxWidgets_LIBRARIES}
${OPENGL_LIBRARIES}
${GDI_PLUS_LIBRARIES} ${GDI_PLUS_LIBRARIES}
${GLEW_LIBRARIES}
${CAIRO_LIBRARIES}
${PIXMAN_LIBRARY}
${OPENMP_LIBRARIES}
) )
# Only for win32 cross compilation using MXE
if( WIN32 AND MSYS AND CMAKE_CROSSCOMPILING )
target_link_libraries( cvpcb_kiface
opengl32
glu32
pixman-1
fontconfig
freetype
bz2
)
endif()
if( BUILD_GITHUB_PLUGIN ) if( BUILD_GITHUB_PLUGIN )
target_link_libraries( cvpcb_kiface github_plugin ) target_link_libraries( cvpcb_kiface github_plugin )
endif() endif()
......
This diff is collapsed.
...@@ -794,7 +794,6 @@ void CVPCB_MAINFRAME::SendMessageToEESCHEMA() ...@@ -794,7 +794,6 @@ void CVPCB_MAINFRAME::SendMessageToEESCHEMA()
int CVPCB_MAINFRAME::ReadSchematicNetlist() int CVPCB_MAINFRAME::ReadSchematicNetlist()
{ {
wxBusyCursor dummy; // Shows an hourglass while loading.
NETLIST_READER* netlistReader; NETLIST_READER* netlistReader;
wxString msg; wxString msg;
wxString compFootprintLinkFileName; wxString compFootprintLinkFileName;
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment