summaryrefslogtreecommitdiff
path: root/include/class_board_item.h
diff options
context:
space:
mode:
authorsaurabhb172020-02-26 16:14:17 +0530
committerGitHub2020-02-26 16:14:17 +0530
commit003d02608917e7a69d1a98438837e94ccf68352a (patch)
tree1392c90227aeea231c1d86371131e04c40382918 /include/class_board_item.h
parent886d9cb772e81d2e5262284bc3082664f084337f (diff)
parente255d0622297488c1c52755be670733418c994cf (diff)
downloadKiCad-eSim-003d02608917e7a69d1a98438837e94ccf68352a.tar.gz
KiCad-eSim-003d02608917e7a69d1a98438837e94ccf68352a.tar.bz2
KiCad-eSim-003d02608917e7a69d1a98438837e94ccf68352a.zip
Merge pull request #3 from saurabhb17/master
secondary files
Diffstat (limited to 'include/class_board_item.h')
-rw-r--r--include/class_board_item.h335
1 files changed, 335 insertions, 0 deletions
diff --git a/include/class_board_item.h b/include/class_board_item.h
new file mode 100644
index 0000000..7b202ff
--- /dev/null
+++ b/include/class_board_item.h
@@ -0,0 +1,335 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2004 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com
+ * Copyright (C) 1992-2011 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file class_board_item.h
+ * @brief Classes BOARD_ITEM and BOARD_CONNECTED_ITEM.
+ */
+
+#ifndef BOARD_ITEM_STRUCT_H
+#define BOARD_ITEM_STRUCT_H
+
+
+#include <base_struct.h>
+#include <gr_basic.h>
+#include <layers_id_colors_and_visibility.h>
+
+/// Abbrevation for fomatting internal units to a string.
+#define FMT_IU BOARD_ITEM::FormatInternalUnits
+#define FMT_ANGLE BOARD_ITEM::FormatAngle
+
+class BOARD;
+class EDA_DRAW_PANEL;
+
+
+/**
+ * Enum STROKE_T
+ * is the set of shapes for segments (graphic segments and tracks) which are often
+ * in the .m_Shape member
+ */
+enum STROKE_T
+{
+ S_SEGMENT = 0, ///< usual segment : line with rounded ends
+ S_RECT, ///< segment with non rounded ends
+ S_ARC, ///< Arcs (with rounded ends)
+ S_CIRCLE, ///< ring
+ S_POLYGON, ///< polygon (not yet used for tracks, but could be in microwave apps)
+ S_CURVE, ///< Bezier Curve
+ S_LAST ///< last value for this list
+};
+
+
+/**
+ * Class BOARD_ITEM
+ * is a base class for any item which can be embedded within the BOARD
+ * container class, and therefore instances of derived classes should only be
+ * found in Pcbnew or other programs that use class BOARD and its contents.
+ * The corresponding class in Eeschema is SCH_ITEM.
+ */
+class BOARD_ITEM : public EDA_ITEM
+{
+ // These are made private here so they may not be used.
+ // Instead everything derived from BOARD_ITEM is handled via DLIST<>'s
+ // use of DHEAD's member functions.
+ void SetNext( EDA_ITEM* aNext ) { Pnext = aNext; }
+ void SetBack( EDA_ITEM* aBack ) { Pback = aBack; }
+
+protected:
+ LAYER_ID m_Layer;
+
+ static int getTrailingInt( wxString aStr );
+ static int getNextNumberInSequence( std::set<int> aSeq, bool aFillSequenceGaps );
+
+public:
+
+ BOARD_ITEM( BOARD_ITEM* aParent, KICAD_T idtype ) :
+ EDA_ITEM( aParent, idtype ), m_Layer( F_Cu )
+ {
+ }
+
+ // Do not create a copy constructor. The one generated by the compiler is adequate.
+
+ virtual const wxPoint& GetPosition() const = 0;
+
+ /**
+ * Function GetCenter()
+ *
+ * This defaults to the same point as returned by GetPosition(), unless
+ * overridden
+ *
+ * @return centre point of the item
+ */
+ virtual const wxPoint GetCenter() const { return GetPosition(); }
+
+ virtual void SetPosition( const wxPoint& aPos ) = 0;
+
+ /**
+ * Function IsConnected()
+ * Returns information if the object is derived from BOARD_CONNECTED_ITEM.
+ * @return True if the object is of BOARD_CONNECTED_ITEM type, false otherwise.
+ */
+ virtual bool IsConnected() const
+ {
+ return false;
+ }
+
+ /**
+ * A value of wxPoint(0,0) which can be passed to the Draw() functions.
+ */
+ static wxPoint ZeroOffset;
+
+ BOARD_ITEM* Next() const { return static_cast<BOARD_ITEM*>( Pnext ); }
+ BOARD_ITEM* Back() const { return static_cast<BOARD_ITEM*>( Pback ); }
+ BOARD_ITEM* GetParent() const { return (BOARD_ITEM*) m_Parent; }
+
+ /**
+ * Function GetLayer
+ * returns the primary layer this item is on.
+ */
+ LAYER_ID GetLayer() const { return m_Layer; }
+
+ /**
+ * Function GetLayerSet
+ * returns a "layer mask", which is a bitmap of all layers on which the
+ * TRACK segment or VIA physically resides.
+ * @return int - a layer mask, see layers_id_colors_visibility.h.
+ */
+ virtual LSET GetLayerSet() const { return LSET( m_Layer ); }
+
+ /**
+ * Function SetLayer
+ * sets the layer this item is on.
+ * @param aLayer The layer number.
+ * is virtual because some items (in fact: class DIMENSION)
+ * have a slightly different initialization
+ */
+ virtual void SetLayer( LAYER_ID aLayer )
+ {
+ // trap any invalid layers, then go find the caller and fix it.
+ // wxASSERT( unsigned( aLayer ) < unsigned( NB_PCB_LAYERS ) );
+ m_Layer = aLayer;
+ }
+
+ /**
+ * Function Draw
+ * BOARD_ITEMs have their own color information.
+ */
+ virtual void Draw( EDA_DRAW_PANEL* panel, wxDC* DC,
+ GR_DRAWMODE aDrawMode, const wxPoint& offset = ZeroOffset ) = 0;
+
+ /**
+ * Swap data between aItem and aImage.
+ * aItem and aImage should have the same type
+ * Used in undo redo command to swap values between an item and its copy
+ * Only values like layer, size .. which are modified by edition are swapped,
+ * not the pointers like
+ * Pnext and Pback because aItem is not changed in the linked list
+ * @param aImage = the item image which contains data to swap
+ */
+ void SwapData( BOARD_ITEM* aImage );
+
+ /**
+ * Function IsOnLayer
+ * tests to see if this object is on the given layer. Is virtual so
+ * objects like D_PAD, which reside on multiple layers can do their own
+ * form of testing.
+ * @param aLayer The layer to test for.
+ * @return bool - true if on given layer, else false.
+ */
+ virtual bool IsOnLayer( LAYER_ID aLayer ) const
+ {
+ return m_Layer == aLayer;
+ }
+
+ /**
+ * Function IsTrack
+ * tests to see if this object is a track or via (or microvia).
+ * form of testing.
+ * @return bool - true if a track or via, else false.
+ */
+ bool IsTrack() const
+ {
+ return ( Type() == PCB_TRACE_T ) || ( Type() == PCB_VIA_T );
+ }
+
+ /**
+ * Function IsLocked
+ * @return bool - true if the object is locked, else false
+ */
+ virtual bool IsLocked() const
+ {
+ return false; // only MODULEs can be locked at this time.
+ }
+
+ /**
+ * Function UnLink
+ * detaches this object from its owner. This base class implementation
+ * should work for all derived classes which are held in a DLIST<>.
+ */
+ virtual void UnLink();
+
+ /**
+ * Function DeleteStructure
+ * deletes this object after UnLink()ing it from its owner if it has one.
+ */
+ void DeleteStructure()
+ {
+ if( GetList() != NULL )
+ UnLink();
+
+ delete this;
+ }
+
+ /**
+ * Function ShowShape
+ * converts the enum STROKE_T integer value to a wxString.
+ */
+ static wxString ShowShape( STROKE_T aShape );
+
+ // Some geometric transforms, that must be rewritten for derived classes
+ /**
+ * Function Move
+ * move this object.
+ * @param aMoveVector - the move vector for this object.
+ */
+ virtual void Move( const wxPoint& aMoveVector )
+ {
+ wxMessageBox( wxT( "virtual BOARD_ITEM::Move used, should not occur" ), GetClass() );
+ }
+
+ /**
+ * Function Rotate
+ * Rotate this object.
+ * @param aRotCentre - the rotation point.
+ * @param aAngle - the rotation angle in 0.1 degree.
+ */
+ virtual void Rotate( const wxPoint& aRotCentre, double aAngle )
+ {
+ wxMessageBox( wxT( "virtual BOARD_ITEM::Rotate used, should not occur" ), GetClass() );
+ }
+
+ /**
+ * Function Flip
+ * Flip this object, i.e. change the board side for this object
+ * @param aCentre - the rotation point.
+ */
+ virtual void Flip( const wxPoint& aCentre )
+ {
+ wxMessageBox( wxT( "virtual BOARD_ITEM::Flip used, should not occur" ), GetClass() );
+ }
+
+ /**
+ * Function GetBoard
+ * returns the BOARD in which this BOARD_ITEM resides, or NULL if none.
+ */
+ virtual BOARD* GetBoard() const;
+
+ /**
+ * Function GetLayerName
+ * returns the name of the PCB layer on which the item resides.
+ *
+ * @return wxString containing the layer name associated with this item.
+ */
+ wxString GetLayerName() const;
+
+ virtual bool HitTest( const wxPoint& aPosition ) const
+ {
+ return EDA_ITEM::HitTest( aPosition );
+ }
+
+ /**
+ * Function HitTest
+ * tests if the \a aRect intersects or contains this object (depending on \a aContained).
+ *
+ * @param aRect A reference to an EDA_RECT object containg the area to test.
+ * @param aContained Test if \a aRect contains this object completly.
+ * @param aAccuracy Increase the item bounding box by this amount.
+ * @return bool - True if \a aRect contains this object completly or if \a aRect intersects
+ * the object and \a aContained is False, otherwise false.
+ */
+ virtual bool HitTest( const EDA_RECT& aRect, bool aContained = true, int aAccuracy = 0) const
+ {
+ return false; // derived classes should override this function
+ }
+
+
+ /**
+ * Function FormatInternalUnits
+ * converts \a aValue from board internal units to a string appropriate for writing to file.
+ *
+ * @note Internal units for board items can be either deci-mils or nanometers depending
+ * on how KiCad is build.
+ * @param aValue A coordinate value to convert.
+ * @return A std::string object containing the converted value.
+ */
+ static std::string FormatInternalUnits( int aValue );
+
+ /**
+ * Function FormatAngle
+ * converts \a aAngle from board units to a string appropriate for writing to file.
+ *
+ * @note Internal angles for board items can be either degrees or tenths of degree
+ * on how KiCad is built.
+ * @param aAngle A angle value to convert.
+ * @return A std::string object containing the converted angle.
+ */
+ static std::string FormatAngle( double aAngle );
+
+ static std::string FormatInternalUnits( const wxPoint& aPoint );
+
+ static std::string FormatInternalUnits( const wxSize& aSize );
+
+ /// @copydoc VIEW_ITEM::ViewGetLayers()
+ virtual void ViewGetLayers( int aLayers[], int& aCount ) const;
+
+ /*!
+ * Function IncrementItemReference
+ * Implement if the concept of "incrementing" makes sense for an
+ * item (e.g. modules and pads)
+ * @return if item reference was incremented
+ */
+ virtual bool IncrementItemReference() { return false; }
+};
+
+#endif /* BOARD_ITEM_STRUCT_H */