Version: 8.3.0
Main Page
Packages
Data Structures
Files
File List
Globals
BLSURFPlugin_Attractor.hxx
Go to the documentation of this file.
1
// Copyright (C) 2007-2016 CEA/DEN, EDF R&D
2
//
3
// This library is free software; you can redistribute it and/or
4
// modify it under the terms of the GNU Lesser General Public
5
// License as published by the Free Software Foundation; either
6
// version 2.1 of the License, or (at your option) any later version.
7
//
8
// This library is distributed in the hope that it will be useful,
9
// but WITHOUT ANY WARRANTY; without even the implied warranty of
10
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11
// Lesser General Public License for more details.
12
//
13
// You should have received a copy of the GNU Lesser General Public
14
// License along with this library; if not, write to the Free Software
15
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16
//
17
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
18
//
19
20
// ---
21
// File : BLSURFPlugin_Attractor.hxx
22
// Authors : Renaud Nédélec (OCC)
23
// ---
24
//
25
// The idea of the algorithm used to calculate the distance on a
26
// non-euclidian parametric surface has been found in the ref. below:
27
//
28
// Ref:"Accurate Anisotropic Fast Marching for Diffusion-Based Geodesic Tractography"
29
// S. Jbabdi, P. Bellec, R. Toro, Daunizeau, M. Pélégrini-Issac, and H. Benali1
30
//
31
32
#ifndef _BLSURFPlugin_Attractor_HXX_
33
#define _BLSURFPlugin_Attractor_HXX_
34
35
#include <vector>
36
#include <map>
37
#include <set>
38
#include <stdexcept>
39
#include <string>
40
#include <limits>
41
#include <utilities.h>
42
43
// OPENCASCADE includes
44
#include <BRep_Tool.hxx>
45
#include <TopExp.hxx>
46
#include <TopExp_Explorer.hxx>
47
#include <TopoDS.hxx>
48
#include <NCollection_Map.hxx>
49
50
#include <Geom_Surface.hxx>
51
#include <Geom2d_Curve.hxx>
52
#include <Geom_Curve.hxx>
53
#include <TopoDS_Vertex.hxx>
54
#include <TopoDS_Edge.hxx>
55
#include <TopoDS_Wire.hxx>
56
#include <TopoDS_Face.hxx>
57
58
#include <gp_Pnt2d.hxx>
59
#include <TopTools_IndexedMapOfShape.hxx>
60
#include <TopoDS_Shape.hxx>
61
#include <BRep_Builder.hxx>
62
#include <BRepTools.hxx>
63
64
#include <TopTools_DataMapOfShapeInteger.hxx>
65
#include <GProp_GProps.hxx>
66
#include <BRepGProp.hxx>
67
68
#ifndef WIN32
69
#include <fenv.h>
70
#endif
71
72
#include <Standard_ErrorHandler.hxx>
73
#include <GeomAPI_ProjectPointOnCurve.hxx>
74
#include <GeomAPI_ProjectPointOnSurf.hxx>
75
#include <gp_XY.hxx>
76
#include <gp_XYZ.hxx>
77
#include <TopTools_MapOfShape.hxx>
78
79
#define TYPE_EXP 0
80
#define TYPE_LIN 1
81
82
class
BLSURFPlugin_Attractor
{
83
84
public
:
85
86
BLSURFPlugin_Attractor
();
87
BLSURFPlugin_Attractor
(
const
TopoDS_Face& Face,
const
TopoDS_Shape& Attractor,
const
std::string& attEntry);
88
89
bool
init
();
// Calculates the discrete points correponding to attractor
90
// and intialises the map of distances
91
void
edgeInit
(
Handle
(Geom_Surface) aSurf,
const
TopoDS_Edge& anEdge);
92
93
double
GetSize
(
double
u,
double
v);
94
TopoDS_Face
GetFace
()
const
{
return
_face
; }
95
TopoDS_Shape
GetAttractorShape
()
const
{
return
_attractorShape
; }
96
std::string
GetAttractorEntry
()
const
{
return
_attEntry
; }
97
std::vector<double>
GetParameters
()
const
98
{
99
double
tab_params[] = {
_startSize
,
_endSize
,
_actionRadius
,
_constantRadius
};
100
std::vector<double> params (tab_params, tab_params +
sizeof
(tab_params) /
sizeof
(
double
) );
101
return
params;
102
}
103
104
void
SetParameters
(
double
Start_Size,
double
End_Size,
double
Action_Radius,
double
Constant_Radius);
105
void
SetType
(
int
type){
_type
= type; }
106
107
void
BuildMap
();
// Builds the map of distances between source point and any point P(u,v)
108
bool
IsMapBuilt
()
const
{
return
_isMapBuilt
; }
// Controls if the map has been built
109
bool
Empty
()
const
{
return
_isEmpty
; }
110
111
typedef
std::vector<double>
TDiscreteParam
;
112
typedef
std::vector< std::vector<double> >
TDistMap
;
113
typedef
std::vector< std::vector<bool> >
TPointSet
;
114
typedef
std::set< std::vector<double> >
TTrialSet
;
115
typedef
std::vector<double>
Trial_Pnt
;
116
typedef
std::vector<int>
IJ_Pnt
;
117
118
private
:
119
120
TopoDS_Face
_face
;
121
TopoDS_Shape
_attractorShape
;
122
std::string
_attEntry
;
123
TDiscreteParam
_vectU
;
124
TDiscreteParam
_vectV
;
125
TDistMap
_DMap
;
126
TPointSet
_known
;
127
TTrialSet
_trial
;
128
int
_type
;
// Type of function used to calculate the size from the distance (unused for now)
129
int
_gridU
;
// Number of grid points in U direction
130
int
_gridV
;
// Number of grid points in V direction
131
double
_u1
,
_u2
,
_v1
,
_v2
;
// Bounds of the parametric space of the face
132
double
_startSize
,
_endSize
;
// User parameters
133
double
_actionRadius
,
_constantRadius
;
//
134
135
bool
_isMapBuilt
;
136
bool
_isEmpty
;
137
138
// data of a specific case: a point attractor on a plane
139
Handle
(Geom_Surface) _plane;
140
gp_Pnt
_attractorPnt
;
141
142
double
(
BLSURFPlugin_Attractor
::*
_distance
)(
double
u,
double
v);
// Retrieve the value of the distance map at point (u,v) of the parametric space of _face
143
double
_distanceFromMap
(
double
u,
double
v);
144
double
_distanceFromPoint
(
double
u,
double
v);
145
};
146
147
#endif
src
BLSURFPlugin
BLSURFPlugin_Attractor.hxx
Copyright © 2007-2017 CEA/DEN, EDF R&D