EgtExecutor :
- migliorie alla funzione Exe e Lua SurfTmGetFacetOutlineInfo.
This commit is contained in:
@@ -40,13 +40,12 @@
|
||||
#include "/EgtDev/Include/EGkChainCurves.h"
|
||||
#include "/EgtDev/Include/EGkCurveByInterp.h"
|
||||
#include "/EgtDev/Include/EGkCurveByApprox.h"
|
||||
#include "/EgtDev/Include/EGkCurveAux.h"
|
||||
#include "/EgtDev/Include/EGkOffsetCurve.h"
|
||||
#include "/EgtDev/Include/EGkCurveLocal.h"
|
||||
#include "/EgtDev/Include/EGkSurfTriMesh.h"
|
||||
#include "/EgtDev/Include/EGkDistPointCurve.h"
|
||||
#include "/EgtDev/Include/EGkStringUtils3d.h"
|
||||
#include "/EgtDev/Include/EGkCurveLocal.h"
|
||||
#include "/EgtDev/Include/EGkCurveAux.h"
|
||||
#include "/EgtDev/Include/EGkCurve.h"
|
||||
#include "/EgtDev/Include/EgtPointerOwner.h"
|
||||
|
||||
using namespace std ;
|
||||
|
||||
+32
-9
@@ -1084,7 +1084,7 @@ ExeSurfTmGetFacetBBoxRef( int nId, int nFacet, int nFlag, const Frame3d& frRef,
|
||||
//-----------------------------------------------------------------------------
|
||||
bool
|
||||
ExeSurfTmGetFacetOutlineInfo( int nId, int nFacet, int nRefId,
|
||||
int& nStatus, INTVECTOR& vnAdj, DBLVECTOR& vdLen, VCT3DVECTOR& vvtNorm, DBLVECTOR& vdElev)
|
||||
int& nStatus, BOOLVECTOR& vbOpen, INTVECTOR& vnAdj, DBLVECTOR& vdLen, VCT3DVECTOR& vvtNorm, DBLVECTOR& vdElev)
|
||||
{
|
||||
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
||||
VERIFY_GEOMDB( pGeomDB, false)
|
||||
@@ -1103,10 +1103,30 @@ ExeSurfTmGetFacetOutlineInfo( int nId, int nFacet, int nRefId,
|
||||
// calcolo lo stato
|
||||
if ( vPL.size() == 1)
|
||||
nStatus = 0 ;
|
||||
else
|
||||
else {
|
||||
nStatus = -1 ;
|
||||
for ( int i = 1 ; nStatus == -1 && i < int( vPL.size()) ; ++ i) {
|
||||
double dIni, dFin ;
|
||||
Point3d ptIni, ptFin ;
|
||||
bool bFound = vPL[i].GetFirstULine( &dIni, &ptIni, &dFin, &ptFin) ;
|
||||
while ( bFound) {
|
||||
int nAdj = lround( dIni) ;
|
||||
Vector3d vtNf ;
|
||||
if ( nAdj >= 0 && pStm->GetFacetNormal( nAdj, vtNf)) {
|
||||
Vector3d vtTg = ptFin - ptIni ;
|
||||
vtTg.Normalize() ;
|
||||
if ( ( vtTg ^ vtNf) * vtNorm > EPS_SMALL) {
|
||||
nStatus = 1 ;
|
||||
break ;
|
||||
}
|
||||
}
|
||||
bFound = vPL[i].GetNextULine( &dIni, &ptIni, &dFin, &ptFin) ;
|
||||
}
|
||||
}
|
||||
}
|
||||
// pulisco e prealloco i vettori del risultato
|
||||
int nDim = vPL[0].GetLineNbr() ;
|
||||
vbOpen.clear() ; vbOpen.reserve( nDim) ;
|
||||
vnAdj.clear() ; vnAdj.reserve( nDim) ;
|
||||
vdLen.clear() ; vdLen.reserve( nDim) ;
|
||||
vvtNorm.clear() ; vvtNorm.reserve( nDim) ;
|
||||
@@ -1120,18 +1140,21 @@ ExeSurfTmGetFacetOutlineInfo( int nId, int nFacet, int nRefId,
|
||||
while ( bFound) {
|
||||
int nAdj = lround( dIni) ;
|
||||
double dLen = Dist( ptIni, ptFin) ;
|
||||
Vector3d vtN = ptFin - ptIni ;
|
||||
vtN.Normalize() ;
|
||||
vtN.Rotate( vtNorm, 0, ( nAdj >= 0 ? 1 : -1)) ;
|
||||
bool bOpen = true ;
|
||||
Vector3d vtTg = ptFin - ptIni ;
|
||||
vtTg.Normalize() ;
|
||||
Vector3d vtNf ;
|
||||
if ( nAdj >= 0 && pStm->GetFacetNormal( nAdj, vtNf))
|
||||
bOpen = ((vtTg ^ vtNf) * vtNorm < EPS_SMALL) ;
|
||||
Vector3d vtN = vtTg ;
|
||||
vtN.Rotate( vtNorm, 0, ( bOpen ? -1 : 1)) ;
|
||||
TransformVector( pGeomDB, nId, nRefId, vtN) ;
|
||||
double dElev = 0 ;
|
||||
for ( const auto& PU : lstPU) {
|
||||
double dDist = ( PU.first - ptIni) * vtN ;
|
||||
if ( nAdj >= 0)
|
||||
dElev = max( dElev, dDist) ;
|
||||
else
|
||||
dElev = min( dElev, dDist) ;
|
||||
dElev = ( bOpen ? min( dElev, dDist) : max( dElev, dDist)) ;
|
||||
}
|
||||
vbOpen.emplace_back( bOpen) ;
|
||||
vnAdj.emplace_back( nAdj) ;
|
||||
vdLen.emplace_back( dLen) ;
|
||||
vvtNorm.emplace_back( vtN) ;
|
||||
|
||||
@@ -20,6 +20,8 @@
|
||||
#include "GeoTools.h"
|
||||
#include "/EgtDev/Include/EXeExecutor.h"
|
||||
#include "/EgtDev/Include/EXeConst.h"
|
||||
#include "/EgtDev/Include/EGkGeoPoint3d.h"
|
||||
#include "/EgtDev/Include/EGkGeoVector3d.h"
|
||||
#include "/EgtDev/Include/EGkCurve.h"
|
||||
#include "/EgtDev/Include/EGkCurveArc.h"
|
||||
#include "/EgtDev/Include/EGkCurveBezier.h"
|
||||
@@ -34,17 +36,15 @@
|
||||
#include "/EgtDev/Include/EGkChainCurves.h"
|
||||
#include "/EgtDev/Include/EGkProjectCurveSurfTm.h"
|
||||
#include "/EgtDev/Include/EGkSurfFlatRegion.h"
|
||||
#include "/EgtDev/Include/EGkSfrCreate.h"
|
||||
#include "/EgtDev/Include/EGkSurfBezier.h"
|
||||
#include "/EgtDev/Include/EGkExtTExt.h"
|
||||
#include "/EgtDev/Include/EGkGdbIterator.h"
|
||||
#include "/EgtDev/Include/EGkStringUtils3d.h"
|
||||
#include "/EgtDev/Include/EGkIntervals.h"
|
||||
#include "/EgtDev/Include/EGkPolygon3d.h"
|
||||
#include "/EgtDev/Include/EGkGeoPoint3d.h"
|
||||
#include "/EgtDev/Include/EGkGeoVector3d.h"
|
||||
#include "/EgtDev/Include/EgtPointerOwner.h"
|
||||
#include "/EgtDev/Include/EGkCalcPocketing.h"
|
||||
#include <EgtDev/Include/EGkSfrCreate.h>
|
||||
#include "/EgtDev/Include/EGkSurfBezier.h"
|
||||
#include "/EgtDev/Include/EgtPointerOwner.h"
|
||||
#include <functional>
|
||||
|
||||
|
||||
|
||||
+4
-2
@@ -457,19 +457,21 @@ LuaSurfTmGetFacetOutlineInfo( lua_State* L)
|
||||
LuaClearStack( L) ;
|
||||
// recupero le informazioni
|
||||
int nStatus ;
|
||||
BOOLVECTOR vbOpen ;
|
||||
INTVECTOR vnAdj ;
|
||||
VCT3DVECTOR vvtNorm ;
|
||||
DBLVECTOR vdElev ;
|
||||
DBLVECTOR vdLen ;
|
||||
bool bOk = ExeSurfTmGetFacetOutlineInfo( nId, nFacet, nRefId, nStatus, vnAdj, vdLen, vvtNorm, vdElev) ;
|
||||
bool bOk = ExeSurfTmGetFacetOutlineInfo( nId, nFacet, nRefId, nStatus, vbOpen, vnAdj, vdLen, vvtNorm, vdElev) ;
|
||||
// restituisco il risultato
|
||||
if ( bOk) {
|
||||
LuaSetParam( L, nStatus) ;
|
||||
LuaSetParam( L, vbOpen) ;
|
||||
LuaSetParam( L, vnAdj) ;
|
||||
LuaSetParam( L, vdLen) ;
|
||||
LuaSetParam( L, vvtNorm) ;
|
||||
LuaSetParam( L, vdElev) ;
|
||||
return 5 ;
|
||||
return 6 ;
|
||||
}
|
||||
else {
|
||||
LuaSetParam( L) ;
|
||||
|
||||
Reference in New Issue
Block a user