EgtExecutor :
- la funzione Exe/Lua SurfBezierParamsFromPoint ora restituisce solo i valori dei parametri U e V che corrispondono al punto - piccole migliorie.
This commit is contained in:
+12
-54
@@ -48,9 +48,6 @@ ExeSurfArea( int nId, double& dArea)
|
||||
{
|
||||
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
||||
VERIFY_GEOMDB( pGeomDB, false)
|
||||
// verifico il parametro
|
||||
if ( &dArea == nullptr)
|
||||
return false ;
|
||||
// recupero la superficie
|
||||
ISurf* pSurf = GetSurf( pGeomDB->GetGeoObj( nId)) ;
|
||||
// ne restituisco l'area
|
||||
@@ -75,9 +72,6 @@ ExeSurfVolume( int nId, double& dVol)
|
||||
{
|
||||
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
||||
VERIFY_GEOMDB( pGeomDB, false)
|
||||
// verifico il parametro
|
||||
if ( &dVol == nullptr)
|
||||
return false ;
|
||||
// recupero la superficie
|
||||
ISurf* pSurf = GetSurf( pGeomDB->GetGeoObj( nId)) ;
|
||||
// ne restituisco l'eventuale volume (se è chiusa)
|
||||
@@ -106,9 +100,6 @@ ExeSurfFrGrossArea( int nId, double& dArea)
|
||||
{
|
||||
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
||||
VERIFY_GEOMDB( pGeomDB, false)
|
||||
// verifico il parametro
|
||||
if ( &dArea == nullptr)
|
||||
return false ;
|
||||
// recupero la Regione
|
||||
const ISurfFlatRegion* pSfr = GetSurfFlatRegion( pGeomDB->GetGeoObj( nId)) ;
|
||||
// ne restituisco l'area senza eventuali buchi
|
||||
@@ -220,9 +211,6 @@ ExeSurfFrChunkMaxOffset( int nId, int nChunk, double& dMaxOffset)
|
||||
{
|
||||
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
||||
VERIFY_GEOMDB( pGeomDB, false)
|
||||
// verifico il parametro
|
||||
if ( &dMaxOffset == nullptr)
|
||||
return false ;
|
||||
// recupero la Regione
|
||||
const ISurfFlatRegion* pSfr = GetSurfFlatRegion( pGeomDB->GetGeoObj( nId)) ;
|
||||
return ( pSfr != nullptr && pSfr->GetChunkMaxOffset( nChunk, dMaxOffset)) ;
|
||||
@@ -1587,7 +1575,7 @@ ExeSurfBezierGetPointNrmD1( int nSurfId, double dU, double dV, int nUsd, int nVs
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
int
|
||||
static int
|
||||
MySurfBezierGetCurveUV( int nSurfId, bool bIsU, double dPar, int nDestGrpId)
|
||||
{
|
||||
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
||||
@@ -1674,55 +1662,25 @@ ExeSurfBezierGetCurveV( int nSurfId, double dU, int nDestGrpId)
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
ExeSurfBezParamsFromPoint( int nSurfId, const Point3d& ptOnSurf, int nDestGrpId, double& dU, double& dV)
|
||||
ExeSurfBezierParamsFromPoint( int nSurfId, const Point3d& ptOnSurf, int nRefId, double& dU, double& dV)
|
||||
{
|
||||
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
||||
VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL)
|
||||
VERIFY_GEOMDB( pGeomDB, false)
|
||||
// recupero la superficie di Bezier
|
||||
const ISurfBezier* pSbz = GetSurfBezier( pGeomDB->GetGeoObj( nSurfId)) ;
|
||||
if ( pSbz == nullptr)
|
||||
return false ;
|
||||
// porto il punto Near nel riferimento dell'entità
|
||||
Point3d ptOnSurfL = ptOnSurf ;
|
||||
if ( ! InvTransformPoint( pGeomDB, nSurfId, nRefId, ptOnSurfL))
|
||||
return false ;
|
||||
// determino i parametri corrispondenti al punto
|
||||
Point3d ptParam ;
|
||||
Point3d ptBez ;
|
||||
if ( ! pSbz->UnprojectPoint( ptOnSurf, ptParam, P_INVALID))
|
||||
if ( ! pSbz->UnprojectPoint( ptOnSurfL, ptParam, P_INVALID))
|
||||
return false ;
|
||||
dU = ptParam.x ;
|
||||
dV = ptParam.y ;
|
||||
|
||||
if ( nDestGrpId != GDB_ID_NULL) {
|
||||
Vector3d vtNorm, vtDerU, vtDerV ;
|
||||
pSbz->GetPointNrmD1D2( ptParam.x, ptParam.y, ISurfBezier::Side::FROM_MINUS, ISurfBezier::Side::FROM_MINUS, ptBez, vtNorm, &vtDerU, &vtDerV) ;
|
||||
|
||||
PtrOwner<IGeoPoint3d> ptChosen( CreateGeoPoint3d()) ;
|
||||
ptChosen->Set( ptOnSurf) ;
|
||||
int nId = pGeomDB->AddGeoObj( GDB_ID_NULL, nDestGrpId, Release( ptChosen)) ;
|
||||
INTVECTOR vIds ; vIds.push_back( nId) ;
|
||||
ExeSetColor( vIds, Color(255,0,128), false) ;
|
||||
PtrOwner<IGeoPoint3d> ptRefined( CreateGeoPoint3d()) ;
|
||||
|
||||
//// punto reale sulla superficie
|
||||
//ptRefined->Set( ptBez) ;
|
||||
//nId = pGeomDB->AddGeoObj( GDB_ID_NULL, nDestGrpId, Release( ptRefined)) ;
|
||||
//vIds.clear() ; vIds.push_back( nId) ;
|
||||
//ExeSetColor( vIds, Color(128,0,255), false) ;
|
||||
//if ( ! AreSamePointEpsilon( ptBez, ptOnSurf, 100 * EPS_SMALL)) {
|
||||
//// i due punti possono essere distanti fino alla tolleranza usata per triangolare la superficie
|
||||
//return false ;
|
||||
//}
|
||||
PtrOwner<IGeoVector3d> vtGeoNorm( CreateGeoVector3d()) ; vtGeoNorm->Set( vtNorm, ptOnSurf) ;
|
||||
nId = pGeomDB->AddGeoObj( GDB_ID_NULL, nDestGrpId, Release( vtGeoNorm)) ;
|
||||
vIds.push_back( nId) ;
|
||||
ExeSetColor( vIds, Color(255,0,0), false) ;
|
||||
PtrOwner<IGeoVector3d> vtGeoDerU( CreateGeoVector3d()) ; vtGeoDerU->Set( vtDerU, ptOnSurf) ;
|
||||
nId = pGeomDB->AddGeoObj( GDB_ID_NULL, nDestGrpId, Release( vtGeoDerU)) ;
|
||||
vIds.clear() ; vIds.push_back( nId) ;
|
||||
ExeSetColor( vIds, Color(0,128,192), false) ;
|
||||
PtrOwner<IGeoVector3d> vtGeoDerV( CreateGeoVector3d()) ; vtGeoDerV->Set( vtDerV, ptOnSurf) ;
|
||||
nId = pGeomDB->AddGeoObj( GDB_ID_NULL, nDestGrpId, Release( vtGeoDerV)) ;
|
||||
vIds.clear() ; vIds.push_back( nId) ;
|
||||
ExeSetColor( vIds, Color(255,128,0), false) ;
|
||||
}
|
||||
|
||||
return true ;
|
||||
}
|
||||
|
||||
@@ -1855,7 +1813,7 @@ ExeExtractSurfBezierLoops( int nId, int nDestGrpId, int* pnCount)
|
||||
// recupero la superficie di Bezier
|
||||
const ISurfBezier* pSbz = GetSurfBezier( pGeomDB->GetGeoObj( nId)) ;
|
||||
bool bOk = ( pSbz != nullptr) ;
|
||||
if( ! bOk)
|
||||
if ( ! bOk)
|
||||
return GDB_ID_NULL ;
|
||||
// recupero il riferimento della superficie
|
||||
Frame3d frSurf ;
|
||||
@@ -1905,7 +1863,7 @@ int
|
||||
ExeShowSurfBezierControlPoints( int nSrfId, int nDestGrpId, int* pnCount)
|
||||
{
|
||||
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
||||
VERIFY_GEOMDB( pGeomDB, false)
|
||||
VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL)
|
||||
// recupero la superficie di bezier
|
||||
IGeoObj* pGeoObj = pGeomDB->GetGeoObj( nSrfId) ;
|
||||
if ( pGeoObj->GetType() != SRF_BEZIER)
|
||||
@@ -1939,4 +1897,4 @@ ExeShowSurfBezierControlPoints( int nSrfId, int nDestGrpId, int* pnCount)
|
||||
if ( pnCount != nullptr)
|
||||
*pnCount = nCount ;
|
||||
return nFirstId ;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user