Skip to content

Commit c6ce2b9

Browse files
authored
Merge pull request #392 from VibekeSkytt/lrbupdate
Lrbupdate
2 parents 1aacd77 + d816e1f commit c6ce2b9

69 files changed

Lines changed: 9630 additions & 611 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

CMakeLists.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,11 @@ option(BUILD_AS_SHARED_LIBRARY "Build the project as shared libraries?" OFF)
1919
#message("gotools: BUILD_AS_SHARED_LIBRARY: " ${BUILD_AS_SHARED_LIBRARY})
2020

2121
option(GoTools_COPY_DATA "Copy data?" ON)
22+
IF(GoTools_COPY_DATA)
23+
FILE(COPY gotools-data
24+
DESTINATION ${GoTools_BINARY_DIR}
25+
PATTERN .git EXCLUDE)
26+
ENDIF()
2227

2328
OPTION(GoTools_ENABLE_OPENMP "Include OPENMP?" OFF)
2429
IF(GoTools_ENABLE_OPENMP)

Doxyfile

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -750,13 +750,15 @@ EXCLUDE_SYMBOLS =
750750

751751
EXAMPLE_PATH = ttl/examples/hesimplest \
752752
compositemodel/examples \
753+
lrsplines2D/examples \
754+
lrsplines3D/examples \
753755
trivariate/examples \
754756
trivariatemodel/examples \
755757
qualitymodule/examples \
756758
parameterization/examples \
757759
sisl/examples \
758760
implicitization/examples \
759-
gotools-core/examples\
761+
gotools-core/examples \
760762
igeslib/examples
761763

762764

@@ -782,6 +784,8 @@ IMAGE_PATH = gotools-core/doc/images \
782784
compositemodel/doc/images \
783785
trivariate/doc/images \
784786
trivariatemodel/doc/images \
787+
lrsplines2D/doc/images \
788+
lrsplines3D/doc/images \
785789
ttl/doc/images
786790

787791
# The INPUT_FILTER tag can be used to specify a program that doxygen should
@@ -1234,7 +1238,8 @@ FORMULA_TRANSPARENT = YES
12341238
# output. When enabled you may also need to install MathJax separately and
12351239
# configure the path to it using the MATHJAX_RELPATH option.
12361240

1237-
USE_MATHJAX = NO
1241+
EXTRA_PACKAGES = mathtools amsmath
1242+
USE_MATHJAX = YES
12381243

12391244
# When MathJax is enabled you can set the default output format to be used for
12401245
# thA MathJax output. Supported types are HTML-CSS, NativeMML (i.e. MathML) and
@@ -1253,7 +1258,8 @@ MATHJAX_FORMAT = HTML-CSS
12531258
# However, it is strongly recommended to install a local
12541259
# copy of MathJax from http://www.mathjax.org before deployment.
12551260

1256-
MATHJAX_RELPATH = http://www.mathjax.org/mathjax
1261+
MATHJAX_RELPATH = https://cdn.jsdelivr.net/npm/mathjax@2/MathJax.js?config=TeX-AMS-MML_HTMLorMML
1262+
#../../../programs/node_modules/mathjax
12571263

12581264
# The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension
12591265
# names that should be enabled during MathJax rendering.
@@ -1333,7 +1339,7 @@ GENERATE_LATEX = NO
13331339
# If a relative path is entered the value of OUTPUT_DIRECTORY will be
13341340
# put in front of it. If left blank `latex' will be used as the default path.
13351341

1336-
LATEX_OUTPUT =
1342+
LATEX_OUTPUT =
13371343

13381344
# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
13391345
# invoked. If left blank `latex' will be used as the default command name.

compositemodel/Doxyfile

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1349,6 +1349,11 @@ GENERATE_LEGEND = YES
13491349

13501350
DOT_CLEANUP = YES
13511351

1352+
EXTRA_PACKAGES = mathtools amsmath
1353+
USE_MATHJAX = YES
1354+
MATHJAX_RELPATH = https://cdn.jsdelivr.net/npm/mathjax@2/MathJax.js?config=TeX-AMS-MML_HTMLorMML
1355+
#../../../../programs/node_modules/mathjax
1356+
13521357
#---------------------------------------------------------------------------
13531358
# Configuration::additions related to the search engine
13541359
#---------------------------------------------------------------------------

