Gerbview: add refinements to option to set offset and rotation of layers.
Fix incorrect calculation of bounding boxes when the rotation is not n*90 deg.
This commit is contained in:
parent
3cd60007c5
commit
72984c5c40
|
@ -54,9 +54,9 @@ bool DIALOG_DRAW_LAYERS_SETTINGS::TransferDataToWindow()
|
||||||
wxFileName filename( gbrImage->m_FileName );
|
wxFileName filename( gbrImage->m_FileName );
|
||||||
m_stLayerName->SetLabel( filename.GetFullName() );
|
m_stLayerName->SetLabel( filename.GetFullName() );
|
||||||
|
|
||||||
m_offsetX.SetValue( gbrImage->m_DrawOffset.x );
|
m_offsetX.SetValue( gbrImage->m_DisplayOffset.x );
|
||||||
m_offsetY.SetValue( gbrImage->m_DrawOffset.y );
|
m_offsetY.SetValue( gbrImage->m_DisplayOffset.y );
|
||||||
m_rotation.SetValue( gbrImage->m_DrawRotation.AsDegrees() );
|
m_rotation.SetValue( gbrImage->m_DisplayRotation.AsDegrees() );
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -161,11 +161,11 @@ VECTOR2I GERBER_DRAW_ITEM::GetABPosition( const VECTOR2I& aXYPosition ) const
|
||||||
abPos.y = -abPos.y;
|
abPos.y = -abPos.y;
|
||||||
|
|
||||||
// Now generate the draw transform
|
// Now generate the draw transform
|
||||||
if( !m_GerberImageFile->m_DrawRotation.IsZero() )
|
if( !m_GerberImageFile->m_DisplayRotation.IsZero() )
|
||||||
RotatePoint( abPos, m_GerberImageFile->m_DrawRotation );
|
RotatePoint( abPos, m_GerberImageFile->m_DisplayRotation );
|
||||||
|
|
||||||
abPos.x += KiROUND( m_GerberImageFile->m_DrawOffset.x * m_drawScale.x );
|
abPos.x += KiROUND( m_GerberImageFile->m_DisplayOffset.x * m_drawScale.x );
|
||||||
abPos.y += KiROUND( m_GerberImageFile->m_DrawOffset.y * m_drawScale.y );
|
abPos.y += KiROUND( m_GerberImageFile->m_DisplayOffset.y * m_drawScale.y );
|
||||||
|
|
||||||
return abPos;
|
return abPos;
|
||||||
}
|
}
|
||||||
|
@ -177,11 +177,11 @@ VECTOR2I GERBER_DRAW_ITEM::GetXYPosition( const VECTOR2I& aABPosition ) const
|
||||||
VECTOR2I xyPos = aABPosition;
|
VECTOR2I xyPos = aABPosition;
|
||||||
|
|
||||||
// First, undo the draw transform
|
// First, undo the draw transform
|
||||||
xyPos.x -= KiROUND( m_GerberImageFile->m_DrawOffset.x * m_drawScale.x );
|
xyPos.x -= KiROUND( m_GerberImageFile->m_DisplayOffset.x * m_drawScale.x );
|
||||||
xyPos.y -= KiROUND( m_GerberImageFile->m_DrawOffset.y * m_drawScale.y );
|
xyPos.y -= KiROUND( m_GerberImageFile->m_DisplayOffset.y * m_drawScale.y );
|
||||||
|
|
||||||
if( !m_GerberImageFile->m_DrawRotation.IsZero() )
|
if( !m_GerberImageFile->m_DisplayRotation.IsZero() )
|
||||||
RotatePoint( xyPos, -m_GerberImageFile->m_DrawRotation );
|
RotatePoint( xyPos, -m_GerberImageFile->m_DisplayRotation );
|
||||||
|
|
||||||
if( m_mirrorA )
|
if( m_mirrorA )
|
||||||
xyPos.x = -xyPos.x;
|
xyPos.x = -xyPos.x;
|
||||||
|
@ -387,8 +387,29 @@ const BOX2I GERBER_DRAW_ITEM::GetBoundingBox() const
|
||||||
}
|
}
|
||||||
|
|
||||||
// calculate the corners coordinates in current Gerber axis orientations
|
// calculate the corners coordinates in current Gerber axis orientations
|
||||||
VECTOR2I org = GetABPosition( bbox.GetOrigin() );
|
// because the initial bbox is a horizontal rect, but the bbox in AB position
|
||||||
VECTOR2I end = GetABPosition( bbox.GetEnd() );
|
// is the bbox image with perhaps a rotation, we need to calculate the coords of the
|
||||||
|
// corners of the bbox rotated, and then calculate the final bounding box
|
||||||
|
VECTOR2I corners[4];
|
||||||
|
corners[0] = bbox.GetOrigin(); // top left
|
||||||
|
corners[2] = bbox.GetEnd(); // bottom right
|
||||||
|
corners[1] = VECTOR2I( corners[2].x, corners[0].y ); // top right
|
||||||
|
corners[3] = VECTOR2I( corners[0].x, corners[2].y ); // bottom left
|
||||||
|
|
||||||
|
VECTOR2I org;
|
||||||
|
VECTOR2I end;
|
||||||
|
|
||||||
|
for( int ii = 0; ii < 4; ii++ )
|
||||||
|
{
|
||||||
|
corners[ii] = GetABPosition( corners[ii] );
|
||||||
|
|
||||||
|
org.x = std::min( org.x, corners[ii].x );
|
||||||
|
org.y = std::min( org.y, corners[ii].y );
|
||||||
|
|
||||||
|
end.x = std::max( end.x, corners[ii].x );
|
||||||
|
end.y = std::max( end.y, corners[ii].y );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Set the corners position:
|
// Set the corners position:
|
||||||
bbox.SetOrigin( org );
|
bbox.SetOrigin( org );
|
||||||
|
|
|
@ -111,9 +111,9 @@ GERBER_FILE_IMAGE::~GERBER_FILE_IMAGE()
|
||||||
|
|
||||||
void GERBER_FILE_IMAGE::SetDrawOffetAndRotation( VECTOR2D aOffsetMM, EDA_ANGLE aRotation )
|
void GERBER_FILE_IMAGE::SetDrawOffetAndRotation( VECTOR2D aOffsetMM, EDA_ANGLE aRotation )
|
||||||
{
|
{
|
||||||
m_DrawOffset.x = KiROUND( aOffsetMM.x * gerbIUScale.IU_PER_MM );
|
m_DisplayOffset.x = KiROUND( aOffsetMM.x * gerbIUScale.IU_PER_MM );
|
||||||
m_DrawOffset.y = KiROUND( aOffsetMM.y * gerbIUScale.IU_PER_MM );
|
m_DisplayOffset.y = KiROUND( aOffsetMM.y * gerbIUScale.IU_PER_MM );
|
||||||
m_DrawRotation = aRotation;
|
m_DisplayRotation = aRotation;
|
||||||
|
|
||||||
// Clear m_AbsolutePolygon member of Gerber items, because draw coordinates
|
// Clear m_AbsolutePolygon member of Gerber items, because draw coordinates
|
||||||
// are now outdated
|
// are now outdated
|
||||||
|
@ -226,8 +226,8 @@ void GERBER_FILE_IMAGE::ResetDefaultValues()
|
||||||
m_Last_Pen_Command = 0;
|
m_Last_Pen_Command = 0;
|
||||||
m_Exposure = false;
|
m_Exposure = false;
|
||||||
|
|
||||||
m_DrawOffset.x = m_DrawOffset.y = 0;
|
m_DisplayOffset.x = m_DisplayOffset.y = 0;
|
||||||
m_DrawRotation = ANGLE_0;
|
m_DisplayRotation = ANGLE_0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -464,10 +464,10 @@ public:
|
||||||
GERBER_LAYER m_GBRLayerParams; // hold params for the current gerber layer
|
GERBER_LAYER m_GBRLayerParams; // hold params for the current gerber layer
|
||||||
GERBER_DRAW_ITEMS m_drawings; // linked list of Gerber Items to draw
|
GERBER_DRAW_ITEMS m_drawings; // linked list of Gerber Items to draw
|
||||||
|
|
||||||
///< Parameters used only to draw items on this layer.
|
///< Parameters used only to draw (display) items on this layer.
|
||||||
///< Not not change actual coordinates/orientation
|
///< Do not change actual coordinates/orientation
|
||||||
VECTOR2I m_DrawOffset;
|
VECTOR2I m_DisplayOffset;
|
||||||
EDA_ANGLE m_DrawRotation;
|
EDA_ANGLE m_DisplayRotation;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
wxArrayString m_messagesList; // A list of messages created when reading a file
|
wxArrayString m_messagesList; // A list of messages created when reading a file
|
||||||
|
|
Loading…
Reference in New Issue