// Created on: 2013-12-20 // Created by: Denis BOGOLEPOV // Copyright (c) 2013-2014 OPEN CASCADE SAS // // This file is part of Open CASCADE Technology software library. // // This library is free software; you can redistribute it and/or modify it under // the terms of the GNU Lesser General Public License version 2.1 as published // by the Free Software Foundation, with special exception defined in the file // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT // distribution for complete text of the license and disclaimer of any warranty. // // Alternatively, this file may be used under the terms of Open CASCADE // commercial license or contractual agreement. // ======================================================================= // function : BVH_Triangulation // purpose : // ======================================================================= template BVH_Triangulation::BVH_Triangulation() { // } // ======================================================================= // function : ~BVH_Triangulation // purpose : // ======================================================================= template BVH_Triangulation::~BVH_Triangulation() { // } // ======================================================================= // function : Size // purpose : // ======================================================================= template Standard_Integer BVH_Triangulation::Size() const { return BVH::Array::Size (Elements); } // ======================================================================= // function : Box // purpose : // ======================================================================= template BVH_Box BVH_Triangulation::Box (const Standard_Integer theIndex) const { const BVH_Vec4i& anIndex = BVH::Array::Value (Elements, theIndex); const BVH_VecNt& aPoint0 = BVH::Array::Value (Vertices, anIndex.x()); const BVH_VecNt& aPoint1 = BVH::Array::Value (Vertices, anIndex.y()); const BVH_VecNt& aPoint2 = BVH::Array::Value (Vertices, anIndex.z()); BVH_VecNt aMinPoint = aPoint0; BVH_VecNt aMaxPoint = aPoint0; BVH::BoxMinMax::CwiseMin (aMinPoint, aPoint1); BVH::BoxMinMax::CwiseMin (aMinPoint, aPoint2); BVH::BoxMinMax::CwiseMax (aMaxPoint, aPoint1); BVH::BoxMinMax::CwiseMax (aMaxPoint, aPoint2); return BVH_Box (aMinPoint, aMaxPoint); } // ======================================================================= // function : Center // purpose : // ======================================================================= template T BVH_Triangulation::Center (const Standard_Integer theIndex, const Standard_Integer theAxis) const { const BVH_Vec4i& anIndex = BVH::Array::Value (Elements, theIndex); const BVH_VecNt& aPoint0 = BVH::Array::Value (Vertices, anIndex.x()); const BVH_VecNt& aPoint1 = BVH::Array::Value (Vertices, anIndex.y()); const BVH_VecNt& aPoint2 = BVH::Array::Value (Vertices, anIndex.z()); return ( BVH::VecComp::Get (aPoint0, theAxis) + BVH::VecComp::Get (aPoint1, theAxis) + BVH::VecComp::Get (aPoint2, theAxis) ) * static_cast (1.0 / 3.0); } // ======================================================================= // function : Swap // purpose : // ======================================================================= template void BVH_Triangulation::Swap (const Standard_Integer theIndex1, const Standard_Integer theIndex2) { BVH_Vec4i& anIndices1 = BVH::Array::ChangeValue (Elements, theIndex1); BVH_Vec4i& anIndices2 = BVH::Array::ChangeValue (Elements, theIndex2); std::swap (anIndices1, anIndices2); }