diff options
author | gahr <gahr@FreeBSD.org> | 2012-02-06 23:57:20 +0800 |
---|---|---|
committer | gahr <gahr@FreeBSD.org> | 2012-02-06 23:57:20 +0800 |
commit | 59a1a7ec0f88fdb5c506d819f10b03946ad66e89 (patch) | |
tree | 01b2de3b0c0f4e4cb61f66570efa5c532242bc99 /cad/meshdev | |
parent | bafd693a5f8723e34af2eb27f8d93b8854e25ce7 (diff) | |
download | freebsd-ports-graphics-59a1a7ec0f88fdb5c506d819f10b03946ad66e89.tar.gz freebsd-ports-graphics-59a1a7ec0f88fdb5c506d819f10b03946ad66e89.tar.zst freebsd-ports-graphics-59a1a7ec0f88fdb5c506d819f10b03946ad66e89.zip |
- New port: cad/meshdev
MeshDev is a mesh comparison software. It accepts two meshes as input and
computes the geometrical deviation between the two meshes.
It return numerical values and can optionaly generate visual results (with a
pseudo-colored mesh corresponding to the measured deviation) in OpenInventor
format.
This port features a patch (by myself) to read binary and ASCII STL files.
This feature was removed in the transition from version 0.4 -> 0.5.
Distfiles are unfetchable from sourceforce. For this reason, they're hosted
on our infrastructure.
WWW: http://meshdev.sourceforge.net/
Diffstat (limited to 'cad/meshdev')
-rw-r--r-- | cad/meshdev/Makefile | 27 | ||||
-rw-r--r-- | cad/meshdev/distinfo | 2 | ||||
-rw-r--r-- | cad/meshdev/files/patch-build_Makefile.release.gcc | 21 | ||||
-rw-r--r-- | cad/meshdev/files/patch-src_FileSTL.cpp | 153 | ||||
-rw-r--r-- | cad/meshdev/files/patch-src_FileSTL.h | 39 | ||||
-rw-r--r-- | cad/meshdev/files/patch-src_Mesh.cpp | 34 | ||||
-rw-r--r-- | cad/meshdev/files/patch-src_Mesh.h | 12 | ||||
-rw-r--r-- | cad/meshdev/pkg-descr | 7 |
8 files changed, 295 insertions, 0 deletions
diff --git a/cad/meshdev/Makefile b/cad/meshdev/Makefile new file mode 100644 index 00000000000..d70cda392f2 --- /dev/null +++ b/cad/meshdev/Makefile @@ -0,0 +1,27 @@ +# New ports collection Makefile for: meshdev +# Date created: 6 February 2012 +# Whom: gahr +# +# $FreeBSD$ +# + +PORTNAME= meshdev +PORTVERSION= 0.5 +CATEGORIES= cad +MASTER_SITES= ${MASTER_SITE_LOCAL}/gahr/ \ + http://people.freebsd.org/~gahr/distfiles/ + +MAINTAINER= gahr@FreeBSD.org +COMMENT= A mesh comparison software + +BUILD_WRKSRC= ${WRKSRC}/build +INSTALL_WRKSRC= ${WRKSRC}/bin + +MAKEFILE= Makefile.release.gcc + +PLIST_FILES= bin/${PORTNAME} + +do-install: + ${INSTALL_PROGRAM} ${INSTALL_WRKSRC}/${PORTNAME} ${PREFIX}/bin + +.include <bsd.port.mk> diff --git a/cad/meshdev/distinfo b/cad/meshdev/distinfo new file mode 100644 index 00000000000..5da15a62388 --- /dev/null +++ b/cad/meshdev/distinfo @@ -0,0 +1,2 @@ +SHA256 (meshdev-0.5.tar.gz) = d9b31f803903e632211085cf971310eb872b782b8153cfff25f42b33fc76a1bc +SIZE (meshdev-0.5.tar.gz) = 110918 diff --git a/cad/meshdev/files/patch-build_Makefile.release.gcc b/cad/meshdev/files/patch-build_Makefile.release.gcc new file mode 100644 index 00000000000..0e69947fc7c --- /dev/null +++ b/cad/meshdev/files/patch-build_Makefile.release.gcc @@ -0,0 +1,21 @@ +--- build/Makefile.release.gcc.orig 2012-02-06 16:12:55.000000000 +0100 ++++ build/Makefile.release.gcc 2012-02-06 16:13:07.000000000 +0100 +@@ -2,7 +2,7 @@ + # Makefile created by Michaël Roy + + CXX = g++ +-OBJ = tmp/Deviation.o tmp/FileVrml1.o tmp/FileVrml2.o tmp/Mesh.o tmp/MeshDev.o tmp/Neighborhood.o tmp/Sample.o tmp/UniformGrid.o ++OBJ = tmp/Deviation.o tmp/FileVrml1.o tmp/FileVrml2.o tmp/FileSTL.o tmp/Mesh.o tmp/MeshDev.o tmp/Neighborhood.o tmp/Sample.o tmp/UniformGrid.o + BIN = ../bin/meshdev + CFLAGS += -DNDEBUG -Wall -W -ansi -pedantic -s -O2 + +@@ -25,6 +25,9 @@ + tmp/FileVrml2.o: ../src/FileVrml2.cpp + $(CXX) -c ../src/FileVrml2.cpp -o tmp/FileVrml2.o $(CFLAGS) + ++tmp/FileSTL.o: ../src/FileSTL.cpp ++ $(CXX) -c ../src/FileSTL.cpp -o tmp/FileSTL.o $(CFLAGS) ++ + tmp/Mesh.o: ../src/Mesh.cpp + $(CXX) -c ../src/Mesh.cpp -o tmp/Mesh.o $(CFLAGS) + diff --git a/cad/meshdev/files/patch-src_FileSTL.cpp b/cad/meshdev/files/patch-src_FileSTL.cpp new file mode 100644 index 00000000000..f4715e0ad9d --- /dev/null +++ b/cad/meshdev/files/patch-src_FileSTL.cpp @@ -0,0 +1,153 @@ +--- /dev/null 2012-02-06 16:11:28.000000000 +0100 ++++ src/FileSTL.cpp 2012-02-06 16:12:28.000000000 +0100 +@@ -0,0 +1,150 @@ ++/*- ++Copyright (C) 2012 Pietro Cerutti <gahr@gahr.ch> ++ ++Redistribution and use in source and binary forms, with or without ++modification, are permitted provided that the following conditions ++are met: ++1. Redistributions of source code must retain the above copyright ++ notice, this list of conditions and the following disclaimer. ++2. Redistributions in binary form must reproduce the above copyright ++ notice, this list of conditions and the following disclaimer in the ++ documentation and/or other materials provided with the distribution. ++ ++THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND ++ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE ++IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ++ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE ++FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL ++DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS ++OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ++HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT ++LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY ++OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF ++SUCH DAMAGE. ++*/ ++ ++#include "FileSTL.h" ++#include <fstream> ++#include <iostream> ++#include <cstdio> ++ ++//-- ++// ++// ReadSTL ++// ++// -- ++// Read a binary or ASCII STL file ++bool ReadSTL( Mesh& mesh, const std::string& file_name ) ++{ ++ std::ifstream file; // File to read ++ char head[7]; // File header ++ float coords[3]; // Store a coordinate ++ unsigned int nof_faces; // Number of faces (always multiple of 3) ++ unsigned int i, j; ++ ++ /* Open file */ ++ file.open(file_name.c_str(), std::ios::binary); ++ ++ /* Test if file is open */ ++ if (file.is_open() == false) { ++ return (false); ++ } ++ ++ /* Read header */ ++ file.read(head, 6); ++ head[6] = '\0'; ++ ++ /* Reposition at beginning of file */ ++ file.seekg(0, std::ios_base::beg); ++ ++ /* Initialize the mesh */ ++ mesh.ClearAll(); ++ ++ if (strcmp(head, "solid ") == 0) { ++ /* ++ * Read ASCII STL ++ */ ++ ++ nof_faces= 0; ++ ++ std::string line; ++ ++ /* ignore first line */ ++ std::getline(file, line); ++ ++ /* ++ * Read the file line by line ++ */ ++ while (std::getline(file, line)) { ++ ++ /* skip description lines */ ++ ++ if (line.compare("outer loop") == 0) { ++ continue; ++ } ++ if (line.compare("endloop") == 0) { ++ continue; ++ } ++ if (line.compare("end facet") == 0) { ++ continue; ++ } ++ if (line.compare(0, 7, "endsolid")) { ++ break; ++ } ++ ++ /* facet normal */ ++ if (line.compare(0, 12, "facet normal") == 0) { ++ sscanf(line.c_str(), "facet normal %e %e %e", &coords[0], &coords[1], &coords[2]); ++ mesh.AddVertexNormal(Vector3d(coords[0], coords[1], coords[2])); ++ } ++ ++ /* vertex */ ++ if (line.compare(0, 6, "vertex") == 0) { ++ sscanf(line.c_str(), "vertex %e %e %e", &coords[0], &coords[1], &coords[2]); ++ mesh.AddVertex(Vector3d(coords[0], coords[1], coords[2])); ++ ++ if (++nof_faces % 3) { ++ mesh.AddFace(Vector3i((int)nof_faces-1, (int)nof_faces-2, (int)nof_faces-3)); ++ } ++ } ++ } ++ ++ ++ } else { ++ /* ++ * Read binary STL ++ */ ++ ++ /* skip first 80 bytes (header) */ ++ file.seekg(80, std::ios_base::beg); ++ ++ /* read number of triangles */ ++ file.read((char *)&nof_faces, 4); ++ ++ /* ++ * read the file triangle by triangle ++ */ ++ for (i=0; i<nof_faces; i++) { ++ ++ /* facet normal */ ++ file.read((char *)&coords, 12); ++ mesh.AddVertexNormal(Vector3d(coords[0], coords[1], coords[2])); ++ ++ /* vertices */ ++ for (j=0; j<3; j++) { ++ file.read((char *)&coords, 12); ++ mesh.AddVertex(Vector3d(coords[0], coords[1], coords[2])); ++ } ++ mesh.AddFace(Vector3i((int)(i*3), (int)(i*3)+1, (int)(i*3)+2)); ++ ++ /* skip 2 bytes */ ++ file.seekg(2, std::ios_base::cur); ++ } ++ ++ } ++ ++ // Close file ++ file.close(); ++ ++ return (true); ++} diff --git a/cad/meshdev/files/patch-src_FileSTL.h b/cad/meshdev/files/patch-src_FileSTL.h new file mode 100644 index 00000000000..39428860423 --- /dev/null +++ b/cad/meshdev/files/patch-src_FileSTL.h @@ -0,0 +1,39 @@ +--- /dev/null 2012-02-06 16:11:28.000000000 +0100 ++++ src/FileSTL.h 2012-02-06 16:12:28.000000000 +0100 +@@ -0,0 +1,36 @@ ++/*- ++Copyright (C) 2012 Pietro Cerutti <gahr@gahr.ch> ++ ++Redistribution and use in source and binary forms, with or without ++modification, are permitted provided that the following conditions ++are met: ++1. Redistributions of source code must retain the above copyright ++ notice, this list of conditions and the following disclaimer. ++2. Redistributions in binary form must reproduce the above copyright ++ notice, this list of conditions and the following disclaimer in the ++ documentation and/or other materials provided with the distribution. ++ ++THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND ++ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE ++IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ++ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE ++FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL ++DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS ++OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ++HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT ++LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY ++OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF ++SUCH DAMAGE. ++*/ ++ ++#ifndef _FILESTL_ ++#define _FILESTL_ ++ ++#include "Mesh.h" ++#include <string> ++ ++ ++// Read a binary or ASCII STL file ++extern bool ReadSTL( Mesh& mesh, const std::string& file_name ); ++ ++#endif /* !_FILESTL_H */ diff --git a/cad/meshdev/files/patch-src_Mesh.cpp b/cad/meshdev/files/patch-src_Mesh.cpp new file mode 100644 index 00000000000..2e439ccc81a --- /dev/null +++ b/cad/meshdev/files/patch-src_Mesh.cpp @@ -0,0 +1,34 @@ +--- src/Mesh.cpp.orig 2012-02-06 16:12:15.000000000 +0100 ++++ src/Mesh.cpp 2012-02-06 16:14:59.000000000 +0100 +@@ -18,6 +18,7 @@ + #include "Mesh.h" + #include "FileVrml1.h" + #include "FileVrml2.h" ++#include "FileSTL.h" + #include <fstream> + #include <iostream> + +@@ -173,6 +174,12 @@ + { + file_format = INVENTOR_FILE; + } ++ // STL extension ++ else if( extension == "STL" || extension == "stl" ) ++ { ++ file_format = STL_FILE; ++ } ++ + // Other extension + else + { +@@ -194,6 +201,10 @@ + case VRML_2_FILE : + return ReadVrml2( *this, file_name ); + ++ // STL file ++ case STL_FILE: ++ return ReadSTL( *this, file_name ); ++ + // Other file + default : + // Unknown file format diff --git a/cad/meshdev/files/patch-src_Mesh.h b/cad/meshdev/files/patch-src_Mesh.h new file mode 100644 index 00000000000..ee1514f53d3 --- /dev/null +++ b/cad/meshdev/files/patch-src_Mesh.h @@ -0,0 +1,12 @@ +--- src/Mesh.h.orig 2012-02-06 16:12:01.000000000 +0100 ++++ src/Mesh.h 2012-02-06 16:13:59.000000000 +0100 +@@ -33,7 +33,8 @@ + UNKNOWN_FILE, + INVENTOR_FILE, + VRML_1_FILE, +- VRML_2_FILE ++ VRML_2_FILE, ++ STL_FILE + }; + + //-- diff --git a/cad/meshdev/pkg-descr b/cad/meshdev/pkg-descr new file mode 100644 index 00000000000..9196474c09d --- /dev/null +++ b/cad/meshdev/pkg-descr @@ -0,0 +1,7 @@ +MeshDev is a mesh comparison software. It accepts two meshes as input and +computes the geometrical deviation between the two meshes. +It return numerical values and can optionaly generate visual results (with a +pseudo-colored mesh corresponding to the measured deviation) in OpenInventor +format. + +WWW: http://meshdev.sourceforge.net/ |