EgtGeomKernel 1.4a5 : Modifiche per EgtGeneral.
This commit is contained in:
+52
-50
@@ -13,17 +13,12 @@
|
||||
|
||||
//--------------------------- Include ----------------------------------------
|
||||
#include "stdafx.h"
|
||||
#include <algorithm>
|
||||
#include <string>
|
||||
#include <sstream>
|
||||
#include <iomanip>
|
||||
#include "/EgtDev/Include/EgnStringUtils.h"
|
||||
//#include "GeoObjTypeFun.h"
|
||||
#include "OutScl.h"
|
||||
#include "/EgtDev/Include/EgnStringUtils.h"
|
||||
#include "/EgtDev/Include/EgnStringConverter.h"
|
||||
|
||||
using namespace std ;
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
OutScl::OutScl( void)
|
||||
{
|
||||
@@ -37,10 +32,10 @@ OutScl::~OutScl( void)
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
OutScl::Open( const wstring& sOutScl)
|
||||
OutScl::Open( const string& sOutScl)
|
||||
{
|
||||
// apro il file
|
||||
m_ofFile.open( sOutScl) ;
|
||||
m_ofFile.open( stringtoW( sOutScl)) ;
|
||||
if ( ! m_ofFile.good())
|
||||
return false ;
|
||||
// scrivo linee iniziali
|
||||
@@ -263,7 +258,7 @@ OutScl::ArcCPA( Point3d ptCen, Point3d ptMed, double dAngCenDeg)
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
OutScl::PutCurve( const IGeoObj* pCurve, bool bCrvVsPoly)
|
||||
OutScl::PutCurve( const IGeoObj* pCurve, int nFlag)
|
||||
{
|
||||
if ( pCurve == nullptr)
|
||||
return false ;
|
||||
@@ -272,14 +267,11 @@ OutScl::PutCurve( const IGeoObj* pCurve, bool bCrvVsPoly)
|
||||
case CRV_LINE :
|
||||
return PutCurveLine( *GetCurveLine( pCurve)) ;
|
||||
case CRV_ARC :
|
||||
return PutCurveArc( *GetCurveArc( pCurve)) ;
|
||||
return PutCurveArc( *GetCurveArc( pCurve), nFlag) ;
|
||||
case CRV_BEZ :
|
||||
if ( bCrvVsPoly)
|
||||
return PutCurveBez( *GetCurveBezier( pCurve)) ;
|
||||
else
|
||||
return PutPolygBez( *GetCurveBezier( pCurve)) ;
|
||||
return PutCurveBez( *GetCurveBezier( pCurve), nFlag) ;
|
||||
case CRV_COMPO :
|
||||
return PutCurveCompo( *GetCurveComposite( pCurve)) ;
|
||||
return PutCurveCompo( *GetCurveComposite( pCurve), nFlag) ;
|
||||
}
|
||||
|
||||
return false ;
|
||||
@@ -298,7 +290,7 @@ OutScl::PutCurveLine( const ICurveLine& CrvLine)
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
OutScl::PutCurveArc( const ICurveArc& CrvArc)
|
||||
OutScl::PutCurveArc( const ICurveArc& CrvArc, int nFlag)
|
||||
{
|
||||
const double DELTA_ANG = 15 ;
|
||||
int nNumSeg ;
|
||||
@@ -325,17 +317,20 @@ OutScl::PutCurveArc( const ICurveArc& CrvArc)
|
||||
// nuovo iniziale prende i valori del finale
|
||||
ptIni = ptFin ;
|
||||
}
|
||||
// ciclo per disegnare le derivate
|
||||
Remark( "ArcTangents+Der2") ;
|
||||
for ( i = 0 ; i <= nNumSeg ; ++ i) {
|
||||
// ricavo il punto
|
||||
dU = i / (double) nNumSeg ;
|
||||
CrvArc.GetPointTangNormCurv( dU, ptFin, vtT, vtN, dCurv) ;
|
||||
// tangente
|
||||
Line2P( ptFin - vtT, ptFin + vtT) ;
|
||||
// derivata
|
||||
if ( fabs( dCurv) > EPS_ZERO)
|
||||
Line2P( ptFin, ptFin + vtN * ( 1 / dCurv)) ;
|
||||
// se richieste derivate e curvature
|
||||
if ( ( nFlag & 1) != 0) {
|
||||
// ciclo per disegnare le derivate
|
||||
Remark( "ArcTangents+Der2") ;
|
||||
for ( i = 0 ; i <= nNumSeg ; ++ i) {
|
||||
// ricavo il punto
|
||||
dU = i / (double) nNumSeg ;
|
||||
CrvArc.GetPointTangNormCurv( dU, ptFin, vtT, vtN, dCurv) ;
|
||||
// tangente
|
||||
Line2P( ptFin - vtT, ptFin + vtT) ;
|
||||
// curvatura
|
||||
if ( fabs( dCurv) > EPS_ZERO)
|
||||
Line2P( ptFin, ptFin + vtN * ( 1 / dCurv)) ;
|
||||
}
|
||||
}
|
||||
|
||||
return true ;
|
||||
@@ -343,7 +338,7 @@ OutScl::PutCurveArc( const ICurveArc& CrvArc)
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
OutScl::PutCurveBez( const ICurveBezier& CrvBez)
|
||||
OutScl::PutCurveBez( const ICurveBezier& CrvBez, int nFlag)
|
||||
{
|
||||
const int NUM_SEG = 20 ;
|
||||
bool bCCW ;
|
||||
@@ -358,6 +353,10 @@ OutScl::PutCurveBez( const ICurveBezier& CrvBez)
|
||||
Vector3d vtN ;
|
||||
|
||||
|
||||
// se richiesto anche il poligono di controllo
|
||||
if ( ( nFlag & 2) != 0)
|
||||
PutPolygBez( CrvBez) ;
|
||||
|
||||
// ciclo per disegnare i segmenti
|
||||
Remark( "BezierCurve") ;
|
||||
for ( i = 0 ; i <= NUM_SEG ; ++ i) {
|
||||
@@ -370,25 +369,28 @@ OutScl::PutCurveBez( const ICurveBezier& CrvBez)
|
||||
// nuovo iniziale prende i valori del finale
|
||||
ptIni = ptFin ;
|
||||
}
|
||||
// ciclo per disegnare le derivate
|
||||
Remark( "BezierTangents+Der2") ;
|
||||
for ( i = 0 ; i <= NUM_SEG ; ++ i) {
|
||||
// ricavo il punto
|
||||
dU = i / (double) NUM_SEG ;
|
||||
CrvBez.GetPointTangNormCurv( dU, ptFin, vtT, vtN, dCurv) ;
|
||||
// curvatura
|
||||
if ( fabs( dCurv) > EPS_ZERO) {
|
||||
// tratto di arco
|
||||
ptCen = ptFin + vtN * ( 1 / dCurv) ;
|
||||
bCCW = ( vtT ^ vtN).z > 0 ;
|
||||
dAngCenDeg = ( bCCW ? 1 : -1) * 4 * dCurv * RADTODEG ;
|
||||
ArcCPA( ptCen, ptFin, dAngCenDeg) ;
|
||||
// raggio
|
||||
Line2P( ptFin, ptCen) ;
|
||||
// se richieste derivate e curvature
|
||||
if ( ( nFlag & 1) != 0) {
|
||||
// ciclo per disegnare le derivate e le curvature
|
||||
Remark( "BezierTangents+Der2") ;
|
||||
for ( i = 0 ; i <= NUM_SEG ; ++ i) {
|
||||
// ricavo il punto
|
||||
dU = i / (double) NUM_SEG ;
|
||||
CrvBez.GetPointTangNormCurv( dU, ptFin, vtT, vtN, dCurv) ;
|
||||
// curvatura
|
||||
if ( fabs( dCurv) > EPS_ZERO) {
|
||||
// tratto di arco
|
||||
ptCen = ptFin + vtN * ( 1 / dCurv) ;
|
||||
bCCW = ( vtT ^ vtN).z > 0 ;
|
||||
dAngCenDeg = ( bCCW ? 1 : -1) * 4 * dCurv * RADTODEG ;
|
||||
ArcCPA( ptCen, ptFin, dAngCenDeg) ;
|
||||
// raggio
|
||||
Line2P( ptFin, ptCen) ;
|
||||
}
|
||||
// altrimenti, tangente
|
||||
else if ( ! vtT.IsSmall())
|
||||
Line2P( ptFin - vtT, ptFin + vtT) ;
|
||||
}
|
||||
// altrimenti, tangente
|
||||
else if ( ! vtT.IsSmall())
|
||||
Line2P( ptFin - vtT, ptFin + vtT) ;
|
||||
}
|
||||
|
||||
return true ;
|
||||
@@ -419,7 +421,7 @@ OutScl::PutPolygBez( const ICurveBezier& CrvBez)
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
OutScl::PutCurveCompo( const ICurveComposite& CrvCompo)
|
||||
OutScl::PutCurveCompo( const ICurveComposite& CrvCompo, int nFlag)
|
||||
{
|
||||
const ICurve* pCrvSmpl ;
|
||||
|
||||
@@ -434,10 +436,10 @@ OutScl::PutCurveCompo( const ICurveComposite& CrvCompo)
|
||||
PutCurveLine( *::GetCurveLine( pCrvSmpl)) ;
|
||||
break ;
|
||||
case CRV_ARC :
|
||||
PutCurveArc( *::GetCurveArc( pCrvSmpl)) ;
|
||||
PutCurveArc( *::GetCurveArc( pCrvSmpl), nFlag) ;
|
||||
break ;
|
||||
case CRV_BEZ :
|
||||
PutCurveBez( *::GetCurveBezier( pCrvSmpl)) ;
|
||||
PutCurveBez( *::GetCurveBezier( pCrvSmpl), nFlag) ;
|
||||
break ;
|
||||
}
|
||||
// passo alla successiva
|
||||
|
||||
Reference in New Issue
Block a user