78b9234865
- in CurveArc migliorato controllo valore parametro in ChangeRadius e ChangeAngCenter - migliorato calcolo fillet con possibilità di arrivare a 180 deg - aggiunta GetCircle2P per creazione circonferenza da due punti su estremi di un diametro.
45 lines
1.4 KiB
C++
45 lines
1.4 KiB
C++
//----------------------------------------------------------------------------
|
|
// EgalTech 2022-2022
|
|
//----------------------------------------------------------------------------
|
|
// File : Circle2P.cpp Data : 18.08.22 Versione : 2.4h2
|
|
// Contenuto : Implementazione funzioni per calcolo circonferenze per 2 punti
|
|
// diametrali.
|
|
//
|
|
//
|
|
// Modifiche : 18.08.22 DS Creazione modulo.
|
|
//
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
//--------------------------- Include ----------------------------------------
|
|
#include "stdafx.h"
|
|
#include "CurveArc.h"
|
|
#include "/EgtDev/Include/EGkCircle2P.h"
|
|
#include "/EgtDev/Include/EgtPointerOwner.h"
|
|
|
|
using namespace std ;
|
|
|
|
//----------------------------------------------------------------------------
|
|
ICurveArc*
|
|
GetCircle2P( const Point3d& ptP1, const Point3d& ptP2, const Vector3d& vtN)
|
|
{
|
|
// Verifico che i due punti siano distinti
|
|
if ( AreSamePointEpsilon( ptP1, ptP2, EPS_SMALL))
|
|
return nullptr ;
|
|
// verifico che la normale non sia allineata con i punti
|
|
Vector3d vtO = OrthoCompo( vtN, ptP2 - ptP1) ;
|
|
if ( ! vtO.Normalize())
|
|
return nullptr ;
|
|
|
|
// Creo l'oggetto arco
|
|
PtrOwner<CurveArc> pCrvArc( CreateBasicCurveArc()) ;
|
|
if ( IsNull( pCrvArc))
|
|
return nullptr ;
|
|
|
|
// Eseguo calcoli
|
|
if ( ! pCrvArc->SetCPAN( Media( ptP1, ptP2), ptP1, ANG_FULL, 0, vtO))
|
|
return nullptr ;
|
|
|
|
return Release( pCrvArc) ;
|
|
}
|