diff --git a/API.h b/API.h index e306ca3..6230a83 100644 --- a/API.h +++ b/API.h @@ -57,6 +57,7 @@ BOOL __stdcall EgtFrame( int nId, Frame3d& frFrame) ; //--------------------------- Scene ------------------------------------------ BOOL __stdcall EgtSetBackground( Color TopCol, Color BottomCol, BOOL bRedraw) ; BOOL __stdcall EgtSetMarkAttribs( Color MarkCol) ; +BOOL __stdcall EgtSetSelSurfAttribs( Color SelSurfCol) ; BOOL __stdcall EgtSetGeoLineAttribs( Color GlCol) ; BOOL __stdcall EgtSetWinRectAttribs( BOOL bOutline, Color WrCol) ; diff --git a/API_GdbModifyCurve.cpp b/API_GdbModifyCurve.cpp index 17fc1ea..ad4cd04 100644 --- a/API_GdbModifyCurve.cpp +++ b/API_GdbModifyCurve.cpp @@ -19,6 +19,7 @@ #include "/EgtDev/Include/EgkCurve.h" #include "/EgtDev/Include/EgkCurveArc.h" #include "/EgtDev/Include/EgkCurveComposite.h" +#include "/EgtDev/Include/EgkDistPointCurve.h" //---------------------------------------------------------------------------- @@ -143,7 +144,7 @@ __stdcall EgtTrimCurveEndAtParam( int nId, double dPar) ICurve* pCurve = GetCurve( pGeomDB->GetGeoObj( nId)) ; if ( pCurve == nullptr) return false ; - // taglio la curva all'inizio + // taglio la curva alla fine return ( pCurve->TrimEndAtParam( dPar) ? TRUE : FALSE) ; } @@ -161,6 +162,32 @@ __stdcall EgtTrimCurveStartEndAtParam( int nId, double dParS, double dParE) return ( pCurve->TrimStartEndAtParam( dParS, dParE) ? TRUE : FALSE) ; } +//---------------------------------------------------------------------------- +BOOL +__stdcall EgtSplitCurveAtPoint( int nId, double ptOn[3]) +{ + IGeomDB* pGeomDB = GetCurrGeomDB() ; + VERIFY_GEOMDB( pGeomDB, FALSE) + // recupero la curva + ICurve* pCurve = GetCurve( pGeomDB->GetGeoObj( nId)) ; + if ( pCurve == nullptr) + return FALSE ; + // determino la posizione parametrica del punto sulla curva (con tolleranza) + DistPointCurve dstPC( ptOn, *pCurve) ; + int nFlag ; + double dU ; + if ( ! dstPC.GetParamAtMinDistPoint( 0, dU, nFlag) || nFlag != MDPCI_NORMAL) + return FALSE ; + // copio la curva + int nCopyId = pGeomDB->Copy( nId, GDB_ID_NULL, nId, GDB_AFTER) ; + if ( nCopyId == GDB_ID_NULL) + return FALSE ; + // tengo la prima parte dell'originale e la seconda parte della copia + if ( ! pCurve->TrimEndAtParam( dU)) + return false ; + return ( EgtTrimCurveStartAtParam( nCopyId, dU) ? TRUE : FALSE) ; +} + //------------------------------------------------------------------------------- BOOL __stdcall EgtModifyCurveCircleCPN( int nId, const double ptOn[3]) @@ -236,7 +263,7 @@ __stdcall EgtModifyCurveArc3P( int nId, const double ptMid[3]) //------------------------------------------------------------------------------- BOOL -__stdcall EgtSplitCurveCompo( int nId) +__stdcall EgtSeparateCurveCompo( int nId) { IGeomDB* pGeomDB = GetCurrGeomDB() ; VERIFY_GEOMDB( pGeomDB, FALSE) diff --git a/API_GeoBase.cpp b/API_GeoBase.cpp index b6fa341..0c02e74 100644 --- a/API_GeoBase.cpp +++ b/API_GeoBase.cpp @@ -338,6 +338,23 @@ __stdcall EgtPointLocToLoc( double* pdX, double* pdY, double* pdZ, //----------------------------------------------------------------------------- // Frame3d +//----------------------------------------------------------------------------- +BOOL +__stdcall EgtFrameFrom3Points( double ptO[3], double ptOnX[3], double ptNearY[3], + double ptOrig[3], double vtX[3], double vtY[3], double vtZ[3]) +{ + // calcolo il riferimento + Frame3d frTemp ; + if ( ! frTemp.Set( Point3d( ptO), Point3d( ptOnX), Point3d( ptNearY))) + return FALSE ; + // aggiorno i parametri del frame + VEC_FROM_3D( ptOrig, frTemp.Orig()) + VEC_FROM_3D( vtX, frTemp.VersX()) + VEC_FROM_3D( vtY, frTemp.VersY()) + VEC_FROM_3D( vtZ, frTemp.VersZ()) + return TRUE ; +} + //----------------------------------------------------------------------------- BOOL __stdcall EgtFrameTranslate( double ptOrig[3], double vtX[3], double vtY[3], double vtZ[3], diff --git a/API_Scene.cpp b/API_Scene.cpp index 989897d..aab757f 100644 --- a/API_Scene.cpp +++ b/API_Scene.cpp @@ -90,6 +90,23 @@ __stdcall EgtSetMarkAttribs( Color MarkCol) return ( pGseCtx->m_pScene->SetMark( MarkCol) ? TRUE : FALSE) ; } +//----------------------------------------------------------------------------- +BOOL +__stdcall EgtSetSelSurfAttribs( const int SelSurfCol[4]) +{ + return EgtSetSelSurfAttribs( Color( SelSurfCol)) ; +} + +//----------------------------------------------------------------------------- +BOOL +__stdcall EgtSetSelSurfAttribs( Color SelSurfCol) +{ + GseContext* pGseCtx = GetCurrGseContext() ; + VERIFY_CTX_SCENE( pGseCtx, FALSE) + // imposto il colore del Mark + return ( pGseCtx->m_pScene->SetSelSurf( SelSurfCol) ? TRUE : FALSE) ; +} + //----------------------------------------------------------------------------- BOOL __stdcall EgtSetGeoLineAttribs( const int GlCol[4]) diff --git a/EgtInterface.rc b/EgtInterface.rc index df0e5f8..00dea8a 100644 Binary files a/EgtInterface.rc and b/EgtInterface.rc differ