Commit 285d9b64 authored by Wayne Stambaugh's avatar Wayne Stambaugh
Browse files

Major component library ojbect editing code refactor.

* All library component object editing is now performed with the ojbect
  except LIB_PIN (coming soon).
* Added TRANFORM class to handle coordinate transforms.
* Remove old transform matrix functions.
* More file renaming to align them with the other component library
  object file names.
* Fix hot key bugs in library editor to disable edit keys while an item
  is being edited.
* Fixed bug when cancelling rotation of text and field objects while
  being moved.
parent 4cdc2c50
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -14,13 +14,11 @@ set(EESCHEMA_SRCS
    build_BOM.cpp
    busentry.cpp
    bus-wire-junction.cpp
    class_BodyItem_Text.cpp
    class_drawsheet.cpp
    class_drawsheetpath.cpp
    class_drc_erc_item.cpp
    class_hierarchical_PIN_sheet.cpp
    class_libentry.cpp
    class_libentry_fields.cpp
    class_library.cpp
    class_marker_sch.cpp
    class_netlist_object.cpp
@@ -77,7 +75,6 @@ set(EESCHEMA_SRCS
    edit_component_in_schematic.cpp
    edit_label.cpp
    eelayer.cpp
    eelibs_draw_components.cpp
    eelibs_read_libraryfiles.cpp
    eeredraw.cpp
    eeschema.cpp
@@ -101,8 +98,10 @@ set(EESCHEMA_SRCS
    lib_circle.cpp
    lib_draw_item.cpp
    lib_export.cpp
    lib_field.cpp
    lib_polyline.cpp
    lib_rectangle.cpp
    lib_text.cpp
    libfield.cpp
    load_one_schematic_file.cpp
    locate.cpp
@@ -135,6 +134,7 @@ set(EESCHEMA_SRCS
    tool_lib.cpp
    tool_sch.cpp
    tool_viewlib.cpp
    transform.cpp
    viewlib_frame.cpp
    viewlibs.cpp)

+4 −3
Original line number Diff line number Diff line
@@ -906,7 +906,8 @@ static LIB_PIN* GetNextPinPosition( SCH_COMPONENT* aDrawLibItem,
                                    bool           aSearchFirst )
{
    static LIB_COMPONENT* Entry;
    static int Multi, convert, TransMat[2][2];
    static int Multi, convert;
    TRANSFORM transform;
    static wxPoint CmpPosition;
    static LIB_PIN* Pin;

@@ -921,7 +922,7 @@ static LIB_PIN* GetNextPinPosition( SCH_COMPONENT* aDrawLibItem,
        Multi       = aDrawLibItem->m_Multi;
        convert     = aDrawLibItem->m_Convert;
        CmpPosition = aDrawLibItem->m_Pos;
        memcpy( TransMat, aDrawLibItem->m_Transform, sizeof(TransMat) );
        transform   = aDrawLibItem->m_Transform;
    }
    else
        Pin = Entry->GetNextPin( Pin );
@@ -938,7 +939,7 @@ static LIB_PIN* GetNextPinPosition( SCH_COMPONENT* aDrawLibItem,

        /* Calculate the pin position (according to the component orientation)
         */
        aPosition = TransformCoordinate( TransMat, Pin->m_Pos ) + CmpPosition;
        aPosition = DefaultTransform.TransformCoordinate( Pin->m_Pos ) + CmpPosition;
        return Pin;
    }

+16 −25
Original line number Diff line number Diff line
@@ -16,8 +16,7 @@
#include "libeditframe.h"


static void DrawMovingBlockOutlines( WinEDA_DrawPanel* panel, wxDC* DC,
                                     bool erase );
static void DrawMovingBlockOutlines( WinEDA_DrawPanel* panel, wxDC* DC, bool erase );


/*
@@ -179,8 +178,7 @@ int WinEDA_LibeditFrame::HandleBlockEnd( wxDC* DC )
        DrawPanel->ManageCurseur = NULL;
        DrawPanel->ForceCloseManageCurseur = NULL;
        GetScreen()->SetCurItem( NULL );
        SetToolID( m_ID_current_state, DrawPanel->m_PanelDefaultCursor,
                   wxEmptyString );
        SetToolID( m_ID_current_state, DrawPanel->m_PanelDefaultCursor, wxEmptyString );
        DrawPanel->Refresh( TRUE );
    }

@@ -269,8 +267,7 @@ void WinEDA_LibeditFrame::HandleBlockPlace( wxDC* DC )
    GetScreen()->SetCurItem( NULL );
    DrawPanel->Refresh( TRUE );

    SetToolID( m_ID_current_state, DrawPanel->m_PanelDefaultCursor,
               wxEmptyString );
    SetToolID( m_ID_current_state, DrawPanel->m_PanelDefaultCursor, wxEmptyString );
}


@@ -298,25 +295,19 @@ void DrawMovingBlockOutlines( WinEDA_DrawPanel* panel, wxDC* DC, bool erase )

    if( erase )
    {
        PtBlock->Draw( panel, DC, PtBlock->m_MoveVector, g_XorMode,
                       PtBlock->m_Color );
        PtBlock->Draw( panel, DC, PtBlock->m_MoveVector, g_XorMode, PtBlock->m_Color );

        component->Draw( panel, DC, PtBlock->m_MoveVector, unit, convert,
                         g_XorMode, -1, DefaultTransformMatrix,
                         true, true, true );
                         g_XorMode, -1, DefaultTransform, true, true, true );
    }

    /* Repaint new view */
    PtBlock->m_MoveVector.x =
        screen->m_Curseur.x - PtBlock->m_BlockLastCursorPosition.x;
    PtBlock->m_MoveVector.y =
        screen->m_Curseur.y - PtBlock->m_BlockLastCursorPosition.y;
    PtBlock->m_MoveVector.x = screen->m_Curseur.x - PtBlock->m_BlockLastCursorPosition.x;
    PtBlock->m_MoveVector.y = screen->m_Curseur.y - PtBlock->m_BlockLastCursorPosition.y;

    GRSetDrawMode( DC, g_XorMode );
    PtBlock->Draw( panel, DC, PtBlock->m_MoveVector, g_XorMode,
                   PtBlock->m_Color );
    PtBlock->Draw( panel, DC, PtBlock->m_MoveVector, g_XorMode, PtBlock->m_Color );

    component->Draw( panel, DC, PtBlock->m_MoveVector, unit, convert,
                     g_XorMode, -1, DefaultTransformMatrix,
                     true, true, true );
                     g_XorMode, -1, DefaultTransform, true, true, true );
}
+21 −24
Original line number Diff line number Diff line
@@ -293,12 +293,9 @@ wxString LIB_COMPONENT::ReturnSubReference( int aUnit )
}


void LIB_COMPONENT::Draw( WinEDA_DrawPanel* aPanel, wxDC* aDc,
                          const wxPoint& aOffset, int aMulti,
                          int aConvert, int aDrawMode, int aColor,
                          const int aTransformMatrix[2][2],
                          bool aShowPinText, bool aDrawFields,
                          bool aOnlySelected )
void LIB_COMPONENT::Draw( WinEDA_DrawPanel* aPanel, wxDC* aDc, const wxPoint& aOffset, int aMulti,
                          int aConvert, int aDrawMode, int aColor, const TRANSFORM& aTransform,
                          bool aShowPinText, bool aDrawFields, bool aOnlySelected )
{
    BASE_SCREEN*   screen = aPanel->GetScreen();

@@ -336,14 +333,12 @@ void LIB_COMPONENT::Draw( WinEDA_DrawPanel* aPanel, wxDC* aDc,

            if( drawItem.Type() == COMPONENT_FIELD_DRAW_TYPE )
            {
                drawItem.Draw( aPanel, aDc, aOffset, aColor, aDrawMode,
                               (void*) NULL, aTransformMatrix );
                drawItem.Draw( aPanel, aDc, aOffset, aColor, aDrawMode, NULL, aTransform );
            }

            // Now, draw only the background for items with
            // m_Fill == FILLED_WITH_BG_BODYCOLOR:
            drawItem.Draw( aPanel, aDc, aOffset, aColor, aDrawMode,
                           (void*) false, aTransformMatrix );
            drawItem.Draw( aPanel, aDc, aOffset, aColor, aDrawMode, false, aTransform );
        }
    }

@@ -368,19 +363,18 @@ void LIB_COMPONENT::Draw( WinEDA_DrawPanel* aPanel, wxDC* aDc,

        if( drawItem.Type() == COMPONENT_PIN_DRAW_TYPE )
        {
            drawItem.Draw( aPanel, aDc, aOffset, aColor, aDrawMode,
                           (void*) aShowPinText, aTransformMatrix );
            drawItem.Draw( aPanel, aDc, aOffset, aColor, aDrawMode, (void*) aShowPinText,
                           aTransform );
        }
        else if( drawItem.Type() == COMPONENT_FIELD_DRAW_TYPE )
        {
            drawItem.Draw( aPanel, aDc, aOffset, aColor, aDrawMode,
                           (void*) NULL, aTransformMatrix );
            drawItem.Draw( aPanel, aDc, aOffset, aColor, aDrawMode, (void*) NULL, aTransform );
        }
        else
        {
            bool forceNoFill = drawItem.m_Fill == FILLED_WITH_BG_BODYCOLOR;
            drawItem.Draw( aPanel, aDc, aOffset, aColor, aDrawMode,
                           (void*) forceNoFill, aTransformMatrix );
            drawItem.Draw( aPanel, aDc, aOffset, aColor, aDrawMode, (void*) forceNoFill,
                           aTransform );
        }

    }
@@ -409,7 +403,7 @@ void LIB_COMPONENT::Draw( WinEDA_DrawPanel* aPanel, wxDC* aDc,


void LIB_COMPONENT::Plot( PLOTTER* aPlotter, int aUnit, int aConvert,
                          const wxPoint& aOffset, const int aTransform[2][2] )
                          const wxPoint& aOffset, const TRANSFORM& aTransform )
{
    wxASSERT( aPlotter != NULL );

@@ -451,7 +445,7 @@ from component %s in library %s." ),
    LIB_DRAW_ITEM_LIST::iterator i;

    if( aDc != NULL )
        aItem->Draw( aPanel, aDc, wxPoint( 0, 0 ), -1, g_XorMode, NULL, DefaultTransformMatrix );
        aItem->Draw( aPanel, aDc, wxPoint( 0, 0 ), -1, g_XorMode, NULL, DefaultTransform );

    for( i = drawings.begin(); i < drawings.end(); i++ )
    {
@@ -1383,7 +1377,7 @@ LIB_DRAW_ITEM* LIB_COMPONENT::LocateDrawItem( int aUnit, int aConvert,
 *                         Otherwise NULL.
 */
LIB_DRAW_ITEM* LIB_COMPONENT::LocateDrawItem( int aUnit, int aConvert, KICAD_T aType,
                                              const wxPoint& aPoint, const int aTransform[2][2] )
                                              const wxPoint& aPoint, const TRANSFORM& aTransform )
{
    /* we use LocateDrawItem( int aUnit, int convert, KICAD_T type, const
     * wxPoint& pt ) to search items.
@@ -1391,22 +1385,25 @@ LIB_DRAW_ITEM* LIB_COMPONENT::LocateDrawItem( int aUnit, int aConvert, KICAD_T a
     * we temporary copy aTransMat in DefaultTransformMatrix
     */
    LIB_DRAW_ITEM* item;
    int matrix[2][2];
    TRANSFORM transform;

    for ( int ii = 0; ii < 2; ii++ )
    {
        for ( int jj = 0; jj < 2; jj++ )
        {
            matrix[ii][jj] = aTransform[ii][jj];
            EXCHG( matrix[ii][jj], DefaultTransformMatrix[ii][jj] );
            transform = DefaultTransform;
            DefaultTransform = aTransform;
        }
    }

    item = LocateDrawItem( aUnit, aConvert, aType, aPoint );

    //Restore matrix
    for ( int ii = 0; ii < 2; ii++ )
    {
        for ( int jj = 0; jj < 2; jj++ )
        {
            EXCHG( matrix[ii][jj], DefaultTransformMatrix[ii][jj] );
            DefaultTransform = transform;
        }
    }

+5 −4
Original line number Diff line number Diff line
@@ -6,7 +6,7 @@
#define CLASS_LIBENTRY_H

#include "lib_draw_item.h"
#include "class_libentry_fields.h"
#include "lib_field.h"

#include <map>

@@ -14,6 +14,7 @@
class CMP_LIBRARY;
class LIB_ALIAS;


/**
 * LIB_ALIAS map sorting.
 */
@@ -312,7 +313,7 @@ public:
     */
    void Draw( WinEDA_DrawPanel* aPanel, wxDC* aDc, const wxPoint& aOffset,
               int aMulti, int aConvert, int aDrawMode, int aColor = -1,
               const int aTransform[2][2] = DefaultTransformMatrix,
               const TRANSFORM& aTransform = DefaultTransform,
               bool aShowPinText = true, bool aDrawFields = true,
               bool aOnlySelected = false );

@@ -325,7 +326,7 @@ public:
     * @param aTransform - Component plot transform matrix.
     */
    void Plot( PLOTTER* aPlotter, int aUnit, int aConvert, const wxPoint& aOffset,
               const int aTransform[2][2] );
               const TRANSFORM& aTransform );

    /**
     * Add a new draw \a aItem to the draw object list.
@@ -493,7 +494,7 @@ public:
     * @return The draw object if found.  Otherwise NULL.
     */
    LIB_DRAW_ITEM* LocateDrawItem( int aUnit, int aConvert, KICAD_T aType,
                                   const wxPoint& aPoint, const int aTransfrom[2][2] );
                                   const wxPoint& aPoint, const TRANSFORM& aTransfrom );

    /**
     * Return a reference to the draw item list.
Loading