void SCH_SHEET_PIN::ConstrainOnEdge( wxPoint Pos ) { SCH_SHEET* sheet = GetParent(); if( sheet == NULL ) return; wxPoint center = sheet->m_pos + ( sheet->m_size / 2 ); if( m_edge == SHEET_LEFT_SIDE || m_edge == SHEET_RIGHT_SIDE ) { if( Pos.x > center.x ) { SetEdge( SHEET_RIGHT_SIDE ); } else { SetEdge( SHEET_LEFT_SIDE ); } SetTextY( Pos.y ); if( GetTextPos().y < sheet->m_pos.y ) SetTextY( sheet->m_pos.y ); if( GetTextPos().y > (sheet->m_pos.y + sheet->m_size.y) ) SetTextY( sheet->m_pos.y + sheet->m_size.y ); } else { if( Pos.y > center.y ) { SetEdge( SHEET_BOTTOM_SIDE ); } else { SetEdge( SHEET_TOP_SIDE ); } SetTextX( Pos.x ); if( GetTextPos().x < sheet->m_pos.x ) SetTextX( sheet->m_pos.x ); if( GetTextPos().x > (sheet->m_pos.x + sheet->m_size.x) ) SetTextX( sheet->m_pos.x + sheet->m_size.x ); } }
void SCH_TEXT::Rotate( wxPoint aPosition ) { int dy; wxPoint pt = GetTextPos(); RotatePoint( &pt, aPosition, 900 ); SetTextPos( pt ); int spin = GetLabelSpinStyle(); // Global and hierarchical labels spin backwards. Fix here because // changing SetLabelSpinStyle would break existing designs. if( this->Type() == SCH_GLOBAL_LABEL_T || this->Type() == SCH_HIERARCHICAL_LABEL_T ) SetLabelSpinStyle( ( spin - 1 >= 0 ? ( spin - 1 ) : 3 ) ); else SetLabelSpinStyle( ( spin + 1 ) % 4 ); if( this->Type() == SCH_TEXT_T ) { switch( GetLabelSpinStyle() ) { case 0: dy = GetTextHeight(); break; // horizontal text case 1: dy = 0; break; // Vert Orientation UP case 2: dy = GetTextHeight(); break; // invert horizontal text case 3: dy = 0; break; // Vert Orientation BOTTOM default: dy = 0; break; } SetTextY( GetTextPos().y + dy ); } }
void TEXTE_PCB::Flip( const wxPoint& aCentre ) { SetTextY( aCentre.y - ( GetTextPos().y - aCentre.y ) ); int copperLayerCount = GetBoard()->GetCopperLayerCount(); SetLayer( FlipLayer( GetLayer(), copperLayerCount ) ); SetMirrored( !IsMirrored() ); }
void LIB_TEXT::MirrorVertical( const wxPoint& center ) { int y = GetTextPos().y; y -= center.y; y *= -1; y += center.y; SetTextY( y ); }
void TEXTE_MODULE::Flip( const wxPoint& aCentre ) { // flipping the footprint is relative to the X axis SetTextY( ::Mirror( GetTextPos().y, aCentre.y ) ); SetTextAngle( -GetTextAngle() ); SetLayer( FlipLayer( GetLayer() ) ); SetMirrored( IsBackLayer( GetLayer() ) ); SetLocalCoord(); }
void TEXTE_MODULE::Mirror( const wxPoint& aCentre, bool aMirrorAroundXAxis ) { // Used in modedit, to transform the footprint // the mirror is around the Y axis or X axis if aMirrorAroundXAxis = true // the position is mirrored, but the text itself is not mirrored if( aMirrorAroundXAxis ) SetTextY( ::Mirror( GetTextPos().y, aCentre.y ) ); else SetTextX( ::Mirror( GetTextPos().x, aCentre.x ) ); SetLocalCoord(); }
void SCH_TEXT::MirrorX( int aXaxis_position ) { // Text is NOT really mirrored; it is moved to a suitable vertical position switch( GetLabelSpinStyle() ) { default: case 0: break; // horizontal text case 1: SetLabelSpinStyle( 3 ); break; // Vert Orientation UP case 2: break; // invert horizontal text case 3: SetLabelSpinStyle( 1 ); break; // Vert Orientation BOTTOM } SetTextY( Mirror( GetTextPos().y, aXaxis_position ) ); }
void SCH_SHEET_PIN::SetEdge( SCH_SHEET_PIN::SHEET_SIDE aEdge ) { SCH_SHEET* Sheet = GetParent(); // use SHEET_UNDEFINED_SIDE to adjust text orientation without changing edge switch( aEdge ) { case SHEET_LEFT_SIDE: m_edge = aEdge; SetTextX( Sheet->m_pos.x ); SetLabelSpinStyle( 2 ); // Orientation horiz inverse break; case SHEET_RIGHT_SIDE: m_edge = aEdge; SetTextX( Sheet->m_pos.x + Sheet->m_size.x ); SetLabelSpinStyle( 0 ); // Orientation horiz normal break; case SHEET_TOP_SIDE: m_edge = aEdge; SetTextY( Sheet->m_pos.y ); SetLabelSpinStyle( 3 ); // Orientation vert BOTTOM break; case SHEET_BOTTOM_SIDE: m_edge = aEdge; SetTextY( Sheet->m_pos.y + Sheet->m_size.y ); SetLabelSpinStyle( 1 ); // Orientation vert UP break; default: break; } }
void SCH_SHEET_PIN::MirrorX( int aXaxis_position ) { int p = GetTextPos().y - aXaxis_position; SetTextY( aXaxis_position - p ); switch( m_edge ) { case SHEET_TOP_SIDE: SetEdge( SHEET_BOTTOM_SIDE ); break; case SHEET_BOTTOM_SIDE: SetEdge( SHEET_TOP_SIDE ); break; default: break; } }