KiCad PCB EDA Suite
Loading...
Searching...
No Matches
pcb_marker.cpp
Go to the documentation of this file.
1/*
2 * This program source code file is part of KiCad, a free EDA CAD application.
3 *
4 * Copyright (C) 2018 Jean-Pierre Charras, jp.charras at wanadoo.fr
5 * Copyright (C) 2012 SoftPLC Corporation, Dick Hollenbeck <[email protected]>
6 * Copyright The KiCad Developers, see AUTHORS.txt for contributors.
7 *
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public License
10 * as published by the Free Software Foundation; either version 2
11 * of the License, or (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program. If not, see <https://www.gnu.org/licenses/>.
20 */
21
23#include <google/protobuf/any.pb.h>
24#include <api/api_enums.h>
25#include <api/api_utils.h>
26#include <api/board/board_rules.pb.h>
27#include <bitmaps.h>
28#include <base_units.h>
29#include <eda_draw_frame.h>
30#include <board.h>
32#include <pcb_marker.h>
33#include <layer_ids.h>
36#include <geometry/shape_null.h>
37#include <widgets/ui_common.h>
39#include <pgm_base.h>
40#include <drc/drc_item.h>
41#include <drc/drc_rule.h>
42#include <trigo.h>
43#include <properties/property.h>
45
46
48#define SCALING_FACTOR pcbIUScale.mmToIU( 0.1625 )
49
50
51
52PCB_MARKER::PCB_MARKER( std::shared_ptr<DRC_ITEM> aItem, const VECTOR2I& aPosition, int aLayer ) :
53 BOARD_ITEM( nullptr, PCB_MARKER_T, F_Cu ), // parent set during BOARD::Add()
54 MARKER_BASE( SCALING_FACTOR, std::move( aItem ) ),
55 m_pathLength( 0 )
56{
57 if( m_rcItem )
58 {
59 m_rcItem->SetParent( this );
60
61 if( aLayer == LAYER_DRAWINGSHEET )
62 {
64 }
65 else
66 {
67 switch( m_rcItem->GetErrorCode() )
68 {
71 break;
72
81 break;
82
83 default:
85 break;
86 }
87
88 SetLayer( ToLAYER_ID( aLayer ) );
89 }
90 }
91
92 m_Pos = aPosition;
93}
94
95
97{
98 if( m_rcItem )
99 m_rcItem->SetParent( nullptr );
100}
101
102
103static void ToProto( kiapi::board::DrcMarker& aMsg, const PCB_MARKER& aMarker )
104{
105 std::shared_ptr<DRC_ITEM> drc = std::static_pointer_cast<DRC_ITEM>( aMarker.GetRCItem() );
106
107 aMsg.set_error_type(
109
110 kiapi::common::PackVector2( *aMsg.mutable_position(), aMarker.GetPos() );
111
112 for( const KIID& id : drc->GetIDs() )
113 {
114 if( id != niluuid )
115 aMsg.add_items()->set_value( id.AsStdString() );
116 }
117
118 // Only store the layer for error types where it affects identity.
119 bool storeLayer = false;
120
121 switch( drc->GetErrorCode() )
122 {
128 storeLayer = true;
129 break;
130
133 storeLayer = true;
134
135 break;
136
137 default:
138 break;
139 }
140
141 if( storeLayer )
142 {
143 PCB_LAYER_ID layer = aMarker.GetLayer();
144
145 if( layer == UNDEFINED_LAYER )
146 layer = F_Cu;
147
149 }
150}
151
152
153PCB_MARKER* PCB_MARKER::FromProto( const kiapi::board::DrcMarker& aMsg )
154{
156
157 std::shared_ptr<DRC_ITEM> drcItem = DRC_ITEM::Create( code );
158
159 if( !drcItem )
160 return nullptr;
161
162 VECTOR2I pos = kiapi::common::UnpackVector2( aMsg.position() );
164
165 PCB_MARKER* marker = new PCB_MARKER( drcItem, pos, layer );
166
167 KIID mainId = aMsg.items_size() > 0 ? KIID( aMsg.items( 0 ).value() ) : niluuid;
168 KIID auxId = aMsg.items_size() > 1 ? KIID( aMsg.items( 1 ).value() ) : niluuid;
169 KIID aux2Id = aMsg.items_size() > 2 ? KIID( aMsg.items( 2 ).value() ) : niluuid;
170 KIID aux3Id = aMsg.items_size() > 3 ? KIID( aMsg.items( 3 ).value() ) : niluuid;
171
172 marker->GetRCItem()->SetItems( mainId, auxId, aux2Id, aux3Id );
173
174 return marker;
175}
176
177
178void PCB_MARKER::Serialize( google::protobuf::Any& aContainer ) const
179{
180 kiapi::board::DrcMarker msg;
181 ToProto( msg, *this );
182 aContainer.PackFrom( msg );
183}
184
185
186bool PCB_MARKER::Deserialize( const google::protobuf::Any& aContainer )
187{
188 kiapi::board::DrcMarker msg;
189
190 if( !aContainer.UnpackTo( &msg ) )
191 return false;
192
193 std::unique_ptr<PCB_MARKER> tmp( PCB_MARKER::FromProto( msg ) );
194
195 if( !tmp )
196 return false;
197
198 swapData( tmp.get() );
199 return true;
200}
201
202
204{
205 auto getMarkerLayer =
206 []( const wxString& layerName ) -> int
207 {
208 for( int layer = 0; layer < PCB_LAYER_ID_COUNT; ++layer )
209 {
210 if( LayerName( ToLAYER_ID( layer ) ) == layerName )
211 return layer;
212 }
213
214 return F_Cu;
215 };
216
217 wxArrayString props = wxSplit( aData, '|' );
218
219 // Every legacy marker has a settings key, position and at least two item fields.
220 // Reject truncated settings rather than indexing past wxArrayString below.
221 if( props.size() < 5 )
222 return nullptr;
223
224 int markerLayer = F_Cu;
225 VECTOR2I markerPos( (int) strtol( props[1].c_str(), nullptr, 10 ),
226 (int) strtol( props[2].c_str(), nullptr, 10 ) );
227
228 std::shared_ptr<DRC_ITEM> drcItem = DRC_ITEM::Create( props[0] );
229
230 if( !drcItem )
231 return nullptr;
232
233 if( drcItem->GetErrorCode() == DRCE_COPPER_SLIVER
234 || drcItem->GetErrorCode() == DRCE_GENERIC_WARNING
235 || drcItem->GetErrorCode() == DRCE_GENERIC_ERROR )
236 {
237 drcItem->SetItems( KIID( props[3] ) );
238 markerLayer = getMarkerLayer( props[4] );
239 }
240 else if( drcItem->GetErrorCode() == DRCE_UNCONNECTED_ITEMS )
241 {
242 // Pre-9.0.4 versions didn't have KIIDs as last two properties to allow sorting stability
243 if( props.size() == 5 )
244 drcItem->SetItems( KIID( props[3] ), KIID( props[4] ) );
245 else if( props.size() >= 7 )
246 drcItem->SetItems( KIID( props[5] ), KIID( props[6] ) );
247 else
248 return nullptr;
249 }
250 else if( drcItem->GetErrorCode() == DRCE_STARVED_THERMAL )
251 {
252 drcItem->SetItems( KIID( props[3] ), KIID( props[4] ) );
253
254 // Pre-7.0 versions didn't differentiate between layers
255 if( props.size() == 6 )
256 markerLayer = getMarkerLayer( props[5] );
257 }
258 else if( drcItem->GetErrorCode() == DRCE_UNRESOLVED_VARIABLE
259 && props[3].IsEmpty()
260 && props[4].IsEmpty() )
261 {
262 // Note: caller must load our item pointer with the drawing sheet proxy item
263 markerLayer = LAYER_DRAWINGSHEET;
264 }
265 else
266 {
267 drcItem->SetItems( KIID( props[3] ), KIID( props[4] ) );
268 }
269
270 return new PCB_MARKER( drcItem, markerPos, markerLayer );
271}
272
273
275{
276 PCB_MARKER* res = new PCB_MARKER( *this );
277
278 // An RC_ITEM is shared between its marker and various tree views. It cannot be shared between
279 // two markers.
280 if( m_rcItem )
281 {
282 res->m_rcItem = std::make_shared<DRC_ITEM>( *std::static_pointer_cast<DRC_ITEM>( m_rcItem ) );
283 res->m_rcItem->SetParent( res );
284 }
285
286 return res;
287}
288
289
291{
292 wxASSERT( aImage->Type() == PCB_MARKER_T );
293 PCB_MARKER* image = static_cast<PCB_MARKER*>( aImage );
294
295 std::swap( *this, *image );
296
297 if( m_rcItem )
298 m_rcItem->SetParent( this );
299
300 if( image->m_rcItem )
301 image->m_rcItem->SetParent( image );
302}
303
304
305void PCB_MARKER::GetMsgPanelInfo( EDA_DRAW_FRAME* aFrame, std::vector<MSG_PANEL_ITEM>& aList )
306{
307 aList.emplace_back( _( "Type" ), _( "Marker" ) );
308 aList.emplace_back( _( "Violation" ), HYPERLINK_DV_RENDERER::StripMarkup( m_rcItem->GetErrorMessage( true ) ) );
309
310 switch( GetSeverity() )
311 {
312 case RPT_SEVERITY_IGNORE: aList.emplace_back( _( "Severity" ), _( "Ignore" ) ); break;
313 case RPT_SEVERITY_WARNING: aList.emplace_back( _( "Severity" ), _( "Warning" ) ); break;
314 case RPT_SEVERITY_ERROR: aList.emplace_back( _( "Severity" ), _( "Error" ) ); break;
315 default: break;
316 }
317
319 {
320 aList.emplace_back( _( "Drawing Sheet" ), wxEmptyString );
321 }
322 else
323 {
324 wxString mainText;
325 wxString auxText;
326 EDA_ITEM* mainItem = aFrame->ResolveItem( m_rcItem->GetMainItemID() );
327 EDA_ITEM* auxItem = aFrame->ResolveItem( m_rcItem->GetAuxItemID() );
328
329 if( mainItem )
330 mainText = mainItem->GetItemDescription( aFrame, true );
331
332 if( auxItem )
333 auxText = auxItem->GetItemDescription( aFrame, true );
334
335 aList.emplace_back( mainText, auxText );
336 }
337
338 if( IsExcluded() )
339 aList.emplace_back( _( "Excluded" ), m_comment );
340}
341
342
343void PCB_MARKER::Rotate( const VECTOR2I& aRotCentre, const EDA_ANGLE& aAngle )
344{
345 // Marker geometry isn't user-editable
346}
347
348
349void PCB_MARKER::Flip( const VECTOR2I& aCentre, FLIP_DIRECTION aFlipDirection )
350{
351 // Marker geometry isn't user-editable
352}
353
354
356{
357 // Markers do not participate in the board geometry space, and therefore have no effective shape.
358 return std::make_shared<SHAPE_NULL>();
359}
360
361
362double PCB_MARKER::GetCoverageArea( int aTextMargin ) const
363{
364 SHAPE_LINE_CHAIN markerShape;
365 ShapeToPolygon( markerShape );
366 return markerShape.Area();
367}
368
369
371 int aError, ERROR_LOC aErrorLoc, bool ignoreLineWidth ) const
372{
373 // Markers do not participate in the board geometry space, and therefore have no shape.
374};
375
376
377wxString PCB_MARKER::GetItemDescription( UNITS_PROVIDER* aUnitsProvider, bool aFull ) const
378{
379 return wxString::Format( _( "Marker (%s)" ), aFull ? m_rcItem->GetErrorMessage( true )
380 : m_rcItem->GetErrorText( true ) );
381}
382
383
385{
386 return BITMAPS::drc;
387}
388
389
391{
392 if( IsExcluded() )
394
395 DRC_ITEM* item = static_cast<DRC_ITEM*>( m_rcItem.get() );
396
397 if( item->GetErrorCode() == DRCE_GENERIC_WARNING )
399 else if( item->GetErrorCode() == DRCE_GENERIC_ERROR )
400 return RPT_SEVERITY_ERROR;
401
402 DRC_RULE* rule = item->GetViolatingRule();
403
404 if( rule && rule->m_Severity != RPT_SEVERITY_UNDEFINED )
405 return rule->m_Severity;
406
407 return GetBoard()->GetDesignSettings().GetSeverity( item->GetErrorCode() );
408}
409
410
411std::vector<int> PCB_MARKER::ViewGetLayers() const
412{
414 return {};
415
416 std::vector<int> layers{ 0, LAYER_MARKER_SHADOWS, LAYER_DRC_HIGHLIGHTED };
417
418 switch( GetSeverity() )
419 {
420 default:
421 case SEVERITY::RPT_SEVERITY_ERROR: layers[0] = LAYER_DRC_ERROR; break;
422 case SEVERITY::RPT_SEVERITY_WARNING: layers[0] = LAYER_DRC_WARNING; break;
424 }
425
426 return layers;
427}
428
429
440
441
443{
444 return ::GetColorSettings( DEFAULT_THEME )->GetColor( GetColorLayer() );
445}
446
447
448void PCB_MARKER::SetZoom( double aZoomFactor ) const
449{
450 SetMarkerScale( SCALING_FACTOR * aZoomFactor );
451}
452
453
454std::vector<PCB_SHAPE> PCB_MARKER::GetErrorLegendShapes() const
455{
456 STROKE_PARAMS hairline( 1.0 ); // Segments of width 1.0 will get drawn as lines by PCB_PAINTER
457 std::vector<PCB_SHAPE> pathShapes;
458
459 if( m_pathStart == m_pathEnd )
460 {
461 // Add a collision 'X'
462 const int len = KiROUND( 2.5 * MarkerScale() );
463
464 PCB_SHAPE s( nullptr, SHAPE_T::SEGMENT );
465 s.SetStroke( hairline );
466
467 s.SetStart( m_pathStart + VECTOR2I( -len, -len ) );
468 s.SetEnd( m_pathStart + VECTOR2I( len, len ) );
469 pathShapes.push_back( s );
470
471 s.SetStart( m_pathStart + VECTOR2I( -len, len ) );
472 s.SetEnd( m_pathStart + VECTOR2I( len, -len ) );
473 pathShapes.push_back( s );
474 }
475 else
476 {
477 // Add the path
478 for( PCB_SHAPE shape : m_pathShapes )
479 {
480 shape.SetStroke( hairline );
481 pathShapes.push_back( std::move( shape ) );
482 }
483
484 // Draw perpendicular begin/end stops
485 if( pathShapes.size() > 0 )
486 {
487 VECTOR2I V1 = pathShapes[0].GetStart() - pathShapes[0].GetEnd();
488 VECTOR2I V2 = pathShapes.back().GetStart() - pathShapes.back().GetEnd();
489 V1 = V1.Perpendicular().Resize( 2.5 * MarkerScale() );
490 V2 = V2.Perpendicular().Resize( 2.5 * MarkerScale() );
491
492 PCB_SHAPE s( nullptr, SHAPE_T::SEGMENT );
493 s.SetStroke( hairline );
494
495 s.SetStart( m_pathStart + V1 );
496 s.SetEnd( m_pathStart - V1 );
497 pathShapes.push_back( s );
498
499 s.SetStart( m_pathEnd + V2 );
500 s.SetEnd( m_pathEnd - V2 );
501 pathShapes.push_back( s );
502 }
503 }
504
505 // Add shaded areas
506 for( PCB_SHAPE shape : m_pathShapes )
507 {
508 shape.SetWidth( 10 * MarkerScale() );
509 pathShapes.push_back( std::move( shape ) );
510 }
511
512 return pathShapes;
513}
514
515
517{
519
520 for( const PCB_SHAPE& s : m_pathShapes )
521 box.Merge( s.GetBoundingBox() );
522
523 return box;
524}
525
526
528{
529 return GetBoundingBox();
530}
531
532
533static struct PCB_MARKER_DESC
534{
536 {
543
544 // Markers cannot be locked and have no user-accessible layer control
545 propMgr.Mask( TYPE_HASH( PCB_MARKER ), TYPE_HASH( BOARD_ITEM ), _HKI( "Layer" ) );
546 propMgr.Mask( TYPE_HASH( PCB_MARKER ), TYPE_HASH( BOARD_ITEM ), _HKI( "Locked" ) );
547 }
KICOMMON_API types::KiCadObjectType ToProtoEnum(KICAD_T aValue)
KICOMMON_API KICAD_T FromProtoEnum(types::KiCadObjectType aValue)
Definition api_enums.cpp:55
ERROR_LOC
When approximating an arc or circle, should the error be placed on the outside or inside of the curve...
BITMAPS
A list of all bitmap identifiers.
BOX2< VECTOR2I > BOX2I
Definition box2.h:914
constexpr BOX2I KiROUND(const BOX2D &aBoxD)
Definition box2.h:982
SEVERITY GetSeverity(int aDRCErrorCode) const
Return the severity of a given DRC error code.
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
Definition board_item.h:85
BOARD_ITEM(BOARD_ITEM *aParent, KICAD_T idtype, PCB_LAYER_ID aLayer=F_Cu)
Definition board_item.h:87
virtual PCB_LAYER_ID GetLayer() const
Return the primary layer this item is on.
virtual void SetLayer(PCB_LAYER_ID aLayer)
Set the layer this item is on.
Definition board_item.h:383
virtual const BOARD * GetBoard() const
Return the BOARD in which this BOARD_ITEM resides, or NULL if none.
BOARD_DESIGN_SETTINGS & GetDesignSettings()
Definition board.cpp:1290
constexpr BOX2< Vec > & Merge(const BOX2< Vec > &aRect)
Modify the position and size of the rectangle in order to contain aRect.
Definition box2.h:594
DRC_RULE * GetViolatingRule() const
Definition drc_item.h:191
static std::shared_ptr< DRC_ITEM > Create(int aErrorCode)
Constructs a DRC_ITEM for the given error code.
Definition drc_item.cpp:492
SEVERITY m_Severity
Definition drc_rule.h:86
The base class for create windows for drawing purpose.
virtual EDA_ITEM * ResolveItem(const KIID &aId, bool aAllowNullptrReturn=false) const
Fetch an item by KIID.
virtual wxString GetItemDescription(UNITS_PROVIDER *aUnitsProvider, bool aFull) const
Return a user-visible description string of this item.
Definition eda_item.cpp:304
KICAD_T Type() const
Returns the type of object.
Definition eda_item.h:110
EDA_ITEM(EDA_ITEM *parent, KICAD_T idType, bool isSCH_ITEM=false, bool isBOARD_ITEM=false)
Definition eda_item.cpp:84
A color representation with 4 components: red, green, blue, alpha.
Definition color4d.h:101
Definition kiid.h:46
Marker are mainly used to show a DRC or ERC error or warning.
Definition marker_base.h:45
void SetMarkerScale(int aScale) const
Definition marker_base.h:66
bool IsExcluded() const
Definition marker_base.h:90
std::shared_ptr< RC_ITEM > GetRCItem() const
wxString m_comment
User supplied comment.
int MarkerScale() const
The scaling factor to convert polygonal shape coordinates to internal units.
Definition marker_base.h:65
const VECTOR2I & GetPos() const
Definition marker_base.h:80
VECTOR2I m_Pos
Position of the marker.
@ MARKER_DRAWING_SHEET
Definition marker_base.h:52
void SetMarkerType(enum MARKER_T aMarkerType)
Accessors to set/get marker type (DRC, ERC, or other)
Definition marker_base.h:87
std::shared_ptr< RC_ITEM > m_rcItem
enum MARKER_T GetMarkerType() const
Definition marker_base.h:88
void ShapeToPolygon(SHAPE_LINE_CHAIN &aPolygon, int aScale=-1) const
Return the shape polygon in internal units in a SHAPE_LINE_CHAIN the coordinates are relatives to the...
MARKER_BASE(int aScalingFactor, std::shared_ptr< RC_ITEM > aItem, MARKER_T aType=MARKER_UNSPEC)
BOX2I GetBoundingBoxMarker() const
Return the orthogonal, bounding box of this object for display purposes.
void SetZoom(double aZoomFactor) const
void GetMsgPanelInfo(EDA_DRAW_FRAME *aFrame, std::vector< MSG_PANEL_ITEM > &aList) override
Populate aList of MSG_PANEL_ITEM objects with it's internal state for display purposes.
VECTOR2I m_pathEnd
Definition pcb_marker.h:175
void TransformShapeToPolygon(SHAPE_POLY_SET &aBuffer, PCB_LAYER_ID aLayer, int aClearance, int aError, ERROR_LOC aErrorLoc, bool ignoreLineWidth) const override
Convert the item shape to a closed polygon.
PCB_MARKER(std::shared_ptr< DRC_ITEM > aItem, const VECTOR2I &aPos, int aLayer=F_Cu)
VECTOR2I m_pathStart
Definition pcb_marker.h:174
std::vector< PCB_SHAPE > m_pathShapes
Definition pcb_marker.h:173
std::vector< PCB_SHAPE > GetErrorLegendShapes() const
BITMAPS GetMenuImage() const override
Return a pointer to an image to be used in menus.
const BOX2I ViewBBox() const override
Return the bounding box of the item covering all its layers.
std::vector< int > ViewGetLayers() const override
Return the all the layers within the VIEW the object is painted on.
const BOX2I GetBoundingBox() const override
Return the orthogonal bounding box of this object for display purposes.
SEVERITY GetSeverity() const override
void Serialize(google::protobuf::Any &aContainer) const override
Serializes this object to the given Any message.
void Flip(const VECTOR2I &aCentre, FLIP_DIRECTION aFlipDirection) override
Flip this object, i.e.
static PCB_MARKER * FromLegacyString(const wxString &aData)
GAL_LAYER_ID GetColorLayer() const
bool Deserialize(const google::protobuf::Any &aContainer) override
Deserializes the given protobuf message into this object.
KIGFX::COLOR4D getColor() const override
std::shared_ptr< SHAPE > GetEffectiveShape(PCB_LAYER_ID aLayer=UNDEFINED_LAYER, FLASHING aFlash=FLASHING::DEFAULT, DRC_CONSTRAINT_T aUsage=NULL_CONSTRAINT) const override
Some pad shapes can be complex (rounded/chamfered rectangle), even without considering custom shapes.
wxString GetItemDescription(UNITS_PROVIDER *aUnitsProvider, bool aFull) const override
Return a user-visible description string of this item.
EDA_ITEM * Clone() const override
Create a duplicate of this item with linked list members set to NULL.
int m_pathLength
Definition pcb_marker.h:176
double GetCoverageArea(int aTextMargin) const override
Return the board area this item covers, used to rank candidates under the cursor so a click on a smal...
static PCB_MARKER * FromProto(const kiapi::board::DrcMarker &aMsg)
void swapData(BOARD_ITEM *aImage) override
void Rotate(const VECTOR2I &aRotCentre, const EDA_ANGLE &aAngle) override
Rotate this object.
void SetEnd(const VECTOR2I &aEnd) override
void SetStart(const VECTOR2I &aStart) override
void SetStroke(const STROKE_PARAMS &aStroke) override
Provide class metadata.
void InheritsAfter(TYPE_ID aDerived, TYPE_ID aBase)
Declare an inheritance relationship between types.
void Mask(TYPE_ID aDerived, TYPE_ID aBase, const wxString &aName)
Sets a base class property as masked in a derived class.
static PROPERTY_MANAGER & Instance()
void AddTypeCast(TYPE_CAST_BASE *aCast)
Register a type converter.
int GetErrorCode() const
Definition rc_item.h:213
void SetItems(const std::vector< KIID > &aIds)
Definition rc_item.h:165
Represent a polyline containing arcs as well as line segments: A chain of connected line and/or arc s...
double Area(bool aAbsolute=true) const
Return the area of this chain.
Represent a set of closed polygons.
Simple container to manage line stroke parameters.
constexpr VECTOR2< T > Perpendicular() const
Compute the perpendicular vector.
Definition vector2d.h:335
VECTOR2< T > Resize(T aNewLength) const
Return a vector of the same direction, but length specified in aNewLength.
Definition vector2d.h:406
PCB_DRC_CODE
Definition drc_item.h:46
@ DRCE_FOOTPRINT_FILTERS
Definition drc_item.h:93
@ DRCE_UNCONNECTED_ITEMS
Definition drc_item.h:48
@ DRCE_STARVED_THERMAL
Definition drc_item.h:58
@ DRCE_SCHEMATIC_FIELDS_PARITY
Definition drc_item.h:137
@ DRCE_GENERIC_ERROR
Definition drc_item.h:105
@ DRCE_COPPER_SLIVER
Definition drc_item.h:107
@ DRCE_UNRESOLVED_VARIABLE
Definition drc_item.h:102
@ DRCE_DUPLICATE_FOOTPRINT
Definition drc_item.h:89
@ DRCE_EXTRA_FOOTPRINT
Definition drc_item.h:90
@ DRCE_NET_CONFLICT
Definition drc_item.h:91
@ DRCE_MISSING_FOOTPRINT
Definition drc_item.h:88
@ DRCE_GENERIC_WARNING
Definition drc_item.h:104
@ DRCE_SCHEMATIC_PARITY
Definition drc_item.h:92
#define _(s)
@ SEGMENT
Definition eda_shape.h:56
KIID niluuid(0)
wxString LayerName(int aLayer)
Returns the default display name for a given layer.
Definition layer_id.cpp:31
FLASHING
Enum used during connectivity building to ensure we do not query connectivity while building the data...
Definition layer_ids.h:180
GAL_LAYER_ID
GAL layers are "virtual" layers, i.e.
Definition layer_ids.h:224
@ LAYER_DRAWINGSHEET
Sheet frame and title block.
Definition layer_ids.h:274
@ LAYER_DRC_EXCLUSION
Layer for DRC markers which have been individually excluded.
Definition layer_ids.h:300
@ LAYER_DRC_HIGHLIGHTED
Color for highlighted DRC markers.
Definition layer_ids.h:337
@ LAYER_DRC_WARNING
Layer for DRC markers with RPT_SEVERITY_WARNING.
Definition layer_ids.h:297
@ LAYER_MARKER_SHADOWS
Shadows for DRC markers.
Definition layer_ids.h:301
@ LAYER_DRC_ERROR
Layer for DRC markers with RPT_SEVERITY_ERROR.
Definition layer_ids.h:273
PCB_LAYER_ID
A quick note on layer IDs:
Definition layer_ids.h:56
@ UNDEFINED_LAYER
Definition layer_ids.h:57
@ PCB_LAYER_ID_COUNT
Definition layer_ids.h:167
@ F_Cu
Definition layer_ids.h:60
PCB_LAYER_ID ToLAYER_ID(int aLayer)
Definition lset.cpp:750
FLIP_DIRECTION
Definition mirror.h:23
KICOMMON_API VECTOR2I UnpackVector2(const types::Vector2 &aInput, const EDA_IU_SCALE &aScale)
KICOMMON_API void PackVector2(types::Vector2 &aOutput, const VECTOR2I &aInput, const EDA_IU_SCALE &aScale)
STL namespace.
#define _HKI(x)
Definition page_info.cpp:40
static void ToProto(kiapi::board::DrcMarker &aMsg, const PCB_MARKER &aMarker)
static struct PCB_MARKER_DESC _PCB_MARKER_DESC
see class PGM_BASE
#define TYPE_HASH(x)
Macro to generate unique identifier for a type.
Definition property.h:74
#define REGISTER_TYPE(x)
Helper macro to map type hashes to names.
SEVERITY
@ RPT_SEVERITY_WARNING
@ RPT_SEVERITY_ERROR
@ RPT_SEVERITY_UNDEFINED
@ RPT_SEVERITY_EXCLUSION
@ RPT_SEVERITY_IGNORE
#define SCALING_FACTOR
Factor to convert the maker unit shape to internal units:
static void ToProto(kiapi::schematic::ErcMarker &aMsg, const SCH_MARKER &aMarker)
#define DEFAULT_THEME
VECTOR3I res
@ PCB_MARKER_T
class PCB_MARKER, a marker used to show something
Definition typeinfo.h:91
Functions to provide common constants and other functions to assist in making a consistent UI.
VECTOR2< int32_t > VECTOR2I
Definition vector2d.h:708