Files
Include/EGkCurveAux.h
Dario Sassi 3d41f14559 Include :
- modifica al costruttore di default di CNurbsData per impostare il nuovo flag bClamped a true (per compatibilità con precedente stato).
2023-12-18 19:53:57 +01:00

94 lines
4.7 KiB
C

//----------------------------------------------------------------------------
// EgalTech 2014-2014
//----------------------------------------------------------------------------
// File : EGkCurveAux.h Data : 23.05.14 Versione : 1.5e9
// Contenuto : Dichiarazione funzioni ausiliarie per ICurve.
//
//
//
// Modifiche : 23.05.14 DS Creazione modulo.
//
//
//----------------------------------------------------------------------------
#pragma once
#include "/EgtDev/Include/EGkCurveComposite.h"
//----------------------- Macro per import/export ----------------------------
#undef EGK_EXPORT
#if defined( I_AM_EGK) // da definirsi solo nella DLL
#define EGK_EXPORT __declspec( dllexport)
#else
#define EGK_EXPORT __declspec( dllimport)
#endif
//----------------------------------------------------------------------------
//! Struttura dati per curva Nurbs
struct CNurbsData
{
int nDeg ; // grado
bool bRat ; // flag di curva razionale (pesi non tutti unitari)
bool bPeriodic ; // flag per segnalare vettore dei nodi periodico
bool bClosed ; // flag di curva chiusa
bool bClamped ; // flag di curva clamped
bool bExtraKnotes ; // flag per segnalare presenza di nodi extra all'inizio e fine (totale 2)
DBLVECTOR vU ; // vettore dei nodi
PNTVECTOR vCP ; // vettore dei punti di controllo
DBLVECTOR vW ; // vettore dei pesi
CNurbsData( void) : nDeg( 0), bRat( false), bPeriodic( false), bClosed( false), bClamped( true), bExtraKnotes(false) {}
} ;
// N.B. : in caso la curva sia razionale i punti di controllo sono in forma NON OMOGENEA [ x, y, z, w] ( dove la forma OMOGENEA è [ w*x, w*y, w*z, w])
// tutte le operazioni richiedono la forma OMOGENEA, finite le quali posso riportarmi alla forma NON OMOGENEA
//----------------------------------------------------------------------------
//! Trasforma un arco in una nuova curva di Bezier semplice o composta
EGK_EXPORT ICurve* ArcToBezierCurve( const ICurve* pArc) ;
//----------------------------------------------------------------------------
//! Trasforma una curva in una nuova curva semplice o composta senza archi (solo linee o curve di Bezier)
EGK_EXPORT ICurve* CurveToNoArcsCurve( const ICurve* pCrv) ;
//----------------------------------------------------------------------------
//! Trasformo una curva in una nuova curva semplice o composta con linee o archi perp. a estrusione
EGK_EXPORT ICurve* CurveToArcsPerpExtrCurve( const ICurve* pCrv, double dLinTol, double dAngTolDeg) ;
//----------------------------------------------------------------------------
//! Rende canonica la rappresentazione della curva Nurbs
EGK_EXPORT bool NurbsCurveCanonicalize( CNurbsData& cnData) ;
//----------------------------------------------------------------------------
//! Trasforma una curva Nurbs standard in una nuova curva di Bezier semplice o composta
EGK_EXPORT ICurve* NurbsToBezierCurve( const CNurbsData& cnData) ;
//----------------------------------------------------------------------------
//! Appiattisce la curva sul suo piano medio se rientra nelle tolleranze
const int FLTCRV_STD = 0 ;
const int FLTCRV_USE_EXTR = 1 ;
const int FLTCRV_SET_EXTR = 2 ;
EGK_EXPORT ICurve* FlattenCurve( const ICurve& crCrv, double dToler, double dAngToler, int nFlag = FLTCRV_STD) ;
//----------------------------------------------------------------------------
//! Proietta la curva sul piano indicato
EGK_EXPORT ICurve* ProjectCurveOnPlane( const ICurve& crCrv, const Plane3d& plPlane) ;
//----------------------------------------------------------------------------
//! Uniforma la pendenza di una composita tra quota iniziale e finale assegnate
EGK_EXPORT bool AdjustCurveSlope( ICurveComposite* pCrv, double dNini, double dNfin) ;
//----------------------------------------------------------------------------
//! Calcolo del diagramma di Voronoi della curva, nei TempParam dei risultati la distanza
//! Per nBound tenere valore di default.
EGK_EXPORT bool CalcCurveVoronoiDiagram( const ICurve& crvC, ICURVEPOVECTOR& vCrvs, int nBound = 3) ;
//----------------------------------------------------------------------------
//! Calcolo del Medial Axis della curva (sottoinsieme del diagramma di Voronoi), nei TempParam dei risultati la distanza
EGK_EXPORT bool CalcCurveMedialAxis( const ICurve& crvC, ICURVEPOVECTOR& vCrvs, int nSide) ;
//----------------------------------------------------------------------------
//! Calcola l'offset completo di una curva
EGK_EXPORT bool CalcCurveFatCurve( const ICurve& crvC, ICURVEPOVECTOR& vCrvs, double dRadius, bool bSquareEnds, bool bSquareMids) ;