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
Documentation/doxygen
Documentation/development/doxygen
*.bak
.*.swp
*.~*
common/pcb_plot_params_keywords.cpp
include/pcb_plot_params_lexer.h
pcbnew/specctra_keywords.cpp
......
......@@ -95,7 +95,7 @@ EDA_3D_CANVAS::EDA_3D_CANVAS( EDA_3D_FRAME* parent, int* attribList ) :
m_ZBottom = 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:
for( int ii = GL_ID_BEGIN; ii < GL_ID_END; ii++ )
......@@ -496,7 +496,7 @@ void EDA_3D_CANVAS::DisplayStatus()
msg.Printf( wxT( "dy %3.2f" ), m_draw3dOffset.y );
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 );
}
......@@ -591,7 +591,7 @@ void EDA_3D_CANVAS::SetLights()
light_color[3] = 1.0;
// 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 );
light_color[0] = light_color[1] = light_color[2] = 1.0;
......@@ -605,6 +605,8 @@ void EDA_3D_CANVAS::SetLights()
light_color[0] = light_color[1] = light_color[2] = 0.2;
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_LIGHTING );
}
......
......@@ -50,6 +50,7 @@
class BOARD_DESIGN_SETTINGS;
class EDA_3D_FRAME;
class CPOLYGONS_LIST;
class REPORTER;
class VIA;
class D_PAD;
......@@ -80,7 +81,8 @@ class EDA_3D_CANVAS : public wxGLCanvas
{
private:
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
wxGLContext* m_glRC;
wxRealPoint m_draw3dOffset; ///< offset to draw the 3D mesh.
......@@ -148,11 +150,11 @@ public:
* Function CreateDrawGL_List
* Prepares the parameters of the OpenGL draw list
* 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
* @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 ReportWarnings( bool aReport ) { m_reportWarnings = aReport; }
......@@ -231,24 +233,25 @@ private:
* 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
* Fills aErrorMessages with error messages created by some calculation function
* display activity state
* @param aBoardList =
* @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)
* @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,
wxString* aErrorMessages, bool aShowWarnings );
REPORTER* aErrorMessages, REPORTER* aActivity );
/**
* Function buildTechLayers3DView
* Called by CreateDrawGL_List()
* 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)
* @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
......@@ -263,17 +266,25 @@ private:
* draw lists with 3D footprint shapes
* @param aOpaqueList 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
*/
void buildFootprintShape3DList( GLuint aOpaqueList,
GLuint aTransparentList );
GLuint aTransparentList,
REPORTER* aErrorMessages, REPORTER* aActivity );
/**
* Function buildBoard3DAuxLayers
* Called by CreateDrawGL_List()
* Fills the OpenGL GL_ID_AUX_LAYERS draw list
* 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 draw3DAxis();
......@@ -329,11 +340,11 @@ private:
* function generateFakeShadowsTextures
* creates shadows of the board an footprints
* 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)
* @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()
};
......
......@@ -24,7 +24,7 @@
/**
* @file 3d_class.cpp
*/
#include <fctsys.h>
#include "3d_viewer.h"
......@@ -54,7 +54,7 @@ S3D_MASTER::S3D_MASTER( EDA_ITEM* aParent ) :
EDA_ITEM( aParent, NOT_USED )
{
m_MatScale.x = m_MatScale.y = m_MatScale.z = 1.0;
m_3D_Drawings = NULL;
m_Materials = NULL;
m_parser = NULL;
......@@ -85,7 +85,7 @@ S3D_MASTER:: ~S3D_MASTER()
{
nextmat = m_Materials->Next();
delete m_Materials;
m_Materials = 0;
m_Materials = NULL;
}
}
......
This diff is collapsed.
......@@ -54,17 +54,6 @@ static void CALLBACK tessEndCB();
static void CALLBACK tessErrorCB( GLenum errorCode );
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 );
/* Draw3D_VerticalPolygonalCylinder is a helper function.
......@@ -160,7 +149,8 @@ void SetGLTexture( GLuint text_id, float scale )
*/
void Draw3D_SolidHorizontalPolyPolygons( const CPOLYGONS_LIST& aPolysList,
int aZpos, int aThickness, double aBiuTo3DUnits,
bool aUseTextures )
bool aUseTextures,
float aNormal_Z_Orientation )
{
// for Tess callback functions:
s_biuTo3Dunits = aBiuTo3DUnits;
......@@ -173,16 +163,17 @@ void Draw3D_SolidHorizontalPolyPolygons( const CPOLYGONS_LIST& aPolysList,
gluTessCallback( tess, GLU_TESS_ERROR, ( void (CALLBACK*) () )tessErrorCB );
gluTessCallback( tess, GLU_TESS_VERTEX, ( void (CALLBACK*) () )tessCPolyPt2Vertex );
GLdouble v_data[3];
double zpos = ( aZpos + (aThickness / 2.0) ) * aBiuTo3DUnits;
GLdouble v_data[3];
double zpos = ( aZpos + (aThickness / 2.0) ) * aBiuTo3DUnits;
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
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
CPOLYGONS_LIST polylist = aPolysList; // temporary copy for gluTessVertex
......@@ -202,11 +193,6 @@ void Draw3D_SolidHorizontalPolyPolygons( const CPOLYGONS_LIST& aPolysList,
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[1] = -polylist.GetY( ii ) * aBiuTo3DUnits;
// gluTessVertex store pointers on data, not data, so do not store
......@@ -231,9 +217,8 @@ void Draw3D_SolidHorizontalPolyPolygons( const CPOLYGONS_LIST& aPolysList,
zpos = ( aZpos - (aThickness / 2.0) ) * aBiuTo3DUnits;
s_currentZpos = zpos; // for Tess callback functions
v_data[2] = zpos;
// Set normal toward negative Z axis, for a solid object on bottom side
if( aThickness )
SetNormalZneg();
glNormal3f( 0.0, 0.0, -aNormal_Z_Orientation );
}
if( startContour == 0 )
......@@ -245,12 +230,11 @@ void Draw3D_SolidHorizontalPolyPolygons( const CPOLYGONS_LIST& aPolysList,
gluDeleteTess( tess );
if( aThickness == 0 )
{
return;
}
// 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,
*/
void Draw3D_SolidHorizontalPolygonWithHoles( const CPOLYGONS_LIST& aPolysList,
int aZpos, int aThickness,
double aBiuTo3DUnits, bool aUseTextures )
double aBiuTo3DUnits, bool aUseTextures,
float aNormal_Z_Orientation )
{
CPOLYGONS_LIST 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,
if( aHeight )
{
// Draw the vertical outer side
Draw3D_VerticalPolygonalCylinder( outer_cornerBuffer,
aHeight, aZpos, false, aBiuTo3DUnits );
......@@ -308,23 +294,21 @@ void Draw3D_ZaxisCylinder( wxPoint aCenterPos, int aRadius,
if( aThickness )
{
// draw top (front) and bottom (back) horizontal sides (rings)
SetNormalZpos();
outer_cornerBuffer.Append( inner_cornerBuffer );
CPOLYGONS_LIST polygon;
ConvertPolysListWithHolesToOnePolygon( outer_cornerBuffer, polygon );
// 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 )
{
// 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,
ConvertPolysListWithHolesToOnePolygon( outer_cornerBuffer, polygon );
// 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 )
{
// 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,
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,
TransformArcToPolygon( cornerBuffer, aCenterPos, aStartPoint, aArcAngle,
slice, aWidth );
Draw3D_SolidHorizontalPolyPolygons( cornerBuffer, aZpos, aThickness, aBiuTo3DUnits, false );
Draw3D_SolidHorizontalPolyPolygons( cornerBuffer, aZpos, aThickness, aBiuTo3DUnits, false, 1.0f );
}
......
......@@ -37,6 +37,7 @@
* @param aThickness = thickness in board internal units
* @param aBiuTo3DUnits = board internal units to 3D units scaling value
* @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 solid object is drawn.
* The top side is located at aZpos + aThickness / 2
......@@ -44,7 +45,8 @@
*/
void Draw3D_SolidHorizontalPolyPolygons( const CPOLYGONS_LIST& aPolysList,
int aZpos, int aThickness, double aBiuTo3DUnits,
bool aUseTextures );
bool aUseTextures,
float aNormal_Z_Orientation );
/** draw the solid polygon found in aPolysList
* The first polygonj is the main polygon, others are holes
......@@ -53,6 +55,7 @@ void Draw3D_SolidHorizontalPolyPolygons( const CPOLYGONS_LIST& aPolysList,
* @param aThickness = thickness in board internal units
* @param aBiuTo3DUnits = board internal units to 3D units scaling value
* @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 solid object is drawn.
* The top side is located at aZpos + aThickness / 2
......@@ -60,7 +63,8 @@ void Draw3D_SolidHorizontalPolyPolygons( const CPOLYGONS_LIST& aPolysList,
*/
void Draw3D_SolidHorizontalPolygonWithHoles( const CPOLYGONS_LIST& aPolysList,
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
* @param aStart = YX position of start point in board units
......
......@@ -368,8 +368,9 @@ void EDA_3D_CANVAS::draw3DPadHole( const D_PAD* aPad )
if( drillsize.x == drillsize.y ) // usual round hole
{
int hole_radius = ( drillsize.x + thickness ) / 2;
Draw3D_ZaxisCylinder( aPad->GetPosition(),
(drillsize.x + thickness / 2) / 2, holeHeight,
hole_radius, holeHeight,
thickness, holeZpoz, GetPrm3DVisu().m_BiuTo3Dunits );
}
else // Oblong hole
......
......@@ -260,7 +260,7 @@ void EDA_3D_FRAME::LoadSettings( wxConfigBase* aCfg )
aCfg->Read( keyRenderShowModelBBox, &tmp, false );
prms.SetFlag( FL_RENDER_SHOW_MODEL_BBOX, tmp );
aCfg->Read( keyShowAxis, &tmp, true );
prms.SetFlag( FL_AXIS, tmp );
......@@ -324,7 +324,7 @@ void EDA_3D_FRAME::SaveSettings( wxConfigBase* aCfg )
aCfg->Write( keyRenderUseModelNormals, prms.GetFlag( FL_RENDER_USE_MODEL_NORMALS ) );
aCfg->Write( keyRenderMaterial, prms.GetFlag( FL_RENDER_MATERIAL ) );
aCfg->Write( keyRenderShowModelBBox, prms.GetFlag( FL_RENDER_SHOW_MODEL_BBOX ) );
aCfg->Write( keyShowAxis, prms.GetFlag( FL_AXIS ) );
aCfg->Write( keyShowGrid, prms.GetFlag( FL_GRID ) );
aCfg->Write( keyShowGridSize, prms.m_3D_Grid );
......
......@@ -50,6 +50,7 @@ S3D_MATERIAL::S3D_MATERIAL( S3D_MASTER* father, const wxString& name ) :
m_SpecularColor.clear();
m_Shininess.clear();
m_Transparency.clear();
m_ColorPerVertex = false;
}
......@@ -81,17 +82,29 @@ bool S3D_MATERIAL::SetOpenGLMaterial( unsigned int aMaterialIndex, bool aUseMate
{
transparency_value = m_Transparency[aMaterialIndex];
}
else
{
if( m_Transparency.size() > 0 )
transparency_value = m_Transparency[0];
}
if( m_DiffuseColor.size() > 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
......
......@@ -48,6 +48,7 @@ public:
std::vector< glm::vec3 > m_SpecularColor;
std::vector< float > m_Shininess;
std::vector< float > m_Transparency;
bool m_ColorPerVertex;
public:
S3D_MATERIAL( S3D_MASTER* father, const wxString& name );
......
This diff is collapsed.
......@@ -24,12 +24,14 @@
/**
* @file 3d_mesh_model.h
* @brief
* @brief
*/
#ifndef __3D_MESH_MODEL_H__
#define __3D_MESH_MODEL_H__
#include <memory>
#include <boost/shared_ptr.hpp>
#include <vector>
#define GLM_FORCE_RADIANS
#include <gal/opengl/glm/glm.hpp>
......@@ -37,9 +39,14 @@
#include "3d_material.h"
#include "CBBox.h"
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
{
public:
......@@ -59,8 +66,9 @@ public:
std::vector< S3D_VERTEX > m_PerFaceColor;
std::vector< S3D_VERTEX > m_PerFaceNormalsNormalized;
std::vector< S3D_VERTEX > m_PerVertexNormalsNormalized;
std::vector< int > m_MaterialIndex;
std::vector< S3D_MESH * > childs;
std::vector< int > m_MaterialIndexPerFace;
std::vector< std::vector<int> > m_MaterialIndexPerVertex;
S3D_MESH_PTRS childs;
S3D_VERTEX m_translation;
glm::vec4 m_rotation;
......
......@@ -54,20 +54,8 @@ S3D_MODEL_PARSER *S3D_MODEL_PARSER::Create( S3D_MASTER* aMaster,
int S3D_MASTER::ReadData( S3D_MODEL_PARSER* aParser )
{
if( m_Shape3DName.IsEmpty() )
{
//DBG( printf("m_Shape3DName.IsEmpty") );
return -1;
}
if( m_Shape3DFullFilename.IsEmpty() )
{
//DBG( printf("m_Shape3DFullFilename.IsEmpty") );
return -1;
}
if( aParser == NULL )
{
if( m_Shape3DFullFilename.IsEmpty() || aParser == NULL )
return -1;
wxString filename = m_Shape3DFullFilename;
......@@ -107,7 +95,7 @@ void S3D_MASTER::Render( bool aIsRenderingJustNonTransparentObjects,
{
if( m_parser == NULL )
return;
double aVrmlunits_to_3Dunits = g_Parm_3D_Visu.m_BiuTo3Dunits * UNITS3D_TO_UNITSPCB;
glScalef( aVrmlunits_to_3Dunits, aVrmlunits_to_3Dunits, aVrmlunits_to_3Dunits );
......@@ -141,7 +129,7 @@ CBBOX &S3D_MASTER::getFastAABBox( )
{
if( !m_fastAABBox.IsInitialized() )
calcBBox();
return m_fastAABBox;
}
......@@ -152,7 +140,7 @@ void S3D_MASTER::calcBBox()
return;
bool firstBBox = true;
for( unsigned int idx = 0; idx < m_parser->childs.size(); idx++ )
if( firstBBox )
{
......@@ -175,7 +163,7 @@ void S3D_MASTER::calcBBox()
fullTransformMatrix = glm::translate( fullTransformMatrix, S3D_VERTEX( m_MatPosition.x * SCALE_3D_CONV,
m_MatPosition.y * SCALE_3D_CONV,
m_MatPosition.z * SCALE_3D_CONV) );
if( m_MatRotation.z != 0.0 )
fullTransformMatrix = glm::rotate( fullTransformMatrix, glm::radians(-(float)m_MatRotation.z), S3D_VERTEX( 0.0f, 0.0f, 1.0f ) );
if( m_MatRotation.y != 0.0 )
......@@ -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::scale( fullTransformMatrix, S3D_VERTEX( m_MatScale.x, m_MatScale.y, m_MatScale.z ) );
// Apply transformation
m_fastAABBox = m_BBox;
m_fastAABBox.ApplyTransformationAA( fullTransformMatrix );
......
......@@ -30,6 +30,7 @@
#define MODELPARSERS_H
#include <map>
#include <memory>
#include <vector>
#include <wx/string.h>
#include <3d_mesh_model.h>
......@@ -71,11 +72,11 @@ public:
* @param aFilename = the full file name of the file to load
* @return true if as succeeded
*/
virtual bool Load( const wxString& aFilename ) {
virtual bool Load( const wxString& aFilename ) {
return false;
};
std::vector< S3D_MESH* > childs;
S3D_MESH_PTRS childs;
private:
S3D_MASTER* master;
......@@ -118,16 +119,9 @@ public:
*/
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:
wxString m_Filename;
S3D_MESH* m_model;
S3D_MESH_PTR m_model;
std::vector< wxString > vrml_materials;
std::vector< wxString > vrml_points;
......@@ -143,7 +137,7 @@ private:
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
......@@ -164,7 +158,7 @@ public:
* @param aTransformationModel a model with translation, rotation and scale to apply to default root
* @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
......@@ -174,7 +168,7 @@ public:
wxString VRML2_representation();
private:
int loadFileModel( S3D_MESH *transformationModel );
int loadFileModel( S3D_MESH_PTR transformationModel );
int read_Transform();
int read_DEF();
int read_DEF_Coordinate();
......@@ -211,7 +205,7 @@ private:
bool m_normalPerVertex;
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;
wxFileName m_Filename;
VRML2_COORDINATE_MAP m_defCoordinateMap;
......@@ -266,7 +260,7 @@ private:
bool m_normalPerVertex;
bool colorPerVertex;
S3D_MESH* m_model;
S3D_MESH_PTR m_model;
FILE* m_file;
wxString m_Filename;
S3D_MODEL_PARSER* m_ModelParser;
......
......@@ -224,7 +224,7 @@ int ParseVertexList( FILE* File, std::vector<glm::vec3>& dst_vector )
glm::vec3 vertex;
while( ParseVertex( File, vertex ) == 3 )
while( ParseVertex( File, vertex ) )
{
dst_vector.push_back( vertex );
}
......
......@@ -51,7 +51,7 @@ VRML1_MODEL_PARSER::VRML1_MODEL_PARSER( S3D_MODEL_PARSER* aModelParser )
{
m_ModelParser = aModelParser;
m_Master = m_ModelParser->GetMaster();
m_model = NULL;
m_model.reset();
m_file = NULL;
m_normalPerVertex = true;
colorPerVertex = true;
......@@ -88,7 +88,7 @@ bool VRML1_MODEL_PARSER::Load( const wxString& aFilename )
if( strcmp( text, "Separator" ) == 0 )
{
m_model = new S3D_MESH();
m_model.reset( new S3D_MESH() );
m_ModelParser->childs.push_back( m_model );
read_separator();
}
......@@ -122,18 +122,18 @@ int VRML1_MODEL_PARSER::read_separator()
}
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 = new_mesh_model;
m_model.reset( new_mesh_model.get() );
// recursive
read_separator();
m_model = parent;
m_model.reset( parent.get() );
}
else if( ( *text != '}' ) )
{
......@@ -212,7 +212,7 @@ int VRML1_MODEL_PARSER::readCoordinate3()
// DBG( printf( " readCoordinate3\n" ) );
while( GetNextTag( m_file, text, sizeof(text) ) )
while( GetNextTag( m_file, text, sizeof( text ) ) )
{
if( *text == ']' )
{
......@@ -401,12 +401,14 @@ int VRML1_MODEL_PARSER::readIndexedFaceSet_coordIndex()
|| (coord[0] == coord[2])
|| (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 )
{
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 );
......@@ -422,16 +424,16 @@ int VRML1_MODEL_PARSER::readIndexedFaceSet_materialIndex()
{
// DBG( printf( " readIndexedFaceSet_materialIndex\n" ) );
m_model->m_MaterialIndex.clear();
m_model->m_MaterialIndexPerFace.clear();
int 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;
}
This diff is collapsed.
......@@ -45,14 +45,6 @@ VRML_MODEL_PARSER::VRML_MODEL_PARSER( S3D_MASTER* aMaster ) :
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 )
......
......@@ -52,20 +52,12 @@ static const wxChar* traceX3DParser = wxT( "KI_TRACE_X3D_PARSER" );
X3D_MODEL_PARSER::X3D_MODEL_PARSER( S3D_MASTER* aMaster ) :
S3D_MODEL_PARSER( aMaster )
{
m_model = NULL;
m_model.reset();
}
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 )
node_it != transforms.end();
node_it++ )
{
m_model = new S3D_MESH();
m_model.reset( new S3D_MESH() );
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,
const wxString aName,
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;
found.push( aParent );
......@@ -161,11 +131,9 @@ void X3D_MODEL_PARSER::GetChildsByName( wxXmlNode* aParent,
child = child->GetNext() )
{
if( child->GetName() == aName )
{
aResult.push_back( child );
}
found.push( child );
else // **NOTE** This function was changed here to get only the first depth of ocorrences
found.push( child );
}
found.pop();
......@@ -206,6 +174,9 @@ void X3D_MODEL_PARSER::readTransform( wxXmlNode* aTransformNode )
PROPERTY_MAP properties;
GetNodeProperties( aTransformNode, properties );
GetChildsByName( aTransformNode, wxT( "IndexedFaceSet" ), childnodes );
for( NODE_LIST::iterator node = childnodes.begin();
......@@ -438,7 +409,7 @@ void X3D_MODEL_PARSER::readIndexedFaceSet( wxXmlNode* aFaceNode,
double angle = 0.0;
wxStringTokenizer tokens( aTransformProps[ wxT( "rotation" ) ] );
double x, y, z;
double x = 0.0, y = 0.0, z = 0.0;
if( !( tokens.GetNextToken().ToDouble( &x )
&& tokens.GetNextToken().ToDouble( &y )
......@@ -559,7 +530,7 @@ void X3D_MODEL_PARSER::readIndexedFaceSet( wxXmlNode* aFaceNode,
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;
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
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." )
#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} )
if( UNIX )
......@@ -104,6 +104,21 @@ elseif( MINGW )
endif()
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
......@@ -553,10 +568,6 @@ endif()
# Include MinGW resource compiler.
include( MinGWResourceCompiler )
# Generate build system specific header file.
include( PerformFeatureChecks )
perform_feature_checks()
# Find GDI+ on windows if wxGraphicsContext is available.
if( MINGW AND USE_WX_GRAPHICS_CONTEXT )
find_package( GdiPlus )
......
......@@ -147,7 +147,7 @@ if(WIN32 AND NOT CYGWIN)
set(SSL_EAY_LIBRARY_DEBUG "${SSL_EAY_DEBUG}")
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(SSL_EAY)
......
......@@ -58,17 +58,8 @@
/// The legacy file format revision of the *.brd file created by this build
#define LEGACY_BOARD_FILE_VERSION 2
/// The install prefix defined in CMAKE_INSTALL_PREFIX.
#define DEFAULT_INSTALL_PATH "@CMAKE_INSTALL_PREFIX@"
/// 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 install prefix defined during CMake configuration or fall back to CMAKE_INSTALL_PREFIX.
#define DEFAULT_INSTALL_PATH "@DEFAULT_INSTALL_PATH@"
/// The wxPython version found during configuration.
#if defined( KICAD_SCRIPTING_WXPYTHON )
......
......@@ -535,6 +535,8 @@ set( BMAPS_MID
up
use_3D_copper_thickness
via
via_buried
via_microvia
via_sketch
warning
web_support
......
......@@ -8,45 +8,44 @@
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, 0x02, 0x51, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xa5, 0x96, 0x4f, 0x6c, 0x4c,
0x51, 0x14, 0xc6, 0x7f, 0xa3, 0xff, 0xa4, 0xd5, 0x4a, 0x34, 0xb5, 0x20, 0x4d, 0xc5, 0x42, 0x5a,
0x74, 0xa9, 0x34, 0x44, 0x42, 0x10, 0x82, 0x48, 0x2c, 0x84, 0x88, 0x58, 0x58, 0xd0, 0x8d, 0xda,
0x48, 0x49, 0xa4, 0xe9, 0x06, 0x8b, 0x62, 0x31, 0xb4, 0xe3, 0xdd, 0x73, 0xdf, 0x8c, 0x69, 0xaa,
0x99, 0x94, 0x11, 0xed, 0x58, 0xb1, 0x60, 0x67, 0x6d, 0x65, 0x6b, 0x63, 0x67, 0x61, 0x23, 0xb1,
0x20, 0xd7, 0xe6, 0x78, 0xf3, 0x5a, 0x33, 0xef, 0xde, 0xc6, 0xe2, 0x25, 0x2f, 0x99, 0xef, 0xe4,
0x77, 0xee, 0x79, 0xe7, 0xfb, 0xee, 0xe0, 0x9c, 0x23, 0xf4, 0x61, 0x8a, 0x75, 0x6b, 0xd2, 0x43,
0x2e, 0x79, 0x0f, 0x2e, 0x12, 0xc6, 0x10, 0xde, 0x11, 0xd3, 0x1d, 0xa4, 0x37, 0x5c, 0xc4, 0x30,
0xc1, 0x7b, 0x5a, 0x83, 0x41, 0x08, 0x67, 0x11, 0x7e, 0x23, 0x38, 0x84, 0x9b, 0x01, 0x90, 0x13,
0x08, 0x35, 0x84, 0x1a, 0x31, 0x87, 0x82, 0x40, 0x58, 0x0e, 0x22, 0xfc, 0x54, 0xc8, 0x0b, 0xdf,
0xf8, 0x88, 0x19, 0x45, 0x58, 0x56, 0xd0, 0x58, 0xd0, 0xe8, 0x88, 0x18, 0x46, 0xf8, 0xae, 0x90,
0x0f, 0xe4, 0xe9, 0xf0, 0x9c, 0x64, 0x17, 0x42, 0x15, 0xa1, 0x86, 0xe5, 0x36, 0x2e, 0xe0, 0x1b,
0x61, 0x19, 0x40, 0xf8, 0xaa, 0x90, 0x4f, 0x44, 0x6c, 0xf4, 0x9c, 0x7c, 0x00, 0xa1, 0xa2, 0x27,
0xb9, 0x4f, 0x44, 0xdb, 0x8a, 0xdf, 0x1b, 0x16, 0x95, 0xe9, 0x45, 0xf8, 0xac, 0x90, 0x2f, 0xc4,
0x6c, 0xc9, 0x84, 0x14, 0xe9, 0x43, 0x78, 0xa6, 0x90, 0x27, 0xcc, 0xd1, 0xf5, 0x8f, 0xa6, 0xc1,
0xb8, 0x3a, 0x11, 0x3e, 0x2a, 0xe4, 0x1b, 0x11, 0x83, 0x9e, 0x6f, 0xd2, 0x8d, 0x50, 0x50, 0x48,
0x91, 0x32, 0xbd, 0x0d, 0x75, 0xab, 0x7c, 0xd2, 0x8a, 0xe1, 0x8d, 0x42, 0x7e, 0x10, 0x33, 0x9a,
0x09, 0xc9, 0xd3, 0x81, 0x61, 0x5a, 0x21, 0x0b, 0xcc, 0xd0, 0xdf, 0x54, 0xbb, 0x6a, 0xce, 0x25,
0x85, 0xfc, 0xc2, 0x70, 0x2a, 0x13, 0xb2, 0x48, 0x0b, 0x86, 0x49, 0x85, 0x54, 0x11, 0x86, 0x32,
0xf5, 0xa9, 0x8d, 0xb9, 0xa7, 0x10, 0x87, 0x70, 0x25, 0xc0, 0x5b, 0xd7, 0x75, 0xbb, 0x96, 0x88,
0xd8, 0xeb, 0xd5, 0x6b, 0xd1, 0x85, 0x04, 0x62, 0xb8, 0x13, 0x00, 0x39, 0x93, 0x32, 0xe4, 0xb1,
0x20, 0xd3, 0x3b, 0xe7, 0x60, 0x86, 0x0d, 0x08, 0x6f, 0x11, 0x66, 0x9b, 0x0a, 0x0b, 0x6c, 0x45,
0x38, 0xec, 0x9c, 0x83, 0x79, 0x7a, 0x30, 0x3c, 0xc2, 0x72, 0x3e, 0xc3, 0x53, 0x3b, 0xd2, 0x27,
0x4d, 0xcf, 0xbc, 0xbd, 0x99, 0xeb, 0xb1, 0x6c, 0xc2, 0x10, 0xeb, 0xa8, 0x8e, 0xeb, 0xe2, 0xb4,
0x7b, 0x9a, 0x7a, 0x8e, 0x65, 0x09, 0x61, 0x5f, 0x58, 0x04, 0x4d, 0xd3, 0x85, 0xe1, 0xb1, 0x8e,
0xaa, 0x4c, 0x91, 0x3e, 0x8f, 0x71, 0xeb, 0x4d, 0x19, 0x9e, 0xfe, 0x0d, 0x61, 0x5f, 0x04, 0xb5,
0xe9, 0x92, 0xd4, 0x10, 0x2a, 0x14, 0xd8, 0xe6, 0xd1, 0x77, 0x22, 0xe4, 0x93, 0xa6, 0x0a, 0x6c,
0xf6, 0x47, 0x90, 0x23, 0x87, 0x70, 0x4b, 0x8b, 0x5e, 0x61, 0xd9, 0xed, 0x6d, 0x4a, 0xb8, 0x9b,
0x34, 0x55, 0x5a, 0xd9, 0x54, 0x56, 0x40, 0x5e, 0xd3, 0xa2, 0x65, 0x2c, 0xfb, 0xb3, 0x37, 0x8a,
0x1c, 0x96, 0x89, 0xa4, 0xa9, 0x88, 0x61, 0x6f, 0x04, 0x29, 0xe4, 0x5c, 0xb2, 0xbe, 0x96, 0x93,
0x01, 0x57, 0xc9, 0xd5, 0xa4, 0xa9, 0x88, 0x03, 0xde, 0x64, 0x50, 0x8f, 0x1c, 0x4d, 0x41, 0x2e,
0x05, 0x5c, 0x72, 0xe9, 0xa6, 0x4e, 0x87, 0x46, 0xd0, 0x88, 0xae, 0x64, 0x0d, 0xc3, 0x78, 0x00,
0xe4, 0x48, 0x0a, 0x72, 0x39, 0x2c, 0x82, 0x22, 0x06, 0x53, 0x97, 0xd6, 0x24, 0x8b, 0xb4, 0x78,
0x20, 0x7b, 0x10, 0x5e, 0x2b, 0xe8, 0x46, 0x68, 0x32, 0xf4, 0x23, 0x2c, 0x68, 0xd1, 0x03, 0xef,
0x4d, 0x1a, 0x31, 0x88, 0xe5, 0xa5, 0xea, 0xa7, 0x7c, 0x4d, 0xd5, 0x41, 0x45, 0x76, 0x22, 0x54,
0xd2, 0x06, 0xf3, 0x7c, 0xfc, 0x11, 0x84, 0x2a, 0x96, 0x87, 0x94, 0x58, 0x1f, 0x9c, 0x75, 0xce,
0x39, 0x98, 0x65, 0x3b, 0x73, 0x75, 0x83, 0x05, 0x04, 0xeb, 0x10, 0xf3, 0xf4, 0x04, 0xeb, 0xd7,
0xf2, 0x87, 0xf0, 0x7f, 0x9e, 0x3f, 0x6d, 0x57, 0x45, 0xa7, 0xea, 0xac, 0xbd, 0xc8, 0x00, 0x00,
0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
0xce, 0x00, 0x00, 0x02, 0x47, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xa5, 0x96, 0x3b, 0x68, 0x14,
0x51, 0x14, 0x86, 0xbf, 0x35, 0x2f, 0x51, 0x13, 0x91, 0x10, 0x0b, 0x25, 0xac, 0x58, 0xc8, 0xfa,
0x48, 0xe9, 0x62, 0x10, 0x04, 0xc5, 0x07, 0x62, 0x40, 0x10, 0x14, 0x15, 0xb4, 0xb1, 0x50, 0x9b,
0x60, 0x63, 0x44, 0xf0, 0xd5, 0xa8, 0x20, 0xb1, 0x70, 0x35, 0xbb, 0x99, 0x7b, 0xee, 0x64, 0x4d,
0x70, 0x31, 0x24, 0x11, 0x93, 0xc1, 0x4a, 0x0b, 0xed, 0xac, 0xad, 0x6c, 0x6d, 0xec, 0x2c, 0x6c,
0x04, 0x0b, 0xe5, 0x5a, 0x78, 0x9c, 0x8c, 0x71, 0x77, 0xee, 0x5d, 0x2c, 0x06, 0x06, 0xe6, 0x3f,
0x7c, 0xe7, 0x7d, 0x06, 0xe7, 0x1c, 0xa1, 0x0f, 0x77, 0x58, 0xd5, 0x96, 0x1e, 0x0a, 0xe9, 0x7b,
0xb0, 0x91, 0x70, 0x19, 0xe1, 0x0d, 0x31, 0xbd, 0x41, 0x7a, 0xcb, 0x59, 0x2c, 0x63, 0xbc, 0xa5,
0x33, 0x18, 0x84, 0x70, 0x02, 0xe1, 0x27, 0x82, 0x43, 0xb8, 0xea, 0xd5, 0x1b, 0x8e, 0x22, 0x24,
0x08, 0x09, 0x11, 0xfb, 0x83, 0x40, 0x58, 0xf6, 0x21, 0x7c, 0x57, 0xc8, 0xbc, 0x2f, 0x7d, 0x4c,
0x32, 0x8c, 0x61, 0x09, 0x21, 0xc1, 0x70, 0x29, 0x28, 0x75, 0x44, 0x0c, 0x21, 0x7c, 0x55, 0xc8,
0x3b, 0x2a, 0xf4, 0x78, 0x22, 0xd9, 0x89, 0x65, 0x41, 0x21, 0xd7, 0x71, 0x01, 0x35, 0xc2, 0x52,
0x44, 0xf8, 0xac, 0x90, 0x0f, 0x44, 0xac, 0xf7, 0x44, 0x5e, 0xc4, 0xf0, 0x5c, 0x53, 0x76, 0x9f,
0x88, 0xae, 0xbf, 0xbe, 0x37, 0x35, 0x9a, 0xa6, 0x1f, 0xe1, 0xa3, 0x42, 0x3e, 0x11, 0xb3, 0x29,
0x17, 0x32, 0xc5, 0x00, 0x96, 0x3a, 0x42, 0x82, 0xe5, 0x31, 0x33, 0xac, 0xfd, 0x47, 0xd3, 0x24,
0x5d, 0x6b, 0x10, 0xde, 0x2b, 0xe4, 0x0b, 0x11, 0xa5, 0x5c, 0x48, 0x4c, 0x2f, 0x42, 0x55, 0xd3,
0x15, 0xf3, 0x84, 0xfe, 0xa6, 0xba, 0x15, 0x73, 0xd2, 0x89, 0xe1, 0x95, 0x42, 0xbe, 0x11, 0x33,
0x9c, 0x0b, 0xa9, 0xd0, 0x83, 0xf0, 0x40, 0x23, 0x69, 0x30, 0xc1, 0x60, 0x4b, 0xed, 0x8a, 0x3c,
0xd7, 0x15, 0xf2, 0x03, 0xc3, 0x48, 0x2e, 0x64, 0x8e, 0x0e, 0x84, 0x9b, 0x1a, 0xc9, 0x02, 0x75,
0x4f, 0xe4, 0x99, 0x8e, 0xb9, 0xa7, 0x10, 0x87, 0x70, 0x21, 0x60, 0xb6, 0x46, 0xb5, 0xf0, 0x8b,
0x58, 0xca, 0x5e, 0xbd, 0x1a, 0x9d, 0x49, 0x21, 0x86, 0x1b, 0x01, 0x90, 0xe3, 0x99, 0x81, 0x3c,
0x1c, 0x34, 0xf4, 0xce, 0x39, 0x98, 0x60, 0x1d, 0xc2, 0x6b, 0x84, 0x6a, 0x4b, 0x61, 0x8d, 0xcd,
0x08, 0x07, 0xb4, 0x36, 0x7d, 0x58, 0x1e, 0x62, 0x38, 0x9d, 0x33, 0x53, 0xdb, 0xb2, 0x91, 0x66,
0x73, 0xde, 0xdd, 0x6a, 0xea, 0x69, 0xb0, 0x01, 0xc1, 0x6a, 0x3d, 0x8e, 0x68, 0xe3, 0x74, 0x7b,
0x9c, 0x7a, 0x86, 0xb0, 0x88, 0xb0, 0x27, 0x6c, 0x05, 0xfd, 0x6e, 0xf7, 0x8a, 0xa6, 0xea, 0x29,
0x53, 0x0c, 0xe4, 0xea, 0xb3, 0x4e, 0x09, 0xb5, 0x3f, 0x4b, 0xd8, 0x07, 0xe9, 0x42, 0xb8, 0xab,
0x46, 0xb3, 0x58, 0x8a, 0x01, 0x4e, 0x3d, 0x52, 0xfd, 0x34, 0x35, 0x36, 0xfa, 0x57, 0x90, 0xa3,
0x80, 0xe5, 0x9a, 0x1a, 0xbd, 0xc0, 0xb2, 0xab, 0x2d, 0xa7, 0xea, 0x6c, 0xf1, 0xae, 0x20, 0x9d,
0xa9, 0x8b, 0x5a, 0x93, 0x25, 0x2c, 0x7b, 0xf3, 0x3b, 0x8a, 0x02, 0x26, 0xe3, 0x54, 0xc4, 0x90,
0x77, 0x05, 0x69, 0xc7, 0x9c, 0xca, 0xb4, 0xef, 0xb1, 0x80, 0x3a, 0x7a, 0x9d, 0x6a, 0x36, 0x23,
0x87, 0x52, 0x88, 0xe1, 0x5c, 0xc0, 0xbd, 0x3a, 0x99, 0xd1, 0x8f, 0x84, 0xae, 0xa0, 0xb2, 0xb6,
0x64, 0x82, 0x30, 0x1a, 0x70, 0x49, 0x0f, 0xa6, 0x10, 0xe1, 0x7c, 0xd8, 0x0a, 0x8a, 0x28, 0x61,
0xd2, 0xa3, 0x75, 0x8b, 0x39, 0x3a, 0x3c, 0x90, 0xdd, 0x18, 0x5e, 0x2a, 0xe4, 0x4a, 0xe8, 0x66,
0x18, 0xc4, 0xd2, 0x50, 0xa3, 0x71, 0xef, 0x25, 0x8d, 0x28, 0x21, 0xcc, 0xab, 0xfe, 0xb6, 0xcf,
0xa9, 0x65, 0xd0, 0x24, 0x3b, 0x10, 0x66, 0xb3, 0x03, 0xe6, 0xa9, 0x4b, 0x59, 0x4f, 0xf6, 0x38,
0x75, 0x56, 0x07, 0xef, 0x3a, 0xe7, 0x1c, 0x54, 0xd9, 0xca, 0xcc, 0xf2, 0x80, 0x05, 0x2c, 0xd6,
0xed, 0x54, 0xe8, 0x0b, 0xd6, 0xb7, 0xf3, 0x43, 0xf8, 0x3f, 0xcf, 0x2f, 0x78, 0xbb, 0x45, 0x34,
0xcd, 0x8e, 0xb0, 0xa7, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
};
const BITMAP_OPAQUE array_line_xpm[1] = {{ png, sizeof( png ), "array_line_xpm" }};
......
This diff is collapsed.
......@@ -8,30 +8,30 @@
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, 0x01, 0x59, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xed, 0x96, 0xb1, 0x6a, 0x02,
0x41, 0x10, 0x86, 0x07, 0x7c, 0x06, 0xad, 0x0c, 0xd8, 0x48, 0xb0, 0x31, 0x36, 0xd6, 0x22, 0x58,
0x5a, 0xa4, 0xb8, 0x4a, 0xc8, 0x1b, 0x58, 0xa5, 0xca, 0x95, 0xa9, 0x7c, 0x82, 0x20, 0xec, 0xed,
0xa9, 0x98, 0xce, 0xca, 0x60, 0x93, 0xd6, 0x77, 0xb1, 0xf0, 0x1d, 0x0c, 0x5c, 0x66, 0x6f, 0xe6,
0xbc, 0xec, 0xe6, 0x76, 0xdd, 0x1c, 0x41, 0x10, 0xee, 0xe0, 0x67, 0x6f, 0x66, 0xff, 0xe1, 0x63,
0xef, 0x98, 0x61, 0x21, 0x49, 0x12, 0xb8, 0x86, 0xf0, 0x91, 0x53, 0x80, 0xe8, 0xe8, 0x2f, 0xe5,
0x17, 0x63, 0x7c, 0x7f, 0xf7, 0x97, 0xf2, 0x43, 0xf4, 0x82, 0x42, 0x64, 0x74, 0x40, 0x7d, 0xa2,
0xf6, 0x1c, 0x67, 0xda, 0x73, 0xfe, 0xc0, 0xb1, 0xf2, 0x07, 0xa8, 0x1d, 0x6a, 0x85, 0xe0, 0x57,
0x5c, 0x67, 0x1c, 0x67, 0x9a, 0x71, 0x7e, 0xc5, 0x71, 0x90, 0x81, 0xbe, 0x90, 0xda, 0xa7, 0x23,
0xce, 0x5b, 0x3a, 0x68, 0xde, 0xa2, 0xbc, 0xe8, 0x93, 0x2f, 0x03, 0xc9, 0x0f, 0x80, 0x65, 0x9b,
0xf6, 0xd6, 0x0d, 0x1d, 0xb4, 0x6e, 0x50, 0x7e, 0xd9, 0x26, 0x1f, 0x81, 0x3a, 0x00, 0xf1, 0x30,
0xff, 0x96, 0xc5, 0x20, 0xda, 0x8b, 0x87, 0xe4, 0x7f, 0xbb, 0xc3, 0xb5, 0x9b, 0xe7, 0x8b, 0x41,
0xb4, 0x17, 0x75, 0x53, 0xff, 0xef, 0x9f, 0x66, 0x07, 0xd9, 0x7f, 0xb4, 0x1d, 0x74, 0xf6, 0x54,
0xa0, 0x5b, 0x04, 0x89, 0x91, 0x0e, 0x12, 0xa3, 0xcb, 0x20, 0xd1, 0xd3, 0x41, 0xa2, 0xe7, 0x04,
0xa1, 0xe1, 0x19, 0x8d, 0x27, 0xa3, 0x61, 0x4f, 0x2a, 0x6f, 0x87, 0xc8, 0x47, 0xf4, 0x6c, 0x8d,
0x86, 0xdd, 0xaa, 0xbc, 0x03, 0x24, 0x27, 0xdc, 0x90, 0x86, 0xe4, 0xc4, 0x71, 0x9a, 0x01, 0x4f,
0x0a, 0x43, 0x62, 0x60, 0xcc, 0xba, 0xf8, 0xbe, 0xd8, 0x68, 0x93, 0xf2, 0x97, 0xa9, 0xc9, 0xe7,
0x96, 0xaf, 0x82, 0x72, 0x35, 0xe7, 0x22, 0xf9, 0x84, 0x6b, 0x13, 0xe9, 0x0f, 0xba, 0x29, 0x8d,
0x9b, 0xbc, 0x6f, 0x80, 0xfe, 0x52, 0x93, 0xce, 0x2f, 0x19, 0x02, 0x6c, 0x6a, 0xee, 0x01, 0xb9,
0xa9, 0x91, 0x4f, 0xf9, 0x4b, 0xd4, 0x94, 0xe9, 0x89, 0x7f, 0xea, 0xa3, 0x0a, 0x54, 0x81, 0xd2,
0x82, 0x45, 0x9d, 0x2f, 0x15, 0x3f, 0x8a, 0x54, 0xbc, 0xa8, 0xdb, 0x21, 0x7e, 0x35, 0xe6, 0xdc,
0x0a, 0x2d, 0xd7, 0xa5, 0xd0, 0x31, 0xeb, 0xbc, 0x6a, 0xe0, 0x5a, 0x17, 0xc8, 0x6f, 0x28, 0x7d,
0x35, 0x0d, 0xec, 0xf1, 0xfb, 0x82, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42,
0x60, 0x82,
0xce, 0x00, 0x00, 0x01, 0x5a, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xed, 0x96, 0xbf, 0x6a, 0xc2,
0x50, 0x14, 0x87, 0x3f, 0xf0, 0x19, 0x74, 0xaa, 0xe0, 0x22, 0xd2, 0x41, 0x9c, 0x9c, 0x25, 0xe0,
0xe6, 0xe2, 0xe0, 0x24, 0xf8, 0x06, 0x4e, 0x4e, 0xe9, 0xe6, 0xe6, 0x13, 0x88, 0xc9, 0xbd, 0x37,
0x06, 0x1c, 0x5d, 0x2c, 0x9d, 0xba, 0xfa, 0x2e, 0x0e, 0x7d, 0x07, 0x0b, 0xe9, 0x70, 0xae, 0xb1,
0x49, 0x73, 0x6d, 0x1a, 0x4a, 0xa1, 0xe0, 0xf0, 0x1b, 0xce, 0x9f, 0x1f, 0x1f, 0xc9, 0xe1, 0x1c,
0x2e, 0x49, 0x92, 0xf0, 0x17, 0x02, 0xcc, 0x1c, 0xf4, 0x5b, 0x79, 0x99, 0x39, 0x98, 0x11, 0xa8,
0x5d, 0x79, 0x99, 0x11, 0xa0, 0x7d, 0xd0, 0x09, 0xe8, 0x13, 0xe8, 0x57, 0xd0, 0x47, 0x1b, 0x5f,
0x74, 0xb4, 0xf9, 0x93, 0x8d, 0x7d, 0xd0, 0x13, 0xd0, 0x2f, 0x60, 0x62, 0xd0, 0x4b, 0xd0, 0x2b,
0x89, 0x53, 0xad, 0x24, 0x6f, 0x62, 0x1b, 0x4f, 0x2e, 0xa0, 0x77, 0x50, 0x7d, 0xf9, 0xc4, 0x4d,
0x2b, 0x0b, 0xda, 0xb4, 0x24, 0xaf, 0xfa, 0xd2, 0x97, 0x82, 0x9e, 0x21, 0x68, 0x4b, 0x6d, 0xd7,
0xc8, 0x82, 0x76, 0x0d, 0xc9, 0x07, 0x6d, 0xe9, 0x13, 0xd0, 0x23, 0x44, 0xde, 0xf5, 0x5f, 0x16,
0x83, 0xa4, 0x16, 0x79, 0xd2, 0xbf, 0x6e, 0x42, 0xdc, 0xbd, 0xe6, 0x8b, 0x41, 0x52, 0x8b, 0xbb,
0xb0, 0x6e, 0x16, 0x0c, 0xcd, 0x0d, 0x72, 0x0f, 0xda, 0x0d, 0x4a, 0x7b, 0xee, 0xa0, 0xff, 0x08,
0x52, 0xc3, 0x2c, 0x48, 0x0d, 0xbf, 0x07, 0x45, 0xbd, 0x2c, 0x28, 0xea, 0xdd, 0x04, 0x81, 0x5a,
0x80, 0x3e, 0xe7, 0x16, 0xf6, 0x0c, 0x6a, 0xe1, 0x86, 0x84, 0x63, 0x50, 0x87, 0x2c, 0x48, 0x1d,
0x20, 0x1c, 0xdf, 0x00, 0x99, 0xa9, 0x5d, 0xc8, 0x9c, 0xcc, 0xd4, 0x0d, 0x52, 0x03, 0xbb, 0xc0,
0x39, 0xa9, 0x41, 0xee, 0xd6, 0x45, 0x9d, 0xe2, 0x46, 0x97, 0xa2, 0x4e, 0x35, 0x4f, 0x7a, 0xb7,
0x4a, 0x6b, 0x52, 0xcd, 0x93, 0x9a, 0xd4, 0x0c, 0xf4, 0x03, 0x04, 0xb9, 0xc1, 0x06, 0x3d, 0xc9,
0xab, 0xd9, 0x57, 0xd0, 0x4f, 0x3c, 0x84, 0x1e, 0xa8, 0x27, 0xd8, 0xd7, 0x6e, 0x1f, 0xc8, 0x7d,
0x4d, 0xfa, 0x42, 0xaf, 0x92, 0xa7, 0xca, 0x4e, 0xfc, 0xd2, 0x1e, 0xdd, 0x41, 0x77, 0x50, 0x92,
0x00, 0xdb, 0xba, 0x7d, 0x6c, 0x7c, 0x5e, 0xb6, 0x25, 0x6c, 0xeb, 0x6e, 0x48, 0x39, 0x4f, 0xce,
0xa4, 0xfd, 0xe2, 0xe7, 0x92, 0xf6, 0xdd, 0xa0, 0x72, 0x1e, 0xfe, 0xea, 0x01, 0xf9, 0x01, 0xbd,
0x5c, 0x34, 0x23, 0x26, 0x7e, 0x75, 0xbb, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae,
0x42, 0x60, 0x82,
};
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
add_library( gal STATIC ${GAL_SRCS} )
add_dependencies( gal shader_headers )
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
......@@ -247,7 +252,7 @@ set( COMMON_SRCS
)
add_library( common STATIC ${COMMON_SRCS} )
add_dependencies( common lib-dependencies )
target_link_libraries( common ${Boost_LIBRARIES} )
set( PCB_COMMON_SRCS
base_screen.cpp
......
......@@ -632,13 +632,6 @@ void EDA_BASE_FRAME::CopyVersionInfoToClipboard( wxCommandEvent& event )
tmp << wxT( "OFF\n" );
#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)") );
wxTheClipboard->SetData( new wxTextDataObject( tmp ) );
......@@ -699,7 +692,7 @@ void EDA_BASE_FRAME::CheckForAutoSaveFile( const wxFileName& aFileName,
wxFileName autoSaveFileName = aFileName;
// Check for auto save file.
autoSaveFileName.SetName( wxT( "$" ) + aFileName.GetName() );
autoSaveFileName.SetName( AUTOSAVE_PREFIX_FILENAME + aFileName.GetName() );
wxLogTrace( traceAutoSave,
wxT( "Checking for auto save file " ) + autoSaveFileName.GetFullPath() );
......@@ -708,9 +701,10 @@ void EDA_BASE_FRAME::CheckForAutoSaveFile( const wxFileName& aFileName,
return;
wxString msg = wxString::Format( _(
"Well this is potentially embarrassing! It appears that the last time "
"you were editing the file '%s' it was not saved properly. Do you wish to restore the last "
"edits you made?" ),
"Well this is potentially embarrassing!\n"
"It appears that the last time you were editing the file\n"
"'%s'\n"
"it was not saved properly. Do you wish to restore the last saved edits you made?" ),
GetChars( aFileName.GetFullName() )
);
......
......@@ -30,7 +30,7 @@
#endif
#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
/**
......
......@@ -201,7 +201,7 @@ static void InitKiCadAboutNew( AboutAppInfo& info )
<< HtmlNewline( 4 )
<< _( "The complete KiCad EDA Suite is released under the" ) << HtmlNewline( 2 )
<< 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>" );
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/
//
// PLEASE DO "NOT" EDIT THIS FILE!
......@@ -65,23 +65,18 @@ dialog_about_base::dialog_about_base( wxWindow* parent, wxWindowID id, const wxS
bSizer1->Add( m_auiNotebook, 2, wxEXPAND | wxALL, 5 );
m_buttonOK = new wxButton( this, wxID_CANCEL, _("OK"), wxDefaultPosition, wxDefaultSize, 0 );
m_buttonOK->SetDefault();
bSizer1->Add( m_buttonOK, 0, wxALIGN_CENTER|wxALL, 5 );
m_sdbSizer = new wxStdDialogButtonSizer();
m_sdbSizerOK = new wxButton( this, wxID_OK );
m_sdbSizer->AddButton( m_sdbSizerOK );
m_sdbSizer->Realize();
bSizer1->Add( m_sdbSizer, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 );
this->SetSizer( bSizer1 );
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()
{
// 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" ?>
<wxFormBuilder_Project>
<FileVersion major="1" minor="11" />
<FileVersion major="1" minor="13" />
<object class="Project" expanded="1">
<property name="class_decoration"></property>
<property name="code_generation">C++</property>
......@@ -44,7 +44,7 @@
<property name="minimum_size">-1,-1</property>
<property name="name">dialog_about_base</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="subclass"></property>
<property name="title">About...</property>
......@@ -61,7 +61,7 @@
<event name="OnAuiPaneRestore"></event>
<event name="OnAuiRender"></event>
<event name="OnChar"></event>
<event name="OnClose">OnClose</event>
<event name="OnClose"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnHibernate"></event>
......@@ -88,7 +88,7 @@
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
<object class="wxBoxSizer" expanded="0">
<object class="wxBoxSizer" expanded="1">
<property name="minimum_size"></property>
<property name="name">bSizer1</property>
<property name="orient">wxVERTICAL</property>
......@@ -720,92 +720,30 @@
<event name="OnUpdateUI"></event>
</object>
</object>
<object class="sizeritem" expanded="0">
<object class="sizeritem" expanded="1">
<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>
<object class="wxButton" expanded="0">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></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>
<object class="wxStdDialogButtonSizer" expanded="1">
<property name="Apply">0</property>
<property name="Cancel">0</property>
<property name="ContextHelp">0</property>
<property name="Help">0</property>
<property name="No">0</property>
<property name="OK">1</property>
<property name="Save">0</property>
<property name="Yes">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_buttonOK</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">private</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="show">1</property>
<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>
<property name="name">m_sdbSizer</property>
<property name="permission">protected</property>
<event name="OnApplyButtonClick"></event>
<event name="OnCancelButtonClick"></event>
<event name="OnContextHelpButtonClick"></event>
<event name="OnHelpButtonClick"></event>
<event name="OnNoButtonClick"></event>
<event name="OnOKButtonClick"></event>
<event name="OnSaveButtonClick"></event>
<event name="OnYesButtonClick"></event>
</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/
//
// PLEASE DO "NOT" EDIT THIS FILE!
......@@ -35,7 +35,6 @@
class dialog_about_base : public wxDialog
{
private:
wxButton* m_buttonOK;
protected:
wxStaticBitmap* m_bitmapApp;
......@@ -44,15 +43,12 @@ class dialog_about_base : public wxDialog
wxStaticText* m_staticTextBuildVersion;
wxStaticText* m_staticTextLibVersion;
wxAuiNotebook* m_auiNotebook;
// Virtual event handlers, overide them in your derived class
virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
virtual void OnOkClick( wxCommandEvent& event ) { event.Skip(); }
wxStdDialogButtonSizer* m_sdbSizer;
wxButton* m_sdbSizerOK;
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();
};
......
......@@ -275,7 +275,7 @@ HOTKEYS_EDITOR_DIALOG::HOTKEYS_EDITOR_DIALOG( EDA_BASE_FRAME* aParent,
for( section = m_hotkeys; section->m_HK_InfoList; section++ )
{
m_hotkeySectionPages.push_back( new HOTKEY_SECTION_PAGE( this, m_hotkeySections,
_( *section->m_Title ),
wxGetTranslation( *section->m_Title ),
section ) );
}
......
This diff is collapsed.
......@@ -1495,7 +1495,9 @@ void EDA_DRAW_PANEL::CallMouseCapture( wxDC* aDC, const wxPoint& aPosition, bool
void EDA_DRAW_PANEL::CallEndMouseCapture( wxDC* aDC )
{
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
EDA_DRAW_PANEL_GAL::~EDA_DRAW_PANEL_GAL()
{
if( m_painter )
delete m_painter;
if( m_viewControls )
delete m_viewControls;
if( m_view )
delete m_view;
if( m_gal )
delete m_gal;
delete m_painter;
delete m_viewControls;
delete m_view;
delete m_gal;
}
......@@ -194,42 +187,29 @@ void EDA_DRAW_PANEL_GAL::SetEventDispatcher( TOOL_DISPATCHER* aEventDispatcher )
m_eventDispatcher = aEventDispatcher;
#if wxCHECK_VERSION( 3, 0, 0 )
if( m_eventDispatcher )
{
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 ) );
}
const wxEventType eventTypes[] = { wxEVT_TOOL };
#else
const wxEventType eventTypes[] = { wxEVT_COMMAND_MENU_SELECTED, wxEVT_COMMAND_TOOL_CLICKED };
#endif
if( m_eventDispatcher )
{
m_parent->Connect( wxEVT_COMMAND_MENU_SELECTED,
wxCommandEventHandler( TOOL_DISPATCHER::DispatchWxCommand ),
NULL, m_eventDispatcher );
m_parent->Connect( wxEVT_COMMAND_TOOL_CLICKED,
wxCommandEventHandler( TOOL_DISPATCHER::DispatchWxCommand ),
NULL, m_eventDispatcher );
BOOST_FOREACH( wxEventType type, eventTypes )
{
m_parent->Connect( type, 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_COMMAND_MENU_SELECTED,
wxCommandEventHandler( TOOL_DISPATCHER::DispatchWxCommand ),
NULL, m_eventDispatcher ) );
while( m_parent->Disconnect( wxEVT_COMMAND_TOOL_CLICKED,
wxCommandEventHandler( TOOL_DISPATCHER::DispatchWxCommand ),
NULL, m_eventDispatcher ) );
BOOST_FOREACH( wxEventType type, eventTypes )
{
// While loop is used to be sure that all event handlers are removed.
while( m_parent->Disconnect( type,
wxCommandEventHandler( TOOL_DISPATCHER::DispatchWxCommand ),
NULL, m_eventDispatcher ) );
}
}
#endif
}
......@@ -316,7 +296,7 @@ bool EDA_DRAW_PANEL_GAL::SwitchBackend( GalType aGalType )
m_backend = aGalType;
}
catch (std::runtime_error& err)
catch( std::runtime_error& err )
{
DisplayError( m_parent, wxString( err.what() ) );
return false;
......
......@@ -36,46 +36,29 @@
#endif /* __WXDEBUG__ */
#include <limits>
#include <boost/bind.hpp>
using namespace KIGFX;
// Prototypes
void InitTesselatorCallbacks( GLUtesselator* aTesselator );
const int glAttributes[] = { WX_GL_RGBA, WX_GL_DOUBLEBUFFER, WX_GL_DEPTH_SIZE, 24, 0 };
static void InitTesselatorCallbacks( GLUtesselator* aTesselator );
const int glAttributes[] = { WX_GL_RGBA, WX_GL_DOUBLEBUFFER, WX_GL_DEPTH_SIZE, 16, 0 };
wxGLContext* OPENGL_GAL::glContext = NULL;
OPENGL_GAL::OPENGL_GAL( wxWindow* aParent, wxEvtHandler* aMouseListener,
wxEvtHandler* aPaintListener, const wxString& aName ) :
wxGLCanvas( aParent, wxID_ANY, (int*) glAttributes, wxDefaultPosition, wxDefaultSize,
wxEXPAND, aName ),
parentWindow( aParent ),
mouseListener( aMouseListener ),
paintListener( aPaintListener ),
cachedManager( true ),
nonCachedManager( false ),
overlayManager( false )
{
// Create the OpenGL-Context
if( glContext == NULL )
glContext = new wxGLContext( this );
aParent->Show(); // wxWidgets require the window to be visible to set its GL context
// 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!" );
// Check if OpenGL requirements are met
runTest();
// Make VBOs use shaders
cachedManager.SetShader( shader );
......@@ -88,7 +71,7 @@ OPENGL_GAL::OPENGL_GAL( wxWindow* aParent, wxEvtHandler* aMouseListener,
groupCounter = 0;
// 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
Connect( wxEVT_MOTION, wxMouseEventHandler( OPENGL_GAL::skipMouseEvent ) );
......@@ -145,7 +128,8 @@ void OPENGL_GAL::BeginDrawing()
glViewport( 0, 0, (GLsizei) screenSize.x, (GLsizei) screenSize.y );
// 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 )
{
......@@ -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()
{
if( !isCursorEnabled )
......@@ -984,11 +937,112 @@ unsigned int OPENGL_GAL::getNewGroupNumber()
}
// -------------------------------------
// Callback functions for the tesselator
// -------------------------------------
bool OPENGL_GAL::runTest()
{
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 )
{
GLdouble* vertex = static_cast<GLdouble*>( aVertexPtr );
......@@ -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_COMBINE_DATA, ( void (CALLBACK*)() )CombineCallback );
......
/*
* 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) 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
* modify it under the terms of the GNU General Public License
......@@ -39,6 +39,7 @@
#include <macros.h>
#include <dialog_hotkeys_editor.h>
#include <menus_helpers.h>
#include <tool/tool_manager.h>
#include <wx/apptrait.h>
#include <wx/stdpaths.h>
......@@ -47,16 +48,6 @@
#define HOTKEYS_CONFIG_KEY wxT( "Keys" )
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
......@@ -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,
wxString* aFullFileName )
{
......
......@@ -423,7 +423,7 @@ bool PGM_BASE::initPgm()
m_local_env_vars[ envVarName ] = envVarItem;
wxFileName tmpFileName;
tmpFileName.AssignDir( wxString( wxT( KICAD_DATA_PATH ) ) );
tmpFileName.AssignDir( wxString( wxT( DEFAULT_INSTALL_PATH ) ) );
tmpFileName.AppendDir( wxT( "modules" ) );
envVarName = wxT( "KISYSMOD" );
envVarItem.SetValue( tmpFileName.GetPath() );
......
......@@ -93,12 +93,19 @@ const wxString PROJECT::GetProjectFullName() const
return m_project_name.GetFullPath();
}
const wxString PROJECT::GetProjectPath() const
{
return m_project_name.GetPathWithSep();
}
const wxString PROJECT::GetProjectName() const
{
return m_project_name.GetName();
}
const wxString PROJECT::FootprintLibTblName() const
{
wxFileName fn = GetProjectFullName();
......@@ -350,7 +357,6 @@ const wxString PROJECT::AbsolutePath( const wxString& aFileName ) const
if( !fn.IsAbsolute() )
{
wxString pro_dir = wxPathOnly( GetProjectFullName() );
fn.Normalize( wxPATH_NORM_ALL, pro_dir );
}
......
This diff is collapsed.
This diff is collapsed.
......@@ -23,6 +23,24 @@
*/
#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
{
......
This diff is collapsed.
......@@ -102,8 +102,7 @@ void VIEW::Add( VIEW_ITEM* aItem )
if( m_dynamic )
aItem->viewAssign( this );
if( aItem->viewRequiredUpdate() != VIEW_ITEM::NONE )
MarkForUpdate( aItem );
aItem->ViewUpdate( VIEW_ITEM::ALL );
}
......@@ -119,6 +118,8 @@ void VIEW::Remove( VIEW_ITEM* aItem )
if( item != m_needsUpdate.end() )
m_needsUpdate.erase( item );
aItem->clearUpdateFlags();
}
int layers[VIEW::VIEW_MAX_LAYERS], layers_count;
......
......@@ -54,8 +54,9 @@ const wxString DrillFileExtension( wxT( "drl" ) );
const wxString SVGFileExtension( wxT( "svg" ) );
const wxString ReportFileExtension( wxT( "rpt" ) );
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 EagleFootprintLibPathExtension( wxT( "lbr" ) );
......
This diff is collapsed.
......@@ -117,26 +117,9 @@ target_link_libraries( cvpcb_kiface
polygon
gal
${wxWidgets_LIBRARIES}
${OPENGL_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 )
target_link_libraries( cvpcb_kiface github_plugin )
endif()
......
This diff is collapsed.
......@@ -794,7 +794,6 @@ void CVPCB_MAINFRAME::SendMessageToEESCHEMA()
int CVPCB_MAINFRAME::ReadSchematicNetlist()
{
wxBusyCursor dummy; // Shows an hourglass while loading.
NETLIST_READER* netlistReader;
wxString msg;
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