KiCad PCB EDA Suite
Loading...
Searching...
No Matches
line.h
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) 2024 KiCad Developers, see AUTHORS.txt for contributors.
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * as published by the Free Software Foundation; either version 2
9 * of the License, or (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, you may find one here:
18 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
19 * or you may search the http://www.gnu.org website for the version 2 license,
20 * or you may write to the Free Software Foundation, Inc.,
21 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
22 */
23
24#pragma once
25
26#include <geometry/seg.h>
27
28/*
29 * A geometric line of infinite length.
30 *
31 * In terms of geometric ops, a SEG would probably do as it has the same definition,
32 * but a separate class is more explicit and also allows compile-time
33 * reasoning about the meaning of the object through the type system.
34 */
35class LINE
36{
37public:
39
40 LINE( const SEG& aSeg ) : m_seg( aSeg ) {}
41
42 LINE( const VECTOR2I& aStart, const VECTOR2I& aEnd ) : m_seg( aStart, aEnd ) {}
43
44 bool operator==( const LINE& aOther ) const { return m_seg == aOther.m_seg; }
45
49 const SEG& GetContainedSeg() const { return m_seg; }
50
51 OPT_VECTOR2I Intersect( const SEG& aOther ) const;
52 OPT_VECTOR2I Intersect( const LINE& aOther ) const;
53
57 int Distance( const VECTOR2I& aPoint ) const;
58
62 VECTOR2I NearestPoint( const VECTOR2I& aPoint ) const;
63
64private:
67};
Definition: line.h:36
const SEG & GetContainedSeg() const
Gets the (one of the infinite number of) segments that the line passes through.
Definition: line.h:49
VECTOR2I::extended_type ecoord
Definition: line.h:38
LINE(const SEG &aSeg)
Definition: line.h:40
SEG m_seg
Internally, we can represent a just a segment that the line passes through.
Definition: line.h:66
int Distance(const VECTOR2I &aPoint) const
Gets the distance from the line to the given point.
Definition: line.cpp:46
bool operator==(const LINE &aOther) const
Definition: line.h:44
VECTOR2I NearestPoint(const VECTOR2I &aPoint) const
Gets the nearest point on the line to the given point.
Definition: line.cpp:52
OPT_VECTOR2I Intersect(const SEG &aOther) const
Definition: line.cpp:22
LINE(const VECTOR2I &aStart, const VECTOR2I &aEnd)
Definition: line.h:42
Definition: seg.h:42
VECTOR2_TRAITS< int32_t >::extended_type extended_type
Definition: vector2d.h:73
std::optional< VECTOR2I > OPT_VECTOR2I
Definition: seg.h:39