Subject: CGAL users discussion list
List archive
- From: tang <>
- To:
- Subject: Re: [cgal-discuss] Boolean operations between unclosed polyhedrons?
- Date: Tue, 15 Apr 2014 20:01:20 -0700 (PDT)
Hi Zohar,
Could you please help me to take a look at the following code in Carve to
read OFF file? The code crashed at this line:
carve::mesh::MeshSet<3> poly1(faces);
In addition, could you please tell me how to write the code to write OFF
file (the function 'write_off')?
Thanks,
Tang Laoya
/// file: test_carve_polyhedrons_2.cpp
// Begin License:
// Copyright (C) 2006-2011 Tobias Sargeant
().
// All rights reserved.
//
// This file is part of the Carve CSG Library (http://carve-csg.com/)
//
// This file may be used under the terms of the GNU General Public
// License version 2.0 as published by the Free Software Foundation
// and appearing in the file LICENSE.GPL2 included in the packaging of
// this file.
//
// This file is provided "AS IS" with NO WARRANTY OF ANY KIND,
// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE.
// End:
#include <carve/csg.hpp>
#include <carve/poly.hpp>
#include <carve/geom.hpp>
#include <vector>
#include <iostream>
void read_off(std::vector<carve::mesh::MeshSet<3>::vertex_t> *verts,
std::vector<carve::mesh::MeshSet<3>::face_t *> *faces,char* file)
{
FILE *fp=fopen(file,"r");
char off[10];
int np, nf, nv, v;
double x,y,z;
std::vector<carve::mesh::MeshSet<3>::vertex_t *> corners;
fscanf(fp,"%s\n",&off);
fscanf(fp,"%d %d\n",&np,&nf);
for (int i=0;i<np;i++)
{
fscanf(fp,"%e %e %e\n",&x,&y,&z);
verts->push_back(carve::mesh::MeshSet<3>::vertex_t(carve::geom::VECTOR(x,y,z)));
}
for (int i=0;i<nf;i++)
{
fscanf(fp,"%d",&nv);
for (int j=0;j<nv;j++)
{
fscanf(fp,"%d",&v);
corners.push_back(&(*verts)[v]);
}
faces->push_back(new
carve::mesh::MeshSet<3>::face_t(corners.begin(),
corners.end()));
corners.clear();
}
fclose(fp);
}
void write_off(carve::mesh::MeshSet<3> poly,char *file)
{
}
int main()
{
//create a tetrahedron
#define mytest
#ifdef mytest
std::vector<carve::mesh::MeshSet<3>::vertex_t> verts;
std::vector<carve::mesh::MeshSet<3>::face_t *> faces;
char
*file="E:\\Users\\tang\\tang\\mesh\\CSG\\carve-clone\\mytest\\a1.off";
read_off(&verts,&faces,file);
carve::mesh::MeshSet<3> poly1(faces);
file="E:\\Users\\tang\\tang\\mesh\\CSG\\carve-clone\\mytest\\a2.off";
read_off(&verts,&faces,file);
carve::mesh::MeshSet<3> poly2(faces);
carve::mesh::MeshSet<3> *is_poly = carve::csg::CSG().compute(&poly1,
&poly2,
carve::csg::CSG::A_MINUS_B);
#else
std::vector<carve::mesh::MeshSet<3>::vertex_t> tet_verts;
std::vector<carve::mesh::MeshSet<3>::face_t *> tet_faces;
std::vector<carve::mesh::MeshSet<3>::vertex_t *> corners;
tet_verts.push_back(carve::mesh::MeshSet<3>::vertex_t(carve::geom::VECTOR(0.0,
0.0, 0.0)));
tet_verts.push_back(carve::mesh::MeshSet<3>::vertex_t(carve::geom::VECTOR(1.0,
0.0, 0.0)));
tet_verts.push_back(carve::mesh::MeshSet<3>::vertex_t(carve::geom::VECTOR(0.0,
1.0, 0.0)));
tet_verts.push_back(carve::mesh::MeshSet<3>::vertex_t(carve::geom::VECTOR(0.0,
0.0, 1.0)));
corners.push_back(&tet_verts[0]);
corners.push_back(&tet_verts[2]);
corners.push_back(&tet_verts[1]);
tet_faces.push_back(new carve::mesh::MeshSet<3>::face_t(corners.begin(),
corners.end()));
corners.clear();
corners.push_back(&tet_verts[0]);
corners.push_back(&tet_verts[1]);
corners.push_back(&tet_verts[3]);
tet_faces.push_back(new carve::mesh::MeshSet<3>::face_t(corners.begin(),
corners.end()));
corners.clear();
corners.push_back(&tet_verts[0]);
corners.push_back(&tet_verts[3]);
corners.push_back(&tet_verts[2]);
tet_faces.push_back(new carve::mesh::MeshSet<3>::face_t(corners.begin(),
corners.end()));
corners.clear();
corners.push_back(&tet_verts[1]);
corners.push_back(&tet_verts[2]);
corners.push_back(&tet_verts[3]);
tet_faces.push_back(new carve::mesh::MeshSet<3>::face_t(corners.begin(),
corners.end()));
carve::mesh::MeshSet<3> tetrahedron(tet_faces);
//create a triangle
std::vector<carve::mesh::MeshSet<3>::vertex_t> tri_verts;
std::vector<carve::mesh::MeshSet<3>::face_t *> tri_faces;
//Vertices
//crashes if last coordinate set to 1e-8, but ok for 1e-7
//tri_verts.push_back(carve::mesh::MeshSet<3>::vertex_t(carve::geom::VECTOR(-0.3,
0.0, 1e-8)));
//tri_verts.push_back(carve::mesh::MeshSet<3>::vertex_t(carve::geom::VECTOR(1.0,
0.0, 1.1e-8)));
//tri_verts.push_back(carve::mesh::MeshSet<3>::vertex_t(carve::geom::VECTOR(-0.3,
1.0, 1.1e-8)));
tri_verts.push_back(carve::mesh::MeshSet<3>::vertex_t(carve::geom::VECTOR(-0.1,
-0.1, 0.5)));
tri_verts.push_back(carve::mesh::MeshSet<3>::vertex_t(carve::geom::VECTOR(1.1,
-0.1, 0.5)));
tri_verts.push_back(carve::mesh::MeshSet<3>::vertex_t(carve::geom::VECTOR(-0.1,
1.1, 0.5)));
//Face
corners.clear();
corners.push_back(&tri_verts[0]);
corners.push_back(&tri_verts[2]);
corners.push_back(&tri_verts[1]);
tri_faces.push_back(new carve::mesh::MeshSet<3>::face_t(corners.begin(),
corners.end()));
// corners.clear();
// corners.push_back(&tri_verts[0]);
// corners.push_back(&tri_verts[1]);
// corners.push_back(&tri_verts[2]);
// tri_faces.push_back(new carve::mesh::MeshSet<3>::face_t(corners));
carve::mesh::MeshSet<3> triangle(tri_faces);
//cut triangle with tetrahedron.
carve::mesh::MeshSet<3> *is_poly = carve::csg::CSG().compute(&tetrahedron,
&triangle,
carve::csg::CSG::B_MINUS_A);
#endif
// std::cout << "Tetrahedron is ... \n" << tetrahedron;
// std::cout << "Triangle is ... \n" << triangle;
// std::cout << "Intersection is ... \n" << *is_poly;
return 0;
}
--
View this message in context:
http://cgal-discuss.949826.n4.nabble.com/Boolean-operations-between-unclosed-polyhedrons-tp4659114p4659139.html
Sent from the cgal-discuss mailing list archive at Nabble.com.
- Re: [cgal-discuss] Boolean operations between unclosed polyhedrons?, (continued)
- Re: [cgal-discuss] Boolean operations between unclosed polyhedrons?, Zohar, 04/13/2014
- Re: [cgal-discuss] Boolean operations between unclosed polyhedrons?, tang, 04/13/2014
- Re: [cgal-discuss] Boolean operations between unclosed polyhedrons?, tang, 04/13/2014
- Re: [cgal-discuss] Boolean operations between unclosed polyhedrons?, tang, 04/13/2014
- Re: [cgal-discuss] Boolean operations between unclosed polyhedrons?, Zohar, 04/13/2014
- Re: [cgal-discuss] Boolean operations between unclosed polyhedrons?, Zohar, 04/13/2014
- Re: [cgal-discuss] Boolean operations between unclosed polyhedrons?, Zohar, 04/13/2014
- Re: [cgal-discuss] Boolean operations between unclosed polyhedrons?, tang, 04/14/2014
- Re: [cgal-discuss] Boolean operations between unclosed polyhedrons?, Zohar, 04/14/2014
- Re: [cgal-discuss] Boolean operations between unclosed polyhedrons?, tang, 04/15/2014
- Re: [cgal-discuss] Boolean operations between unclosed polyhedrons?, tang, 04/16/2014
- Re: [cgal-discuss] Boolean operations between unclosed polyhedrons?, Andreas Fabri, 04/16/2014
- Re: [cgal-discuss] Boolean operations between unclosed polyhedrons?, Andreas Fabri, 04/16/2014
- Re: [cgal-discuss] Boolean operations between unclosed polyhedrons?, tang, 04/16/2014
- Re: [cgal-discuss] Boolean operations between unclosed polyhedrons?, Zohar, 04/13/2014
- Re: [cgal-discuss] Boolean operations between unclosed polyhedrons?, Zohar, 04/13/2014
- Re: [cgal-discuss] Boolean operations between unclosed polyhedrons?, Zohar, 04/13/2014
Archive powered by MHonArc 2.6.18.