ROOT  6.06/09
Reference Guide
Namespaces | Typedefs | Functions | Variables
CsgOps.cxx File Reference
#include <algorithm>
#include <vector>
#include "TBuffer3D.h"
#include "Rtypes.h"
#include "TMath.h"
#include "CsgOps.h"
+ Include dependency graph for CsgOps.cxx:

Go to the source code of this file.

Namespaces

 RootCsg
 I've modified some very nice bounding box tree code from Gino van der Bergen's Free Solid Library below.
 

Typedefs

typedef TBBoxLeaf * RootCsg::LeafPtr_t
 
typedef TBBoxNode * RootCsg::NodePtr_t
 
typedef TBBoxInternal * RootCsg::InternalPtr_t
 
typedef std::vector< Int_tRootCsg::PIndexList_t
 
typedef PIndexList_t::iterator RootCsg::PIndexIt_t
 
typedef std::vector< PIndexList_t > RootCsg::OverlapTable_t
 
typedef TPolygonBase< TBlenderVProp, NullType_t > RootCsg::TestPolygon_t
 
typedef TMesh< TestPolygon_t, TVertexBase > RootCsg::AMesh_t
 
typedef TMesh< TestPolygon_t, TCVertex > RootCsg::AConnectedMesh_t
 
typedef TMeshWrapper< AMesh_t > RootCsg::AMeshWrapper_t
 
typedef TConnectedMeshWrapper< AConnectedMesh_t > RootCsg::AConnectedMeshWrapper_t
 

Functions

Int_t RootCsg::sign (Double_t x)
 
Bool_t RootCsg::fuzzy_zero (Double_t x)
 
Bool_t RootCsg::fuzzy_zero2 (Double_t x)
 
Bool_t RootCsg::operator== (const Tuple2 &t1, const Tuple2 &t2)
 
TVector2 RootCsg::operator+ (const TVector2 &v1, const TVector2 &v2)
 
TVector2 RootCsg::operator- (const TVector2 &v1, const TVector2 &v2)
 
TVector2 RootCsg::operator- (const TVector2 &v)
 
TVector2 RootCsg::operator* (const TVector2 &v, Double_t s)
 
TVector2 RootCsg::operator* (Double_t s, const TVector2 &v)
 
TVector2 RootCsg::operator/ (const TVector2 &v, Double_t s)
 
Double_t RootCsg::dot (const TVector2 &v1, const TVector2 &v2)
 
Double_t RootCsg::length2 (const TVector2 &v)
 
Double_t RootCsg::length (const TVector2 &v)
 
Bool_t RootCsg::fuzzy_zero (const TVector2 &v)
 
Bool_t RootCsg::fuzzy_equal (const TVector2 &v1, const TVector2 &v2)
 
Double_t RootCsg::Angle (const TVector2 &v1, const TVector2 &v2)
 
TPoint2 RootCsg::operator+ (const TPoint2 &p, const TVector2 &v)
 
TPoint2 RootCsg::operator- (const TPoint2 &p, const TVector2 &v)
 
TVector2 RootCsg::operator- (const TPoint2 &p1, const TPoint2 &p2)
 
Double_t RootCsg::distance (const TPoint2 &p1, const TPoint2 &p2)
 
Double_t RootCsg::distance2 (const TPoint2 &p1, const TPoint2 &p2)
 
TPoint2 RootCsg::lerp (const TPoint2 &p1, const TPoint2 &p2, Double_t t)
 
Bool_t RootCsg::operator== (const Tuple3 &t1, const Tuple3 &t2)
 
TVector3 RootCsg::operator* (const TVector3 &v, Double_t s)
 
TVector3 RootCsg::operator/ (const TVector3 &v, Double_t s)
 
TVector3 RootCsg::operator+ (const TVector3 &v1, const TVector3 &v2)
 
TVector3 RootCsg::operator- (const TVector3 &v1, const TVector3 &v2)
 
TVector3 RootCsg::operator- (const TVector3 &v)
 
TVector3 RootCsg::operator* (Double_t s, const TVector3 &v)
 
TVector3 RootCsg::operator* (const TVector3 &v1, const TVector3 &v2)
 
Double_t RootCsg::dot (const TVector3 &v1, const TVector3 &v2)
 
Double_t RootCsg::length2 (const TVector3 &v)
 
Double_t RootCsg::length (const TVector3 &v)
 
Bool_t RootCsg::fuzzy_zero (const TVector3 &v)
 
Bool_t RootCsg::fuzzy_equal (const TVector3 &v1, const TVector3 &v2)
 
Double_t RootCsg::Angle (const TVector3 &v1, const TVector3 &v2)
 
TVector3 RootCsg::cross (const TVector3 &v1, const TVector3 &v2)
 
Double_t RootCsg::triple (const TVector3 &v1, const TVector3 &v2, const TVector3 &v3)
 
TPoint3 RootCsg::operator+ (const TPoint3 &p, const TVector3 &v)
 
TPoint3 RootCsg::operator- (const TPoint3 &p, const TVector3 &v)
 
TVector3 RootCsg::operator- (const TPoint3 &p1, const TPoint3 &p2)
 
Double_t RootCsg::distance (const TPoint3 &p1, const TPoint3 &p2)
 
Double_t RootCsg::distance2 (const TPoint3 &p1, const TPoint3 &p2)
 
TPoint3 RootCsg::lerp (const TPoint3 &p1, const TPoint3 &p2, Double_t t)
 
Bool_t RootCsg::operator== (const Tuple4 &t1, const Tuple4 &t2)
 
TVector3 RootCsg::operator* (const TMatrix3x3 &m, const TVector3 &v)
 
