Cleanup & performance enhancements.
This commit is contained in:
parent
d1ff8f4781
commit
6f49b57f9b
|
@ -58,7 +58,7 @@ void BOARD_ADAPTER::destroyLayers()
|
||||||
{
|
{
|
||||||
if( !m_layers_poly.empty() )
|
if( !m_layers_poly.empty() )
|
||||||
{
|
{
|
||||||
for( auto& poly : m_layers_poly )
|
for( std::pair<const PCB_LAYER_ID, SHAPE_POLY_SET*>& poly : m_layers_poly )
|
||||||
delete poly.second;
|
delete poly.second;
|
||||||
|
|
||||||
m_layers_poly.clear();
|
m_layers_poly.clear();
|
||||||
|
@ -72,7 +72,7 @@ void BOARD_ADAPTER::destroyLayers()
|
||||||
|
|
||||||
if( !m_layerHoleIdPolys.empty() )
|
if( !m_layerHoleIdPolys.empty() )
|
||||||
{
|
{
|
||||||
for( auto& poly : m_layerHoleIdPolys )
|
for( std::pair<const PCB_LAYER_ID, SHAPE_POLY_SET*>& poly : m_layerHoleIdPolys )
|
||||||
delete poly.second;
|
delete poly.second;
|
||||||
|
|
||||||
m_layerHoleIdPolys.clear();
|
m_layerHoleIdPolys.clear();
|
||||||
|
@ -80,7 +80,7 @@ void BOARD_ADAPTER::destroyLayers()
|
||||||
|
|
||||||
if( !m_layerHoleOdPolys.empty() )
|
if( !m_layerHoleOdPolys.empty() )
|
||||||
{
|
{
|
||||||
for( auto& poly : m_layerHoleOdPolys )
|
for( std::pair<const PCB_LAYER_ID, SHAPE_POLY_SET*>& poly : m_layerHoleOdPolys )
|
||||||
delete poly.second;
|
delete poly.second;
|
||||||
|
|
||||||
m_layerHoleOdPolys.clear();
|
m_layerHoleOdPolys.clear();
|
||||||
|
@ -88,7 +88,7 @@ void BOARD_ADAPTER::destroyLayers()
|
||||||
|
|
||||||
if( !m_layerMap.empty() )
|
if( !m_layerMap.empty() )
|
||||||
{
|
{
|
||||||
for( auto& poly : m_layerMap )
|
for( std::pair<const PCB_LAYER_ID, BVH_CONTAINER_2D*>& poly : m_layerMap )
|
||||||
delete poly.second;
|
delete poly.second;
|
||||||
|
|
||||||
m_layerMap.clear();
|
m_layerMap.clear();
|
||||||
|
@ -102,7 +102,7 @@ void BOARD_ADAPTER::destroyLayers()
|
||||||
|
|
||||||
if( !m_layerHoleMap.empty() )
|
if( !m_layerHoleMap.empty() )
|
||||||
{
|
{
|
||||||
for( auto& poly : m_layerHoleMap )
|
for( std::pair<const PCB_LAYER_ID, BVH_CONTAINER_2D*>& poly : m_layerHoleMap )
|
||||||
delete poly.second;
|
delete poly.second;
|
||||||
|
|
||||||
m_layerHoleMap.clear();
|
m_layerHoleMap.clear();
|
||||||
|
@ -726,9 +726,7 @@ void BOARD_ADAPTER::createLayers( REPORTER* aStatusReporter )
|
||||||
auto layerPolyContainer = m_layers_poly.find( layer );
|
auto layerPolyContainer = m_layers_poly.find( layer );
|
||||||
|
|
||||||
if( layerContainer != m_layerMap.end() )
|
if( layerContainer != m_layerMap.end() )
|
||||||
{
|
|
||||||
addSolidAreasShapes( zone, layerContainer->second, layer );
|
addSolidAreasShapes( zone, layerContainer->second, layer );
|
||||||
}
|
|
||||||
|
|
||||||
if( m_Cfg->m_Render.opengl_copper_thickness
|
if( m_Cfg->m_Render.opengl_copper_thickness
|
||||||
&& m_Cfg->m_Render.engine == RENDER_ENGINE::OPENGL
|
&& m_Cfg->m_Render.engine == RENDER_ENGINE::OPENGL
|
||||||
|
@ -1087,7 +1085,7 @@ void BOARD_ADAPTER::createLayers( REPORTER* aStatusReporter )
|
||||||
|
|
||||||
if( !m_layerHoleMap.empty() )
|
if( !m_layerHoleMap.empty() )
|
||||||
{
|
{
|
||||||
for( auto& hole : m_layerHoleMap )
|
for( std::pair<const PCB_LAYER_ID, BVH_CONTAINER_2D*>& hole : m_layerHoleMap )
|
||||||
hole.second->BuildBVH();
|
hole.second->BuildBVH();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -126,7 +126,11 @@ EDA_3D_CANVAS::EDA_3D_CANVAS( wxWindow* aParent, const int* aAttribList,
|
||||||
wxASSERT( m_3d_render_raytracing != nullptr );
|
wxASSERT( m_3d_render_raytracing != nullptr );
|
||||||
wxASSERT( m_3d_render_opengl != nullptr );
|
wxASSERT( m_3d_render_opengl != nullptr );
|
||||||
|
|
||||||
auto busy_indicator_factory = []() { return std::make_unique<WX_BUSY_INDICATOR>(); };
|
auto busy_indicator_factory =
|
||||||
|
[]()
|
||||||
|
{
|
||||||
|
return std::make_unique<WX_BUSY_INDICATOR>();
|
||||||
|
};
|
||||||
|
|
||||||
m_3d_render_raytracing->SetBusyIndicatorFactory( busy_indicator_factory );
|
m_3d_render_raytracing->SetBusyIndicatorFactory( busy_indicator_factory );
|
||||||
m_3d_render_opengl->SetBusyIndicatorFactory( busy_indicator_factory );
|
m_3d_render_opengl->SetBusyIndicatorFactory( busy_indicator_factory );
|
||||||
|
|
|
@ -149,24 +149,25 @@ MODEL_3D::MODEL_3D( const S3DMODEL& a3DModel, MATERIAL_MODE aMaterialMode )
|
||||||
|
|
||||||
for( unsigned int mesh_i = 0; mesh_i < a3DModel.m_MeshesSize; ++mesh_i )
|
for( unsigned int mesh_i = 0; mesh_i < a3DModel.m_MeshesSize; ++mesh_i )
|
||||||
{
|
{
|
||||||
const auto& mesh = a3DModel.m_Meshes[mesh_i];
|
const SMESH& mesh = a3DModel.m_Meshes[mesh_i];
|
||||||
|
|
||||||
// silently ignore meshes that have invalid material references or invalid geometry.
|
// silently ignore meshes that have invalid material references or invalid geometry.
|
||||||
if( mesh.m_MaterialIdx >= m_materials.size()
|
if( mesh.m_MaterialIdx >= m_materials.size()
|
||||||
|| mesh.m_Positions == nullptr
|
|| mesh.m_Positions == nullptr
|
||||||
|| mesh.m_FaceIdx == nullptr
|
|| mesh.m_FaceIdx == nullptr
|
||||||
|| mesh.m_Normals == nullptr
|
|| mesh.m_Normals == nullptr
|
||||||
|| mesh.m_FaceIdxSize == 0
|
|| mesh.m_FaceIdxSize == 0
|
||||||
|| mesh.m_VertexSize == 0 )
|
|| mesh.m_VertexSize == 0 )
|
||||||
continue;
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
auto& mesh_group = mesh_groups[mesh.m_MaterialIdx];
|
MESH_GROUP& mesh_group = mesh_groups[mesh.m_MaterialIdx];
|
||||||
auto& material = m_materials[mesh.m_MaterialIdx];
|
MATERIAL& material = m_materials[mesh.m_MaterialIdx];
|
||||||
|
|
||||||
if( material.IsTransparent()
|
if( material.IsTransparent() && m_materialMode != MATERIAL_MODE::DIFFUSE_ONLY )
|
||||||
&& m_materialMode != MATERIAL_MODE::DIFFUSE_ONLY )
|
|
||||||
m_have_transparent_meshes = true;
|
m_have_transparent_meshes = true;
|
||||||
else
|
else
|
||||||
m_have_opaque_meshes = true;
|
m_have_opaque_meshes = true;
|
||||||
|
|
||||||
const unsigned int vtx_offset = mesh_group.m_vertices.size();
|
const unsigned int vtx_offset = mesh_group.m_vertices.size();
|
||||||
|
@ -180,15 +181,14 @@ MODEL_3D::MODEL_3D( const S3DMODEL& a3DModel, MATERIAL_MODE aMaterialMode )
|
||||||
{
|
{
|
||||||
m_meshes_bbox[mesh_i].Union( mesh.m_Positions[vtx_i] );
|
m_meshes_bbox[mesh_i].Union( mesh.m_Positions[vtx_i] );
|
||||||
|
|
||||||
auto& vtx_out = mesh_group.m_vertices[vtx_offset + vtx_i];
|
VERTEX& vtx_out = mesh_group.m_vertices[vtx_offset + vtx_i];
|
||||||
|
|
||||||
vtx_out.m_pos = mesh.m_Positions[vtx_i];
|
vtx_out.m_pos = mesh.m_Positions[vtx_i];
|
||||||
vtx_out.m_nrm = glm::clamp( glm::vec4( mesh.m_Normals[vtx_i], 1.0f ) * 127.0f,
|
vtx_out.m_nrm = glm::clamp( glm::vec4( mesh.m_Normals[vtx_i], 1.0f ) * 127.0f,
|
||||||
-127.0f, 127.0f );
|
-127.0f, 127.0f );
|
||||||
|
|
||||||
vtx_out.m_tex_uv = mesh.m_Texcoords != nullptr
|
vtx_out.m_tex_uv = mesh.m_Texcoords != nullptr ? mesh.m_Texcoords[vtx_i]
|
||||||
? mesh.m_Texcoords[vtx_i]
|
: glm::vec2 (0);
|
||||||
: glm::vec2 (0);
|
|
||||||
|
|
||||||
if( mesh.m_Color != nullptr )
|
if( mesh.m_Color != nullptr )
|
||||||
{
|
{
|
||||||
|
@ -299,7 +299,7 @@ MODEL_3D::MODEL_3D( const S3DMODEL& a3DModel, MATERIAL_MODE aMaterialMode )
|
||||||
unsigned int total_vertex_count = 0;
|
unsigned int total_vertex_count = 0;
|
||||||
unsigned int total_index_count = 0;
|
unsigned int total_index_count = 0;
|
||||||
|
|
||||||
for( auto& mg : mesh_groups )
|
for( const MESH_GROUP& mg : mesh_groups )
|
||||||
{
|
{
|
||||||
total_vertex_count += mg.m_vertices.size();
|
total_vertex_count += mg.m_vertices.size();
|
||||||
total_index_count += mg.m_indices.size();
|
total_index_count += mg.m_indices.size();
|
||||||
|
@ -327,8 +327,7 @@ MODEL_3D::MODEL_3D( const S3DMODEL& a3DModel, MATERIAL_MODE aMaterialMode )
|
||||||
|
|
||||||
// temporary index buffer which will contain either GLushort or GLuint
|
// temporary index buffer which will contain either GLushort or GLuint
|
||||||
// type indices. allocate with a bit of meadow at the end.
|
// type indices. allocate with a bit of meadow at the end.
|
||||||
auto tmp_idx = std::make_unique<GLuint[]>(
|
auto tmp_idx = std::make_unique<GLuint[]>( ( idx_size * total_index_count + 8 ) / sizeof( GLuint ) );
|
||||||
( idx_size * total_index_count + 8 ) / sizeof( GLuint ) );
|
|
||||||
|
|
||||||
unsigned int prev_vtx_count = 0;
|
unsigned int prev_vtx_count = 0;
|
||||||
unsigned int idx_offset = 0;
|
unsigned int idx_offset = 0;
|
||||||
|
@ -336,23 +335,22 @@ MODEL_3D::MODEL_3D( const S3DMODEL& a3DModel, MATERIAL_MODE aMaterialMode )
|
||||||
|
|
||||||
for( unsigned int mg_i = 0; mg_i < mesh_groups.size (); ++mg_i )
|
for( unsigned int mg_i = 0; mg_i < mesh_groups.size (); ++mg_i )
|
||||||
{
|
{
|
||||||
auto& mg = mesh_groups[mg_i];
|
MESH_GROUP& mg = mesh_groups[mg_i];
|
||||||
auto& mat = m_materials[mg_i];
|
MATERIAL& mat = m_materials[mg_i];
|
||||||
|
uintptr_t tmp_idx_ptr = reinterpret_cast<uintptr_t>( tmp_idx.get() );
|
||||||
|
|
||||||
if( m_index_buffer_type == GL_UNSIGNED_SHORT )
|
if( m_index_buffer_type == GL_UNSIGNED_SHORT )
|
||||||
{
|
{
|
||||||
auto idx_out = reinterpret_cast<GLushort*>(
|
GLushort* idx_out = reinterpret_cast<GLushort*>( tmp_idx_ptr + idx_offset );
|
||||||
reinterpret_cast<uintptr_t>( tmp_idx.get() ) + idx_offset );
|
|
||||||
|
|
||||||
for( auto idx : mg.m_indices )
|
for( GLuint idx : mg.m_indices )
|
||||||
*idx_out++ = static_cast<GLushort>( idx + prev_vtx_count );
|
*idx_out++ = static_cast<GLushort>( idx + prev_vtx_count );
|
||||||
}
|
}
|
||||||
else if( m_index_buffer_type == GL_UNSIGNED_INT )
|
else if( m_index_buffer_type == GL_UNSIGNED_INT )
|
||||||
{
|
{
|
||||||
auto idx_out = reinterpret_cast<GLuint*>(
|
GLuint* idx_out = reinterpret_cast<GLuint*>( tmp_idx_ptr + idx_offset );
|
||||||
reinterpret_cast<uintptr_t>( tmp_idx.get() ) + idx_offset );
|
|
||||||
|
|
||||||
for( auto idx : mg.m_indices )
|
for( GLuint idx : mg.m_indices )
|
||||||
*idx_out++ = static_cast<GLuint>( idx + prev_vtx_count );
|
*idx_out++ = static_cast<GLuint>( idx + prev_vtx_count );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -531,7 +531,7 @@ void RENDER_3D_OPENGL::reload( REPORTER* aStatusReporter, REPORTER* aWarningRepo
|
||||||
float layer_z_bot = 0.0f;
|
float layer_z_bot = 0.0f;
|
||||||
float layer_z_top = 0.0f;
|
float layer_z_top = 0.0f;
|
||||||
|
|
||||||
for( const auto ii : outerMapHoles )
|
for( const std::pair<const PCB_LAYER_ID, SHAPE_POLY_SET*>& ii : outerMapHoles )
|
||||||
{
|
{
|
||||||
const PCB_LAYER_ID layer_id = ii.first;
|
const PCB_LAYER_ID layer_id = ii.first;
|
||||||
const SHAPE_POLY_SET* poly = ii.second;
|
const SHAPE_POLY_SET* poly = ii.second;
|
||||||
|
@ -543,7 +543,7 @@ void RENDER_3D_OPENGL::reload( REPORTER* aStatusReporter, REPORTER* aWarningRepo
|
||||||
layer_z_top, layer_z_bot, false );
|
layer_z_top, layer_z_bot, false );
|
||||||
}
|
}
|
||||||
|
|
||||||
for( const auto ii : innerMapHoles )
|
for( const std::pair<const PCB_LAYER_ID, SHAPE_POLY_SET*>& ii : innerMapHoles )
|
||||||
{
|
{
|
||||||
const PCB_LAYER_ID layer_id = ii.first;
|
const PCB_LAYER_ID layer_id = ii.first;
|
||||||
const SHAPE_POLY_SET* poly = ii.second;
|
const SHAPE_POLY_SET* poly = ii.second;
|
||||||
|
@ -565,7 +565,7 @@ void RENDER_3D_OPENGL::reload( REPORTER* aStatusReporter, REPORTER* aWarningRepo
|
||||||
|
|
||||||
const MAP_POLY& map_poly = m_boardAdapter.GetPolyMap();
|
const MAP_POLY& map_poly = m_boardAdapter.GetPolyMap();
|
||||||
|
|
||||||
for( const auto ii : m_boardAdapter.GetLayerMap() )
|
for( const std::pair<const PCB_LAYER_ID, BVH_CONTAINER_2D*>& ii : m_boardAdapter.GetLayerMap() )
|
||||||
{
|
{
|
||||||
const PCB_LAYER_ID layer_id = ii.first;
|
const PCB_LAYER_ID layer_id = ii.first;
|
||||||
|
|
||||||
|
|
|
@ -556,9 +556,9 @@ void RENDER_3D_RAYTRACE::Reload( REPORTER* aStatusReporter, REPORTER* aWarningRe
|
||||||
aStatusReporter->Report( _( "Load Raytracing: layers" ) );
|
aStatusReporter->Report( _( "Load Raytracing: layers" ) );
|
||||||
|
|
||||||
// Add layers maps (except B_Mask and F_Mask)
|
// Add layers maps (except B_Mask and F_Mask)
|
||||||
for( auto entry : m_boardAdapter.GetLayerMap() )
|
for( const std::pair<const PCB_LAYER_ID, BVH_CONTAINER_2D*>& entry : m_boardAdapter.GetLayerMap() )
|
||||||
{
|
{
|
||||||
PCB_LAYER_ID layer_id = entry.first;
|
const PCB_LAYER_ID layer_id = entry.first;
|
||||||
const BVH_CONTAINER_2D* container2d = entry.second;
|
const BVH_CONTAINER_2D* container2d = entry.second;
|
||||||
|
|
||||||
// Only process layers that exist
|
// Only process layers that exist
|
||||||
|
@ -677,9 +677,9 @@ void RENDER_3D_RAYTRACE::Reload( REPORTER* aStatusReporter, REPORTER* aWarningRe
|
||||||
{
|
{
|
||||||
const MATERIAL* materialLayer = &m_materials.m_SolderMask;
|
const MATERIAL* materialLayer = &m_materials.m_SolderMask;
|
||||||
|
|
||||||
for( auto entry : m_boardAdapter.GetLayerMap() )
|
for( const std::pair<const PCB_LAYER_ID, BVH_CONTAINER_2D*>& entry : m_boardAdapter.GetLayerMap() )
|
||||||
{
|
{
|
||||||
PCB_LAYER_ID layer_id = entry.first;
|
const PCB_LAYER_ID layer_id = entry.first;
|
||||||
const BVH_CONTAINER_2D* container2d = entry.second;
|
const BVH_CONTAINER_2D* container2d = entry.second;
|
||||||
|
|
||||||
// Only process layers that exist
|
// Only process layers that exist
|
||||||
|
|
|
@ -130,7 +130,7 @@ void ConvertPolygonToTriangles( const SHAPE_POLY_SET& aPolyList, CONTAINER_2D_BA
|
||||||
|
|
||||||
for( unsigned int j = 0; j < aPolyList.TriangulatedPolyCount(); j++ )
|
for( unsigned int j = 0; j < aPolyList.TriangulatedPolyCount(); j++ )
|
||||||
{
|
{
|
||||||
auto triPoly = aPolyList.TriangulatedPolygon( j );
|
const SHAPE_POLY_SET::TRIANGULATED_POLYGON* triPoly = aPolyList.TriangulatedPolygon( j );
|
||||||
|
|
||||||
for( size_t i = 0; i < triPoly->GetTriangleCount(); i++ )
|
for( size_t i = 0; i < triPoly->GetTriangleCount(); i++ )
|
||||||
{
|
{
|
||||||
|
|
|
@ -77,12 +77,10 @@ void BITMAP_BASE::ImportData( BITMAP_BASE* aItem )
|
||||||
|
|
||||||
bool BITMAP_BASE::ReadImageFile( wxInputStream& aInStream )
|
bool BITMAP_BASE::ReadImageFile( wxInputStream& aInStream )
|
||||||
{
|
{
|
||||||
auto new_image = std::make_unique<wxImage>();
|
std::unique_ptr<wxImage> new_image = std::make_unique<wxImage>();
|
||||||
|
|
||||||
if( !new_image->LoadFile( aInStream ) )
|
if( !new_image->LoadFile( aInStream ) )
|
||||||
{
|
|
||||||
return false;
|
return false;
|
||||||
}
|
|
||||||
|
|
||||||
delete m_image;
|
delete m_image;
|
||||||
m_image = new_image.release();
|
m_image = new_image.release();
|
||||||
|
|
|
@ -595,12 +595,13 @@ void DIALOG_SHIM::OnCharHook( wxKeyEvent& aEvt )
|
||||||
int currentIdx = -1;
|
int currentIdx = -1;
|
||||||
int delta = aEvt.ShiftDown() ? -1 : 1;
|
int delta = aEvt.ShiftDown() ? -1 : 1;
|
||||||
|
|
||||||
auto advance = [&]( int& idx )
|
auto advance =
|
||||||
{
|
[&]( int& idx )
|
||||||
// Wrap-around modulus
|
{
|
||||||
int size = m_tabOrder.size();
|
// Wrap-around modulus
|
||||||
idx = ( ( idx + delta ) % size + size ) % size;
|
int size = m_tabOrder.size();
|
||||||
};
|
idx = ( ( idx + delta ) % size + size ) % size;
|
||||||
|
};
|
||||||
|
|
||||||
for( size_t i = 0; i < m_tabOrder.size(); ++i )
|
for( size_t i = 0; i < m_tabOrder.size(); ++i )
|
||||||
{
|
{
|
||||||
|
|
|
@ -149,7 +149,7 @@ void PANEL_COLOR_SETTINGS::OnThemeChanged( wxCommandEvent& event )
|
||||||
newSettings->SetName( themeName );
|
newSettings->SetName( themeName );
|
||||||
newSettings->SetReadOnly( false );
|
newSettings->SetReadOnly( false );
|
||||||
|
|
||||||
for( auto layer : m_validLayers )
|
for( int layer : m_validLayers )
|
||||||
newSettings->SetColor( layer, m_currentSettings->GetColor( layer ) );
|
newSettings->SetColor( layer, m_currentSettings->GetColor( layer ) );
|
||||||
|
|
||||||
newSettings->SaveToFile( settingsMgr.GetPathForSettingsFile( newSettings ) );
|
newSettings->SaveToFile( settingsMgr.GetPathForSettingsFile( newSettings ) );
|
||||||
|
@ -367,7 +367,7 @@ bool PANEL_COLOR_SETTINGS::saveCurrentTheme( bool aValidate )
|
||||||
|
|
||||||
selected->SetOverrideSchItemColors( m_optOverrideColors->GetValue() );
|
selected->SetOverrideSchItemColors( m_optOverrideColors->GetValue() );
|
||||||
|
|
||||||
for( auto layer : m_validLayers )
|
for( int layer : m_validLayers )
|
||||||
selected->SetColor( layer, m_currentSettings->GetColor( layer ) );
|
selected->SetColor( layer, m_currentSettings->GetColor( layer ) );
|
||||||
|
|
||||||
settingsMgr.SaveColorSettings( selected, m_colorNamespace );
|
settingsMgr.SaveColorSettings( selected, m_colorNamespace );
|
||||||
|
|
|
@ -538,7 +538,7 @@ void DS_DRAW_ITEM_LIST::Print( const RENDER_SETTINGS* aSettings )
|
||||||
second_items.push_back( item );
|
second_items.push_back( item );
|
||||||
}
|
}
|
||||||
|
|
||||||
for( auto item : second_items )
|
for( DS_DRAW_ITEM_BASE* item : second_items )
|
||||||
item->PrintWsItem( aSettings );
|
item->PrintWsItem( aSettings );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -175,7 +175,7 @@ EDA_DRAW_FRAME::~EDA_DRAW_FRAME()
|
||||||
{
|
{
|
||||||
delete m_socketServer;
|
delete m_socketServer;
|
||||||
|
|
||||||
for( auto socket : m_sockets )
|
for( wxSocketBase* socket : m_sockets )
|
||||||
{
|
{
|
||||||
socket->Shutdown();
|
socket->Shutdown();
|
||||||
socket->Destroy();
|
socket->Destroy();
|
||||||
|
|
|
@ -79,12 +79,14 @@ wxString NormalizePath( const wxFileName& aFilePath, const ENV_VAR_MAP* aEnvVars
|
||||||
|
|
||||||
if( aEnvVars )
|
if( aEnvVars )
|
||||||
{
|
{
|
||||||
for( auto& entry : *aEnvVars )
|
for( const std::pair<const wxString, ENV_VAR_ITEM>& entry : *aEnvVars )
|
||||||
{
|
{
|
||||||
// Don't bother normalizing paths that don't exist or the user cannot read.
|
// Don't bother normalizing paths that don't exist or the user cannot read.
|
||||||
if( !wxFileName::DirExists( entry.second.GetValue() )
|
if( !wxFileName::DirExists( entry.second.GetValue() )
|
||||||
|| !wxFileName::IsDirReadable( entry.second.GetValue() ) )
|
|| !wxFileName::IsDirReadable( entry.second.GetValue() ) )
|
||||||
|
{
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
envPath.SetPath( entry.second.GetValue() );
|
envPath.SetPath( entry.second.GetValue() );
|
||||||
|
|
||||||
|
@ -177,7 +179,7 @@ wxString ResolveFile( const wxString& aFileName, const ENV_VAR_MAP* aEnvVars,
|
||||||
|
|
||||||
if( aEnvVars )
|
if( aEnvVars )
|
||||||
{
|
{
|
||||||
for( auto& entry : *aEnvVars )
|
for( const std::pair<const wxString, ENV_VAR_ITEM>& entry : *aEnvVars )
|
||||||
{
|
{
|
||||||
wxFileName fn( createFilePath( entry.second.GetValue(), aFileName ) );
|
wxFileName fn( createFilePath( entry.second.GetValue(), aFileName ) );
|
||||||
|
|
||||||
|
|
|
@ -47,7 +47,7 @@ static const ENV_VAR::ENV_VAR_LIST predefinedEnvVars = {
|
||||||
|
|
||||||
bool ENV_VAR::IsEnvVarImmutable( const wxString& aEnvVar )
|
bool ENV_VAR::IsEnvVarImmutable( const wxString& aEnvVar )
|
||||||
{
|
{
|
||||||
for( const auto& s : predefinedEnvVars )
|
for( const wxString& s : predefinedEnvVars )
|
||||||
{
|
{
|
||||||
if( s == aEnvVar )
|
if( s == aEnvVar )
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -70,8 +70,8 @@ GRID_TRICKS::GRID_TRICKS( WX_GRID* aGrid ):
|
||||||
|
|
||||||
bool GRID_TRICKS::toggleCell( int aRow, int aCol, bool aPreserveSelection )
|
bool GRID_TRICKS::toggleCell( int aRow, int aCol, bool aPreserveSelection )
|
||||||
{
|
{
|
||||||
auto renderer = m_grid->GetCellRenderer( aRow, aCol );
|
wxGridCellRenderer* renderer = m_grid->GetCellRenderer( aRow, aCol );
|
||||||
bool isCheckbox = ( dynamic_cast<wxGridCellBoolRenderer*>( renderer ) != nullptr );
|
bool isCheckbox = ( dynamic_cast<wxGridCellBoolRenderer*>( renderer ) );
|
||||||
renderer->DecRef();
|
renderer->DecRef();
|
||||||
|
|
||||||
if( isCheckbox )
|
if( isCheckbox )
|
||||||
|
|
|
@ -69,7 +69,7 @@ const BOX2I ORIGIN_VIEWITEM::ViewBBox() const
|
||||||
|
|
||||||
void ORIGIN_VIEWITEM::ViewDraw( int, VIEW* aView ) const
|
void ORIGIN_VIEWITEM::ViewDraw( int, VIEW* aView ) const
|
||||||
{
|
{
|
||||||
auto gal = aView->GetGAL();
|
GAL* gal = aView->GetGAL();
|
||||||
|
|
||||||
// Nothing to do if the target shouldn't be drawn at 0,0 and that's where the target is.
|
// Nothing to do if the target shouldn't be drawn at 0,0 and that's where the target is.
|
||||||
if( !m_drawAtZero && ( m_position.x == 0 ) && ( m_position.y == 0 ) )
|
if( !m_drawAtZero && ( m_position.x == 0 ) && ( m_position.y == 0 ) )
|
||||||
|
|
|
@ -198,7 +198,7 @@ const wxString PROJECT::GetSheetName( const KIID& aSheetID )
|
||||||
{
|
{
|
||||||
if( m_sheetNames.empty() )
|
if( m_sheetNames.empty() )
|
||||||
{
|
{
|
||||||
for( auto pair : GetProjectFile().GetSheets() )
|
for( const std::pair<KIID, wxString>& pair : GetProjectFile().GetSheets() )
|
||||||
m_sheetNames[pair.first] = pair.second;
|
m_sheetNames[pair.first] = pair.second;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -214,13 +214,9 @@ void PROJECT::SetRString( RSTRING_T aIndex, const wxString& aString )
|
||||||
unsigned ndx = unsigned( aIndex );
|
unsigned ndx = unsigned( aIndex );
|
||||||
|
|
||||||
if( ndx < arrayDim( m_rstrings ) )
|
if( ndx < arrayDim( m_rstrings ) )
|
||||||
{
|
|
||||||
m_rstrings[ndx] = aString;
|
m_rstrings[ndx] = aString;
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
wxASSERT( 0 ); // bad index
|
wxASSERT( 0 ); // bad index
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -247,9 +243,7 @@ PROJECT::_ELEM* PROJECT::GetElem( ELEM_T aIndex )
|
||||||
{
|
{
|
||||||
// This is virtual, so implement it out of line
|
// This is virtual, so implement it out of line
|
||||||
if( unsigned( aIndex ) < arrayDim( m_elems ) )
|
if( unsigned( aIndex ) < arrayDim( m_elems ) )
|
||||||
{
|
|
||||||
return m_elems[aIndex];
|
return m_elems[aIndex];
|
||||||
}
|
|
||||||
|
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
|
@ -617,7 +617,7 @@ bool SETTINGS_MANAGER::GetPreviousVersionPaths( std::vector<wxString>* aPaths )
|
||||||
|
|
||||||
std::set<wxString> checkedPaths;
|
std::set<wxString> checkedPaths;
|
||||||
|
|
||||||
for( auto base_path : base_paths )
|
for( const wxFileName& base_path : base_paths )
|
||||||
{
|
{
|
||||||
if( checkedPaths.count( base_path.GetFullPath() ) )
|
if( checkedPaths.count( base_path.GetFullPath() ) )
|
||||||
continue;
|
continue;
|
||||||
|
|
|
@ -202,7 +202,7 @@ bool ACTION_MANAGER::RunHotKey( int aHotKey ) const
|
||||||
}
|
}
|
||||||
else if( !global.empty() )
|
else if( !global.empty() )
|
||||||
{
|
{
|
||||||
for( auto act : global )
|
for( const TOOL_ACTION* act : global )
|
||||||
{
|
{
|
||||||
bool runAction = true;
|
bool runAction = true;
|
||||||
|
|
||||||
|
|
|
@ -60,7 +60,7 @@ ACTION_MENU::ACTION_MENU( bool isContextMenu, TOOL_INTERACTIVE* aTool ) :
|
||||||
ACTION_MENU::~ACTION_MENU()
|
ACTION_MENU::~ACTION_MENU()
|
||||||
{
|
{
|
||||||
// Set parent to NULL to prevent submenus from unregistering from a nonexistent object
|
// Set parent to NULL to prevent submenus from unregistering from a nonexistent object
|
||||||
for( auto menu : m_submenus )
|
for( ACTION_MENU* menu : m_submenus )
|
||||||
menu->SetParent( nullptr );
|
menu->SetParent( nullptr );
|
||||||
|
|
||||||
ACTION_MENU* parent = dynamic_cast<ACTION_MENU*>( GetParent() );
|
ACTION_MENU* parent = dynamic_cast<ACTION_MENU*>( GetParent() );
|
||||||
|
|
|
@ -122,7 +122,7 @@ EDA_RECT SELECTION::GetBoundingBox() const
|
||||||
|
|
||||||
bool SELECTION::HasType( KICAD_T aType ) const
|
bool SELECTION::HasType( KICAD_T aType ) const
|
||||||
{
|
{
|
||||||
for( auto item : m_items )
|
for( const EDA_ITEM* item : m_items )
|
||||||
{
|
{
|
||||||
if( item->Type() == aType )
|
if( item->Type() == aType )
|
||||||
return true;
|
return true;
|
||||||
|
@ -136,7 +136,7 @@ size_t SELECTION::CountType( KICAD_T aType ) const
|
||||||
{
|
{
|
||||||
size_t count = 0;
|
size_t count = 0;
|
||||||
|
|
||||||
for( EDA_ITEM* item : m_items )
|
for( const EDA_ITEM* item : m_items )
|
||||||
{
|
{
|
||||||
if( item->Type() == aType )
|
if( item->Type() == aType )
|
||||||
count++;
|
count++;
|
||||||
|
@ -150,7 +150,7 @@ const std::vector<KIGFX::VIEW_ITEM*> SELECTION::updateDrawList() const
|
||||||
{
|
{
|
||||||
std::vector<VIEW_ITEM*> items;
|
std::vector<VIEW_ITEM*> items;
|
||||||
|
|
||||||
for( auto item : m_items )
|
for( EDA_ITEM* item : m_items )
|
||||||
items.push_back( item );
|
items.push_back( item );
|
||||||
|
|
||||||
return items;
|
return items;
|
||||||
|
|
|
@ -871,7 +871,7 @@ void TOOL_MANAGER::DispatchContextMenu( const TOOL_EVENT& aEvent )
|
||||||
m_menuCursor = m_viewControls->GetCursorPosition();
|
m_menuCursor = m_viewControls->GetCursorPosition();
|
||||||
|
|
||||||
// Save all tools cursor settings, as they will be overridden
|
// Save all tools cursor settings, as they will be overridden
|
||||||
for( auto idState : m_toolIdIndex )
|
for( const std::pair<const TOOL_ID, TOOL_STATE*>& idState : m_toolIdIndex )
|
||||||
{
|
{
|
||||||
TOOL_STATE* s = idState.second;
|
TOOL_STATE* s = idState.second;
|
||||||
const auto& vc = s->vcSettings;
|
const auto& vc = s->vcSettings;
|
||||||
|
@ -916,7 +916,7 @@ void TOOL_MANAGER::DispatchContextMenu( const TOOL_EVENT& aEvent )
|
||||||
m_menuOwner = -1;
|
m_menuOwner = -1;
|
||||||
|
|
||||||
// Restore cursor settings
|
// Restore cursor settings
|
||||||
for( auto const& cursorSetting : m_cursorSettings )
|
for( const std::pair<const TOOL_ID, OPT<VECTOR2D>>& cursorSetting : m_cursorSettings )
|
||||||
{
|
{
|
||||||
auto it = m_toolIdIndex.find( cursorSetting.first );
|
auto it = m_toolIdIndex.find( cursorSetting.first );
|
||||||
wxASSERT( it != m_toolIdIndex.end() );
|
wxASSERT( it != m_toolIdIndex.end() );
|
||||||
|
|
|
@ -158,7 +158,8 @@ int CVPCB_ASSOCIATION_TOOL::PasteAssoc( const TOOL_EVENT& aEvent )
|
||||||
|
|
||||||
// Assign the fpid to the selections
|
// Assign the fpid to the selections
|
||||||
bool firstAssoc = true;
|
bool firstAssoc = true;
|
||||||
for( auto i : idx )
|
|
||||||
|
for( unsigned int i : idx )
|
||||||
{
|
{
|
||||||
m_frame->AssociateFootprint( CVPCB_ASSOCIATION( i, fpid ), firstAssoc );
|
m_frame->AssociateFootprint( CVPCB_ASSOCIATION( i, fpid ), firstAssoc );
|
||||||
firstAssoc = false;
|
firstAssoc = false;
|
||||||
|
@ -210,10 +211,9 @@ int CVPCB_ASSOCIATION_TOOL::Associate( const TOOL_EVENT& aEvent )
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get all the components that are selected and associate them with the current footprint
|
// Get all the components that are selected and associate them with the current footprint
|
||||||
std::vector<unsigned int> sel = m_frame->GetComponentIndices( CVPCB_MAINFRAME::SEL_COMPONENTS );
|
|
||||||
|
|
||||||
bool firstAssoc = true;
|
bool firstAssoc = true;
|
||||||
for( auto i : sel )
|
|
||||||
|
for( unsigned int i : m_frame->GetComponentIndices( CVPCB_MAINFRAME::SEL_COMPONENTS ) )
|
||||||
{
|
{
|
||||||
CVPCB_ASSOCIATION newfp( i, fpid );
|
CVPCB_ASSOCIATION newfp( i, fpid );
|
||||||
m_frame->AssociateFootprint( newfp, firstAssoc );
|
m_frame->AssociateFootprint( newfp, firstAssoc );
|
||||||
|
@ -237,12 +237,10 @@ int CVPCB_ASSOCIATION_TOOL::AutoAssociate( const TOOL_EVENT& aEvent )
|
||||||
|
|
||||||
int CVPCB_ASSOCIATION_TOOL::DeleteAssoc( const TOOL_EVENT& aEvent )
|
int CVPCB_ASSOCIATION_TOOL::DeleteAssoc( const TOOL_EVENT& aEvent )
|
||||||
{
|
{
|
||||||
// Get all the components that are selected
|
// Delete all the selected components' associations
|
||||||
std::vector<unsigned int> sel = m_frame->GetComponentIndices( CVPCB_MAINFRAME::SEL_COMPONENTS );
|
|
||||||
|
|
||||||
// Delete the association
|
|
||||||
bool firstAssoc = true;
|
bool firstAssoc = true;
|
||||||
for( auto i : sel )
|
|
||||||
|
for( unsigned int i : m_frame->GetComponentIndices( CVPCB_MAINFRAME::SEL_COMPONENTS ) )
|
||||||
{
|
{
|
||||||
m_frame->AssociateFootprint( CVPCB_ASSOCIATION( i, LIB_ID() ), firstAssoc );
|
m_frame->AssociateFootprint( CVPCB_ASSOCIATION( i, LIB_ID() ), firstAssoc );
|
||||||
firstAssoc = false;
|
firstAssoc = false;
|
||||||
|
@ -258,11 +256,10 @@ int CVPCB_ASSOCIATION_TOOL::DeleteAll( const TOOL_EVENT& aEvent )
|
||||||
{
|
{
|
||||||
// Remove all selections to avoid issues when setting the fpids
|
// Remove all selections to avoid issues when setting the fpids
|
||||||
m_frame->SetSelectedComponent( -1, true );
|
m_frame->SetSelectedComponent( -1, true );
|
||||||
std::vector<unsigned int> idx =
|
|
||||||
m_frame->GetComponentIndices( CVPCB_MAINFRAME::ALL_COMPONENTS );
|
|
||||||
|
|
||||||
bool firstAssoc = true;
|
bool firstAssoc = true;
|
||||||
for( auto i : idx )
|
|
||||||
|
for( unsigned int i : m_frame->GetComponentIndices( CVPCB_MAINFRAME::ALL_COMPONENTS ) )
|
||||||
{
|
{
|
||||||
m_frame->AssociateFootprint( CVPCB_ASSOCIATION( i, LIB_ID() ), firstAssoc );
|
m_frame->AssociateFootprint( CVPCB_ASSOCIATION( i, LIB_ID() ), firstAssoc );
|
||||||
firstAssoc = false;
|
firstAssoc = false;
|
||||||
|
|
|
@ -832,7 +832,7 @@ void CONNECTION_GRAPH::resolveAllDrivers()
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
// Special processing for some items
|
// Special processing for some items
|
||||||
for( auto item : subgraph->m_items )
|
for( SCH_ITEM* item : subgraph->m_items )
|
||||||
{
|
{
|
||||||
switch( item->Type() )
|
switch( item->Type() )
|
||||||
{
|
{
|
||||||
|
@ -1237,7 +1237,7 @@ void CONNECTION_GRAPH::processSubGraphs()
|
||||||
|
|
||||||
wxString test_name = member->Name( true );
|
wxString test_name = member->Name( true );
|
||||||
|
|
||||||
for( auto candidate : candidate_subgraphs )
|
for( CONNECTION_SUBGRAPH* candidate : candidate_subgraphs )
|
||||||
{
|
{
|
||||||
if( candidate->m_absorbed )
|
if( candidate->m_absorbed )
|
||||||
continue;
|
continue;
|
||||||
|
@ -2425,7 +2425,7 @@ bool CONNECTION_GRAPH::ercCheckBusToBusConflicts( const CONNECTION_SUBGRAPH* aSu
|
||||||
SCH_ITEM* label = nullptr;
|
SCH_ITEM* label = nullptr;
|
||||||
SCH_ITEM* port = nullptr;
|
SCH_ITEM* port = nullptr;
|
||||||
|
|
||||||
for( auto item : aSubgraph->m_items )
|
for( SCH_ITEM* item : aSubgraph->m_items )
|
||||||
{
|
{
|
||||||
switch( item->Type() )
|
switch( item->Type() )
|
||||||
{
|
{
|
||||||
|
|
|
@ -60,7 +60,7 @@ SCH_ITEM* SCH_EDITOR_CONTROL::FindSymbolAndItem( const wxString* aPath, const wx
|
||||||
{
|
{
|
||||||
SCH_SCREEN* screen = sheet.LastScreen();
|
SCH_SCREEN* screen = sheet.LastScreen();
|
||||||
|
|
||||||
for( auto item : screen->Items().OfType( SCH_SYMBOL_T ) )
|
for( EDA_ITEM* item : screen->Items().OfType( SCH_SYMBOL_T ) )
|
||||||
{
|
{
|
||||||
SCH_SYMBOL* candidate = static_cast<SCH_SYMBOL*>( item );
|
SCH_SYMBOL* candidate = static_cast<SCH_SYMBOL*>( item );
|
||||||
|
|
||||||
|
|
|
@ -251,7 +251,7 @@ void DIALOG_SYMBOL_REMAP::remapSymbolsToLibTable( REPORTER& aReporter )
|
||||||
|
|
||||||
for( screen = schematic.GetFirst(); screen; screen = schematic.GetNext() )
|
for( screen = schematic.GetFirst(); screen; screen = schematic.GetNext() )
|
||||||
{
|
{
|
||||||
for( auto item : screen->Items().OfType( SCH_SYMBOL_T ) )
|
for( EDA_ITEM* item : screen->Items().OfType( SCH_SYMBOL_T ) )
|
||||||
{
|
{
|
||||||
symbol = dynamic_cast<SCH_SYMBOL*>( item );
|
symbol = dynamic_cast<SCH_SYMBOL*>( item );
|
||||||
|
|
||||||
|
|
|
@ -990,7 +990,7 @@ bool SCH_EDIT_FRAME::SaveProject( bool aSaveAs )
|
||||||
updateFileType = true;
|
updateFileType = true;
|
||||||
tmpFn.SetExt( KiCadSchematicFileExtension );
|
tmpFn.SetExt( KiCadSchematicFileExtension );
|
||||||
|
|
||||||
for( auto item : screen->Items().OfType( SCH_SHEET_T ) )
|
for( EDA_ITEM* item : screen->Items().OfType( SCH_SHEET_T ) )
|
||||||
{
|
{
|
||||||
SCH_SHEET* sheet = static_cast<SCH_SHEET*>( item );
|
SCH_SHEET* sheet = static_cast<SCH_SHEET*>( item );
|
||||||
wxFileName sheetFileName = sheet->GetFileName();
|
wxFileName sheetFileName = sheet->GetFileName();
|
||||||
|
|
|
@ -69,7 +69,7 @@ bool NETLIST_EXPORTER_ORCADPCB2::WriteNetlist( const wxString& aOutFileName,
|
||||||
SCH_SHEET_PATH sheet = sheetList[i];
|
SCH_SHEET_PATH sheet = sheetList[i];
|
||||||
|
|
||||||
// Process symbol attributes
|
// Process symbol attributes
|
||||||
for( auto item : sheet.LastScreen()->Items().OfType( SCH_SYMBOL_T ) )
|
for( EDA_ITEM* item : sheet.LastScreen()->Items().OfType( SCH_SYMBOL_T ) )
|
||||||
{
|
{
|
||||||
SCH_SYMBOL* symbol = findNextSymbol( item, &sheet );
|
SCH_SYMBOL* symbol = findNextSymbol( item, &sheet );
|
||||||
|
|
||||||
|
@ -79,9 +79,10 @@ bool NETLIST_EXPORTER_ORCADPCB2::WriteNetlist( const wxString& aOutFileName,
|
||||||
CreatePinList( symbol, &sheet, true );
|
CreatePinList( symbol, &sheet, true );
|
||||||
|
|
||||||
if( symbol->GetLibSymbolRef()
|
if( symbol->GetLibSymbolRef()
|
||||||
&& symbol->GetLibSymbolRef()->GetFPFilters().GetCount() != 0 )
|
&& symbol->GetLibSymbolRef()->GetFPFilters().GetCount() != 0 )
|
||||||
cmpList.push_back( SCH_REFERENCE( symbol, symbol->GetLibSymbolRef().get(),
|
{
|
||||||
sheet ) );
|
cmpList.push_back( SCH_REFERENCE( symbol, symbol->GetLibSymbolRef().get(), sheet ) );
|
||||||
|
}
|
||||||
|
|
||||||
footprint = symbol->GetFootprint( &sheet, true );
|
footprint = symbol->GetFootprint( &sheet, true );
|
||||||
footprint.Replace( wxT( " " ), wxT( "_" ) );
|
footprint.Replace( wxT( " " ), wxT( "_" ) );
|
||||||
|
|
|
@ -535,7 +535,7 @@ XNODE* NETLIST_EXPORTER_XML::makeLibParts()
|
||||||
|
|
||||||
m_libraries.clear();
|
m_libraries.clear();
|
||||||
|
|
||||||
for( auto lcomp : m_libParts )
|
for( LIB_SYMBOL* lcomp : m_libParts )
|
||||||
{
|
{
|
||||||
wxString libNickname = lcomp->GetLibId().GetLibNickname();;
|
wxString libNickname = lcomp->GetLibId().GetLibNickname();;
|
||||||
|
|
||||||
|
|
|
@ -68,7 +68,7 @@ static void getSymbols( SCHEMATIC* aSchematic, std::vector<SCH_SYMBOL*>& aSymbol
|
||||||
// Get the full list
|
// Get the full list
|
||||||
for( SCH_SCREEN* screen = screens.GetFirst(); screen; screen = screens.GetNext() )
|
for( SCH_SCREEN* screen = screens.GetFirst(); screen; screen = screens.GetNext() )
|
||||||
{
|
{
|
||||||
for( auto aItem : screen->Items().OfType( SCH_SYMBOL_T ) )
|
for( EDA_ITEM* aItem : screen->Items().OfType( SCH_SYMBOL_T ) )
|
||||||
aSymbols.push_back( static_cast<SCH_SYMBOL*>( aItem ) );
|
aSymbols.push_back( static_cast<SCH_SYMBOL*>( aItem ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -685,7 +685,7 @@ void LEGACY_RESCUER::OpenRescueLibrary()
|
||||||
|
|
||||||
rescueLib->GetSymbols( symbols );
|
rescueLib->GetSymbols( symbols );
|
||||||
|
|
||||||
for( auto symbol : symbols )
|
for( LIB_SYMBOL* symbol : symbols )
|
||||||
{
|
{
|
||||||
// The LIB_SYMBOL copy constructor flattens derived symbols (formerly known as aliases).
|
// The LIB_SYMBOL copy constructor flattens derived symbols (formerly known as aliases).
|
||||||
m_rescue_lib->AddSymbol( new LIB_SYMBOL( *symbol, m_rescue_lib.get() ) );
|
m_rescue_lib->AddSymbol( new LIB_SYMBOL( *symbol, m_rescue_lib.get() ) );
|
||||||
|
|
|
@ -93,7 +93,7 @@ void SCH_SEXPR_PLUGIN_CACHE::Save( const std::optional<bool>& aOpt )
|
||||||
formatter->Print( 0, "(kicad_symbol_lib (version %d) (generator kicad_symbol_editor)\n",
|
formatter->Print( 0, "(kicad_symbol_lib (version %d) (generator kicad_symbol_editor)\n",
|
||||||
SEXPR_SYMBOL_LIB_FILE_VERSION );
|
SEXPR_SYMBOL_LIB_FILE_VERSION );
|
||||||
|
|
||||||
for( auto parent : m_symbols )
|
for( const std::pair<const wxString, LIB_SYMBOL*>& parent : m_symbols )
|
||||||
{
|
{
|
||||||
// Save the root symbol first so alias can inherit from them.
|
// Save the root symbol first so alias can inherit from them.
|
||||||
if( parent.second->IsRoot() )
|
if( parent.second->IsRoot() )
|
||||||
|
@ -101,7 +101,7 @@ void SCH_SEXPR_PLUGIN_CACHE::Save( const std::optional<bool>& aOpt )
|
||||||
SaveSymbol( parent.second, *formatter.get(), 1 );
|
SaveSymbol( parent.second, *formatter.get(), 1 );
|
||||||
|
|
||||||
// Save all of the aliases associated with the current root symbol.
|
// Save all of the aliases associated with the current root symbol.
|
||||||
for( auto alias : m_symbols )
|
for( const std::pair<const wxString, LIB_SYMBOL*>& alias : m_symbols )
|
||||||
{
|
{
|
||||||
if( !alias.second->IsAlias() )
|
if( !alias.second->IsAlias() )
|
||||||
continue;
|
continue;
|
||||||
|
@ -218,7 +218,7 @@ void SCH_SEXPR_PLUGIN_CACHE::SaveSymbol( LIB_SYMBOL* aSymbol, OUTPUTFORMATTER& a
|
||||||
return a.m_unit < b.m_unit;
|
return a.m_unit < b.m_unit;
|
||||||
} );
|
} );
|
||||||
|
|
||||||
for( auto unit : units )
|
for( const LIB_SYMBOL_UNIT& unit : units )
|
||||||
{
|
{
|
||||||
// Add quotes and escape chars like ") to the UTF8 unitName string
|
// Add quotes and escape chars like ") to the UTF8 unitName string
|
||||||
name = aFormatter.Quotes( unitName );
|
name = aFormatter.Quotes( unitName );
|
||||||
|
@ -298,7 +298,7 @@ void SCH_SEXPR_PLUGIN_CACHE::saveDcmInfoAsFields( LIB_SYMBOL* aSymbol, OUTPUTFOR
|
||||||
{
|
{
|
||||||
wxString tmp;
|
wxString tmp;
|
||||||
|
|
||||||
for( auto filter : fpFilters )
|
for( const wxString& filter : fpFilters )
|
||||||
{
|
{
|
||||||
// Spaces are not handled in fp filter names so escape spaces if any
|
// Spaces are not handled in fp filter names so escape spaces if any
|
||||||
wxString curr_filter = EscapeString( filter, ESCAPE_CONTEXT::CTX_NO_SPACE );
|
wxString curr_filter = EscapeString( filter, ESCAPE_CONTEXT::CTX_NO_SPACE );
|
||||||
|
|
|
@ -111,7 +111,7 @@ LIB_SYMBOL* SCH_LIB_PLUGIN_CACHE::removeSymbol( LIB_SYMBOL* aSymbol )
|
||||||
// the root symbol and make it the new root.
|
// the root symbol and make it the new root.
|
||||||
if( aSymbol->IsRoot() )
|
if( aSymbol->IsRoot() )
|
||||||
{
|
{
|
||||||
for( auto entry : m_symbols )
|
for( const std::pair<const wxString, LIB_SYMBOL*>& entry : m_symbols )
|
||||||
{
|
{
|
||||||
if( entry.second->IsAlias()
|
if( entry.second->IsAlias()
|
||||||
&& entry.second->GetParent().lock() == aSymbol->SharedPtr() )
|
&& entry.second->GetParent().lock() == aSymbol->SharedPtr() )
|
||||||
|
@ -139,11 +139,13 @@ LIB_SYMBOL* SCH_LIB_PLUGIN_CACHE::removeSymbol( LIB_SYMBOL* aSymbol )
|
||||||
}
|
}
|
||||||
|
|
||||||
// Reparent the remaining aliases.
|
// Reparent the remaining aliases.
|
||||||
for( auto entry : m_symbols )
|
for( const std::pair<const wxString, LIB_SYMBOL*>& entry : m_symbols )
|
||||||
{
|
{
|
||||||
if( entry.second->IsAlias()
|
if( entry.second->IsAlias()
|
||||||
&& entry.second->GetParent().lock() == aSymbol->SharedPtr() )
|
&& entry.second->GetParent().lock() == aSymbol->SharedPtr() )
|
||||||
|
{
|
||||||
entry.second->SetParent( firstChild );
|
entry.second->SetParent( firstChild );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -100,7 +100,7 @@ SCHEMATIC* SCH_SCREEN::Schematic() const
|
||||||
|
|
||||||
void SCH_SCREEN::clearLibSymbols()
|
void SCH_SCREEN::clearLibSymbols()
|
||||||
{
|
{
|
||||||
for( auto libSymbol : m_libSymbols )
|
for( const std::pair<const wxString, LIB_SYMBOL*>& libSymbol : m_libSymbols )
|
||||||
delete libSymbol.second;
|
delete libSymbol.second;
|
||||||
|
|
||||||
m_libSymbols.clear();
|
m_libSymbols.clear();
|
||||||
|
@ -529,9 +529,9 @@ TEXT_SPIN_STYLE SCH_SCREEN::GetLabelOrientationForPoint( const VECTOR2I& a
|
||||||
|
|
||||||
case SCH_SYMBOL_T:
|
case SCH_SYMBOL_T:
|
||||||
{
|
{
|
||||||
auto symbol = static_cast<SCH_SYMBOL*>( item );
|
SCH_SYMBOL* symbol = static_cast<SCH_SYMBOL*>( item );
|
||||||
auto pins = symbol->GetPins( aSheet );
|
|
||||||
for( auto pin : pins )
|
for( SCH_PIN* pin : symbol->GetPins( aSheet ) )
|
||||||
{
|
{
|
||||||
if( pin->GetPosition() == aPosition )
|
if( pin->GetPosition() == aPosition )
|
||||||
{
|
{
|
||||||
|
|
|
@ -723,14 +723,12 @@ bool SCH_SHEET::LocatePathOfScreen( SCH_SCREEN* aScreen, SCH_SHEET_PATH* aList )
|
||||||
if( m_screen == aScreen )
|
if( m_screen == aScreen )
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
for( auto item : m_screen->Items().OfType( SCH_SHEET_T ) )
|
for( EDA_ITEM* item : m_screen->Items().OfType( SCH_SHEET_T ) )
|
||||||
{
|
{
|
||||||
SCH_SHEET* sheet = static_cast<SCH_SHEET*>( item );
|
SCH_SHEET* sheet = static_cast<SCH_SHEET*>( item );
|
||||||
|
|
||||||
if( sheet->LocatePathOfScreen( aScreen, aList ) )
|
if( sheet->LocatePathOfScreen( aScreen, aList ) )
|
||||||
{
|
|
||||||
return true;
|
return true;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
aList->pop_back();
|
aList->pop_back();
|
||||||
|
|
|
@ -154,7 +154,7 @@ void SCH_SHEET_PATH::Rehash()
|
||||||
{
|
{
|
||||||
m_current_hash = 0;
|
m_current_hash = 0;
|
||||||
|
|
||||||
for( auto sheet : m_sheets )
|
for( SCH_SHEET* sheet : m_sheets )
|
||||||
boost::hash_combine( m_current_hash, sheet->m_Uuid.Hash() );
|
boost::hash_combine( m_current_hash, sheet->m_Uuid.Hash() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -179,7 +179,7 @@ void SCH_VIEW::DisplaySymbol( LIB_SYMBOL* aSymbol )
|
||||||
|
|
||||||
void SCH_VIEW::ClearHiddenFlags()
|
void SCH_VIEW::ClearHiddenFlags()
|
||||||
{
|
{
|
||||||
for( auto item : *m_allItems )
|
for( VIEW_ITEM* item : *m_allItems )
|
||||||
Hide( item, false );
|
Hide( item, false );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -49,7 +49,6 @@
|
||||||
#include <origin_viewitem.h>
|
#include <origin_viewitem.h>
|
||||||
#include <pcb_edit_frame.h>
|
#include <pcb_edit_frame.h>
|
||||||
#include <pcbnew_id.h>
|
#include <pcbnew_id.h>
|
||||||
#include <pcbnew_settings.h>
|
|
||||||
#include <project.h>
|
#include <project.h>
|
||||||
#include <project/project_file.h> // LAST_PATH_TYPE
|
#include <project/project_file.h> // LAST_PATH_TYPE
|
||||||
#include <tool/tool_manager.h>
|
#include <tool/tool_manager.h>
|
||||||
|
@ -96,7 +95,6 @@ public:
|
||||||
Add( PCB_ACTIONS::drawSimilarZone );
|
Add( PCB_ACTIONS::drawSimilarZone );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
ACTION_MENU* create() const override
|
ACTION_MENU* create() const override
|
||||||
{
|
{
|
||||||
|
|
|
@ -73,13 +73,13 @@ int BOARD_REANNOTATE_TOOL::ReannotateDuplicatesInSelection()
|
||||||
}
|
}
|
||||||
|
|
||||||
int BOARD_REANNOTATE_TOOL::ReannotateDuplicates( const PCB_SELECTION& aSelectionToReannotate,
|
int BOARD_REANNOTATE_TOOL::ReannotateDuplicates( const PCB_SELECTION& aSelectionToReannotate,
|
||||||
const std::vector<EDA_ITEM*>& aAdditionalFootprints )
|
const std::vector<EDA_ITEM*>& aAdditionalFootprints )
|
||||||
{
|
{
|
||||||
if( aSelectionToReannotate.Empty() )
|
if( aSelectionToReannotate.Empty() )
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
// 1. Build list of designators on the board & the additional footprints
|
// 1. Build list of designators on the board & the additional footprints
|
||||||
FOOTPRINTS fpOnBoard = m_frame->GetBoard()->Footprints();
|
FOOTPRINTS fpOnBoard = m_frame->GetBoard()->Footprints();
|
||||||
std::multimap<wxString, KIID> usedDesignatorsMap;
|
std::multimap<wxString, KIID> usedDesignatorsMap;
|
||||||
|
|
||||||
for( EDA_ITEM* item : aAdditionalFootprints )
|
for( EDA_ITEM* item : aAdditionalFootprints )
|
||||||
|
|
|
@ -691,7 +691,6 @@ int CONVERT_TOOL::CreateLines( const TOOL_EVENT& aEvent )
|
||||||
FOOTPRINT_EDIT_FRAME* fpEditor = dynamic_cast<FOOTPRINT_EDIT_FRAME*>( m_frame );
|
FOOTPRINT_EDIT_FRAME* fpEditor = dynamic_cast<FOOTPRINT_EDIT_FRAME*>( m_frame );
|
||||||
FOOTPRINT* footprint = nullptr;
|
FOOTPRINT* footprint = nullptr;
|
||||||
PCB_LAYER_ID targetLayer = m_frame->GetActiveLayer();
|
PCB_LAYER_ID targetLayer = m_frame->GetActiveLayer();
|
||||||
PCB_LAYER_ID copperLayer = F_Cu;
|
|
||||||
BOARD_ITEM_CONTAINER* parent = frame->GetModel();
|
BOARD_ITEM_CONTAINER* parent = frame->GetModel();
|
||||||
|
|
||||||
if( fpEditor )
|
if( fpEditor )
|
||||||
|
@ -738,12 +737,10 @@ int CONVERT_TOOL::CreateLines( const TOOL_EVENT& aEvent )
|
||||||
{
|
{
|
||||||
if( !IsCopperLayer( targetLayer ) )
|
if( !IsCopperLayer( targetLayer ) )
|
||||||
{
|
{
|
||||||
copperLayer = frame->SelectOneLayer( F_Cu, LSET::AllNonCuMask() );
|
targetLayer = frame->SelectOneLayer( F_Cu, LSET::AllNonCuMask() );
|
||||||
|
|
||||||
if( copperLayer == UNDEFINED_LAYER ) // User canceled
|
if( targetLayer == UNDEFINED_LAYER ) // User canceled
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
targetLayer = copperLayer;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||||
*
|
*
|
||||||
* Copyright (C) 2014-2017 CERN
|
* Copyright (C) 2014-2017 CERN
|
||||||
* Copyright (C) 2018-2021 KiCad Developers, see AUTHORS.txt for contributors.
|
* Copyright (C) 2018-2022 KiCad Developers, see AUTHORS.txt for contributors.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or
|
* This program is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU General Public License
|
* modify it under the terms of the GNU General Public License
|
||||||
|
@ -27,12 +27,8 @@
|
||||||
#include <pcb_edit_frame.h>
|
#include <pcb_edit_frame.h>
|
||||||
#include <view/view.h>
|
#include <view/view.h>
|
||||||
#include <tool/tool_manager.h>
|
#include <tool/tool_manager.h>
|
||||||
#include <tools/pcb_actions.h>
|
|
||||||
#include <tools/tool_event_utils.h>
|
|
||||||
#include <tools/drawing_tool.h>
|
|
||||||
#include <board_commit.h>
|
#include <board_commit.h>
|
||||||
#include <scoped_set_reset.h>
|
#include <scoped_set_reset.h>
|
||||||
#include <bitmaps.h>
|
|
||||||
#include <painter.h>
|
#include <painter.h>
|
||||||
#include <board.h>
|
#include <board.h>
|
||||||
#include <board_design_settings.h>
|
#include <board_design_settings.h>
|
||||||
|
@ -48,9 +44,8 @@ using SCOPED_DRAW_MODE = SCOPED_SET_RESET<DRAWING_TOOL::MODE>;
|
||||||
|
|
||||||
|
|
||||||
static std::vector<BOARD_ITEM*> initTextTable( std::vector<std::vector<PCB_TEXT*>> aContent,
|
static std::vector<BOARD_ITEM*> initTextTable( std::vector<std::vector<PCB_TEXT*>> aContent,
|
||||||
wxPoint origin, PCB_LAYER_ID aLayer,
|
VECTOR2I origin, PCB_LAYER_ID aLayer,
|
||||||
wxPoint* aTableSize,
|
VECTOR2I* aTableSize, bool aDrawFrame = true )
|
||||||
bool aDrawFrame = true )
|
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
int j;
|
int j;
|
||||||
|
@ -58,7 +53,7 @@ static std::vector<BOARD_ITEM*> initTextTable( std::vector<std::vector<PCB_TEXT*
|
||||||
int nbCols = aContent.size();
|
int nbCols = aContent.size();
|
||||||
int nbRows = 0;
|
int nbRows = 0;
|
||||||
|
|
||||||
for( auto col : aContent )
|
for( const std::vector<PCB_TEXT*>& col : aContent )
|
||||||
nbRows = std::max( nbRows, static_cast<int>( col.size() ) );
|
nbRows = std::max( nbRows, static_cast<int>( col.size() ) );
|
||||||
|
|
||||||
// Limit the number of cells
|
// Limit the number of cells
|
||||||
|
@ -176,8 +171,8 @@ static std::vector<BOARD_ITEM*> initTextTable( std::vector<std::vector<PCB_TEXT*
|
||||||
}
|
}
|
||||||
|
|
||||||
//Now add the text
|
//Now add the text
|
||||||
i = 0;
|
i = 0;
|
||||||
wxPoint pos = wxPoint( origin.x + xmargin, origin.y + ymargin );
|
VECTOR2I pos( origin.x + xmargin, origin.y + ymargin );
|
||||||
|
|
||||||
for( std::vector<PCB_TEXT*>& col : aContent )
|
for( std::vector<PCB_TEXT*>& col : aContent )
|
||||||
{
|
{
|
||||||
|
@ -190,7 +185,6 @@ static std::vector<BOARD_ITEM*> initTextTable( std::vector<std::vector<PCB_TEXT*
|
||||||
|
|
||||||
for( PCB_TEXT* cell : col )
|
for( PCB_TEXT* cell : col )
|
||||||
{
|
{
|
||||||
|
|
||||||
if( j >= nbRows )
|
if( j >= nbRows )
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -208,17 +202,18 @@ static std::vector<BOARD_ITEM*> initTextTable( std::vector<std::vector<PCB_TEXT*
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
std::vector<BOARD_ITEM*> DRAWING_TOOL::DrawSpecificationStackup( const wxPoint& aOrigin,
|
std::vector<BOARD_ITEM*> DRAWING_TOOL::DrawSpecificationStackup( const VECTOR2I& aOrigin,
|
||||||
PCB_LAYER_ID aLayer,
|
PCB_LAYER_ID aLayer,
|
||||||
bool aDrawNow,
|
bool aDrawNow,
|
||||||
wxPoint* tableSize )
|
VECTOR2I* tableSize )
|
||||||
{
|
{
|
||||||
BOARD_COMMIT commit( m_frame );
|
BOARD_COMMIT commit( m_frame );
|
||||||
|
FOOTPRINT* footprint = static_cast<FOOTPRINT*>( m_frame->GetModel() );
|
||||||
|
|
||||||
std::vector<std::vector<PCB_TEXT*>> texts;
|
std::vector<std::vector<PCB_TEXT*>> texts;
|
||||||
|
|
||||||
// Style : Header
|
// Style : Header
|
||||||
std::unique_ptr<PCB_TEXT> headStyle =
|
std::unique_ptr<PCB_TEXT> headStyle = std::make_unique<PCB_TEXT>( footprint );
|
||||||
std::make_unique<PCB_TEXT>( static_cast<FOOTPRINT*>( m_frame->GetModel() ) );
|
|
||||||
headStyle->SetLayer( Eco1_User );
|
headStyle->SetLayer( Eco1_User );
|
||||||
headStyle->SetTextSize( wxSize( Millimeter2iu( 1.5 ), Millimeter2iu( 1.5 ) ) );
|
headStyle->SetTextSize( wxSize( Millimeter2iu( 1.5 ), Millimeter2iu( 1.5 ) ) );
|
||||||
headStyle->SetTextThickness( Millimeter2iu( 0.3 ) );
|
headStyle->SetTextThickness( Millimeter2iu( 0.3 ) );
|
||||||
|
@ -229,8 +224,7 @@ std::vector<BOARD_ITEM*> DRAWING_TOOL::DrawSpecificationStackup( const wxPoint&
|
||||||
headStyle->SetVertJustify( GR_TEXT_V_ALIGN_TOP );
|
headStyle->SetVertJustify( GR_TEXT_V_ALIGN_TOP );
|
||||||
|
|
||||||
// Style : data
|
// Style : data
|
||||||
std::unique_ptr<PCB_TEXT> dataStyle =
|
std::unique_ptr<PCB_TEXT> dataStyle = std::make_unique<PCB_TEXT>( footprint );
|
||||||
std::make_unique<PCB_TEXT>( static_cast<FOOTPRINT*>( m_frame->GetModel() ) );
|
|
||||||
dataStyle->SetLayer( Eco1_User );
|
dataStyle->SetLayer( Eco1_User );
|
||||||
dataStyle->SetTextSize( wxSize( Millimeter2iu( 1.5 ), Millimeter2iu( 1.5 ) ) );
|
dataStyle->SetTextSize( wxSize( Millimeter2iu( 1.5 ), Millimeter2iu( 1.5 ) ) );
|
||||||
dataStyle->SetTextThickness( Millimeter2iu( 0.1 ) );
|
dataStyle->SetTextThickness( Millimeter2iu( 0.1 ) );
|
||||||
|
@ -317,7 +311,9 @@ std::vector<BOARD_ITEM*> DRAWING_TOOL::DrawSpecificationStackup( const wxPoint&
|
||||||
t->SetText( ly_name );
|
t->SetText( ly_name );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
t->SetText( stackup_item->GetLayerName() );
|
t->SetText( stackup_item->GetLayerName() );
|
||||||
|
}
|
||||||
|
|
||||||
colLayer.push_back( t );
|
colLayer.push_back( t );
|
||||||
|
|
||||||
|
@ -371,17 +367,17 @@ std::vector<BOARD_ITEM*> DRAWING_TOOL::DrawSpecificationStackup( const wxPoint&
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
std::vector<BOARD_ITEM*> DRAWING_TOOL::DrawBoardCharacteristics( const wxPoint& aOrigin,
|
std::vector<BOARD_ITEM*> DRAWING_TOOL::DrawBoardCharacteristics( const VECTOR2I& aOrigin,
|
||||||
PCB_LAYER_ID aLayer,
|
PCB_LAYER_ID aLayer,
|
||||||
bool aDrawNow,
|
bool aDrawNow,
|
||||||
wxPoint* tableSize )
|
VECTOR2I* tableSize )
|
||||||
{
|
{
|
||||||
BOARD_COMMIT commit( m_frame );
|
BOARD_COMMIT commit( m_frame );
|
||||||
std::vector<BOARD_ITEM*> objects;
|
std::vector<BOARD_ITEM*> objects;
|
||||||
BOARD_DESIGN_SETTINGS& settings = m_frame->GetBoard()->GetDesignSettings();
|
BOARD_DESIGN_SETTINGS& settings = m_frame->GetBoard()->GetDesignSettings();
|
||||||
BOARD_STACKUP& stackup = settings.GetStackupDescriptor();
|
BOARD_STACKUP& stackup = settings.GetStackupDescriptor();
|
||||||
|
|
||||||
wxPoint cursorPos = aOrigin;
|
VECTOR2I cursorPos = aOrigin;
|
||||||
|
|
||||||
// Style : Section header
|
// Style : Section header
|
||||||
std::unique_ptr<PCB_TEXT> headStyle =
|
std::unique_ptr<PCB_TEXT> headStyle =
|
||||||
|
@ -530,7 +526,7 @@ std::vector<BOARD_ITEM*> DRAWING_TOOL::DrawBoardCharacteristics( const wxPoint&
|
||||||
texts.push_back( colbreak );
|
texts.push_back( colbreak );
|
||||||
texts.push_back( colLabel2 );
|
texts.push_back( colLabel2 );
|
||||||
texts.push_back( colData2 );
|
texts.push_back( colData2 );
|
||||||
wxPoint tableSize2 = wxPoint();
|
VECTOR2I tableSize2;
|
||||||
|
|
||||||
std::vector<BOARD_ITEM*> table = initTextTable( texts, cursorPos, Eco1_User, &tableSize2,
|
std::vector<BOARD_ITEM*> table = initTextTable( texts, cursorPos, Eco1_User, &tableSize2,
|
||||||
false );
|
false );
|
||||||
|
@ -701,20 +697,16 @@ int DRAWING_TOOL::InteractivePlaceWithPreview( const TOOL_EVENT& aEvent,
|
||||||
|
|
||||||
int DRAWING_TOOL::PlaceCharacteristics( const TOOL_EVENT& aEvent )
|
int DRAWING_TOOL::PlaceCharacteristics( const TOOL_EVENT& aEvent )
|
||||||
{
|
{
|
||||||
wxPoint tableSize = wxPoint();
|
VECTOR2I tableSize;
|
||||||
|
|
||||||
LSET layerSet = ( layerSet.AllCuMask() | layerSet.AllTechMask() );
|
LSET layerSet = ( layerSet.AllCuMask() | layerSet.AllTechMask() );
|
||||||
layerSet = static_cast<LSET>( layerSet.set( Edge_Cuts ).set( Margin ) );
|
layerSet = static_cast<LSET>( layerSet.set( Edge_Cuts ).set( Margin ) );
|
||||||
layerSet = static_cast<LSET>( layerSet.reset( F_Fab ).reset( B_Fab ) );
|
layerSet = static_cast<LSET>( layerSet.reset( F_Fab ).reset( B_Fab ) );
|
||||||
|
|
||||||
PCB_LAYER_ID layer = m_frame->GetActiveLayer();
|
PCB_LAYER_ID layer = m_frame->GetActiveLayer();
|
||||||
PCB_LAYER_ID savedLayer = layer;
|
|
||||||
|
|
||||||
if( ( layerSet & LSET( layer ) ).count() ) // if layer is a forbidden layer
|
if( ( layerSet & LSET( layer ) ).count() ) // if layer is a forbidden layer
|
||||||
{
|
|
||||||
m_frame->SetActiveLayer( Cmts_User );
|
m_frame->SetActiveLayer( Cmts_User );
|
||||||
layer = Cmts_User;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::vector<BOARD_ITEM*> table = DrawBoardCharacteristics( wxPoint( 0, 0 ),
|
std::vector<BOARD_ITEM*> table = DrawBoardCharacteristics( wxPoint( 0, 0 ),
|
||||||
m_frame->GetActiveLayer(), false,
|
m_frame->GetActiveLayer(), false,
|
||||||
|
@ -766,7 +758,7 @@ int DRAWING_TOOL::PlaceCharacteristics( const TOOL_EVENT& aEvent )
|
||||||
items.push_back( static_cast<BOARD_ITEM*>( group ) );
|
items.push_back( static_cast<BOARD_ITEM*>( group ) );
|
||||||
|
|
||||||
if( InteractivePlaceWithPreview( aEvent, items, preview, &layerSet ) == -1 )
|
if( InteractivePlaceWithPreview( aEvent, items, preview, &layerSet ) == -1 )
|
||||||
m_frame->SetActiveLayer( savedLayer );
|
m_frame->SetActiveLayer( layer );
|
||||||
else
|
else
|
||||||
m_frame->SetActiveLayer( table.front()->GetLayer() );
|
m_frame->SetActiveLayer( table.front()->GetLayer() );
|
||||||
|
|
||||||
|
@ -776,11 +768,11 @@ int DRAWING_TOOL::PlaceCharacteristics( const TOOL_EVENT& aEvent )
|
||||||
|
|
||||||
int DRAWING_TOOL::PlaceStackup( const TOOL_EVENT& aEvent )
|
int DRAWING_TOOL::PlaceStackup( const TOOL_EVENT& aEvent )
|
||||||
{
|
{
|
||||||
wxPoint tableSize = wxPoint();
|
VECTOR2I tableSize;
|
||||||
|
|
||||||
LSET layerSet = ( layerSet.AllCuMask() | layerSet.AllTechMask() );
|
LSET layerSet = ( layerSet.AllCuMask() | layerSet.AllTechMask() );
|
||||||
layerSet = static_cast<LSET>( layerSet.set( Edge_Cuts ).set( Margin ) );
|
layerSet = static_cast<LSET>( layerSet.set( Edge_Cuts ).set( Margin ) );
|
||||||
layerSet = static_cast<LSET>( layerSet.reset( F_Fab ).reset( B_Fab ) );
|
layerSet = static_cast<LSET>( layerSet.reset( F_Fab ).reset( B_Fab ) );
|
||||||
|
|
||||||
PCB_LAYER_ID layer = m_frame->GetActiveLayer();
|
PCB_LAYER_ID layer = m_frame->GetActiveLayer();
|
||||||
PCB_LAYER_ID savedLayer = layer;
|
PCB_LAYER_ID savedLayer = layer;
|
||||||
|
@ -791,8 +783,9 @@ int DRAWING_TOOL::PlaceStackup( const TOOL_EVENT& aEvent )
|
||||||
layer = Cmts_User;
|
layer = Cmts_User;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<BOARD_ITEM*> table = DrawSpecificationStackup(
|
std::vector<BOARD_ITEM*> table = DrawSpecificationStackup( VECTOR2I( 0, 0 ),
|
||||||
wxPoint( 0, 0 ), m_frame->GetActiveLayer(), false, &tableSize );
|
m_frame->GetActiveLayer(), false,
|
||||||
|
&tableSize );
|
||||||
std::vector<BOARD_ITEM*> preview;
|
std::vector<BOARD_ITEM*> preview;
|
||||||
std::vector<BOARD_ITEM*> items;
|
std::vector<BOARD_ITEM*> items;
|
||||||
|
|
||||||
|
|
|
@ -285,8 +285,7 @@ void DRAWING_TOOL::UpdateStatusBar() const
|
||||||
else
|
else
|
||||||
constrained = mgr.GetAppSettings<FOOTPRINT_EDITOR_SETTINGS>()->m_Use45Limit;
|
constrained = mgr.GetAppSettings<FOOTPRINT_EDITOR_SETTINGS>()->m_Use45Limit;
|
||||||
|
|
||||||
m_frame->DisplayConstraintsMsg( constrained ? _( "Constrain to H, V, 45" )
|
m_frame->DisplayConstraintsMsg( constrained ? _( "Constrain to H, V, 45" ) : wxT( "" ) );
|
||||||
: wxT( "" ) );
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -86,13 +86,13 @@ public:
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*/
|
*/
|
||||||
std::vector<BOARD_ITEM*> DrawBoardCharacteristics( const wxPoint& origin, PCB_LAYER_ID aLayer,
|
std::vector<BOARD_ITEM*> DrawBoardCharacteristics( const VECTOR2I& origin, PCB_LAYER_ID aLayer,
|
||||||
bool aDrawNow, wxPoint* tablesize );
|
bool aDrawNow, VECTOR2I* tablesize );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*/
|
*/
|
||||||
std::vector<BOARD_ITEM*> DrawSpecificationStackup( const wxPoint& origin, PCB_LAYER_ID aLayer,
|
std::vector<BOARD_ITEM*> DrawSpecificationStackup( const VECTOR2I& origin, PCB_LAYER_ID aLayer,
|
||||||
bool aDrawNow, wxPoint* tablesize );
|
bool aDrawNow, VECTOR2I* tablesize );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -36,7 +36,6 @@
|
||||||
#include <drawing_sheet/ds_proxy_view_item.h>
|
#include <drawing_sheet/ds_proxy_view_item.h>
|
||||||
#include <kiway.h>
|
#include <kiway.h>
|
||||||
#include <array_creator.h>
|
#include <array_creator.h>
|
||||||
#include <pcbnew_settings.h>
|
|
||||||
#include <status_popup.h>
|
#include <status_popup.h>
|
||||||
#include <tool/selection_conditions.h>
|
#include <tool/selection_conditions.h>
|
||||||
#include <tool/tool_manager.h>
|
#include <tool/tool_manager.h>
|
||||||
|
|
|
@ -594,8 +594,8 @@ int PAD_TOOL::EditPad( const TOOL_EVENT& aEvent )
|
||||||
if( PCB_ACTIONS::explodePad.GetHotKey() == PCB_ACTIONS::recombinePad.GetHotKey() )
|
if( PCB_ACTIONS::explodePad.GetHotKey() == PCB_ACTIONS::recombinePad.GetHotKey() )
|
||||||
{
|
{
|
||||||
msg.Printf( _( "Pad Edit Mode. Press %s again to exit." ),
|
msg.Printf( _( "Pad Edit Mode. Press %s again to exit." ),
|
||||||
KeyNameFromKeyCode( PCB_ACTIONS::recombinePad.GetHotKey() ) );}
|
KeyNameFromKeyCode( PCB_ACTIONS::recombinePad.GetHotKey() ) );
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
msg.Printf( _( "Pad Edit Mode. Press %s to exit." ),
|
msg.Printf( _( "Pad Edit Mode. Press %s to exit." ),
|
||||||
|
|
|
@ -33,7 +33,6 @@
|
||||||
#include <tools/pcb_selection_tool.h>
|
#include <tools/pcb_selection_tool.h>
|
||||||
#include <tools/board_reannotate_tool.h>
|
#include <tools/board_reannotate_tool.h>
|
||||||
#include <3d_viewer/eda_3d_viewer_frame.h>
|
#include <3d_viewer/eda_3d_viewer_frame.h>
|
||||||
#include <bitmaps.h>
|
|
||||||
#include <board_commit.h>
|
#include <board_commit.h>
|
||||||
#include <board.h>
|
#include <board.h>
|
||||||
#include <board_design_settings.h>
|
#include <board_design_settings.h>
|
||||||
|
@ -57,8 +56,6 @@
|
||||||
#include <properties.h>
|
#include <properties.h>
|
||||||
#include <settings/color_settings.h>
|
#include <settings/color_settings.h>
|
||||||
#include <tool/tool_manager.h>
|
#include <tool/tool_manager.h>
|
||||||
#include <footprint_viewer_frame.h>
|
|
||||||
#include <footprint_edit_frame.h>
|
|
||||||
#include <widgets/wx_progress_reporters.h>
|
#include <widgets/wx_progress_reporters.h>
|
||||||
#include <widgets/infobar.h>
|
#include <widgets/infobar.h>
|
||||||
#include <wx/hyperlink.h>
|
#include <wx/hyperlink.h>
|
||||||
|
@ -171,7 +168,7 @@ int PCB_CONTROL::ViaDisplayMode( const TOOL_EVENT& aEvent )
|
||||||
|
|
||||||
for( PCB_TRACK* track : board()->Tracks() )
|
for( PCB_TRACK* track : board()->Tracks() )
|
||||||
{
|
{
|
||||||
if( track->Type() == PCB_TRACE_T || track->Type() == PCB_VIA_T )
|
if( track->Type() == PCB_VIA_T )
|
||||||
view()->Update( track, KIGFX::REPAINT );
|
view()->Update( track, KIGFX::REPAINT );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -587,11 +584,9 @@ int PCB_CONTROL::DeleteItemCursor( const TOOL_EVENT& aEvent )
|
||||||
collector.m_Threshold = KiROUND( getView()->ToWorld( HITTEST_THRESHOLD_PIXELS ) );
|
collector.m_Threshold = KiROUND( getView()->ToWorld( HITTEST_THRESHOLD_PIXELS ) );
|
||||||
|
|
||||||
if( m_isFootprintEditor )
|
if( m_isFootprintEditor )
|
||||||
collector.Collect( board, GENERAL_COLLECTOR::FootprintItems,
|
collector.Collect( board, GENERAL_COLLECTOR::FootprintItems, aPos, guide );
|
||||||
(wxPoint) aPos, guide );
|
|
||||||
else
|
else
|
||||||
collector.Collect( board, GENERAL_COLLECTOR::BoardLevelItems,
|
collector.Collect( board, GENERAL_COLLECTOR::BoardLevelItems, aPos, guide );
|
||||||
(wxPoint) aPos, guide );
|
|
||||||
|
|
||||||
// Remove unselectable items
|
// Remove unselectable items
|
||||||
for( int i = collector.GetCount() - 1; i >= 0; --i )
|
for( int i = collector.GetCount() - 1; i >= 0; --i )
|
||||||
|
@ -607,7 +602,6 @@ int PCB_CONTROL::DeleteItemCursor( const TOOL_EVENT& aEvent )
|
||||||
|
|
||||||
if( m_pickerItem != item )
|
if( m_pickerItem != item )
|
||||||
{
|
{
|
||||||
|
|
||||||
if( m_pickerItem )
|
if( m_pickerItem )
|
||||||
selectionTool->UnbrightenItem( m_pickerItem );
|
selectionTool->UnbrightenItem( m_pickerItem );
|
||||||
|
|
||||||
|
@ -714,12 +708,12 @@ int PCB_CONTROL::Paste( const TOOL_EVENT& aEvent )
|
||||||
if( !frame()->IsType( FRAME_FOOTPRINT_EDITOR ) && !frame()->IsType( FRAME_PCB_EDITOR ) )
|
if( !frame()->IsType( FRAME_FOOTPRINT_EDITOR ) && !frame()->IsType( FRAME_PCB_EDITOR ) )
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
PASTE_MODE pasteMode = PASTE_MODE::KEEP_ANNOTATIONS;
|
PASTE_MODE mode = PASTE_MODE::KEEP_ANNOTATIONS;
|
||||||
const wxString defaultRef = wxT( "REF**" );
|
const wxString defaultRef = wxT( "REF**" );
|
||||||
|
|
||||||
if( aEvent.IsAction( &ACTIONS::pasteSpecial ) )
|
if( aEvent.IsAction( &ACTIONS::pasteSpecial ) )
|
||||||
{
|
{
|
||||||
DIALOG_PASTE_SPECIAL dlg( m_frame, &pasteMode, defaultRef );
|
DIALOG_PASTE_SPECIAL dlg( m_frame, &mode, defaultRef );
|
||||||
|
|
||||||
if( dlg.ShowModal() == wxID_CANCEL )
|
if( dlg.ShowModal() == wxID_CANCEL )
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -803,18 +797,17 @@ int PCB_CONTROL::Paste( const TOOL_EVENT& aEvent )
|
||||||
|
|
||||||
delete clipBoard;
|
delete clipBoard;
|
||||||
|
|
||||||
placeBoardItems( pastedItems, true, true,
|
placeBoardItems( pastedItems, true, true, mode == PASTE_MODE::UNIQUE_ANNOTATIONS );
|
||||||
pasteMode == PASTE_MODE::UNIQUE_ANNOTATIONS );
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if( pasteMode == PASTE_MODE::REMOVE_ANNOTATIONS )
|
if( mode == PASTE_MODE::REMOVE_ANNOTATIONS )
|
||||||
{
|
{
|
||||||
for( FOOTPRINT* clipFootprint : clipBoard->Footprints() )
|
for( FOOTPRINT* clipFootprint : clipBoard->Footprints() )
|
||||||
clipFootprint->SetReference( defaultRef );
|
clipFootprint->SetReference( defaultRef );
|
||||||
}
|
}
|
||||||
|
|
||||||
placeBoardItems( clipBoard, true, pasteMode == PASTE_MODE::UNIQUE_ANNOTATIONS );
|
placeBoardItems( clipBoard, true, mode == PASTE_MODE::UNIQUE_ANNOTATIONS );
|
||||||
|
|
||||||
m_frame->GetBoard()->BuildConnectivity();
|
m_frame->GetBoard()->BuildConnectivity();
|
||||||
m_frame->Compile_Ratsnest( true );
|
m_frame->Compile_Ratsnest( true );
|
||||||
|
@ -835,14 +828,14 @@ int PCB_CONTROL::Paste( const TOOL_EVENT& aEvent )
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if( pasteMode == PASTE_MODE::REMOVE_ANNOTATIONS )
|
if( mode == PASTE_MODE::REMOVE_ANNOTATIONS )
|
||||||
clipFootprint->SetReference( defaultRef );
|
clipFootprint->SetReference( defaultRef );
|
||||||
|
|
||||||
clipFootprint->SetParent( board() );
|
clipFootprint->SetParent( board() );
|
||||||
pastedItems.push_back( clipFootprint );
|
pastedItems.push_back( clipFootprint );
|
||||||
}
|
}
|
||||||
|
|
||||||
placeBoardItems( pastedItems, true, true, pasteMode == PASTE_MODE::UNIQUE_ANNOTATIONS );
|
placeBoardItems( pastedItems, true, true, mode == PASTE_MODE::UNIQUE_ANNOTATIONS );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1260,11 +1253,12 @@ int PCB_CONTROL::UpdateMessagePanel( const TOOL_EVENT& aEvent )
|
||||||
if( overlap.count() > 0
|
if( overlap.count() > 0
|
||||||
&& ( a_netcode != b_netcode || a_netcode < 0 || b_netcode < 0 ) )
|
&& ( a_netcode != b_netcode || a_netcode < 0 || b_netcode < 0 ) )
|
||||||
{
|
{
|
||||||
constraint = drcEngine->EvalRules( CLEARANCE_CONSTRAINT, a, b,
|
PCB_LAYER_ID layer = overlap.CuStack().front();
|
||||||
overlap.CuStack().front() );
|
|
||||||
|
|
||||||
std::shared_ptr<SHAPE> a_shape( a_conn->GetEffectiveShape( overlap.CuStack().front() ) );
|
constraint = drcEngine->EvalRules( CLEARANCE_CONSTRAINT, a, b, layer );
|
||||||
std::shared_ptr<SHAPE> b_shape( b_conn->GetEffectiveShape( overlap.CuStack().front() ) );
|
|
||||||
|
std::shared_ptr<SHAPE> a_shape( a_conn->GetEffectiveShape( layer ) );
|
||||||
|
std::shared_ptr<SHAPE> b_shape( b_conn->GetEffectiveShape( layer ) );
|
||||||
|
|
||||||
int actual_clearance = a_shape->GetClearance( b_shape.get() );
|
int actual_clearance = a_shape->GetClearance( b_shape.get() );
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue