144 "Unhandled type: %d "
145 "(if you created a new type you need to handle it in this switch statement)",
175 auto item = std::unique_ptr<BOARD_ITEM>( Instantiate( type ) );
177 if( item ==
nullptr )
182 IterateOverPositionsAndReferences<BOARD_ITEM>(
186 FP_SHAPE* originalFpShape = dynamic_cast<FP_SHAPE*>( aOriginalItem );
188 if( originalFpShape != nullptr )
189 originalFpShape->SetDrawCoord();
193 PCB_DIMENSION_BASE* originalDimension =
194 dynamic_cast<PCB_DIMENSION_BASE*>( aOriginalItem );
196 if( originalDimension != nullptr )
197 originalDimension->Update();
199 auto item = std::unique_ptr<BOARD_ITEM>( aOriginalItem->Duplicate() );
200 VECTOR2I originalPos = item->GetPosition();
207 FP_SHAPE* fpShape = dynamic_cast<FP_SHAPE*>( item.get() );
209 if( fpShape != nullptr )
210 fpShape->SetDrawCoord();
212 BOOST_CHECK_EQUAL( item->GetPosition(), originalPos + aRef );
216 if( fpShape != nullptr )
217 fpShape->SetDrawCoord();
219 CompareItems( item.get(), aOriginalItem );
232 auto item = std::unique_ptr<BOARD_ITEM>( Instantiate( type ) );
234 if( item ==
nullptr )
241 IterateOverPositionsAndReferences<BOARD_ITEM>(
245 FP_SHAPE* originalFpShape = dynamic_cast<FP_SHAPE*>( aOriginalItem );
247 if( originalFpShape != nullptr )
248 originalFpShape->SetDrawCoord();
252 PCB_DIMENSION_BASE* originalDimension =
253 dynamic_cast<PCB_DIMENSION_BASE*>( aOriginalItem );
255 if( originalDimension != nullptr )
256 originalDimension->Update();
258 auto item = std::unique_ptr<BOARD_ITEM>( aOriginalItem->Duplicate() );
262 item->Rotate( aRef, EDA_ANGLE( 90.0, DEGREES_T ) );
263 item->Rotate( aRef, EDA_ANGLE( 90.0, DEGREES_T ) );
264 item->Rotate( aRef, EDA_ANGLE( 90.0, DEGREES_T ) );
265 item->Rotate( aRef, EDA_ANGLE( 90.0, DEGREES_T ) );
267 FP_SHAPE* fpShape = dynamic_cast<FP_SHAPE*>( aOriginalItem );
269 if( fpShape != nullptr )
270 fpShape->SetDrawCoord();
272 CompareItems( item.get(), aOriginalItem );
285 auto item = std::unique_ptr<BOARD_ITEM>( Instantiate( type ) );
287 if( item ==
nullptr )
292 IterateOverPositionsAndReferences<BOARD_ITEM>(
296 FP_SHAPE* originalFpShape = dynamic_cast<FP_SHAPE*>( aOriginalItem );
298 if( originalFpShape != nullptr )
299 originalFpShape->SetDrawCoord();
303 PCB_DIMENSION_BASE* originalDimension =
304 dynamic_cast<PCB_DIMENSION_BASE*>( aOriginalItem );
306 if( originalDimension != nullptr )
307 originalDimension->Update();
309 auto item = std::unique_ptr<BOARD_ITEM>( aOriginalItem->Duplicate() );
313 item->Flip( aRef, true );
314 item->Flip( aRef, true );
316 FP_SHAPE* fpShape = dynamic_cast<FP_SHAPE*>( aOriginalItem );
318 if( fpShape != nullptr )
319 fpShape->SetDrawCoord();
321 CompareItems( item.get(), aOriginalItem );
334 auto item = std::unique_ptr<BOARD_ITEM>( Instantiate( type ) );
336 if( item ==
nullptr )
341 IterateOverPositionsAndReferences<BOARD_ITEM>(
345 FP_SHAPE* originalFpShape = dynamic_cast<FP_SHAPE*>( aOriginalItem );
347 if( originalFpShape != nullptr )
348 originalFpShape->SetDrawCoord();
352 PCB_DIMENSION_BASE* originalDimension =
353 dynamic_cast<PCB_DIMENSION_BASE*>( aOriginalItem );
355 if( originalDimension != nullptr )
356 originalDimension->Update();
358 auto item = std::unique_ptr<BOARD_ITEM>( aOriginalItem->Duplicate() );
362 item->Flip( aRef, false );
363 item->Flip( aRef, false );
365 FP_SHAPE* fpShape = dynamic_cast<FP_SHAPE*>( aOriginalItem );
367 if( fpShape != nullptr )
368 fpShape->SetDrawCoord();
370 CompareItems( item.get(), aOriginalItem );
377BOOST_AUTO_TEST_SUITE_END()
constexpr EDA_IU_SCALE pcbIUScale
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
void SetParentGroup(PCB_GROUP *aGroup)
Information pertinent to a Pcbnew printed circuit board.
coord_type GetTop() const
coord_type GetRight() const
coord_type GetLeft() const
coord_type GetBottom() const
virtual VECTOR2I GetPosition() const
virtual const BOX2I GetBoundingBox() const
Return the orthogonal bounding box of this object for display purposes.
A specialization of ZONE for use in footprints.
Object to handle a bitmap image that can be inserted in a PCB.
For better understanding of the points that make a dimension:
Mark the center of a circle or arc with a cross shape.
A leader is a dimension-like object pointing to a specific point.
An orthogonal dimension is like an aligned dimension, but the extension lines are locked to the X or ...
A radial dimension indicates either the radius or diameter of an arc or circle.
A set of BOARD_ITEMs (i.e., without duplicates).
BOARD_ITEM * Instantiate(KICAD_T aType)
static void CompareItems(BOARD_ITEM *aItem, BOARD_ITEM *aOriginalItem)
TEST_BOARD_ITEM_FIXTURE()
~TEST_BOARD_ITEM_FIXTURE()
std::shared_ptr< DRC_ITEM > m_drcItem
Handle a list of polygons defining a copper zone.
bool AppendCorner(VECTOR2I aPosition, int aHoleIdx, bool aAllowDuplication=false)
Add a new corner to the zone outline (to the main outline or a hole)
@ DRCE_MALFORMED_COURTYARD
void Format(OUTPUTFORMATTER *out, int aNestLevel, int aCtl, const CPTREE &aTree)
Output a PTREE into s-expression format via an OUTPUTFORMATTER derivative.
constexpr int mmToIU(double mm) const
BOOST_AUTO_TEST_CASE(Move)
KICAD_T
The set of class identification values stored in EDA_ITEM::m_structType.
@ PCB_FP_DIM_ALIGNED_T
class PCB_DIM_ALIGNED, a linear dimension (graphic item)
@ PCB_SHAPE_T
class PCB_SHAPE, a segment not on copper layers
@ PCB_DIM_ORTHOGONAL_T
class PCB_DIM_ORTHOGONAL, a linear dimension constrained to x/y
@ PCB_FP_SHAPE_T
class FP_SHAPE, a footprint edge
@ PCB_DIM_LEADER_T
class PCB_DIM_LEADER, a leader dimension (graphic item)
@ PCB_VIA_T
class PCB_VIA, a via (like a track segment on a copper layer)
@ PCB_FP_TEXTBOX_T
class FP_TEXTBOX, wrapped text in a footprint
@ PCB_DIM_CENTER_T
class PCB_DIM_CENTER, a center point marking (graphic item)
@ PCB_GROUP_T
class PCB_GROUP, a set of BOARD_ITEMs
@ PCB_TEXTBOX_T
class PCB_TEXTBOX, wrapped text on a layer
@ PCB_ZONE_T
class ZONE, a copper pour area
@ PCB_TEXT_T
class PCB_TEXT, text on a layer
@ PCB_FP_DIM_CENTER_T
class PCB_DIM_CENTER, a center point marking (graphic item)
@ PCB_ITEM_LIST_T
class BOARD_ITEM_LIST, a list of board items
@ PCB_MARKER_T
class PCB_MARKER, a marker used to show something
@ PCB_TARGET_T
class PCB_TARGET, a target (graphic item)
@ PCB_FP_DIM_ORTHOGONAL_T
class PCB_DIM_ORTHOGONAL, a linear dimension constrained to x/y
@ PCB_FP_DIM_LEADER_T
class PCB_DIM_LEADER, a leader dimension (graphic item)
@ PCB_FOOTPRINT_T
class FOOTPRINT, a footprint
@ PCB_DIM_ALIGNED_T
class PCB_DIM_ALIGNED, a linear dimension (graphic item)
@ PCB_FP_ZONE_T
class ZONE, managed by a footprint
@ PCB_BITMAP_T
class PCB_BITMAP, bitmap on a layer
@ PCB_FP_DIM_RADIAL_T
class PCB_DIM_RADIAL, a radius or diameter dimension
@ PCB_PAD_T
class PAD, a pad in a footprint
@ PCB_FP_TEXT_T
class FP_TEXT, text in a footprint
@ PCB_ARC_T
class PCB_ARC, an arc track segment on a copper layer
@ PCB_NETINFO_T
class NETINFO_ITEM, a description of a net
@ PCB_TRACE_T
class PCB_TRACK, a track segment (segment on a copper layer)
@ PCB_DIM_RADIAL_T
class PCB_DIM_RADIAL, a radius or diameter dimension
constexpr bool IsPcbnewType(const KICAD_T aType)
constexpr bool IsInstantiableType(const KICAD_T aType)
#define BOOST_TEST_CONTEXT(A)