01ce6ea4a4
- IGdbIterator può utilizzare un altro IGdbIterator per andare sul gruppo - aggiunta gestione nomi di colori standard - Aggiunte ToString e FromString per Color - TSC ora accetta colori standard da nome.
194 lines
5.9 KiB
C++
194 lines
5.9 KiB
C++
//----------------------------------------------------------------------------
|
|
// EgalTech 2013-2013
|
|
//----------------------------------------------------------------------------
|
|
// File : GeoFrame3d.cpp Data : 02.12.13 Versione : 1.4a3
|
|
// Contenuto : Implementazione della classe Riferimento geometrico.
|
|
//
|
|
//
|
|
//
|
|
// Modifiche : 10.10.13 DS Creazione modulo.
|
|
//
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
//--------------------------- Include ----------------------------------------
|
|
#include "stdafx.h"
|
|
#include "GeoFrame3d.h"
|
|
#include "GeoObjFactory.h"
|
|
#include "/EgtDev/Include/EGkStringUtils3d.h"
|
|
#include "/EgtDev/Include/EGkPolyLine.h"
|
|
#include <new>
|
|
|
|
using namespace std ;
|
|
|
|
//----------------------------------------------------------------------------
|
|
GEOOBJ_REGISTER( GEO_FRAME3D, "G_FRM", GeoFrame3d) ;
|
|
|
|
//----------------------------------------------------------------------------
|
|
GeoFrame3d::GeoFrame3d( void)
|
|
: m_frF()
|
|
{
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
GeoFrame3d::~GeoFrame3d( void)
|
|
{
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
bool
|
|
GeoFrame3d::Set( const Point3d& ptOrig, const Vector3d& vtDirX,
|
|
const Vector3d& vtDirY, const Vector3d& vtDirZ)
|
|
{
|
|
// imposto ricalcolo della grafica
|
|
m_OGrMgr.Reset() ;
|
|
// assegno i dati
|
|
return m_frF.Set( ptOrig, vtDirX, vtDirY, vtDirZ) ;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
bool
|
|
GeoFrame3d::Set( const Frame3d& frF)
|
|
{
|
|
// assegno i dati
|
|
m_frF = frF ;
|
|
|
|
// imposto ricalcolo della grafica
|
|
m_OGrMgr.Reset() ;
|
|
|
|
return true ;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
GeoFrame3d*
|
|
GeoFrame3d::Clone( void) const
|
|
{
|
|
GeoFrame3d* pGFr ;
|
|
|
|
|
|
// alloco oggetto
|
|
pGFr = new(nothrow) GeoFrame3d ;
|
|
if ( pGFr != nullptr)
|
|
*pGFr = *(const_cast<GeoFrame3d*>(this)) ;
|
|
|
|
return pGFr ;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
const string&
|
|
GeoFrame3d::GetTitle( void) const
|
|
{
|
|
static const string sTitle = "Frame" ;
|
|
return sTitle ;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
bool
|
|
GeoFrame3d::Dump( string& sOut, const char* szNewLine) const
|
|
{
|
|
// parametri : origine, VersoreX, VersoreY, VersoreZ
|
|
sOut += "O(" + ToString( m_frF.Orig()) + ")" + szNewLine ;
|
|
sOut += "VX(" + ToString( m_frF.VersX()) + ")" + szNewLine ;
|
|
sOut += "VY(" + ToString( m_frF.VersY()) + ")" + szNewLine ;
|
|
sOut += "VZ(" + ToString( m_frF.VersZ()) + ")" + szNewLine ;
|
|
|
|
return true ;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
const string&
|
|
GeoFrame3d::GetKey( void) const
|
|
{
|
|
return GEOOBJ_GETKEY( GeoFrame3d) ;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
bool
|
|
GeoFrame3d::Save( ostream& osOut) const
|
|
{
|
|
osOut << ToString( m_frF) << ";" << endl ;
|
|
|
|
return true ;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
bool
|
|
GeoFrame3d::Load( Scanner& TheScanner)
|
|
{
|
|
// imposto ricalcolo della grafica
|
|
m_OGrMgr.Reset() ;
|
|
// leggo la prossima linea
|
|
string sLine ;
|
|
if ( ! TheScanner.GetLine( sLine))
|
|
return false ;
|
|
// elimino ; finale
|
|
TrimRight( sLine, ";") ;
|
|
// eseguo lettura
|
|
return FromString( sLine, m_frF) ;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
bool
|
|
GeoFrame3d::GetLocalBBox( BBox3d& b3Loc) const
|
|
{
|
|
// assegno il box in locale (considero l'origine)
|
|
b3Loc.Set( m_frF.Orig()) ;
|
|
return true ;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
bool
|
|
GeoFrame3d::GetBBox( const Frame3d& frRef, BBox3d& b3Ref) const
|
|
{
|
|
// verifico validità del frame
|
|
if ( frRef.GetType() == Frame3d::ERR)
|
|
return false ;
|
|
// porto l'origine nel riferimento passato
|
|
Point3d ptP = m_frF.Orig() ;
|
|
ptP.ToGlob( frRef) ;
|
|
// assegno il box nel riferimento
|
|
b3Ref.Set( ptP) ;
|
|
return true ;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
bool
|
|
GeoFrame3d::GetDrawWithArrowHeads( double dLenA, double dFrazLenAH,
|
|
PolyLine& plX, PolyLine& plY, PolyLine& plZ) const
|
|
{
|
|
double dLenAH = dFrazLenAH * dLenA ;
|
|
// vettore X (con freccia)
|
|
plX.AddUPoint( 0, m_frF.Orig()) ;
|
|
Point3d ptTipX = m_frF.Orig() + m_frF.VersX() * dLenA ;
|
|
plX.AddUPoint( 1, ptTipX) ;
|
|
Point3d ptP1X = ptTipX + ( - m_frF.VersX() - 0.5 * m_frF.VersY()) * dLenAH ;
|
|
plX.AddUPoint( 2, ptP1X) ;
|
|
Point3d ptP2X = ptTipX + ( - m_frF.VersX() + 0.5 * m_frF.VersY()) * dLenAH ;
|
|
plX.AddUPoint( 3, ptP2X) ;
|
|
plX.AddUPoint( 4, ptTipX) ;
|
|
// vettore Y (con freccia)
|
|
plY.AddUPoint( 0, m_frF.Orig()) ;
|
|
Point3d ptTipY = m_frF.Orig() + m_frF.VersY() * dLenA ;
|
|
plY.AddUPoint( 1, ptTipY) ;
|
|
Point3d ptP1Y = ptTipY + ( - m_frF.VersY() - 0.5 * m_frF.VersX()) * dLenAH ;
|
|
plY.AddUPoint( 2, ptP1Y) ;
|
|
Point3d ptP2Y = ptTipY + ( - m_frF.VersY() + 0.5 * m_frF.VersX()) * dLenAH ;
|
|
plY.AddUPoint( 3, ptP2Y) ;
|
|
plY.AddUPoint( 4, ptTipY) ;
|
|
// vettore Z (con doppia freccia)
|
|
plZ.AddUPoint( 0, m_frF.Orig()) ;
|
|
Point3d ptTipZ = m_frF.Orig() + m_frF.VersZ() * dLenA ;
|
|
plZ.AddUPoint( 1, ptTipZ) ;
|
|
Point3d ptP1Z = ptTipZ + ( - m_frF.VersZ() - 0.5 * m_frF.VersX()) * dLenAH ;
|
|
plZ.AddUPoint( 2, ptP1Z) ;
|
|
Point3d ptP2Z = ptTipZ + ( - m_frF.VersZ() + 0.5 * m_frF.VersX()) * dLenAH ;
|
|
plZ.AddUPoint( 3, ptP2Z) ;
|
|
plZ.AddUPoint( 4, ptTipZ) ;
|
|
Point3d ptP3Z = ptTipZ + ( - m_frF.VersZ() - 0.5 * m_frF.VersY()) * dLenAH ;
|
|
plZ.AddUPoint( 5, ptP3Z) ;
|
|
Point3d ptP4Z = ptTipZ + ( - m_frF.VersZ() + 0.5 * m_frF.VersY()) * dLenAH ;
|
|
plZ.AddUPoint( 6, ptP4Z) ;
|
|
plZ.AddUPoint( 7, ptTipZ) ;
|
|
|
|
return true ;
|
|
} |