#define-ing FAST_COMPILE in PreProcess.h. However, this will make the compilation significantly slower.
#define-ed.
#define-ed.
<output header>.<client index>.ply.
Reconstructors.h.
Using the functionality requires requires choosing a finite element type, FEMSig and defining one input stream and two output streams.
FEMSig describes the finite element type, which is a composite of the degree of the finite element and the boundary conditions it satisfies. Given an integer valued Degree and boundary type BType (one of BOUNDARY_FREE, BOUNDARY_DIRICHLET, and BOUNDARY_NEUMANN defined in BSplineData.h), the signature is defined by setting:
static const unsigned int FEMSig = FEMDegreeAndBType< Degree , BoundaryType >::Signature;
Real is the floating point type used to represent data (typically float) and Dim is the integer dimension of the space (fixed at Dim=3). The namespace Reconstructor is omitted for brevity.
InputSampleStream< Real , Dim > class.
The base class has two pure virtual methods that need to be over-ridden:
void reset( void ):bool base_read( Point< Real , Dim > &p , Point< Real , Dim > &n ):true if the read was successful and false if the read failed (i.e. the end of the stream was reached). The class Point< Real , Dim > represents a point in Dim-dimensional space, can be accessed like an array (i.e. overloads the bracked operator) and supports algebraic manipulation like addition and scalar multiplication.
OutputPolygonStream class.
The base class has one pure virtual method that needs to be over-ridden:
void base_write( const std::vector< node_index_type > &polygon ):std::vector of integral indices. (The type node_index_type is an unsigned int if the BIG_DATA macro is not defined an unsigned long long if it is.)
OutputVertexStream< Real , Dim > class.
The base class has one pure virtual method that needs to be over-ridden:
void base_write( Point< Real , Dim > p , Point< Real , Dim > g , Real w ):p, as well as the gradient, g, and density weight, w if the extraction code is asked to compute those.
Poisson::Implicit< Real , Dim , FEMSig >::Implicit( InputSampleStream< Real , Dim > &sStream , SolutionParameters< Real > sParams ):sStream) and a description of the reconstruction parameters (sParams) desribing the depth, number of samples per node, etc. (Reconstructors.h, line 229). This object derives from Implicit< Real , Dim , FEMSig >.
void Implicit< Real , Dim , FEMSig >::extractLevelSet( OutputVertexStream< Real , Dim > &vStream , &pStream , LevelSetExtractionParameters meParams ):vStream and pStream) and parameters for level-set extraction (meParams) and computes the extracted triangle/polygon mesh, writing its vertices and faces into the corresponding output streams as they are generated (Reconstructors.h, line 98).
Reconstruction.example.cpp code.
std::vector of std::vector< int >s is defined in lines 164-179 and constructed in line 311.
std::vector of Reals is desfined in lines 182-192 and constructed in line 312.
RGBColor type defined in lines 60-75).
% PoissonRecon --in horse.npts --out horse.ply --depth 10
or the SSD surface reconstructor
% SSDRecon --in horse.npts --out horse.ply --depth 10
% PoissonRecon --in bunny.points.ply --out bunny.ply --depth 10 --pointWeight 0
By default, the Poisson surface reconstructor uses degree-2 B-splines. A more efficient reconstruction can be obtained using degree-1 B-splines:
% PoissonRecon --in bunny.points.ply --out bunny.ply --depth 10 --pointWeight 0 --degree 1
(The SSD reconstructor requires B-splines of degree at least 2 since second derivatives are required to formulate the bi-Laplacian energy.)
% PoissonRecon --in eagle.points.ply --out eagle.pr.ply --depth 10
(with the RGBA color properties automatically detected from the .ply header).% SSDRecon --in eagle.points.ply --out eagle.ssd.ply --depth 10 --density
using the --density flag to indicate that density estimates should be output with the vertices of the mesh, and then calling:
% SurfaceTrimmer --in eagle.ssd.ply --out eagle.ssd.trimmed.ply --trim 7
to remove all subsets of the surface where the sampling density corresponds to a depth smaller than 7.% ChunkPly --in 1 eagle.ssd.trimmed.ply --out eagle.ssd.trimmed.chnks --width 4
which partitions the reconstruction into 11 pieces.
% PoissonRecon --in torso.points.ply --envelope torso.envelope.ply --out torso.pr.ply --depth 10
using the --envelope flag to specify the water-tight mesh constraining the reconstruction.<in dir> and that a networked temporary folder <temp dir> exists, a distributed reconstruction of the eagle over 4 clients at depth 10, outputting the reconstruction to eagle.ply (relative to the directory from the server is run), can be obtained by calling:
% PoissonReconServer --count 4 --depth 10 --in <in dir>/eagle.points.ply --tempDir <temp dir>/temp --out eagle.ply
(with the RGBA color properties automatically detected from the .ply header).Server Address: <IPv4 address>:<port>
The four clients can then be executed by connecting them to the server:
% PoissonReconClient --port <port> --address <IPv4 address>
% PoissonReconClient --port <port> --address <IPv4 address>
% PoissonReconClient --port <port> --address <IPv4 address>
% PoissonReconClient --port <port> --address <IPv4 address>
Alternatively, the four clients can be executed serially:
% PoissonReconClient --port <port> --address <IPv4 address> --multi 4
% PointInterpolant --inValues quadratic.2D.fitting.samples --tree quadratic.2D.tree --dim 2
Then, the reconstructed function can be evaluated at the evaluation samples by calling the adaptive tree visualization:
% AdaptiveTreeVisualization --in quadratic.2D.tree --samples quadratic.2D.evaluation.samples
This will output the evaluation positions and values:
0 0 1.33836e-05
0.5 0 0.25001
0.5 0.5 0.500006
2 2 nan
Note that because the (last) evaluation position (2,2) is outside the bounding box of the fitting samples, the function cannot be evaluated at this point and a value of "nan" is output.
% ImageSitching --in pixels.png labels.png --out out.png
% EDTInHeat --in horse.ply --out horse.edt --depth 9
Then, the visualization code can be used to extract iso-surfaces from the implicit function.% AdaptiveTreeVisualization.exe --in horse.edt --mesh horse_0.01_.ply --iso 0.01 --flip
(By default, the surface is aligned so that the outward facing normal aligns with the negative gradient. Hence, specifying the --flip flag is used to re-orient the surface.)% AdaptiveTreeVisualization.exe --in horse.edt --mesh horse_0.25_.ply --iso 0.25 --flip
(Since the default --scale is 2, a value of 0.25 should still give a surface that is contained within the bounding box.)% AdaptiveTreeVisualization.exe --in horse.edt --grid horse.grid
PoissonRecon and SSDRecon to support processing of 2D point sets.
PoissonRecon, SSDRecon, and AdaptiveTreeVisualization to support ouput to .jpg and .png image files.
DynamicFactory object is dynamically allocated and not only known at construction time.
Poisson and SSD to be classes for cleaner library interface in Reconstruction.example.cpp.
--width bug in estimating scale factor.
--width compatibility bug with default depth.
--exact bug.
ChunkPly bug.
--keepSeparate flag to PoissonReconServer to output non-fused geometry..
--width bug.
--kernelDepth bug that occured when the --width flag was used to set the reconstruction depth.
_mktemp.
_mktemp.
PoissonRecon namespace.
SANITIZED_PR.
NestedVector to reduce synchronization.