geometrycollective / boundary-first-flattening Goto Github PK
View Code? Open in Web Editor NEWLicense: MIT License
License: MIT License
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 ?
I'm actually not sure if BFF is supposed to handle geometry like this, but it would definitely be great if it would! So for "future improvement", I think this is a nice geometry to add to the testbed.
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?)
MeshLab view of the object; circled in red: BFF output mesh
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.
When I input the obj file, the output file is still not flat.
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?
when the OBJ file to import,but has a error,the file is from Maya2018,
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.
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
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.
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.
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
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.
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!
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
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.
Hi,
Is it possible to get example how to used compiled library for Windows Visual Studio Console Application (the most simple functionality of BFF)?
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?
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
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:
While originally is supposed to generate:
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?
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.
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
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?
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
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)?
Could you comment on the automatic flattening of the attached mesh? It is developable up to numerics but it gets significantly distorted. I am using your windows app. It there a way to obtain a more refined parameterization?
dev_hole.zip
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?
i have this obj and it won't load. why?
https://mega.nz/#!0uZj2SzB!eEKjwZDcnwT0newJuLqHdNUH4DrjIl9e_EXTzbDQJ0Q
Any chance to get the Windows build updated to latest version? I see it's a couple version behind.
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 :
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?
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
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
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?
Hello,
Is there any way to flatten the mesh using bff-command-line?
Thanks in advance.
Hi, is it possible to export the flattened mesh as an obj or ply?
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?
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!
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).
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!
Heya - I'm still new to cone placement and conformal mapping in general but figured I'd try asking here. I'd like to map this column mesh and have straight edge boundaries on the left and right on the flat mesh. I tried manually placing the cones but can only select some vertices and not others. This is the closest I can get to straight lines on the L/R. Any tips/thoughts?
file:
https://drive.google.com/file/d/1_jqVtFZKLREAlXKJD11Vp8hp-m-jbxFg/view?usp=sharing
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.
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.
Flatten to disk, Doesn't appear to be any different
nCOnes = 2, Seems to work ,but matches the result above
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.
See guidelines on https://www.cmu.edu/marcom/brand-standards/logos-colors-type.html
Are there any plans for such surfaces, and what are the main challenges for their support?
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
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.
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.)
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 ?
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!
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.