EgtExecutor 2.4h2 :

- aggiunte funzioni Exe e Lua CreateCircle2P
- in ExeCreateCurveFillet migliorato trim celle parti rimanenti arrivando anche a cancellazione
- estesa ExeModifyArcRadius per modificare raggio di arco mantenendo gli estremi oppure no da parametro bKeepCenter (default true).
This commit is contained in:
DarioS
2022-08-21 16:20:34 +02:00
parent 5c7ed7e3c1
commit 130f40d2bc
5 changed files with 146 additions and 23 deletions
+65 -10
View File
@@ -29,6 +29,7 @@
#include "/EgtDev/Include/EGkLineTgCurvePerpCurve.h"
#include "/EgtDev/Include/EGkCurveArc.h"
#include "/EgtDev/Include/EGkCircleCenTgCurve.h"
#include "/EgtDev/Include/EGkCircle2P.h"
#include "/EgtDev/Include/EGkArcSpecial.h"
#include "/EgtDev/Include/EGkArcPntDirTgCurve.h"
#include "/EgtDev/Include/EGkArcCenTgCurvePnt.h"
@@ -764,6 +765,44 @@ ExeCreateCircleCPEx( int nParentId, const Point3d& ptCen,
return nNewId ;
}
//-------------------------------------------------------------------------------
int
ExeCreateCircle2P( int nParentId, const Point3d& ptP1, const Point3d& ptP2, int nRefType)
{
IGeomDB* pGeomDB = GetCurrGeomDB() ;
VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL)
nParentId = AdjustId( nParentId) ;
// recupero il riferimento locale
Frame3d frLoc ;
if ( ! pGeomDB->GetGroupGlobFrame( nParentId, frLoc))
return GDB_ID_NULL ;
// porto in locale i punti e i versori
Point3d ptP1L = GetPointLocal( pGeomDB, ptP1, nRefType, frLoc) ;
Point3d ptP2L = GetPointLocal( pGeomDB, ptP2, nRefType, frLoc) ;
Vector3d vtNL = GetVectorLocal( pGeomDB, Z_AX, nRefType, frLoc) ;
Vector3d vtExtrL = GetVectorLocal( pGeomDB, Z_AX, nRefType, frLoc) ;
// calcolo la circonferenza
PtrOwner<ICurveArc> pCrvArc( GetCircle2P( ptP1L, ptP2L, vtNL)) ;
if ( IsNull( pCrvArc))
return GDB_ID_NULL ;
// assegno il versore estrusione
pCrvArc->SetExtrusion( vtExtrL) ;
// inserisco l'arco nel DB
int nId = pGeomDB->AddGeoObj( GDB_ID_NULL, nParentId, Release( pCrvArc)) ;
ExeSetModified() ;
// se richiesto, salvo il comando Lua equivalente
if ( IsCmdLog()) {
string sLua = "EgtCircle2P(" + IdToString( nParentId) + ",{" +
ToString( ptP1) + "}," +
ToString( ptP2) + "," +
RefTypeToString( nRefType) + ")" +
" -- Id=" + ToString( nId) ;
LOG_INFO( GetCmdLogger(), sLua.c_str()) ;
}
// restituisco l'identificativo della nuova entità
return nId ;
}
//-------------------------------------------------------------------------------
int
ExeCreateCircle3P( int nParentId, const Point3d& ptP1,
@@ -1293,18 +1332,34 @@ ExeCreateCurveFillet( int nParentId, int nCrv1, const Point3d& ptNear1,
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
// recupero prima curva
ICurve* pCrv1 = GetCurve( pGeomDB->GetGeoObj( nCrv1)) ;
if ( dTrim1 > EPS_ZERO)
pCrv1->TrimStartAtParam( dTrim1) ;
else if ( dTrim1 < - EPS_ZERO)
pCrv1->TrimEndAtParam( abs( dTrim1)) ;
// recupero e aggiusto la seconda curva
double dLen1 = 0 ; pCrv1->GetLength( dLen1) ;
double dParS1 = 0, dParE1 = 1 ; pCrv1->GetDomain( dParS1, dParE1) ;
// se prima curva da eliminare
if ( abs( abs( dTrim1) - dParE1) * dLen1 < EPS_SMALL || abs( abs( dTrim1) - dParS1) * dLen1 < EPS_SMALL)
pGeomDB->Erase( nCrv1) ;
// altrimenti da trimmare
else {
if ( dTrim1 > EPS_ZERO)
pCrv1->TrimStartAtParam( dTrim1) ;
else if ( dTrim1 < - EPS_ZERO)
pCrv1->TrimEndAtParam( abs( dTrim1)) ;
}
// recupero seconda curva
ICurve* pCrv2 = GetCurve( pGeomDB->GetGeoObj( nCrv2)) ;
if ( dTrim2 > EPS_ZERO)
pCrv2->TrimStartAtParam( dTrim2) ;
else if ( dTrim2 < - EPS_ZERO)
pCrv2->TrimEndAtParam( abs( dTrim2)) ;
double dLen2 = 0 ; pCrv2->GetLength( dLen2) ;
double dParS2 = 0, dParE2 = 1 ; pCrv2->GetDomain( dParS2, dParE2) ;
// se seconda curva da eliminare
if ( abs( abs( dTrim2) - dParE2) * dLen2 < EPS_SMALL || abs( abs( dTrim2) - dParS2) * dLen2 < EPS_SMALL)
pGeomDB->Erase( nCrv2) ;
// altrimenti da trimmare
else {
if ( dTrim2 > EPS_ZERO)
pCrv2->TrimStartAtParam( dTrim2) ;
else if ( dTrim2 < - EPS_ZERO)
pCrv2->TrimEndAtParam( abs( dTrim2)) ;
}
}
ExeSetModified() ;
// se richiesto, salvo il comando Lua equivalente