EgtGeomKernel 1.8i2 :

- migliorie a Zmap (grandi rettangoli con EMC).
This commit is contained in:
Dario Sassi
2017-09-18 06:14:33 +00:00
parent 397c2d9321
commit 38590bf381
3 changed files with 1014 additions and 710 deletions
BIN
View File
Binary file not shown.
+1001 -669
View File
File diff suppressed because it is too large Load Diff
+13 -41
View File
@@ -22,6 +22,7 @@
#include "/EgtDev/Include/EGkVector3d.h"
#include "/EgtDev/Include/ENkPolynomialRoots.h"
#include "/EgtDev/Include/EgkIntersLinesurfTm.h"
#include <unordered_map>
//----------------------------------------------------------------------------
struct TriaStruct {
@@ -35,8 +36,7 @@ typedef std::vector<TriaStruct> TriHolder ;
// Vettori di TriHolder con sharp feature di frontiera:
// il primo indice individua il blocco, il secondo il voxel
typedef std::vector<TriHolder> TriaMatrix ;
typedef std::vector<TriHolder> TriaMatrix ;
//----------------------------------------------------------------------------
class VolZmap : public IVolZmap, public IGeoObjRW
@@ -118,6 +118,7 @@ class VolZmap : public IVolZmap, public IGeoObjRW
CONUSMILL = 4, // con parte terminale conica
MORTISER = 5, // mortasatrice
CHISEL = 6} ; // scalpello
typedef std::unordered_map <int, double> VoxelContainer ;
private :
bool CopyFrom( const VolZmap& clSrc) ;
@@ -132,7 +133,7 @@ class VolZmap : public IVolZmap, public IGeoObjRW
bool FlipEdgesII( TriHolder& TriHold) const ;
bool FlipEdgesBB( TriaMatrix& InterTria) const ;
bool IsThereMat( int nI, int nJ, int nK) const ;
bool IsThereMat( const int nMatr[][3], int nNum, double & dHx, double & dHy, double & dHz) const ;
int CalcIndex( int nI, int nJ, int nK) const ;
bool IntersPos( int nVec1[], int nVec2[], Point3d & ptInt) const ;
bool IntersPos( int nVec1[], int nVec2[], bool bFirstCorner, Point3d& ptInt, Vector3d& vtNormal) const ;
bool IsPointInsideVoxel( int nI, int nJ, int nK, const Point3d& ptP) const ;
@@ -152,63 +153,39 @@ class VolZmap : public IVolZmap, public IGeoObjRW
// SOTTRAZIONI
// UTENSILI
// Asse di simmetria parallelo a Z
// Cilindro Sfera
bool CylBall_ZDrilling( unsigned int nGrid, const Point3d& ptS, const Point3d& ptE, const Vector3d& vtToolDir) ;
bool CylBall_ZPerp( unsigned int nGrid, const Point3d& ptS, const Point3d& ptE, const Vector3d& vtToolDir) ;
bool CylBall_ZMilling( unsigned int nGrid, const Point3d& ptS, const Point3d& ptE, const Vector3d& vtToolDir) ;
// Coni
bool Conus_ZDrilling( unsigned int nGrid, const Point3d & ptS, const Point3d& ptE, const Vector3d& vtToolDir) ;
bool Conus_ZPerp( unsigned int nGrid, const Point3d& ptS, const Point3d& ptE, const Vector3d& vtToolDir) ;
bool Conus_ZMilling( unsigned int nGrid, const Point3d& ptS, const Point3d& ptE, const Vector3d& vtToolDir) ;
// Mortasatrice
bool Mrt_ZDrilling( unsigned int nGrid, const Point3d& ptS, const Point3d& ptE, const Vector3d& vtToolDir, const Vector3d& vtAux) ;
bool Mrt_ZMilling( unsigned int nGrid, const Point3d& ptS, const Point3d& ptE, const Vector3d& vtToolDir, const Vector3d& vtAux) ;
// Chisel
bool Chs_ZDrilling( unsigned int nGrid, const Point3d& ptS, const Point3d& ptE, const Vector3d& vtToolDir, const Vector3d& vtAux) ;
bool Chs_ZMilling( unsigned int nGrid, const Point3d& ptS, const Point3d& ptE, const Vector3d& vtToolDir, const Vector3d& vtAux) ;
// Utensile generico
bool GenTool_ZDrilling( unsigned int nGrid, const Point3d& ptS, const Point3d& ptE, const Vector3d& vtToolDir) ;
bool GenTool_ZMilling( unsigned int nGrid, const Point3d& ptS, const Point3d& ptE, const Vector3d& vtToolDir) ;
// Asse di simmetria nel piano
bool CylBall_XYDrilling( unsigned int nGrid, const Point3d& ptS, const Point3d& ptE, const Vector3d& vtToolDir) ;
bool CylBall_XYPerp( unsigned int nGrid, const Point3d& ptS, const Point3d& ptE, const Vector3d& vtToolDir) ;
bool CylBall_XYMilling( unsigned int nGrid, const Point3d& ptS, const Point3d& ptE, const Vector3d& vtToolDir) ;
bool Conus_XYDrilling( unsigned int nGrid, const Point3d& ptS, const Point3d& ptE, const Vector3d& vtToolDir) ;
bool Conus_XYPerp( unsigned int nGrid, const Point3d& ptS, const Point3d& ptE, const Vector3d& vtToolDir) ;
bool Conus_XYMilling( unsigned int nGrid, const Point3d& ptS, const Point3d& ptE, const Vector3d& vtToolDir) ;
// Asse di simmetria con orientazione generica
// Cilindro e sfera
bool CylBall_Drilling( unsigned int nGrid, const Point3d& ptS, const Point3d& ptE, const Vector3d& vtToolDir) ;
bool CylBall_Milling( unsigned int nGrid, const Point3d& ptS, const Point3d& ptE, const Vector3d& vtToolDir) ;
// Coni
bool Conus_Drilling( unsigned int nGrid, const Point3d& ptS, const Point3d& ptE, const Vector3d& vtToolDir) ;
bool Conus_Milling( unsigned int nGrid, const Point3d& ptS, const Point3d& ptE, const Vector3d& vtToolDir) ;
// Mortasatrice
bool Mrt_Drilling( unsigned int nGrid, const Point3d& ptS, const Point3d& ptE, const Vector3d& vtToolDir, const Vector3d& vtAux) ;
bool Mrt_Milling( unsigned int nGrid, const Point3d& ptS, const Point3d& ptE, const Vector3d& vtToolDir, const Vector3d& vtAux) ; // E' in realtà un Perp
// Chisel
bool Chs_Drilling( unsigned int nGrid, const Point3d& ptS, const Point3d& ptE, const Vector3d& vtToolDir, const Vector3d& vtAux) ;
bool Chs_Milling( unsigned int nGrid, const Point3d& ptS, const Point3d& ptE, const Vector3d& vtToolDir, const Vector3d& vtAux) ; // E' in realtà un Perp
// Utensile generico
bool GenTool_Drilling( unsigned int nGrid, const Point3d& ptS, const Point3d& ptE, const Vector3d& vtToolDir) ;
bool GenTool_Milling( unsigned int nGrid, const Point3d& ptS, const Point3d& ptE, const Vector3d& vtToolDir) ;
// COMPONENTI
// Asse di simmetria diretto come l'asse Z
// Drilling
bool CompCyl_ZDrilling( unsigned int nGrid, const Point3d& ptLs, const Point3d& ptLe, const Vector3d& vtToolDir,
double dHei, double dRad) ;
bool CompConus_ZDrilling( unsigned int nGrid, const Point3d& ptLs, const Point3d& ptLe, const Vector3d& vtToolDir,
@@ -216,8 +193,6 @@ class VolZmap : public IVolZmap, public IGeoObjRW
bool CompPar_ZDrilling( unsigned int nGrid, double dLenX, double dLenY, double dLenZ,
const Point3d& ptS, const Point3d& ptE,
const Vector3d& vtToolDir, const Vector3d& vtAux) ;
// Milling
bool CompCyl_ZMilling( unsigned int nGrid, const Point3d& ptS, const Point3d& ptE, const Vector3d& vtToolDir,
double dHei, double dRad) ;
bool CompConus_ZMilling( unsigned int nGrid, const Point3d& ptS, const Point3d& ptE, const Vector3d& vtToolDir,
@@ -225,11 +200,7 @@ class VolZmap : public IVolZmap, public IGeoObjRW
bool CompPar_ZMilling( unsigned int nGrid, double dLenX, double dLenY, double dLenZ,
const Point3d& ptS, const Point3d& ptE,
const Vector3d& vtToolDir, const Vector3d& vtAux) ; // E' in realtà MillingPerp
// Asse di simmetria con orientazione generica
// Drilling
bool CompCyl_Drilling( unsigned int nGrid, const Point3d& ptS, const Point3d& ptE, const Vector3d& vtToolDir,
double dHei, double dRad, bool bTapB, bool bTapT) ;
bool CompConus_Drilling( unsigned int nGrid, const Point3d& ptS, const Point3d& ptE, const Vector3d& vtToolDir,
@@ -237,8 +208,6 @@ class VolZmap : public IVolZmap, public IGeoObjRW
bool CompPar_Drilling( unsigned int nGrid, double dLenX, double dLenY, double dLenZ,
const Point3d& ptS, const Point3d& ptE,
const Vector3d& vtToolDir, const Vector3d& vtAux) ;
// Milling
bool CompCyl_Milling( unsigned int nGrid, const Point3d& ptS, const Point3d& ptE, const Vector3d& vtToolDir,
double dHei, double dRad, bool bTapB, bool bTapT) ;
bool CompConus_Milling( unsigned int nGrid, const Point3d& ptS, const Point3d& ptE, const Vector3d& vtToolDir,
@@ -246,10 +215,8 @@ class VolZmap : public IVolZmap, public IGeoObjRW
bool CompPar_Milling( unsigned int nGrid, double dLenX, double dLenY, double dLenZ,
const Point3d& ptS, const Point3d& ptE,
const Vector3d& vtToolDir, const Vector3d& vtAux) ; // E' in realtà MillingPerp
// Generica traslazione sfera
bool CompBall_Milling( unsigned int nGrid, const Point3d& ptS, const Point3d& ptE, double dRad) ;
// BBox per utensili e solidi semplici in movimenti di traslazione pura; in futuro si dovrà implementare le routine che prevedono rotazioni
inline bool BoundingBox( unsigned int nGrid, const Point3d& ptP1, const Point3d& ptP2, const Vector3d& vtV,
unsigned int& nStI, unsigned int& nStJ, unsigned int& nEnI, unsigned int& nEnJ) ;
@@ -259,8 +226,6 @@ class VolZmap : public IVolZmap, public IGeoObjRW
inline bool BBoxParaComp( unsigned int nGrid, double dLenX, double dLenY, double dLenZ,
const Point3d& ptS, const Point3d& ptE, const Vector3d& vtD, const Vector3d& vtA,
unsigned int& nStI, unsigned int& nStJ, unsigned int& nEnI, unsigned int& nEnJ) ;
// Intersezioni
bool IntersLineBox( const Point3d& ptP, const Vector3d& vtV, const Point3d& ptMin, const Point3d& ptMax,
double& dU1, double& dU2) const ;
@@ -290,7 +255,9 @@ class VolZmap : public IVolZmap, public IGeoObjRW
bool IntersLineMyPolyhedron( const Point3d& ptLineSt, const Vector3d& vtLineDir,
const Frame3d& PolyFrame, double dLenX, double dLenY, double dLenZ, double dDeltaX,
Point3d& ptInt1, Point3d& ptInt2, Vector3d& vtN1, Vector3d& vtN2) ;
// Passaggio da N a ijk per i voxel
bool GetVoxIJKFromN( int nN, int& nI, int& nJ, int& nK) const ;
bool GetVoxNFromIJK( int nI, int nJ, int nK, int& nN) const ;
// Funzioni di gestione dei blocchi
bool GetBlockIJKFromN( int nBlock, int nIJK[]) const ;
bool GetBlockNFromIJK( int nIJK[], int& nBlock) const ;
@@ -302,6 +269,12 @@ class VolZmap : public IVolZmap, public IGeoObjRW
const int nBlockLimits[], const int nVoxIJK[]) const ;
bool IsATriangleOnBorder( const Triangle3d& trTria, const Point3d& ptVert,
const int nBlockLimits[], const int nVoxIJK[], bool bBorderBox) const ;
// Funzioni per facce canoniche con grandi triangoli
bool ProcessVoxContXY( VoxelContainer& VoxContXY, bool bPlus, TRIA3DLIST& lstTria) const ;
bool ProcessVoxContYZ( VoxelContainer& VoxContYZ, bool bPlus, TRIA3DLIST& lstTria) const ;
bool ProcessVoxContXZ( VoxelContainer& VoxContXZ, bool bPlus, TRIA3DLIST& lstTria) const ;
bool Find( const VoxelContainer& VoxCont, int nI, int nJ, int nK, double dPos) const ;
bool Remove( VoxelContainer& VoxCont, int nI, int nJ, int nK) const ;
// Connessione Zmap
bool IsMapConnected( void) ;
@@ -360,7 +333,6 @@ class VolZmap : public IVolZmap, public IGeoObjRW
double m_dMrtChsWidth ;
double m_dMrtChsThickness ;
mutable TriaMatrix m_InterBlockTria ;
} ;