// // polygons.cc // // Copyright (C) 1996 Limit Point Systems, Inc. // // Author: Curtis Janssen // Maintainer: LPS // // This file is part of the SC Toolkit. // // The SC Toolkit is free software; you can redistribute it and/or modify // it under the terms of the GNU Library General Public License as published by // the Free Software Foundation; either version 2, or (at your option) // any later version. // // The SC Toolkit is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Library General Public License for more details. // // You should have received a copy of the GNU Library General Public License // along with the SC Toolkit; see the file COPYING.LIB. If not, write to // the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. // // The U.S. Government is granted a limited license as per AL 91-7. // #include #include #include #include #include using namespace sc; static ClassDesc RenderedPolygons_cd( typeid(RenderedPolygons),"RenderedPolygons",1,"public RenderedObject", 0, create, 0); RenderedPolygons::RenderedPolygons() { nvertex_ = 0; nface_ = 0; vertices_ = 0; vertex_rgb_ = 0; faces_ = 0; nvertex_in_face_ = 0; } RenderedPolygons::RenderedPolygons(const Ref& keyval): RenderedObject(keyval) { int nvertex = keyval->count("vertices"); int nface = keyval->count("faces"); Coloring coloring = None; if (keyval->count("vertex_color_list")) { coloring = Vertex; } initialize(nvertex, nface, coloring); int i; for (i=0; idoublevalue("vertices", i, 0), keyval->doublevalue("vertices", i, 1), keyval->doublevalue("vertices", i, 2)); } if (coloring == Vertex) { for (i=0; idoublevalue("vertex_color_list", i, 0), keyval->doublevalue("vertex_color_list", i, 1), keyval->doublevalue("vertex_color_list", i, 2)); } } for (i=0; icount("faces", i); faces_[i] = new int[nvertex_in_face_[i]]; for (int j=0; jintvalue("faces", i, j); } } } RenderedPolygons::~RenderedPolygons() { if (vertices_ && vertices_[0]) delete[] vertices_[0]; if (vertices_) delete[] vertices_; if (vertex_rgb_ && vertex_rgb_[0]) delete[] vertex_rgb_[0]; if (vertex_rgb_) delete[] vertex_rgb_; if (faces_) { for (int i=0; i& render) { render->polygons(this); } void RenderedPolygons::initialize(int nvertex, int nface, RenderedPolygons::Coloring coloring) { coloring_ = coloring; nvertex_ = nvertex; nface_ = nface; vertices_ = new double*[nvertex]; double* tmp = vertices_[0] = new double[3*nvertex]; int i; for (i=1; i