/usr/include/libwildmagic/Wm5SurfaceMesh.h is in libwildmagic-dev 5.13-1+b2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 | // Geometric Tools, LLC
// Copyright (c) 1998-2014
// Distributed under the Boost Software License, Version 1.0.
// http://www.boost.org/LICENSE_1_0.txt
// http://www.geometrictools.com/License/Boost/LICENSE_1_0.txt
//
// File Version: 5.0.1 (2010/10/01)
#ifndef WM5SURFACEMESH_H
#define WM5SURFACEMESH_H
#include "Wm5GraphicsLIB.h"
#include "Wm5TriMesh.h"
#include "Wm5EdgeKey.h"
#include "Wm5Float2Array.h"
#include "Wm5SurfacePatch.h"
namespace Wm5
{
class WM5_GRAPHICS_ITEM SurfaceMesh : public TriMesh
{
WM5_DECLARE_RTTI;
WM5_DECLARE_NAMES;
WM5_DECLARE_STREAM(SurfaceMesh);
public:
// Construction and destruction. If there are T triangles, ibuffer
// has 3*T elements, patches has T elements, and spkParams has 3*T
// elements. Each triangle has a patch for constructing vertices in the
// subdivision. The subdivision requires knowing the parameter values
// at the vertices of the original triangles. SurfaceMesh assumes
// responsibility for deleting the patches array (so it must be
// dynamically allocated). The parameter allowDynamicChange should be
// set to 'true' when you plan on dynamically changing the surface
// patches. For example, you might modify the control points in a Bezier
// surface patch.
SurfaceMesh (VertexFormat* vformat, VertexBuffer* vbuffer,
IndexBuffer* ibuffer, Float2Array* params, SurfacePatchPtr* patches,
bool allowDynamicChange);
virtual ~SurfaceMesh ();
// Level of subdivision. The 'level' value must be nonnegative.
void SetLevel (int level);
int GetLevel () const;
// Call this function when one or more of your surface patches has
// dynamically changed.
void OnDynamicChange ();
// Free up all memory used by the object, other than the TriMesh data.
// The intent is that the surface mesh is in its final form. Once this
// function is called, SetLevel is ignored.
void Lock ();
bool IsLocked () const;
protected:
VertexBufferPtr mOrigVBuffer;
IndexBufferPtr mOrigIBuffer;
Float2ArrayPtr mOrigParams;
SurfacePatchPtr* mPatches;
int mNumFullVertices, mNumPatches, mLevel;
private:
// Support for subdivision of the mesh.
class Edge
{
public:
Edge (int v0 = -1, int v1 = -1);
// Support for std::set.
bool operator< (const Edge& edge) const;
// Surface for subdivision evaluations.
SurfacePatchPtr Patch;
// Indices for the vertices.
int V[2];
// Surface parameter values for the endpoints.
Float2 Param[2];
// Index for the midpoint.
int VMid;
// Surface parameter value for the midpoint.
Float2 ParamMid;
// Number of triangles sharing the edge.
int References;
};
typedef std::map<EdgeKey,Edge> EdgeMap;
class Triangle
{
public:
Triangle ();
// The surface for subdivision evaluations.
SurfacePatchPtr Patch;
// Indices for the vertices.
int V[3];
};
void Allocate (int& numTotalVertices, int& numTotalEdges,
EdgeMap& edgeMap, int& numTotalTriangles, Triangle*& triangles);
void Subdivide (int& numVertices, int& numEdges, EdgeMap& edgeMap,
int& numTriangles, Triangle* triangles);
void InsertInto (EdgeMap& edgeMap, SurfacePatch* patch, int v0, int v1,
const Float2& param0, const Float2& param1, int newReferences);
// Support for dynamic changes in the surface patches.
class SurfaceInfo
{
public:
SurfaceInfo ();
SurfacePatchPtr Patch;
Float2 Param;
};
void InitializeSurfaceInfo ();
bool mAllowDynamicChange;
SurfaceInfo* mSInfo;
};
WM5_REGISTER_STREAM(SurfaceMesh);
typedef Pointer0<SurfaceMesh> SurfaceMeshPtr;
}
#endif
|