Code Monkey home page Code Monkey logo

boundary-first-flattening's People

Contributors

geometrycollective avatar qnzhou avatar rohan-sawhney avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

boundary-first-flattening's Issues

Support quad meshes

Implement basic support for quad meshes by triangulating internally, and copying the solution back to the original quad mesh upon write.

To make this work, tag all "diagonals" inserted by the triangulation, so that cuts never pass through edges that aren't in the original quad mesh.

Vulkan: Failed to query...

Any help would be appreciated!

As I open the viewer, the command line writes the following:

       Vulkan: Failed to query instance extension count: Initialization of an object could not be completed 
       for implementation-specific reasons

The viewer works with one exception (unless I'm miss-understanding), I am unable to export the flattened model. I assume by checking the ''Export Nomralized UVs'', and then clicking ''Export'' it will export a .obj of the flattened model (this is where I might be wrong).
It is what I'm trying to use this tool for! :)

Otherwise, I am unable to open the command line specific to BFF. As I am unable to successfully set up the SuiteSparse dependency. I'm unfamiliar with the last portion of the provided guide:

              (5) Compile and install:

               In Visual Studio, open SuiteSparseProject.sln and build the INSTALL project in Debug and 
               Release. You may get hundreds of warnings, but it's ok.
               In Unix: Just execute make install or sudo make install if you did set the install prefix to /usr/*
               (6) Notice that a file SuiteSparseConfig.cmake should be located in your install directory. It                                       
               will be required for your programs to correctly build and link against SuiteSparse.

               (7) Only for Windows: You will have to append                    
               CMAKE_INSTALL_PREFIX\lib*\lapack_blas_windows\ and CMAKE_INSTALL_PREFIX\lib* to the                    
               environment variable PATH before executing any program, for Windows to localize the                    
               required BLAS/Fortran libraries (.DLLs).

This software will allow us to 3D print flattened version of organic 3D models if we can get it running!

Command line interface giving same 3D mesh as output

I am using Ubuntu 16.04. I have followed procedure mentioned in https://geometrycollective.github.io/boundary-first-flattening/ for compiling source code. i.e.

git clone https://github.com/GeometryCollective/boundary-first-flattening.git
cd boundary-first-flattening && git submodule update --init --recursive
mkdir build && cd build && cmake ..
make -j 4

Also I have installed following dependencies :

  1. SuiteSparse : sudo apt-get install liblapack-dev libblas-dev
  2. OpenGL : sudo apt-get install libglu1-mesa-dev freeglut3-dev mesa-common-dev

After this when I ran command line for flattening using :
./bff-command-line in.obj out.obj

The output(out.obj) I got is similar to input(in.obj). I have tried it on face.obj also but get similar results.

Is anything going wrong in my attempt?

Support meshes with multiple components, nonmanifold meshes

Should be an easy change to support multiple components (just parameterize each component separately). On the GUI end, easiest to support this by just having a current "active" component (so that we don't need to generalize the palette or the widgets).

Simplest way to handle nonmanifold meshes is to partition into multiple manifold components (e.g., by simply splitting nonmanifold edges/vertices), though not clear how well this will work in practice.

Fitting a target shape

Hi,

Really great work, guys. Thanks.

I'd like to experiment with some target shapes. Could you tell me how to use the API, please?
I suppose the only function is void BFF::flattenToShape(const std::vector<Vector>& gamma);.
Is the argument a 2D polyline representing the target closed polygon? Do you provide a way to match the first boundary vertex with the beginning of the input polygon (especially when the mesh is read from an OBJ file)?

Flatten to disk with command line?

Does this seem to work properly? Not sure what it's suppose to do exactly ,but can't see any difference when using it. I finally figured out that nCones needed to be 0 for the "map to sphere" to work.

nCones, Seems to work
cones

Map to sphere, Seems to work
map_sphere

Flatten to disk, Doesn't appear to be any different
map_disk

nCOnes = 2, Seems to work ,but matches the result above
cones_2

You can see the same result for the last two. That's why it has me wondering if the "flatten to disk" does anything at all.

Validating BFF

Hi,

This is not an "issue" but just a general question. Though I assume the method you've implemented is mathematically correct, have you implemented a specific validation protocol?

Given how mathematically sound your method is I guess you could design specific validation methods (like some form of bounds and relationships using Sobolev Space theory).

Regards

VisualStudio Console Application

Hi,

Is it possible to get example how to used compiled library for Windows Visual Studio Console Application (the most simple functionality of BFF)?

Move headers to include/bff

What do you think about moving your headers into include/bff folders in the projects?

I am currently trying to couple BFF with some of our mesh code and there are for example a lot of different mesh.h to consider, so including bff/mesh.h would be better to avoid conflicts between the different projects.

I ask here before doing it myself, because moving them in my own fork will make it hard to merge any changes later on when you do not like to move the headers in your project.

BFF transforms models on export

  1. Import Mesh into BFF
  2. Calculate UVs
  3. Export Mesh

Expected: exported mesh and imported mesh align perfectly, exported mesh has only texture coordinates added

Actual: exported mesh has changed in scale and position (seems to be normalized?)

image

MeshLab view of the object; circled in red: BFF output mesh

texturedMesh_20k_ml.zip

Flattening generates mesh with indices = 0

Hi, as I mentioned I've been trying to integrate Eigen in your tool. I managed to do that, I run the tool as suggested, but the output is a mesh with same vertices as the original one + the new UV and but all the faces are set to 0.

My main looks like the following:

#include <Bff.h>
#include <MeshIO.h>
#include <iostream>

int main(int argc, char** argv) {

	std::ifstream ifs("./test_mesh.obj");
	std::stringstream ss_content;
	std::string content;
	std::istringstream iss_content;

	if(ifs) {
		std::cout << "Reading file!" << std::endl;
		ss_content << ifs.rdbuf();
		content = ss_content.str();
		iss_content = std::istringstream(content);
	}

	ifs.close();

	Mesh test_mesh;

	if(!MeshIO::read(iss_content,test_mesh))
		std::cout << "Reading problems!" << std::endl;

	BFF flattening_module(test_mesh);

	EigenDenseMatrix boundaryData(flattening_module.data->bN);

	std::cout << "flattening mesh" << std::endl;

	flattening_module.flatten(boundaryData,true);

	std::cout << "mesh flattened, now storing into a file" << std::endl;

	test_mesh.write("./output_test_mesh.obj", false, false);

	return 0;

}

The only code I changed are the linear algebra wrappers, but nothing has changed inside the Mesh BFF, BFFData and MeshIO, so I assume the manipulation of the indices should be the same as before.

I cannot explain why I'm getting something like the following for the faces:

Input:


mtllib plane.mtl
o Plane
v 15.000000 -15.000000 0.000000
v 15.000000 15.000000 0.000000
v -15.000000 15.000000 0.000000
v -15.000000  -15.000000 0.000000

vt 15.000000 0.000000
vt 15.000000 15.000000
vt 0.000000 15.000000
vt 0.000000 0.000000

usemtl Material
s off
f 1/1 2/2 3/3
f 1/1 3/3 4/4

Output:

v 15 -15 0
v 15 15 0
v -15 15 0
v -15 -15 0
vt 11.682 11.682
vt -11.682 11.682
vt 11.682 -11.682
vt -11.682 11.682
vt -11.682 -11.682
vt 11.682 -11.682
f 0/0 0/0 0/0
f 0/0 0/0 0/0

Any advice?

Are seamless maps in sight?

Just to bump it up - for many things this feature is needed - many apps require those seams to be minimized...
And kudos for this tool - it is very neat!

Iterator problem in MeshIO.buildMesh

I believe I have found an issue in the MeshIO::buildMesh method.

A new HalfEdge is added to the mesh.halfEdges vector array, but the HalfEdgeIter end was not updated to point to this new location. This caused an _ITERATOR_DEBUG_LEVEL == 2 debug error to occur.

Adding the line mentioned below fixed the problem for me. Please check and verify to ensure this is the correct fix for the solution as I haven't yet looked fully into the algorithm itself.

	// create a new halfedge
	HalfEdgeIter bH = mesh.halfEdges.insert(mesh.halfEdges.end(), HalfEdge());
	bH->index = (int)mesh.halfEdges.size() - 1;
	boundaryCycle.push_back(bH);

	end = mesh.halfEdges.end(); //Line to fix the problem.

missing bin2c.cmake

Hi,

thanks a lot for sharing this piece of code. The nanogui copy is missing the bin2c.cmake file in deps/nanogui/resources. After a:

wget https://raw.githubusercontent.com/wjakob/nanogui/master/resources/bin2c.cmake

everything compiled and run fine (OSX).

There is also an error in this page: https://geometrycollective.github.io/boundary-first-flattening/ which is pointing to:

https://github.com/rohan-sawhney/boundary-first-flattening.git

instead of:

https://github.com/GeometryCollective/boundary-first-flattening

correspondence between the 3D vertex and UV coordinates

Hi, I am trying to extract the uv coordinate after flattening. I wrote my code referencing to export funciton in MeshIO

for (FaceIter f = m.faces.begin(); f != m.faces.end(); f++)
{
        HalfEdgeCIter he = f->he;
	do {
		const Vector& uv = he->wedge()->uv;
                int v_idx = he->next->vertex->index + 1;
                double uv_coord[2] = { uv.x, uv.y };
	        uv_map.insert(pair<int, double*>(idx, uv_coord));
		he = he->next;
	} while (he != f->he);
}

But I found out that the uv coordinates I got is not the uv coordinates corresponding to the vertex with v_idx.

How do I get the uv coordinates for vertex with specific index?

Using the `flatten` method in the `BFF` class, preserving area.

Hi,

How is the following method:

    // computes automatic flattening with minimal area distortion
    //    -boundaryData stores either the target angles at boundary vertices (if
    //     givenScaleFactors is false) -OR- the target scale factors (if givenScaleFactors
    //     is true)
    // (resulting flattening is stored in Corner::uv for each corner of this->mesh)
    void flatten(DenseMatrix& boundaryData, bool givenScaleFactors);

The kind of flattening I'm looking for is the one that reduces area distorsion. So I would load for example an .obj file, store it into a Mesh data structure (the one provided by your tool which is an HalfEdge data structure), later instantiate an BFF object. Now I'm stuck in figuring out how to use the flatten method, can you please guide me through it maybe with some pseudocode?

Regards

Building from sourse on visual studio windows

Hi,

I would like to build build code from source.

I do not need any interface, but the algoritm.
In that case do I need to install additional libraries like Eigen? Or it is part of code already?

Is there any step by step manual how to build the code from source on windows?

Flattening not succedeed after implementing eigen equivalent of cholmod routines

Hi, there's some issue with my wrappers and I'd like to know if I've implemented corretly the Eigen equivalent of some of the cholmod routines, the documentation doesn't say much.

For example you've implemented:

inline cholmod_sparse* add(cholmod_sparse *A, cholmod_sparse *B, double alpha[2], double beta[2])
{
    // C = alpha*A + beta*B
    return cholmod_l_add(A, B, alpha, beta, 1, 1, common);
}

My eigen equivalent, which actually I'm not sure anymore, is:


inline SpMat* add(SpMat *A, SpMat *B, double alpha[2], double beta[2])
{
    // C = alpha*A + beta*B
    SpMat & refA = *A;
    SpMat & refB = *B;
    
    return new SpMat(alpha[0]*refA + beta[0]*refB);
}

Where SpMat is defined as:

using SpMat = Eigen::SparseMatrix<double>;

Is my conversion correct? There're similar function throught in SparseMatrix.inl I guess the interpretation of the inputs must be the same.

But I've not clear why you have alpha,beta as vectors with two entries.

What I'm currently getting is something like:

screenshot from 2018-10-12 11-55-08

While originally is supposed to generate:

screenshot from 2018-10-12 12-30-26

Scale and transformation

Hi,

Thank you for this amazing algorithm, I am really surprised how fast it work.

I implemented it in Rhino software via command line and hope to have more time to implement C++ version as an interactive plugin.

The question I have is how does the algorithm transform the input by means of translation?

Does it calculated the average center of the mesh and moves it to origin point?
Also does the scale matter? For instance if the model would 1000 bigger or smaller would it have any problem?

bfs

Command line tutorial

It is an awesome tool!

I would like to ask if it is possible to run the code from command line. I would like to create a small plugin for a software based on C++ 64bit windows. As a result, I would like to call commands to using command line and then retrieve output. Or if there is a simple way than that let me know.

Is there is a possibility to get a tutorial how to do this?

I was thinking that the input could be a triangle mesh and the output would be a triangle mesh too.
For now I do not need user input.

Crash on windows

Hello,

When I configure the project on Windows, it compiles very well.
But there is a crash on the object face.obj

Is there any special configuration to do before compilation ?

Application crashes on Surface GO and how to export flattened mesh?

HI!

I have 1 problem and 1 question:
Neither the GUI or the command version of bff works on my surface GO. Both crash almost instantly, any idea what might cause this? The GUI exe does work on a Lenovo y700 though, so i'll use that for now, though the command exe also doesn't work there.

I also have a ( possibly very stupid) question; is there a way to export the flattened mesh or export the result to an image? It seems like i can only export the original, unedited mesh... Or is there a way to flatten multiple .obj files or multiple separate mesh parts in 1 go?
I want to flatten several pieces of mesh i'm using to make a clothing sewing pattern (since Blender's unwrap doesn't keep correct seam proportions) , but if i flatten all pieces separately in bff and screenshot the flattened result, they don't have correct proportions anymore since the bff zooms in on parts to make them fit the window well... Manually scaling them afterwards would be really inaccurate...

Great project though guys, this is an awesome app!

applying the inverse operation

Greetings.

Could it be theoretically feasible to - from the data computed for the flattening - give the shape of the original mesh to another flattened mesh ?
Or can the operation work only one way ?

App crashes on Mac

Hi! The app crashes while opening on Mac OS 10.13.6, while it works fine on Mac OS 10.14. Do you know what could be the problem with 10.13?

Thanks!

GUI Crash on Open - Windows

Hey guys, thanks for the awesome piece of software.

I and a few of my colleagues are having issues with the GUI version of the software in Windows. An empty command prompt opens and closes after about a second, the GUI never actually opens.

The command-line version of the tool works fine though.

Export object origin doesn't match import origin

The origin seems to get off when exporting.

You can see in Blender the objects and origin.

Green = original object
Red = object exported from Blender
Blue = object imported from BFF

export_origin
export_origin_1

After some testing, I can make the origins in Blender match the BFF object by doing "Origin to Geometry". Would be nice if BFF would keep same origin point as imported object.

Compilation problems on windows

I have problems compiling the code under windows (MSVC), especially linking the right BLAS and Lapack libraries.

I tried the libraries from SuiteSparse, clapack and OpenBLAS, but in all combinations I am missing either includes (e.g. cblas.h seems to be only in OpenBLAS) or symbols in the library when linking the result.

Which BLAS and Lapack distributions did you use to build the windows binaries?

Crash when running multiple instances of BFF on a multi-threaded environment

Hi there,
What a great piece of software!
I've been using other flattening algorithms on my applications and this one really makes a big difference in speed, stability and quality on the result flattening.

Unfortunately, it doesn't apear to support a multithreaded environment. I'm trying to flatten multiple meshes concurrently on multiple threads, and I always get a crash during the flattening. The crash doesn't happen if I run the flattenings sequentially.
Looking at the call stack, it appears that the crash is somewhere inside a choldmod library function.

Does anyone run into this problem and knows hot to solve it?
Is there any known limitation regarding BFF and multithreading?

Thanks in advance,
José Calvário

Compile Issue on Fresh Minimal Bionic Beaver

Hi, I think there might be a few dependencies missing from the dependency list.

I'm building on a fresh minimal Ubuntu 18.04 install.
After installing cmake, xorg-dev, libglu1-mesa-dev, and libsuitesparse-dev, make still fails:
log of standard and error out
At first, I thought that this was just a library-finding issue, but it still happens after running sudo ldconfig
I suspect that this is a dependency that is already on most systems, since the compile succeeded on another machine (running Ubuntu 17.10) already used for TF development with those packages installed.

I'm using GCC 4.7 (version described by package) or 7.3.0 (gcc --version), which makes the diagnostic message a little mystifying to me. Installing 4.8 did not help either. Version 4.6 does not appear to be in the repos anymore; maybe this is the problem?

UI issue -- need feedback for boundaries of the uv map

It's not clear where the unwrapped model will actually land within the boundaries of uv space. For example, if you "Set Boundary Angles" to make a square map, and export normalized uvs, the output map has a significant margin of unused pixels around it (only 700 x 650 pixels used in a 1024x1024 uv map.) After much experimentation, it looks like the Normalize button limits the size of the map within uv space regardless of how you move or zoom the map on the screen. But if you don't set the Normalize button, you have no idea what you'll get (sometimes only a corner of the uv map.)

If you use the Automatic setting, the map does get stretched closer to the edges of uv space, but you can't rotate the uv map to use more pixels by lying along the diagonal. Well, you can rotate the map in the UI, but it gets unrotated upon export.

See examples:
texturemap_normalized_maxzoom

texturemap_not-normalized_maxzoom

texturemap_tilted_norm

BFF Windows app not running

Hi, I've tried to download your windows app on two different machines.
In one machine runs fine, in the other one crashes.

Is there anything I can check to make sure I have all the dependencies, or that would help me to figure out what the issue is?

When I debug using visual studio 2015 I there's the error "No symbol file loaded for nanogui.dll"

Thank you

More verbose error messages when loading meshes

Until #4 and #6 are resolved, would be good to have more verbose messages explaining why certain meshes can't be loaded (currently there's just a single catch-all message). For instance, saying that quads aren't supported, or that the mesh must have either sphere or disk topology (or a single connected component). Etc. (These cases will have to be detected at some point anyway, so this may be a good first step.)

Nonsimply connected meshes not supported

A reasonable solution for meshes that are not simply connected (e.g., annuli and tori) is to cut them into one or more disks. This can easily be implemented using the greedy homology algorithm or similar.

Handle OBJ files with negative face indices

According to the OBJ spec, a negative index in a face line should be interpreted as an offset from the end of the vertex list. The current parser supports only positive indices, but should be modified to match the spec (since many packages seem to use the negative index convention).

Compiling issue on CentOS7

Hey there, is there a minimum version for suitesparce needed?

[_build]$ make -j 4
[ 25%] Built target glfw_objects
[ 26%] Built target glfw
[ 78%] Built target nanogui-obj
[ 80%] Built target nanogui
[ 81%] Linking CXX executable bff
/bin/ld: /usr/local/lib64/liblapack.a(zlarfg.f.o): undefined reference to symbol 'zscal_'
/usr/lib64/atlas/libsatlas.so.3: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
make[2]: *** [bff] Error 1
make[1]: *** [CMakeFiles/bff.dir/all] Error 2
make: *** [all] Error 2

I'm running centos7, version 4.0.2-10 of suitesparse.
Seems to relate to the order lapack and blas are included but a priorio all look fine.

Here's my cmake for good mesure:

[jniquet@mtl-rpmbuild01 _build]$ cmake ..
-- The C compiler identification is GNU 4.8.5
-- The CXX compiler identification is GNU 4.8.5
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Start to FindSuiteSparse.cmake :
--    find_library will search inside lib64 directory (can be changed with SuiteSparse_SEARCH_LIB_POSTFIX)
--    SuiteSparse_AMD_FOUND = ON : 
--       * SuiteSparse_AMD_INCLUDE_DIR = /usr/include/suitesparse
--       * SuiteSparse_AMD_LIBRARY_DEBUG = /lib64/libamd.so
--       * SuiteSparse_AMD_LIBRARY_RELEASE = /lib64/libamd.so
--       * SuiteSparse_AMD_DEFINITIONS = -DNPARTITION
--    SuiteSparse_CAMD_FOUND = ON : 
--       * SuiteSparse_CAMD_INCLUDE_DIR = /usr/include/suitesparse
--       * SuiteSparse_CAMD_LIBRARY_DEBUG = /lib64/libcamd.so
--       * SuiteSparse_CAMD_LIBRARY_RELEASE = /lib64/libcamd.so
--       * SuiteSparse_CAMD_DEFINITIONS = -DNPARTITION
--    SuiteSparse_CCOLAMD_FOUND = ON : 
--       * SuiteSparse_CCOLAMD_INCLUDE_DIR = /usr/include/suitesparse
--       * SuiteSparse_CCOLAMD_LIBRARY_DEBUG = /lib64/libccolamd.so
--       * SuiteSparse_CCOLAMD_LIBRARY_RELEASE = /lib64/libccolamd.so
--       * SuiteSparse_CCOLAMD_DEFINITIONS = -DNPARTITION
--    SuiteSparse_COLAMD_FOUND = ON : 
--       * SuiteSparse_COLAMD_INCLUDE_DIR = /usr/include/suitesparse
--       * SuiteSparse_COLAMD_LIBRARY_DEBUG = /lib64/libcolamd.so
--       * SuiteSparse_COLAMD_LIBRARY_RELEASE = /lib64/libcolamd.so
--       * SuiteSparse_COLAMD_DEFINITIONS = -DNPARTITION
--    SuiteSparse_CHOLMOD_FOUND = ON : 
--       * SuiteSparse_CHOLMOD_INCLUDE_DIR = /usr/include/suitesparse
--       * SuiteSparse_CHOLMOD_LIBRARY_DEBUG = /lib64/libcholmod.so
--       * SuiteSparse_CHOLMOD_LIBRARY_RELEASE = /lib64/libcholmod.so
--       * SuiteSparse_CHOLMOD_DEFINITIONS = -DNPARTITION
--    SuiteSparse_SPQR_FOUND = ON : 
--       * SuiteSparse_SPQR_INCLUDE_DIR = /usr/include/suitesparse
--       * SuiteSparse_SPQR_LIBRARY_DEBUG = /lib64/libspqr.so
--       * SuiteSparse_SPQR_LIBRARY_RELEASE = /lib64/libspqr.so
--       * SuiteSparse_SPQR_DEFINITIONS = -DNPARTITION
--    SuiteSparse_LDL_FOUND = ON : 
--       * SuiteSparse_LDL_INCLUDE_DIR = /usr/include/suitesparse
--       * SuiteSparse_LDL_LIBRARY_DEBUG = /lib64/libldl.so
--       * SuiteSparse_LDL_LIBRARY_RELEASE = /lib64/libldl.so
--       * SuiteSparse_LDL_DEFINITIONS = -DNPARTITION
--    SuiteSparse_BTF_FOUND = ON : 
--       * SuiteSparse_BTF_INCLUDE_DIR = /usr/include/suitesparse
--       * SuiteSparse_BTF_LIBRARY_DEBUG = /lib64/libbtf.so
--       * SuiteSparse_BTF_LIBRARY_RELEASE = /lib64/libbtf.so
--       * SuiteSparse_BTF_DEFINITIONS = -DNPARTITION
--    SuiteSparse_KLU_FOUND = ON : 
--       * SuiteSparse_KLU_INCLUDE_DIR = /usr/include/suitesparse
--       * SuiteSparse_KLU_LIBRARY_DEBUG = /lib64/libklu.so
--       * SuiteSparse_KLU_LIBRARY_RELEASE = /lib64/libklu.so
--       * SuiteSparse_KLU_DEFINITIONS = -DNPARTITION
--    SuiteSparse_CXSPARSE_FOUND = ON : 
--       * SuiteSparse_CXSPARSE_INCLUDE_DIR = /usr/include/suitesparse
--       * SuiteSparse_CXSPARSE_LIBRARY_DEBUG = /lib64/libcxsparse.so
--       * SuiteSparse_CXSPARSE_LIBRARY_RELEASE = /lib64/libcxsparse.so
--       * SuiteSparse_CXSPARSE_DEFINITIONS = -DNPARTITION
--    SuiteSparse_UMFPACK_FOUND = ON : 
--       * SuiteSparse_UMFPACK_INCLUDE_DIR = /usr/include/suitesparse
--       * SuiteSparse_UMFPACK_LIBRARY_DEBUG = /lib64/libumfpack.so
--       * SuiteSparse_UMFPACK_LIBRARY_RELEASE = /lib64/libumfpack.so
--       * SuiteSparse_UMFPACK_DEFINITIONS = -DNPARTITION
-- final check: SuiteSparse_AMD_FOUND
-- final check: SuiteSparse_CAMD_FOUND
-- final check: SuiteSparse_CCOLAMD_FOUND
-- final check: SuiteSparse_COLAMD_FOUND
-- final check: SuiteSparse_CHOLMOD_FOUND
-- final check: SuiteSparse_SPQR_FOUND
-- final check: SuiteSparse_LDL_FOUND
-- final check: SuiteSparse_BTF_FOUND
-- final check: SuiteSparse_KLU_FOUND
-- final check: SuiteSparse_CXSPARSE_FOUND
-- final check: SuiteSparse_UMFPACK_FOUND
--    SuiteSparse_USE_LAPACK_BLAS = ON : 
--       * SuiteSparse_LAPACK_BLAS_LIBRARIES : 
--          /usr/local/lib64/libblas.a
--          /usr/local/lib64/liblapack.a
-- Finish to FindSuiteSparse.cmake => SuiteSparse_FOUND=ON
-- SuiteSparse_LIBS: optimized;/lib64/libamd.so;debug;/lib64/libamd.so;optimized;/lib64/libcamd.so;debug;/lib64/libcamd.so;optimized;/lib64/libccolamd.so;debug;/lib64/libccolamd.so;optimized;/lib64/libcolamd.so;debug;/lib64/libcolamd.so;optimized;/lib64/libcholmod.so;debug;/lib64/libcholmod.so;optimized;/lib64/libspqr.so;debug;/lib64/libspqr.so;optimized;/lib64/libldl.so;debug;/lib64/libldl.so;optimized;/lib64/libbtf.so;debug;/lib64/libbtf.so;optimized;/lib64/libklu.so;debug;/lib64/libklu.so;optimized;/lib64/libcxsparse.so;debug;/lib64/libcxsparse.so;optimized;/lib64/libumfpack.so;debug;/lib64/libumfpack.so;/usr/local/lib64/libblas.a;/usr/local/lib64/liblapack.a
-- Setting build type to 'Release' as none was specified.
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Looking for pthread_create
-- Looking for pthread_create - not found
-- Looking for pthread_create in pthreads
-- Looking for pthread_create in pthreads - not found
-- Looking for pthread_create in pthread
-- Looking for pthread_create in pthread - found
-- Found Threads: TRUE  
-- Using X11 for window creation
-- Looking for XOpenDisplay in /usr/lib64/libX11.so;/usr/lib64/libXext.so
-- Looking for XOpenDisplay in /usr/lib64/libX11.so;/usr/lib64/libXext.so - found
-- Looking for gethostbyname
-- Looking for gethostbyname - found
-- Looking for connect
-- Looking for connect - found
-- Looking for remove
-- Looking for remove - found
-- Looking for shmat
-- Looking for shmat - found
-- Looking for IceConnectionNumber in ICE
-- Looking for IceConnectionNumber in ICE - found
-- Found X11: /usr/lib64/libX11.so
-- Performing Test HAS_CPP14_FLAG
-- Performing Test HAS_CPP14_FLAG - Failed
-- Performing Test HAS_CPP11_FLAG
-- Performing Test HAS_CPP11_FLAG - Success
-- NanoGUI: LTO support enabled.
-- Configuring done
-- Generating done
-- Build files have been written to: /home/jniquet/projects/boundary-first-flattening/_build

What function actually computes the UV coordinates?

Hi, I find your technique interesting and I'd like to understand a bit better your code. Can you please point out the specific source file and if possible the specific function that actually perform the UV construction?

Regards

Don't re-scale the output mesh

It appears that the output mesh gets scaled up by a factor of 10. This is a problem if you want to re-project camera images onto your newly-uv'ed mesh. Can you make it an option to leave the mesh coordinates unscaled?

`cholmod` in BFF

Hi, I'm trying to replace the cholmod in the BFF with the eigen library. I've just learnt that there's an Eigen wrapper, but this would still need the SuiteSparse library.

From the classes DenseMatrix and SparseMatrix it seems to me the features you're using are just arithmetic of Dense and Sparse matrices, so maybe I need to replace the content of these classes with the eigen equivalent, so the BFF code shouldn't be affected. I struggle to understand the use of this class:

#include <cholmod.h>

// Wraps cholmod_common
class Common {
public:
    // constructor
    Common();

    // destructor
    ~Common();

    // allows Common to be treated as cholmod_common*
    operator cholmod_common*();

protected:
    // member
    cholmod_common common;
};

From what I understood the cholmod_common is a sort of union between cholmod_dense and cholmod_sparse + other stuff for cuda maybe. Is an object of such class used somewhere? What's the purpose of it?

(The question is aimed to figure out what would be the eigen equivalent of it).

Regards

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.