Loading gerbview/draw_gerber_screen.cpp +56 −17 Original line number Original line Diff line number Diff line Loading @@ -103,45 +103,84 @@ void BOARD::Draw( WinEDA_DrawPanel* aPanel, wxDC* aDC, int aDrawMode, const wxPo { { // Because Images can be negative (i.e with background filled in color) items are drawn // Because Images can be negative (i.e with background filled in color) items are drawn // graphic layer per graphic layer, after the background is filled // graphic layer per graphic layer, after the background is filled int bitmapWidth, bitmapHeight; aPanel->GetClientSize( &bitmapWidth, &bitmapHeight ); wxBitmap layerBitmap( bitmapWidth, bitmapHeight ); wxMemoryDC memoryDC; memoryDC.SelectObject( layerBitmap ); wxColour bgColor = MakeColour( g_DrawBgColor ); wxBrush bgBrush( bgColor, wxSOLID ); for( int layer = 0; layer < 32; layer++ ) for( int layer = 0; layer < 32; layer++ ) { { if( !GetBoard()->IsLayerVisible( layer ) ) if( !GetBoard()->IsLayerVisible( layer ) ) continue; continue; GERBER_IMAGE* gerber = g_GERBER_List[layer]; GERBER_IMAGE* gerber = g_GERBER_List[layer]; if( gerber == NULL ) // Graphic layer not yet used if( gerber == NULL ) // Graphic layer not yet used continue; continue; /* Draw background negative (i.e. in graphic layer color) for negative images: // Draw each layer into a bitmap first. Negative Gerber * Background is drawn here in GR_OR mode because in COPY mode // layers are drawn in background color. * all previous graphics will be erased memoryDC.SetBackground( bgBrush ); * Note: items in background color ("Erased" items) are always drawn in COPY mode memoryDC.Clear(); * Some artifacts can happen when more than one gerber file is loaded */ if( gerber->m_ImageNegative ) if( gerber->m_ImageNegative ) { { // Draw background negative (i.e. in graphic layer color) for negative images. int color = GetBoard()->GetLayerColor( layer ); int color = GetBoard()->GetLayerColor( layer ); GRSetDrawMode( aDC, GR_OR ); GRSetDrawMode( (wxDC*)&memoryDC, GR_COPY ); // GR_COPY is faster than GR_OR EDA_Rect* cbox = &aPanel->m_ClipBox; EDA_Rect* cbox = &aPanel->m_ClipBox; GRSFilledRect( cbox, aDC, cbox->GetX(), cbox->GetY(), GRSFilledRect( cbox, (wxDC*)&memoryDC, cbox->GetX(), cbox->GetY(), cbox->GetRight(), cbox->GetBottom(), cbox->GetRight(), cbox->GetBottom(), 0, color, color ); 0, color, color ); GRSetDrawMode( aDC, aDrawMode ); GRSetDrawMode( (wxDC*)&memoryDC, aDrawMode ); } } int dcode_hightlight = 0; int dcode_highlight = 0; if( layer == m_PcbFrame->GetScreen()->m_Active_Layer ) if( layer == m_PcbFrame->GetScreen()->m_Active_Layer ) dcode_hightlight = gerber->m_Selected_Tool; dcode_highlight = gerber->m_Selected_Tool; BOARD_ITEM* item = GetBoard()->m_Drawings; for( ; item; item = item->Next() ) for( BOARD_ITEM* item = GetBoard()->m_Drawings; item; item = item->Next() ) { { GERBER_DRAW_ITEM* gerb_item = (GERBER_DRAW_ITEM*) item; GERBER_DRAW_ITEM* gerb_item = (GERBER_DRAW_ITEM*) item; if( gerb_item->GetLayer() != layer ) if( gerb_item->GetLayer() != layer ) continue; continue; int drawMode = aDrawMode; int drawMode = aDrawMode; if( dcode_hightlight == gerb_item->m_DCode ) if( dcode_highlight == gerb_item->m_DCode ) drawMode |= GR_SURBRILL; drawMode |= GR_SURBRILL; gerb_item->Draw( aPanel, aDC, drawMode ); gerb_item->Draw( aPanel, (wxDC*)&memoryDC, drawMode ); } } #if 0 // Use the layer bitmap itself as a mask when blitting. // The bitmap cannot be referenced by a device context // when setting the mask. memoryDC.SelectObject( wxNullBitmap ); layerBitmap.SetMask( new wxMask( layerBitmap, bgColor ) ); memoryDC.SelectObject( layerBitmap ); aDC->Blit( 0, 0, bitmapWidth, bitmapHeight, (wxDC*)&memoryDC, 0, 0, wxCOPY, true ); #else // Dick: seems a little faster, crisper aDC->Blit( 0, 0, bitmapWidth, bitmapHeight, (wxDC*)&memoryDC, 0, 0, wxOR, false ); #endif } } m_PcbFrame->GetScreen()->ClrRefreshReq(); m_PcbFrame->GetScreen()->ClrRefreshReq(); Loading include/plot_common.h +62 −57 Original line number Original line Diff line number Diff line Loading @@ -17,7 +17,8 @@ class Ki_PageDescr; /** /** * Enum PlotFormat * Enum PlotFormat * must be kept in order of the radio buttons in the plot panel/window. * is the set of supported output plot formats. They should be kept in order * of the radio buttons in the plot panel/windows. */ */ enum PlotFormat { enum PlotFormat { PLOT_FORMAT_HPGL, PLOT_FORMAT_HPGL, Loading @@ -37,7 +38,7 @@ public: virtual ~PLOTTER() virtual ~PLOTTER() { { /* Emergency cleanup */ // Emergency cleanup if( output_file ) if( output_file ) { { fclose( output_file ); fclose( output_file ); Loading Loading @@ -94,7 +95,7 @@ public: virtual void set_viewport( wxPoint offset, virtual void set_viewport( wxPoint offset, double scale, int orient ) = 0; double scale, int orient ) = 0; /* Standard primitives */ // Standard primitives virtual void rect( wxPoint p1, wxPoint p2, FILL_T fill, virtual void rect( wxPoint p1, wxPoint p2, FILL_T fill, int width = -1 ) = 0; int width = -1 ) = 0; virtual void circle( wxPoint pos, int diametre, FILL_T fill, virtual void circle( wxPoint pos, int diametre, FILL_T fill, Loading @@ -113,7 +114,7 @@ public: GRTraceMode tracemode ); GRTraceMode tracemode ); virtual void pen_to( wxPoint pos, char plume ) = 0; virtual void pen_to( wxPoint pos, char plume ) = 0; /* Flash primitives */ // Flash primitives virtual void flash_pad_circle( wxPoint pos, int diametre, virtual void flash_pad_circle( wxPoint pos, int diametre, GRTraceMode trace_mode ) = 0; GRTraceMode trace_mode ) = 0; virtual void flash_pad_oval( wxPoint pos, wxSize size, int orient, virtual void flash_pad_oval( wxPoint pos, wxSize size, int orient, Loading @@ -130,7 +131,7 @@ public: virtual void flash_pad_trapez( wxPoint aPadPos, wxPoint aCorners[4], virtual void flash_pad_trapez( wxPoint aPadPos, wxPoint aCorners[4], int aPadOrient, GRTraceMode aTrace_Mode ) = 0; int aPadOrient, GRTraceMode aTrace_Mode ) = 0; /* Convenience functions */ // Convenience functions void move_to( wxPoint pos ) void move_to( wxPoint pos ) { { pen_to( pos, 'U' ); pen_to( pos, 'U' ); Loading @@ -152,7 +153,7 @@ public: void pen_finish() void pen_finish() { { /* Shortcut */ // Shortcut pen_to( wxPoint( 0, 0 ), 'Z' ); pen_to( wxPoint( 0, 0 ), 'Z' ); } } Loading @@ -173,16 +174,16 @@ public: * Function SetLayerPolarity * Function SetLayerPolarity * sets current Gerber layer polarity to positive or negative * sets current Gerber layer polarity to positive or negative * by writing \%LPD*\% or \%LPC*\% to the Gerber file, respectively. * by writing \%LPD*\% or \%LPC*\% to the Gerber file, respectively. * param @aPositive = layer polarity, true for positive * @param aPositive is the layer polarity and true for positive. */ */ virtual void SetLayerPolarity( bool aPositive ) = 0; virtual void SetLayerPolarity( bool aPositive ) = 0; protected: protected: /* These are marker subcomponents */ // These are marker subcomponents void center_square( const wxPoint& position, int diametre, FILL_T fill ); void center_square( const wxPoint& position, int diametre, FILL_T fill ); void center_lozenge( const wxPoint& position, int diametre, FILL_T fill ); void center_lozenge( const wxPoint& position, int diametre, FILL_T fill ); /* Helper function for sketched filler segment */ // Helper function for sketched filler segment void segment_as_oval( wxPoint start, wxPoint end, int width, void segment_as_oval( wxPoint start, wxPoint end, int width, GRTraceMode tracemode ); GRTraceMode tracemode ); void sketch_oval( wxPoint pos, wxSize size, int orient, int width ); void sketch_oval( wxPoint pos, wxSize size, int orient, int width ); Loading @@ -191,22 +192,22 @@ protected: virtual void user_to_device_size( wxSize& size ); virtual void user_to_device_size( wxSize& size ); virtual double user_to_device_size( double size ); virtual double user_to_device_size( double size ); /* Plot scale */ // Plot scale double plot_scale; double plot_scale; /* Device scale (from decimils to device units) */ // Device scale (from decimils to device units) double device_scale; double device_scale; /* Plot offset (in decimils) */ // Plot offset (in decimils) wxPoint plot_offset; wxPoint plot_offset; /* Output file */ // Output file FILE* output_file; FILE* output_file; /* Pen handling */ // Pen handling bool color_mode, negative_mode; bool color_mode, negative_mode; int default_pen_width; int default_pen_width; int current_pen_width; int current_pen_width; char pen_state; char pen_state; wxPoint pen_lastpos; wxPoint pen_lastpos; /* Other stuff */ // Other stuff int plot_orient_options; /* For now, mirror plot */ int plot_orient_options; // For now, mirror plot wxString creator; wxString creator; wxString filename; wxString filename; Ki_PageDescr* sheet; Ki_PageDescr* sheet; Loading @@ -223,10 +224,10 @@ public: virtual bool start_plot( FILE* fout ); virtual bool start_plot( FILE* fout ); virtual bool end_plot(); virtual bool end_plot(); /* HPGL doesn't handle line thickness or color */ // HPGL doesn't handle line thickness or color virtual void set_current_line_width( int width ) virtual void set_current_line_width( int width ) { { /* Handy override */ // Handy override current_pen_width = wxRound( pen_diameter ); current_pen_width = wxRound( pen_diameter ); }; }; virtual void set_default_line_width( int width ) {}; virtual void set_default_line_width( int width ) {}; Loading Loading @@ -280,7 +281,7 @@ public: virtual void flash_pad_trapez( wxPoint aPadPos, wxPoint aCorners[4], virtual void flash_pad_trapez( wxPoint aPadPos, wxPoint aCorners[4], int aPadOrient, GRTraceMode aTrace_Mode ); int aPadOrient, GRTraceMode aTrace_Mode ); virtual void SetLayerPolarity( bool aPositive ) {}; virtual void SetLayerPolarity( bool aPositive ) {} protected: protected: void pen_control( int plume ); void pen_control( int plume ); Loading @@ -291,6 +292,7 @@ protected: double pen_overlap; double pen_overlap; }; }; class PS_PLOTTER : public PLOTTER class PS_PLOTTER : public PLOTTER { { public: public: Loading Loading @@ -331,7 +333,7 @@ public: virtual void flash_pad_trapez( wxPoint aPadPos, wxPoint aCorners[4], virtual void flash_pad_trapez( wxPoint aPadPos, wxPoint aCorners[4], int aPadOrient, GRTraceMode aTrace_Mode ); int aPadOrient, GRTraceMode aTrace_Mode ); virtual void SetLayerPolarity( bool aPositive ) {}; virtual void SetLayerPolarity( bool aPositive ) {} protected: protected: double plot_scale_adjX, plot_scale_adjY; double plot_scale_adjX, plot_scale_adjY; Loading @@ -349,14 +351,15 @@ struct APERTURE Oval = 4 Oval = 4 }; }; wxSize size; /* horiz and Vert size*/ wxSize size; // horiz and Vert size Aperture_Type type; /* Type ( Line, rect , circulaire , ovale .. ) */ Aperture_Type type; // Type ( Line, rect , circulaire , ovale .. ) int D_code; /* code number ( >= 10 ); */ int D_code; // code number ( >= 10 ); /* Trivia question: WHY Gerber decided to use D instead of the usual T for /* Trivia question: WHY Gerber decided to use D instead of the usual T for * tool change? */ * tool change? */ }; }; class GERBER_PLOTTER : public PLOTTER class GERBER_PLOTTER : public PLOTTER { { public: public: Loading @@ -373,9 +376,9 @@ public: virtual void set_current_line_width( int width ); virtual void set_current_line_width( int width ); virtual void set_default_line_width( int width ); virtual void set_default_line_width( int width ); /* RS274X has no dashing, nor colours */ // RS274X has no dashing, nor colours virtual void set_dash( bool dashed ) {}; virtual void set_dash( bool dashed ) {} virtual void set_color( int color ) {}; virtual void set_color( int color ) {} virtual void set_viewport( wxPoint offset, virtual void set_viewport( wxPoint offset, double scale, int orient ); double scale, int orient ); virtual void rect( wxPoint p1, wxPoint p2, FILL_T fill, int width = -1 ); virtual void rect( wxPoint p1, wxPoint p2, FILL_T fill, int width = -1 ); Loading @@ -397,8 +400,8 @@ protected: void select_aperture( const wxSize& size, void select_aperture( const wxSize& size, APERTURE::Aperture_Type type ); APERTURE::Aperture_Type type ); std::vector<APERTURE>::iterator get_aperture( const wxSize& size, std::vector<APERTURE>::iterator APERTURE::Aperture_Type type ); get_aperture( const wxSize& size, APERTURE::Aperture_Type type ); FILE* work_file, * final_file; FILE* work_file, * final_file; wxString m_workFilename; wxString m_workFilename; Loading @@ -419,17 +422,19 @@ public: virtual bool start_plot( FILE* fout ); virtual bool start_plot( FILE* fout ); virtual bool end_plot(); virtual bool end_plot(); /* For now we don't use 'thick' primitives, so no line width */ // For now we don't use 'thick' primitives, so no line width virtual void set_current_line_width( int width ) virtual void set_current_line_width( int width ) { { /* Handy override */ // Handy override current_pen_width = 0; current_pen_width = 0; }; } virtual void set_default_line_width( int width ) virtual void set_default_line_width( int width ) { { /* DXF lines are infinitesimal */ // DXF lines are infinitesimal default_pen_width = 0; default_pen_width = 0; }; } virtual void set_dash( bool dashed ); virtual void set_dash( bool dashed ); virtual void set_color( int color ); virtual void set_color( int color ); Loading @@ -453,10 +458,10 @@ public: virtual void flash_pad_trapez( wxPoint aPadPos, wxPoint aCorners[4], virtual void flash_pad_trapez( wxPoint aPadPos, wxPoint aCorners[4], int aPadOrient, GRTraceMode aTrace_Mode ); int aPadOrient, GRTraceMode aTrace_Mode ); virtual void SetLayerPolarity( bool aPositive ) {}; virtual void SetLayerPolarity( bool aPositive ) {} protected: protected: int current_color; int current_color; }; }; #endif /* __INCLUDE__PLOT_COMMON_H__ */ #endif // __INCLUDE__PLOT_COMMON_H__ pcbnew/class_pad.cpp +5 −1 Original line number Original line Diff line number Diff line Loading @@ -57,7 +57,8 @@ D_PAD::~D_PAD() */ */ int D_PAD::GetMaxRadius() const int D_PAD::GetMaxRadius() const { { int x, y, radius; int x, y; int radius; switch( m_PadShape & 0x7F ) switch( m_PadShape & 0x7F ) { { Loading @@ -79,6 +80,9 @@ int D_PAD::GetMaxRadius() const y = m_Size.y + ABS( m_DeltaSize.x ); // Remember: m_DeltaSize.x is the m_Size.y change y = m_Size.y + ABS( m_DeltaSize.x ); // Remember: m_DeltaSize.x is the m_Size.y change radius = 1 + (int) ( sqrt( (double) y * y + (double) x * x ) / 2 ); radius = 1 + (int) ( sqrt( (double) y * y + (double) x * x ) / 2 ); break; break; default: radius = 0; // quiet compiler } } return radius; return radius; Loading pcbnew/pcbplot.h +14 −11 Original line number Original line Diff line number Diff line Loading @@ -43,23 +43,26 @@ public: int PlotPSColorOpt; // True for color Postscript output int PlotPSColorOpt; // True for color Postscript output bool Plot_PS_Negative; // True to create a negative board ps plot bool Plot_PS_Negative; // True to create a negative board ps plot /* Flags to enable or disable ploting of various PCB elements. */ /// Flags to enable or disable ploting of various PCB elements. bool Sel_Texte_Reference; bool Sel_Texte_Reference; bool Sel_Texte_Valeur; bool Sel_Texte_Valeur; bool Sel_Texte_Divers; bool Sel_Texte_Divers; bool Sel_Texte_Invisible; bool Sel_Texte_Invisible; bool PlotPadsOnSilkLayer; /* allows pads on silkscreen */ bool PlotPadsOnSilkLayer; ///< allows pads on silkscreen bool m_SubtractMaskFromSilk; bool m_SubtractMaskFromSilk; /* id for plot format (see enum PlotFormat in plot_common.h) */ /// id for plot format (see enum PlotFormat in plot_common.h) int PlotFormat; int PlotFormat; int PlotOrient; int PlotOrient; int PlotScaleOpt; int PlotScaleOpt; enum DrillShapeOptT { enum DrillShapeOptT { NO_DRILL_SHAPE = 0, NO_DRILL_SHAPE = 0, SMALL_DRILL_SHAPE = 1, SMALL_DRILL_SHAPE = 1, FULL_DRILL_SHAPE = 2 FULL_DRILL_SHAPE = 2 }; }; DrillShapeOptT DrillShapeOpt; DrillShapeOptT DrillShapeOpt; double Scale; double Scale; double ScaleAdjX; double ScaleAdjX; Loading Loading
gerbview/draw_gerber_screen.cpp +56 −17 Original line number Original line Diff line number Diff line Loading @@ -103,45 +103,84 @@ void BOARD::Draw( WinEDA_DrawPanel* aPanel, wxDC* aDC, int aDrawMode, const wxPo { { // Because Images can be negative (i.e with background filled in color) items are drawn // Because Images can be negative (i.e with background filled in color) items are drawn // graphic layer per graphic layer, after the background is filled // graphic layer per graphic layer, after the background is filled int bitmapWidth, bitmapHeight; aPanel->GetClientSize( &bitmapWidth, &bitmapHeight ); wxBitmap layerBitmap( bitmapWidth, bitmapHeight ); wxMemoryDC memoryDC; memoryDC.SelectObject( layerBitmap ); wxColour bgColor = MakeColour( g_DrawBgColor ); wxBrush bgBrush( bgColor, wxSOLID ); for( int layer = 0; layer < 32; layer++ ) for( int layer = 0; layer < 32; layer++ ) { { if( !GetBoard()->IsLayerVisible( layer ) ) if( !GetBoard()->IsLayerVisible( layer ) ) continue; continue; GERBER_IMAGE* gerber = g_GERBER_List[layer]; GERBER_IMAGE* gerber = g_GERBER_List[layer]; if( gerber == NULL ) // Graphic layer not yet used if( gerber == NULL ) // Graphic layer not yet used continue; continue; /* Draw background negative (i.e. in graphic layer color) for negative images: // Draw each layer into a bitmap first. Negative Gerber * Background is drawn here in GR_OR mode because in COPY mode // layers are drawn in background color. * all previous graphics will be erased memoryDC.SetBackground( bgBrush ); * Note: items in background color ("Erased" items) are always drawn in COPY mode memoryDC.Clear(); * Some artifacts can happen when more than one gerber file is loaded */ if( gerber->m_ImageNegative ) if( gerber->m_ImageNegative ) { { // Draw background negative (i.e. in graphic layer color) for negative images. int color = GetBoard()->GetLayerColor( layer ); int color = GetBoard()->GetLayerColor( layer ); GRSetDrawMode( aDC, GR_OR ); GRSetDrawMode( (wxDC*)&memoryDC, GR_COPY ); // GR_COPY is faster than GR_OR EDA_Rect* cbox = &aPanel->m_ClipBox; EDA_Rect* cbox = &aPanel->m_ClipBox; GRSFilledRect( cbox, aDC, cbox->GetX(), cbox->GetY(), GRSFilledRect( cbox, (wxDC*)&memoryDC, cbox->GetX(), cbox->GetY(), cbox->GetRight(), cbox->GetBottom(), cbox->GetRight(), cbox->GetBottom(), 0, color, color ); 0, color, color ); GRSetDrawMode( aDC, aDrawMode ); GRSetDrawMode( (wxDC*)&memoryDC, aDrawMode ); } } int dcode_hightlight = 0; int dcode_highlight = 0; if( layer == m_PcbFrame->GetScreen()->m_Active_Layer ) if( layer == m_PcbFrame->GetScreen()->m_Active_Layer ) dcode_hightlight = gerber->m_Selected_Tool; dcode_highlight = gerber->m_Selected_Tool; BOARD_ITEM* item = GetBoard()->m_Drawings; for( ; item; item = item->Next() ) for( BOARD_ITEM* item = GetBoard()->m_Drawings; item; item = item->Next() ) { { GERBER_DRAW_ITEM* gerb_item = (GERBER_DRAW_ITEM*) item; GERBER_DRAW_ITEM* gerb_item = (GERBER_DRAW_ITEM*) item; if( gerb_item->GetLayer() != layer ) if( gerb_item->GetLayer() != layer ) continue; continue; int drawMode = aDrawMode; int drawMode = aDrawMode; if( dcode_hightlight == gerb_item->m_DCode ) if( dcode_highlight == gerb_item->m_DCode ) drawMode |= GR_SURBRILL; drawMode |= GR_SURBRILL; gerb_item->Draw( aPanel, aDC, drawMode ); gerb_item->Draw( aPanel, (wxDC*)&memoryDC, drawMode ); } } #if 0 // Use the layer bitmap itself as a mask when blitting. // The bitmap cannot be referenced by a device context // when setting the mask. memoryDC.SelectObject( wxNullBitmap ); layerBitmap.SetMask( new wxMask( layerBitmap, bgColor ) ); memoryDC.SelectObject( layerBitmap ); aDC->Blit( 0, 0, bitmapWidth, bitmapHeight, (wxDC*)&memoryDC, 0, 0, wxCOPY, true ); #else // Dick: seems a little faster, crisper aDC->Blit( 0, 0, bitmapWidth, bitmapHeight, (wxDC*)&memoryDC, 0, 0, wxOR, false ); #endif } } m_PcbFrame->GetScreen()->ClrRefreshReq(); m_PcbFrame->GetScreen()->ClrRefreshReq(); Loading
include/plot_common.h +62 −57 Original line number Original line Diff line number Diff line Loading @@ -17,7 +17,8 @@ class Ki_PageDescr; /** /** * Enum PlotFormat * Enum PlotFormat * must be kept in order of the radio buttons in the plot panel/window. * is the set of supported output plot formats. They should be kept in order * of the radio buttons in the plot panel/windows. */ */ enum PlotFormat { enum PlotFormat { PLOT_FORMAT_HPGL, PLOT_FORMAT_HPGL, Loading @@ -37,7 +38,7 @@ public: virtual ~PLOTTER() virtual ~PLOTTER() { { /* Emergency cleanup */ // Emergency cleanup if( output_file ) if( output_file ) { { fclose( output_file ); fclose( output_file ); Loading Loading @@ -94,7 +95,7 @@ public: virtual void set_viewport( wxPoint offset, virtual void set_viewport( wxPoint offset, double scale, int orient ) = 0; double scale, int orient ) = 0; /* Standard primitives */ // Standard primitives virtual void rect( wxPoint p1, wxPoint p2, FILL_T fill, virtual void rect( wxPoint p1, wxPoint p2, FILL_T fill, int width = -1 ) = 0; int width = -1 ) = 0; virtual void circle( wxPoint pos, int diametre, FILL_T fill, virtual void circle( wxPoint pos, int diametre, FILL_T fill, Loading @@ -113,7 +114,7 @@ public: GRTraceMode tracemode ); GRTraceMode tracemode ); virtual void pen_to( wxPoint pos, char plume ) = 0; virtual void pen_to( wxPoint pos, char plume ) = 0; /* Flash primitives */ // Flash primitives virtual void flash_pad_circle( wxPoint pos, int diametre, virtual void flash_pad_circle( wxPoint pos, int diametre, GRTraceMode trace_mode ) = 0; GRTraceMode trace_mode ) = 0; virtual void flash_pad_oval( wxPoint pos, wxSize size, int orient, virtual void flash_pad_oval( wxPoint pos, wxSize size, int orient, Loading @@ -130,7 +131,7 @@ public: virtual void flash_pad_trapez( wxPoint aPadPos, wxPoint aCorners[4], virtual void flash_pad_trapez( wxPoint aPadPos, wxPoint aCorners[4], int aPadOrient, GRTraceMode aTrace_Mode ) = 0; int aPadOrient, GRTraceMode aTrace_Mode ) = 0; /* Convenience functions */ // Convenience functions void move_to( wxPoint pos ) void move_to( wxPoint pos ) { { pen_to( pos, 'U' ); pen_to( pos, 'U' ); Loading @@ -152,7 +153,7 @@ public: void pen_finish() void pen_finish() { { /* Shortcut */ // Shortcut pen_to( wxPoint( 0, 0 ), 'Z' ); pen_to( wxPoint( 0, 0 ), 'Z' ); } } Loading @@ -173,16 +174,16 @@ public: * Function SetLayerPolarity * Function SetLayerPolarity * sets current Gerber layer polarity to positive or negative * sets current Gerber layer polarity to positive or negative * by writing \%LPD*\% or \%LPC*\% to the Gerber file, respectively. * by writing \%LPD*\% or \%LPC*\% to the Gerber file, respectively. * param @aPositive = layer polarity, true for positive * @param aPositive is the layer polarity and true for positive. */ */ virtual void SetLayerPolarity( bool aPositive ) = 0; virtual void SetLayerPolarity( bool aPositive ) = 0; protected: protected: /* These are marker subcomponents */ // These are marker subcomponents void center_square( const wxPoint& position, int diametre, FILL_T fill ); void center_square( const wxPoint& position, int diametre, FILL_T fill ); void center_lozenge( const wxPoint& position, int diametre, FILL_T fill ); void center_lozenge( const wxPoint& position, int diametre, FILL_T fill ); /* Helper function for sketched filler segment */ // Helper function for sketched filler segment void segment_as_oval( wxPoint start, wxPoint end, int width, void segment_as_oval( wxPoint start, wxPoint end, int width, GRTraceMode tracemode ); GRTraceMode tracemode ); void sketch_oval( wxPoint pos, wxSize size, int orient, int width ); void sketch_oval( wxPoint pos, wxSize size, int orient, int width ); Loading @@ -191,22 +192,22 @@ protected: virtual void user_to_device_size( wxSize& size ); virtual void user_to_device_size( wxSize& size ); virtual double user_to_device_size( double size ); virtual double user_to_device_size( double size ); /* Plot scale */ // Plot scale double plot_scale; double plot_scale; /* Device scale (from decimils to device units) */ // Device scale (from decimils to device units) double device_scale; double device_scale; /* Plot offset (in decimils) */ // Plot offset (in decimils) wxPoint plot_offset; wxPoint plot_offset; /* Output file */ // Output file FILE* output_file; FILE* output_file; /* Pen handling */ // Pen handling bool color_mode, negative_mode; bool color_mode, negative_mode; int default_pen_width; int default_pen_width; int current_pen_width; int current_pen_width; char pen_state; char pen_state; wxPoint pen_lastpos; wxPoint pen_lastpos; /* Other stuff */ // Other stuff int plot_orient_options; /* For now, mirror plot */ int plot_orient_options; // For now, mirror plot wxString creator; wxString creator; wxString filename; wxString filename; Ki_PageDescr* sheet; Ki_PageDescr* sheet; Loading @@ -223,10 +224,10 @@ public: virtual bool start_plot( FILE* fout ); virtual bool start_plot( FILE* fout ); virtual bool end_plot(); virtual bool end_plot(); /* HPGL doesn't handle line thickness or color */ // HPGL doesn't handle line thickness or color virtual void set_current_line_width( int width ) virtual void set_current_line_width( int width ) { { /* Handy override */ // Handy override current_pen_width = wxRound( pen_diameter ); current_pen_width = wxRound( pen_diameter ); }; }; virtual void set_default_line_width( int width ) {}; virtual void set_default_line_width( int width ) {}; Loading Loading @@ -280,7 +281,7 @@ public: virtual void flash_pad_trapez( wxPoint aPadPos, wxPoint aCorners[4], virtual void flash_pad_trapez( wxPoint aPadPos, wxPoint aCorners[4], int aPadOrient, GRTraceMode aTrace_Mode ); int aPadOrient, GRTraceMode aTrace_Mode ); virtual void SetLayerPolarity( bool aPositive ) {}; virtual void SetLayerPolarity( bool aPositive ) {} protected: protected: void pen_control( int plume ); void pen_control( int plume ); Loading @@ -291,6 +292,7 @@ protected: double pen_overlap; double pen_overlap; }; }; class PS_PLOTTER : public PLOTTER class PS_PLOTTER : public PLOTTER { { public: public: Loading Loading @@ -331,7 +333,7 @@ public: virtual void flash_pad_trapez( wxPoint aPadPos, wxPoint aCorners[4], virtual void flash_pad_trapez( wxPoint aPadPos, wxPoint aCorners[4], int aPadOrient, GRTraceMode aTrace_Mode ); int aPadOrient, GRTraceMode aTrace_Mode ); virtual void SetLayerPolarity( bool aPositive ) {}; virtual void SetLayerPolarity( bool aPositive ) {} protected: protected: double plot_scale_adjX, plot_scale_adjY; double plot_scale_adjX, plot_scale_adjY; Loading @@ -349,14 +351,15 @@ struct APERTURE Oval = 4 Oval = 4 }; }; wxSize size; /* horiz and Vert size*/ wxSize size; // horiz and Vert size Aperture_Type type; /* Type ( Line, rect , circulaire , ovale .. ) */ Aperture_Type type; // Type ( Line, rect , circulaire , ovale .. ) int D_code; /* code number ( >= 10 ); */ int D_code; // code number ( >= 10 ); /* Trivia question: WHY Gerber decided to use D instead of the usual T for /* Trivia question: WHY Gerber decided to use D instead of the usual T for * tool change? */ * tool change? */ }; }; class GERBER_PLOTTER : public PLOTTER class GERBER_PLOTTER : public PLOTTER { { public: public: Loading @@ -373,9 +376,9 @@ public: virtual void set_current_line_width( int width ); virtual void set_current_line_width( int width ); virtual void set_default_line_width( int width ); virtual void set_default_line_width( int width ); /* RS274X has no dashing, nor colours */ // RS274X has no dashing, nor colours virtual void set_dash( bool dashed ) {}; virtual void set_dash( bool dashed ) {} virtual void set_color( int color ) {}; virtual void set_color( int color ) {} virtual void set_viewport( wxPoint offset, virtual void set_viewport( wxPoint offset, double scale, int orient ); double scale, int orient ); virtual void rect( wxPoint p1, wxPoint p2, FILL_T fill, int width = -1 ); virtual void rect( wxPoint p1, wxPoint p2, FILL_T fill, int width = -1 ); Loading @@ -397,8 +400,8 @@ protected: void select_aperture( const wxSize& size, void select_aperture( const wxSize& size, APERTURE::Aperture_Type type ); APERTURE::Aperture_Type type ); std::vector<APERTURE>::iterator get_aperture( const wxSize& size, std::vector<APERTURE>::iterator APERTURE::Aperture_Type type ); get_aperture( const wxSize& size, APERTURE::Aperture_Type type ); FILE* work_file, * final_file; FILE* work_file, * final_file; wxString m_workFilename; wxString m_workFilename; Loading @@ -419,17 +422,19 @@ public: virtual bool start_plot( FILE* fout ); virtual bool start_plot( FILE* fout ); virtual bool end_plot(); virtual bool end_plot(); /* For now we don't use 'thick' primitives, so no line width */ // For now we don't use 'thick' primitives, so no line width virtual void set_current_line_width( int width ) virtual void set_current_line_width( int width ) { { /* Handy override */ // Handy override current_pen_width = 0; current_pen_width = 0; }; } virtual void set_default_line_width( int width ) virtual void set_default_line_width( int width ) { { /* DXF lines are infinitesimal */ // DXF lines are infinitesimal default_pen_width = 0; default_pen_width = 0; }; } virtual void set_dash( bool dashed ); virtual void set_dash( bool dashed ); virtual void set_color( int color ); virtual void set_color( int color ); Loading @@ -453,10 +458,10 @@ public: virtual void flash_pad_trapez( wxPoint aPadPos, wxPoint aCorners[4], virtual void flash_pad_trapez( wxPoint aPadPos, wxPoint aCorners[4], int aPadOrient, GRTraceMode aTrace_Mode ); int aPadOrient, GRTraceMode aTrace_Mode ); virtual void SetLayerPolarity( bool aPositive ) {}; virtual void SetLayerPolarity( bool aPositive ) {} protected: protected: int current_color; int current_color; }; }; #endif /* __INCLUDE__PLOT_COMMON_H__ */ #endif // __INCLUDE__PLOT_COMMON_H__
pcbnew/class_pad.cpp +5 −1 Original line number Original line Diff line number Diff line Loading @@ -57,7 +57,8 @@ D_PAD::~D_PAD() */ */ int D_PAD::GetMaxRadius() const int D_PAD::GetMaxRadius() const { { int x, y, radius; int x, y; int radius; switch( m_PadShape & 0x7F ) switch( m_PadShape & 0x7F ) { { Loading @@ -79,6 +80,9 @@ int D_PAD::GetMaxRadius() const y = m_Size.y + ABS( m_DeltaSize.x ); // Remember: m_DeltaSize.x is the m_Size.y change y = m_Size.y + ABS( m_DeltaSize.x ); // Remember: m_DeltaSize.x is the m_Size.y change radius = 1 + (int) ( sqrt( (double) y * y + (double) x * x ) / 2 ); radius = 1 + (int) ( sqrt( (double) y * y + (double) x * x ) / 2 ); break; break; default: radius = 0; // quiet compiler } } return radius; return radius; Loading
pcbnew/pcbplot.h +14 −11 Original line number Original line Diff line number Diff line Loading @@ -43,23 +43,26 @@ public: int PlotPSColorOpt; // True for color Postscript output int PlotPSColorOpt; // True for color Postscript output bool Plot_PS_Negative; // True to create a negative board ps plot bool Plot_PS_Negative; // True to create a negative board ps plot /* Flags to enable or disable ploting of various PCB elements. */ /// Flags to enable or disable ploting of various PCB elements. bool Sel_Texte_Reference; bool Sel_Texte_Reference; bool Sel_Texte_Valeur; bool Sel_Texte_Valeur; bool Sel_Texte_Divers; bool Sel_Texte_Divers; bool Sel_Texte_Invisible; bool Sel_Texte_Invisible; bool PlotPadsOnSilkLayer; /* allows pads on silkscreen */ bool PlotPadsOnSilkLayer; ///< allows pads on silkscreen bool m_SubtractMaskFromSilk; bool m_SubtractMaskFromSilk; /* id for plot format (see enum PlotFormat in plot_common.h) */ /// id for plot format (see enum PlotFormat in plot_common.h) int PlotFormat; int PlotFormat; int PlotOrient; int PlotOrient; int PlotScaleOpt; int PlotScaleOpt; enum DrillShapeOptT { enum DrillShapeOptT { NO_DRILL_SHAPE = 0, NO_DRILL_SHAPE = 0, SMALL_DRILL_SHAPE = 1, SMALL_DRILL_SHAPE = 1, FULL_DRILL_SHAPE = 2 FULL_DRILL_SHAPE = 2 }; }; DrillShapeOptT DrillShapeOpt; DrillShapeOptT DrillShapeOpt; double Scale; double Scale; double ScaleAdjX; double ScaleAdjX; Loading