EgtGeomKernel 1.8i2 :
- migliorie a Zmap (grandi rettangoli con EMC).
This commit is contained in:
Binary file not shown.
+1001
-669
File diff suppressed because it is too large
Load Diff
@@ -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 ;
|
||||
} ;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user