Commit 0785ca80 authored by Marco Mattila's avatar Marco Mattila
Browse files

Add visibility checking to pcbnew block operations.

parent c2cf793f
Loading
Loading
Loading
Loading
+27 −13
Original line number Diff line number Diff line
@@ -12,7 +12,6 @@

#include "pcbnew.h"
#include "wxPcbStruct.h"
#include "pcbplot.h"
#include "trigo.h"

#include "dialog_block_options_base.h"
@@ -391,13 +390,17 @@ void PCB_EDIT_FRAME::Block_SelectItems()
    PICKED_ITEMS_LIST* itemsList = &GetScreen()->m_BlockLocate.m_ItemsSelection;
    ITEM_PICKER        picker( NULL, UR_UNSPECIFIED );

    // Add modules
    if( blockIncludeModules )
    {
        for( MODULE* module = m_Pcb->m_Modules; module != NULL;
             module = module->Next() )
        {
            int layer = module->GetLayer();

            if( module->HitTest( GetScreen()->m_BlockLocate )
               && ( !module->IsLocked() || blockIncludeLockedModules ) )
                && ( !module->IsLocked() || blockIncludeLockedModules )
                && m_Pcb->IsModuleLayerVisible( layer ) )
            {
                picker.m_PickedItem     = module;
                picker.m_PickedItemType = module->Type();
@@ -406,15 +409,15 @@ void PCB_EDIT_FRAME::Block_SelectItems()
        }
    }

    /* Remove tracks and vias */
    // Add tracks and vias
    if( blockIncludeTracks )
    {
        for( TRACK* pt_segm = m_Pcb->m_Track; pt_segm != NULL;
             pt_segm = pt_segm->Next() )
        {
            if( pt_segm->HitTest( GetScreen()->m_BlockLocate ) )
            if( pt_segm->HitTest( GetScreen()->m_BlockLocate )
                && m_Pcb->IsLayerVisible( pt_segm->GetLayer() ) )
            {
                /* This track is in bloc: select it */
                picker.m_PickedItem     = pt_segm;
                picker.m_PickedItemType = pt_segm->Type();
                itemsList->PushItem( picker );
@@ -422,8 +425,9 @@ void PCB_EDIT_FRAME::Block_SelectItems()
        }
    }

    /* Select graphic items */
    // Add graphic items
    masque_layer = EDGE_LAYER;

    if( blockIncludeItemsOnTechLayers )
        masque_layer = ALL_LAYERS;

@@ -433,12 +437,15 @@ void PCB_EDIT_FRAME::Block_SelectItems()
    for( BOARD_ITEM* PtStruct = m_Pcb->m_Drawings; PtStruct != NULL;
         PtStruct = PtStruct->Next() )
    {
        if( !m_Pcb->IsLayerVisible( PtStruct->GetLayer() ) )
            continue;
        bool select_me = false;
        switch( PtStruct->Type() )
        {
        case TYPE_DRAWSEGMENT:
            if( (g_TabOneLayerMask[PtStruct->GetLayer()] & masque_layer) == 0 )
                break;

            if( !PtStruct->HitTest( GetScreen()->m_BlockLocate ) )
                break;
            select_me = true; // This item is in bloc: select it
@@ -447,6 +454,7 @@ void PCB_EDIT_FRAME::Block_SelectItems()
        case TYPE_TEXTE:
            if( !blockIncludePcbTexts )
                break;

            if( !PtStruct->HitTest( GetScreen()->m_BlockLocate ) )
                break;
            select_me = true; // This item is in bloc: select it
@@ -455,6 +463,7 @@ void PCB_EDIT_FRAME::Block_SelectItems()
        case TYPE_MIRE:
            if( ( g_TabOneLayerMask[PtStruct->GetLayer()] & masque_layer ) == 0 )
                break;

            if( !PtStruct->HitTest( GetScreen()->m_BlockLocate ) )
                break;
            select_me = true; // This item is in bloc: select it
@@ -463,6 +472,7 @@ void PCB_EDIT_FRAME::Block_SelectItems()
        case TYPE_DIMENSION:
            if( ( g_TabOneLayerMask[PtStruct->GetLayer()] & masque_layer ) == 0 )
                break;

            if( !PtStruct->HitTest( GetScreen()->m_BlockLocate ) )
                break;
            select_me = true; // This item is in bloc: select it
@@ -480,7 +490,7 @@ void PCB_EDIT_FRAME::Block_SelectItems()
        }
    }

    /* Zone selection */
    // Add zones
    if( blockIncludeZones )
    {
#if 0
@@ -494,7 +504,8 @@ void PCB_EDIT_FRAME::Block_SelectItems()
        {
            /* Segments used in Zone filling selection */

            if( pt_segm->HitTest( GetScreen()->m_BlockLocate ) )
            if( pt_segm->HitTest( GetScreen()->m_BlockLocate )
                && m_Pcb->IsLayerVisible( pt_segm->GetLayer() ) )
            {
                picker.m_PickedItem     = pt_segm;
                picker.m_PickedItemType = pt_segm->Type();
@@ -505,9 +516,12 @@ void PCB_EDIT_FRAME::Block_SelectItems()
#endif
        for( int ii = 0; ii < m_Pcb->GetAreaCount(); ii++ )
        {
            if( m_Pcb->GetArea( ii )->HitTest( GetScreen()->m_BlockLocate ) )
            ZONE_CONTAINER* area = m_Pcb->GetArea( ii );

            if( area->HitTest( GetScreen()->m_BlockLocate )
                && m_Pcb->IsLayerVisible( area->GetLayer() ) )
            {
                BOARD_ITEM* zone_c = m_Pcb->GetArea( ii );
                BOARD_ITEM* zone_c = (BOARD_ITEM*) area;
                picker.m_PickedItem     = zone_c;
                picker.m_PickedItemType = zone_c->Type();
                itemsList->PushItem( picker );
+93 −91
Original line number Diff line number Diff line
///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Sep  8 2010)
// C++ code generated with wxFormBuilder (version Nov 18 2010)
// http://www.wxformbuilder.org/
//
// PLEASE DO "NOT" EDIT THIS FILE!
@@ -16,37 +16,39 @@ DIALOG_BLOCK_OPTIONS_BASE::DIALOG_BLOCK_OPTIONS_BASE( wxWindow* parent, wxWindow
	wxBoxSizer* bSizerMain;
	bSizerMain = new wxBoxSizer( wxVERTICAL );
	
	wxStaticBoxSizer* sbSizer1;
	sbSizer1 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Options") ), wxVERTICAL );
	
	wxGridSizer* gSizer1;
	gSizer1 = new wxGridSizer( 4, 2, 0, 0 );
	
	m_Include_Modules = new wxCheckBox( this, wxID_ANY, _("Include Modules"), wxDefaultPosition, wxDefaultSize, 0 );
	m_Include_Modules = new wxCheckBox( this, wxID_ANY, _("Include modules"), wxDefaultPosition, wxDefaultSize, 0 );
	gSizer1->Add( m_Include_Modules, 0, wxALL, 5 );
	
	m_Include_PcbTextes = new wxCheckBox( this, wxID_ANY, _("Include Texts on Copper Layers"), wxDefaultPosition, wxDefaultSize, 0 );
	m_Include_PcbTextes = new wxCheckBox( this, wxID_ANY, _("Include text items"), wxDefaultPosition, wxDefaultSize, 0 );
	gSizer1->Add( m_Include_PcbTextes, 0, wxALL, 5 );
	
	m_IncludeLockedModules = new wxCheckBox( this, wxID_ANY, _("Include Locked Modules"), wxDefaultPosition, wxDefaultSize, 0 );
	m_IncludeLockedModules = new wxCheckBox( this, wxID_ANY, _("Include locked modules"), wxDefaultPosition, wxDefaultSize, 0 );
	gSizer1->Add( m_IncludeLockedModules, 0, wxALL, 5 );
	
	m_Include_Draw_Items = new wxCheckBox( this, wxID_ANY, _("Include Drawings"), wxDefaultPosition, wxDefaultSize, 0 );
	m_Include_Draw_Items = new wxCheckBox( this, wxID_ANY, _("Include drawings"), wxDefaultPosition, wxDefaultSize, 0 );
	gSizer1->Add( m_Include_Draw_Items, 0, wxALL, 5 );
	
	m_Include_Tracks = new wxCheckBox( this, wxID_ANY, _("Include Tracks"), wxDefaultPosition, wxDefaultSize, 0 );
	m_Include_Tracks = new wxCheckBox( this, wxID_ANY, _("Include tracks"), wxDefaultPosition, wxDefaultSize, 0 );
	gSizer1->Add( m_Include_Tracks, 0, wxALL, 5 );
	
	m_Include_Edges_Items = new wxCheckBox( this, wxID_ANY, _("Include Board Outline Layer"), wxDefaultPosition, wxDefaultSize, 0 );
	m_Include_Edges_Items = new wxCheckBox( this, wxID_ANY, _("Include board outline layer"), wxDefaultPosition, wxDefaultSize, 0 );
	gSizer1->Add( m_Include_Edges_Items, 0, wxALL, 5 );
	
	m_Include_Zones = new wxCheckBox( this, wxID_ANY, _("Include Zones"), wxDefaultPosition, wxDefaultSize, 0 );
	m_Include_Zones = new wxCheckBox( this, wxID_ANY, _("Include zones"), wxDefaultPosition, wxDefaultSize, 0 );
	gSizer1->Add( m_Include_Zones, 0, wxALL, 5 );
	
	m_DrawBlockItems = new wxCheckBox( this, wxID_ANY, _("Draw Block Items while Moving"), wxDefaultPosition, wxDefaultSize, 0 );
	m_DrawBlockItems = new wxCheckBox( this, wxID_ANY, _("Draw selected items while moving"), wxDefaultPosition, wxDefaultSize, 0 );
	gSizer1->Add( m_DrawBlockItems, 0, wxALL, 5 );
	
	bSizerMain->Add( gSizer1, 0, wxEXPAND, 5 );
	sbSizer1->Add( gSizer1, 0, wxEXPAND, 5 );
	
	m_staticline1 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
	bSizerMain->Add( m_staticline1, 0, wxEXPAND | wxALL, 5 );
	bSizerMain->Add( sbSizer1, 1, wxALL|wxEXPAND, 5 );
	
	m_sdbSizer1 = new wxStdDialogButtonSizer();
	m_sdbSizer1OK = new wxButton( this, wxID_OK );
+853 −640

File changed.

Preview size limit exceeded, changes collapsed.

+60 −61
Original line number Diff line number Diff line
///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Sep  8 2010)
// C++ code generated with wxFormBuilder (version Nov 18 2010)
// http://www.wxformbuilder.org/
//
// PLEASE DO "NOT" EDIT THIS FILE!
@@ -17,7 +17,7 @@
#include <wx/colour.h>
#include <wx/settings.h>
#include <wx/sizer.h>
#include <wx/statline.h>
#include <wx/statbox.h>
#include <wx/button.h>
#include <wx/dialog.h>

@@ -40,7 +40,6 @@ class DIALOG_BLOCK_OPTIONS_BASE : public wxDialog
		wxCheckBox* m_Include_Edges_Items;
		wxCheckBox* m_Include_Zones;
		wxCheckBox* m_DrawBlockItems;
		wxStaticLine* m_staticline1;
		wxStdDialogButtonSizer* m_sdbSizer1;
		wxButton* m_sdbSizer1OK;
		wxButton* m_sdbSizer1Cancel;