KiCad PCB EDA Suite
|
Make solid geometry for objects on layers. More...
#include <layer_item_2d.h>
Public Member Functions | |
LAYER_ITEM_2D (const OBJECT_2D *aObjectA, std::vector< const OBJECT_2D * > *aObjectB, const OBJECT_2D *aObjectC, const BOARD_ITEM &aBoardItem) | |
~LAYER_ITEM_2D () | |
bool | Overlaps (const BBOX_2D &aBBox) const override |
Test if the box overlaps the object. | |
bool | Intersects (const BBOX_2D &aBBox) const override |
a.Intersects(b) ⇔ !a.Disjoint(b) ⇔ !(a ∩ b = ∅) | |
bool | Intersect (const RAYSEG2D &aSegRay, float *aOutT, SFVEC2F *aNormalOut) const override |
INTERSECTION_RESULT | IsBBoxInside (const BBOX_2D &aBBox) const override |
Test this object if it's completely outside, intersects, or is completely inside aBBox. | |
bool | IsPointInside (const SFVEC2F &aPoint) const override |
const BOARD_ITEM & | GetBoardItem () const |
const BBOX_2D & | GetBBox () const |
const SFVEC2F & | GetCentroid () const |
OBJECT_2D_TYPE | GetObjectType () const |
Protected Attributes | |
BBOX_2D | m_bbox |
SFVEC2F | m_centroid |
OBJECT_2D_TYPE | m_obj_type |
const BOARD_ITEM & | m_boardItem |
Private Attributes | |
const OBJECT_2D * | m_objectA |
std::vector< const OBJECT_2D * > * | m_objectB |
const OBJECT_2D * | m_objectC |
Make solid geometry for objects on layers.
The operation is in the form (A - B) /\ C For almost all of the layers it translate something like: A (a via, a track, pad, polygon), B (a via hole, a THT hole, .. ), C the board (epoxy) For layers like Solder mask that are negative: A ( epoxy ), B( pads, polygons, ..), C=1
Some notes: BODY = PCB_outlines - PCB_holes - (Modules_THT_holes + VIA_THT_holes)
Plated_vias_and_holes = Tracks.Vias + Modules.PlatedHoles
Layer.cu = ( Tracks.cu + Modules_Pads.cu + Modules_Graphics.cu + Layer_zones.cu + PCB_drawings.cu - Layer_VIA_holes ) & BODY
Layer.Mask = BODY - (PCB_drawing.Mask + Modules_Graphics.Mask + Modules_Pads.Mask + Layer_zones.Mask ) Layer.Paste = (PCB_drawing.Paste + Modules_Graphics.Paste + Modules_Pads.Paste + Layer_zones.Paste) & BODY Layer.Silk = (PCB_drawing.Silk + Modules_Graphics.Silk + Modules_Pads.Silk + Layer_zones.Paste) & BODY
BODY = A - B /\ 1 Layer.cu = A - B /\ C Layer.mask = A - B /\ 1 Layers.Paste = A - 0 /\ C Layers.Silk = A - 0 /\ C
BODY = P - T /\ 1 Layer.cu = T - H /\ BODY Layer.mask = BODY - M /\ 1 Layers.Paste = P - 0 /\ BODY Layers.Silk = S - 0 /\ BODY
Definition at line 79 of file layer_item_2d.h.
LAYER_ITEM_2D::LAYER_ITEM_2D | ( | const OBJECT_2D * | aObjectA, |
std::vector< const OBJECT_2D * > * | aObjectB, | ||
const OBJECT_2D * | aObjectC, | ||
const BOARD_ITEM & | aBoardItem | ||
) |
Definition at line 35 of file layer_item_2d.cpp.
References OBJECT_2D::GetBBox(), BBOX_2D::GetCenter(), BBOX_2D::IsInitialized(), OBJECT_2D::m_bbox, OBJECT_2D::m_centroid, BBOX_2D::Reset(), BBOX_2D::ScaleNextUp(), and BBOX_2D::Set().
LAYER_ITEM_2D::~LAYER_ITEM_2D | ( | ) |
Definition at line 53 of file layer_item_2d.cpp.
References CSGITEM_EMPTY, CSGITEM_FULL, and m_objectB.
|
inlineinherited |
Definition at line 103 of file object_2d.h.
References OBJECT_2D::m_bbox.
Referenced by CONTAINER_2D_BASE::Add(), RENDER_3D_RAYTRACE_BASE::createObject(), RENDER_3D_RAYTRACE_BASE::insertHole(), LAYER_ITEM::LAYER_ITEM(), LAYER_ITEM_2D(), and BVH_CONTAINER_2D::recursiveBuild_MIDDLE_SPLIT().
|
inlineinherited |
Definition at line 66 of file object_2d.h.
References OBJECT_2D::m_boardItem.
Referenced by RENDER_3D_RAYTRACE_BASE::createItemsFromContainer().
|
inlineinherited |
Definition at line 105 of file object_2d.h.
References OBJECT_2D::m_centroid.
Referenced by LAYER_ITEM::LAYER_ITEM(), sortByCentroidX(), sortByCentroidY(), and sortByCentroidZ().
|
inlineinherited |
Definition at line 107 of file object_2d.h.
References OBJECT_2D::m_obj_type.
Referenced by RENDER_3D_OPENGL::createBoard(), RENDER_3D_RAYTRACE_BASE::createObject(), RENDER_3D_OPENGL::generateHoles(), RENDER_3D_OPENGL::generateLayerList(), RENDER_3D_OPENGL::generateViasAndPads(), and Intersect().
|
overridevirtual |
aOutT | a value between 0.0 and 1.0 in relation to the time of the hit of the segment. |
Implements OBJECT_2D.
Definition at line 80 of file layer_item_2d.cpp.
References RAYSEG2D::atNormalized(), OBJECT_2D::GetObjectType(), OBJECT_2D::Intersect(), OBJECT_2D::IsPointInside(), RAYSEG2D::m_End, RAYSEG2D::m_Length, m_objectA, m_objectB, and RAYSEG2D::m_Start.
|
overridevirtual |
a.Intersects(b) ⇔ !a.Disjoint(b) ⇔ !(a ∩ b = ∅)
Implements OBJECT_2D.
Definition at line 63 of file layer_item_2d.cpp.
References BBOX_2D::Intersects(), and OBJECT_2D::m_bbox.
|
overridevirtual |
Test this object if it's completely outside, intersects, or is completely inside aBBox.
Implements OBJECT_2D.
Definition at line 156 of file layer_item_2d.cpp.
|
overridevirtual |
Implements OBJECT_2D.
Definition at line 165 of file layer_item_2d.cpp.
References CSGITEM_EMPTY, OBJECT_2D::IsPointInside(), IsPointInside(), m_objectA, and m_objectB.
Referenced by IsPointInside().
|
overridevirtual |
Test if the box overlaps the object.
Conformance Implements the Overlaps function from the OGC Simple Feature Specification at http://www.opengeospatial.org/standards/sfa. a.Overlaps(b) ⇔ ( dim(I(a)) = dim(I(b)) = dim(I(a) ∩ I(b))) ∧ (a ∩ b ≠ a) ∧ (a ∩ b ≠ b) It means that the result dimension of an overlap is the same dimensions of the bounding box (so the overlap cannot be a point or a line) and one of the boxes cannot full contain the other box.
aBBox | is the bounding box to test. |
Implements OBJECT_2D.
Definition at line 71 of file layer_item_2d.cpp.
|
protectedinherited |
Definition at line 110 of file object_2d.h.
Referenced by DUMMY_BLOCK_2D::DUMMY_BLOCK_2D(), FILLED_CIRCLE_2D::FILLED_CIRCLE_2D(), OBJECT_2D::GetBBox(), POLYGON_4PT_2D::Intersects(), Intersects(), POLYGON_2D::Intersects(), DUMMY_BLOCK_2D::Intersects(), ROUND_SEGMENT_2D::Intersects(), TRIANGLE_2D::Intersects(), FILLED_CIRCLE_2D::IsBBoxInside(), ROUND_SEGMENT_2D::IsBBoxInside(), TRIANGLE_2D::IsBBoxInside(), DUMMY_BLOCK_2D::IsPointInside(), LAYER_ITEM_2D(), POLYGON_2D::POLYGON_2D(), POLYGON_4PT_2D::POLYGON_4PT_2D(), RING_2D::RING_2D(), ROUND_SEGMENT_2D::ROUND_SEGMENT_2D(), and TRIANGLE_2D::TRIANGLE_2D().
|
protectedinherited |
Definition at line 114 of file object_2d.h.
Referenced by OBJECT_2D::GetBoardItem().
|
protectedinherited |
Definition at line 111 of file object_2d.h.
Referenced by DUMMY_BLOCK_2D::DUMMY_BLOCK_2D(), FILLED_CIRCLE_2D::FILLED_CIRCLE_2D(), OBJECT_2D::GetCentroid(), LAYER_ITEM_2D(), POLYGON_2D::POLYGON_2D(), POLYGON_4PT_2D::POLYGON_4PT_2D(), RING_2D::RING_2D(), ROUND_SEGMENT_2D::ROUND_SEGMENT_2D(), and TRIANGLE_2D::TRIANGLE_2D().
|
protectedinherited |
Definition at line 112 of file object_2d.h.
Referenced by OBJECT_2D::GetObjectType(), and OBJECT_2D::OBJECT_2D().
|
private |
Definition at line 95 of file layer_item_2d.h.
Referenced by Intersect(), and IsPointInside().
|
private |
Definition at line 96 of file layer_item_2d.h.
Referenced by Intersect(), IsPointInside(), and ~LAYER_ITEM_2D().
|
private |
Definition at line 97 of file layer_item_2d.h.