EgtGraphics 1.6g2 :

- intersezione di curve da grafica ora calcola anche auto-intersezioni.
This commit is contained in:
Dario Sassi
2015-07-07 18:33:54 +00:00
parent 65d480d666
commit 4fb1ed39c1
2 changed files with 30 additions and 2 deletions
+30 -2
View File
@@ -25,7 +25,7 @@
#include "/EgtDev/Include/EGkDistPointCurve.h"
#include "/EgtDev/Include/EGkSurfTriMesh.h"
#include "/EgtDev/Include/EGkExtText.h"
#include "/EgtDev/Include/EgkIntersCurveCurve.h"
#include "/EgtDev/Include/EgkIntersCurves.h"
#include "/EgtDev/Include/EGkIntersLineSurfTm.h"
#include "/EgtDev/Include/EgtPointerOwner.h"
@@ -164,8 +164,36 @@ Scene::FindSelectedIntersectionPoint( const Point3d& ptWin, int nW, int nH)
++ nCrvNum ;
}
}
if ( nCrvNum != 2)
// se nessuna curva, esco
if ( nCrvNum == 0)
return false ;
// se una sola curva, può essere auto intersezione
if ( nCrvNum == 1) {
// recupero il riferimento di griglia
Frame3d frGrid = GetGridFrame() ;
// se il riferimento della curva è diverso da quello della griglia, devo trasformarla
PtrOwner<ICurve> crvTrans0( nullptr) ;
if ( ! AreSameFrame( frEnt[0], frGrid)) {
crvTrans0.Set( pCrv[0]->Clone()) ;
if ( IsNull( crvTrans0))
return false ;
crvTrans0->LocToLoc( frEnt[0], frGrid) ;
pCrv[0] = ::Get( crvTrans0) ;
}
// uso il punto sketch come punto vicino e lo porto nel riferimento della griglia
Point3d ptWinZ( ptWin.x, ptWin.y, dWinZ) ;
Point3d ptNear ;
if ( ! UnProject( ptWinZ, ptNear))
ptNear = ORIG ;
ptNear.ToLoc( frGrid) ;
// calcolo il punto di intersezione sulla prima curva più vicino al punto di riferimento
SelfIntersCurve sintC( *pCrv[0]) ;
if ( ! sintC.GetIntersPointNearTo( ptNear, m_ptLastSnapPnt))
return false ;
m_ptLastSnapPnt.ToGlob( frGrid) ;
return true ;
}
// altrimenti due curve, procedo normalmente
// recupero il riferimento di griglia
Frame3d frGrid = GetGridFrame() ;
// se il riferimento della prima curva è diverso da quello della griglia, devo trasformarla