curvedEdge.H 4.89 KB
Newer Older
1
2
3
4
/*---------------------------------------------------------------------------*\
  =========                 |
  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
   \\    /   O peration     |
Mark Olesen's avatar
Mark Olesen committed
5
    \\  /    A nd           | Copyright (C) 1991-2009 OpenCFD Ltd.
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
     \\/     M anipulation  |
-------------------------------------------------------------------------------
License
    This file is part of OpenFOAM.

    OpenFOAM is free software; you can redistribute it and/or modify it
    under the terms of the GNU General Public License as published by the
    Free Software Foundation; either version 2 of the License, or (at your
    option) any later version.

    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    for more details.

    You should have received a copy of the GNU General Public License
    along with OpenFOAM; if not, write to the Free Software Foundation,
    Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA

Class
    Foam::curvedEdge

Description
29
30
    Define a curved edge in space that is parameterised for
    0<lambda<1 from the beginning to the end point.
31
32
33
34
35
36
37
38
39

SourceFiles
    curvedEdge.C

\*---------------------------------------------------------------------------*/

#ifndef curvedEdges_H
#define curvedEdges_H

40
#include "edge.H"
41
42
43
44
45
46
47
48
49
50
51
#include "pointField.H"
#include "typeInfo.H"
#include "HashTable.H"
#include "autoPtr.H"

// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

namespace Foam
{

/*---------------------------------------------------------------------------*\
52
                         Class curvedEdge Declaration
53
54
55
56
57
58
59
60
61
\*---------------------------------------------------------------------------*/

class curvedEdge
{
protected:

    // Protected data

        const pointField& points_;
62
63
        const label start_;
        const label end_;
64
65
66

public:

mattijs's avatar
mattijs committed
67
68
    //- Runtime type information
    TypeName("curvedEdge");
69

mattijs's avatar
mattijs committed
70
    // Declare run-time constructor selection tables
71

mattijs's avatar
mattijs committed
72
73
74
75
76
        declareRunTimeSelectionTable
        (
            autoPtr,
            curvedEdge,
            Istream,
77
78
79
            (
                const pointField& points,
                Istream& is
mattijs's avatar
mattijs committed
80
81
82
            ),
            (points, is)
        );
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115


    // Constructors

        //- Construct from components
        curvedEdge
        (
            const pointField& points,
            const label start,
            const label end
        );

        //- Construct from Istream setting pointsList
        curvedEdge(const pointField&, Istream&);

        //- Copy construct
        curvedEdge(const curvedEdge&);

        //- Clone function
        virtual autoPtr<curvedEdge> clone() const;

        //- New function which constructs and returns pointer to a curvedEdge
        static autoPtr<curvedEdge> New(const pointField&, Istream&);


    // Destructor

        virtual ~curvedEdge(){}


    // Member Functions

        //- Return label of start point
Mark Olesen's avatar
Mark Olesen committed
116
        inline label start() const;
117
118

        //- Return label of end point
Mark Olesen's avatar
Mark Olesen committed
119
        inline label end() const;
120

121
122
123
124
        //- Compare the given start and end points with this curve
        //  -  0: different
        //  - +1: identical
        //  - -1: same edge, but different orientation
Mark Olesen's avatar
Mark Olesen committed
125
126
        inline int compare(const curvedEdge&) const;

127
128
129
130
131
132
        //- Compare the given start and end points with this curve
        //  -  0: different
        //  - +1: identical
        //  - -1: same edge, but different orientation
        inline int compare(const edge&) const;

Mark Olesen's avatar
Mark Olesen committed
133
134
135
136
137
        //- Compare the given start and end points with this curve
        //  -  0: different
        //  - +1: identical
        //  - -1: same edge, but different orientation
        inline int compare(const label start, const label end) const;
138
139
140
141
142
143
144
145

        //- Return the position of a point on the curve given by
        //  the parameter 0 <= lambda <= 1
        virtual vector position(const scalar) const = 0;

        //- Return the length of the curve
        virtual scalar length() const = 0;

Mark Olesen's avatar
Mark Olesen committed
146
147
148
149
150
151
152
153
154
155
156
        //- Return a complete knotList by adding the start/end points
        //  to the given list
        static pointField knotlist
        (
            const pointField&,
            const label start,
            const label end,
            const pointField& otherknots
        );


157
158
159
160
161
162
163
164
165
166
    // Member operators

        void operator=(const curvedEdge&);

    // Ostream operator

        friend Ostream& operator<<(Ostream&, const curvedEdge&);
};


Mark Olesen's avatar
Mark Olesen committed
167
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
168

Mark Olesen's avatar
Mark Olesen committed
169
} // End namespace Foam
170
171
172

// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

Mark Olesen's avatar
Mark Olesen committed
173
#include "curvedEdgeI.H"
174
175
176
177
178
179

// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

#endif

// ************************************************************************* //