EgtExecutor 2.2f2 :
- aggiunta funzione Exe e Lua CurveIsACircle.
This commit is contained in:
@@ -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)
|
||||
|
||||
Binary file not shown.
@@ -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) ;
|
||||
|
||||
Reference in New Issue
Block a user