From 55f20bf4ece963dc319577fc85d55ae2bf99bfe4 Mon Sep 17 00:00:00 2001 From: Daniele Bariletti Date: Tue, 24 Oct 2023 14:33:15 +0200 Subject: [PATCH] EgtExchange : - aggiunte a import/export 3dm. --- Export3dm.cpp | 2 +- Import3dm.cpp | 35 ++++++++++++++++++++--------------- 2 files changed, 21 insertions(+), 16 deletions(-) diff --git a/Export3dm.cpp b/Export3dm.cpp index 4467f09..bf27286 100644 --- a/Export3dm.cpp +++ b/Export3dm.cpp @@ -150,7 +150,7 @@ Export3dm::ExportObject( const IGdbIterator& iIter, const int& nLayer) return false ; //recupero il colore dell'oggetto Color cCol ; - iIter.GetMaterial( cCol) ; + iIter.GetCalcMaterial( cCol) ; // recupero il livello dell'oggetto int nLev = GDB_LV_USER ; iIter.GetCalcLevel( nLev) ; diff --git a/Import3dm.cpp b/Import3dm.cpp index 2297f04..1304236 100644 --- a/Import3dm.cpp +++ b/Import3dm.cpp @@ -970,24 +970,29 @@ Import3dm::ConvertCurve( const ON_Curve* onCurve) ISurf* Import3dm::ConvertSurface( const ON_Surface* onSurf) { - if ( const ON_NurbsSurface* onNurbsSurface = ON_NurbsSurface::Cast( onSurf)) { + if ( const ON_NurbsSurface* onNurbsSurface_ = ON_NurbsSurface::Cast( onSurf)) { + ON_NurbsSurface onNurbsSurface( *onNurbsSurface_) ; + int nSpanU = onNurbsSurface.SpanCount(0); + int nSpanV = onNurbsSurface.SpanCount(1); + //onNurbsSurface.MakeClampedUniformKnotVector( 0) ; // rende non periodico, ma non toglie i punti in più + //onNurbsSurface.MakeClampedUniformKnotVector( 1) ; SNurbsSurfData sNurbsSurf ; - sNurbsSurf.bClosedU = onNurbsSurface->IsClosed( 0) ; - sNurbsSurf.bClosedV = onNurbsSurface->IsClosed( 1) ; - sNurbsSurf.bPeriodicU = onNurbsSurface->IsPeriodic( 0) ; - sNurbsSurf.bPeriodicV = onNurbsSurface->IsPeriodic( 1) ; - sNurbsSurf.bRat = onNurbsSurface->IsRational() ; - sNurbsSurf.nDegU = onNurbsSurface->Degree( 0) ; - sNurbsSurf.nDegV = onNurbsSurface->Degree( 1) ; - sNurbsSurf.nCPU = onNurbsSurface->CVCount( 0) ; - sNurbsSurf.nCPV = onNurbsSurface->CVCount( 1) ; + sNurbsSurf.bClosedU = onNurbsSurface.IsClosed( 0) ; + sNurbsSurf.bClosedV = onNurbsSurface.IsClosed( 1) ; + sNurbsSurf.bPeriodicU = onNurbsSurface.IsPeriodic( 0) ; + sNurbsSurf.bPeriodicV = onNurbsSurface.IsPeriodic( 1) ; + sNurbsSurf.bRat = onNurbsSurface.IsRational() ; + sNurbsSurf.nDegU = onNurbsSurface.Degree( 0) ; + sNurbsSurf.nDegV = onNurbsSurface.Degree( 1) ; + sNurbsSurf.nCPU = onNurbsSurface.CVCount( 0) ; + sNurbsSurf.nCPV = onNurbsSurface.CVCount( 1) ; vector vCPV( sNurbsSurf.nCPV) ; sNurbsSurf.mCP.resize( sNurbsSurf.nCPU, vCPV) ; DBLVECTOR vWV( sNurbsSurf.nCPV) ; sNurbsSurf.mW.resize( sNurbsSurf.nCPU, vWV) ; for ( int i = 0 ; i < sNurbsSurf.nCPU ; ++i) { for ( int j = 0 ; j < sNurbsSurf.nCPV ; ++j) { - ON_4dPoint o4dPoint = onNurbsSurface->ControlPoint(i, j) ; + ON_4dPoint o4dPoint = onNurbsSurface.ControlPoint(i, j) ; Point3d ptCP = ConvertPoint( o4dPoint) ; sNurbsSurf.mCP[i][j] = ptCP ; //// devo dividere per il peso se la sup è razionale ??? ///////////////////////////////////////////////////////// @@ -999,11 +1004,11 @@ Import3dm::ConvertSurface( const ON_Surface* onSurf) sNurbsSurf.mW[i][j] = o4dPoint.w ; } } - for ( int i = 0 ; i < onNurbsSurface->KnotCount(0) ; ++i ) { - sNurbsSurf.vU.push_back( onNurbsSurface->Knot( 0, i)) ; + for ( int i = 0 ; i < onNurbsSurface.KnotCount(0) ; ++i ) { + sNurbsSurf.vU.push_back( onNurbsSurface.Knot( 0, i)) ; } - for ( int j = 0 ; j < onNurbsSurface->KnotCount(1) ; ++j ) { - sNurbsSurf.vV.push_back( onNurbsSurface->Knot( 1, j)) ; + for ( int j = 0 ; j < onNurbsSurface.KnotCount(1) ; ++j ) { + sNurbsSurf.vV.push_back( onNurbsSurface.Knot( 1, j)) ; } if ( sNurbsSurf.bPeriodicU || sNurbsSurf.bPeriodicV)