TVector3 RootCsg::operator* (const TVector3 &v, const TMatrix3x3 &m)
 
TMatrix3x3 RootCsg::operator* (const TMatrix3x3 &m1, const TMatrix3x3 &m2)
 
TMatrix3x3 RootCsg::mmult_transpose_left (const TMatrix3x3 &m1, const TMatrix3x3 &m2)
 
TMatrix3x3 RootCsg::mmult_transpose_right (const TMatrix3x3 &m1, const TMatrix3x3 &m2)
 
Bool_t RootCsg::intersect (const TBBox &a, const TBBox &b)
 
Bool_t RootCsg::intersect (const TPlane3 &p1, const TPlane3 &p2, TLine3 &output)
 
Bool_t RootCsg::intersect_2d_no_bounds_check (const TLine3 &l1, const TLine3 &l2, Int_t majAxis, Double_t &l1Param, Double_t &l2Param)
 
Bool_t RootCsg::intersect_2d_bounds_check (const TLine3 &l1, const TLine3 &l2, Int_t majAxis, Double_t &l1Param, Double_t &l2Param)
 
Int_t RootCsg::compute_classification (const Double_t &distance, const Double_t &epsil)
 
template<typename TGBinder >
Bool_t RootCsg::intersect_poly_with_line_2d (const TLine3 &l, const TGBinder &p1, const TPlane3 &plane, Double_t &a, Double_t &b)
 
template<typename TGBinder >
Bool_t RootCsg::instersect_poly_with_line_3d (const TLine3 &l, const TGBinder &p1, const TPlane3 &plane, Double_t &a)
 
template<typename TGBinder >
Bool_t RootCsg::point_in_polygon_test_3d (const TGBinder &p1, const TPlane3 &plane, const TPoint3 &origin, const TPoint3 &pointOnPlane)
 
template<typename TGBinder >
TPoint3 RootCsg::polygon_mid_point (const TGBinder &p1)
 
template<typename TGBinder >
Int_t RootCsg::which_side (const TGBinder &p1, const TPlane3 &plane1)
 
template<typename TGBinder >
TLine3 RootCsg::polygon_mid_point_ray (const TGBinder &p1, const TPlane3 &plane)
 
template<typename TGBinder >
TPlane3 RootCsg::compute_plane (const TGBinder &poly)
 
template<typename TGBinder >
TBBox RootCsg::fit_bbox (const TGBinder &p1)
 
template<typename TGBinderA , typename TGBinderB >
Bool_t RootCsg::intersect_polygons (const TGBinderA &p1, const TGBinderB &p2, const TPlane3 &plane1, const TPlane3 &plane2)
 
template<class TMesh >
void RootCsg::build_split_group (const TMesh &meshA, const TMesh &meshB, const TBBoxTree &treeA, const TBBoxTree &treeB, OverlapTable_t &aOverlapsB, OverlapTable_t &bOverlapsA)
 
template<class CMesh , class TMesh >
void RootCsg::partition_mesh (CMesh &mesh, const TMesh &mesh2, const OverlapTable_t &table)
 
template<typename CMesh , typename TMesh >
void RootCsg::classify_mesh (const TMesh &meshA, const TBBoxTree &aTree, CMesh &meshB)
 
template<typename CMesh , typename TMesh >
void RootCsg::extract_classification (CMesh &meshA, TMesh &newMesh, Int_t classification, Bool_t reverse)
 
template<typename MeshA , typename MeshB >
void RootCsg::copy_mesh (const MeshA &source, MeshB &output)
 
void RootCsg::build_tree (const AMesh_t &mesh, TBBoxTree &tree)
 
void RootCsg::extract_classification_preserve (const AMesh_t &meshA, const AMesh_t &meshB, const TBBoxTree &aTree, const TBBoxTree &bTree, const OverlapTable_t &aOverlapsB, const OverlapTable_t &bOverlapsA, Int_t aClassification, Int_t bClassification, Bool_t reverseA, Bool_t reverseB, AMesh_t &output)
 
void RootCsg::extract_classification (const AMesh_t &meshA, const AMesh_t &meshB, const TBBoxTree &aTree, const TBBoxTree &bTree, const OverlapTable_t &aOverlapsB, const OverlapTable_t &bOverlapsA, Int_t aClassification, Int_t bClassification, Bool_t reverseA, Bool_t reverseB, AMesh_t &output)
 
AMesh_t * RootCsg::build_intersection (const AMesh_t &meshA, const AMesh_t &meshB, Bool_t preserve)
 
AMesh_t * RootCsg::build_union (const AMesh_t &meshA, const AMesh_t &meshB, Bool_t preserve)
 
AMesh_t * RootCsg::build_difference (const AMesh_t &meshA, const AMesh_t &meshB, Bool_t preserve)
 
TBaseMesh * RootCsg::ConvertToMesh (const TBuffer3D &buff)
 
TBaseMesh * RootCsg::BuildUnion (const TBaseMesh *leftOperand, const TBaseMesh *rightOperand)
 
TBaseMesh * RootCsg::BuildIntersection (const TBaseMesh *leftOperand, const TBaseMesh *rightOperand)
 
TBaseMesh * RootCsg::BuildDifference (const TBaseMesh *leftOperand, const TBaseMesh *rightOperand)
 

Variables

const Double_t RootCsg::epsilon = 1e-10
 
const Double_t RootCsg::epsilon2 = 1e-20
 
const Double_t RootCsg::infinity = 1e50
 
const Int_t RootCsg::cofacTable [3][2] = {{1,2}, {0,2}, {0,1}}