EgtExecutor 2.2f2 :

- aggiunta funzione Exe e Lua CurveIsACircle.
This commit is contained in:
Dario Sassi
2020-06-04 15:49:44 +00:00
parent 7104ed0e30
commit d084847e0e
3 changed files with 70 additions and 0 deletions
+45
View File
@@ -21,6 +21,7 @@
#include "/EgtDev/Include/EXeConst.h"
#include "/EgtDev/Include/EGkCurve.h"
#include "/EgtDev/Include/EGkCurveArc.h"
#include "/EgtDev/Include/EGkCurveBezier.h"
#include "/EgtDev/Include/EGkCurveComposite.h"
#include "/EgtDev/Include/EGkDistPointCurve.h"
#include "/EgtDev/Include/EGkIntersCurves.h"
@@ -127,6 +128,50 @@ ExeCurveIsFlat( int nId, Plane3d& Plane, bool bUseExtrusion, double dToler)
return ( pCurve != nullptr && pCurve->IsFlat( Plane, bUseExtrusion, dToler)) ;
}
//----------------------------------------------------------------------------
bool
ExeCurveIsACircle( int nId, Point3d& ptCen, Vector3d& vtN, double& dRad, bool& bCCW, double dToler)
{
IGeomDB* pGeomDB = GetCurrGeomDB() ;
VERIFY_GEOMDB( pGeomDB, false)
// verifico i parametri
if ( &ptCen == nullptr || &vtN == nullptr || &dRad == nullptr || &bCCW == nullptr)
return false ;
// recupero l'oggetto
IGeoObj* pGObj = pGeomDB->GetGeoObj( nId) ;
if ( pGObj == nullptr)
return false ;
// analizzo tipi di curve candidabili
switch ( pGObj->GetType()) {
case CRV_ARC :
{ ICurveArc* pArc = GetCurveArc( pGObj) ;
if ( pArc->IsACircle()) {
ptCen = pArc->GetCenter() ;
vtN = pArc->GetNormVersor() ;
dRad = pArc->GetRadius() ;
bCCW = ( pArc->GetAngCenter() > 0) ;
return true ;
}
}
case CRV_COMPO :
{ ICurveComposite* pCompo = GetCurveComposite( pGObj) ;
return pCompo->IsACircle( dToler, ptCen, vtN, dRad, bCCW) ;
}
case CRV_BEZIER :
{ ICurveBezier* pBezier = GetCurveBezier( pGObj) ;
PolyArc PA ;
if ( ! pBezier->ApproxWithArcs( dToler, ANG_TOL_STD_DEG, PA))
return false ;
PtrOwner<ICurveComposite> pCompo( CreateCurveComposite()) ;
if ( IsNull( pCompo) || ! pCompo->FromPolyArc( PA))
return false ;
return pCompo->IsACircle( dToler, ptCen, vtN, dRad, bCCW) ;
}
}
return false ;
}
//----------------------------------------------------------------------------
bool
ExeCurveAreaXY( int nId, double& dArea)
BIN
View File
Binary file not shown.
+25
View File
@@ -90,6 +90,30 @@ LuaCurveIsFlat( lua_State* L)
return 3 ;
}
//----------------------------------------------------------------------------
static int
LuaCurveIsACircle( lua_State* L)
{
// 1 o 2 parametri : Id [, dToler]
int nId ;
LuaCheckParam( L, 1, nId)
double dToler = EPS_SMALL ;
LuaGetParam( L, 2, dToler) ;
LuaClearStack( L) ;
// verifico se curva è equivalente ad una circonferenza
Point3d ptCen ;
Vector3d vtN ;
double dRad ;
bool bCCW ;
bool bCircle = ExeCurveIsACircle( nId, ptCen, vtN, dRad, bCCW, dToler) ;
LuaSetParam( L, bCircle) ;
LuaSetParam( L, ptCen) ;
LuaSetParam( L, vtN) ;
LuaSetParam( L, dRad) ;
LuaSetParam( L, bCCW) ;
return 5 ;
}
//----------------------------------------------------------------------------
static int
LuaCurveAreaXY( lua_State* L)
@@ -369,6 +393,7 @@ LuaInstallGdbGetCurve( LuaMgr& luaMgr)
bOk = bOk && luaMgr.RegisterFunction( "EgtCurveLength", LuaCurveLength) ;
bOk = bOk && luaMgr.RegisterFunction( "EgtCurveIsClosed", LuaCurveIsClosed) ;
bOk = bOk && luaMgr.RegisterFunction( "EgtCurveIsFlat", LuaCurveIsFlat) ;
bOk = bOk && luaMgr.RegisterFunction( "EgtCurveIsACircle", LuaCurveIsACircle) ;
bOk = bOk && luaMgr.RegisterFunction( "EgtCurveAreaXY", LuaCurveAreaXY) ;
bOk = bOk && luaMgr.RegisterFunction( "EgtCurveArea", LuaCurveArea) ;
bOk = bOk && luaMgr.RegisterFunction( "EgtCurveExtrusion", LuaCurveExtrusion) ;