bool GERBVIEW_FRAME::Read_EXCELLON_File( const wxString& aFullFileName ) { wxString msg; int layerId = getActiveLayer(); // current layer used in GerbView GERBER_FILE_IMAGE_LIST* images = GetGerberLayout()->GetImagesList(); EXCELLON_IMAGE* drill_Layer = (EXCELLON_IMAGE*) images->GetGbrImage( layerId ); if( drill_Layer == NULL ) { drill_Layer = new EXCELLON_IMAGE( layerId ); layerId = images->AddGbrImage( drill_Layer, layerId ); } if( layerId < 0 ) { DisplayError( this, _( "No room to load file" ) ); return false; } // Read the Excellon drill file: bool success = drill_Layer->LoadFile( aFullFileName ); if( !success ) { msg.Printf( _( "File %s not found" ), GetChars( aFullFileName ) ); DisplayError( this, msg ); return false; } // Display errors list if( drill_Layer->GetMessages().size() > 0 ) { HTML_MESSAGE_BOX dlg( this, _( "Error reading EXCELLON drill file" ) ); dlg.ListSet( drill_Layer->GetMessages() ); dlg.ShowModal(); } return success; }
void DIALOG_PRINT_USING_PRINTER::InitValues( ) { SetFocus(); wxString msg; if( s_pageSetupData == NULL ) { s_pageSetupData = new wxPageSetupDialogData; // Set initial page margins. // Margins are already set in Gerbview, so we can use 0 s_pageSetupData->SetMarginTopLeft( wxPoint( 0, 0 ) ); s_pageSetupData->SetMarginBottomRight( wxPoint( 0, 0 ) ); } s_Parameters.m_PageSetupData = s_pageSetupData; GERBER_FILE_IMAGE_LIST* images = m_Parent->GetGerberLayout()->GetImagesList(); // Create layer list for( unsigned ii = 0; ii < images->ImagesMaxCount(); ++ii ) { msg = _( "Layer" ); msg << wxT( " " ) << ii + 1; wxStaticBoxSizer* boxSizer = ( ii < 16 ) ? m_leftLayersBoxSizer : m_rightLayersBoxSizer; m_BoxSelectLayer[ii] = new wxCheckBox( boxSizer->GetStaticBox(), wxID_ANY, msg ); boxSizer->Add( m_BoxSelectLayer[ii], wxGROW | wxLEFT | wxRIGHT | wxTOP ); if( images->GetGbrImage( ii ) == NULL ) // Nothing loaded on this draw layer m_BoxSelectLayer[ii]->Enable( false ); } // Read the scale adjust option int scale_idx = 4; // default selected scale = ScaleList[4] = 1.000 if( m_Config ) { m_Config->Read( OPTKEY_PRINT_X_FINESCALE_ADJ, &s_Parameters.m_XScaleAdjust ); m_Config->Read( OPTKEY_PRINT_Y_FINESCALE_ADJ, &s_Parameters.m_YScaleAdjust ); m_Config->Read( OPTKEY_PRINT_SCALE, &scale_idx ); m_Config->Read( OPTKEY_PRINT_PAGE_FRAME, &s_Parameters.m_Print_Sheet_Ref, 1 ); m_Config->Read( OPTKEY_PRINT_MONOCHROME_MODE, &s_Parameters.m_Print_Black_and_White, 1 ); // Test for a reasonnable scale value. Set to 1 if problem if( s_Parameters.m_XScaleAdjust < MIN_SCALE || s_Parameters.m_YScaleAdjust < MIN_SCALE || s_Parameters.m_XScaleAdjust > MAX_SCALE || s_Parameters.m_YScaleAdjust > MAX_SCALE ) s_Parameters.m_XScaleAdjust = s_Parameters.m_YScaleAdjust = 1.0; for( int layer = 0; layer < GERBER_DRAWLAYERS_COUNT; ++layer ) { wxString layerKey; bool option; layerKey.Printf( OPTKEY_LAYERBASE, layer ); m_Config->Read( layerKey, &option, false ); m_BoxSelectLayer[layer]->SetValue( option ); } } m_ScaleOption->SetSelection( scale_idx ); scale_idx = m_ScaleOption->GetSelection(); s_Parameters.m_PrintScale = s_ScaleList[scale_idx]; m_Print_Mirror->SetValue( s_Parameters.m_PrintMirror ); if( s_Parameters.m_Print_Black_and_White ) m_ModeColorOption->SetSelection( 1 ); else m_ModeColorOption->SetSelection( 0 ); s_Parameters.m_PenDefaultSize = 0; // Create scale adjust option msg.Printf( wxT( "%f" ), s_Parameters.m_XScaleAdjust ); m_FineAdjustXscaleOpt->SetValue( msg ); msg.Printf( wxT( "%f" ), s_Parameters.m_YScaleAdjust ); m_FineAdjustYscaleOpt->SetValue( msg ); bool enable = (s_Parameters.m_PrintScale == 1.0); m_FineAdjustXscaleOpt->Enable(enable); m_FineAdjustYscaleOpt->Enable(enable); }
bool GERBVIEW_FRAME::Read_EXCELLON_File( const wxString& aFullFileName ) { wxString msg; int layerId = GetActiveLayer(); // current layer used in GerbView GERBER_FILE_IMAGE_LIST* images = GetGerberLayout()->GetImagesList(); auto gerber_layer = images->GetGbrImage( layerId ); auto drill_layer = dynamic_cast<EXCELLON_IMAGE*>( gerber_layer ); if( gerber_layer && !drill_layer ) { // The active layer contains old gerber data we have to clear Erase_Current_DrawLayer( false ); } if( drill_layer == nullptr ) { drill_layer = new EXCELLON_IMAGE( layerId ); layerId = images->AddGbrImage( drill_layer, layerId ); } if( layerId < 0 ) { DisplayError( this, _( "No room to load file" ) ); return false; } // Read the Excellon drill file: bool success = drill_layer->LoadFile( aFullFileName ); if( !success ) { msg.Printf( _( "File %s not found" ), GetChars( aFullFileName ) ); DisplayError( this, msg ); return false; } // Display errors list if( drill_layer->GetMessages().size() > 0 ) { HTML_MESSAGE_BOX dlg( this, _( "Error reading EXCELLON drill file" ) ); dlg.ListSet( drill_layer->GetMessages() ); dlg.ShowModal(); } if( success ) { EDA_DRAW_PANEL_GAL* canvas = GetGalCanvas(); if( canvas ) { KIGFX::VIEW* view = canvas->GetView(); for( GERBER_DRAW_ITEM* item = drill_layer->GetItemsList(); item; item = item->Next() ) { view->Add( (KIGFX::VIEW_ITEM*) item ); } } } return success; }
void LAYERS_MAP_DIALOG::initDialog() { wxStaticText* label; wxStaticText* text; int item_ID; wxString msg; wxSize goodSize; for( int ii = 0; ii < GERBER_DRAWLAYERS_COUNT; ++ii ) { // Specify the default value for each member of these arrays. m_buttonTable[ii] = -1; m_layersLookUpTable[ii] = UNSELECTED_LAYER; } // Ensure we have: // at least 2 copper layers and less than max pacb copper layers count // and even layers count because a board *must* have even layers count normalizeBrdLayersCount(); int idx = ( m_exportBoardCopperLayersCount / 2 ) - 1; m_comboCopperLayersCount->SetSelection( idx ); LAYER_NUM pcb_layer_num = 0; m_gerberActiveLayersCount = 0; GERBER_FILE_IMAGE_LIST* images = m_Parent->GetGerberLayout()->GetImagesList(); for( unsigned ii = 0; ii < GERBER_DRAWLAYERS_COUNT; ++ii ) { if( images->GetGbrImage( ii ) == NULL ) break; if( (pcb_layer_num == m_exportBoardCopperLayersCount - 1) && (m_exportBoardCopperLayersCount > 1) ) pcb_layer_num = F_Cu; m_buttonTable[m_gerberActiveLayersCount] = ii; m_layersLookUpTable[ii] = pcb_layer_num; m_gerberActiveLayersCount++; ++pcb_layer_num; } if( m_gerberActiveLayersCount <= GERBER_DRAWLAYERS_COUNT/2 ) // Only one list is enough { m_staticlineSep->Hide(); } wxFlexGridSizer* flexColumnBoxSizer = m_flexLeftColumnBoxSizer; for( int ii = 0; ii < m_gerberActiveLayersCount; ii++ ) { // Each Gerber layer has an associated static text string (to // identify that layer), a button (for invoking a child dialog // box to change which Pcbnew layer that the Gerber layer is // mapped to), and a second static text string (to depict which // Pcbnew layer that the Gerber layer has been mapped to). Each // of those items are placed into the left hand column, middle // column, and right hand column (respectively) of the Flexgrid // sizer, and the color of the second text string is set to // fuchsia or blue (to respectively indicate whether the Gerber // layer has been mapped to a Pcbnew layer or is not being // exported at all). (Experimentation has shown that if a text // control is used to depict which Pcbnew layer that each Gerber // layer is mapped to (instead of a static text string), then // those controls do not behave in a fully satisfactory manner // in the Linux version. Even when the read-only attribute is // specified for all of those controls, they can still be selected // when the arrow keys or Tab key is used to step through all of // the controls within the dialog box, and directives to set the // foreground color of the text of each such control to blue (to // indicate that the text is of a read-only nature) are disregarded. // Specify a FlexGrid sizer with an appropriate number of rows // and three columns. If nb_items < 16, then the number of rows // is nb_items; otherwise, the number of rows is 16 (with two // separate columns of controls being used if nb_items > 16). if( ii == GERBER_DRAWLAYERS_COUNT/2 ) flexColumnBoxSizer = m_flexRightColumnBoxSizer; // Provide a text string to identify the Gerber layer msg.Printf( _( "Layer %d" ), m_buttonTable[ii] + 1 ); label = new wxStaticText( this, wxID_STATIC, msg, wxDefaultPosition, wxDefaultSize, 0 ); flexColumnBoxSizer->Add( label, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5 ); /* Add file name and extension without path. */ wxFileName fn( images->GetGbrImage( ii )->m_FileName ); label = new wxStaticText( this, wxID_STATIC, fn.GetFullName(), wxDefaultPosition, wxDefaultSize ); flexColumnBoxSizer->Add( label, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5 ); // Provide a button for this layer (which will invoke a child dialog box) item_ID = ID_BUTTON_0 + ii; wxButton * Button = new wxButton( this, item_ID, wxT( "..." ), wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT ); flexColumnBoxSizer->Add( Button, 0, wxALIGN_CENTER_VERTICAL | wxALL ); // Provide another text string to specify which Pcbnew layer that this // Gerber layer is initially mapped to, and set the initial text to // specify the appropriate Pcbnew layer, and set the foreground color // of the text to fuchsia (to indicate that the layer is being exported). item_ID = ID_TEXT_0 + ii; // When the first of these text strings is being added, determine what // size is necessary to to be able to display any possible string // without it being truncated. Then specify that size as the minimum // size for all of these text strings. (If this minimum size is not // determined in this fashion, then it is possible for the display of // one or more of these strings to be truncated after different Pcbnew // layers are selected.) if( ii == 0 ) { msg = _( "Do not export" ); text = new wxStaticText( this, item_ID, msg, wxDefaultPosition, wxDefaultSize, 0 ); goodSize = text->GetSize(); for( LAYER_NUM jj = 0; jj < GERBER_DRAWLAYERS_COUNT; ++jj ) { text->SetLabel( GetPCBDefaultLayerName( jj ) ); if( goodSize.x < text->GetSize().x ) goodSize.x = text->GetSize().x; } msg = GetPCBDefaultLayerName( m_layersLookUpTable[m_buttonTable[ii]] ); text->SetLabel( msg ); } else { msg = GetPCBDefaultLayerName( m_layersLookUpTable[m_buttonTable[ii]] ); text = new wxStaticText( this, item_ID, msg, wxDefaultPosition, wxDefaultSize, 0 ); } text->SetMinSize( goodSize ); flexColumnBoxSizer->Add( text, 1, wxALIGN_CENTER_VERTICAL | wxALL, 5 ); m_layersList[ii] = text; } }