void DIALOG_CHOOSE_COMPONENT::OnHandlePreviewRepaint( wxPaintEvent& aRepaintEvent ) { int unit = 0; LIB_ALIAS* selection = m_search_container->GetSelectedAlias( &unit ); LIB_PART* part = selection ? selection->GetPart() : NULL; // Don't draw anything (not even the background) if we don't have // a part to show if( !part ) return; if( selection->IsRoot() ) { // just show the part directly renderPreview( part, unit ); } else { // switch out the name temporarily for the alias name wxString tmp( part->GetName() ); part->SetName( selection->GetName() ); renderPreview( part, unit ); part->SetName( tmp ); } }
void SetHtmlDesc() { wxString raw_desc; if( m_part->IsRoot() ) { raw_desc = m_part->GetDescription(); } else { LIB_PART* root = m_part->GetPart(); for( size_t i = 0; i < root->GetAliasCount(); ++i ) { LIB_ALIAS* alias = root->GetAlias( i ); if( alias && !alias->GetDescription().empty() ) { raw_desc = alias->GetDescription(); break; } } } m_html.Replace( "__DESC__", wxString::Format( DescFormat, EscapedHTML( raw_desc ) ) ); }
void LIB_EDIT_FRAME::copySelectedItems() { LIB_PART* part = GetCurPart(); if( !part ) return; m_clipboard.ClearListAndDeleteItems(); // delete previous saved list, if exists m_clipboard.SetLastCursorPosition( GetScreen()->m_BlockLocate.GetEnd() ); // store the reference point for( LIB_ITEM& item : part->GetDrawItems() ) { // We *do not* copy fields because they are unique for the whole component // so skip them (do not duplicate) if they are flagged selected. if( item.Type() == LIB_FIELD_T ) item.ClearFlags( SELECTED ); if( !item.IsSelected() ) continue; // Do not clear the 'selected' flag. It is required to have items drawn when they are pasted. LIB_ITEM* copy = (LIB_ITEM*) item.Clone(); copy->SetFlags( copy->GetFlags() | UR_TRANSIENT ); ITEM_PICKER picker( copy, UR_NEW ); m_clipboard.PushItem( picker ); } }
void DIALOG_EDIT_COMPONENT_IN_LIBRARY::DeleteAliasOfPart( wxCommandEvent& event ) { wxString aliasname = m_PartAliasListCtrl->GetStringSelection(); if( aliasname.IsEmpty() ) return; if( aliasname.CmpNoCase( m_Parent->GetAliasName() ) == 0 ) { wxString msg; msg.Printf( _( "Alias <%s> cannot be removed while it is being edited!" ), GetChars( aliasname ) ); DisplayError( this, msg ); return; } m_PartAliasListCtrl->Delete( m_PartAliasListCtrl->GetSelection() ); LIB_PART* component = m_Parent->GetCurPart(); if( component ) component->RemoveAlias( aliasname ); if( m_PartAliasListCtrl->IsEmpty() ) { m_ButtonDeleteAllAlias->Enable( false ); m_ButtonDeleteOneAlias->Enable( false ); } }
void SCH_SHEET_PATH::AnnotatePowerSymbols( PART_LIBS* aLibs, int* aReference ) { int ref = 1; if( aReference ) ref = *aReference; for( EDA_ITEM* item = LastDrawList(); item; item = item->Next() ) { if( item->Type() != SCH_COMPONENT_T ) continue; SCH_COMPONENT* component = (SCH_COMPONENT*) item; LIB_PART* part = aLibs->FindLibPart( component->GetPartName() ); if( !part || !part->IsPower() ) continue; wxString refstr = component->GetPrefix(); //str will be "C?" or so after the ClearAnnotation call. while( refstr.Last() == '?' ) refstr.RemoveLast(); if( !refstr.StartsWith( wxT( "#" ) ) ) refstr = wxT( "#" ) + refstr; refstr << wxT( "0" ) << ref; component->SetRef( this, refstr ); ref++; } if( aReference ) *aReference = ref; }
void LIB_EDIT_FRAME::RebuildSymbolUnitsList() { if( m_partSelectBox == NULL ) return; if( m_partSelectBox->GetCount() != 0 ) m_partSelectBox->Clear(); LIB_PART* part = GetCurPart(); if( !part || part->GetUnitCount() <= 1 ) { m_unit = 1; m_partSelectBox->Append( wxEmptyString ); } else { for( int i = 0; i < part->GetUnitCount(); i++ ) { wxString sub = LIB_PART::SubReference( i+1, false ); wxString unit = wxString::Format( _( "Unit %s" ), GetChars( sub ) ); m_partSelectBox->Append( unit ); } } // Ensure the current selected unit is compatible with // the number of units of the current part: if( part && part->GetUnitCount() < m_unit ) m_unit = 1; m_partSelectBox->SetSelection( ( m_unit > 0 ) ? m_unit - 1 : 0 ); }
bool LIB_EDIT_FRAME::SynchronizePins() { LIB_PART* part = GetCurPart(); return !m_editPinsPerPartOrConvert && ( part && ( part->HasConversion() || part->IsMulti() ) ); }
void LIB_EDIT_FRAME::OnUpdateDeMorganConvert( wxUpdateUIEvent& event ) { LIB_PART* part = GetCurPart(); event.Enable( GetShowDeMorgan() || ( part && part->HasConversion() ) ); event.Check( m_convert > 1 ); }
bool LIB_EDIT_FRAME::SaveOnePart( PART_LIB* aLib, bool aPromptUser ) { wxString msg; LIB_PART* part = GetCurPart(); GetScreen()->ClrModify(); LIB_PART* old_part = aLib->FindPart( part->GetName() ); if( old_part && aPromptUser ) { msg.Printf( _( "Part '%s' already exists. Change it?" ), GetChars( part->GetName() ) ); if( !IsOK( this, msg ) ) return false; } m_drawItem = m_lastDrawItem = NULL; if( old_part ) aLib->ReplacePart( old_part, part ); else aLib->AddPart( part ); msg.Printf( _( "Part '%s' saved in library '%s'" ), GetChars( part->GetName() ), GetChars( aLib->GetName() ) ); SetStatusText( msg ); return true; }
bool LIB_EDIT_FRAME::isCurrentPart( const LIB_ID& aLibId ) const { // This will return the root part of any alias LIB_PART* part = m_libMgr->GetBufferedPart( aLibId.GetLibItemName(), aLibId.GetLibNickname() ); // Now we can compare the libId of the current part and the root part return ( part && GetCurPart() && part->GetLibId() == GetCurPart()->GetLibId() ); }
void LIB_VIEW_FRAME::onUpdateUnitChoice( wxUpdateUIEvent& aEvent ) { LIB_PART* part = getSelectedSymbol(); int unit_count = 1; if( part ) unit_count = std::max( part->GetUnitCount(), 1 ); m_unitChoice->Enable( unit_count > 1 ); if( unit_count > 1 ) { // rebuild the unit list if it is not suitable (after a new selection for instance) if( unit_count != (int)m_unitChoice->GetCount() ) { m_unitChoice->Clear(); for( int ii = 0; ii < unit_count; ii++ ) m_unitChoice->Append( wxString::Format( _( "Unit %c" ), 'A' + ii ) ); } if( m_unitChoice->GetSelection() != std::max( 0, m_unit - 1 ) ) m_unitChoice->SetSelection( std::max( 0, m_unit - 1 ) ); } else if( m_unitChoice->GetCount() ) m_unitChoice->Clear(); }
/* * Set or clear the component alternate body style ( DeMorgan ). */ bool DIALOG_EDIT_COMPONENT_IN_LIBRARY::SetUnsetConvert() { LIB_PART* component = m_Parent->GetCurPart(); if( component == NULL || ( m_Parent->GetShowDeMorgan() == component->HasConversion() ) ) return false; if( m_Parent->GetShowDeMorgan() ) { if( !IsOK( this, _( "Add new pins for alternate body style ( DeMorgan ) to component?" ) ) ) return false; } else if( component->HasConversion() ) { if( !IsOK( this, _( "Delete alternate body style (DeMorgan) draw items from component?" ) ) ) { m_Parent->SetShowDeMorgan( true ); return false; } } component->SetConversion( m_Parent->GetShowDeMorgan() ); m_Parent->OnModify(); return true; }
void LIB_EDIT_FRAME::OnUpdatePinByPin( wxUpdateUIEvent& event ) { LIB_PART* part = GetCurPart(); event.Enable( part && ( part->GetUnitCount() > 1 || m_showDeMorgan ) ); event.Check( m_editPinsPerPartOrConvert ); }
void SCH_EDIT_FRAME::OnSelectUnit( wxCommandEvent& aEvent ) { SCH_SCREEN* screen = GetScreen(); SCH_ITEM* item = screen->GetCurItem(); wxCHECK_RET( item != NULL && item->Type() == SCH_COMPONENT_T, wxT( "Cannot select unit of invalid schematic item." ) ); INSTALL_UNBUFFERED_DC( dc, m_canvas ); m_canvas->MoveCursorToCrossHair(); SCH_COMPONENT* component = (SCH_COMPONENT*) item; int unit = aEvent.GetId() + 1 - ID_POPUP_SCH_SELECT_UNIT1; LIB_PART* part = GetLibPart( component->GetLibId() ); if( !part ) return; int unitCount = part->GetUnitCount(); wxCHECK_RET( (unit >= 1) && (unit <= unitCount), wxString::Format( wxT( "Cannot select unit %d from component " ), unit ) + part->GetName() ); if( unitCount <= 1 || component->GetUnit() == unit ) return; if( unit > unitCount ) unit = unitCount; STATUS_FLAGS flags = component->GetFlags(); if( !flags ) // No command in progress: save in undo list SaveCopyInUndoList( component, UR_CHANGED ); if( flags ) component->Draw( m_canvas, &dc, wxPoint( 0, 0 ), g_XorMode, g_GhostColor ); else component->Draw( m_canvas, &dc, wxPoint( 0, 0 ), g_XorMode ); /* Update the unit number. */ component->SetUnitSelection( m_CurrentSheet, unit ); component->SetUnit( unit ); component->ClearFlags(); component->SetFlags( flags ); // Restore m_Flag modified by SetUnit() if( m_autoplaceFields ) component->AutoAutoplaceFields( GetScreen() ); if( screen->TestDanglingEnds() ) m_canvas->Refresh(); OnModify(); }
void LIB_EDIT_FRAME::OnUpdateDeMorganNormal( wxUpdateUIEvent& event ) { if( m_mainToolBar == NULL ) return; LIB_PART* part = GetCurPart(); event.Enable( GetShowDeMorgan() || ( part && part->HasConversion() ) ); event.Check( m_convert <= 1 ); }
void LIB_EDIT_FRAME::OnPasteDuplicatePart( wxCommandEvent& aEvent ) { int dummyUnit; LIB_ID libId = m_treePane->GetLibTree()->GetSelectedLibId( &dummyUnit ); wxString lib = libId.GetLibNickname(); if( !m_libMgr->LibraryExists( lib ) ) return; LIB_PART* srcPart = nullptr; LIB_PART* newPart = nullptr; if( aEvent.GetId() == ID_LIBEDIT_DUPLICATE_PART ) { srcPart = m_libMgr->GetBufferedPart( libId.GetLibItemName(), lib ); newPart = new LIB_PART( *srcPart ); } else if( aEvent.GetId() == ID_LIBEDIT_PASTE_PART ) { auto clipboard = wxTheClipboard; wxClipboardLocker clipboardLock( clipboard ); if( !clipboardLock || ! clipboard->IsSupported( wxDF_TEXT ) ) return; wxTextDataObject data; clipboard->GetData( data ); wxString partSource = data.GetText(); STRING_LINE_READER reader( TO_UTF8( partSource ), "Clipboard" ); try { reader.ReadLine(); newPart = SCH_LEGACY_PLUGIN::ParsePart( reader ); } catch( IO_ERROR& e ) { wxLogError( wxString::Format( "Malformed clipboard: %s" ), GetChars( e.What() ) ); return; } } else wxFAIL; if( !newPart ) return; fixDuplicateAliases( newPart, lib ); m_libMgr->UpdatePart( newPart, lib ); SyncLibraries( false ); m_treePane->GetLibTree()->SelectLibId( LIB_ID( lib, newPart->GetName() ) ); delete newPart; }
/* * create the basic panel for component properties editing */ void DIALOG_EDIT_COMPONENT_IN_LIBRARY::InitBasicPanel() { LIB_PART* component = m_Parent->GetCurPart(); if( m_Parent->GetShowDeMorgan() ) m_AsConvertButt->SetValue( true ); int maxUnits = ID_POPUP_SCH_SELECT_UNIT_CMP_MAX - ID_POPUP_SCH_SELECT_UNIT1; m_SelNumberOfUnits->SetRange (1, maxUnits ); m_staticTextNbUnits->SetLabel( wxString::Format( _( "Number of Units (max allowed %d)" ), maxUnits ) ); /* Default values for a new component. */ if( component == NULL ) { m_ShowPinNumButt->SetValue( true ); m_ShowPinNameButt->SetValue( true ); m_PinsNameInsideButt->SetValue( true ); m_SelNumberOfUnits->SetValue( 1 ); m_SetSkew->SetValue( 40 ); m_OptionPower->SetValue( false ); m_OptionPartsLocked->SetValue( false ); return; } m_ShowPinNumButt->SetValue( component->ShowPinNumbers() ); m_ShowPinNameButt->SetValue( component->ShowPinNames() ); m_PinsNameInsideButt->SetValue( component->GetPinNameOffset() != 0 ); m_SelNumberOfUnits->SetValue( component->GetUnitCount() ); m_SetSkew->SetValue( component->GetPinNameOffset() ); m_OptionPower->SetValue( component->IsPower() ); m_OptionPartsLocked->SetValue( component->UnitsLocked() && component->GetUnitCount() > 1 ); }
void LIB_VIEW_FRAME::onUpdateNormalBodyStyleButton( wxUpdateUIEvent& aEvent ) { LIB_PART* symbol = getSelectedSymbol(); aEvent.Enable( symbol && symbol->HasConversion() ); if( symbol ) aEvent.Check( m_convert <= 1 ); else aEvent.Check( true ); }
LIB_PIN* SCH_SCREEN::GetPin( const wxPoint& aPosition, SCH_COMPONENT** aComponent, bool aEndPointOnly ) const { SCH_ITEM* item; SCH_COMPONENT* component = NULL; LIB_PIN* pin = NULL; for( item = m_drawList.begin(); item; item = item->Next() ) { if( item->Type() != SCH_COMPONENT_T ) continue; component = (SCH_COMPONENT*) item; if( aEndPointOnly ) { pin = NULL; LIB_PART* part = Prj().SchLibs()->FindLibPart( component->GetPartName() ); if( !part ) continue; for( pin = part->GetNextPin(); pin; pin = part->GetNextPin( pin ) ) { // Skip items not used for this part. if( component->GetUnit() && pin->GetUnit() && ( pin->GetUnit() != component->GetUnit() ) ) continue; if( component->GetConvert() && pin->GetConvert() && ( pin->GetConvert() != component->GetConvert() ) ) continue; if(component->GetPinPhysicalPosition( pin ) == aPosition ) break; } if( pin ) break; } else { pin = (LIB_PIN*) component->GetDrawItem( aPosition, LIB_PIN_T ); if( pin ) break; } } if( pin && aComponent ) *aComponent = component; return pin; }
void LIB_EDIT_FRAME::OnUpdatePartNumber( wxUpdateUIEvent& event ) { if( m_partSelectBox == NULL ) return; LIB_PART* part = GetCurPart(); // Using the typical event.Enable() call doesn't seem to work with wxGTK // so use the pointer to alias combobox to directly enable or disable. m_partSelectBox->Enable( part && part->GetUnitCount() > 1 ); }
void SCH_EDIT_FRAME::ConvertPart( SCH_COMPONENT* aComponent, wxDC* DC ) { if( !aComponent ) return; LIB_ID id = aComponent->GetLibId(); LIB_PART* part = GetLibPart( id ); if( part ) { wxString msg; if( !part->HasConversion() ) { msg.Printf( _( "No alternate body style found for symbol \"%s\" in library \"%s\"." ), id.GetLibItemName().wx_str(), id.GetLibNickname().wx_str() ); DisplayError( this, msg ); return; } STATUS_FLAGS flags = aComponent->GetFlags(); if( aComponent->GetFlags() ) aComponent->Draw( m_canvas, DC, wxPoint( 0, 0 ), g_XorMode, g_GhostColor ); else aComponent->Draw( m_canvas, DC, wxPoint( 0, 0 ), g_XorMode ); aComponent->SetConvert( aComponent->GetConvert() + 1 ); // ensure m_Convert = 0, 1 or 2 // 0 and 1 = shape 1 = not converted // 2 = shape 2 = first converted shape // > 2 is not used but could be used for more shapes // like multiple shapes for a programmable component // When m_Convert = val max, return to the first shape if( aComponent->GetConvert() > 2 ) aComponent->SetConvert( 1 ); // The alternate symbol may cause a change in the connection status so test the // connections so the connection indicators are drawn correctly. GetScreen()->TestDanglingEnds(); aComponent->ClearFlags(); aComponent->SetFlags( flags ); // Restore m_Flag (modified by SetConvert()) /* Redraw the component in the new position. */ if( aComponent->IsMoving() ) aComponent->Draw( m_canvas, DC, wxPoint( 0, 0 ), g_XorMode, g_GhostColor ); else aComponent->Draw( m_canvas, DC, wxPoint( 0, 0 ), GR_DEFAULT_DRAWMODE ); OnModify(); } }
/* * Change the number of parts per package. */ bool DIALOG_EDIT_COMPONENT_IN_LIBRARY::ChangeNbUnitsPerPackage( int MaxUnit ) { LIB_PART* part = m_Parent->GetCurPart(); if( !part || part->GetUnitCount() == MaxUnit || MaxUnit < 1 ) return false; if( MaxUnit < part->GetUnitCount() && !IsOK( this, _( "Delete extra parts from component?" ) ) ) return false; part->SetUnitCount( MaxUnit ); return true; }
void SetHtmlAliasOf() { if( m_part->IsRoot() ) { m_html.Replace( "__ALIASOF__", wxEmptyString ); } else { LIB_PART* root = m_part->GetPart(); const wxString root_name = ( root ? root->GetName() : _( "Unknown" ) ); m_html.Replace( "__ALIASOF__", wxString::Format( AliasOfFormat, EscapedHTML( root_name ) ) ); } }
void LIB_EDIT_FRAME::OnCreateNewPartFromExisting( wxCommandEvent& event ) { LIB_PART* part = GetCurPart(); wxCHECK_RET( part, wxT( "Cannot create new part from non-existent current part." ) ); INSTALL_UNBUFFERED_DC( dc, m_canvas ); m_canvas->CrossHairOff( &dc ); EditField( &part->GetValueField() ); m_canvas->MoveCursorToCrossHair(); m_canvas->CrossHairOn( &dc ); }
const BOX2I LIB_EDIT_FRAME::GetDocumentExtents() const { LIB_PART* part = GetCurPart(); if( !part ) { return BOX2I( VECTOR2I(-100, -100), VECTOR2I( 200, 200 ) ); } else { EDA_RECT boundingBox = part->GetUnitBoundingBox( m_unit, m_convert ); return BOX2I( boundingBox.GetOrigin(), VECTOR2I( boundingBox.GetWidth(), boundingBox.GetHeight() ) ); } }
/* Initialize state of check boxes and texts */ void DIALOG_EDIT_COMPONENT_IN_LIBRARY::initDlg() { m_AliasLocation = -1; LIB_PART* component = m_Parent->GetCurPart(); if( component == NULL ) { SetTitle( _( "Library Component Properties" ) ); return; } wxString title; bool isRoot = m_Parent->GetAliasName().CmpNoCase( component->GetName() ) == 0; if( !isRoot ) { title.Printf( _( "Properties for %s (alias of %s)" ), GetChars( m_Parent->GetAliasName() ), GetChars( component->GetName() ) ); } else title.Printf( _( "Properties for %s" ), GetChars( component->GetName() ) ); SetTitle( title ); InitPanelDoc(); InitBasicPanel(); if( isRoot && component->GetAliasCount() == 1 ) m_ButtonDeleteAllAlias->Enable( false ); /* Place list of alias names in listbox */ m_PartAliasListCtrl->Append( component->GetAliasNames( false ) ); if( component->GetAliasCount() <= 1 ) { m_ButtonDeleteAllAlias->Enable( false ); m_ButtonDeleteOneAlias->Enable( false ); } /* Read the Footprint Filter list */ m_FootprintFilterListBox->Append( component->GetFootPrints() ); if( component->GetFootPrints().GetCount() == 0 ) { m_ButtonDeleteAllFootprintFilter->Enable( false ); m_ButtonDeleteOneFootprintFilter->Enable( false ); m_buttonEditOneFootprintFilter->Enable( false ); } m_NoteBook->SetSelection( m_lastOpenedPage ); m_stdSizerButtonOK->SetDefault(); }
void LIB_EDIT_FRAME::DisplayCmpDoc() { LIB_ALIAS* alias; PART_LIB* lib = GetCurLib(); LIB_PART* part = GetCurPart(); ClearMsgPanel(); if( !lib || !part ) return; wxString msg = part->GetName(); AppendMsgPanel( _( "Name" ), msg, BLUE, 8 ); if( m_aliasName == part->GetName() ) msg = _( "None" ); else msg = m_aliasName; alias = part->GetAlias( m_aliasName ); wxCHECK_RET( alias != NULL, "Alias not found in component." ); AppendMsgPanel( _( "Alias" ), msg, RED, 8 ); static wxChar UnitLetter[] = wxT( "?ABCDEFGHIJKLMNOPQRSTUVWXYZ" ); msg = UnitLetter[m_unit]; AppendMsgPanel( _( "Unit" ), msg, BROWN, 8 ); if( m_convert > 1 ) msg = _( "Convert" ); else msg = _( "Normal" ); AppendMsgPanel( _( "Body" ), msg, GREEN, 8 ); if( part->IsPower() ) msg = _( "Power Symbol" ); else msg = _( "Part" ); AppendMsgPanel( _( "Type" ), msg, MAGENTA, 8 ); AppendMsgPanel( _( "Description" ), alias->GetDescription(), CYAN, 8 ); AppendMsgPanel( _( "Key words" ), alias->GetKeyWords(), DARKDARKGRAY ); AppendMsgPanel( _( "Datasheet" ), alias->GetDocFileName(), DARKDARKGRAY ); }
void SCH_EDIT_FRAME::ConvertPart( SCH_COMPONENT* aComponent ) { if( !aComponent ) return; LIB_ID id = aComponent->GetLibId(); LIB_PART* part = GetLibPart( id ); if( part ) { wxString msg; if( !part->HasConversion() ) { msg.Printf( _( "No alternate body style found for symbol \"%s\" in library \"%s\"." ), id.GetLibItemName().wx_str(), id.GetLibNickname().wx_str() ); DisplayError( this, msg ); return; } STATUS_FLAGS savedFlags = aComponent->GetFlags(); aComponent->SetConvert( aComponent->GetConvert() + 1 ); // ensure m_Convert = 1 or 2 // 1 = shape 1 = not converted // 2 = shape 2 = first converted shape // > 2 is not used but could be used for more shapes // like multiple shapes for a programmable component // When m_Convert = val max, return to the first shape if( aComponent->GetConvert() > LIB_ITEM::LIB_CONVERT::DEMORGAN ) aComponent->SetConvert( LIB_ITEM::LIB_CONVERT::BASE ); // The alternate symbol may cause a change in the connection status so test the // connections so the connection indicators are drawn correctly. aComponent->UpdatePins(); TestDanglingEnds(); aComponent->ClearFlags(); aComponent->SetFlags( savedFlags ); // Restore m_Flags (modified by SetConvert()) // If selected make sure all the now-included pins are selected if( aComponent->IsSelected() ) m_toolManager->RunAction( EE_ACTIONS::addItemToSel, true, aComponent ); RefreshItem( aComponent ); OnModify(); } }
void LIB_EDIT_FRAME::SVG_PlotComponent( const wxString& aFullFileName ) { const bool plotBW = false; const PAGE_INFO& pageInfo = GetScreen()->GetPageSettings(); SVG_PLOTTER* plotter = new SVG_PLOTTER(); plotter->SetPageSettings( pageInfo ); plotter->SetDefaultLineWidth( GetDefaultLineThickness() ); plotter->SetColorMode( plotBW ); wxPoint plot_offset; const double scale = 1.0; // Currently, plot units are in decimil plotter->SetViewport( plot_offset, IU_PER_MILS/10, scale, false ); // Init : plotter->SetCreator( wxT( "Eeschema-SVG" ) ); if( ! plotter->OpenFile( aFullFileName ) ) { delete plotter; return; } LOCALE_IO toggle; plotter->StartPlot(); LIB_PART* part = GetCurPart(); if( part ) { TRANSFORM temp; // Uses default transform wxPoint plotPos; plotPos.x = pageInfo.GetWidthIU() /2; plotPos.y = pageInfo.GetHeightIU()/2; part->Plot( plotter, GetUnit(), GetConvert(), plotPos, temp ); // Plot lib fields, not plotted by m_component->Plot(): part->PlotLibFields( plotter, GetUnit(), GetConvert(), plotPos, temp ); } plotter->EndPlot(); delete plotter; }
const BOX2I LIB_VIEW_FRAME::GetDocumentExtents() const { LIB_ALIAS* alias = getSelectedAlias(); LIB_PART* part = alias ? alias->GetPart() : nullptr; if( !part ) { return BOX2I( VECTOR2I(-200, -200), VECTOR2I( 400, 400 ) ); } else { EDA_RECT bbox = part->GetUnitBoundingBox( m_unit, m_convert ); return BOX2I( bbox.GetOrigin(), VECTOR2I( bbox.GetWidth(), bbox.GetHeight() ) ); } }