//---------------------------------------------------------------------------- // EgalTech 2013-2013 //---------------------------------------------------------------------------- // File : GeoVector3d.cpp Data : 10.10.13 Versione : 1.2a3 // Contenuto : Implementazione della classe Vettore geometrico. // // // // Modifiche : 10.10.13 DS Creazione modulo. // // //---------------------------------------------------------------------------- //--------------------------- Include ---------------------------------------- #include "stdafx.h" #include "GeoVector3d.h" #include "GeoObjFactory.h" #include "NgeWriter.h" #include "NgeReader.h" #include "/EgtDev/Include/EGkStringUtils3d.h" #include "/EgtDev/Include/EGkPolyLine.h" #include using namespace std ; //---------------------------------------------------------------------------- GEOOBJ_REGISTER( GEO_VECT3D, NGE_G_VEC, GeoVector3d) ; //---------------------------------------------------------------------------- GeoVector3d::GeoVector3d( void) : m_vtV() { } //---------------------------------------------------------------------------- GeoVector3d::~GeoVector3d( void) { } //---------------------------------------------------------------------------- bool GeoVector3d::Set( const Vector3d& vtV) { // assegno i dati m_vtV = vtV ; // imposto ricalcolo della grafica m_OGrMgr.Reset() ; return true ; } //---------------------------------------------------------------------------- GeoVector3d* GeoVector3d::Clone( void) const { // alloco oggetto GeoVector3d* pGVt = new(nothrow) GeoVector3d ; if ( pGVt != nullptr) { if ( ! pGVt->Copy( *this)) { delete pGVt ; return nullptr ; } } return pGVt ; } //---------------------------------------------------------------------------- bool GeoVector3d::Copy( const IGeoObj* pGObjSrc) { const GeoVector3d* pGV = dynamic_cast( pGObjSrc) ; if ( pGV == nullptr) return false ; return Copy( *pGV) ; } //---------------------------------------------------------------------------- bool GeoVector3d::Copy( const GeoVector3d& clSrc) { if ( &clSrc == this) return true ; return Set( clSrc.m_vtV) ; } //---------------------------------------------------------------------------- GeoObjType GeoVector3d::GetType( void) const { return static_cast( GEOOBJ_GETTYPE( GeoVector3d)) ; } //---------------------------------------------------------------------------- const string& GeoVector3d::GetTitle( void) const { static const string sTitle = "Vector" ; return sTitle ; } //---------------------------------------------------------------------------- bool GeoVector3d::Dump( string& sOut, const char* szNewLine) const { // parametri : vettore sOut += "V(" + ToString( m_vtV) + ")" + szNewLine ; return true ; } //---------------------------------------------------------------------------- int GeoVector3d::GetNgeId( void) const { return GEOOBJ_GETNGEID( GeoVector3d) ; } //---------------------------------------------------------------------------- bool GeoVector3d::Save( NgeWriter& ngeOut) const { // parametri : vettore ngeOut.WriteVector( m_vtV, ";", true) ; return true ; } //---------------------------------------------------------------------------- bool GeoVector3d::Load( NgeReader& ngeIn) { // imposto ricalcolo della grafica m_OGrMgr.Reset() ; // leggo la prossima linea return ngeIn.ReadVector( m_vtV, ";", true) ; } //---------------------------------------------------------------------------- bool GeoVector3d::GetLocalBBox( BBox3d& b3Loc) const { // reset del box (un versore non occupa posizioni nello spazio) b3Loc.Reset() ; return true ; } //---------------------------------------------------------------------------- bool GeoVector3d::GetBBox( const Frame3d& frRef, BBox3d& b3Ref) const { // verifico validità del frame if ( frRef.GetType() == Frame3d::ERR) return false ; // reset del box (un versore non occupa posizioni nello spazio) b3Ref.Reset() ; return true ; } //---------------------------------------------------------------------------- bool GeoVector3d::GetDrawWithArrowHead( double dFrazLenAH, PolyLine& PL) const { // vettore PL.AddUPoint( 0, ORIG) ; Point3d ptTip = ORIG + m_vtV ; PL.AddUPoint( 1, ptTip) ; // doppia freccia double dLenAH = dFrazLenAH * m_vtV.Len() ; Frame3d frF ; frF.Set( ptTip, m_vtV) ; Point3d ptP1 = ORIG + Vector3d( 0.5, 0, -1) * dLenAH ; ptP1.ToGlob( frF) ; PL.AddUPoint( 2, ptP1) ; Point3d ptP2 = ORIG + Vector3d( -0.5, 0, -1) * dLenAH ; ptP2.ToGlob( frF) ; PL.AddUPoint( 3, ptP2) ; PL.AddUPoint( 4, ptTip) ; Point3d ptP3 = ORIG + Vector3d( 0, 0.5, -1) * dLenAH ; ptP3.ToGlob( frF) ; PL.AddUPoint( 5, ptP3) ; Point3d ptP4 = ORIG + Vector3d( 0, -0.5, -1) * dLenAH ; ptP4.ToGlob( frF) ; PL.AddUPoint( 6, ptP4) ; PL.AddUPoint( 7, ptTip) ; return true ; }