EgtGeomKernel 1.6d2 :
- BBox3d aggiunta LocToLoc e migliorati i controlli per validità - aggiunta gestione estrusione nell'ingombro delle curve - a CurveComposite aggiunta funzione che la chiude - in GdbIterator aggiunte GoTo con nome - in GeomDB aggiunte Get con nome - in GeomDB aggiunto swap tra gruppi con gestione di base, sorgente e lista referenti - migliorata gestione materiale ereditato in Relocate - aggiunte SetInfo e GetInfo con INTVECTOR e DBLVECTOR - aggiunte FromString e ToString con BBox3d.
This commit is contained in:
+68
-9
@@ -15,36 +15,38 @@
|
||||
#include "stdafx.h"
|
||||
#include "\EgtDev\Include\EGkBBox3d.h"
|
||||
#include "\EgtDev\Include\EGkFrame3d.h"
|
||||
#include <stdlib.h>
|
||||
#include <algorithm>
|
||||
|
||||
using namespace std ;
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
BBox3d::BBox3d( const Point3d& ptP1, const Point3d& ptP2)
|
||||
{
|
||||
m_ptMin.Set( __min( ptP1.x, ptP2.x), __min( ptP1.y, ptP2.y), __min( ptP1.z, ptP2.z)) ;
|
||||
m_ptMax.Set( __max( ptP1.x, ptP2.x), __max( ptP1.y, ptP2.y), __max( ptP1.z, ptP2.z)) ;
|
||||
m_ptMin.Set( min( ptP1.x, ptP2.x), min( ptP1.y, ptP2.y), min( ptP1.z, ptP2.z)) ;
|
||||
m_ptMax.Set( max( ptP1.x, ptP2.x), max( ptP1.y, ptP2.y), max( ptP1.z, ptP2.z)) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
BBox3d::BBox3d( double dX1, double dY1, double dZ1, double dX2, double dY2, double dZ2)
|
||||
{
|
||||
m_ptMin.Set( __min( dX1, dX2), __min( dY1, dY2), __min( dZ1, dZ2)) ;
|
||||
m_ptMax.Set( __max( dX1, dX2), __max( dY1, dY2), __max( dZ1, dZ2)) ;
|
||||
m_ptMin.Set( min( dX1, dX2), min( dY1, dY2), min( dZ1, dZ2)) ;
|
||||
m_ptMax.Set( max( dX1, dX2), max( dY1, dY2), max( dZ1, dZ2)) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
void
|
||||
BBox3d::Set( const Point3d& ptP1, const Point3d& ptP2)
|
||||
{
|
||||
m_ptMin.Set( __min( ptP1.x, ptP2.x), __min( ptP1.y, ptP2.y), __min( ptP1.z, ptP2.z)) ;
|
||||
m_ptMax.Set( __max( ptP1.x, ptP2.x), __max( ptP1.y, ptP2.y), __max( ptP1.z, ptP2.z)) ;
|
||||
m_ptMin.Set( min( ptP1.x, ptP2.x), min( ptP1.y, ptP2.y), min( ptP1.z, ptP2.z)) ;
|
||||
m_ptMax.Set( max( ptP1.x, ptP2.x), max( ptP1.y, ptP2.y), max( ptP1.z, ptP2.z)) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
void
|
||||
BBox3d::Set( double dX1, double dY1, double dZ1, double dX2, double dY2, double dZ2)
|
||||
{
|
||||
m_ptMin.Set( __min( dX1, dX2), __min( dY1, dY2), __min( dZ1, dZ2)) ;
|
||||
m_ptMax.Set( __max( dX1, dX2), __max( dY1, dY2), __max( dZ1, dZ2)) ;
|
||||
m_ptMin.Set( min( dX1, dX2), min( dY1, dY2), min( dZ1, dZ2)) ;
|
||||
m_ptMax.Set( max( dX1, dX2), max( dY1, dY2), max( dZ1, dZ2)) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
@@ -141,6 +143,19 @@ BBox3d::GetMinMax( Point3d& ptMin, Point3d& ptMax) const
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
BBox3d::GetMinDim( Point3d& ptMin, double& dDimX, double& dDimY, double& dDimZ) const
|
||||
{
|
||||
if ( ! IsValid())
|
||||
return false ;
|
||||
ptMin = m_ptMin ;
|
||||
dDimX = m_ptMax.x - m_ptMin.x ;
|
||||
dDimY = m_ptMax.y - m_ptMin.y ;
|
||||
dDimZ = m_ptMax.z - m_ptMin.z ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
BBox3d::GetCenterExtent( Point3d& ptCenter, Vector3d& vtExtent) const
|
||||
@@ -176,6 +191,8 @@ BBox3d::GetRadius( double& dRad) const
|
||||
bool
|
||||
BBox3d::ToGlob( const Frame3d& frRef)
|
||||
{
|
||||
if ( ! IsValid())
|
||||
return false ;
|
||||
// trasformo il minimo
|
||||
Point3d ptMinGlob = m_ptMin ;
|
||||
if ( ! ptMinGlob.ToGlob( frRef))
|
||||
@@ -200,6 +217,8 @@ BBox3d::ToGlob( const Frame3d& frRef)
|
||||
bool
|
||||
BBox3d::ToLoc( const Frame3d& frRef)
|
||||
{
|
||||
if ( ! IsValid())
|
||||
return false ;
|
||||
// trasformo il minimo
|
||||
Point3d ptMinLoc = m_ptMin ;
|
||||
if ( ! ptMinLoc.ToLoc( frRef))
|
||||
@@ -223,6 +242,38 @@ BBox3d::ToLoc( const Frame3d& frRef)
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
BBox3d::LocToLoc( const Frame3d& frOri, const Frame3d& frDest)
|
||||
{
|
||||
if ( ! IsValid())
|
||||
return false ;
|
||||
// se i due riferimenti coincidono, non devo fare alcunché
|
||||
if ( AreSameFrame( frOri, frDest))
|
||||
return true ;
|
||||
// trasformo il minimo
|
||||
Point3d ptMinNewLoc = m_ptMin ;
|
||||
if ( ! ptMinNewLoc.LocToLoc( frOri, frDest))
|
||||
return false ;
|
||||
// trasformo i vettori dal Min al Max diretti come gli assi locali
|
||||
Vector3d vtXNewLoc( m_ptMax.x - m_ptMin.x, 0, 0) ;
|
||||
vtXNewLoc.LocToLoc( frOri, frDest) ;
|
||||
Vector3d vtYNewLoc( 0, m_ptMax.y - m_ptMin.y, 0) ;
|
||||
vtYNewLoc.LocToLoc( frOri, frDest) ;
|
||||
Vector3d vtZNewLoc( 0, 0, m_ptMax.z - m_ptMin.z) ;
|
||||
vtZNewLoc.LocToLoc( frOri, frDest) ;
|
||||
// calcolo il box trasformato
|
||||
Set( ptMinNewLoc) ;
|
||||
Add( ptMinNewLoc + vtXNewLoc) ;
|
||||
Add( ptMinNewLoc + vtYNewLoc) ;
|
||||
Add( ptMinNewLoc + vtZNewLoc) ;
|
||||
Add( ptMinNewLoc + vtXNewLoc + vtYNewLoc) ;
|
||||
Add( ptMinNewLoc + vtYNewLoc + vtZNewLoc) ;
|
||||
Add( ptMinNewLoc + vtZNewLoc + vtXNewLoc) ;
|
||||
Add( ptMinNewLoc + vtXNewLoc + vtYNewLoc + vtZNewLoc) ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
BBox3d::Encloses( const Point3d& ptP) const
|
||||
@@ -268,6 +319,8 @@ BBox3d::OverlapsXY( const BBox3d& b3B) const
|
||||
bool
|
||||
BBox3d::FindIntersection( const BBox3d& b3B, BBox3d& b3Int) const
|
||||
{
|
||||
if ( ! IsValid() || ! b3B.IsValid())
|
||||
return false ;
|
||||
// verifico direttamente la sovrapposizione
|
||||
if ( m_ptMax.x < b3B.m_ptMin.x - EPS_SMALL || m_ptMin.x > b3B.m_ptMax.x + EPS_SMALL)
|
||||
return false ;
|
||||
@@ -289,6 +342,8 @@ BBox3d::FindIntersection( const BBox3d& b3B, BBox3d& b3Int) const
|
||||
bool
|
||||
BBox3d::FindIntersectionXY( const BBox3d& b3B, BBox3d& b3Int) const
|
||||
{
|
||||
if ( ! IsValid() || ! b3B.IsValid())
|
||||
return false ;
|
||||
// verifico direttamente la sovrapposizione
|
||||
if ( m_ptMax.x < b3B.m_ptMin.x - EPS_SMALL || m_ptMin.x > b3B.m_ptMax.x + EPS_SMALL)
|
||||
return false ;
|
||||
@@ -308,6 +363,8 @@ BBox3d::FindIntersectionXY( const BBox3d& b3B, BBox3d& b3Int) const
|
||||
double
|
||||
BBox3d::SqDistFromPoint( const Point3d& ptP) const
|
||||
{
|
||||
if ( ! IsValid())
|
||||
return INFINITO ;
|
||||
double dSqDist = 0 ;
|
||||
if ( ptP.x < m_ptMin.x)
|
||||
dSqDist += ( m_ptMin.x - ptP.x) * ( m_ptMin.x - ptP.x) ;
|
||||
@@ -328,6 +385,8 @@ BBox3d::SqDistFromPoint( const Point3d& ptP) const
|
||||
double
|
||||
BBox3d::SqDistFromPointXY( const Point3d& ptP) const
|
||||
{
|
||||
if ( ! IsValid())
|
||||
return INFINITO ;
|
||||
double dSqDist = 0 ;
|
||||
if ( ptP.x < m_ptMin.x)
|
||||
dSqDist += ( m_ptMin.x - ptP.x) * ( m_ptMin.x - ptP.x) ;
|
||||
|
||||
Reference in New Issue
Block a user