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<RC_ITEM> aItem, const VECTOR2I& aPosition, int aLayer ) :
53 BOARD_ITEM( nullptr, PCB_MARKER_T, F_Cu ), // parent set during BOARD::Add()
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 int markerLayer = F_Cu;
219 VECTOR2I markerPos( (int) strtol( props[1].c_str(), nullptr, 10 ),
220 (int) strtol( props[2].c_str(), nullptr, 10 ) );
221
222 std::shared_ptr<DRC_ITEM> drcItem = DRC_ITEM::Create( props[0] );
223
224 if( !drcItem )
225 return nullptr;
226
227 if( drcItem->GetErrorCode() == DRCE_COPPER_SLIVER
228 || drcItem->GetErrorCode() == DRCE_GENERIC_WARNING
229 || drcItem->GetErrorCode() == DRCE_GENERIC_ERROR )
230 {
231 drcItem->SetItems( KIID( props[3] ) );
232 markerLayer = getMarkerLayer( props[4] );
233 }
234 else if( drcItem->GetErrorCode() == DRCE_UNCONNECTED_ITEMS )
235 {
236 // Pre-9.0.4 versions didn't have KIIDs as last two properties to allow sorting stability
237 if( props.size() < 6 )
238 drcItem->SetItems( KIID( props[3] ), KIID( props[4] ) );
239 else
240 drcItem->SetItems( KIID( props[5] ), KIID( props[6] ) );
241 }
242 else if( drcItem->GetErrorCode() == DRCE_STARVED_THERMAL )
243 {
244 drcItem->SetItems( KIID( props[3] ), KIID( props[4] ) );
245
246 // Pre-7.0 versions didn't differentiate between layers
247 if( props.size() == 6 )
248 markerLayer = getMarkerLayer( props[5] );
249 }
250 else if( drcItem->GetErrorCode() == DRCE_UNRESOLVED_VARIABLE
251 && props[3].IsEmpty()
252 && props[4].IsEmpty() )
253 {
254 // Note: caller must load our item pointer with the drawing sheet proxy item
255 markerLayer = LAYER_DRAWINGSHEET;
256 }
257 else
258 {
259 drcItem->SetItems( KIID( props[3] ), KIID( props[4] ) );
260 }
261
262 return new PCB_MARKER( drcItem, markerPos, markerLayer );
263}
264
265
267{
268 PCB_MARKER* res = new PCB_MARKER( *this );
269
270 // An RC_ITEM is shared between its marker and various tree views. It cannot be shared between
271 // two markers.
272 if( m_rcItem )
273 res->m_rcItem = std::make_shared<RC_ITEM>( *m_rcItem );
274
275 return res;
276}
277
278
280{
281 wxASSERT( aImage->Type() == PCB_MARKER_T );
282 PCB_MARKER* image = static_cast<PCB_MARKER*>( aImage );
283
284 std::swap( *this, *image );
285
286 if( m_rcItem )
287 m_rcItem->SetParent( this );
288
289 if( image->m_rcItem )
290 image->m_rcItem->SetParent( image );
291}
292
293
294void PCB_MARKER::GetMsgPanelInfo( EDA_DRAW_FRAME* aFrame, std::vector<MSG_PANEL_ITEM>& aList )
295{
296 aList.emplace_back( _( "Type" ), _( "Marker" ) );
297 aList.emplace_back( _( "Violation" ), HYPERLINK_DV_RENDERER::StripMarkup( m_rcItem->GetErrorMessage( true ) ) );
298
299 switch( GetSeverity() )
300 {
301 case RPT_SEVERITY_IGNORE: aList.emplace_back( _( "Severity" ), _( "Ignore" ) ); break;
302 case RPT_SEVERITY_WARNING: aList.emplace_back( _( "Severity" ), _( "Warning" ) ); break;
303 case RPT_SEVERITY_ERROR: aList.emplace_back( _( "Severity" ), _( "Error" ) ); break;
304 default: break;
305 }
306
308 {
309 aList.emplace_back( _( "Drawing Sheet" ), wxEmptyString );
310 }
311 else
312 {
313 wxString mainText;
314 wxString auxText;
315 EDA_ITEM* mainItem = aFrame->ResolveItem( m_rcItem->GetMainItemID() );
316 EDA_ITEM* auxItem = aFrame->ResolveItem( m_rcItem->GetAuxItemID() );
317
318 if( mainItem )
319 mainText = mainItem->GetItemDescription( aFrame, true );
320
321 if( auxItem )
322 auxText = auxItem->GetItemDescription( aFrame, true );
323
324 aList.emplace_back( mainText, auxText );
325 }
326
327 if( IsExcluded() )
328 aList.emplace_back( _( "Excluded" ), m_comment );
329}
330
331
332void PCB_MARKER::Rotate( const VECTOR2I& aRotCentre, const EDA_ANGLE& aAngle )
333{
334 // Marker geometry isn't user-editable
335}
336
337
338void PCB_MARKER::Flip( const VECTOR2I& aCentre, FLIP_DIRECTION aFlipDirection )
339{
340 // Marker geometry isn't user-editable
341}
342
343
345{
346 // Markers do not participate in the board geometry space, and therefore have no effective shape.
347 return std::make_shared<SHAPE_NULL>();
348}
349
350
351double PCB_MARKER::GetCoverageArea( int aTextMargin ) const
352{
353 SHAPE_LINE_CHAIN markerShape;
354 ShapeToPolygon( markerShape );
355 return markerShape.Area();
356}
357
358
360 int aError, ERROR_LOC aErrorLoc, bool ignoreLineWidth ) const
361{
362 // Markers do not participate in the board geometry space, and therefore have no shape.
363};
364
365
366wxString PCB_MARKER::GetItemDescription( UNITS_PROVIDER* aUnitsProvider, bool aFull ) const
367{
368 return wxString::Format( _( "Marker (%s)" ), aFull ? m_rcItem->GetErrorMessage( true )
369 : m_rcItem->GetErrorText( true ) );
370}
371
372
374{
375 return BITMAPS::drc;
376}
377
378
380{
381 if( IsExcluded() )
383
384 DRC_ITEM* item = static_cast<DRC_ITEM*>( m_rcItem.get() );
385
386 if( item->GetErrorCode() == DRCE_GENERIC_WARNING )
388 else if( item->GetErrorCode() == DRCE_GENERIC_ERROR )
389 return RPT_SEVERITY_ERROR;
390
391 DRC_RULE* rule = item->GetViolatingRule();
392
393 if( rule && rule->m_Severity != RPT_SEVERITY_UNDEFINED )
394 return rule->m_Severity;
395
396 return GetBoard()->GetDesignSettings().GetSeverity( item->GetErrorCode() );
397}
398
399
400std::vector<int> PCB_MARKER::ViewGetLayers() const
401{
403 return {};
404
405 std::vector<int> layers{ 0, LAYER_MARKER_SHADOWS, LAYER_DRC_HIGHLIGHTED };
406
407 switch( GetSeverity() )
408 {
409 default:
410 case SEVERITY::RPT_SEVERITY_ERROR: layers[0] = LAYER_DRC_ERROR; break;
411 case SEVERITY::RPT_SEVERITY_WARNING: layers[0] = LAYER_DRC_WARNING; break;
413 }
414
415 return layers;
416}
417
418
429
430
432{
433 return ::GetColorSettings( DEFAULT_THEME )->GetColor( GetColorLayer() );
434}
435
436
437void PCB_MARKER::SetZoom( double aZoomFactor ) const
438{
439 SetMarkerScale( SCALING_FACTOR * aZoomFactor );
440}
441
442
443std::vector<PCB_SHAPE> PCB_MARKER::GetErrorLegendShapes() const
444{
445 STROKE_PARAMS hairline( 1.0 ); // Segments of width 1.0 will get drawn as lines by PCB_PAINTER
446 std::vector<PCB_SHAPE> pathShapes;
447
448 if( m_pathStart == m_pathEnd )
449 {
450 // Add a collision 'X'
451 const int len = KiROUND( 2.5 * MarkerScale() );
452
453 PCB_SHAPE s( nullptr, SHAPE_T::SEGMENT );
454 s.SetStroke( hairline );
455
456 s.SetStart( m_pathStart + VECTOR2I( -len, -len ) );
457 s.SetEnd( m_pathStart + VECTOR2I( len, len ) );
458 pathShapes.push_back( s );
459
460 s.SetStart( m_pathStart + VECTOR2I( -len, len ) );
461 s.SetEnd( m_pathStart + VECTOR2I( len, -len ) );
462 pathShapes.push_back( s );
463 }
464 else
465 {
466 // Add the path
467 for( PCB_SHAPE shape : m_pathShapes )
468 {
469 shape.SetStroke( hairline );
470 pathShapes.push_back( std::move( shape ) );
471 }
472
473 // Draw perpendicular begin/end stops
474 if( pathShapes.size() > 0 )
475 {
476 VECTOR2I V1 = pathShapes[0].GetStart() - pathShapes[0].GetEnd();
477 VECTOR2I V2 = pathShapes.back().GetStart() - pathShapes.back().GetEnd();
478 V1 = V1.Perpendicular().Resize( 2.5 * MarkerScale() );
479 V2 = V2.Perpendicular().Resize( 2.5 * MarkerScale() );
480
481 PCB_SHAPE s( nullptr, SHAPE_T::SEGMENT );
482 s.SetStroke( hairline );
483
484 s.SetStart( m_pathStart + V1 );
485 s.SetEnd( m_pathStart - V1 );
486 pathShapes.push_back( s );
487
488 s.SetStart( m_pathEnd + V2 );
489 s.SetEnd( m_pathEnd - V2 );
490 pathShapes.push_back( s );
491 }
492 }
493
494 // Add shaded areas
495 for( PCB_SHAPE shape : m_pathShapes )
496 {
497 shape.SetWidth( 10 * MarkerScale() );
498 pathShapes.push_back( std::move( shape ) );
499 }
500
501 return pathShapes;
502}
503
504
506{
508
509 for( const PCB_SHAPE& s : m_pathShapes )
510 box.Merge( s.GetBoundingBox() );
511
512 return box;
513}
514
515
517{
518 return GetBoundingBox();
519}
520
521
522static struct PCB_MARKER_DESC
523{
525 {
532
533 // Markers cannot be locked and have no user-accessible layer control
534 propMgr.Mask( TYPE_HASH( PCB_MARKER ), TYPE_HASH( BOARD_ITEM ), _HKI( "Layer" ) );
535 propMgr.Mask( TYPE_HASH( PCB_MARKER ), TYPE_HASH( BOARD_ITEM ), _HKI( "Locked" ) );
536 }
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)
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
Definition board_item.h:84
BOARD_ITEM(BOARD_ITEM *aParent, KICAD_T idtype, PCB_LAYER_ID aLayer=F_Cu)
Definition board_item.h:86
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:374
virtual const BOARD * GetBoard() const
Return the BOARD in which this BOARD_ITEM resides, or NULL if none.
BOARD_DESIGN_SETTINGS & GetDesignSettings() const
Definition board.cpp:1301
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:178
static std::shared_ptr< DRC_ITEM > Create(int aErrorCode)
Constructs a DRC_ITEM for the given error code.
Definition drc_item.cpp:444
SEVERITY m_Severity
Definition drc_rule.h:161
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.
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.
PCB_MARKER(std::shared_ptr< RC_ITEM > aItem, const VECTOR2I &aPos, int aLayer=F_Cu)
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:158
void SetItems(const KIIDS &aIds)
Definition rc_item.h:110
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:35
@ DRCE_FOOTPRINT_FILTERS
Definition drc_item.h:82
@ DRCE_UNCONNECTED_ITEMS
Definition drc_item.h:37
@ DRCE_STARVED_THERMAL
Definition drc_item.h:47
@ DRCE_SCHEMATIC_FIELDS_PARITY
Definition drc_item.h:126
@ DRCE_GENERIC_ERROR
Definition drc_item.h:94
@ DRCE_COPPER_SLIVER
Definition drc_item.h:96
@ DRCE_UNRESOLVED_VARIABLE
Definition drc_item.h:91
@ DRCE_DUPLICATE_FOOTPRINT
Definition drc_item.h:78
@ DRCE_EXTRA_FOOTPRINT
Definition drc_item.h:79
@ DRCE_NET_CONFLICT
Definition drc_item.h:80
@ DRCE_MISSING_FOOTPRINT
Definition drc_item.h:77
@ DRCE_GENERIC_WARNING
Definition drc_item.h:93
@ DRCE_SCHEMATIC_PARITY
Definition drc_item.h:81
DRC_CONSTRAINT_T
Definition drc_rule.h:49
#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)
#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