void SCH_TEXT::Draw( EDA_DRAW_PANEL* panel, wxDC* DC, const wxPoint& aOffset, GR_DRAWMODE DrawMode, EDA_COLOR_T Color ) { EDA_COLOR_T color; int linewidth = ( m_Thickness == 0 ) ? GetDefaultLineThickness() : m_Thickness; linewidth = Clamp_Text_PenSize( linewidth, m_Size, m_Bold ); if( Color >= 0 ) color = Color; else color = ReturnLayerColor( m_Layer ); GRSetDrawMode( DC, DrawMode ); wxPoint text_offset = aOffset + GetSchematicTextOffset(); EXCHG( linewidth, m_Thickness ); // Set the minimum width EDA_TEXT::Draw( panel, DC, text_offset, color, DrawMode, FILLED, UNSPECIFIED_COLOR ); EXCHG( linewidth, m_Thickness ); // set initial value if( m_isDangling ) DrawDanglingSymbol( panel, DC, m_Pos + aOffset, color ); // Enable these line to draw the bounding box (debug tests purposes only) #if 0 { EDA_RECT BoundaryBox = GetBoundingBox(); GRRect( panel->GetClipBox(), DC, BoundaryBox, 0, BROWN ); } #endif }
/* * Redraws only the active window which is assumed to be whole visible. */ void SCH_EDIT_FRAME::RedrawActiveWindow( wxDC* DC, bool EraseBg ) { if( GetScreen() == NULL ) return; m_canvas->DrawBackGround( DC ); GetScreen()->Draw( m_canvas, DC, GR_DEFAULT_DRAWMODE ); DrawWorkSheet( DC, GetScreen(), GetDefaultLineThickness(), IU_PER_MILS, GetScreen()->GetFileName() ); #ifdef USE_WX_OVERLAY if( IsShown() ) { m_overlay.Reset(); wxDCOverlay overlaydc( m_overlay, (wxWindowDC*)DC ); overlaydc.Clear(); /* TODO: Investigate why toolbars are affected - to be searched in wxWidgets */ m_mainToolBar->Refresh(); m_drawToolBar->Refresh(); m_optionsToolBar->Refresh(); } #endif if( m_canvas->IsMouseCaptured() ) m_canvas->CallMouseCapture( DC, wxDefaultPosition, false ); m_canvas->DrawCrossHair( DC ); // Display the sheet filename, and the sheet path, for non root sheets UpdateTitle(); }
bool PANEL_EESCHEMA_DISPLAY_OPTIONS::TransferDataToWindow() { // Reference style one of: "A" ".A" "-A" "_A" ".1" "-1" "_1" int refStyleSelection; switch( LIB_PART::GetSubpartIdSeparator() ) { default: case 0: refStyleSelection = 0; break; case '.': refStyleSelection = LIB_PART::GetSubpartFirstId() == '1' ? 4 : 1; break; case '-': refStyleSelection = LIB_PART::GetSubpartFirstId() == '1' ? 5 : 2; break; case '_': refStyleSelection = LIB_PART::GetSubpartFirstId() == '1' ? 6 : 3; break; } m_choiceSeparatorRefId->SetSelection( refStyleSelection ); m_busWidthCtrl->SetValue( StringFromValue( INCHES, GetDefaultBusThickness(), false, true ) ); m_lineWidthCtrl->SetValue( StringFromValue( INCHES, GetDefaultLineThickness(), false, true ) ); m_jctSizeCtrl->SetValue( StringFromValue( INCHES, SCH_JUNCTION::GetSymbolSize(), false, true ) ); m_checkShowHiddenPins->SetValue( m_frame->GetShowAllPins() ); m_checkPageLimits->SetValue( m_frame->ShowPageLimits() ); m_galOptsPanel->TransferDataToWindow(); return true; }
wxPoint SCH_HIERLABEL::GetSchematicTextOffset() const { wxPoint text_offset; int width = std::max( m_Thickness, GetDefaultLineThickness() ); int ii = m_Size.x + TXTMARGE + width; switch( m_schematicOrientation ) { case 0: /* Orientation horiz normale */ text_offset.x = -ii; break; case 1: /* Orientation vert UP */ text_offset.y = -ii; break; case 2: /* Orientation horiz inverse */ text_offset.x = ii; break; case 3: /* Orientation vert BOTTOM */ text_offset.y = ii; break; } return text_offset; }
void SCH_EDIT_FRAME::PrintPage( wxDC* aDC, LAYER_MSK aPrintMask, bool aPrintMirrorMode, void* aData ) { GetScreen()->Draw( m_canvas, aDC, GR_DEFAULT_DRAWMODE ); DrawWorkSheet( aDC, GetScreen(), GetDefaultLineThickness(), IU_PER_MILS, GetScreen()->GetFileName() ); }
const EDA_RECT SCH_TEXT::GetBoundingBox() const { // We must pass the effective text thickness to GetTextBox // when calculating the bounding box int linewidth = GetThickness() == 0 ? GetDefaultLineThickness() : GetThickness(); linewidth = Clamp_Text_PenSize( linewidth, GetTextSize(), IsBold() ); EDA_RECT rect = GetTextBox( -1, linewidth ); if( GetTextAngle() != 0 ) // Rotate rect { wxPoint pos = rect.GetOrigin(); wxPoint end = rect.GetEnd(); RotatePoint( &pos, GetTextPos(), GetTextAngle() ); RotatePoint( &end, GetTextPos(), GetTextAngle() ); rect.SetOrigin( pos ); rect.SetEnd( end ); } rect.Normalize(); return rect; }
EDA_RECT SCH_FIELD::GetBoundingBox() const { SCH_COMPONENT* parentComponent = (SCH_COMPONENT*) m_Parent; int linewidth = ( m_Thickness == 0 ) ? GetDefaultLineThickness() : m_Thickness; // We must pass the effective text thickness to GetTextBox // when calculating the bounding box linewidth = Clamp_Text_PenSize( linewidth, m_Size, m_Bold ); // Calculate the text bounding box: EDA_RECT rect; // set USE_TEXT_JUSTIFY_INITIAL_BEHAVIOR to 0 to use // a justification relative to the text itself // i.e. justification relative to an horizontal text // or to 1 to keep the initial behavior #if (USE_TEXT_JUSTIFY_INITIAL_BEHAVIOR == 1 ) if( m_Orient == TEXT_ORIENT_VERT ) { // For vertical texts, exchange the horizontal and the vertical justification // The idea is to keep the justification always left or top for instance, // no matter the text orientation SCH_FIELD text( *this ); // Make a local copy to swap justifications // because GetBoundingBox() is const int tmp = (int)text.m_VJustify; NEGATE( tmp ); text.m_VJustify = (EDA_TEXT_VJUSTIFY_T)text.m_HJustify; text.m_HJustify = (EDA_TEXT_HJUSTIFY_T)tmp; rect = text.GetTextBox( -1, linewidth ); } else #endif rect = GetTextBox( -1, linewidth ); // Calculate the bounding box position relative to the component: wxPoint origin = parentComponent->GetPosition(); wxPoint pos = m_Pos - origin; wxPoint begin = rect.GetOrigin() - origin; wxPoint end = rect.GetEnd() - origin; RotatePoint( &begin, pos, m_Orient ); RotatePoint( &end, pos, m_Orient ); // Due to the Y axis direction, we must mirror the bounding box, // relative to the text position: begin.y -= pos.y; end.y -= pos.y; NEGATE( begin.y ); NEGATE( end.y ); begin.y += pos.y; end.y += pos.y; // Now, apply the component transform (mirror/rot) begin = parentComponent->GetTransform().TransformCoordinate( begin ); end = parentComponent->GetTransform().TransformCoordinate( end ); rect.SetOrigin( begin); rect.SetEnd( end); rect.Move( origin ); rect.Normalize(); return rect; }
int LIB_CIRCLE::GetPenSize() const { if( m_Width > 0 ) return m_Width; if( m_Width == 0 ) return GetDefaultLineThickness(); return -1; // a value to use a minimal pen size }
bool SCH_NO_CONNECT::HitTest( const wxPoint& aPosition, int aAccuracy ) const { int delta = ( ( m_size.x + GetDefaultLineThickness() ) / 2 ) + aAccuracy; wxPoint dist = aPosition - m_pos; if( ( std::abs( dist.x ) <= delta ) && ( std::abs( dist.y ) <= delta ) ) return true; return false; }
int SCH_BUS_ENTRY::GetPenSize() const { int pensize = ( m_width == 0 ) ? GetDefaultLineThickness() : m_width; if( m_Layer == LAYER_BUS ) { pensize = ( m_width == 0 ) ? GetDefaultBusThickness() : m_width; } return pensize; }
EDA_RECT SCH_BUS_ENTRY::GetBoundingBox() const { EDA_RECT box; box.SetOrigin( m_pos ); box.SetEnd( m_End() ); box.Normalize(); int width = ( m_width == 0 ) ? GetDefaultLineThickness() : m_width; box.Inflate( width / 2 ); return box; }
const EDA_RECT SCH_GLOBALLABEL::GetBoundingBox() const { int x, y, dx, dy, length, height; x = GetTextPos().x; y = GetTextPos().y; dx = dy = 0; int width = GetThickness() == 0 ? GetDefaultLineThickness() : GetThickness(); height = ( (GetTextHeight() * 15) / 10 ) + width + 2 * TXT_MARGIN; // text X size add height for triangular shapes(bidirectional) length = LenSize( GetShownText(), width ) + height + DANGLING_SYMBOL_SIZE; switch( GetLabelSpinStyle() ) // respect orientation { default: case 0: // Horiz Normal Orientation (left justified) dx = -length; dy = height; x += DANGLING_SYMBOL_SIZE; y -= height / 2; break; case 1: // Vert Orientation UP dx = height; dy = -length; x -= height / 2; y += DANGLING_SYMBOL_SIZE; break; case 2: // Horiz Orientation - Right justified dx = length; dy = height; x -= DANGLING_SYMBOL_SIZE; y -= height / 2; break; case 3: // Vert Orientation BOTTOM dx = height; dy = length; x -= height / 2; y -= DANGLING_SYMBOL_SIZE; break; } EDA_RECT box( wxPoint( x, y ), wxSize( dx, dy ) ); box.Normalize(); return box; }
EDA_RECT SCH_HIERLABEL::GetBoundingBox() const { int x, y, dx, dy, length, height; x = m_Pos.x; y = m_Pos.y; dx = dy = 0; int width = (m_Thickness == 0) ? GetDefaultLineThickness() : m_Thickness; height = m_Size.y + width + 2 * TXTMARGE; length = LenSize( m_Text ) + height // add height for triangular shapes + 2 * DANGLING_SYMBOL_SIZE; switch( m_schematicOrientation ) // respect orientation { case 0: /* Horiz Normal Orientation (left justified) */ dx = -length; dy = height; x += DANGLING_SYMBOL_SIZE; y -= height / 2; break; case 1: /* Vert Orientation UP */ dx = height; dy = -length; x -= height / 2; y += DANGLING_SYMBOL_SIZE; break; case 2: /* Horiz Orientation - Right justified */ dx = length; dy = height; x -= DANGLING_SYMBOL_SIZE; y -= height / 2; break; case 3: /* Vert Orientation BOTTOM */ dx = height; dy = length; x -= height / 2; y -= DANGLING_SYMBOL_SIZE; break; } EDA_RECT box( wxPoint( x, y ), wxSize( dx, dy ) ); box.Normalize(); return box; }
// Initialize the dialog options: void DIALOG_PLOT_SCHEMATIC::initDlg() { // Set color or B&W plot option bool tmp; m_config->Read( PLOT_MODECOLOR_KEY, &tmp, true ); setModeColor( tmp ); // Set plot or not frame reference option m_config->Read( PLOT_FRAME_REFERENCE_KEY, &tmp, true ); setPlotFrameRef( tmp ); // Set HPGL plot origin to center of paper of left bottom corner m_config->Read( PLOT_HPGL_ORIGIN_KEY, &tmp, false ); SetPlotOriginCenter( tmp ); m_config->Read( PLOT_HPGL_PAPERSIZE_KEY, &m_HPGLPaperSizeSelect, 0 ); // HPGL Pen Size is stored in mm in config m_config->Read( PLOT_HPGL_PEN_SIZE_KEY, &m_HPGLPenSize, 0.5 ); m_HPGLPenSize *= IU_PER_MM; // Switch to the last save plot format long plotfmt; m_config->Read( PLOT_FORMAT_KEY, &plotfmt, 0 ); switch( plotfmt ) { default: case PLOT_FORMAT_POST: m_plotFormatOpt->SetSelection( 0 ); break; case PLOT_FORMAT_PDF: m_plotFormatOpt->SetSelection( 1 ); break; case PLOT_FORMAT_SVG: m_plotFormatOpt->SetSelection( 2 ); break; case PLOT_FORMAT_DXF: m_plotFormatOpt->SetSelection( 3 ); break; case PLOT_FORMAT_HPGL: m_plotFormatOpt->SetSelection( 4 ); break; } // Set the default line width (pen width which should be used for // items that do not have a pen size defined (like frame ref) m_defaultLineWidth.SetValue( GetDefaultLineThickness() ); // Initialize HPGL specific widgets m_penWidth.SetValue( m_HPGLPenSize ); // Plot directory wxString path = m_parent->GetPlotDirectoryName(); #ifdef __WINDOWS__ path.Replace( '/', '\\' ); #endif m_outputDirectoryName->SetValue( path ); }
const EDA_RECT SCH_FIELD::GetBoundingBox() const { SCH_COMPONENT* parentComponent = (SCH_COMPONENT*) m_Parent; int linewidth = ( m_Thickness == 0 ) ? GetDefaultLineThickness() : m_Thickness; // We must pass the effective text thickness to GetTextBox // when calculating the bounding box linewidth = Clamp_Text_PenSize( linewidth, m_Size, m_Bold ); // Calculate the text bounding box: EDA_RECT rect; if( m_id == REFERENCE ) // multi units have one letter or more added to reference { SCH_FIELD text( *this ); // Make a local copy to change text // because GetBoundingBox() is const text.SetText( GetFullyQualifiedText() ); rect = text.GetTextBox( -1, linewidth ); } else rect = GetTextBox( -1, linewidth ); // Calculate the bounding box position relative to the component: wxPoint origin = parentComponent->GetPosition(); wxPoint pos = m_Pos - origin; wxPoint begin = rect.GetOrigin() - origin; wxPoint end = rect.GetEnd() - origin; RotatePoint( &begin, pos, m_Orient ); RotatePoint( &end, pos, m_Orient ); // Due to the Y axis direction, we must mirror the bounding box, // relative to the text position: begin.y -= pos.y; end.y -= pos.y; NEGATE( begin.y ); NEGATE( end.y ); begin.y += pos.y; end.y += pos.y; // Now, apply the component transform (mirror/rot) begin = parentComponent->GetTransform().TransformCoordinate( begin ); end = parentComponent->GetTransform().TransformCoordinate( end ); rect.SetOrigin( begin); rect.SetEnd( end); rect.Move( origin ); rect.Normalize(); return rect; }
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; }
int SCH_FIELD::GetPenSize() const { int pensize = m_Thickness; if( pensize == 0 ) // Use default values for pen size { if( m_Bold ) pensize = GetPenSizeForBold( m_Size.x ); else pensize = GetDefaultLineThickness(); } // Clip pen size for small texts: pensize = Clamp_Text_PenSize( pensize, m_Size, m_Bold ); return pensize; }
int LIB_TEXT::GetPenSize() const { int pensize = GetThickness(); if( pensize == 0 ) // Use default values for pen size { if( IsBold() ) pensize = GetPenSizeForBold( GetTextWidth() ); else pensize = GetDefaultLineThickness(); } // Clip pen size for small texts: pensize = Clamp_Text_PenSize( pensize, GetTextSize(), IsBold() ); return pensize; }
wxPoint SCH_GLOBALLABEL::GetSchematicTextOffset() const { wxPoint text_offset; int width = (m_Thickness == 0) ? GetDefaultLineThickness() : m_Thickness; width = Clamp_Text_PenSize( width, m_Size, m_Bold ); int HalfSize = m_Size.x / 2; int offset = width; switch( m_shape ) { case NET_INPUT: case NET_BIDI: case NET_TRISTATE: offset += HalfSize; break; case NET_OUTPUT: case NET_UNSPECIFIED: offset += TXTMARGE; break; default: break; } switch( m_schematicOrientation ) { case 0: /* Orientation horiz normal */ text_offset.x -= offset; break; case 1: /* Orientation vert UP */ text_offset.y -= offset; break; case 2: /* Orientation horiz inverse */ text_offset.x += offset; break; case 3: /* Orientation vert BOTTOM */ text_offset.y += offset; break; } return text_offset; }
void SCH_TEXT::Draw( EDA_DRAW_PANEL* panel, wxDC* DC, const wxPoint& aOffset ) { COLOR4D color = GetLayerColor( m_Layer ); int linewidth = GetThickness() == 0 ? GetDefaultLineThickness() : GetThickness(); EDA_RECT* clipbox = panel? panel->GetClipBox() : NULL; linewidth = Clamp_Text_PenSize( linewidth, GetTextSize(), IsBold() ); wxPoint text_offset = aOffset + GetSchematicTextOffset(); int savedWidth = GetThickness(); SetThickness( linewidth ); // Set the minimum width EDA_TEXT::Draw( clipbox, DC, text_offset, color, GR_DEFAULT_DRAWMODE ); SetThickness( savedWidth ); }
bool DIALOG_PLOT_SCHEMATIC::plotOneSheetSVG( EDA_DRAW_FRAME* aFrame, const wxString& aFileName, SCH_SCREEN* aScreen, bool aPlotBlackAndWhite, bool aPlotFrameRef ) { SVG_PLOTTER* plotter = new SVG_PLOTTER(); const PAGE_INFO& pageInfo = aScreen->GetPageSettings(); plotter->SetPageSettings( pageInfo ); plotter->SetDefaultLineWidth( GetDefaultLineThickness() ); plotter->SetColorMode( aPlotBlackAndWhite ? false : true ); wxPoint plot_offset; double scale = 1.0; plotter->SetViewport( plot_offset, IU_PER_DECIMILS, scale, false ); // Init : plotter->SetCreator( wxT( "Eeschema-SVG" ) ); if( ! plotter->OpenFile( aFileName ) ) { delete plotter; return false; } LOCALE_IO toggle; plotter->StartPlot(); if( aPlotFrameRef ) { plotter->SetColor( BLACK ); PlotWorkSheet( plotter, aFrame->GetTitleBlock(), aFrame->GetPageSettings(), aScreen->m_ScreenNumber, aScreen->m_NumberOfScreens, aFrame->GetScreenDesc(), aScreen->GetFileName() ); } aScreen->Plot( plotter ); plotter->EndPlot(); delete plotter; return true; }
EDA_RECT SCH_LABEL::GetBoundingBox() const { int x, y, dx, dy, length, height; x = m_Pos.x; y = m_Pos.y; int width = (m_Thickness == 0) ? GetDefaultLineThickness() : m_Thickness; length = LenSize( m_Text ); height = m_Size.y + width; dx = dy = 0; switch( m_schematicOrientation ) { case 0: /* Horiz Normal Orientation (left justified) */ dx = 2 * DANGLING_SYMBOL_SIZE + length; dy = -2 * DANGLING_SYMBOL_SIZE - height - TXTMARGE; x -= DANGLING_SYMBOL_SIZE; y += DANGLING_SYMBOL_SIZE; break; case 1: /* Vert Orientation UP */ dx = -2 * DANGLING_SYMBOL_SIZE - height - TXTMARGE; dy = -2 * DANGLING_SYMBOL_SIZE - length; x += DANGLING_SYMBOL_SIZE; y += DANGLING_SYMBOL_SIZE; break; case 2: /* Horiz Orientation - Right justified */ dx = -2 * DANGLING_SYMBOL_SIZE - length; dy = -2 * DANGLING_SYMBOL_SIZE - height - TXTMARGE; x += DANGLING_SYMBOL_SIZE; y += DANGLING_SYMBOL_SIZE; break; case 3: /* Vert Orientation BOTTOM */ dx = -2 * DANGLING_SYMBOL_SIZE - height - TXTMARGE; dy = 2 * DANGLING_SYMBOL_SIZE + length; x += DANGLING_SYMBOL_SIZE; y -= DANGLING_SYMBOL_SIZE; break; } EDA_RECT box( wxPoint( x, y ), wxSize( dx, dy ) ); box.Normalize(); return box; }
wxPoint SCH_HIERLABEL::GetSchematicTextOffset() const { wxPoint text_offset; int width = std::max( GetThickness(), GetDefaultLineThickness() ); int ii = GetTextWidth() + TXT_MARGIN + width; switch( GetLabelSpinStyle() ) { default: case 0: text_offset.x = -ii; break; // Orientation horiz normale case 1: text_offset.y = -ii; break; // Orientation vert UP case 2: text_offset.x = ii; break; // Orientation horiz inverse case 3: text_offset.y = ii; break; // Orientation vert BOTTOM } return text_offset; }
wxPoint SCH_TEXT::GetSchematicTextOffset() const { wxPoint text_offset; // add an offset to x (or y) position to aid readability of text on a wire or line int thick_offset = TXT_MARGIN + ( GetPenSize() + GetDefaultLineThickness() ) / 2; switch( GetLabelSpinStyle() ) { default: case 0: text_offset.y = -thick_offset; break; // Horiz Normal Orientation (left justified) case 1: text_offset.x = -thick_offset; break; // Vert Orientation UP case 2: text_offset.y = -thick_offset; break; // Horiz Orientation - Right justified case 3: text_offset.x = -thick_offset; break; // Vert Orientation BOTTOM } return text_offset; }
bool DIALOG_PLOT_SCHEMATIC::plotOneSheetPS( const wxString& aFileName, SCH_SCREEN* aScreen, const PAGE_INFO& aPageInfo, wxPoint aPlot0ffset, double aScale, bool aPlotFrameRef ) { PS_PLOTTER* plotter = new PS_PLOTTER(); plotter->SetPageSettings( aPageInfo ); plotter->SetDefaultLineWidth( GetDefaultLineThickness() ); plotter->SetColorMode( getModeColor() ); // Currently, plot units are in decimil plotter->SetViewport( aPlot0ffset, IU_PER_MILS/10, aScale, false ); // Init : plotter->SetCreator( wxT( "Eeschema-PS" ) ); if( ! plotter->OpenFile( aFileName ) ) { delete plotter; return false; } LOCALE_IO toggle; // Switch the locale to standard C plotter->StartPlot(); if( aPlotFrameRef ) { plotter->SetColor( BLACK ); PlotWorkSheet( plotter, m_parent->GetTitleBlock(), m_parent->GetPageSettings(), aScreen->m_ScreenNumber, aScreen->m_NumberOfScreens, m_parent->GetScreenDesc(), aScreen->GetFileName() ); } aScreen->Plot( plotter ); plotter->EndPlot(); delete plotter; return true; }
void SCH_EDIT_FRAME::OnSetOptions( wxCommandEvent& event ) { wxArrayString units; GRIDS grid_list; GetScreen()->GetGrids( grid_list ); DIALOG_EESCHEMA_OPTIONS dlg( this ); units.Add( GetUnitsLabel( INCHES ) ); units.Add( GetUnitsLabel( MILLIMETRES ) ); dlg.SetUnits( units, g_UserUnit ); dlg.SetGridSizes( grid_list, GetScreen()->GetGridId() ); dlg.SetBusWidth( GetDefaultBusThickness() ); dlg.SetLineWidth( GetDefaultLineThickness() ); dlg.SetTextSize( GetDefaultLabelSize() ); dlg.SetRepeatHorizontal( g_RepeatStep.x ); dlg.SetRepeatVertical( g_RepeatStep.y ); dlg.SetRepeatLabel( g_RepeatDeltaLabel ); dlg.SetAutoSaveInterval( GetAutoSaveInterval() / 60 ); dlg.SetRefIdSeparator( LIB_COMPONENT::GetSubpartIdSeparator( ), LIB_COMPONENT::GetSubpartFirstId() ); dlg.SetShowGrid( IsGridVisible() ); dlg.SetShowHiddenPins( m_showAllPins ); dlg.SetEnableMiddleButtonPan( m_canvas->GetEnableMiddleButtonPan() ); dlg.SetEnableZoomNoCenter( m_canvas->GetEnableZoomNoCenter() ); dlg.SetMiddleButtonPanLimited( m_canvas->GetMiddleButtonPanLimited() ); dlg.SetEnableAutoPan( m_canvas->GetEnableAutoPan() ); dlg.SetEnableHVBusOrientation( GetForceHVLines() ); dlg.SetShowPageLimits( g_ShowPageLimits ); dlg.Layout(); dlg.Fit(); dlg.SetMinSize( dlg.GetSize() ); const TEMPLATE_FIELDNAMES& tfnames = m_TemplateFieldNames.GetTemplateFieldNames(); for( unsigned i=0; i<tfnames.size(); ++i ) { DBG(printf("dlg.SetFieldName(%d, '%s')\n", i, TO_UTF8( tfnames[i].m_Name) );) dlg.SetFieldName( i, tfnames[i].m_Name ); }
void SCH_GLOBALLABEL::Draw( EDA_DRAW_PANEL* panel, wxDC* DC, const wxPoint& aOffset ) { static std::vector <wxPoint> Poly; COLOR4D color = GetLayerColor( m_Layer ); wxPoint text_offset = aOffset + GetSchematicTextOffset(); int linewidth = GetThickness() == 0 ? GetDefaultLineThickness() : GetThickness(); linewidth = Clamp_Text_PenSize( linewidth, GetTextSize(), IsBold() ); int save_width = GetThickness(); SetThickness( linewidth ); EDA_RECT* clipbox = panel? panel->GetClipBox() : NULL; EDA_TEXT::Draw( clipbox, DC, text_offset, color, GR_DEFAULT_DRAWMODE ); SetThickness( save_width ); // restore initial value CreateGraphicShape( Poly, GetTextPos() + aOffset ); GRPoly( clipbox, DC, Poly.size(), &Poly[0], 0, linewidth, color, color ); }
void SCH_HIERLABEL::Draw( EDA_DRAW_PANEL* panel, wxDC* DC, const wxPoint& offset, GR_DRAWMODE DrawMode, EDA_COLOR_T Color ) { static std::vector <wxPoint> Poly; EDA_COLOR_T color; int linewidth = m_Thickness == 0 ? GetDefaultLineThickness() : m_Thickness; EDA_RECT* clipbox = panel? panel->GetClipBox() : NULL; linewidth = Clamp_Text_PenSize( linewidth, m_Size, m_Bold ); if( Color >= 0 ) color = Color; else color = GetLayerColor( m_Layer ); GRSetDrawMode( DC, DrawMode ); std::swap( linewidth, m_Thickness ); // Set the minimum width wxPoint text_offset = offset + GetSchematicTextOffset(); EDA_TEXT::Draw( clipbox, DC, text_offset, color, DrawMode, FILLED, UNSPECIFIED_COLOR ); std::swap( linewidth, m_Thickness ); // set initial value CreateGraphicShape( Poly, m_Pos + offset ); GRPoly( clipbox, DC, Poly.size(), &Poly[0], 0, linewidth, color, color ); if( m_isDangling && panel ) DrawDanglingSymbol( panel, DC, m_Pos + offset, color ); // Enable these line to draw the bounding box (debug tests purposes only) #if 0 { EDA_RECT BoundaryBox = GetBoundingBox(); GRRect( clipbox, DC, BoundaryBox, 0, BROWN ); } #endif }
const EDA_RECT SCH_LABEL::GetBoundingBox() const { int linewidth = GetThickness() == 0 ? GetDefaultLineThickness() : GetThickness(); EDA_RECT rect = GetTextBox( -1, linewidth ); if( GetTextAngle() != 0.0 ) { // Rotate rect wxPoint pos = rect.GetOrigin(); wxPoint end = rect.GetEnd(); RotatePoint( &pos, GetTextPos(), GetTextAngle() ); RotatePoint( &end, GetTextPos(), GetTextAngle() ); rect.SetOrigin( pos ); rect.SetEnd( end ); rect.Normalize(); } return rect; }
EDA_RECT SCH_TEXT::GetBoundingBox() const { // We must pass the effective text thickness to GetTextBox // when calculating the bounding box int linewidth = ( m_Thickness == 0 ) ? GetDefaultLineThickness() : m_Thickness; linewidth = Clamp_Text_PenSize( linewidth, m_Size, m_Bold ); EDA_RECT rect = GetTextBox( -1, linewidth ); if( m_Orient ) // Rotate rect { wxPoint pos = rect.GetOrigin(); wxPoint end = rect.GetEnd(); RotatePoint( &pos, m_Pos, m_Orient ); RotatePoint( &end, m_Pos, m_Orient ); rect.SetOrigin( pos ); rect.SetEnd( end ); } rect.Normalize(); return rect; }