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
352 int aError, ERROR_LOC aErrorLoc, bool ignoreLineWidth ) const
353{
354 // Markers do not participate in the board geometry space, and therefore have no shape.
355};
356
357
358wxString PCB_MARKER::GetItemDescription( UNITS_PROVIDER* aUnitsProvider, bool aFull ) const
359{
360 return wxString::Format( _( "Marker (%s)" ), aFull ? m_rcItem->GetErrorMessage( true )
361 : m_rcItem->GetErrorText( true ) );
362}
363
364
366{
367 return BITMAPS::drc;
368}
369
370
372{
373 if( IsExcluded() )
375
376 DRC_ITEM* item = static_cast<DRC_ITEM*>( m_rcItem.get() );
377
378 if( item->GetErrorCode() == DRCE_GENERIC_WARNING )
380 else if( item->GetErrorCode() == DRCE_GENERIC_ERROR )
381 return RPT_SEVERITY_ERROR;
382
383 DRC_RULE* rule = item->GetViolatingRule();
384
385 if( rule && rule->m_Severity != RPT_SEVERITY_UNDEFINED )
386 return rule->m_Severity;
387
388 return GetBoard()->GetDesignSettings().GetSeverity( item->GetErrorCode() );
389}
390
391
392std::vector<int> PCB_MARKER::ViewGetLayers() const
393{
395 return {};
396
397 std::vector<int> layers{ 0, LAYER_MARKER_SHADOWS, LAYER_DRC_HIGHLIGHTED };
398
399 switch( GetSeverity() )
400 {
401 default:
402 case SEVERITY::RPT_SEVERITY_ERROR: layers[0] = LAYER_DRC_ERROR; break;
403 case SEVERITY::RPT_SEVERITY_WARNING: layers[0] = LAYER_DRC_WARNING; break;
405 }
406
407 return layers;
408}
409
410
421
422
424{
425 return ::GetColorSettings( DEFAULT_THEME )->GetColor( GetColorLayer() );
426}
427
428
429void PCB_MARKER::SetZoom( double aZoomFactor ) const
430{
431 SetMarkerScale( SCALING_FACTOR * aZoomFactor );
432}
433
434
435std::vector<PCB_SHAPE> PCB_MARKER::GetErrorLegendShapes() const
436{
437 STROKE_PARAMS hairline( 1.0 ); // Segments of width 1.0 will get drawn as lines by PCB_PAINTER
438 std::vector<PCB_SHAPE> pathShapes;
439
440 if( m_pathStart == m_pathEnd )
441 {
442 // Add a collision 'X'
443 const int len = KiROUND( 2.5 * MarkerScale() );
444
445 PCB_SHAPE s( nullptr, SHAPE_T::SEGMENT );
446 s.SetStroke( hairline );
447
448 s.SetStart( m_pathStart + VECTOR2I( -len, -len ) );
449 s.SetEnd( m_pathStart + VECTOR2I( len, len ) );
450 pathShapes.push_back( s );
451
452 s.SetStart( m_pathStart + VECTOR2I( -len, len ) );
453 s.SetEnd( m_pathStart + VECTOR2I( len, -len ) );
454 pathShapes.push_back( s );
455 }
456 else
457 {
458 // Add the path
459 for( PCB_SHAPE shape : m_pathShapes )
460 {
461 shape.SetStroke( hairline );
462 pathShapes.push_back( std::move( shape ) );
463 }
464
465 // Draw perpendicular begin/end stops
466 if( pathShapes.size() > 0 )
467 {
468 VECTOR2I V1 = pathShapes[0].GetStart() - pathShapes[0].GetEnd();
469 VECTOR2I V2 = pathShapes.back().GetStart() - pathShapes.back().GetEnd();
470 V1 = V1.Perpendicular().Resize( 2.5 * MarkerScale() );
471 V2 = V2.Perpendicular().Resize( 2.5 * MarkerScale() );
472
473 PCB_SHAPE s( nullptr, SHAPE_T::SEGMENT );
474 s.SetStroke( hairline );
475
476 s.SetStart( m_pathStart + V1 );
477 s.SetEnd( m_pathStart - V1 );
478 pathShapes.push_back( s );
479
480 s.SetStart( m_pathEnd + V2 );
481 s.SetEnd( m_pathEnd - V2 );
482 pathShapes.push_back( s );
483 }
484 }
485
486 // Add shaded areas
487 for( PCB_SHAPE shape : m_pathShapes )
488 {
489 shape.SetWidth( 10 * MarkerScale() );
490 pathShapes.push_back( std::move( shape ) );
491 }
492
493 return pathShapes;
494}
495
496
498{
500
501 for( const PCB_SHAPE& s : m_pathShapes )
502 box.Merge( s.GetBoundingBox() );
503
504 return box;
505}
506
507
509{
510 return GetBoundingBox();
511}
512
513
514static struct PCB_MARKER_DESC
515{
517 {
524
525 // Markers cannot be locked and have no user-accessible layer control
526 propMgr.Mask( TYPE_HASH( PCB_MARKER ), TYPE_HASH( BOARD_ITEM ), _HKI( "Layer" ) );
527 propMgr.Mask( TYPE_HASH( PCB_MARKER ), TYPE_HASH( BOARD_ITEM ), _HKI( "Locked" ) );
528 }
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:927
constexpr BOX2I KiROUND(const BOX2D &aBoxD)
Definition box2.h:995
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:1299
constexpr BOX2< Vec > & Merge(const BOX2< Vec > &aRect)
Modify the position and size of the rectangle in order to contain aRect.
Definition box2.h:653
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:160
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:89
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:79
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:86
std::shared_ptr< RC_ITEM > m_rcItem
enum MARKER_T GetMarkerType() const
Definition marker_base.h:87
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:173
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:172
std::vector< PCB_SHAPE > m_pathShapes
Definition pcb_marker.h:171
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:174
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.Helper macro to map type hashes to names.
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:108
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:310
VECTOR2< T > Resize(T aNewLength) const
Return a vector of the same direction, but length specified in aNewLength.
Definition vector2d.h:381
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 #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 #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)
Definition property.h:74
#define REGISTER_TYPE(x)
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:683