// Copyright (c) 1999 Philip A. Hardin (pahardin@cs.utexas.edu) // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License v2 or later. #include "view.h" /*=========================================================================*/ view& view::Copy(const view& v) { maxPts= numPts= v.numPts; modelToView= v.modelToView; shape= v.shape; if (maxPts >0) { pts= new pt3d[maxPts]; forii(numPts) pts[i]=v.pts[i]; } return *this; } /*-------------------------------------------------------------------------*/ // In: mtv= new modelToView transformation matrix void view::Update(xregion3d *newShape, const tmtrx& newMtv) { // if the shape has changed and the new shape has more pts than // the old one, allocate an adequately large array of pts if (newShape != shape) { numPts= newShape->pts.Num(); if (numPts >maxPts) { if (maxPts >0) delete [] pts; maxPts= numPts; pts= new pt3d[maxPts]; } } if (newShape != shape || !modelToView.RotationSame(newMtv)) { newShape->TransformTo(newMtv,pts); } else { pt3d delta= newMtv.Cart() - modelToView.Cart(); if (delta != pt3d(0,0,0)) { forii(newShape->pts.Num()) pts[i] += delta; } } modelToView= newMtv; shape= newShape; }