#include <stlwriter.h>
Public Member Functions | |
| STLWriter (wxBufferedOutputStream *_outputStream, const Scene *_scene) | |
| ~STLWriter () | |
| Class destructor. | |
| void | Write (bool saveBinary) |
| Write STL stream. | |
Private Member Functions | |
| void | writeASCII () |
| Write as ASCII. | |
| void | writeBinary () |
| Write as binary data. | |
Private Attributes | |
| wxOutputStream * | outputStream |
| Input stream. | |
| const Scene * | scene |
| Scene container to be built. | |
| std::vector< STLBinary > | facets |
Definition at line 22 of file stlwriter.h.
| STLWriter::STLWriter | ( | wxBufferedOutputStream * | _outputStream, | |
| const Scene * | _scene | |||
| ) |
Class constructor
Definition at line 18 of file stlwriter.cpp.
00018 : outputStream(_outputStream), scene(_scene) 00019 { 00020 }
| STLWriter::~STLWriter | ( | ) |
Class destructor.
Is called by wxWidgets itself on wxApp end but it doesn't work in dynamic library
Definition at line 22 of file stlwriter.cpp.
| void STLWriter::writeASCII | ( | ) | [private] |
Write as ASCII.
Definition at line 27 of file stlwriter.cpp.
00028 { 00029 TextWriter textWriter((wxBufferedOutputStream *)outputStream); 00030 //write header 00031 textWriter.Write("solid ")->Write(scene->GetName())->Write("\n"); 00032 00033 //write facets 00034 for (std::vector<STLBinary>::const_iterator facetIT = facets.begin(); facetIT != facets.end(); facetIT++) 00035 { 00036 textWriter.Write(" facet normal ")->Write(facetIT->norm, 3, " ")->Write("\n outer loop\n vertex "); 00037 textWriter.Write(facetIT->vert1, 3, " ")->Write("\n vertex ")->Write(facetIT->vert2, 3, " "); 00038 textWriter.Write("\n vertex ")->Write(facetIT->vert3, 3, " ")->Write("\n endloop\n endfacet\n"); 00039 } 00040 00041 //write tail 00042 textWriter.Write("endsolid ")->Write(scene->GetName())->Write("\n"); 00043 }
| void STLWriter::writeBinary | ( | ) | [private] |
Write as binary data.
Definition at line 45 of file stlwriter.cpp.
00046 { 00047 //write header 00048 char header[80]; 00049 strncpy(header, scene->GetName().mb_str(wxConvISO8859_1), 80); 00050 outputStream->Write(header, 80); 00051 unsigned long count = (unsigned long)facets.size(); 00052 outputStream->Write(&count, 4); 00053 00054 //write facets 00055 wxString facet; 00056 for (std::vector<STLBinary>::const_iterator facetIT = facets.begin(); facetIT != facets.end(); facetIT++) 00057 { 00058 outputStream->Write(&(*facetIT), 50); 00059 } 00060 }
| void STLWriter::Write | ( | bool | saveBinary | ) |
Write STL stream.
Definition at line 62 of file stlwriter.cpp.
00063 { 00064 //build facets list 00065 std::vector<NODE_ID> nodes; 00066 scene->GetNodeIDs(&nodes); 00067 00068 for (std::vector<NODE_ID>::const_iterator nodeIt = nodes.begin(); 00069 nodeIt != nodes.end(); nodeIt++) 00070 { 00071 const SceneNode * node = scene->GetNode(*nodeIt); 00072 if (!node || !node->IsOfType(SceneNode::GEOMETRY)) 00073 continue; 00074 scene->UpdateTransformation(*nodeIt); 00075 00076 const Geometry * geom = scene->GetGeometry(((const GeometryNode *)node)->GetGeometryID()); 00077 if (geom && geom->type == Geometry::GEOMETRY_TRIANGLE) 00078 { 00079 std::vector<Triangle> triangles = geom->Triangulate(); 00080 MATRIX transf(*node->GetWorldTransMatrix()); 00081 for (size_t i=0; i<triangles.size(); i++) 00082 { 00083 STLBinary facet; 00084 memcpy(facet.vert1, transf.TransformCoord(triangles.at(i).v1)._v, sizeof(float)*3); 00085 memcpy(facet.vert2, transf.TransformCoord(triangles.at(i).v2)._v, sizeof(float)*3); 00086 memcpy(facet.vert3, transf.TransformCoord(triangles.at(i).v3)._v, sizeof(float)*3); 00087 memcpy(facet.norm, (VECTOR3(facet.vert2) - VECTOR3(facet.vert1)).Cross(VECTOR3(facet.vert3) - VECTOR3(facet.vert1)).Normalize()._v, sizeof(float)*3); 00088 if (_isnan(facet.norm[0]) || _isnan(facet.norm[1]) || _isnan(facet.norm[2])) 00089 continue;//skip degenerated triangles 00090 facet.attr[0]=0; 00091 facet.attr[1]=0; 00092 facets.push_back(facet); 00093 } 00094 } 00095 } 00096 if (saveBinary) 00097 writeBinary(); 00098 else 00099 writeASCII(); 00100 }
wxOutputStream* VRUT::STLWriter::outputStream [private] |
const Scene* VRUT::STLWriter::scene [private] |
std::vector<STLBinary> VRUT::STLWriter::facets [private] |
Definition at line 29 of file stlwriter.h.
1.5.5