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:
+65
-10
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user