EgtGeomKernel 2.6f1 :

- modifiche a pocketing.
This commit is contained in:
Dario Sassi
2024-06-03 08:15:38 +02:00
parent b931582120
commit e20b4b5b78
6 changed files with 59 additions and 70 deletions
+39 -39
View File
@@ -136,7 +136,7 @@ GetCoeffLinArc( const ICurveArc* pArc, double dDiam, double& dSubArc)
//----------------------------------------------------------------------------
static bool
GetParamForPtStartOnEdge( const ICurve* pCrvCheck, const ICurveComposite* pCrvCompo,
const ICRVCOMPOPOVECTOR& vOtherCrv, PocketParams PockParams, double& dPar)
const ICRVCOMPOPOVECTOR& vOtherCrv, const PocketParams& PockParams, double& dPar)
{
// ==================== INFO ================================================================
@@ -279,7 +279,7 @@ GetParamForPtStartOnEdge( const ICurve* pCrvCheck, const ICurveComposite* pCrvCo
//----------------------------------------------------------------------------
static bool
AdjustContourStart( ICurveComposite* pCompo, PocketParams PockParams, const ICRVCOMPOPOVECTOR& vCrvIsl,
AdjustContourStart( ICurveComposite* pCompo, const PocketParams& PockParams, const ICRVCOMPOPOVECTOR& vCrvIsl,
bool bOrder, Point3d ptRef)
{
// se cerco semplicemente il tratto lineare chiuso più lungo ...
@@ -429,7 +429,7 @@ AdjustContourStart( ICurveComposite* pCompo, PocketParams PockParams, const ICRV
//----------------------------------------------------------------------------
static bool
GetHomogeneousParts( ICurveComposite* pCrvCompo, PocketParams PockParams, ICRVCOMPOPOVECTOR& vpCrvs)
GetHomogeneousParts( ICurveComposite* pCrvCompo, const PocketParams& PockParams, ICRVCOMPOPOVECTOR& vpCrvs)
{
// controllo dei parametri
@@ -603,7 +603,7 @@ static bool
AdjustOpenEdge( const ICurveComposite* pCrvCompo, const ICRVCOMPOPOVECTOR& vCrvIsland,
const double dParS, const double dParE, const Vector3d& vtTanS,
const Vector3d& vtTanE, const double dRad, const double dDiamJ,
PocketParams PockParams, ICurveComposite* pCrvBorder)
const PocketParams& PockParams, ICurveComposite* pCrvBorder)
{
/* parametri :
pCrvCompo -> curva originaria di bordo
@@ -816,7 +816,7 @@ AdjustOpenEdge( const ICurveComposite* pCrvCompo, const ICRVCOMPOPOVECTOR& vCrvI
//----------------------------------------------------------------------------
static bool
AdjustContourWithOpenEdges( ICurveComposite* pCrvCompo, ICRVCOMPOPOVECTOR& vCrvIsl, const double dDiam,
const double dOffR, const double dStep, PocketParams PockParams)
const double dOffR, const double dStep, const PocketParams& PockParams)
{
// controllo dei parametri
if ( pCrvCompo == nullptr || ! pCrvCompo->IsValid())
@@ -929,7 +929,7 @@ CheckForRemovingIsland( const ICurveComposite* pCrvIslandBorder, double dOffs, b
//----------------------------------------------------------------------------
static bool
ModifySurfByOpenEdges( ISurfFlatRegion* pSfr, PocketParams PockParams)
ModifySurfByOpenEdges( ISurfFlatRegion* pSfr, const PocketParams& PockParams)
{
// controllo parametri :
if ( pSfr == nullptr || ! pSfr->IsValid())
@@ -1076,7 +1076,7 @@ ModifySurfByOpenEdges( ISurfFlatRegion* pSfr, PocketParams PockParams)
//----------------------------------------------------------------------------
static bool
GetParamOnOpenSide( const ICurveComposite* pCompo, const ICRVCOMPOPOVECTOR& vOtherCrv,
const Frame3d& frPocket, PocketParams PockParams, Point3d& ptMid, Vector3d& vtMidOrt)
const Frame3d& frPocket, const PocketParams& PockParams, Point3d& ptMid, Vector3d& vtMidOrt)
{
// recupero il vettore estrusione
Vector3d vtExtr = Z_AX ;
@@ -1224,7 +1224,7 @@ GetParamOnOpenSide( const ICurveComposite* pCompo, const ICRVCOMPOPOVECTOR& vOth
//----------------------------------------------------------------------------
static bool
SetSpecialPtStartForOpenEdges( const ICurveComposite* pCrvOrig, const Frame3d& frPocket,
PocketParams PockParams, ICurveComposite* pCrvCompo, Point3d& ptStart,
const PocketParams& PockParams, ICurveComposite* pCrvCompo, Point3d& ptStart,
Vector3d& vtMidOut, bool& bMidOut)
{
// controllo dei parametri
@@ -1264,7 +1264,7 @@ SetSpecialPtStartForOpenEdges( const ICurveComposite* pCrvOrig, const Frame3d& f
//----------------------------------------------------------------------------
static bool
SetPtStartForPath( ICurveComposite* pCrvOffsAct, PocketParams PockParams, const ISurfFlatRegion* pSrfToWork,
SetPtStartForPath( ICurveComposite* pCrvOffsAct, const PocketParams& PockParams, const ISurfFlatRegion* pSrfToWork,
const Point3d& ptEndPrec, const Frame3d& frPocket, Point3d& ptStart,
Vector3d& vtMidOut, bool& bMidOut, int nOffs, ICurveComposite* pCrvOrig)
{
@@ -1547,7 +1547,7 @@ OptimizedSpiralCirle( const ICurveComposite* pCrvCompo, const double dToll, doub
//----------------------------------------------------------------------------
static bool
CalcCircleSpiral( const Point3d& ptCen, const Vector3d& vtN, double dOutRad, double dIntRad,
PocketParams PockParams, ICurveComposite* pMCrv, ICurveComposite* pRCrv)
const PocketParams& PockParams, ICurveComposite* pMCrv, ICurveComposite* pRCrv)
{
/* calcola il percorso di a spirale assieme al percorso di ritorno */
@@ -1812,7 +1812,7 @@ PreparareTrapezoidTwoBases( const ICurveComposite* pCrvCompo, const double dDiam
//----------------------------------------------------------------------------
static bool
GetTrapezoidFromShape( const ICurveComposite* pCrvCompo, ICurveComposite* pCrvTrap,
Frame3d& frTrap, PocketParams PockParams, double& dPocketSize, int& nBase, int& nSecondBase)
Frame3d& frTrap, const PocketParams& PockParams, double& dPocketSize, int& nBase, int& nSecondBase)
{
// controllo parametri
if ( pCrvCompo == nullptr || ! pCrvCompo->IsValid())
@@ -2205,7 +2205,7 @@ GetTrapezoidFromShape( const ICurveComposite* pCrvCompo, ICurveComposite* pCrvTr
//----------------------------------------------------
static bool
SpecialAdjustTrapezoidSpiralForAngles( ICurveComposite* pMCrv, const bool bEvenClosed,
const ICurveComposite* pCrvPocket, PocketParams PockParams)
const ICurveComposite* pCrvPocket, const PocketParams& PockParams)
{
// parametri
double dDiam = PockParams.dRad_prec > 0 ? 2 * PockParams.dRad_prec : 2 * PockParams.dRad ;
@@ -2283,7 +2283,7 @@ SpecialAdjustTrapezoidSpiralForAngles( ICurveComposite* pMCrv, const bool bEvenC
static bool
CalcTrapezoidSpiralXCoord( const ICurveComposite* pCrvPocket, int nBase, int nSecondBase,
bool bStart, double dYCoord, double& dXCoord, double dPocketSize,
PocketParams PockParams)
const PocketParams& PockParams)
{
// parametri
double dDiam = PockParams.dRad_prec > 0 ? 2 * PockParams.dRad_prec : 2 * PockParams.dRad ;
@@ -2390,7 +2390,7 @@ CalcTrapezoidSpiralXCoord( const ICurveComposite* pCrvPocket, int nBase, int nSe
//----------------------------------------------------
static bool
SpecialAdjustTrapezoidSpiralForAngles( ICurveComposite* pMCrv, const bool bEvenClosed,
PocketParams PockParams, const ICurveComposite* pCrvPocket)
const PocketParams& PockParams, const ICurveComposite* pCrvPocket)
{
// parametri
double dDiam = PockParams.dRad_prec > 0 ? 2 * PockParams.dRad_prec : 2 * PockParams.dRad ;
@@ -2467,7 +2467,7 @@ SpecialAdjustTrapezoidSpiralForAngles( ICurveComposite* pMCrv, const bool bEvenC
//----------------------------------------------------
static bool
AdjustTrapezoidSpiralForAngles( ICurveComposite* pMCrv, const ICurveComposite* pCrvPocket,
PocketParams PockParams, bool bStart)
const PocketParams& PockParams, bool bStart)
{
// parametri
double dDiam = PockParams.dRad_prec > 0 ? 2 * PockParams.dRad_prec : 2 * PockParams.dRad ;
@@ -2623,7 +2623,7 @@ AdjustTrapezoidSpiralForAngles( ICurveComposite* pMCrv, const ICurveComposite* p
//----------------------------------------------------
static bool
CalcTrapezoidSpiral( ICurveComposite* pCrvPocket, const Frame3d& frTrap, double dPocketSize, int nBase,
int nSecondBase, PocketParams PockParams, ICurveComposite* pMCrv, ICurveComposite* pRCrv, bool& bOptimizedTrap)
int nSecondBase, const PocketParams& PockParams, ICurveComposite* pMCrv, ICurveComposite* pRCrv, bool& bOptimizedTrap)
{
// parametri
double dDiam = 2 * PockParams.dRad ;
@@ -2814,7 +2814,7 @@ CalcTrapezoidSpiral( ICurveComposite* pCrvPocket, const Frame3d& frTrap, double
//----------------------------------------------------------------------------
static bool
ModifyCurveToSmoothed( ICurveComposite* pCrv, PocketParams PockParams, double dRightLen, double dLeftLen, bool bAsParam)
ModifyCurveToSmoothed( ICurveComposite* pCrv, const PocketParams& PockParams, double dRightLen, double dLeftLen, bool bAsParam)
{
// se non richiesto non faccio nulla
if ( ! PockParams.bSmooth)
@@ -3191,7 +3191,7 @@ ModifyBiArc( ICurve* pBiArcLink, double dToll, ICurveComposite* pNewBiArc)
static bool
CalcBoundedSmootedLink( const Point3d& ptStart, const Vector3d& vtStart, const Point3d& ptEnd,
const Vector3d& vtEnd, double dParMeet, const ICRVCOMPOPOVECTOR& vOffIslands,
PocketParams PockParams, ICurveComposite* pCrvLink)
const PocketParams& PockParams, ICurveComposite* pCrvLink)
{
// se senza smusso, ritorno tratto lineare
if ( ! PockParams.bSmooth)
@@ -3314,8 +3314,8 @@ CalcBoundedSmootedLink( const Point3d& ptStart, const Vector3d& vtStart, const P
//----------------------------------------------------------------------------
static bool
CutCurveToConnect( ICurveComposite* pCrvS, ICurveComposite* pCrvE, const ICRVCOMPOPOVECTOR& vOffsCL,
const ICRVCOMPOPOVECTOR& vFirstOffset, PocketParams PockParams, ICurveComposite* pCrvLink, double dLenPercS,
double dLenPercE, int nMaxIter)
const ICRVCOMPOPOVECTOR& vFirstOffset, const PocketParams& PockParams, ICurveComposite* pCrvLink,
double dLenPercS, double dLenPercE, int nMaxIter)
{
// controllo i parametri
if ( pCrvS == nullptr || pCrvE == nullptr )
@@ -3419,7 +3419,7 @@ CutCurveToConnect( ICurveComposite* pCrvS, ICurveComposite* pCrvE, const ICRVCOM
//----------------------------------------------------------
static bool
GetUnclearedRegion( ICRVCOMPOPOVECTOR& vFirstOffs, ICRVCOMPOPOVECTOR& vCrvs, ICURVEPOVECTOR& vLinks,
const ICurveComposite* pCrv_orig, PocketParams PockParams, ISurfFlatRegion* pSrfToCut)
const ICurveComposite* pCrv_orig, const PocketParams& PockParams, ISurfFlatRegion* pSrfToCut)
{
// controllo dei parametri
@@ -3545,7 +3545,7 @@ RemoveFirstLoopFromSfr( ISurfFlatRegion* pSrfOrig)
//----------------------------------------------------------------------------
static bool
RemoveExtraPartByMedialAxis( const ISurfFlatRegion* pChunkToCut, ICRVCOMPOPOVECTOR& vOffsFirstCurve,
PocketParams PockParams, int& nOptFlag, Point3d& ptCentroid, ICurveComposite* pCrvPath)
const PocketParams& PockParams, int& nOptFlag, Point3d& ptCentroid, ICurveComposite* pCrvPath)
{
// nOptFlag : 0 -> non faccio nulla | 1 -> svuoto con un centroide | 2 -> svuoto con un percorso
@@ -4016,7 +4016,7 @@ CutCurveByOffsets( ICurveComposite* pCurve, ICRVCOMPOPOVECTOR& vOffs)
//----------------------------------------------------------------------------
static bool
GetNewCurvetWithCentroid( const ICurveComposite* pCrvH1, const ICurveComposite* pCrvH2,
PocketParams PockParams, Point3d& ptC,
const PocketParams& PockParams, Point3d& ptC,
bool bCir, ICRVCOMPOPOVECTOR& VFirstOff, ICurveComposite* pCrvNewCurve)
{
// creazione dei due possibili percorsi per raggiungere il centroide
@@ -4107,7 +4107,7 @@ GetNewCurvetWithCentroid( const ICurveComposite* pCrvH1, const ICurveComposite*
//----------------------------------------------------------------------------
static bool
ManageSmoothAndAutoInters( ICurveComposite* pCrv, ICurveComposite* pCrvPath, ICurveComposite* pPath1,
PocketParams PockParams, ICurveComposite* pPath2, ICRVCOMPOPOVECTOR& vOffsCL)
const PocketParams& PockParams, ICurveComposite* pPath2, ICRVCOMPOPOVECTOR& vOffsCL)
{
// controllo parametri
if ( pCrv == nullptr)
@@ -4210,7 +4210,7 @@ ManageSmoothAndAutoInters( ICurveComposite* pCrv, ICurveComposite* pCrvPath, ICu
//----------------------------------------------------------------------------
static bool
GetNewCurvetWithPath( const ICurveComposite* pCrvH1, const ICurveComposite* pCrvH2, ICurveComposite* pCrvPath,
ICRVCOMPOPOVECTOR& VFirstOff, ICRVCOMPOPOVECTOR& VoffsCl, PocketParams PockParams,
ICRVCOMPOPOVECTOR& VFirstOff, ICRVCOMPOPOVECTOR& VoffsCl, const PocketParams& PockParams,
ICurveComposite* pCrvNewCurve)
{
// inizializzo i due possibili percorsi
@@ -4423,7 +4423,7 @@ ChoosePath( const ICurveComposite* pCrv1, const ICurveComposite* pCrv2, int nP,
//----------------------------------------------------------------------------
static bool
RemoveExtraParts( ISurfFlatRegion* pSrfToCut, ICRVCOMPOPOVECTOR& vOffs, ICRVCOMPOPOVECTOR& vOffsClosedCurves,
ICRVCOMPOPOVECTOR& vOffsFirstCurve, ICURVEPOVECTOR& vLinks, PocketParams PockParams)
ICRVCOMPOPOVECTOR& vOffsFirstCurve, ICURVEPOVECTOR& vLinks, const PocketParams& PockParams)
{
// controllo parametri
@@ -4586,7 +4586,7 @@ RemoveExtraParts( ISurfFlatRegion* pSrfToCut, ICRVCOMPOPOVECTOR& vOffs, ICRVCOMP
//----------------------------------------------------------------------------
static bool
CreateSpiralPocketingPath( ICRVCOMPOPOVECTOR& vOffs, ICURVEPOVECTOR& vLinks, PocketParams PockParams,
CreateSpiralPocketingPath( ICRVCOMPOPOVECTOR& vOffs, ICURVEPOVECTOR& vLinks, const PocketParams& PockParams,
const ICRVCOMPOPOVECTOR& vOffsClosedCurves, const ICRVCOMPOPOVECTOR& vOffsFirstCurve)
{
// controllo dei parametri
@@ -4717,7 +4717,7 @@ CreateSpiralPocketingPath( ICRVCOMPOPOVECTOR& vOffs, ICURVEPOVECTOR& vLinks, Poc
//----------------------------------------------------------------------------
static bool
CheckIfOffsetIsNecessary( const ICurveComposite* pCrvOffs, const double dOffs, const int nOffsCount,
const int nIter, const Vector3d& vtN, PocketParams PockParams, bool& bInsert)
const int nIter, const Vector3d& vtN, const PocketParams& PockParams, bool& bInsert)
{
// controllo dei parametri
@@ -4800,7 +4800,7 @@ CheckIfOffsetIsNecessary( const ICurveComposite* pCrvOffs, const double dOffs, c
//----------------------------------------------------------------------------
static bool
CalcSpiral( const ISurfFlatRegion* pSrfPock, PocketParams PockParams, int& nReg, Point3d& ptStart,
CalcSpiral( const ISurfFlatRegion* pSrfPock, const PocketParams& PockParams, int& nReg, Point3d& ptStart,
ICurveComposite* pCrvOEWithFlags, ICurveComposite* pMCrv, ICurveComposite* pRCrv,
bool& bOptimizedTrap)
{
@@ -5066,7 +5066,7 @@ CheckSimpleOverlap( const ICurve* pCrv, const ICurveComposite* pCrvOri, int& nSt
//----------------------------------------------------------
static bool
CalcZigZagLink( ICurveComposite* pCrv1, ICurveComposite* pCrv2, PocketParams PockParams,
CalcZigZagLink( ICurveComposite* pCrv1, ICurveComposite* pCrv2, const PocketParams& PockParams,
ICurveComposite* pCrvLink)
{
// se non richiesto, esco
@@ -5215,7 +5215,7 @@ CalcZigZagLink( ICurveComposite* pCrv1, ICurveComposite* pCrv2, PocketParams Poc
//----------------------------------------------------------------------------
static bool
CalcZigZag( const ISurfFlatRegion* pSrfZigZag, PocketParams PockParams, ICRVCOMPOPOVECTOR& vpCrvs,
CalcZigZag( const ISurfFlatRegion* pSrfZigZag, const PocketParams& PockParams, ICRVCOMPOPOVECTOR& vpCrvs,
bool bFromInfill)
{
@@ -5536,7 +5536,7 @@ CalcZigZag( const ISurfFlatRegion* pSrfZigZag, PocketParams PockParams, ICRVCOMP
//----------------------------------------------------------------------------
static bool
AddSpiralIn( const ISurfFlatRegion* pSrfPock, PocketParams PockParams,
AddSpiralIn( const ISurfFlatRegion* pSrfPock, const PocketParams& PockParams,
const ICRVCOMPOPOVECTOR& vCrvOrig, ICRVCOMPOPOVECTOR& vCrvCompoRes)
{
// ciclo sui chunk della superficie da svuotare
@@ -5587,8 +5587,8 @@ AddSpiralIn( const ISurfFlatRegion* pSrfPock, PocketParams PockParams,
//----------------------------------------------------------------------------
static bool
AddSpiralOut( const ISurfFlatRegion* pSrfPock, PocketParams PockParams,
const ICRVCOMPOPOVECTOR& vCrvOrig, ICRVCOMPOPOVECTOR& vCrvCompoRes)
AddSpiralOut( const ISurfFlatRegion* pSrfPock, const PocketParams& PockParams,
const ICRVCOMPOPOVECTOR& vCrvOrig, ICRVCOMPOPOVECTOR& vCrvCompoRes)
{
// ciclo sui chunk della superficie da svuotare
for ( int c = 0 ; c < pSrfPock->GetChunkCount() ; ++ c) {
@@ -5641,7 +5641,7 @@ AddSpiralOut( const ISurfFlatRegion* pSrfPock, PocketParams PockParams,
//----------------------------------------------------------------------------
static bool
AddZigZag( const ISurfFlatRegion* pSrfPock, PocketParams PockParams, ICRVCOMPOPOVECTOR& vCrvCompoRes)
AddZigZag( const ISurfFlatRegion* pSrfPock, const PocketParams& PockParams, ICRVCOMPOPOVECTOR& vCrvCompoRes)
{
// Offset della regione per curva ZigZag
@@ -5771,7 +5771,7 @@ OptimizeChunkOneWay( ISurfFlatRegion* pSrfOrig, ISURFFRPOVECTOR& vSrfIdeal)
//----------------------------------------------------------------------------
static bool
AddOneWay( const ISurfFlatRegion* pSrfPock, PocketParams PockParams, ICRVCOMPOPOVECTOR& vCrvCompoRes)
AddOneWay( const ISurfFlatRegion* pSrfPock, const PocketParams& PockParams, ICRVCOMPOPOVECTOR& vCrvCompoRes)
{
double dOffs = PockParams.dRad ;
@@ -5876,7 +5876,7 @@ AddOneWay( const ISurfFlatRegion* pSrfPock, PocketParams PockParams, ICRVCOMPOPO
//----------------------------------------------------------------------------
bool
CalcPocketing( const ISurfFlatRegion *pSfr, double dRad, double dStep, double dAngle, int nType, bool bSmooth,
CalcPocketing( const ISurfFlatRegion* pSfr, double dRad, double dStep, double dAngle, int nType, bool bSmooth,
ICRVCOMPOPOVECTOR& vCrvCompoRes)
{
// controllo dei parametri
@@ -6048,7 +6048,7 @@ AdjustLinkSameY( ICurveComposite* pCrvLink, bool& bSplit)
//----------------------------------------------------------------------------
static bool
AdjustLinkDifferentY( const ICurve* pCrvSegPrec, const ICurve* pCrvSegSucc,
const ICurveComposite* pCrvLink, PocketParams PockParams, bool& bSplit)
const ICurveComposite* pCrvLink, const PocketParams& PockParams, bool& bSplit)
{
// controllo dei parametri
if ( pCrvLink == nullptr || ! pCrvLink->IsValid())
@@ -6114,7 +6114,7 @@ AdjustLinkDifferentY( const ICurve* pCrvSegPrec, const ICurve* pCrvSegSucc,
//----------------------------------------------------------------------------
static bool
AdjustLinkZigZagInfill( ICurveComposite* pCrvCompo, PocketParams PockParams, ICRVCOMPOPOVECTOR& vNewCrv)
AdjustLinkZigZagInfill( ICurveComposite* pCrvCompo, const PocketParams& PockParams, ICRVCOMPOPOVECTOR& vNewCrv)
{
// controllo dei parametri
if ( pCrvCompo == nullptr || ! pCrvCompo->IsValid())
+8
View File
@@ -371,6 +371,14 @@ CurveDump( const ICurve& crvC, string& sOut, bool bMM, const char* szNewLine)
sOut += string( "Closed") + ( bCCW ? " CCW" : " CW") + " AreaXY=" +
ToString( dAreaUi, nDec) + szNewLine ;
}
// eventuali proprietà temporanee
vector<int> vProp{ crvC.GetTempProp( 0), crvC.GetTempProp( 1)} ;
if ( vProp[0] != 0 || vProp[1] != 0)
sOut += string( "TmpProp=") + ToString( vProp) + szNewLine ;
// eventuali parametri temporanei
vector<double> vParam{ crvC.GetTempParam( 0), crvC.GetTempParam( 1)} ;
if ( abs( vParam[0]) > EPS_ZERO || abs( vParam[1]) > EPS_ZERO)
sOut += string( "TmpParam=") + ToString( vParam) + szNewLine ;
return true ;
}
+1 -1
View File
@@ -662,7 +662,7 @@ CurveComposite::Dump( string& sOut, bool bMM, const char* szNewLine) const
while ( pCrvSmpl != nullptr && i < MAX_CRV) {
// assegno ed emetto nome e tipo della curva semplice
sOut += "#" + ToString( i) + " " + pCrvSmpl->GetTitle() + szNewLine ;
// salvataggio della curva semplice
// dati della curva semplice
if ( ! pCrvSmpl->Dump( sOut, bMM, szNewLine))
return false ;
// passo alla successiva
BIN
View File
Binary file not shown.
+10 -29
View File
@@ -367,25 +367,14 @@ GetSurfFlatRegionFromTriangle( const Triangle3d& Tria)
ISurfFlatRegion*
GetSurfFlatRegionFromPolyLine( const PolyLine& ContourPolyLine)
{
// Creo la regione.
PtrOwner<SurfFlatRegion> pSfr( CreateBasicSurfFlatRegion()) ;
if ( IsNull( pSfr))
return nullptr ;
// Creo curva composita.
PtrOwner<CurveComposite> pLoop( CreateBasicCurveComposite()) ;
if ( IsNull( pLoop))
if ( IsNull( pLoop) || ! pLoop->FromPolyLine( ContourPolyLine))
return nullptr ;
// Creo la regione.
PtrOwner<SurfFlatRegion> pSfr( CreateBasicSurfFlatRegion()) ;
if ( IsNull( pSfr) || ! pSfr->AddExtLoop( Release( pLoop)))
return nullptr ;
Point3d ptSt, ptEn ;
bool bContinue = ContourPolyLine.GetFirstPoint( ptSt) &&
ContourPolyLine.GetNextPoint( ptEn) ;
while ( bContinue) {
CurveLine cvLine ;
cvLine.Set( ptSt, ptEn) ;
pLoop->AddCurve( cvLine) ;
ptSt = ptEn ;
bContinue = ContourPolyLine.GetNextPoint( ptEn) ;
}
pSfr->AddExtLoop( Release( pLoop)) ;
return Release( pSfr) ;
}
@@ -401,25 +390,17 @@ GetSurfFlatRegionFromPolyLineVector( const POLYLINEVECTOR& vContoursPolyLineVec)
for ( int nL = 0 ; nL < int( vContoursPolyLineVec.size()) ; ++ nL) {
// Creo curva composita.
PtrOwner<CurveComposite> pLoop( CreateBasicCurveComposite()) ;
if ( IsNull( pLoop))
if ( IsNull( pLoop) || ! pLoop->FromPolyLine( vContoursPolyLineVec[nL]))
return nullptr ;
Point3d ptSt, ptEn ;
bool bContinue = vContoursPolyLineVec[nL].GetFirstPoint( ptSt) &&
vContoursPolyLineVec[nL].GetNextPoint( ptEn) ;
while ( bContinue) {
CurveLine cvLine ;
cvLine.Set( ptSt, ptEn) ;
pLoop->AddCurve( cvLine) ;
ptSt = ptEn ;
bContinue = vContoursPolyLineVec[nL].GetNextPoint( ptEn) ;
}
// Loop esterno
if ( nL == 0) {
pSfr->AddExtLoop( Release( pLoop)) ;
if ( ! pSfr->AddExtLoop( Release( pLoop)))
return nullptr ;
}
// Loop interno
else {
pSfr->AddIntLoop( Release( pLoop)) ;
if ( ! pSfr->AddIntLoop( Release( pLoop)))
return nullptr ;
}
}
return Release( pSfr) ;
+1 -1
View File
@@ -1233,7 +1233,7 @@ SurfTriMesh::GetSilhouette( const Plane3d& plPlane, double dTol, POLYLINEVECTOR&
// Se non esiste la regione
if ( IsNull( pSfr))
return false ;
return true ;
// Effettuo contro-offset
pSfr->Offset( -dTol, ICurve::OFF_EXTEND) ;