Library of Assembled Shared Sources
line_segment_3d.h
Go to the documentation of this file.
1/** @file
2 * @author Bram de Greve (bram@cocamware.com)
3 * @author Tom De Muer (tom@cocamware.com)
4 *
5 * *** BEGIN LICENSE INFORMATION ***
6 *
7 * The contents of this file are subject to the Common Public Attribution License
8 * Version 1.0 (the "License"); you may not use this file except in compliance with
9 * the License. You may obtain a copy of the License at
10 * http://lass.sourceforge.net/cpal-license. The License is based on the
11 * Mozilla Public License Version 1.1 but Sections 14 and 15 have been added to cover
12 * use of software over a computer network and provide for limited attribution for
13 * the Original Developer. In addition, Exhibit A has been modified to be consistent
14 * with Exhibit B.
15 *
16 * Software distributed under the License is distributed on an "AS IS" basis, WITHOUT
17 * WARRANTY OF ANY KIND, either express or implied. See the License for the specific
18 * language governing rights and limitations under the License.
19 *
20 * The Original Code is LASS - Library of Assembled Shared Sources.
21 *
22 * The Initial Developer of the Original Code is Bram de Greve and Tom De Muer.
23 * The Original Developer is the Initial Developer.
24 *
25 * All portions of the code written by the Initial Developer are:
26 * Copyright (C) 2004-2011 the Initial Developer.
27 * All Rights Reserved.
28 *
29 * Contributor(s):
30 *
31 * Alternatively, the contents of this file may be used under the terms of the
32 * GNU General Public License Version 2 or later (the GPL), in which case the
33 * provisions of GPL are applicable instead of those above. If you wish to allow use
34 * of your version of this file only under the terms of the GPL and not to allow
35 * others to use your version of this file under the CPAL, indicate your decision by
36 * deleting the provisions above and replace them with the notice and other
37 * provisions required by the GPL License. If you do not delete the provisions above,
38 * a recipient may use your version of this file under either the CPAL or the GPL.
39 *
40 * *** END LICENSE INFORMATION ***
41 */
42
43
44
45/** @class lass::prim::LineSegment3D
46 * @brief 3D Line Segment
47 * @author Bram de Greve [BdG]
48 * @date 3003
49 */
50
51
52
53#ifndef LASS_GUARDIAN_OF_INCLUSION_PRIM_LINE_SEGMENT_3D_H
54#define LASS_GUARDIAN_OF_INCLUSION_PRIM_LINE_SEGMENT_3D_H
55
56#include "prim_common.h"
57#include "parameter_policy.h"
58#include "point_3d.h"
60
61
62
63namespace lass
64{
65
66namespace prim
67{
68
69template
70<
71 typename T,
72 class ParameterPolicy = Bounded
73>
74class LineSegment3D
75{
76public:
77
78 typedef LineSegment3D<T, ParameterPolicy> TSelf;
79 typedef ParameterPolicy TParameterPolicy;
80
81 typedef Point3D<T> TPoint;
82 typedef typename TPoint::TVector TVector;
83 typedef typename TPoint::TNumTraits TNumTraits;
84 typedef typename TPoint::TValue TValue;
85 typedef typename TPoint::TParam TParam;
86 typedef typename TPoint::TReference TReference;
87 typedef typename TPoint::TConstReference TConstReference;
88
89 enum
90 {
91 dimension = TPoint::dimension
92 };
93
94 template <typename U> struct Rebind
95 {
96 typedef LineSegment3D<U, ParameterPolicy> Type;
97 };
98
99 LineSegment3D();
100 LineSegment3D(const TPoint& iTail, const TPoint& iHead);
101 template <typename PP2>
102 LineSegment3D(const LineSegment3D<T, PP2>& other);
103
104 const TPoint& tail() const;
105 TPoint& tail();
106 const TPoint& head() const;
107 TPoint& head();
108
109 const TPoint point(TParam iT) const;
110 const TValue t(const TPoint& iPoint) const;
111 const TVector vector() const;
112 const TValue length() const;
113
114 const TValue distance(const TPoint& iPoint) const;
115 const TValue squaredDistance(const TPoint& iPoint) const;
116
117 const TValue closestsPoint(const TPoint &iPoint, T &oT) const;
118
119
120private:
121
122 TPoint tail_;
123 TPoint head_;
124};
125
126template <typename T, class PPa, class PPb> bool operator==(const LineSegment3D<T, PPa>& iA, const LineSegment3D<T, PPb>& iB);
127template <typename T, class PPa, class PPb> bool operator!=(const LineSegment3D<T, PPa>& iA, const LineSegment3D<T, PPb>& iB);
128
129template <typename T, class PPa, class PPb>
130Result intersect(const LineSegment3D<T, PPa>& iA, const LineSegment3D<T, PPb>& iB,
131 T& oTa, T& oTb);
132
133template <typename T, class PPa, class PPb>
134Result intersect(const LineSegment3D<T, PPa>& iA, const LineSegment3D<T, PPb>& iB,
135 Point3D<T>& oPoint);
136
137template<typename T, class PP>
138std::ostream& operator<<(std::ostream& oOStream, const LineSegment3D<T, PP>& iB);
139
140template<typename T, class PP>
141io::XmlOStream& operator<<(io::XmlOStream& oOStream, const LineSegment3D<T, PP>& iB);
142
143template<typename T, class PP>
145 const LineSegment3D<T, PP>& iLineSegment);
146
147
148}
149
150}
151
152#include "line_segment_3d.inl"
153
154#define LASS_PRIM_HAVE_PY_EXPORT_TRAITS_LINE_SEGMENT_3D
155#ifdef LASS_GUARDIAN_OF_INCLUSION_UTIL_PYOBJECT_PLUS_H
157#endif
158
159#ifdef LASS_GUARDIAN_OF_INCLUSION_PRIM_PLANE_3D_H
161#endif
162
163#ifdef LASS_GUARDIAN_OF_INCLUSION_PRIM_RAY_3D_H
164# include "line_segment_3d_ray_3d.h"
165#endif
166
167#endif
Output stream for writing a selection of geometric primitives to matlab M files.
Output stream for writing a selection of geometric primitives to XML files.
const TValue t(const TPoint &iPoint) const
Return parameter of projection of iPoint on line segment.
const TValue length() const
Return length of line segment.
const TVector vector() const
Return vector from tail to head.
const TValue distance(const TPoint &iPoint) const
Return distance of point to line segment.
const TPoint point(TParam iT) const
Return point on ray by it's parameter.
const TValue closestsPoint(const TPoint &iPoint, T &oT) const
t is parameter of closests point and return squared distance of a point to the line segment.
const TValue squaredDistance(const TPoint &iPoint) const
Return squared distance of a point to line segment.
set of geometrical primitives
Definition aabb_2d.h:81
Result
meta information on the result you have from an operation like an intersection ...
Definition result.h:74
Library for Assembled Shared Sources.
Definition config.h:53
Parameters supplied to functions must be in the range of the primitive.