diff --git a/Export3dm.cpp b/Export3dm.cpp index 37481cc..826e029 100644 --- a/Export3dm.cpp +++ b/Export3dm.cpp @@ -26,6 +26,7 @@ #include "/EgtDev/Include/EGkCurveComposite.h" #include "/EgtDev/Include/EGkGdbIterator.h" #include "/EgtDev/Include/EGkGeoObjType.h" +#include "/EgtDev/Include/EGkGeoPoint3d.h" #include "/EgtDev/Include/EGnStringUtils.h" #include "/EgtDev/Include/SELkKeyProc.h" #include "/EgtDev/Include/EgtKeyCodes.h" @@ -34,6 +35,7 @@ #include #include "C:/EgtDev/opennurbs/opennurbs.h" #include +#include "/EgtDev/Include/EGnStringUtils.h" using namespace std ; class ON_Color ; @@ -121,7 +123,6 @@ Export3dm::Export( IGeomDB* pGDB, int nId, const string& sFile) return false ; } - //// file settings ( units, tolerances, views, ...) //// OPTIONAL - change values from defaults m_model.m_settings.m_ModelUnitsAndTolerances.m_unit_system = ON::LengthUnitSystem::Meters ; @@ -184,6 +185,11 @@ Export3dm::ExportObject( const IGdbIterator& iIter, const int& nLayer) sName = ToString( iIter.GetId()) ; // emetto l'oggetto switch ( pGeoObj->GetType()) { + case GEO_PNT3D: { + if ( ! ExportPnt( sName, pGeoObj, frFrame, cCol, nLayer)) + return false ; + break ; + } case SRF_BEZIER: { if ( ! ExportSrfBz( sName, pGeoObj, frFrame, cCol, nLayer)) return false ; @@ -231,7 +237,11 @@ Export3dm::ExportObject( const IGdbIterator& iIter, const int& nLayer) } // creo il layer e setto le proprietà ON_Layer* layer = new ON_Layer() ; - std::string sLayName = "Layer " + ToString( nLayer) ; + std::string sLayName ; + iIter.GetName( sLayName) ; + if ( sLayName == "" ) { + sLayName = "Layer " + ToString( nLayer) ; + } layer->SetName( ConvertString( sLayName).c_str()) ; bool bDone = layer->SetIndex( nLayer) ; ON_Color onCol( 0, 0, 0, 0) ; // black @@ -244,6 +254,14 @@ Export3dm::ExportObject( const IGdbIterator& iIter, const int& nLayer) const ON_Layer* onParLay = ON_Layer::Cast( m_model.LayerFromIndex( m_mLayer[nParent]).ModelComponent()) ; layer->SetParentLayerId( onParLay->Id()) ; } + // copio le info + STRVECTOR vStrInfo, vStrInfo_split ; + iIter.GetAllInfo( vStrInfo) ; + for ( string sInfo : vStrInfo) { + Tokenize( sInfo, "=", vStrInfo_split) ; + layer->SetUserString( ConvertString( vStrInfo_split[0]).c_str(), ConvertString( vStrInfo_split[1]).c_str()) ; + } + // aggiungo il layer ON_ModelComponentReference mcr = m_model.AddManagedModelComponent( layer) ; int nIndex = mcr.ModelComponentIndex() ; @@ -326,6 +344,22 @@ Export3dm::TestFilter( int nLev, int nMode, int nStat) return true ; } +//---------------------------------------------------------------------------- +bool +Export3dm::ExportPnt(const string& sName, const IGeoObj* pGeoObj, const Frame3d& frFrame, const Color& cCol, const int& nLayer) +{ + // verifico oggetto + IGeoPoint3d* pGeoPnt = GetGeoPoint3d( pGeoObj->Clone()) ; + if ( pGeoPnt == nullptr) + return false ; + // lo porto nel riferimento globale + pGeoPnt->ToGlob( frFrame) ; + Point3d pt = pGeoPnt->GetPoint() ; + ON_Point* onPt = new ON_Point(ConvertPoint( pt)) ; + AddObjectToModel( onPt, nLayer, sName, cCol) ; + return true ; +} + //---------------------------------------------------------------------------- bool Export3dm::ExportSrfBz( const string& sName, const IGeoObj* pGeoObj, const Frame3d& frFrame, const Color& cCol, const int& nLayer) @@ -498,7 +532,6 @@ Export3dm::ConvertCrvBezier( ICurveBezier* pCrvBz) return Release( onNurbsCrv) ; } - //---------------------------------------------------------------------------- bool Export3dm::ExportCrvBezier( const string& sName, const IGeoObj* pGeoObj, const Frame3d& frFrame, const Color& cCol, const int& nLayer) @@ -510,7 +543,6 @@ Export3dm::ExportCrvBezier( const string& sName, const IGeoObj* pGeoObj, const F bool bOk = true ; // lo porto nel riferimento globale pCrvBz->ToGlob( frFrame) ; - ON_NurbsCurve* onNurbsCrv = ConvertCrvBezier( pCrvBz) ; return AddObjectToModel( onNurbsCrv, nLayer, sName, cCol) ; } @@ -554,14 +586,7 @@ Export3dm::ExportCrvCompo( const string& sName, const IGeoObj* pGeoObj, const Fr } } - // creo il vettore estrusione - Vector3d vtExtr ; - pCrvCompo->GetExtrusion( vtExtr) ; - std::string sExtr = ToString( vtExtr.x) + "," + ToString( vtExtr.y) + "," + ToString( vtExtr.z) ; - ON_3dmObjectAttributes* pOnAttr = new ON_3dmObjectAttributes() ; - pOnAttr->SetUserString( ConvertString( "vtExtr").c_str(), ConvertString( sExtr).c_str()) ; - - return AddObjectToModel( onPolyCrv, nLayer, sName, cCol, pOnAttr) ; + return AddObjectToModel( onPolyCrv, nLayer, sName, cCol) ; } //---------------------------------------------------------------------------- diff --git a/Export3dm.h b/Export3dm.h index 04c331e..c8867b6 100644 --- a/Export3dm.h +++ b/Export3dm.h @@ -55,6 +55,7 @@ private : ON_NurbsCurve* ConvertCrvBezier( ICurveBezier* pCrvBz) ; ON_ArcCurve* ConvertCrvArc( ICurveArc* pCrvArc) ; ON_LineCurve* ConvertCrvLine( ICurveLine* pCrvL) ; + bool ExportPnt( const std::string& sName, const IGeoObj* pGeoObj, const Frame3d& frFrame, const Color& cCol, const int& nLayer) ; bool ExportSrfBz( const std::string& sName, const IGeoObj* pGeoObj, const Frame3d& frFrame, const Color& cCol, const int& nLayer) ; bool ExportSFR( const std::string& sName, const IGeoObj* pGeoObj, const Frame3d& frFrame, const Color& cCol, const int& nLayer) ; bool ExportSTM( const std::string& sName, const IGeoObj* pGeoObj, const Frame3d& frFrame, const Color& cCol, const int& nLayer) ;