EgtGeomKernel 1.5h5 :

- sistemata approssimazione di curve di Bezier con archi
- aggiunta a CurveBezier metodo per sapere se è collassata in un punto
- in PolyArc e PolyLine sostituite Splice con Join e aggiunte Split
- in TSC non si accetta più la creazione di una curva di Bezier collassata in un punto.
This commit is contained in:
Dario Sassi
2014-08-19 20:19:17 +00:00
parent de246fc3e7
commit d0521e8f92
23 changed files with 499 additions and 208 deletions
+42 -38
View File
@@ -633,7 +633,7 @@ GdbExecutor::CurveLineMake( const STRVECTOR& vsParams)
return false ;
// creo la linea
PtrOwner<ICurveLine> pCrvLine( CreateCurveLine()) ;
if ( ! IsValid( pCrvLine))
if ( IsNull( pCrvLine))
return false ;
// setto la linea
if ( ! pCrvLine->Set( ptStart, ptEnd))
@@ -667,7 +667,7 @@ GdbExecutor::CurveLineVersorLength( const STRVECTOR& vsParams)
return false ;
// creo la linea
PtrOwner<ICurveLine> pCrvLine( CreateCurveLine()) ;
if ( ! IsValid( pCrvLine))
if ( IsNull( pCrvLine))
return false ;
// setto la linea
if ( ! pCrvLine->SetPVL( ptStart, vtDir, dLen))
@@ -701,7 +701,7 @@ GdbExecutor::CurveLineDirLength( const STRVECTOR& vsParams)
return false ;
// creo la linea
PtrOwner<ICurveLine> pCrvLine( CreateCurveLine()) ;
if ( ! IsValid( pCrvLine))
if ( IsNull( pCrvLine))
return false ;
// setto la linea
if ( ! pCrvLine->SetPDL( ptStart, dDirAngDeg, dLen))
@@ -799,7 +799,7 @@ GdbExecutor::CurveLineTgTwoArcs( const STRVECTOR& vsParams)
return false ;
// porto il secondo arco nel riferimento del primo
PtrOwner<ICurveArc> pArc2Loc( CreateCurveArc()) ;
if ( ! IsValid( pArc2Loc))
if ( IsNull( pArc2Loc))
return false ;
pArc2Loc->CopyFrom( pArc2) ;
pArc2Loc->LocToLoc( frArc2, frArc1) ;
@@ -863,7 +863,7 @@ GdbExecutor::CurveLineMinPointCurve( const STRVECTOR& vsParams)
ptEnd.LocToLoc( frCurve, frPoint) ;
// creo la linea
PtrOwner<ICurveLine> pCrvLine( CreateCurveLine()) ;
if ( ! IsValid( pCrvLine))
if ( IsNull( pCrvLine))
return false ;
// setto la linea
if ( ! pCrvLine->Set( ptStart, ptEnd))
@@ -966,7 +966,7 @@ GdbExecutor::CurveCircleMake( const STRVECTOR& vsParams)
return false ;
// creo l'arco
PtrOwner<ICurveArc> pCrvArc( CreateCurveArc()) ;
if ( ! IsValid( pCrvArc))
if ( IsNull( pCrvArc))
return false ;
// setto l'arco
if ( ! pCrvArc->Set( ptCen, vtN, dRad))
@@ -996,7 +996,7 @@ GdbExecutor::CurveCirclePlaneXY( const STRVECTOR& vsParams)
return false ;
// creo l'arco
PtrOwner<ICurveArc> pCrvArc( CreateCurveArc()) ;
if ( ! IsValid( pCrvArc))
if ( IsNull( pCrvArc))
return false ;
// setto l'arco
if ( ! pCrvArc->SetXY( ptCen, dRad))
@@ -1042,7 +1042,7 @@ GdbExecutor::CurveArcMake( const STRVECTOR& vsParams)
return false ;
// creo l'arco
PtrOwner<ICurveArc> pCrvArc( CreateCurveArc()) ;
if ( ! IsValid( pCrvArc))
if ( IsNull( pCrvArc))
return false ;
// setto l'arco
if ( ! pCrvArc->Set( ptCen, vtN, dRad, vtS, dAngCenDeg, dDeltaZ))
@@ -1084,7 +1084,7 @@ GdbExecutor::CurveArcPlaneXY( const STRVECTOR& vsParams)
return false ;
// creo l'arco
PtrOwner<ICurveArc> pCrvArc( CreateCurveArc()) ;
if ( ! IsValid( pCrvArc))
if ( IsNull( pCrvArc))
return false ;
// setto l'arco
if ( ! pCrvArc->SetXY( ptCen, dRad, dAngIniDeg, dAngCenDeg, dDeltaZ))
@@ -1118,7 +1118,7 @@ GdbExecutor::CurveArcCircle3P( const STRVECTOR& vsParams, bool bCirc)
return false ;
// creo l'arco
PtrOwner<ICurveArc> pCrvArc( CreateCurveArc()) ;
if ( ! IsValid( pCrvArc))
if ( IsNull( pCrvArc))
return false ;
// setto l'arco
if ( ! pCrvArc->Set3P( ptP0, ptP1, ptP2, bCirc))
@@ -1187,7 +1187,7 @@ GdbExecutor::CurveArc2PRS( const STRVECTOR& vsParams)
bCCW = false ;
// creo l'arco
PtrOwner<ICurveArc> pCrvArc( CreateCurveArc()) ;
if ( ! IsValid( pCrvArc))
if ( IsNull( pCrvArc))
return false ;
// setto l'arco
if ( ! pCrvArc->Set2PRS( ptPi, ptPf, dRad, bCCW))
@@ -1221,7 +1221,7 @@ GdbExecutor::CurveArcC2P( const STRVECTOR& vsParams)
return false ;
// creo l'arco
PtrOwner<ICurveArc> pCrvArc( CreateCurveArc()) ;
if ( ! IsValid( pCrvArc))
if ( IsNull( pCrvArc))
return false ;
// setto l'arco
if ( ! pCrvArc->SetC2P( ptCen, ptPi, ptNearPf))
@@ -1487,7 +1487,7 @@ GdbExecutor::ExecuteCurveBez( const string& sCmd2, const STRVECTOR& vsParams)
{
// creo la curva di Bezier
PtrOwner<ICurveBezier> pCrvBez( CreateCurveBezier()) ;
if ( ! IsValid( pCrvBez))
if ( IsNull( pCrvBez))
return false ;
// per cancellazione eventuale arco di origine
bool bErase = false ;
@@ -1578,6 +1578,10 @@ GdbExecutor::ExecuteCurveBez( const string& sCmd2, const STRVECTOR& vsParams)
else
return false ;
// se curva nulla (ovvero ridotta a punto), errore
if ( pCrvBez->IsAPoint())
return false ;
// inserisco la curva di Bezier nel DB
if ( AddGeoObj( vsParams[0], vsParams[1], Release( pCrvBez))) {
// se richiesto, cancello eventuale arco di origine
@@ -1650,7 +1654,7 @@ GdbExecutor::CurveCompoMake( const STRVECTOR& vsParams)
{
// creo la curva composita
PtrOwner<ICurveComposite> pCrvCompo( CreateCurveComposite()) ;
if ( ! IsValid( pCrvCompo))
if ( IsNull( pCrvCompo))
return false ;
// 3 o 4 parametri
bool bErase ;
@@ -1689,7 +1693,7 @@ GdbExecutor::CurveCompoMake( const STRVECTOR& vsParams)
else {
// creo una copia della curva (da buttare alla fine)
PtrOwner<ICurve> pModCrv( pCrv->Clone()) ;
if ( ! IsValid( pModCrv))
if ( IsNull( pModCrv))
return false ;
// eseguo la trasformazione
pModCrv->ToGlob( frSou) ;
@@ -1732,7 +1736,7 @@ GdbExecutor::CurveCompoFromPoints( const STRVECTOR& vsParams)
return false ;
// creo la curva composita
PtrOwner<ICurveComposite> pCrvCompo( CreateCurveComposite()) ;
if ( ! IsValid( pCrvCompo))
if ( IsNull( pCrvCompo))
return false ;
// inserisco i segmenti che uniscono i punti
if ( ! pCrvCompo->FromPolyLine( PL))
@@ -1758,7 +1762,7 @@ GdbExecutor::CurveCompoFromPointBulges( const STRVECTOR& vsParams)
return false ;
// creo la curva composita
PtrOwner<ICurveComposite> pCrvCompo( CreateCurveComposite()) ;
if ( ! IsValid( pCrvCompo))
if ( IsNull( pCrvCompo))
return false ;
// inserisco i segmenti che uniscono i punti
if ( ! pCrvCompo->FromPolyArc( PA))
@@ -1810,7 +1814,7 @@ GdbExecutor::CurveCompoFromPointInterpolation( const STRVECTOR& vsParams)
crvByInterp.AddPoint( ptP) ;
crvByInterp.End() ;
PtrOwner<ICurve> pCrv( crvByInterp.GetCurve( nMethod, nType)) ;
if ( ! ::IsValid( pCrv))
if ( IsNull( pCrv))
return false ;
// inserisco la curva composita nel DB
return AddGeoObj( vsParams[0], vsParams[1], ::Release( pCrv)) ;
@@ -1843,7 +1847,7 @@ GdbExecutor::CurveCompoFromCurveApproximation( const STRVECTOR& vsParams)
return false ;
// eseguo l'approssimazione
PtrOwner<ICurveComposite> pCC( CreateCurveComposite()) ;
if ( ! IsValid( pCC))
if ( IsNull( pCC))
return false ;
if ( nType == 1) { // con linee
PolyLine PL ;
@@ -1876,7 +1880,7 @@ GdbExecutor::CurveCompoFromSplit( const STRVECTOR& vsParams)
// creo la curva composita
PtrOwner<ICurveComposite> pCrvCompo( CreateCurveComposite()) ;
if ( ! IsValid( pCrvCompo))
if ( IsNull( pCrvCompo))
return false ;
// salvo nome curva originale per eventuale cancellazione
@@ -1944,7 +1948,7 @@ GdbExecutor::CurveCompoFromPolygon( const STRVECTOR& vsParams, int nType)
return false ;
// creo la curva composita
PtrOwner<ICurveComposite> pCrvCompo( CreateCurveComposite()) ;
if ( ! IsValid( pCrvCompo))
if ( IsNull( pCrvCompo))
return false ;
// costruisco il poligono
switch ( nType) {
@@ -2001,7 +2005,7 @@ GdbExecutor::CurveCompoFromBiarc( const STRVECTOR& vsParams)
return false ;
// costruisco il biarco
PtrOwner<ICurve> pBiArc( GetBiArc( ptP1, dDir1, ptP2, dDir2, dPar)) ;
if ( ! ::IsValid( pBiArc))
if ( IsNull( pBiArc))
return false ;
// inserisco la curva nel DB
return AddGeoObj( vsParams[0], vsParams[1], Release( pBiArc)) ;
@@ -2334,7 +2338,7 @@ GdbExecutor::SurfTriMeshByContour( const STRVECTOR& vsParams)
return false ;
// creo la superficie
PtrOwner<ISurfTriMesh> pSTM( CreateSurfTriMesh()) ;
if ( ! IsValid( pSTM))
if ( IsNull( pSTM))
return false ;
// costruisco la triangolazione
if ( ! pSTM->CreateByFlatContour( PL))
@@ -2370,7 +2374,7 @@ GdbExecutor::SurfTriMeshByExtrusion( const STRVECTOR& vsParams)
return false ;
// creo la superficie
PtrOwner<ISurfTriMesh> pSTM( CreateSurfTriMesh()) ;
if ( ! IsValid( pSTM))
if ( IsNull( pSTM))
return false ;
// costruisco l'estrusione
if ( ! pSTM->CreateByExtrusion( PL, vtExtr))
@@ -2408,7 +2412,7 @@ GdbExecutor::SurfTriMeshByTwoPaths( const STRVECTOR& vsParams)
return false ;
// creo la superficie
PtrOwner<ISurfTriMesh> pSTM( CreateSurfTriMesh()) ;
if ( ! IsValid( pSTM))
if ( IsNull( pSTM))
return false ;
// costruisco la rigata tra le due curve
if ( ! pSTM->CreateByTwoCurves( PL1, PL2))
@@ -2476,7 +2480,7 @@ GdbExecutor::SurfTriMeshByScrewing( bool bMove, const STRVECTOR& vsParams)
double dStepRotDeg = sqrt( 8 * dLinTol / dMaxRad) * RADTODEG ;
// creo la superficie
PtrOwner<ISurfTriMesh> pSTM( CreateSurfTriMesh()) ;
if ( ! IsValid( pSTM))
if ( IsNull( pSTM))
return false ;
// costruisco la rivoluzione
if ( ! pSTM->CreateByScrewing( PL, ptAx, vtAx, dAngRotDeg, dStepRotDeg, dMove))
@@ -2508,7 +2512,7 @@ GdbExecutor::GetPolyLineFromCurve( int nId, const Frame3d& frDest, double dLinTo
else {
// creo una copia della curva (da buttare alla fine)
PtrOwner<ICurve> pModCrv( pCrv->Clone()) ;
if ( ! IsValid( pModCrv))
if ( IsNull( pModCrv))
return false ;
// eseguo la trasformazione
pModCrv->LocToLoc( frCrv, frDest) ;
@@ -2542,7 +2546,7 @@ GdbExecutor::GetPolyArcFromCurve( int nId, const Frame3d& frDest, double dLinTol
else {
// creo una copia della curva (da buttare alla fine)
PtrOwner<ICurve> pModCrv( pCrv->Clone()) ;
if ( ! IsValid( pModCrv))
if ( IsNull( pModCrv))
return false ;
// eseguo la trasformazione
pModCrv->LocToLoc( frCrv, frDest) ;
@@ -2710,7 +2714,7 @@ GdbExecutor::TextSimple( const STRVECTOR& vsParams)
return false ;
// creo il testo
PtrOwner<IExtText> pTXT( CreateExtText()) ;
if ( ! IsValid( pTXT))
if ( IsNull( pTXT))
return false ;
// lo riempio
if ( ! pTXT->Set( sText, ptP, dAngRotDeg, dH))
@@ -2785,7 +2789,7 @@ GdbExecutor::TextComplete( const STRVECTOR& vsParams)
nInsPos = ETXT_IPBR ;
// creo il testo
PtrOwner<IExtText> pTXT( CreateExtText()) ;
if ( ! IsValid( pTXT))
if ( IsNull( pTXT))
return false ;
// lo riempio
if ( ! pTXT->Set( sText, ptP, dAngRotDeg, vsParams[5], nW, bItl, dH, dRat, dAddAdv, nInsPos))
@@ -3291,7 +3295,7 @@ GdbExecutor::GetPointParam( const string& sParam, const Frame3d& frPnt, Point3d&
PtrOwner<ICurve> crvTrans( nullptr) ;
if ( ! AreSameFrame( frEnt, frEnt2)) {
crvTrans.Set( pCrv2->Clone()) ;
if ( ! ::IsValid( crvTrans))
if ( IsNull( crvTrans))
return false ;
crvTrans->LocToLoc( frEnt2, frEnt) ;
pCrv2 = ::Get( crvTrans) ;
@@ -4888,7 +4892,7 @@ GdbExecutor::CurveCopyByParamRange( const STRVECTOR& vsParams)
return false ;
// copio la parte di curva che interessa e la porto nel riferimento del gruppo destinazione
PtrOwner<ICurve> pCopy( pCrv->CopyParamRange( dUStart, dUEnd)) ;
if ( ! ::IsValid( pCopy))
if ( IsNull( pCopy))
return false ;
pCopy->LocToLoc( frCrv, frDest) ;
// la inserisco nel gruppo
@@ -4926,7 +4930,7 @@ GdbExecutor::CurveCopyBySplitClass( const STRVECTOR& vsParams)
PtrOwner<ICurve> crvTrans ;
if ( ! AreSameFrame( frCrv, frCloCrv)) {
crvTrans.Set( pCloCrv->Clone()) ;
if ( ! ::IsValid( crvTrans))
if ( IsNull( crvTrans))
return false ;
crvTrans->LocToLoc( frCloCrv, frCrv) ;
pCloCrv = ::Get( crvTrans) ;
@@ -4965,7 +4969,7 @@ GdbExecutor::CurveCopyBySplitClass( const STRVECTOR& vsParams)
continue ;
// copio la parte di curva che interessa e la porto nel riferimento del gruppo
PtrOwner<ICurve> pSplit( pCrv->CopyParamRange( ccClass[i].dParS, ccClass[i].dParE)) ;
if ( ! ::IsValid( pSplit))
if ( IsNull( pSplit))
continue ;
pSplit->LocToLoc( frCrv, frGrp[nGrp]) ;
// la inserisco nel gruppo
@@ -5033,7 +5037,7 @@ GdbExecutor::CurveCopyByChain( const STRVECTOR& vsParams)
while ( chainC.GetChainFromNear( ptNearStart, vIds)) {
// creo una curva composita
PtrOwner<ICurveComposite> pCrvCompo( CreateCurveComposite()) ;
if ( ! IsValid( pCrvCompo))
if ( IsNull( pCrvCompo))
return false ;
// recupero le curve semplici e le inserisco nella curva composita
INTVECTOR::iterator Iter ;
@@ -5049,7 +5053,7 @@ GdbExecutor::CurveCopyByChain( const STRVECTOR& vsParams)
return false ;
// copio la curva
PtrOwner<ICurve> pCopCrv( pCrv->Clone()) ;
if ( ! IsValid( pCopCrv))
if ( IsNull( pCopCrv))
return false ;
// se necessario, la inverto
if ( bInvert)
@@ -5186,7 +5190,7 @@ GdbExecutor::ExecuteOutTextIcci( const string& sCmd2, const STRVECTOR& vsParams)
PtrOwner<ICurve> crvTrans ;
if ( ! AreSameFrame( frEnt1, frEnt2)) {
crvTrans.Set( pCrv2->Clone()) ;
if ( ! ::IsValid( crvTrans))
if ( IsNull( crvTrans))
return false ;
crvTrans->LocToLoc( frEnt2, frEnt1) ;
pCrv2 = ::Get( crvTrans) ;
@@ -5255,7 +5259,7 @@ GdbExecutor::ExecuteOutTextIcci( const string& sCmd2, const STRVECTOR& vsParams)
return false ;
// creo il testo
PtrOwner<IExtText> pTXT( CreateExtText()) ;
if ( ! IsValid( pTXT))
if ( IsNull( pTXT))
return false ;
// lo riempio
if ( ! pTXT->Set( sText, ptText, 0, dH))