EgtInterface 1.6c5 :
- aggiunte funzioni per raccordi e smussi di curve.
This commit is contained in:
@@ -31,6 +31,7 @@
|
||||
#include "/EgtDev/Include/EgkArcSpecial.h"
|
||||
#include "/EgtDev/Include/EgkArcPntDirTgCurve.h"
|
||||
#include "/EgtDev/Include/EgkArcCenTgCurvePnt.h"
|
||||
#include "/EgtDev/Include/EgkFilletChamfer.h"
|
||||
#include "/EgtDev/Include/EgkCurveBezier.h"
|
||||
#include "/EgtDev/Include/EgkCurveComposite.h"
|
||||
#include "/EgtDev/Include/EgkChainCurves.h"
|
||||
@@ -1061,6 +1062,132 @@ __stdcall EgtCreateCurveArc2PVNEx( int nParentId, const double ptStart[3],
|
||||
return nNewId ;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------
|
||||
int
|
||||
__stdcall EgtCreateCurveFillet( int nParentId, int nCrv1, const double ptNear1[3],
|
||||
int nCrv2, const double ptNear2[3],
|
||||
const double vtNorm[3], double dRad, BOOL bTrim, int nRefType)
|
||||
{
|
||||
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
||||
VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL)
|
||||
// creo l'arco
|
||||
PtrOwner<ICurveArc> pArc ;
|
||||
bool bOk = true ;
|
||||
// recupero il riferimento locale
|
||||
Frame3d frLoc ;
|
||||
bOk = bOk && pGeomDB->GetGroupGlobFrame( nParentId, frLoc) ;
|
||||
// porto in locale i punti, i versori e il versore estrusione
|
||||
Point3d ptNear1L = GetPointLocal( pGeomDB, ptNear1, nRefType, frLoc) ;
|
||||
Point3d ptNear2L = GetPointLocal( pGeomDB, ptNear2, nRefType, frLoc) ;
|
||||
Vector3d vtNormL = GetVectorLocal( pGeomDB, vtNorm, nRefType, frLoc) ;
|
||||
Vector3d vtExtrL = GetVectorLocal( pGeomDB, Z_AX.v, nRefType, frLoc) ;
|
||||
// recupero la copia locale delle curve
|
||||
CurveLocal CrvLoc1( pGeomDB, nCrv1, frLoc) ;
|
||||
CurveLocal CrvLoc2( pGeomDB, nCrv2, frLoc) ;
|
||||
// calcolo il raccordo
|
||||
double dTrim1, dTrim2 ;
|
||||
pArc.Set( CreateFillet( *CrvLoc1.Get(), ptNear1L, *CrvLoc2.Get(), ptNear2L, vtNormL, dRad, dTrim1, dTrim2)) ;
|
||||
bOk = bOk && ! IsNull( pArc) ;
|
||||
// assegno il versore estrusione
|
||||
bOk = bOk && pArc->SetExtrusion( vtExtrL) ;
|
||||
// inserisco l'arco nel DB
|
||||
int nNewId = ( bOk ? pGeomDB->AddGeoObj( GDB_ID_NULL, nParentId, Release( pArc)) : GDB_ID_NULL) ;
|
||||
// se richiesto trim
|
||||
if ( nNewId != GDB_ID_NULL && bTrim) {
|
||||
// recupero e aggiusto la prima curva
|
||||
ICurve* pCrv1 = GetCurve( pGeomDB->GetGeoObj( nCrv1)) ;
|
||||
if ( dTrim1 > EPS_ZERO)
|
||||
pCrv1->TrimStartAtParam( dTrim1) ;
|
||||
else if ( dTrim1 < - EPS_ZERO)
|
||||
pCrv1->TrimEndAtParam( fabs( dTrim1)) ;
|
||||
// recupero e aggiusto la seconda curva
|
||||
ICurve* pCrv2 = GetCurve( pGeomDB->GetGeoObj( nCrv2)) ;
|
||||
if ( dTrim2 > EPS_ZERO)
|
||||
pCrv2->TrimStartAtParam( dTrim2) ;
|
||||
else if ( dTrim2 < - EPS_ZERO)
|
||||
pCrv2->TrimEndAtParam( fabs( dTrim2)) ;
|
||||
}
|
||||
EgtSetModified() ;
|
||||
// se richiesto, salvo il comando Lua equivalente
|
||||
if ( IsCmdLog()) {
|
||||
string sLua = "EgtCurveFillet(" + ToString( nParentId) + "," +
|
||||
ToString( nCrv1) + ",{" +
|
||||
ToString( Point3d( ptNear1)) + "}," +
|
||||
ToString( nCrv2) + ",{" +
|
||||
ToString( Point3d( ptNear2)) + "},{" +
|
||||
ToString( Vector3d( vtNorm)) + "}," +
|
||||
ToString( dRad) + "," +
|
||||
( bTrim ? "true" : "false") + "," +
|
||||
RefTypeToString( nRefType) + ")" +
|
||||
" -- Id=" + ToString( nNewId) ;
|
||||
LOG_INFO( GetCmdLogger(), sLua.c_str()) ;
|
||||
}
|
||||
return nNewId ;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------
|
||||
int
|
||||
__stdcall EgtCreateCurveChamfer( int nParentId, int nCrv1, const double ptNear1[3],
|
||||
int nCrv2, const double ptNear2[3],
|
||||
const double vtNorm[3], double dDist, BOOL bTrim, int nRefType)
|
||||
{
|
||||
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
||||
VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL)
|
||||
// creo la linea
|
||||
PtrOwner<ICurveLine> pLine ;
|
||||
bool bOk = true ;
|
||||
// recupero il riferimento locale
|
||||
Frame3d frLoc ;
|
||||
bOk = bOk && pGeomDB->GetGroupGlobFrame( nParentId, frLoc) ;
|
||||
// porto in locale i punti, i versori e il versore estrusione
|
||||
Point3d ptNear1L = GetPointLocal( pGeomDB, ptNear1, nRefType, frLoc) ;
|
||||
Point3d ptNear2L = GetPointLocal( pGeomDB, ptNear2, nRefType, frLoc) ;
|
||||
Vector3d vtNormL = GetVectorLocal( pGeomDB, vtNorm, nRefType, frLoc) ;
|
||||
Vector3d vtExtrL = GetVectorLocal( pGeomDB, Z_AX.v, nRefType, frLoc) ;
|
||||
// recupero la copia locale delle curve
|
||||
CurveLocal CrvLoc1( pGeomDB, nCrv1, frLoc) ;
|
||||
CurveLocal CrvLoc2( pGeomDB, nCrv2, frLoc) ;
|
||||
// calcolo lo smusso
|
||||
double dTrim1, dTrim2 ;
|
||||
pLine.Set( CreateChamfer( *CrvLoc1.Get(), ptNear1L, *CrvLoc2.Get(), ptNear2L, vtNormL, dDist, dTrim1, dTrim2)) ;
|
||||
bOk = bOk && ! IsNull( pLine) ;
|
||||
// assegno il versore estrusione
|
||||
bOk = bOk && pLine->SetExtrusion( vtExtrL) ;
|
||||
// inserisco l'arco nel DB
|
||||
int nNewId = ( bOk ? pGeomDB->AddGeoObj( GDB_ID_NULL, nParentId, Release( pLine)) : GDB_ID_NULL) ;
|
||||
// se richiesto trim
|
||||
if ( nNewId != GDB_ID_NULL && bTrim) {
|
||||
// recupero e aggiusto la prima curva
|
||||
ICurve* pCrv1 = GetCurve( pGeomDB->GetGeoObj( nCrv1)) ;
|
||||
if ( dTrim1 > EPS_ZERO)
|
||||
pCrv1->TrimStartAtParam( dTrim1) ;
|
||||
else if ( dTrim1 < - EPS_ZERO)
|
||||
pCrv1->TrimEndAtParam( fabs( dTrim1)) ;
|
||||
// recupero e aggiusto la seconda curva
|
||||
ICurve* pCrv2 = GetCurve( pGeomDB->GetGeoObj( nCrv2)) ;
|
||||
if ( dTrim2 > EPS_ZERO)
|
||||
pCrv2->TrimStartAtParam( dTrim2) ;
|
||||
else if ( dTrim2 < - EPS_ZERO)
|
||||
pCrv2->TrimEndAtParam( fabs( dTrim2)) ;
|
||||
}
|
||||
EgtSetModified() ;
|
||||
// se richiesto, salvo il comando Lua equivalente
|
||||
if ( IsCmdLog()) {
|
||||
string sLua = "EgtCurveChamfer(" + ToString( nParentId) + "," +
|
||||
ToString( nCrv1) + ",{" +
|
||||
ToString( Point3d( ptNear1)) + "}," +
|
||||
ToString( nCrv2) + ",{" +
|
||||
ToString( Point3d( ptNear2)) + "},{" +
|
||||
ToString( Vector3d( vtNorm)) + "}," +
|
||||
ToString( dDist) + "," +
|
||||
( bTrim ? "true" : "false") + "," +
|
||||
RefTypeToString( nRefType) + ")" +
|
||||
" -- Id=" + ToString( nNewId) ;
|
||||
LOG_INFO( GetCmdLogger(), sLua.c_str()) ;
|
||||
}
|
||||
return nNewId ;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------
|
||||
int
|
||||
__stdcall EgtCreateCurveBezier( int nParentId, int nDegree, const double ptCtrls[], int nRefType)
|
||||
|
||||
Reference in New Issue
Block a user