diff --git a/EXE_GdbModifySurf.cpp b/EXE_GdbModifySurf.cpp index d9b4426..a3cf6a3 100644 --- a/EXE_GdbModifySurf.cpp +++ b/EXE_GdbModifySurf.cpp @@ -648,6 +648,41 @@ ExeCutSurfTmPlane( int nId, const Point3d& ptOn, const Vector3d& vtN, bool bSave return bOk ; } +//------------------------------------------------------------------------------- +bool +ExeCutSurfBzPlane( int nId, const Point3d& ptOn, const Vector3d& vtN, bool bSaveOnEq, int nRefType) +{ + IGeomDB* pGeomDB = GetCurrGeomDB() ; + VERIFY_GEOMDB( pGeomDB, false) + // recupero la superficie TriMesh + ISurfBezier* pSbz = GetSurfBezier( pGeomDB->GetGeoObj( nId)) ; + bool bOk = ( pSbz != nullptr) ; + // recupero il riferimento locale + Frame3d frLoc ; + bOk = bOk && pGeomDB->GetGlobFrame( nId, frLoc) ; + // porto in locale il punto e la normale del piano + Point3d ptOnL = GetPointLocal( pGeomDB, ptOn, nRefType, frLoc) ; + Vector3d vtNL = GetVectorLocal( pGeomDB, vtN, nRefType, frLoc) ; + // calcolo il piano di taglio + Plane3d plPlane ; + bOk = bOk && plPlane.Set( ptOnL, vtNL) ; + // eseguo il taglio + bOk = bOk && pSbz->Cut( plPlane, bSaveOnEq) ; + ExeSetModified() ; + // se richiesto, salvo il comando Lua equivalente + if ( IsCmdLog()) { + string sLua = "EgtCutSurfBzPlane(" + IdToString( nId) + ",{" + + ToString( ptOn) + "},{" + + ToString( vtN) + "}," + + ( bSaveOnEq ? "true" : "false") + "," + + RefTypeToString( nRefType) + ")" + + " -- Ok=" + ToString( bOk) ; + LOG_INFO( GetCmdLogger(), sLua.c_str()) ; + } + // restituisco risultato + return bOk ; +} + //------------------------------------------------------------------------------- bool ExeCutSurfTmClosedCurve( int nSurfId, int nCurveId, bool bSaveOnEq) diff --git a/LUA_GdbModifySurf.cpp b/LUA_GdbModifySurf.cpp index 5acf8d8..65ce029 100644 --- a/LUA_GdbModifySurf.cpp +++ b/LUA_GdbModifySurf.cpp @@ -283,6 +283,29 @@ LuaCutSurfTmPlane( lua_State* L) return 1 ; } +//---------------------------------------------------------------------------- +static int +LuaCutSurfBzPlane( lua_State* L) +{ + // 4 o 5 parametri : Id, ptOn, vtN, bSaveOnEq [, nRefType] + int nId ; + LuaCheckParam( L, 1, nId) + Point3d ptOn ; + LuaCheckParam( L, 2, ptOn) + Vector3d vtN ; + LuaCheckParam( L, 3, vtN) + bool bSaveOnEq ; + LuaGetParam( L, 4, bSaveOnEq) ; + int nRefType = RTY_DEFAULT ; + LuaGetParam( L, 5, nRefType) ; + LuaClearStack( L) ; + // taglio la superficie con ilpiano + bool bOk = ExeCutSurfBzPlane( nId, ptOn, vtN, bSaveOnEq, nRefType) ; + // restituisco il risultato + LuaSetParam( L, bOk) ; + return 1 ; +} + //---------------------------------------------------------------------------- static int LuaCutSurfTmClosedCurve( lua_State* L) @@ -481,6 +504,7 @@ LuaInstallGdbModifySurf( LuaMgr& luaMgr) bOk = bOk && luaMgr.RegisterFunction( "EgtSurfTmSwapFacets", LuaSurfTmSwapFacets) ; bOk = bOk && luaMgr.RegisterFunction( "EgtSurfTmRemovePart", LuaSurfTmRemovePart) ; bOk = bOk && luaMgr.RegisterFunction( "EgtCutSurfTmPlane", LuaCutSurfTmPlane) ; + bOk = bOk && luaMgr.RegisterFunction( "EgtCutSurfBzPlane", LuaCutSurfBzPlane) ; bOk = bOk && luaMgr.RegisterFunction( "EgtCutSurfTmClosedCurve", LuaCutSurfTmClosedCurve) ; bOk = bOk && luaMgr.RegisterFunction( "EgtSurfTmAdd", LuaSurfTmAdd) ; bOk = bOk && luaMgr.RegisterFunction( "EgtSurfTmSubtract", LuaSurfTmSubtract) ;