EgtGeomKernel 1.4a5 : Modifiche per EgtGeneral.

This commit is contained in:
Dario Sassi
2013-12-11 18:30:56 +00:00
parent 35bc9a051f
commit a3308d8e23
8 changed files with 146 additions and 136 deletions
+52 -50
View File
@@ -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