EgtGeomKernel :
- piccole modifiche per nuovo Set di PtrOwner.
This commit is contained in:
@@ -168,7 +168,7 @@ CurveArc* GetArcCenTgCompoPnt( const Point3d& ptCen, const CurveComposite& crvCo
|
||||
double dSqDist = SqDist( ptNearStart, ptTg) ;
|
||||
if ( dSqDist < dMinSqDist) {
|
||||
dMinSqDist = dSqDist ;
|
||||
pCrvArc.Set( Release( pCrvAtmp)) ;
|
||||
pCrvArc.Set( pCrvAtmp) ;
|
||||
if ( pPtTg != nullptr)
|
||||
*pPtTg = ptTg ;
|
||||
}
|
||||
|
||||
@@ -337,7 +337,7 @@ GetArcPntDirTgCompo( const Point3d& ptP, const Vector3d& vtDir, const CurveCompo
|
||||
double dSqDist = SqDist( ptNear, ptTg) ;
|
||||
if ( dSqDist < dMinSqDist) {
|
||||
dMinSqDist = dSqDist ;
|
||||
pCrvNew.Set( Release( pCrvTmp)) ;
|
||||
pCrvNew.Set( pCrvTmp) ;
|
||||
if ( pPtTg != nullptr)
|
||||
*pPtTg = ptTg ;
|
||||
}
|
||||
|
||||
@@ -239,7 +239,7 @@ GetCircleCenTgCompo( const Point3d& ptCen, const Vector3d& vtN, const CurveCompo
|
||||
double dSqDist = SqDist( ptNear, ptTg) ;
|
||||
if ( dSqDist < dMinSqDist) {
|
||||
dMinSqDist = dSqDist ;
|
||||
pCrvArc.Set( Release( pCrvAtmp)) ;
|
||||
pCrvArc.Set( pCrvAtmp) ;
|
||||
if ( pPtTg != nullptr)
|
||||
*pPtTg = ptTg ;
|
||||
}
|
||||
|
||||
@@ -162,7 +162,7 @@ GetLinePointPerpCompo( const Point3d& ptP, const CurveComposite& crvCompo, const
|
||||
double dSqDist = SqDist( ptNear, pCrvLtmp->GetEnd()) ;
|
||||
if ( dSqDist < dMinSqDist) {
|
||||
dMinSqDist = dSqDist ;
|
||||
pCrvLine.Set( Release( pCrvLtmp)) ;
|
||||
pCrvLine.Set( pCrvLtmp) ;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -195,7 +195,7 @@ GetLinePointTgCompo( const Point3d& ptP, const CurveComposite& crvCompo, const P
|
||||
double dSqDist = SqDist( ptNear, pCrvLtmp->GetEnd()) ;
|
||||
if ( dSqDist < dMinSqDist) {
|
||||
dMinSqDist = dSqDist ;
|
||||
pCrvLine.Set( Release( pCrvLtmp)) ;
|
||||
pCrvLine.Set( pCrvLtmp) ;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -257,7 +257,7 @@ OffsetCurve::Make( const ICurve* pCrv, double dDist, int nType)
|
||||
}
|
||||
// aggiorno curva precedente
|
||||
++ nInd1 ;
|
||||
pCrv1.Set( Release( pCrv2)) ;
|
||||
pCrv1.Set( pCrv2) ;
|
||||
// passo alla curva successiva
|
||||
pCrv2.Set( ccCopy2.RemoveFirstOrLastCurve( false)) ;
|
||||
}
|
||||
|
||||
+18
-21
@@ -17,6 +17,7 @@
|
||||
#include "CurveLine.h"
|
||||
#include "CurveArc.h"
|
||||
#include "CurveComposite.h"
|
||||
#include "SurfTriMesh.h"
|
||||
#include "/EgtDev/Include/EGkOffsetCurve.h"
|
||||
#include "/EgtDev/Include/EGkStmFromCurves.h"
|
||||
#include "/EgtDev/Include/EgtPointerOwner.h"
|
||||
@@ -40,7 +41,7 @@ GetSurfTriMeshByFlatContour( const ICurve* pCurve, double dLinTol)
|
||||
if ( ! pCurve->ApproxWithLines( dLinTol, ANG_TOL_STD_DEG, ICurve::APL_SPECIAL, PL))
|
||||
return nullptr ;
|
||||
// creo e setto la superficie trimesh
|
||||
PtrOwner<ISurfTriMesh> pSTM( CreateSurfTriMesh()) ;
|
||||
PtrOwner<SurfTriMesh> pSTM( CreateBasicSurfTriMesh()) ;
|
||||
if ( IsNull( pSTM) || ! pSTM->CreateByFlatContour( PL))
|
||||
return nullptr ;
|
||||
// salvo tolleranza lineare usata
|
||||
@@ -62,7 +63,7 @@ GetSurfTriMeshByRegion( const CICURVEPVECTOR& vpCurve, double dLinTol)
|
||||
if ( ! CalcRegionPolyLines( vpCurve, dLinTol, vPL, vtN))
|
||||
return nullptr ;
|
||||
// creo e setto la superficie trimesh
|
||||
PtrOwner<ISurfTriMesh> pSTM( CreateSurfTriMesh()) ;
|
||||
PtrOwner<SurfTriMesh> pSTM( CreateBasicSurfTriMesh()) ;
|
||||
if ( IsNull( pSTM) || ! pSTM->CreateByRegion( vPL))
|
||||
return nullptr ;
|
||||
// salvo tolleranza lineare usata
|
||||
@@ -101,25 +102,23 @@ GetSurfTriMeshByExtrusion( const ICurve* pCurve, const Vector3d& vtExtr,
|
||||
}
|
||||
}
|
||||
// creo e setto la superficie trimesh
|
||||
PtrOwner<ISurfTriMesh> pSTM( CreateSurfTriMesh()) ;
|
||||
PtrOwner<SurfTriMesh> pSTM( CreateBasicSurfTriMesh()) ;
|
||||
if ( IsNull( pSTM) || ! pSTM->CreateByExtrusion( PL, vtExtr))
|
||||
return nullptr ;
|
||||
// se da fare, metto i tappi sulle estremità
|
||||
if ( bDoCapEnds) {
|
||||
// creo la prima superficie di estremità
|
||||
PtrOwner<ISurfTriMesh> pSTM1( CreateSurfTriMesh()) ;
|
||||
if ( IsNull( pSTM1) || ! pSTM1->CreateByFlatContour( PL))
|
||||
SurfTriMesh STM1 ;
|
||||
if ( ! STM1.CreateByFlatContour( PL))
|
||||
return nullptr ;
|
||||
// la copio
|
||||
PtrOwner<ISurfTriMesh> pSTM2( pSTM1->Clone()) ;
|
||||
if ( IsNull( pSTM2))
|
||||
return nullptr ;
|
||||
SurfTriMesh STM2 = STM1 ;
|
||||
// inverto la prima superficie
|
||||
pSTM1->Invert() ;
|
||||
STM1.Invert() ;
|
||||
// traslo la seconda
|
||||
pSTM2->Translate( vtExtr) ;
|
||||
STM2.Translate( vtExtr) ;
|
||||
// le unisco alla superficie del fianco
|
||||
if ( ! pSTM->DoSewing( *pSTM1) || ! pSTM->DoSewing( *pSTM2))
|
||||
if ( ! pSTM->DoSewing( STM1) || ! pSTM->DoSewing( STM2))
|
||||
return nullptr ;
|
||||
}
|
||||
// salvo tolleranza lineare usata
|
||||
@@ -153,30 +152,28 @@ GetSurfTriMeshByRegionExtrusion( const CICURVEPVECTOR& vpCurve, const Vector3d&
|
||||
vPL[i].Invert() ;
|
||||
}
|
||||
// creo la prima superficie di estremità
|
||||
PtrOwner<ISurfTriMesh> pSTM( CreateSurfTriMesh()) ;
|
||||
PtrOwner<SurfTriMesh> pSTM( CreateBasicSurfTriMesh()) ;
|
||||
if ( IsNull( pSTM) || ! pSTM->CreateByRegion( vPL))
|
||||
return nullptr ;
|
||||
// creo la seconda superficie e la unisco alla prima
|
||||
{ // copio la prima superficie
|
||||
PtrOwner<ISurfTriMesh> pSTM2( pSTM->Clone()) ;
|
||||
if ( IsNull( pSTM2))
|
||||
return nullptr ;
|
||||
SurfTriMesh STM2 = *pSTM ;
|
||||
// inverto la prima superficie
|
||||
pSTM->Invert() ;
|
||||
// traslo la seconda
|
||||
pSTM2->Translate( vtExtr) ;
|
||||
STM2.Translate( vtExtr) ;
|
||||
// la unisco alla prima
|
||||
if ( ! pSTM->DoSewing( *pSTM2))
|
||||
if ( ! pSTM->DoSewing( STM2))
|
||||
return nullptr ;
|
||||
}
|
||||
// creo e unisco le diverse superfici di estrusione
|
||||
for ( int i = 0 ; i < int( vPL.size()) ; ++ i) {
|
||||
// estrusione
|
||||
PtrOwner<ISurfTriMesh> pSTM2( CreateSurfTriMesh()) ;
|
||||
if ( IsNull( pSTM2) || ! pSTM2->CreateByExtrusion( vPL[i], vtExtr))
|
||||
SurfTriMesh STM2 ;
|
||||
if ( ! STM2.CreateByExtrusion( vPL[i], vtExtr))
|
||||
return nullptr ;
|
||||
// la unisco alla superficie principale
|
||||
if ( ! pSTM->DoSewing( *pSTM2))
|
||||
if ( ! pSTM->DoSewing( STM2))
|
||||
return nullptr ;
|
||||
}
|
||||
// compatto la superficie
|
||||
@@ -685,7 +682,7 @@ GetSurfTriMeshSwept( const ICurve* pSect, const ICurve* pGuide, bool bCapEnds, d
|
||||
pSTM->DoSewing( *pSr) ;
|
||||
}
|
||||
// salvo la curva come prossima precedente
|
||||
pPrevCrv.Set( Release( pCurrCrv)) ;
|
||||
pPrevCrv.Set( pCurrCrv) ;
|
||||
// prossimo punto
|
||||
bPoint = PL.GetNextPoint( ptP) ;
|
||||
}
|
||||
|
||||
+32
-35
@@ -14,6 +14,7 @@
|
||||
//--------------------------- Include ----------------------------------------
|
||||
#include "stdafx.h"
|
||||
#include "CurveArc.h"
|
||||
#include "SurfTriMesh.h"
|
||||
#include "/EgtDev/Include/EGkStmStandard.h"
|
||||
#include "/EgtDev/Include/EGkStmFromCurves.h"
|
||||
#include "/EgtDev/Include/EGkPolygon3d.h"
|
||||
@@ -22,7 +23,7 @@
|
||||
using namespace std ;
|
||||
|
||||
//-------------------------------------------------------------------------------
|
||||
static ISurfTriMesh*
|
||||
static SurfTriMesh*
|
||||
GetStandardSurfTriMeshBox( double dDimX, double dDimY, double dHeight)
|
||||
{
|
||||
// creo la polilinea del contorno della base
|
||||
@@ -38,29 +39,27 @@ GetStandardSurfTriMeshBox( double dDimX, double dDimY, double dHeight)
|
||||
// vettore altezza (estrusione)
|
||||
Vector3d vtExtr( 0, 0, dHeight) ;
|
||||
// creo e setto la superficie trimesh laterale
|
||||
PtrOwner<ISurfTriMesh> pSTM( CreateSurfTriMesh()) ;
|
||||
PtrOwner<SurfTriMesh> pSTM( CreateBasicSurfTriMesh()) ;
|
||||
if ( IsNull( pSTM) || ! pSTM->CreateByExtrusion( PL, vtExtr))
|
||||
return nullptr ;
|
||||
// creo la prima superficie di estremità
|
||||
PtrOwner<ISurfTriMesh> pSTM1( CreateSurfTriMesh()) ;
|
||||
if ( IsNull( pSTM1) || ! pSTM1->CreateByFlatContour( PL))
|
||||
SurfTriMesh STM1 ;
|
||||
if ( ! STM1.CreateByFlatContour( PL))
|
||||
return nullptr ;
|
||||
// la copio
|
||||
PtrOwner<ISurfTriMesh> pSTM2( pSTM1->Clone()) ;
|
||||
if ( IsNull( pSTM2))
|
||||
return nullptr ;
|
||||
SurfTriMesh STM2 = STM1 ;
|
||||
// inverto la prima superficie
|
||||
pSTM1->Invert() ;
|
||||
STM1.Invert() ;
|
||||
// traslo la seconda
|
||||
pSTM2->Translate( Vector3d( 0, 0, dHeight)) ;
|
||||
STM2.Translate( Vector3d( 0, 0, dHeight)) ;
|
||||
// le unisco alla superficie del fianco
|
||||
if ( ! pSTM->DoSewing( *pSTM1) || ! pSTM->DoSewing( *pSTM2))
|
||||
if ( ! pSTM->DoSewing( STM1) || ! pSTM->DoSewing( STM2))
|
||||
return nullptr ;
|
||||
// restituisco la superficie
|
||||
return Release( pSTM) ;
|
||||
}
|
||||
//-------------------------------------------------------------------------------
|
||||
static ISurfTriMesh*
|
||||
static SurfTriMesh*
|
||||
GetRegularSurfTriMeshBox( double dDimX, double dDimY, double dHeight)
|
||||
{
|
||||
// i triangoli devono essere quasi equilateri pertanto calcolo come dividere le varie parti
|
||||
@@ -92,15 +91,15 @@ GetRegularSurfTriMeshBox( double dDimX, double dDimY, double dHeight)
|
||||
// vettore altezza (estrusione)
|
||||
Vector3d vtExtr1( 0, 0, dStepZ) ;
|
||||
// creo e unisco le superfici trimesh laterali
|
||||
PtrOwner<ISurfTriMesh> pSTM1 ;
|
||||
PtrOwner<SurfTriMesh> pSTM1 ;
|
||||
for ( int k = 0 ; k < nStepZ ; ++ k) {
|
||||
PtrOwner<ISurfTriMesh> pSTMz( CreateSurfTriMesh()) ;
|
||||
if ( IsNull( pSTMz) || ! pSTMz->CreateByExtrusion( PL1, vtExtr1))
|
||||
SurfTriMesh STMz ;
|
||||
if ( ! STMz.CreateByExtrusion( PL1, vtExtr1))
|
||||
return nullptr ;
|
||||
pSTMz->Translate( Vector3d( 0, 0, k * dStepZ)) ;
|
||||
STMz.Translate( Vector3d( 0, 0, k * dStepZ)) ;
|
||||
if ( IsNull( pSTM1))
|
||||
pSTM1.Set( Release( pSTMz)) ;
|
||||
else if ( ! pSTM1->DoSewing( *pSTMz))
|
||||
pSTM1.Set( STMz.Clone()) ;
|
||||
else if ( ! pSTM1->DoSewing( STMz))
|
||||
return nullptr ;
|
||||
}
|
||||
// creo la polilinea del lato sinistro della superficie inferiore
|
||||
@@ -112,26 +111,24 @@ GetRegularSurfTriMeshBox( double dDimX, double dDimY, double dHeight)
|
||||
// vettore estrusione
|
||||
Vector3d vtExtr2( dStepX, 0, 0) ;
|
||||
// creo e unisco le superfici trimesh inferiori
|
||||
PtrOwner<ISurfTriMesh> pSTM2 ;
|
||||
SurfTriMesh STM2 ;
|
||||
for ( int i = 0 ; i < nStepX ; ++ i) {
|
||||
PtrOwner<ISurfTriMesh> pSTMx( CreateSurfTriMesh()) ;
|
||||
if ( IsNull( pSTMx) || ! pSTMx->CreateByExtrusion( PL2, vtExtr2))
|
||||
SurfTriMesh STMx ;
|
||||
if ( ! STMx.CreateByExtrusion( PL2, vtExtr2))
|
||||
return nullptr ;
|
||||
pSTMx->Translate( Vector3d( i * dStepX, 0, 0)) ;
|
||||
if ( IsNull( pSTM2))
|
||||
pSTM2.Set( Release( pSTMx)) ;
|
||||
else if ( ! pSTM2->DoSewing( *pSTMx))
|
||||
STMx.Translate( Vector3d( i * dStepX, 0, 0)) ;
|
||||
if ( STM2.IsEmpty())
|
||||
STM2 = STMx ;
|
||||
else if ( ! STM2.DoSewing( STMx))
|
||||
return nullptr ;
|
||||
}
|
||||
// la copio
|
||||
PtrOwner<ISurfTriMesh> pSTM3( pSTM2->Clone()) ;
|
||||
if ( IsNull( pSTM3))
|
||||
return nullptr ;
|
||||
SurfTriMesh STM3 = STM2 ;
|
||||
// inverto e traslo la superficie superiore
|
||||
pSTM3->Invert() ;
|
||||
pSTM3->Translate( Vector3d( 0, 0, dHeight)) ;
|
||||
STM3.Invert() ;
|
||||
STM3.Translate( Vector3d( 0, 0, dHeight)) ;
|
||||
// le unisco alla superficie del fianco
|
||||
if ( ! pSTM1->DoSewing( *pSTM2) || ! pSTM1->DoSewing( *pSTM3))
|
||||
if ( ! pSTM1->DoSewing( STM2) || ! pSTM1->DoSewing( STM3))
|
||||
return nullptr ;
|
||||
// restituisco la superficie
|
||||
return Release( pSTM1) ;
|
||||
@@ -171,16 +168,16 @@ GetSurfTriMeshPyramid( double dDimX, double dDimY, double dHeight)
|
||||
// punto di vertice
|
||||
Point3d ptTip( 0.5 * dDimX, 0.5 * dDimY, dHeight) ;
|
||||
// creo e setto la superficie trimesh laterale
|
||||
PtrOwner<ISurfTriMesh> pSTM( CreateSurfTriMesh()) ;
|
||||
PtrOwner<SurfTriMesh> pSTM( CreateBasicSurfTriMesh()) ;
|
||||
if ( IsNull( pSTM) || ! pSTM->CreateByPointCurve( ptTip, PL))
|
||||
return nullptr ;
|
||||
// creo la superficie di base e ne inverto la normale
|
||||
PtrOwner<ISurfTriMesh> pSTM1( CreateSurfTriMesh()) ;
|
||||
if ( IsNull( pSTM1) || ! pSTM1->CreateByFlatContour( PL))
|
||||
SurfTriMesh STM1 ;
|
||||
if ( ! STM1.CreateByFlatContour( PL))
|
||||
return nullptr ;
|
||||
pSTM1->Invert() ;
|
||||
STM1.Invert() ;
|
||||
// la unisco alla superficie del fianco
|
||||
if ( ! pSTM->DoSewing( *pSTM1))
|
||||
if ( ! pSTM->DoSewing( STM1))
|
||||
return nullptr ;
|
||||
// restituisco la superficie
|
||||
return Release( pSTM) ;
|
||||
|
||||
+2
-2
@@ -1105,7 +1105,7 @@ SurfTriMesh::GetSilhouette( const Vector3d& vtDir, double dTol, POLYLINEVECTOR&
|
||||
pSfrPart->Offset( dTol, ICurve::OFF_FILLET) ;
|
||||
if ( IsNull( pSfr))
|
||||
if ( pSfrPart->GetNormVersor() * vtVers > 0)
|
||||
bOk = pSfr.Set( Release( pSfrPart)) ;
|
||||
bOk = pSfr.Set( pSfrPart) ;
|
||||
else
|
||||
bOk = false ;
|
||||
else {
|
||||
@@ -1151,7 +1151,7 @@ SurfTriMesh::GetSilhouette( const Vector3d& vtDir, double dTol, POLYLINEVECTOR&
|
||||
if ( ! IsNull( pSfrTria)) {
|
||||
pSfrTria->Offset( dTol, ICurve::OFF_FILLET) ;
|
||||
if ( IsNull( pSfr))
|
||||
pSfr.Set( Release( pSfrTria)) ;
|
||||
pSfr.Set( pSfrTria) ;
|
||||
else
|
||||
pSfr->Add( *pSfrTria) ;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user