//---------------------------------------------------------------------------- // 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 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(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 ; }