compositemodel/include/GoTools/compositemodel/CompositeModelFileHandler.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,8 @@ namespace Go
5757
{
5858

5959

60-
// Writing to and reading from the g22 file format.
61-
// Supports topology information (as opposed to the g2 format for geometries only).
60+
/// Writing to and reading from the g22 file format.
61+
/// Supports topology information (as opposed to the g2 format for geometries only).
6262
class ParamSurface;
6363

6464
class CompositeModelFileHandler

compositemodel/include/GoTools/compositemodel/compositemodel-doxymain.h

Lines changed: 96 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -71,21 +71,21 @@ A CAD model can normally not be represented by one geometry entity like
7171
the ones in gotools-core. The need for sets of entities, adjacency analysis and
7272
representation of adjacency arises. There is a need for topological structures.
7373
74-
\link Go::Body \endlink is a boundary represented solid model. It is a virtual volume limited
74+
\link Go::Body Body \endlink is a boundary represented solid model. It is a virtual volume limited
7575
by one or more shells, one outer and possibly a number of inner ones. The
7676
shells are represented by the class SurfaceModel which is also the entity used
77-
to represent a face set. In addition to being a topological entity, \link Go::SurfaceModel \endlink
77+
to represent a face set. In addition to being a topological entity, \link Go::SurfaceModel SurfaceModel \endlink
7878
provides an interface which views the set of surfaces as one entity. Thus, an
7979
operation like closest point computation can be performed without caring
8080
about which surface is closest to the point.
8181
8282
The surface model consists of a set of faces represented by the class
83-
\link Go::ftSurface \endlink. The face represents the abstract idea of a bounded surface, but it also
83+
\link Go::ftSurface ftSurface \endlink. The face represents the abstract idea of a bounded surface, but it also
8484
has a pointer to the geometric representation of this surface. The geometric
85-
surface is a \link Go::ParamSurface \endlink, it may be a NURBS surface, an elementary surface
85+
surface is a \link Go::ParamSurface ParamSurface \endlink, it may be a NURBS surface, an elementary surface
8686
or a trimmed version thereof. The face is bounded by one or more loops,
8787
one outer and possibly a number of inner ones. The inner loops represents
88-
holes in the surface. Then the geometric surface will always be a \link Go::BoundedSurface \endlink. All
88+
holes in the surface. Then the geometric surface will always be a \link Go::BoundedSurface BoundedSurface \endlink. All
8989
faces have an outer loop which either represents an outer trimming curve in
9090
the case of a BoundedSurface or the surface boundary.
9191
@@ -106,7 +106,7 @@ as a point. A vertex has knowledge about all edges meeting in this point.
106106
\section comp_sec2 CompositeModel
107107
SurfaceModel represents the shell in a boundary represented geometry model,
108108
but it is also the entity that is used to view a surface set as one unity. In
109-
this context, it inherits the abstract superclass \link Go::CompositeModel \endlink that defines
109+
this context, it inherits the abstract superclass \link Go::CompositeModel CompositeModel \endlink that defines
110110
an interface for a unity of geometry entities of the same type. All composite
111111
models can
112112
Report how many entities it consist of
@@ -128,20 +128,20 @@ be specified. The resolution is defined from the composite model. This can
128128
either be done setting a resolution for all entities or by a density parameter
129129
that governs the resolution. The composite model tesselation routines return
130130
a vector of shared pointers to a GeneralMesh. The type of meshes used for the
131-
concrete tesselation results are \link Go::LineStrip \endlink,
132-
\link Go::RegularMesh \endlink and \link Go::GenericTriMesh \endlink.
131+
concrete tesselation results are \link Go::LineStrip LineStrip \endlink,
132+
\link Go::RegularMesh RegularMesh \endlink and \link Go::GenericTriMeshGenericTriMesh GenericTriMeshGenericTriMesh \endlink.
133133
134134
The control polygon of the composite model or a selected subset of the
135135
model may be tesselated. In that case the output mesh is represented as a
136-
\link Go::LineCloud \endlink. LineCloud is an entity in gotools-core/geometry.
136+
\link Go::LineCloud LineCloud \endlink. LineCloud is an entity in gotools-core/geometry.
137137
138138
\subsection comp_sec2_2 CompositeCurve
139139
A \link Go::CompositeCurve composite curve \endlink
140140
is an ordered collection of curves. The class expects a set
141141
of curves and will orient them order them in a sequence. The curve set should
142142
preferably be continuous, but also discontinuous set may be represented.
143143
144-
A composite curve will contain a number of \link Go::ParamCurves \endlink, ordering
144+
A composite curve will contain a number of \link Go::ParamCurve ParamCurves \endlink, ordering
145145
information and continuity information. The curve sequence will be parameterized as a
146146
unity. Curve indices follow the indices for the curves given as
147147
input to the object. The class has the following type specific functionality:
@@ -237,6 +237,92 @@ size of the model. An upper bound of the tesselation size exists, but a large
237237
model combined with a small density will still lead to a heavy visualization
238238
model.
239239
240+
\subsection comp_sec2_5 Tolerances
241+
The constructor of subclasses of \link Go::CompositeModel compositemodel \endlink requires a set of tolerances to be defined. With the exception of approxtol, these tolerances are used to compute adjacency between entities and to check the continuity between adjacent entities.
242+
243+
\subsection comp_sec2_6 Intersection results
244+
245+
Intersections performed in the composite model class either return the intersection results in a format particular to the concrete composite model subclass, or the intersection results are stored in a subclass of \link Go::IntResultsModel IntResultsModel \endlink. In the latter case, intersections can be performed without caring about the composite model type.
246+
247+
IntResultsModel stores the intersection results and the entities involved in the intersection and has the following functionality:
248+
249+
\li Report upon the existence and number of intersection points and intersection curve segments
250+
\li Tesselate itself
251+
252+
The actual geometry of the intersection results must be fetched from the subclasses
253+
\link Go::IntResultsSfModel IntResultsSfModel\endlink and \link Go::IntResultsCompCv IntResultsCompCv \endlink. The intersection results classes are very lean, but have the potential to get a rich set of functionality operating on intersection results.
254+
255+
SurfaceModel returns intersection results either as IntResultsSfModel or as
256+
\link Go::ftCurve ftCurve \endlink and a vector of \link Go::ftPoints ftPoints \endlink. It is also possible to fetch intersection results from IntResultSfModel as ftCurve and ftPoint.
257+
258+
An ftCurve is composed of a number of ftCurveSegments. An ftCurveSegment represents a piece of an intersection curve. The segment is represented by a spatial curve and a curve in the parameter domain of the parametric entities involved in the intersection, which will be one or two. Thus, the curve segments distinguish between the individual surfaces in a surface set while ftCurve itself does not. ftCurve keeps track of the continuity between the segments it is composed of. An ftCurve is able to tesselate itself.
259+
260+
An ftPoint relates to one face, i.e., an \link Go::ftSurface ftSurface\endlink,
261+
and has a geometric representation and a parameter domain representation. Each intersection point, for instance in an intersection between a surface model and a line, is represented as an ftPoint. The application has access to the position of this point, to the face with which it is associated and the parameter values in this face.
262+
263+
A composite curve represents its intersection results as an instance of
264+
\link Go::IntResultsCompCv IntResultsCompCv\endlink. Intersection points, which are the expected result in this case, are represented as \link Go::PointOnCurve PointOnCurve\endlink. Intersection curve segments are represented as pairs of PointOnCurves. The two points limit the extension of the intersection curve segment. The class
265+
PointOnCurve lies in the gotools-core/geometry submodule and holds a parametric curve, a parameter value and the geometric representation of the point. This content is accessible from the public user interface.
266+
267+
\subsection comp_sec2_7 The topological face
268+
The topological face (\link Go::ftSurface ftSurface\endlink)
269+
has access to the geometric representation of this face and information about neighbouring faces. In addition, it has knowledge about the solid (\link Go::Body Body\endlink) it belongs to, if any.
270+
271+
The geometric surface is of type ParamSurface and described in the documentation of the gotools-core/geometry submodule.
272+
273+
The face is limited by a number of \link Go::Loop Loops\endlink. The geometric surface corresponding to a face corresponds to the trimmed face, so the information present in the boundary loops of the face does also exist in the surface description.
274+
275+
ftSurface has a rich set of functionality of different types:
276+
277+
- Access functionality
278+
- Fetch the corresponding surface
279+
- Fetch boundary loops
280+
- Fetch edges belonging to the boundary loops
281+
- Fetch neighbouring faces
282+
- Fetch all vertices or subsets of vertices
283+
- Fetch the body owning this face
284+
- Fetch all bodies meeting in this face, maximum 2
285+
- Fetch the coincident face in a volume model
286+
.
287+
- Quality checking
288+
- Check for discontinuities in the surface
289+
- Check the distance between a face and corresponding edges and vertices
290+
- Check the orientation of loops belonging to the face
291+
- Check if the face has a narrow region
292+
- Check for acute angles in the boundary loops
293+
.
294+
- Functionality related to an isogeometric model
295+
- Check if the corresponding surface is a spline
296+
- Check if this face and the neighbouring face have corresponding spline spaces
297+
- Ensure that this face and the neighbouring face have corresponding spline spaces
298+
- Check if this face and the neighbouring face satisfy a corner-to-corner condition
299+
- Ensure that this face and the neighbouring face satisfy a corner-to-corner condition
300+
- Fetch adjacency information between this face and a neighbouring face
301+
- Fetch information about boundaries where the face has no neighbouring face
302+
- Fetch information about coefficient enumerations for spline surface belonging to adjacent faces and free boundaries
303+
.
304+
- Other queries
305+
- Evaluations
306+
- Closest point computations
307+
- Perform smoothing on the current face
308+
- Compute bounding box
309+
310+
\subsection comp_sec2_8 The topological edge
311+
The topological edge is implemented in the class \link Go::ftEdge ftEdge\endlink
312+
and it is a half-edge. Thus, it contains information related to one face only. However, it has access to the corresponding half-edge when the edge represents a boundary between two adjacent faces. The topological edge has a geometric representation as a ParamCurve. The edge may represent a restriction of the curve. This restriction is implemented using limiting parameters in the parameter interval of the curve.
313+
314+
The main functionality is:
315+
316+
\li Fetch the curve representing the geometry description of the edge
317+
\li Fetch the parameters limiting the edge compared to the corresponding curve
318+
\li Fetch the face to which the edge belongs
319+
\li Given an edge parameter, compute the corresponding face parameter
320+
\li Access to geometry information like bounding box, results of evaluation, closest point computations and an estimate of the curve length
321+
\li Information about the vertices limiting the edge, i.e., access to vertices and the edge parameter corresponding to a vertex
322+
\li Access to the radial edge if this entity exist. A radial edge is defined in volume model and the entity is described in the [[documentation of the trivariatemodel module|Module TrivariateModel]].
323+
\li Get all surfaces meeting in this edge, with a maximum of two
324+
325+
240326
\section comp_sec3 Reverse engineering
241327
The aim is to go from a triangulated point cloud to a boundary represented
242328
CAD model. See \link reverseengineering_doc the reverse engineering page\endlink
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
/*
2+
* Copyright (C) 1998, 2000-2007, 2010, 2011, 2012, 2013 SINTEF ICT,
3+
* Applied Mathematics, Norway.
4+
*
5+
* Contact information: E-mail: tor.dokken@sintef.no
6+
* SINTEF ICT, Department of Applied Mathematics,
7+
* P.O. Box 124 Blindern,
8+
* 0314 Oslo, Norway.
9+
*
10+
* This file is part of GoTools.
11+
*
12+
* GoTools is free software: you can redistribute it and/or modify
13+
* it under the terms of the GNU Affero General Public License as
14+
* published by the Free Software Foundation, either version 3 of the
15+
* License, or (at your option) any later version.
16+
*
17+
* GoTools is distributed in the hope that it will be useful,
18+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
19+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20+
* GNU Affero General Public License for more details.
21+
*
22+
* You should have received a copy of the GNU Affero General Public
23+
* License along with GoTools. If not, see
24+
* <http://www.gnu.org/licenses/>.
25+
*
26+
* In accordance with Section 7(b) of the GNU Affero General Public
27+
* License, a covered work must retain the producer line in every data
28+
* file that is created or manipulated using GoTools.
29+
*
30+
* Other Usage
31+
* You can be released from the requirements of the license by purchasing
32+
* a commercial license. Buying such a license is mandatory as soon as you
33+
* develop commercial activities involving the GoTools library without
34+
* disclosing the source code of your own applications.
35+
*
36+
* This file may be used in accordance with the terms contained in a
37+
* written agreement between you and SINTEF ICT.
38+
*/
39+
40+
#ifndef _STREAMABLE_G22_DOXYMAIN_H
41+
#define _STREAMABLE_G22_DOXYMAIN_H
42+
43+
/**
44+
\page streamable_g22_doc The g22-format, GoTools file format for surface and volume models.
45+
46+
The g22-format is xml-based and extends the
47+
link Go::streamable_doxygen g2-format \endlink with
48+
tolerances and topological entities. The storage for the geometry entities
49+
follows the g2 format.
50+
51+
Surface models are handled by \link Go::CompositeModelFileHandler.C
52+
CompositeModelFileHandler \endlink and volume models be
53+
\link Go::VolumeModelFileHandler.C VolumeModelFileHandler\endlink.
54+
55+
56+
*/
57+
#endif

gotools-core/Doxyfile

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1553,3 +1553,8 @@ GENERATE_LEGEND = YES
15531553
# the various graphs.
15541554

15551555
DOT_CLEANUP = YES
1556+
1557+
EXTRA_PACKAGES = mathtools amsmath
1558+
USE_MATHJAX = YES
1559+
MATHJAX_RELPATH = https://cdn.jsdelivr.net/npm/mathjax@2/MathJax.js?config=TeX-AMS-MML_HTMLorMML
1560+
#../../../../programs/node_modules/mathjax

0 commit comments

Comments
 (0)