EgtGeomKernel :

- piccole sistemazioni post Vroni (per usarlo in Offset _VRONI, altrimenti NVRONI).
This commit is contained in:
Dario Sassi
2023-11-24 12:52:27 +01:00
parent 5bd5efafb1
commit fce40ffc38
15 changed files with 52 additions and 64 deletions
+8 -8
View File
@@ -2274,25 +2274,25 @@ CurveArc::CalcVoronoiObject() const
}
//----------------------------------------------------------------------------
Voronoi*
Voronoi*
CurveArc::GetVoronoiObject() const
{
if ( m_nStatus != OK)
return nullptr ;
// se non è stato calcolato, lo calcolo
if ( m_pVoronoiObj == nullptr)
CalcVoronoiObject() ;
// restituisco Voronoi
// restituisco Voronoi
return m_pVoronoiObj ;
}
//----------------------------------------------------------------------------
void
CurveArc::ResetVoronoiObject() const
{
if ( m_pVoronoiObj != nullptr)
delete m_pVoronoiObj ;
{
if ( m_pVoronoiObj != nullptr)
delete m_pVoronoiObj ;
m_pVoronoiObj = nullptr ;
}
}
-6
View File
@@ -130,12 +130,6 @@ class CurveArc : public ICurveArc, public IGeoObjRW
bool ExtendStartByLen( double dLenExt) override ;
bool ExtendEndByLen( double dLenExt) override ;
Voronoi* GetVoronoiObject( void) const override ;
bool CalcVoronoiDiagram( ICURVEPOVECTOR& vCrvs, int nBound = VORONOI_STD_BOUND) const override
{ return CalcCurveVoronoiDiagram( *this, vCrvs, nBound) ; }
bool CalcMedialAxis( ICURVEPOVECTOR& vCrvs, int nSide) const override
{ return CalcCurveMedialAxis( *this, vCrvs, nSide) ; }
bool CalcFatCurve( ICURVEPOVECTOR& vCrvs, double dRadius, bool bSquareEnds, bool bSquareMids) const override
{ return CalcCurveFatCurve( *this, vCrvs, dRadius, bSquareEnds, bSquareMids) ; }
public : // ICurveArc
bool CopyFrom( const IGeoObj* pGObjSrc) override ;
-3
View File
@@ -31,6 +31,3 @@ bool CurveGetArea( const ICurve& crvC, Plane3d& plPlane, double& dArea) ;
bool CurveDump( const ICurve& crvC, std::string& sOut, bool bMM, const char* szNewLine) ;
bool CopyExtrusion( const ICurve* pSouCrv, ICurve* pDestCrv) ;
bool CopyThickness( const ICurve* pSouCrv, ICurve* pDestCrv) ;
bool CalcCurveVoronoiDiagram( const ICurve& crvC, ICURVEPOVECTOR& vCrvs, int nBound) ;
bool CalcCurveMedialAxis( const ICurve& crvC, ICURVEPOVECTOR& vCrvs, int nSide) ;
bool CalcCurveFatCurve( const ICurve& crvC, ICURVEPOVECTOR& vCrvs, double dRadius, bool bSquareEnds, bool bSquareMids) ;
+2 -2
View File
@@ -2129,7 +2129,7 @@ CurveBezier::GetVoronoiObject() const
if ( m_pVoronoiObj == nullptr)
CalcVoronoiObject() ;
// restituisco Voronoi
// restituisco Voronoi
return m_pVoronoiObj ;
}
@@ -2140,4 +2140,4 @@ CurveBezier::ResetVoronoiObject() const
if ( m_pVoronoiObj != nullptr)
delete m_pVoronoiObj ;
m_pVoronoiObj = nullptr ;
}
}
-6
View File
@@ -132,12 +132,6 @@ class CurveBezier : public ICurveBezier, public IGeoObjRW
bool ExtendStartByLen( double dLenExt) override ;
bool ExtendEndByLen( double dLenExt) override ;
Voronoi* GetVoronoiObject( void) const override ;
bool CalcVoronoiDiagram( ICURVEPOVECTOR& vCrvs, int nBound = VORONOI_STD_BOUND) const override
{ return CalcCurveVoronoiDiagram( *this, vCrvs, nBound) ; }
bool CalcMedialAxis( ICURVEPOVECTOR& vCrvs, int nSide) const override
{ return CalcCurveMedialAxis( *this, vCrvs, nSide) ; }
bool CalcFatCurve( ICURVEPOVECTOR& vCrvs, double dRadius, bool bSquareEnds, bool bSquareMids) const override
{ return CalcCurveFatCurve( *this, vCrvs, dRadius, bSquareEnds, bSquareMids) ; }
public : // ICurveBezier
bool CopyFrom( const IGeoObj* pGObjSrc) override ;
-6
View File
@@ -127,12 +127,6 @@ class CurveComposite : public ICurveComposite, public IGeoObjRW
bool ExtendStartByLen( double dLenExt) override ;
bool ExtendEndByLen( double dLenExt) override ;
Voronoi* GetVoronoiObject( void) const override ;
bool CalcVoronoiDiagram( ICURVEPOVECTOR& vCrvs, int nBound = VORONOI_STD_BOUND) const override
{ return CalcCurveVoronoiDiagram( *this, vCrvs, nBound) ; }
bool CalcMedialAxis( ICURVEPOVECTOR& vCrvs, int nSide) const override
{ return CalcCurveMedialAxis( *this, vCrvs, nSide) ; }
bool CalcFatCurve( ICURVEPOVECTOR& vCrvs, double dRadius, bool bSquareEnds, bool bSquareMids) const override
{ return CalcCurveFatCurve( *this, vCrvs, dRadius, bSquareEnds, bSquareMids) ; }
public : // ICurveComposite
bool CopyFrom( const IGeoObj* pGObjSrc) override ;
+4 -4
View File
@@ -1068,15 +1068,15 @@ CurveLine::GetVoronoiObject() const
if ( m_pVoronoiObj == nullptr)
CalcVoronoiObject() ;
// restituisco Voronoi
// restituisco Voronoi
return m_pVoronoiObj ;
}
//----------------------------------------------------------------------------
void
CurveLine::ResetVoronoiObject() const
{
{
if ( m_pVoronoiObj != nullptr)
delete m_pVoronoiObj ;
delete m_pVoronoiObj ;
m_pVoronoiObj = nullptr ;
}
}
-6
View File
@@ -131,12 +131,6 @@ class CurveLine : public ICurveLine, public IGeoObjRW
bool ExtendStartByLen( double dLenExt) override ;
bool ExtendEndByLen( double dLenExt) override ;
Voronoi* GetVoronoiObject( void) const override ;
bool CalcVoronoiDiagram( ICURVEPOVECTOR& vCrvs, int nBound = VORONOI_STD_BOUND) const override
{ return CalcCurveVoronoiDiagram( *this, vCrvs, nBound) ; }
bool CalcMedialAxis( ICURVEPOVECTOR& vCrvs, int nSide) const override
{ return CalcCurveMedialAxis( *this, vCrvs, nSide) ; }
bool CalcFatCurve( ICURVEPOVECTOR& vCrvs, double dRadius, bool bSquareEnds, bool bSquareMids) const override
{ return CalcCurveFatCurve( *this, vCrvs, dRadius, bSquareEnds, bSquareMids) ; }
public : // ICurveLine
bool CopyFrom( const IGeoObj* pGObjSrc) override ;
+4 -4
View File
@@ -109,7 +109,7 @@
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_WINDOWS;I_AM_EGK;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>WIN32;_WINDOWS;I_AM_EGK;NVRONI;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<OpenMPSupport>false</OpenMPSupport>
<CompileAs>CompileAsCpp</CompileAs>
<MinimalRebuild>false</MinimalRebuild>
@@ -145,7 +145,7 @@ copy $(TargetPath) \EgtProg\DllD32</Command>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_WINDOWS;I_AM_EGK;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>WIN32;_WINDOWS;I_AM_EGK;NVRONI;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<OpenMPSupport>false</OpenMPSupport>
<CompileAs>CompileAsCpp</CompileAs>
<MinimalRebuild>false</MinimalRebuild>
@@ -183,7 +183,7 @@ copy $(TargetPath) \EgtProg\DllD64</Command>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;_WINDOWS;I_AM_EGK;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>WIN32;_WINDOWS;I_AM_EGK;NVRONI;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<OpenMPSupport>false</OpenMPSupport>
<CompileAs>CompileAsCpp</CompileAs>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
@@ -232,7 +232,7 @@ copy $(TargetPath) \EgtProg\Dll32</Command>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;_WINDOWS;I_AM_EGK;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>WIN32;_WINDOWS;I_AM_EGK;NVRONI;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<OpenMPSupport>false</OpenMPSupport>
<CompileAs>CompileAsCpp</CompileAs>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+11 -5
View File
@@ -64,8 +64,14 @@ OffsetCurve::Reset( void)
//----------------------------------------------------------------------------
bool
OffsetCurve::Make( const ICurve* pCrv, double dDist, int nType, bool bUseVoronoi)
OffsetCurve::Make( const ICurve* pCrv, double dDist, int nType)
{
// imposto metodo di calcolo
bool bUseVoronoi = false ;
#ifdef _VRONI
bUseVoronoi = true ;
#endif // _VRONI
// pulisco tutto
Reset() ;
// verifico che la curva esista
@@ -164,10 +170,6 @@ OffsetCurve::Make( const ICurve* pCrv, double dDist, int nType, bool bUseVoronoi
// -------------------- OFFSET STANDARD ---------------------------------
if ( ! bUseVoronoi) {
// verifico se il punto iniziale è stato modificato
Point3d ptNewStart ; ccCopy.GetStartPoint( ptNewStart) ;
bChangeStart = ( ! AreSamePointApprox( ptNewStart, ptStart)) ;
// verifico che la curva sia fatta solo da rette e archi che giacciono nel piano XY (VtExtr è ora Z+)
if ( ! ccCopy.ArcsBezierCurvesToArcsPerpExtr( 10 * EPS_SMALL, ANG_TOL_STD_DEG))
return false ;
@@ -188,6 +190,10 @@ OffsetCurve::Make( const ICurve* pCrv, double dDist, int nType, bool bUseVoronoi
if ( ! ccCopy.MergeCurves( 10 * EPS_SMALL, ANG_TOL_STD_DEG, bClosed))
return false ;
// verifico se il punto iniziale è stato modificato
Point3d ptNewStart ; ccCopy.GetStartPoint( ptNewStart) ;
bChangeStart = ( ! AreSamePointApprox( ptNewStart, ptStart)) ;
// calcolo le lunghezze delle diverse entità
DBLVECTOR vLens ;
{
+9 -3
View File
@@ -114,9 +114,15 @@ GetSurfFlatRegionDisk( double dRadius)
//-------------------------------------------------------------------------------
ISurfFlatRegion*
GetSurfFlatRegionFromFatCurve( ICurve* pCrv, double dRadius, bool bSquareEnds, bool bSquareMids, bool bUseVoronoi)
GetSurfFlatRegionFromFatCurve( ICurve* pCrv, double dRadius, bool bSquareEnds, bool bSquareMids)
{
// mi impossesso della curva
// imposto metodo di calcolo
bool bUseVoronoi = false ;
#ifdef _VRONI
bUseVoronoi = true ;
#endif // _VRONI
// mi impossesso della curva
PtrOwner<ICurve> pCurve( pCrv) ;
if ( IsNull( pCurve))
return nullptr ;
@@ -327,7 +333,7 @@ GetSurfFlatRegionFromFatCurve( ICurve* pCrv, double dRadius, bool bSquareEnds, b
else {
// calcolo la fat curve con Voronoi
ICURVEPOVECTOR vFatCurves ;
if ( ! pCurve->CalcFatCurve( vFatCurves, dRadius, bSquareEnds, bSquareMids))
if ( CalcCurveFatCurve( *pCurve, vFatCurves, dRadius, bSquareEnds, bSquareMids))
return nullptr ;
// costruisco la superficie a partire dalle curve
+1 -1
View File
@@ -458,7 +458,7 @@ GetSurfTriMeshBeveledRectSwept( double dDimH, double dDimV, double dBevelH, doub
double vDist[NUM_OFFS] = { dDimH / 2 - dBevelH, -dDimH / 2 + dBevelH, dDimH / 2, -dDimH / 2} ;
future<bool> vRes[NUM_OFFS] ;
for ( int i = 0 ; i < NUM_OFFS ; ++ i)
vRes[i] = async( launch::async, &OffsetCurve::Make, &vOffsCrv[i], pGuide, vDist[i], ICurve::OFF_FILLET, false) ;
vRes[i] = async( launch::async, &OffsetCurve::Make, &vOffsCrv[i], pGuide, vDist[i], ICurve::OFF_FILLET) ;
bool bOk = true ;
int nFin = 0 ;
while ( nFin < NUM_OFFS) {
+2 -2
View File
@@ -85,8 +85,8 @@ class SurfFlatRegion : public ISurfFlatRegion, public IGeoObjRW
bool Add( const ISurfFlatRegion& Other) override ;
bool Subtract( const ISurfFlatRegion& Other) override ;
bool Intersect( const ISurfFlatRegion& Other) override ;
bool Offset( double dDist, int nType, bool bUseVoronoi = false) override ;
ISurfFlatRegion* CreateOffsetSurf( double dDist, int nType, bool bUseVoronoi = false) const override ;
bool Offset( double dDist, int nType) override ;
SurfFlatRegion* CreateOffsetSurf( double dDist, int nType) const override ;
bool GetGrossArea( double& dArea) const override ;
const Point3d& GetPlanePoint( void) const override
{ return m_frF.Orig() ; }
+10 -7
View File
@@ -23,11 +23,17 @@
using namespace std ;
//----------------------------------------------------------------------------
ISurfFlatRegion*
SurfFlatRegion::CreateOffsetSurf( double dDist, int nType, bool bUseVoronoi) const
SurfFlatRegion*
SurfFlatRegion::CreateOffsetSurf( double dDist, int nType) const
{
// restituisce la superficie offsettata senza modificare la superficie corrente. In caso di errore restituisce nullptr
// imposto metodo di calcolo
bool bUseVoronoi = false ;
#ifdef _VRONI
bUseVoronoi = true ;
#endif // _VRONI
// recupero il numero dei chunk
int nChunk = GetChunkCount() ;
if ( nChunk == 0)
@@ -195,7 +201,7 @@ SurfFlatRegion::CreateOffsetSurf( double dDist, int nType, bool bUseVoronoi) con
//----------------------------------------------------------------------------
bool
SurfFlatRegion::Offset( double dDist, int nType, bool bUseVoronoi)
SurfFlatRegion::Offset( double dDist, int nType)
{
// recupero il numero dei chunk
int nChunk = GetChunkCount() ;
@@ -207,10 +213,7 @@ SurfFlatRegion::Offset( double dDist, int nType, bool bUseVoronoi)
return this->Clone() ;
// calcolo la superficie di offset
ISurfFlatRegion* pSfrOrig = CreateOffsetSurf( dDist, nType, bUseVoronoi) ;
if ( pSfrOrig == nullptr)
return false ;
PtrOwner<SurfFlatRegion> pSfr( GetBasicSurfFlatRegion( pSfrOrig)) ;
PtrOwner<SurfFlatRegion> pSfr( CreateOffsetSurf( dDist, nType)) ;
if ( IsNull( pSfr))
return false ;
+1 -1
View File
@@ -330,7 +330,7 @@ Voronoi::AddBezierToVroni( const ICurveBezier* pBezier, int& nVroniCrv, int nLoo
//----------------------------------------------------------------------------
ICurve*
Voronoi::GetCurve( int nId)
Voronoi::GetCurve( int nId) const
{
// verifico validità indice
if ( nId < 0 || nId > ( int)m_vpCrvs.size() - 1)