Simbody 3.7
Loading...
Searching...
No Matches
PolygonalMesh.h
Go to the documentation of this file.
1#ifndef SimTK_SimTKCOMMON_POLYGONAL_MESH_H_
2#define SimTK_SimTKCOMMON_POLYGONAL_MESH_H_
3
4/* -------------------------------------------------------------------------- *
5 * Simbody(tm): SimTKcommon *
6 * -------------------------------------------------------------------------- *
7 * This is part of the SimTK biosimulation toolkit originating from *
8 * Simbios, the NIH National Center for Physics-Based Simulation of *
9 * Biological Structures at Stanford, funded under the NIH Roadmap for *
10 * Medical Research, grant U54 GM072970. See https://simtk.org/home/simbody. *
11 * *
12 * Portions copyright (c) 2008-14 Stanford University and the Authors. *
13 * Authors: Peter Eastman *
14 * Contributors: Michael Sherman *
15 * *
16 * Licensed under the Apache License, Version 2.0 (the "License"); you may *
17 * not use this file except in compliance with the License. You may obtain a *
18 * copy of the License at http://www.apache.org/licenses/LICENSE-2.0. *
19 * *
20 * Unless required by applicable law or agreed to in writing, software *
21 * distributed under the License is distributed on an "AS IS" BASIS, *
22 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
23 * See the License for the specific language governing permissions and *
24 * limitations under the License. *
25 * -------------------------------------------------------------------------- */
26
29
30namespace SimTK {
31
32class PolygonalMesh;
33class PolygonalMeshImpl;
34
35// We only want the template instantiation to occur once. This symbol is defined
36// in the SimTKcommon compilation unit that defines the PolygonalMesh class but
37// should not be defined any other time.
38#ifndef SimTK_SIMTKCOMMON_DEFINING_POLYGONALMESH
39 extern template class PIMPLHandle<PolygonalMesh, PolygonalMeshImpl, true>;
40#endif
41
72public:
75
88 int resolution = 1);
89
122 static PolygonalMesh createBrickMesh(const Vec3& halfDims,
123 int resolution = 1);
124
154 Real radius,
155 Real halfLength,
156 int resolution=1);
157
160 void clear();
161
163 int getNumFaces() const;
165 int getNumVertices() const;
166
171 const Vec3& getVertexPosition(int vertex) const;
174 int getNumVerticesForFace(int face) const;
181 int getFaceVertex(int face, int vertex) const;
182
187 int addVertex(const Vec3& position);
188
197 int addFace(const Array_<int>& vertices);
198
207
215
227 void loadFile(const String& pathname);
228
233 void loadObjFile(const String& pathname);
234
240 void loadObjFile(std::istream& file);
241
246 void loadVtpFile(const String& pathname);
247
256 void loadStlFile(const String& pathname);
257
258private:
259 explicit PolygonalMesh(PolygonalMeshImpl* impl) : HandleBase(impl) {}
260 void initializeHandleIfEmpty();
261};
262
263} // namespace SimTK
264
265#endif // SimTK_SimTKCOMMON_POLYGONAL_MESH_H_
This header provides declarations of the user-visible portion of the PIMPLHandle template classes tha...
#define SimTK_SimTKCOMMON_EXPORT
Definition SimTKcommon/include/SimTKcommon/internal/common.h:224
This is the header which should be included in user programs that would like to make use of all the S...
The Array_<T> container class is a plug-compatible replacement for the C++ standard template library ...
Definition Array.h:1520
This class provides some infrastructure useful in making SimTK Private Implementation (PIMPL) classes...
Definition PrivateImplementation.h:106
This class provides a description of a mesh made of polygonal faces (not limited to triangles).
Definition PolygonalMesh.h:71
static PolygonalMesh createSphereMesh(Real radius, int resolution=1)
Create a sphere-shaped mesh, with roughly uniform mesh elements.
PolygonalMesh & scaleMesh(Real scale)
Scale a mesh by multiplying every vertex by a fixed value.
void loadFile(const String &pathname)
Attempt to interpret the given file as a mesh file, with the format determined from the file name ext...
static PolygonalMesh createBrickMesh(const Vec3 &halfDims, int resolution=1)
Create a brick-shaped mesh.
static PolygonalMesh createCylinderMesh(const UnitVec3 &axis, Real radius, Real halfLength, int resolution=1)
Create a cylinder-shaped mesh, with the long axis in a given direction.
void loadStlFile(const String &pathname)
Load an STL file, adding the vertices and faces it contains to this mesh and ignoring anything else i...
void loadObjFile(std::istream &file)
Alternate signature for Wavefront OBJ format that takes an already-open istream rather than a pathnam...
int getNumVerticesForFace(int face) const
Get the number of vertices that make up a particular face.
int addFace(const Array_< int > &vertices)
Add a face to the mesh.
int getFaceVertex(int face, int vertex) const
Get the index of one of the vertices of a face.
void clear()
Restore this PolygonalMesh to its default-constructed state, meaning that it will contain no vertices...
const Vec3 & getVertexPosition(int vertex) const
Get the position of a vertex in the mesh.
PolygonalMesh & transformMesh(const Transform &X_AM)
Transform a mesh by applying the given Transform to every vertex, leaving the mesh permanently change...
void loadVtpFile(const String &pathname)
Load a VTK PolyData (.vtp) file, adding the vertices and faces it contains to this mesh and ignoring ...
void loadObjFile(const String &pathname)
Load a Wavefront OBJ (.obj) file, adding the vertices and faces it contains to this mesh,...
int getNumVertices() const
Get the number of vertices in the mesh.
PolygonalMesh()
Create an empty PolygonalMesh, with no vertices or faces.
Definition PolygonalMesh.h:74
int getNumFaces() const
Get the number of faces in the mesh.
int addVertex(const Vec3 &position)
Add a vertex to the mesh.
SimTK::String is a plug-compatible std::string replacement (plus some additional functionality) inten...
Definition String.h:62
This is the top-level SimTK namespace into which all SimTK names are placed to avoid collision with o...
Definition Assembler.h:37
SimTK_Real Real
This is the default compiled-in floating point type for SimTK, either float or double.
Definition SimTKcommon/include/SimTKcommon/internal/common.h:606