EgtGeomKernel 1.6x5 :
- aggiunto marching cube a Zmap.
This commit is contained in:
Binary file not shown.
+5
-5
@@ -95,7 +95,7 @@ GdbExecutor::GdbExecutor( void)
|
||||
m_ExecMgr.Insert( "CURVECOMPO", &GdbExecutor::ExecuteCurveCompo) ;
|
||||
m_ExecMgr.Insert( "STM", &GdbExecutor::ExecuteSurfTriMesh) ;
|
||||
m_ExecMgr.Insert( "SURFTRIMESH", &GdbExecutor::ExecuteSurfTriMesh) ;
|
||||
m_ExecMgr.Insert( "VOLZMAP", &GdbExecutor::ExecuteVolZmap) ;
|
||||
// m_ExecMgr.Insert( "VOLZMAP", &GdbExecutor::ExecuteVolZmap) ;
|
||||
m_ExecMgr.Insert( "TEXT", &GdbExecutor::ExecuteText) ;
|
||||
m_ExecMgr.Insert( "LEV", &GdbExecutor::ExecuteLevel) ;
|
||||
m_ExecMgr.Insert( "LEVEL", &GdbExecutor::ExecuteLevel) ;
|
||||
@@ -2566,7 +2566,7 @@ GdbExecutor::SurfTriMeshDoSewing( const STRVECTOR& vsParams)
|
||||
}
|
||||
return true ;
|
||||
}
|
||||
|
||||
/*
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
GdbExecutor::ExecuteVolZmap(const string& sCmd2, const STRVECTOR& vsParams)
|
||||
@@ -2649,7 +2649,7 @@ GdbExecutor::VolZmapCreate( const STRVECTOR& vsParams)
|
||||
// inserisco nel DB
|
||||
return AddGeoObj(vsParams[0], vsParams[1], Release( pZprova)) ;
|
||||
}
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
GdbExecutor::VolZmapCreateFromFlatRegion( const STRVECTOR& vsParams)
|
||||
@@ -2770,7 +2770,7 @@ GdbExecutor::VolZmapMilling( const STRVECTOR& vsParams)
|
||||
return pZmap->MillingStep( ptPs, vtDs, ptPe, vtDe) ;
|
||||
//else
|
||||
// return pZmap->MillingStep( ptPs, vtDs, ptPe, vtDe) ;
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
@@ -2910,7 +2910,7 @@ GdbExecutor::VolZmapBBoxZmapIntersection( const STRVECTOR& vsParams)
|
||||
bInt = ! pZmap->AvoidBox( frBBoxFrame, ptEnd - ORIG) ;
|
||||
|
||||
return true ;
|
||||
}
|
||||
}*/
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
|
||||
+807
-3
@@ -36,7 +36,810 @@ static int EdgeTable[256] = {
|
||||
0x70c, 0x605, 0x50f, 0x406, 0x30a, 0x203, 0x109, 0x0
|
||||
} ;
|
||||
|
||||
// Tabella triangoli
|
||||
//----------------------------------------------------------------------------
|
||||
// Tabella triangoli Enhanced MC
|
||||
static int TriangleTableEn[256][2][17] = {
|
||||
|
||||
{{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{0, 8, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 3, 0, 8, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{0, 1, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 3, 0, 1, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{1, 8, 3, 9, 8, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 4, 1, 9, 8, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{1, 2, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 3, 1, 2, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{0, 8, 3, 1, 2, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{2, 3, 3, 0, 8, 3, 1, 2, 10, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{9, 2, 10, 0, 2, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 4, 2, 10, 9, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{2, 8, 3, 2, 10, 8, 10, 9, 8, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 5, 10, 9, 8, 3, 2 , -1,-1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{3, 11, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 3, 3, 11, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{0, 11, 2, 8, 11, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 4, 0, 8, 11, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
// 10 -----------------------------------------------------------
|
||||
{{1, 9, 0, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{2, 3, 3, 1, 9, 0, 2, 3,11, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{1, 11, 2, 1, 9, 11, 9, 8, 11, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 5, 9, 8, 11, 2, 1,-1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{3, 10, 1, 11, 10, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 4, 3, 11,10, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{0, 10, 1, 0, 8, 10, 8, 11, 10, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 5, 8, 11, 10, 1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{3, 9, 0, 3, 11, 9, 11, 10, 9, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 5, 11, 10, 9, 0, 3, -1,-1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{9, 8, 10, 10, 8, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 4, 8, 11, 10, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{4, 7, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 3, 4, 7, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{4, 3, 0, 7, 3, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 4, 4, 7, 3, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{0, 1, 9, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{2, 3, 3, 0, 1, 9, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{4, 1, 9, 4, 7, 1, 7, 3, 1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 5, 7, 3, 1, 9, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
// 20 -----------------------------------------------------------
|
||||
{{1, 2, 10, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{2, 3, 3, 1, 2, 10, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{3, 4, 7, 3, 0, 4, 1, 2, 10, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{2, 4, 3, 3, 0, 4, 7, 1, 2, 10, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{9, 2, 10, 9, 0, 2, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{2, 4, 3, 2, 10, 9, 0, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{2, 10, 9, 2, 9, 7, 2, 7, 3, 7, 9, 4, -1, -1, -1, -1, -1},
|
||||
{1, 6, 7, 3, 2, 10, 9, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{8, 4, 7, 3, 11, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{2, 3, 3, 8, 4, 7, 3, 11, 2, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{11, 4, 7, 11, 2, 4, 2, 0, 4, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 5, 2, 0, 4, 7, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{9, 0, 1, 8, 4, 7, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{3, 3, 3, 3, 9, 0, 1, 8, 4, 7, 2, 3, 11, -1, -1, -1, -1}},
|
||||
|
||||
{{4, 7, 11, 9, 4, 11, 9, 11, 2, 9, 2, 1, -1, -1, -1, -1, -1},
|
||||
{2, 4, 4, 2, 1, 9, 11, 11,9,4,7, -1, -1, -1, -1, -1 ,-1}},
|
||||
|
||||
{{3, 10, 1, 3, 11, 10, 7, 8, 4, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{2, 4, 3, 3, 11, 10, 1, 7, 8, 4, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{1, 11, 10, 1, 4, 11, 1, 0, 4, 7, 11, 4, -1, -1, -1, -1, -1},
|
||||
{1, 6, 1, 0, 4, 7, 11, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
// 30 ----------------------------------------------------------
|
||||
{{4, 7, 8, 9, 0, 11, 9, 11, 10, 11, 0, 3, -1, -1, -1, -1, -1},
|
||||
{2, 3, 5, 4, 7, 8, 0, 3, 11, 10, 9, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{4, 7, 11, 4, 11, 9, 9, 11, 10, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 5, 4, 7, 11, 10, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{9, 5, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 3, 9, 5, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{9, 5, 4, 0, 8, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{2, 3, 3, 9, 5, 4, 0, 8, 3, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{0, 5, 4, 1, 5, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 4, 0, 1, 5, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{8, 5, 4, 8, 3, 5, 3, 1, 5, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 5, 3, 1, 5, 4, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{1, 2, 10, 9, 5, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{2, 3, 3, 1, 2, 10, 9, 5, 4, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{3, 0, 8, 1, 2, 10, 4, 9, 5, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{3, 3, 3, 3, 3, 0, 8, 1, 2, 10, 4, 9, 5, -1, -1, -1, -1}},
|
||||
|
||||
{{5, 2, 10, 5, 4, 2, 4, 0, 2, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 5, 4, 0, 2, 10, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{2, 10, 5, 3, 2, 5, 3, 5, 4, 3, 4, 8, -1, -1, -1, -1, -1},
|
||||
{2, 4, 4, 2, 10, 5, 3, 4, 8, 3, 5, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
// 40 ------------------------------------------------------------
|
||||
{{9, 5, 4, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{2, 3, 3, 9, 5, 4, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{0, 11, 2, 0, 8, 11, 4, 9, 5, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{2, 4, 3, 0, 8, 11, 2, 4, 9, 5, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{0, 5, 4, 0, 1, 5, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{2, 4, 3, 0, 1, 5, 4, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{2, 1, 5, 2, 5, 8, 2, 8, 11, 4, 8, 5, -1, -1, -1, -1, -1},
|
||||
{1, 6, 2, 1, 5, 4, 8, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{10, 3, 11, 10, 1, 3, 9, 5, 4, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{2, 4, 3, 3, 11, 10, 1, 9, 5, 4, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{4, 9, 5, 0, 8, 1, 8, 10, 1, 8, 11, 10, -1, -1, -1, -1, -1},
|
||||
{2, 3, 5, 4, 9, 5, 1, 0, 8, 11, 10, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{5, 4, 0, 5, 0, 11, 5, 11, 10, 11, 0, 3, -1, -1, -1, -1, -1},
|
||||
{1, 6, 5, 4, 0, 3, 11, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{5, 4, 8, 5, 8, 10, 10, 8, 11, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 5, 5, 4, 8, 11, 10,-1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{9, 7, 8, 5, 7, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 4, 7, 8, 9, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{9, 3, 0, 9, 5, 3, 5, 7, 3, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 5, 5, 7, 3, 0, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
// 50 ----------------------------------------------------------
|
||||
{{0, 7, 8, 0, 1, 7, 1, 5, 7, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 5, 1, 5, 7, 8, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{1, 5, 3, 3, 5, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 4, 3, 1, 5, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{9, 7, 8, 9, 5, 7, 10, 1, 2, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{2, 4, 3, 7, 8, 9, 5, 10, 1, 2, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{10, 1, 2, 9, 5, 0, 5, 3, 0, 5, 7, 3, -1, -1, -1, -1, -1},
|
||||
{2, 3, 5, 10, 1, 2, 0, 9, 5, 7, 3, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{8, 0, 2, 8, 2, 5, 8, 5, 7, 10, 5, 2, -1, -1, -1, -1, -1},
|
||||
{1, 6, 2, 10, 5, 7, 8, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{2, 10, 5, 2, 5, 3, 3, 5, 7, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 5, 2, 10, 5, 7, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{7, 9, 5, 7, 8, 9, 3, 11, 2, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{2, 4, 3, 7, 8, 9, 5, 3, 11, 2, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{9, 5, 7, 9, 7, 2, 9, 2, 0, 2, 7, 11, -1, -1, -1, -1, -1},
|
||||
{1, 6, 2, 0, 9, 5, 7, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{2, 3, 11, 0, 1, 8, 1, 7, 8, 1, 5, 7, -1, -1, -1, -1, -1},
|
||||
{2, 3, 5, 2, 3, 11, 8, 0, 1, 5, 7, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{11, 2, 1, 11, 1, 7, 7, 1, 5, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 5, 11, 2, 1, 5, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
// 60 --------------------------------------------------------
|
||||
{{9, 5, 8, 8, 5, 7, 10, 1, 3, 10, 3, 11, -1, -1, -1, -1, -1},
|
||||
{2, 4, 4, 3, 11, 10, 1, 5, 7, 8, 9, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{5, 7, 0, 5, 0, 9, 7, 11, 0, 1, 0, 10, 11, 10, 0, -1, -1},
|
||||
{1, 7, 5, 7, 11, 10, 1, 0, 9, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{11, 10, 0, 11, 0, 3, 10, 5, 0, 8, 0, 7, 5, 7, 0, -1, -1},
|
||||
{1, 7, 11, 10, 5, 7, 8, 0, 3, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{11, 10, 5, 7, 11, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 4, 5, 7, 11, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{10, 6, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 3, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{0, 8, 3, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{2, 3, 3, 0, 8, 3, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{9, 0, 1, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{2, 3, 3, 9, 0, 1, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{1, 8, 3, 1, 9, 8, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{2, 4, 3, 1, 9, 8, 3, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{1, 6, 5, 2, 6, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 4, 1, 2, 6, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{1, 6, 5, 1, 2, 6, 3, 0, 8, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{2, 4, 3, 1, 2, 6, 5, 3, 0, 8, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
// 70 ----------------------------------------------------------
|
||||
{{9, 6, 5, 9, 0, 6, 0, 2, 6, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 5, 0, 2, 6, 5, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{5, 9, 8, 5, 8, 2, 5, 2, 6, 3, 2, 8, -1, -1, -1, -1, -1},
|
||||
{1, 6, 2, 6, 5, 9, 8, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{2, 3, 11, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{2, 3, 3, 2, 3, 11, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{11, 0, 8, 11, 2, 0, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{2, 4, 3, 0, 8, 11, 2, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{0, 1, 9, 2, 3, 11, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{3, 3, 3, 3, 0, 1, 9, 2, 3, 11, 5, 10, 6, -1, -1, -1, -1}},
|
||||
|
||||
{{5, 10, 6, 1, 9, 2, 9, 11, 2, 9, 8, 11, -1, -1, -1, -1, -1},
|
||||
{2, 3, 5, 5, 10, 6, 2, 1, 9, 8, 11, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{6, 3, 11, 6, 5, 3, 5, 1, 3, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 5, 5, 1, 3, 11, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{0, 8, 11, 0, 11, 5, 0, 5, 1, 5, 11, 6, -1, -1, -1, -1, -1},
|
||||
{1, 6, 5, 1, 0, 8,11, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{3, 11, 6, 0, 3, 6, 0, 6, 5, 0, 5, 9, -1, -1, -1, -1, -1},
|
||||
{2, 4, 4, 3, 11, 6, 0, 5, 9, 0, 6, -1, -1, -1, -1}},
|
||||
|
||||
{{6, 5, 9, 6, 9, 11, 11, 9, 8, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 5, 6, 5, 9, 8, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
// 80 -----------------------------------------------------------
|
||||
{{5, 10, 6, 4, 7, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{2, 3, 3, 5, 10, 6, 4, 7, 8, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{4, 3, 0, 4, 7, 3, 6, 5, 10, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{2, 4, 3, 4, 7, 3, 0, 6, 5, 10, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{1, 9, 0, 5, 10, 6, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{3, 3, 3, 3, 1, 9, 0, 5, 10, 6, 8, 4, 7, -1, -1, -1, -1}},
|
||||
|
||||
{{10, 6, 5, 1, 9, 7, 1, 7, 3, 7, 9, 4, -1, -1, -1, -1, -1},
|
||||
{ 2, 3, 5,10, 6, 5, 9, 4, 7, 3, 1,-1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{6, 1, 2, 6, 5, 1, 4, 7, 8, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{2, 4, 3, 1, 2, 6, 5, 4, 7, 8, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{1, 2, 5, 5, 2, 6, 3, 0, 4, 3, 4, 7, -1, -1, -1, -1, -1},
|
||||
{2, 4, 4, 2, 6, 5, 1, 3, 0, 4, 7, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{8, 4, 7, 9, 0, 5, 0, 6, 5, 0, 2, 6, -1, -1, -1, -1, -1},
|
||||
{2, 3, 5, 8, 4, 7, 5, 9, 0, 2, 6, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{7, 3, 9, 7, 9, 4, 3, 2, 9, 5, 9, 6, 2, 6, 9, -1, -1},
|
||||
{1, 7, 7, 3, 2, 6, 5, 9, 4,-1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{3, 11, 2, 7, 8, 4, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{3, 3, 3, 3, 3, 11, 2, 7, 8, 4, 10, 6, 5, -1, -1, -1, -1}},
|
||||
|
||||
{{5, 10, 6, 4, 7, 2, 4, 2, 0, 2, 7, 11, -1, -1, -1, -1, -1},
|
||||
{2, 3, 5, 5, 10, 6, 7, 11, 2, 0, 4, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
// 90 ------------------------------------------------------
|
||||
{{0, 1, 9, 4, 7, 8, 2, 3, 11, 5, 10, 6, -1, -1, -1, -1, -1},
|
||||
{4, 3, 3, 3, 3, 0, 1, 9, 4, 7, 8, 2, 3, 11, 5, 10, 6}},
|
||||
|
||||
{{9, 2, 1, 9, 11, 2, 9, 4, 11, 7, 11, 4, 5, 10, 6, -1, -1},
|
||||
{3, 4, 4, 3, 2, 1, 9, 11, 4, 7, 11, 9, 5, 10, 6, -1, -1}},
|
||||
|
||||
{{8, 4, 7, 3, 11, 5, 3, 5, 1, 5, 11, 6, -1, -1, -1, -1, -1},
|
||||
{2, 3, 5, 8, 4, 7, 11, 6, 5, 1, 3, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{5, 1, 11, 5, 11, 6, 1, 0, 11, 7, 11, 4, 0, 4, 11, -1, -1},
|
||||
{1, 7, 5, 1, 0, 4, 7, 11, 6, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{0, 5, 9, 0, 6, 5, 0, 3, 6, 11, 6, 3, 8, 4, 7, -1, -1},
|
||||
{3, 4, 4, 3, 0, 6, 5, 9, 3, 11, 6, 0, 8, 4, 7, -1, -1}},
|
||||
|
||||
{{6, 5, 9, 6, 9, 11, 4, 7, 9, 7, 11, 9, -1, -1, -1, -1, -1},
|
||||
{2, 4, 4, 9, 4, 7, 11, 6, 5, 9, 11,-1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{10, 4, 9, 6, 4, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 4, 4, 9, 10, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{4, 10, 6, 4, 9, 10, 0, 8, 3, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{2, 4, 3, 4, 9, 10, 6, 0, 8, 3, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{10, 0, 1, 10, 6, 0, 6, 4, 0, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 5, 6, 4, 0, 1, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{8, 3, 1, 8, 1, 6, 8, 6, 4, 6, 1, 10, -1, -1, -1, -1, -1},
|
||||
{1, 6, 1, 10, 6, 4, 8, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
// 100 ---------------------------------------------------------
|
||||
{{1, 4, 9, 1, 2, 4, 2, 6, 4, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 5, 2, 6, 4, 9, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{3, 0, 8, 1, 2, 9, 2, 4, 9, 2, 6, 4, -1, -1, -1, -1, -1},
|
||||
{2, 3, 5, 3, 0, 8, 9, 1, 2, 6, 4, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{0, 2, 4, 4, 2, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 4, 2, 6, 4, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{8, 3, 2, 8, 2, 4, 4, 2, 6, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 5, 8, 3, 2, 6, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{10, 4, 9, 10, 6, 4, 11, 2, 3, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{2, 4, 3, 10, 6, 4, 9, 11, 2, 3, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{0, 8, 2, 2, 8, 11, 4, 9, 10, 4, 10, 6, -1, -1, -1, -1, -1},
|
||||
{2, 4, 4, 2, 11, 8, 0, 10, 6, 4, 9, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{3, 11, 2, 0, 1, 6, 0, 6, 4, 6, 1, 10, -1, -1, -1, -1, -1},
|
||||
{2, 3, 5, 3, 11, 2, 1, 10, 6, 4, 0, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{6, 4, 1, 6, 1, 10, 4, 8, 1, 2, 1, 11, 8, 11, 1, -1, -1},
|
||||
{1, 7, 6, 4, 8, 11, 2, 1, 10, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{9, 6, 4, 9, 3, 6, 9, 1, 3, 11, 6, 3, -1, -1, -1, -1, -1},
|
||||
{1, 6, 3, 11, 6, 4, 9, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{8, 11, 1, 8, 1, 0, 11, 6, 1, 9, 1, 4, 6, 4, 1, -1, -1},
|
||||
{1, 7, 8, 11, 6, 4, 9, 1, 0, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
// 110 ----------------------------------------------------------
|
||||
{{3, 11, 6, 3, 6, 0, 0, 6, 4, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 5, 3, 11, 6, 4, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{6, 4, 8, 11, 6, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 4, 8, 11, 6, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{7, 10, 6, 7, 8, 10, 8, 9, 10, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 5, 8, 9, 10, 6, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{0, 7, 3, 0, 10, 7, 0, 9, 10, 6, 7, 10, -1, -1, -1, -1, -1},
|
||||
{1, 6, 0, 9, 10, 6, 7, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{10, 6, 7, 1, 10, 7, 1, 7, 8, 1, 8, 0, -1, -1, -1, -1, -1},
|
||||
{2, 4, 4, 8, 0, 1, 7, 10, 6, 7, 1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{10, 6, 7, 10, 7, 1, 1, 7, 3, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 5, 10, 6, 7, 3, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{1, 2, 6, 1, 6, 8, 1, 8, 9, 8, 6, 7, -1, -1, -1, -1, -1},
|
||||
{1, 6, 1, 2, 6, 7, 8, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{2, 6, 9, 2, 9, 1, 6, 7, 9, 0, 9, 3, 7, 3, 9, -1, -1},
|
||||
{1, 7, 2, 6, 7, 3, 0, 9, 1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{7, 8, 0, 7, 0, 6, 6, 0, 2, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 5, 7, 8, 0, 2, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{7, 3, 2, 6, 7, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 4, 7, 3, 2, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
// 120 -------------------------------------------------------
|
||||
{{2, 3, 11, 10, 6, 8, 10, 8, 9, 8, 6, 7, -1, -1, -1, -1, -1},
|
||||
{2, 3, 5, 2, 3, 11, 6, 7, 8, 9, 10, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{2, 0, 7, 2, 7, 11, 0, 9, 7, 6, 7, 10, 9, 10, 7, -1, -1},
|
||||
{1, 7, 2, 0, 9, 10, 6, 7, 11, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{1, 8, 0, 1, 7, 8, 1, 10, 7, 6, 7, 10, 2, 3, 11, -1, -1},
|
||||
{3, 4, 4, 3, 8, 0, 1, 7, 10, 6, 7, 1, 11, 2, 3, -1, -1}},
|
||||
|
||||
{{11, 2, 1, 11, 1, 7, 10, 6, 1, 6, 7, 1, -1, -1, -1, -1, -1},
|
||||
{2, 4, 4, 11, 2, 1, 7, 1, 10, 6, 7, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{8, 9, 6, 8, 6, 7, 9, 1, 6, 11, 6, 3, 1, 3, 6, -1, -1},
|
||||
{1, 7, 8, 9, 1, 3, 11, 6, 7, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{0, 9, 1, 11, 6, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{2, 3, 3, 0, 9, 1, 11, 6, 7, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{7, 8, 0, 7, 0, 6, 3, 11, 0, 11, 6, 0, -1, -1, -1, -1, -1},
|
||||
{2, 4, 4, 0, 3, 11, 6, 7, 8, 0, 6, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{7, 11, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 3, 7, 11, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{7, 6, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 3, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{3, 0, 8, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{2, 3, 3, 3, 0, 8, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
// 130 ----------------------------------------------------------
|
||||
{{0, 1, 9, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{2, 3, 3, 0, 1, 9, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{8, 1, 9, 8, 3, 1, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{2, 4, 3, 1, 9, 8, 3, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{10, 1, 2, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{2, 3, 3, 10, 1, 2, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{1, 2, 10, 3, 0, 8, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{3, 3, 3, 3, 1, 2, 10, 3, 0, 8, 6, 11, 7, -1, -1, -1, -1}},
|
||||
|
||||
{{2, 9, 0, 2, 10, 9, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{2, 4, 3, 2, 10, 9, 0, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{6, 11, 7, 2, 10, 3, 10, 8, 3, 10, 9, 8, -1, -1, -1, -1, -1},
|
||||
{2, 3, 5, 6, 11, 7, 3, 2, 10, 9, 8, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{7, 2, 3, 6, 2, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 4, 2, 3, 7, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{7, 0, 8, 7, 6, 0, 6, 2, 0, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 5, 6, 2, 0, 8, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{2, 7, 6, 2, 3, 7, 0, 1, 9, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{2, 4, 3, 2, 3, 7, 6, 0, 1, 9, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{1, 6, 2, 1, 8, 6, 1, 9, 8, 8, 7, 6, -1, -1, -1, -1, -1},
|
||||
{1, 6, 6, 2, 1, 9, 8, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
// 140 ----------------------------------------------------------
|
||||
{{10, 7, 6, 10, 1, 7, 1, 3, 7, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 5, 1, 3, 7, 6, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{10, 7, 6, 1, 7, 10, 1, 8, 7, 1, 0, 8, -1, -1, -1, -1, -1},
|
||||
{2, 4, 4, 10, 1, 7, 6, 8, 7, 1, 0, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{0, 3, 7, 0, 7, 10, 0, 10, 9, 6, 10, 7, -1, -1, -1, -1, -1},
|
||||
{1, 6, 10, 9, 0, 3, 7, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{7, 6, 10, 7, 10, 8, 8, 10, 9, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 5, 7, 6, 10, 9, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{6, 8, 4, 11, 8, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 4, 6, 11, 8, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{3, 6, 11, 3, 0, 6, 0, 4, 6, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 5, 0, 4, 6, 11, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{8, 6, 11, 8, 4, 6, 9, 0, 1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{2, 4, 3, 6, 11, 8, 4, 9, 0, 1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{9, 4, 6, 9, 6, 3, 9, 3, 1, 11, 3, 6, -1, -1, -1, -1, -1},
|
||||
{1, 6, 6, 11, 3, 1, 9, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{6, 8, 4, 6, 11, 8, 2, 10, 1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{2, 4, 3, 6, 11, 8, 4, 2, 10, 1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{1, 2, 10, 3, 0, 11, 0, 6, 11, 0, 4, 6, -1, -1, -1, -1, -1},
|
||||
{2, 3, 5, 1, 2, 10, 11, 3, 0, 4, 6, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
// 150 -------------------------------------------------------
|
||||
{{4, 11, 8, 4, 6, 11, 0, 2, 9, 2, 10, 9, -1, -1, -1, -1, -1},
|
||||
{2, 4, 4, 4, 6, 11, 8, 2, 10, 9, 0, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{10, 9, 3, 10, 3, 2, 9, 4, 3, 11, 3, 6, 4, 6, 3, -1, -1},
|
||||
{1, 7, 10, 9, 4, 6, 11, 3, 2, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{8, 2, 3, 8, 4, 2, 4, 6, 2, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 5, 4, 6, 2, 3, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{0, 4, 2, 4, 6, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 4, 4, 6, 2, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{1, 9, 0, 2, 3, 4, 2, 4, 6, 4, 3, 8, -1, -1, -1, -1, -1},
|
||||
{2, 3, 5, 1, 9, 0, 3, 8, 4, 6, 2, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{1, 9, 4, 1, 4, 2, 2, 4, 6, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 5, 1, 9, 4, 6, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{8, 1, 3, 8, 6, 1, 8, 4, 6, 6, 10, 1, -1, -1, -1, -1, -1},
|
||||
{1, 6, 1, 3, 8, 4, 6, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{10, 1, 0, 10, 0, 6, 6, 0, 4, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 5, 10, 1, 0, 4, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{4, 6, 3, 4, 3, 8, 6, 10, 3, 0, 3, 9, 10, 9, 3, -1, -1},
|
||||
{1, 7, 4, 6, 10, 9, 0, 3, 8, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{10, 9, 4, 6, 10, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 4, 4, 6, 10, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
// 160 ----------------------------------------------------------
|
||||
{{4, 9, 5, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{2, 3, 3, 4, 9, 5, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{0, 8, 3, 4, 9, 5, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{3, 3, 3, 3, 0, 8, 3, 4, 9, 5, 11, 7, 6, -1, -1, -1, -1}},
|
||||
|
||||
{{5, 0, 1, 5, 4, 0, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{2, 4, 3, 0, 1, 5, 4, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{11, 7, 6, 8, 3, 4, 3, 5, 4, 3, 1, 5, -1, -1, -1, -1, -1},
|
||||
{2, 3, 5, 11, 7, 6, 4, 8, 3, 1, 5, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{9, 5, 4, 10, 1, 2, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{3, 3, 3, 3, 9, 5, 4, 10, 1, 2, 7, 6, 11, -1, -1, -1, -1}},
|
||||
|
||||
{{6, 11, 7, 1, 2, 10, 0, 8, 3, 4, 9, 5, -1, -1, -1, -1, -1},
|
||||
{4, 3, 3, 3, 3, 6, 11, 7, 1, 2, 10, 0, 8, 3, 4, 9, 5}},
|
||||
|
||||
{{7, 6, 11, 5, 4, 10, 4, 2, 10, 4, 0, 2, -1, -1, -1, -1, -1},
|
||||
{2, 3, 5, 7, 6, 11, 10, 5, 4, 0, 2,-1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{3, 4, 8, 3, 5, 4, 3, 2, 5, 10, 5, 2, 11, 7, 6, -1, -1},
|
||||
{3, 4, 4, 3, 5, 3, 2, 10, 4, 8, 3, 5, 6, 11, 7, 6, -1}},
|
||||
|
||||
{{7, 2, 3, 7, 6, 2, 5, 4, 9, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{2, 4, 3, 2, 3, 7, 6, 5, 4, 9, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{9, 5, 4, 0, 8, 6, 0, 6, 2, 6, 8, 7, -1, -1, -1, -1, -1},
|
||||
{2, 3, 5, 9, 5, 4, 8, 7, 6, 2, 0, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
// 170 -----------------------------------------------------
|
||||
{{3, 6, 2, 3, 7, 6, 1, 5, 0, 5, 4, 0, -1, -1, -1, -1, -1},
|
||||
{2, 4, 4, 3, 7, 6, 2, 0, 1, 5, 4, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{6, 2, 8, 6, 8, 7, 2, 1, 8, 4, 8, 5, 1, 5, 8, -1, -1},
|
||||
{1, 7, 6, 2, 1, 5, 4, 8, 7,-1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{9, 5, 4, 10, 1, 6, 1, 7, 6, 1, 3, 7, -1, -1, -1, -1, -1},
|
||||
{2, 3, 5, 9, 5, 4, 6, 10, 1, 3, 7,-1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{1, 6, 10, 1, 7, 6, 1, 0, 7, 8, 7, 0, 9, 5, 4, -1, -1},
|
||||
{3, 4, 4, 3, 0, 8, 7, 1, 6, 10, 1, 7, 9, 5, 4, -1, -1}},
|
||||
|
||||
{{4, 0, 10, 4, 10, 5, 0, 3, 10, 6, 10, 7, 3, 7, 10, -1, -1},
|
||||
{1, 7, 4, 0, 3, 7, 6, 10, 5, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{7, 6, 10, 7, 10, 8, 5, 4, 10, 4, 8, 10, -1, -1, -1, -1, -1},
|
||||
{2, 4, 4, 4, 8, 10, 5, 7, 6, 10, 8, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{6, 9, 5, 6, 11, 9, 11, 8, 9, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 5,11, 8, 9, 5, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{3, 6, 11, 0, 6, 3, 0, 5, 6, 0, 9, 5, -1, -1, -1, -1, -1},
|
||||
{2, 4, 4, 0, 9, 5, 6, 6, 11, 3, 0, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{0, 11, 8, 0, 5, 11, 0, 1, 5, 5, 6, 11, -1, -1, -1, -1, -1},
|
||||
{1, 6, 0, 1, 5, 6, 11, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{6, 11, 3, 6, 3, 5, 5, 3, 1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 5, 6, 11, 3, 1, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
// 180 -------------------------------------------------------
|
||||
{{1, 2, 10, 9, 5, 11, 9, 11, 8, 11, 5, 6, -1, -1, -1, -1, -1},
|
||||
{2, 3, 5, 1, 2, 10, 5, 6, 11, 8, 9, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{0, 11, 3, 0, 6, 11, 0, 9, 6, 5, 6, 9, 1, 2, 10, -1, -1},
|
||||
{3, 4, 4, 3, 11, 3, 0, 6, 9, 5, 6, 0, 2, 10, 1, 2, 10}},
|
||||
|
||||
{{11, 8, 5, 11, 5, 6, 8, 0, 5, 10, 5, 2, 0, 2, 5, -1, -1},
|
||||
{1, 7,11, 8, 0, 2, 10, 5, 6, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{6, 11, 3, 6, 3, 5, 2, 10, 3, 10, 5, 3, -1, -1, -1, -1, -1},
|
||||
{2, 4, 4, 6, 11, 3, 5, 10, 5, 3, 2, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{5, 8, 9, 5, 2, 8, 5, 6, 2, 3, 8, 2, -1, -1, -1, -1, -1},
|
||||
{1, 6, 2, 3, 8, 9, 5, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{9, 5, 6, 9, 6, 0, 0, 6, 2, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 5, 9, 5, 6, 2, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{1, 5, 8, 1, 8, 0, 5, 6, 8, 3, 8, 2, 6, 2, 8, -1, -1},
|
||||
{1, 7, 1, 5, 6, 2, 3, 8, 0, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{1, 5, 6, 2, 1, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 4, 1, 5, 6, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{1, 3, 6, 1, 6, 10, 3, 8, 6, 5, 6, 9, 8, 9, 6, -1, -1},
|
||||
{1, 7, 1, 3, 8, 9, 5, 6, 10, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{10, 1, 0, 10, 0, 6, 9, 5, 0, 5, 6, 0, -1, -1, -1, -1, -1},
|
||||
{2, 4, 4, 5, 6, 0, 9, 10, 1, 0, 6, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
// 190 ----------------------------------------------------------
|
||||
{{0, 3, 8, 5, 6, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{2, 3, 3, 0, 3, 8, 5, 6, 10, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{10, 5, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 3, 10, 5, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{11, 5, 10, 7, 5, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 4, 5, 10, 11, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{11, 5, 10, 11, 7, 5, 8, 3, 0, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{2, 4, 3, 5, 10, 11, 7, 8, 3, 0, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{5, 11, 7, 5, 10, 11, 1, 9, 0, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{2, 4, 3, 5, 10, 11, 7, 1, 9, 0, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{10, 7, 5, 10, 11, 7, 9, 8, 1, 8, 3, 1, -1, -1, -1, -1, -1},
|
||||
{2, 4, 4, 10, 11, 7, 5, 1, 9, 8, 3, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{11, 1, 2, 11, 7, 1, 7, 5, 1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 5, 7, 5, 1, 2, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{0, 8, 3, 1, 2, 7, 1, 7, 5, 7, 2, 11, -1, -1, -1, -1, -1},
|
||||
{2, 3, 5, 0, 8, 3, 2, 11, 7, 5, 1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{9, 7, 5, 9, 2, 7, 9, 0, 2, 2, 11, 7, -1, -1, -1, -1, -1},
|
||||
{1, 6, 2, 11, 7, 5, 9, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{7, 5, 2, 7, 2, 11, 5, 9, 2, 3, 2, 8, 9, 8, 2, -1, -1},
|
||||
{1, 7, 7, 5, 9, 8, 3, 2, 11, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
// 200 ----------------------------------------------------------
|
||||
{{2, 5, 10, 2, 3, 5, 3, 7, 5, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 5, 3, 7, 5, 10, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{8, 2, 0, 8, 5, 2, 8, 7, 5, 10, 2, 5, -1, -1, -1, -1, -1},
|
||||
{1, 6, 5, 10, 2, 0, 8, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{9, 0, 1, 5, 10, 3, 5, 3, 7, 3, 10, 2, -1, -1, -1, -1, -1},
|
||||
{2, 3, 5, 9, 0, 1, 10, 2, 3, 7, 5, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{9, 8, 2, 9, 2, 1, 8, 7, 2, 10, 2, 5, 7, 5, 2, -1, -1},
|
||||
{1, 7, 9, 8, 7, 5, 10, 2, 1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{1, 3, 5, 3, 7, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 4, 3, 7, 5, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{0, 8, 7, 0, 7, 1, 1, 7, 5, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 5, 0, 8, 7, 5, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{9, 0, 3, 9, 3, 5, 5, 3, 7, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 5, 9, 0, 3, 7, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{9, 8, 7, 5, 9, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 4, 7, 5, 9, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{5, 8, 4, 5, 10, 8, 10, 11, 8, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 5, 10, 11, 8, 4, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{5, 0, 4, 5, 11, 0, 5, 10, 11, 11, 3, 0, -1, -1, -1, -1, -1},
|
||||
{1, 6, 0, 4, 5, 10, 11, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
// 210 ------------------------------------------------------
|
||||
{{0, 1, 9, 8, 4, 10, 8, 10, 11, 10, 4, 5, -1, -1, -1, -1, -1},
|
||||
{2, 3, 5, 0, 1, 9, 4, 5, 10, 11, 8, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{10, 11, 4, 10, 4, 5, 11, 3, 4, 9, 4, 1, 3, 1, 4, -1, -1},
|
||||
{1, 7, 10, 11, 3, 1, 9, 4, 5, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{2, 5, 1, 2, 8, 5, 2, 11, 8, 4, 5, 8, -1, -1, -1, -1, -1},
|
||||
{1, 6, 2, 11, 8, 4, 5, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{0, 4, 11, 0, 11, 3, 4, 5, 11, 2, 11, 1, 5, 1, 11, -1, -1},
|
||||
{1, 7, 0, 4, 5, 1, 2, 11, 3, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{0, 2, 5, 0, 5, 9, 2, 11, 5, 4, 5, 8, 11, 8, 5, -1, -1},
|
||||
{1, 7, 0, 2, 11, 8, 4, 5, 9, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{9, 4, 5, 2, 11, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{2, 3, 3, 9, 4, 5, 2, 11, 3, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{2, 5, 10, 3, 5, 2, 3, 4, 5, 3, 8, 4, -1, -1, -1, -1, -1},
|
||||
{2, 4, 4, 2, 3, 5, 10, 4, 5, 3, 8, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{5, 10, 2, 5, 2, 4, 4, 2, 0, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 5, 5, 10, 2, 0, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{3, 10, 2, 3, 5, 10, 3, 8, 5, 4, 5, 8, 0, 1, 9, -1, -1},
|
||||
{3, 4, 4, 3, 3, 5, 10, 2, 8, 4, 5, 3, 0, 1, 9, -1, -1}},
|
||||
|
||||
{{5, 10, 2, 5, 2, 4, 1, 9, 2, 9, 4, 2, -1, -1, -1, -1, -1},
|
||||
{1, 6, 10, 2, 1, 9, 4, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
/* 220 */
|
||||
{{8, 4, 5, 8, 5, 3, 3, 5, 1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 5, 8, 4, 5, 1, 3,-1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{0, 4, 5, 1, 0, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 4, 0, 4, 5, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{8, 4, 5, 8, 5, 3, 9, 0, 5, 0, 3, 5, -1, -1, -1, -1, -1},
|
||||
{2, 4, 4, 0, 3, 5, 9, 8, 4, 5, 3, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{9, 4, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 3, 9, 4, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{4, 11, 7, 4, 9, 11, 9, 10, 11, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 5, 9,10, 11, 7, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
/* 225 */
|
||||
{{0, 8, 3, 4, 9, 7, 9, 11, 7, 9, 10, 11, -1, -1, -1, -1, -1},
|
||||
{2, 3, 5, 0, 8, 3, 7, 4, 9, 10, 11, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{1, 10, 11, 1, 11, 4, 1, 4, 0, 7, 4, 11, -1, -1, -1, -1, -1},
|
||||
{1, 6, 1, 10,11, 7, 4, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{3, 1, 4, 3, 4, 8, 1, 10, 4, 7, 4, 11, 10, 11, 4, -1, -1},
|
||||
{1, 7, 3, 1,10,11, 7, 4, 8, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{4, 11, 7, 9, 11, 4, 9, 2, 11, 9, 1, 2, -1, -1, -1, -1, -1},
|
||||
{2, 4, 4, 2, 11, 9, 1, 4, 9, 11, 7, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{9, 7, 4, 9, 11, 7, 9, 1, 11, 2, 11, 1, 0, 8, 3, -1, -1},
|
||||
{3, 4, 4, 3, 1, 2, 11, 9, 7, 4, 9,11, 8, 3, 0, 8, 3}},
|
||||
|
||||
/* 230 */
|
||||
{{11, 7, 4, 11, 4, 2, 2, 4, 0, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{ 1, 5, 11, 7, 4, 0, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{11, 7, 4, 11, 4, 2, 8, 3, 4, 3, 2, 4, -1, -1, -1, -1, -1},
|
||||
{ 2, 4, 4, 11, 7, 4, 2, 3, 2, 4, 8,-1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{2, 9, 10, 2, 7, 9, 2, 3, 7, 7, 4, 9, -1, -1, -1, -1, -1},
|
||||
{1, 6, 2, 3, 7, 4, 9,10, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{9, 10, 7, 9, 7, 4, 10, 2, 7, 8, 7, 0, 2, 0, 7, -1, -1},
|
||||
{1, 7, 9,10, 2, 0, 8, 7, 4,-1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{3, 7, 10, 3, 10, 2, 7, 4, 10, 1, 10, 0, 4, 0, 10, -1, -1},
|
||||
{1, 7, 3, 7, 4, 0, 1,10, 2, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
/* 235 */
|
||||
{{1, 10, 2, 8, 7, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{2, 3, 3, 1,10, 2, 8, 7, 4, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{4, 9, 1, 4, 1, 7, 7, 1, 3, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 5, 4, 9, 1, 3, 7,-1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{4, 9, 1, 4, 1, 7, 0, 8, 1, 8, 7, 1, -1, -1, -1, -1, -1},
|
||||
{2, 4, 4, 8, 7, 1, 0, 4, 9, 1, 7, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{4, 0, 3, 7, 4, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 4, 3, 7, 4, 0,-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{4, 8, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 3, 4, 8, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
/* 240 */
|
||||
{{9, 10, 8, 10, 11, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 4, 8, 9, 10,11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{3, 0, 9, 3, 9, 11, 11, 9, 10, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 5, 3, 0, 9, 10, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{0, 1, 10, 0, 10, 8, 8, 10, 11, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 5, 0, 1, 10,11, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{3, 1, 10, 11, 3, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 4, 3, 1,10, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{1, 2, 11, 1, 11, 9, 9, 11, 8, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 5, 1, 2, 11, 8, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
/* 245 */
|
||||
{{3, 0, 9, 3, 9, 11, 1, 2, 9, 2, 11, 9, -1, -1, -1, -1, -1},
|
||||
{2, 4, 4, 2,11, 9, 1, 3, 0, 9, 11, -1, -1, -1, -1, -1,-1}},
|
||||
|
||||
{{0, 2, 11, 8, 0, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 4, 0, 2,11, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{3, 2, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 3, 3, 2, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{2, 3, 8, 2, 8, 10, 10, 8, 9, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 5, 2, 3, 8, 9, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{9, 10, 2, 0, 9, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 4, 2, 0, 9,10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
/* 250 */
|
||||
{{2, 3, 8, 2, 8, 10, 0, 1, 8, 1, 10, 8, -1, -1, -1, -1, -1},
|
||||
{2, 4, 4, 2, 3, 8, 10, 1, 10, 8, 0, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{1, 10, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 3, 1, 10, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{1, 3, 8, 9, 1, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 4, 1, 3, 8, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{0, 9, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 3, 0, 9, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{0, 3, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 3, 0, 3, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}},
|
||||
|
||||
{{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{ 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}}
|
||||
} ;
|
||||
|
||||
#if 0
|
||||
//----------------------------------------------------------------------------
|
||||
// Tabella triangoli MC
|
||||
static int TriangleTable[256][16] = {
|
||||
|
||||
{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
@@ -87,7 +890,7 @@ static int TriangleTable[256][16] = {
|
||||
{4, 9, 5, 0, 8, 1, 8, 10, 1, 8, 11, 10, -1, -1, -1, -1},
|
||||
{5, 4, 0, 5, 0, 11, 5, 11, 10, 11, 0, 3, -1, -1, -1, -1},
|
||||
{5, 4, 8, 5, 8, 10, 10, 8, 11, -1, -1, -1, -1, -1, -1, -1},
|
||||
{9, 7, 8, 5, 7, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{9, 7, 8, 5, 7, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{9, 3, 0, 9, 5, 3, 5, 7, 3, -1, -1, -1, -1, -1, -1, -1},
|
||||
{0, 7, 8, 0, 1, 7, 1, 5, 7, -1, -1, -1, -1, -1, -1, -1},
|
||||
{1, 5, 3, 3, 5, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
@@ -295,4 +1098,5 @@ static int TriangleTable[256][16] = {
|
||||
{0, 9, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{0, 3, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
|
||||
{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}
|
||||
} ;
|
||||
} ;
|
||||
#endif
|
||||
+463
-145
@@ -78,7 +78,7 @@ VolZmap::IntersLineZMapBBox( unsigned int nGrid, const Point3d& ptP, const Vecto
|
||||
{
|
||||
// Punti estremi del box dello Zmap
|
||||
Point3d ptMin = ORIG ;
|
||||
Point3d ptMax = ptMin + Vector3d( m_nVNx[nGrid] * m_dStep, m_nVNy[nGrid] * m_dStep, m_dVMaxZ[nGrid]) ;
|
||||
Point3d ptMax = ptMin + Vector3d( m_nNx[nGrid] * m_dStep, m_nNy[nGrid] * m_dStep, m_dMaxZ[nGrid]) ;
|
||||
|
||||
return ( IntersLineBox( ptP, vtV, ptMin, ptMax, dU1, dU2) && ( dU1 > 0 || dU2 > 0)) ;
|
||||
}
|
||||
@@ -89,8 +89,8 @@ VolZmap::IntersLineDexel( unsigned int nGrid, const Point3d& ptP, const Vector3d
|
||||
unsigned int nJ, double& dU1, double& dU2)
|
||||
{
|
||||
// Determino l'indice del dexel e il doppio del numero di suo intervalli
|
||||
unsigned int nDexelPos = nJ * m_nVNx[nGrid] + nI ;
|
||||
unsigned int nDexelSize = unsigned int( m_TriZValues[nGrid][nDexelPos].size()) ;
|
||||
unsigned int nDexelPos = nJ * m_nNx[nGrid] + nI ;
|
||||
unsigned int nDexelSize = unsigned int( m_Values[nGrid][nDexelPos].size()) ;
|
||||
|
||||
// Se non c'è materiale non devo fare alcunché
|
||||
if ( nDexelSize == 0)
|
||||
@@ -108,8 +108,8 @@ VolZmap::IntersLineDexel( unsigned int nGrid, const Point3d& ptP, const Vector3d
|
||||
bool bInters = false ;
|
||||
for ( unsigned int nIndex = 0 ; nIndex < nDexelSize ; nIndex += 2) {
|
||||
// estremi del box del singolo intervallo
|
||||
Point3d ptE1( dXmin, dYmin, m_TriZValues[nGrid][nDexelPos][nIndex]) ;
|
||||
Point3d ptE2( dXmax, dYmax, m_TriZValues[nGrid][nDexelPos][nIndex+1]) ;
|
||||
Point3d ptE1( dXmin, dYmin, m_Values[nGrid][nDexelPos][nIndex].dZVal) ;
|
||||
Point3d ptE2( dXmax, dYmax, m_Values[nGrid][nDexelPos][nIndex+1].dZVal) ;
|
||||
double dt1, dt2 ;
|
||||
if ( IntersLineBox( ptP, vtV, ptE1, ptE2, dt1, dt2)) {
|
||||
bInters = true ;
|
||||
@@ -156,10 +156,10 @@ VolZmap::GetDepth( const Point3d& ptPGlob, const Vector3d& vtDir, double& dInLen
|
||||
}
|
||||
|
||||
// Determinazione degli indici i j dei punti ptI e ptF
|
||||
int nIi = Clamp( int( floor( ptI.x / m_dStep)), 0, m_nVNx[0] - 1) ;
|
||||
int nIj = Clamp( int( floor( ptI.y / m_dStep)), 0, m_nVNy[0] - 1) ;
|
||||
int nFi = Clamp( int( floor( ptF.x / m_dStep)), 0, m_nVNx[0] - 1) ;
|
||||
int nFj = Clamp( int( floor( ptF.y / m_dStep)), 0, m_nVNy[0] - 1) ;
|
||||
int nIi = Clamp( int( floor( ptI.x / m_dStep)), 0, m_nNx[0] - 1) ;
|
||||
int nIj = Clamp( int( floor( ptI.y / m_dStep)), 0, m_nNy[0] - 1) ;
|
||||
int nFi = Clamp( int( floor( ptF.x / m_dStep)), 0, m_nNx[0] - 1) ;
|
||||
int nFj = Clamp( int( floor( ptF.y / m_dStep)), 0, m_nNy[0] - 1) ;
|
||||
|
||||
// Inizializzo distanze
|
||||
dInLength = INFINITO ;
|
||||
@@ -189,7 +189,7 @@ VolZmap::GetDepth( const Point3d& ptPGlob, const Vector3d& vtDir, double& dInLen
|
||||
double dMoveY = dMoveX * dDeltaY / dDeltaX ;
|
||||
double dY = ptI.y + dMoveY ;
|
||||
int OldJ = j ;
|
||||
j = Clamp( int( floor( dY / m_dStep)), 0, m_nVNy[0] - 1) ;
|
||||
j = Clamp( int( floor( dY / m_dStep)), 0, m_nNy[0] - 1) ;
|
||||
|
||||
// Analisi del dexel
|
||||
if ( j != OldJ) {
|
||||
@@ -222,7 +222,7 @@ VolZmap::GetDepth( const Point3d& ptPGlob, const Vector3d& vtDir, double& dInLen
|
||||
double dMoveX = dMoveY * dDeltaX / dDeltaY ;
|
||||
double dX = ptI.x + dMoveX ;
|
||||
int OldI = i ;
|
||||
i = Clamp( int( floor( dX / m_dStep)), 0, m_nVNx[0] - 1) ;
|
||||
i = Clamp( int( floor( dX / m_dStep)), 0, m_nNx[0] - 1) ;
|
||||
|
||||
// Analisi del dexel
|
||||
if ( i != OldI) {
|
||||
@@ -260,7 +260,7 @@ VolZmap::AvoidBox( const Frame3d& frBox, const Vector3d& vtDiag)
|
||||
b3Box.LocToLoc( frBox, m_MapFrame[0]) ;
|
||||
|
||||
// BBox dello Zmap nel suo riferimento intrinseco
|
||||
BBox3d b3Zmap( ORIG, Point3d( m_nVNx[0] * m_dStep, m_nVNy[0] * m_dStep, m_dVMaxZ[0])) ;
|
||||
BBox3d b3Zmap( ORIG, Point3d( m_nNx[0] * m_dStep, m_nNy[0] * m_dStep, m_dMaxZ[0])) ;
|
||||
|
||||
// Se non interferiscono, posso uscire
|
||||
BBox3d b3Int ;
|
||||
@@ -268,10 +268,10 @@ VolZmap::AvoidBox( const Frame3d& frBox, const Vector3d& vtDiag)
|
||||
return true ;
|
||||
|
||||
// Limiti su indici
|
||||
int nStI = Clamp( int( b3Int.GetMin().x / m_dStep), 0, m_nVNx[0] -1) ;
|
||||
int nEnI = Clamp( int( b3Int.GetMax().x / m_dStep), 0, m_nVNx[0] -1) ;
|
||||
int nStJ = Clamp( int( b3Int.GetMin().y / m_dStep), 0, m_nVNy[0] -1) ;
|
||||
int nEnJ = Clamp( int( b3Int.GetMax().y / m_dStep), 0, m_nVNy[0] -1) ;
|
||||
int nStI = Clamp( int( b3Int.GetMin().x / m_dStep), 0, m_nNx[0] -1) ;
|
||||
int nEnI = Clamp( int( b3Int.GetMax().x / m_dStep), 0, m_nNx[0] -1) ;
|
||||
int nStJ = Clamp( int( b3Int.GetMin().y / m_dStep), 0, m_nNy[0] -1) ;
|
||||
int nEnJ = Clamp( int( b3Int.GetMax().y / m_dStep), 0, m_nNy[0] -1) ;
|
||||
|
||||
// Vettore direzione dei dexel nel riferimento del Box
|
||||
Vector3d vtK = Z_AX ; vtK.LocToLoc( m_MapFrame[0], frBox) ;
|
||||
@@ -286,8 +286,8 @@ VolZmap::AvoidBox( const Frame3d& frBox, const Vector3d& vtDiag)
|
||||
|
||||
for ( int j = nStJ ; j <= nEnJ ; ++ j) {
|
||||
|
||||
int nPos = j * m_nVNx[0] + i ;
|
||||
int nSize = int( m_TriZValues[0][nPos].size()) ;
|
||||
int nPos = j * m_nNx[0] + i ;
|
||||
int nSize = int( m_Values[0][nPos].size()) ;
|
||||
if ( nSize == 0)
|
||||
continue ;
|
||||
|
||||
@@ -297,8 +297,8 @@ VolZmap::AvoidBox( const Frame3d& frBox, const Vector3d& vtDiag)
|
||||
if ( IntersLineBox( ptC, vtK, ORIG, ORIG + vtDiag, dZmin, dZmax)) {
|
||||
|
||||
for ( int nIndex = 0 ; nIndex < nSize ; nIndex += 2) {
|
||||
if ( ! ( dZmax < m_TriZValues[0][nPos][nIndex] - EPS_SMALL ||
|
||||
dZmin > m_TriZValues[0][nPos][nIndex + 1] + EPS_SMALL))
|
||||
if ( ! ( dZmax < m_Values[0][nPos][nIndex].dZVal - EPS_SMALL ||
|
||||
dZmin > m_Values[0][nPos][nIndex + 1].dZVal + EPS_SMALL))
|
||||
return false ;
|
||||
}
|
||||
}
|
||||
@@ -340,7 +340,7 @@ VolZmap::IntersLineCylinder( const Point3d& ptLineSt, const Vector3d& vtLineDir,
|
||||
int nRoot = PolynomialRoots( 2, vdCoef, vdRoots) ;
|
||||
|
||||
// Nessuna soluzione
|
||||
if ( nRoot == 0) {
|
||||
if ( nRoot == 0 || nRoot == 1) {
|
||||
|
||||
if ( abs( vtV.x) > EPS_ZERO) {
|
||||
|
||||
@@ -375,26 +375,30 @@ VolZmap::IntersLineCylinder( const Point3d& ptLineSt, const Vector3d& vtLineDir,
|
||||
|
||||
if ( ptInt1.x > ptInt2.x)
|
||||
swap( ptInt1, ptInt2) ;
|
||||
|
||||
|
||||
if ( ptInt1.x < 0 && ptInt2.x >= 0 && ptInt2.x <= dL) {
|
||||
if ( ptInt1.x < dL + EPS_SMALL) {
|
||||
|
||||
ptInt1 = ptP - ( ptP.x / vtV.x) * vtV ;
|
||||
if ( ptInt1.x > - EPS_SMALL) {
|
||||
|
||||
if ( ptInt2.x > dL)
|
||||
|
||||
ptInt2 = ptP + ( ( dL - ptP.x) / vtV.x) * vtV ;
|
||||
}
|
||||
else {
|
||||
|
||||
if ( ptInt2.x > dL) {
|
||||
|
||||
ptInt1 = ptP - ( ptP.x / vtV.x) * vtV ;
|
||||
ptInt2 = ptP + ( ( dL - ptP.x) / vtV.x) * vtV ;
|
||||
}
|
||||
else if ( ptInt2.x > 0)
|
||||
|
||||
ptInt1 = ptP - ( ptP.x / vtV.x) * vtV ;
|
||||
else
|
||||
return false ;
|
||||
}
|
||||
}
|
||||
else if ( ptInt1.x < 0 && ptInt2.x > dL) {
|
||||
|
||||
ptInt1 = ptP - ( ptP.x / vtV.x) * vtV ;
|
||||
ptInt2 = ptP + ( ( dL - ptP.x) / vtV.x) * vtV ;
|
||||
}
|
||||
else if ( ptInt1.x >= 0 && ptInt2.x <= dL) {
|
||||
|
||||
;
|
||||
}
|
||||
else if ( ptInt1.x >= 0 && ptInt1.x < dL && ptInt2.x >= dL) {
|
||||
|
||||
ptInt2 = ptP + ( ( dL - ptP.x) / vtV.x) * vtV ;
|
||||
}
|
||||
// Intersezioni esterne alla regione di interesse
|
||||
// (quella compresa fra 0 e dL)
|
||||
else
|
||||
return false ;
|
||||
|
||||
@@ -409,7 +413,7 @@ VolZmap::IntersLineCylinder( const Point3d& ptLineSt, const Vector3d& vtLineDir,
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
VolZmap::IntersZLineCylinder( const Point3d& ptLine,
|
||||
const Point3d& ptBase, const Point3d& ptTop, const Vector3d& vtDir, double dCylR,
|
||||
const Point3d& ptBase, const Point3d& ptTop, double dCylR,
|
||||
double& dInfZ, double& dSupZ)
|
||||
{
|
||||
// NB: Le coordinate sono espresse nel sistema griglia
|
||||
@@ -422,7 +426,7 @@ VolZmap::IntersZLineCylinder( const Point3d& ptLine,
|
||||
if ( AreSamePointXYApprox( ptBase, ptTop)) {
|
||||
|
||||
// Intersezione
|
||||
if ( SqDistXY( ptLine, ptBase) <= dSqRad) {
|
||||
if ( SqDistXY( ptLine, ptBase) < dSqRad) {
|
||||
dInfZ = min( ptBase.z, ptTop.z) ;
|
||||
dSupZ = max( ptBase.z, ptTop.z) ;
|
||||
return true ;
|
||||
@@ -440,7 +444,9 @@ VolZmap::IntersZLineCylinder( const Point3d& ptLine,
|
||||
Point3d ptS = ( ptBase.z < ptTop.z ? ptBase : ptTop) ;
|
||||
Point3d ptE = ( ptBase.z < ptTop.z ? ptTop : ptBase) ;
|
||||
|
||||
Vector3d vtV1 = ptE - ptS ; vtV1.z = 0 ;
|
||||
Vector3d vtAx = ptE - ptS ;
|
||||
|
||||
Vector3d vtV1( vtAx.x, vtAx.y, 0) ;
|
||||
|
||||
double dLenXY = vtV1.LenXY() ;
|
||||
double dSZ = ptS.z ;
|
||||
@@ -456,7 +462,7 @@ VolZmap::IntersZLineCylinder( const Point3d& ptLine,
|
||||
Vector3d vtV2 = vtV1 ;
|
||||
vtV2.Rotate( Z_AX, 90) ;
|
||||
|
||||
double dLen = ( ptE - ptS).Len() ;
|
||||
double dLen = vtAx.Len() ;
|
||||
|
||||
// Sono seno e coseno dell'angolo complementare
|
||||
// rispetto a quello formato dal vettore movimento
|
||||
@@ -478,9 +484,9 @@ VolZmap::IntersZLineCylinder( const Point3d& ptLine,
|
||||
// Minimi
|
||||
if ( dLocX1 < dX1_0) {
|
||||
|
||||
double dDotS = vtDir * ( ptS - ORIG) ;
|
||||
double dDotS = vtAx * ( ptS - ORIG) ;
|
||||
// Qui usiamo ptLine perché servono coordinate griglia
|
||||
dInfZ = ( dDotS - vtDir.x * ptLine.x - vtDir.y * ptLine.y) / vtDir.z ;
|
||||
dInfZ = ( dDotS - vtAx.x * ptLine.x - vtAx.y * ptLine.y) / vtAx.z ;
|
||||
}
|
||||
else {
|
||||
|
||||
@@ -490,17 +496,17 @@ VolZmap::IntersZLineCylinder( const Point3d& ptLine,
|
||||
}
|
||||
|
||||
// Massimi
|
||||
if ( dLocX1 < dLenXY - dX1_0) {
|
||||
if ( dLocX1 <= dLenXY - dX1_0) {
|
||||
|
||||
double dZ0 = dSin * dSqRoot ;
|
||||
|
||||
dSupZ = dSZ + dZ0 + ( dLocX1 - dX1_0) * dDeltaZ / dLenXY ;
|
||||
dSupZ = dSZ + dZ0 + ( dLocX1 + dX1_0) * dDeltaZ / dLenXY ;
|
||||
}
|
||||
else {
|
||||
|
||||
double dDotE = vtDir * ( ptE - ORIG) ;
|
||||
double dDotE = vtAx * ( ptE - ORIG) ;
|
||||
// Qui usiamo ptLine perché servono coordinate griglia
|
||||
dSupZ = ( dDotE - vtDir.x * ptLine.x - vtDir.y * ptLine.y) / vtDir.z ;
|
||||
dSupZ = ( dDotE - vtAx.x * ptLine.x - vtAx.y * ptLine.y) / vtAx.z ;
|
||||
}
|
||||
|
||||
return true ;
|
||||
@@ -533,6 +539,8 @@ VolZmap::IntersLineConus( const Point3d& ptLineSt, const Vector3d& vtLineDir,
|
||||
DBLVECTOR vdRoots ;
|
||||
|
||||
double dSqTan = dTan * dTan ;
|
||||
double dMinRad = dTan * dl ;
|
||||
double dMaxRad = dTan * dL ;
|
||||
|
||||
vdCoef[0] = dSqTan * ptP.x * ptP.x - ptP.y * ptP.y - ptP.z * ptP.z ;
|
||||
vdCoef[1] = 2 * ( dSqTan * ptP.x * vtV.x - ptP.y * vtV.y - ptP.z * vtV.z) ;
|
||||
@@ -550,21 +558,33 @@ VolZmap::IntersLineConus( const Point3d& ptLineSt, const Vector3d& vtLineDir,
|
||||
if ( nRoot == 1) {
|
||||
|
||||
ptInt1 = ptP + vdRoots[0] * vtV ;
|
||||
|
||||
if ( ptInt1.x >= dl && ptInt1.x < dL) {
|
||||
|
||||
ptInt2 = ptP + ( ( dL - ptP.x) / vtV.x) * vtV ;
|
||||
}
|
||||
else if ( ptInt1.x >= 0 && ptInt1.x < dl) {
|
||||
if ( ptInt1.x < dL + EPS_SMALL) {
|
||||
|
||||
ptInt1 = ptP + ( ( dl - ptP.x) / vtV.x) * vtV ;
|
||||
ptInt2 = ptP + ( ( dL - ptP.x) / vtV.x) * vtV ;
|
||||
}
|
||||
if ( ptInt1.x > dl)
|
||||
|
||||
ptInt2 = ptP + ( ( dL - ptP.x) / vtV.x) * vtV ;
|
||||
|
||||
// Riporto le coordinate nel sistema di riferimento
|
||||
// griglia
|
||||
ptInt1.ToGlob( ConusFrame) ;
|
||||
ptInt2.ToGlob( ConusFrame) ;
|
||||
else if ( ptInt1.x > - EPS_SMALL) {
|
||||
|
||||
ptInt1 = ptP + ( ( dl - ptP.x) / vtV.x) * vtV ;
|
||||
ptInt2 = ptP + ( ( dL - ptP.x) / vtV.x) * vtV ;
|
||||
|
||||
if ( ptInt2.y * ptInt2.y + ptInt2.z * ptInt2.z > dMaxRad * dMaxRad)
|
||||
|
||||
return false ;
|
||||
}
|
||||
else
|
||||
return false ;
|
||||
|
||||
ptInt1.ToGlob( ConusFrame) ;
|
||||
ptInt2.ToGlob( ConusFrame) ;
|
||||
|
||||
return true ;
|
||||
}
|
||||
else
|
||||
return false ;
|
||||
|
||||
}
|
||||
// Due soluzioni: la retta interseca due volte la
|
||||
// superficie laterale
|
||||
@@ -573,54 +593,67 @@ VolZmap::IntersLineConus( const Point3d& ptLineSt, const Vector3d& vtLineDir,
|
||||
ptInt1 = ptP + vdRoots[0] * vtV ;
|
||||
ptInt2 = ptP + vdRoots[1] * vtV ;
|
||||
|
||||
if ( ptInt1.x > ptInt2.x) {
|
||||
if ( ptInt1.x > ptInt2.x)
|
||||
swap( ptInt1, ptInt2) ;
|
||||
}
|
||||
|
||||
if ( ptInt1.x < 0 && ptInt2.x > 0 && ptInt2.x < dl) {
|
||||
|
||||
|
||||
ptInt1 = ptP + ( ( dl - ptP.x) / vtV.x) * vtV ;
|
||||
ptInt2 = ptP + ( ( dL - ptP.x) / vtV.x) * vtV ;
|
||||
}
|
||||
else if ( ptInt1.x < 0 && ptInt2.x >= dl && ptInt2.x < dL) {
|
||||
|
||||
ptInt1 = ptP + ( ( dL - ptP.x) / vtV.x) * vtV ;
|
||||
}
|
||||
else if ( ptInt1.x > 0 && ptInt1.x < dl && ptInt2.x >= dl && ptInt2.x < dL) {
|
||||
|
||||
ptInt1 = ptP + ( ( dl - ptP.x) / vtV.x) * vtV ;
|
||||
}
|
||||
else if ( ptInt1.x > 0 && ptInt1.x < dl && ptInt2.x >= dL) {
|
||||
if ( ptInt1.x < dL + EPS_SMALL) {
|
||||
|
||||
if ( ptInt1.x > dl - EPS_SMALL) {
|
||||
|
||||
ptInt1 = ptP + ( ( dl - ptP.x) / vtV.x) * vtV ;
|
||||
ptInt2 = ptP + ( ( dL - ptP.x) / vtV.x) * vtV ;
|
||||
}
|
||||
else if ( ptInt1.x >= dl && ptInt1.x < dL && ptInt2.x < dL) {
|
||||
if ( ptInt2.x > dL)
|
||||
|
||||
;
|
||||
ptInt2 = ptP + ( ( dL - ptP.x) / vtV.x) * vtV ;
|
||||
}
|
||||
else if ( ptInt1.x > - EPS_SMALL) {
|
||||
|
||||
if ( ptInt2.x > dL) {
|
||||
|
||||
ptInt1 = ptP + ( ( dl - ptP.x) / vtV.x) * vtV ;
|
||||
ptInt2 = ptP + ( ( dL - ptP.x) / vtV.x) * vtV ;
|
||||
}
|
||||
else if ( ptInt2.x > dl - EPS_SMALL)
|
||||
|
||||
ptInt1 = ptP + ( ( dl - ptP.x) / vtV.x) * vtV ;
|
||||
|
||||
else
|
||||
return false ;
|
||||
}
|
||||
else {
|
||||
|
||||
if ( ptInt2.x < 0)
|
||||
|
||||
return false ;
|
||||
|
||||
else if ( ptInt2.x < dl) {
|
||||
|
||||
ptInt1 = ptP + ( ( dl - ptP.x) / vtV.x) * vtV ;
|
||||
ptInt2 = ptP + ( ( dL - ptP.x) / vtV.x) * vtV ;
|
||||
}
|
||||
else if ( ptInt2.x < dL)
|
||||
|
||||
ptInt1 = ptP + ( ( dL - ptP.x) / vtV.x) * vtV ;
|
||||
|
||||
else
|
||||
return false ;
|
||||
}
|
||||
|
||||
ptInt1.ToGlob( ConusFrame) ;
|
||||
ptInt2.ToGlob( ConusFrame) ;
|
||||
|
||||
return true ;
|
||||
}
|
||||
else if ( ptInt1.x >= dl && ptInt1.x < dL && ptInt2.x >= dL) {
|
||||
|
||||
ptInt2 = ptP + ( ( dL - ptP.x) / vtV.x) * vtV ;
|
||||
}
|
||||
// Intersezioni esterne alla regione di interesse
|
||||
// (quella compresa fra dl e dL)
|
||||
else
|
||||
return false ;
|
||||
|
||||
// Riporto le coordinate nel sistema di riferimento
|
||||
// griglia
|
||||
ptInt1.ToGlob( ConusFrame) ;
|
||||
ptInt2.ToGlob( ConusFrame) ;
|
||||
}
|
||||
|
||||
return true ;
|
||||
return false ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
VolZmap::IntersLineEllipticalCylinder( const Frame3d & CircFrame, const Vector3d & vtLineDir, const Point3d & ptLineSt,
|
||||
std::vector <Point3d> & ptInters, double dObCoef, double dSqRad, double dL)
|
||||
VolZmap::IntersLineEllipticalCylinder( const Vector3d& vtLineDir, const Point3d& ptLineSt,
|
||||
const Frame3d& CircFrame, double dSqRad, double dLongMvLen, double dOrtMvLen,
|
||||
Point3d& ptInt1, Point3d& ptInt2)
|
||||
{
|
||||
// NB: L'origine del sistema di riferimento deve essere
|
||||
// nel centro della circonferenza di base, la cui tralsazione obliqua
|
||||
@@ -628,21 +661,20 @@ VolZmap::IntersLineEllipticalCylinder( const Frame3d & CircFrame, const Vector3d
|
||||
// di simmetria di tale circonferenza.
|
||||
// La funzione restituisce true in caso di intersezione,
|
||||
// false altrimenti.
|
||||
// NB: Il Parametro dObCoef è il coeffociente angolare della retta movimento
|
||||
// rispetto all'asse x, e dSqRad è il quadrato del raggio della circonferenza.
|
||||
// NB: dSqRad è il quadrato del raggio della circonferenza la cui
|
||||
// traslazione obliqua genera il cilindro ellittico, dLongMvLen e
|
||||
// dOrtMvLen sono rispettivamente le lunghezze delle proiezioni del
|
||||
// movimento su x e y del sistema di riferimento CircFrame.
|
||||
|
||||
double dObCoef = dOrtMvLen / dLongMvLen ;
|
||||
double dSqCoef = dObCoef * dObCoef ;
|
||||
|
||||
Point3d ptP = ptLineSt ;
|
||||
Vector3d vtV = vtLineDir ;
|
||||
|
||||
// Sistema di riferimanto grigia
|
||||
Frame3d GridFrame ;
|
||||
GridFrame.Set( ORIG, X_AX, Y_AX, Z_AX) ;
|
||||
|
||||
// Trasformazione delle coordinate
|
||||
ptP.LocToLoc( GridFrame, CircFrame) ;
|
||||
vtV.LocToLoc( GridFrame, CircFrame) ;
|
||||
ptP.ToLoc( CircFrame) ;
|
||||
vtV.ToLoc( CircFrame) ;
|
||||
|
||||
std::vector <double> vdCoef(3) ;
|
||||
std::vector <double> vdRoots ;
|
||||
@@ -653,26 +685,20 @@ VolZmap::IntersLineEllipticalCylinder( const Frame3d & CircFrame, const Vector3d
|
||||
|
||||
int nRoot = PolynomialRoots( 2, vdCoef, vdRoots) ;
|
||||
|
||||
Point3d ptR1, ptR2 ;
|
||||
|
||||
// Nessuna soluzione
|
||||
if ( nRoot == 0) {
|
||||
if ( nRoot == 0 || nRoot == 1) {
|
||||
|
||||
if ( abs( vtV.x) > EPS_ZERO) {
|
||||
|
||||
ptR1 = ptP - ( ptP.x / vtV.x) * vtV ;
|
||||
ptR2 = ptP + ( ( dL - ptP.x) / vtV.x) * vtV ;
|
||||
ptInt1 = ptP - ( ptP.x / vtV.x) * vtV ;
|
||||
ptInt2 = ptP + ( ( dLongMvLen - ptP.x) / vtV.x) * vtV ;
|
||||
|
||||
if ( ptR1.y * ptR1.y + ptR1.z * ptR1.z < dSqRad &&
|
||||
ptR1.y * ptR1.y + ptR1.z * ptR1.z < dSqRad) {
|
||||
if ( ptInt1.y * ptInt1.y + ptInt1.z * ptInt1.z < dSqRad &&
|
||||
( ptInt2.y - dOrtMvLen) * ( ptInt2.y - dOrtMvLen) + ptInt2.z * ptInt2.z < dSqRad) {
|
||||
|
||||
ptR1.LocToLoc( CircFrame, GridFrame) ;
|
||||
ptR2.LocToLoc( CircFrame, GridFrame) ;
|
||||
|
||||
ptInters.resize(2) ;
|
||||
|
||||
ptInters[0] = ptR1 ;
|
||||
ptInters[0] = ptR2 ;
|
||||
ptInt1.ToGlob( CircFrame) ;
|
||||
ptInt2.ToGlob( CircFrame) ;
|
||||
|
||||
return true ;
|
||||
}
|
||||
@@ -689,48 +715,340 @@ VolZmap::IntersLineEllipticalCylinder( const Frame3d & CircFrame, const Vector3d
|
||||
// coincidenti) oppure nessuna o infinite se la la retta
|
||||
// appartiene alla superficie
|
||||
|
||||
ptInters.resize(2) ;
|
||||
|
||||
if ( nRoot == 2) {
|
||||
|
||||
ptR1 = ptP + vdRoots[0] * vtV ;
|
||||
ptR2 = ptP + vdRoots[1] * vtV ;
|
||||
ptInt1 = ptP + vdRoots[0] * vtV ;
|
||||
ptInt2 = ptP + vdRoots[1] * vtV ;
|
||||
|
||||
|
||||
if ( ptR1.x > ptR2.x) {
|
||||
if ( ptInt1.x > ptInt2.x)
|
||||
|
||||
Point3d ptTemp = ptR1 ;
|
||||
ptR1 = ptR2 ;
|
||||
ptR2 = ptTemp ;
|
||||
}
|
||||
swap( ptInt1, ptInt2) ;
|
||||
|
||||
if ( ptR1.x >= 0 && ptR1.x < dL &&
|
||||
ptR2.x > dL) {
|
||||
|
||||
ptR1 = ptP + ( ( dL - ptP.x) / vtV.x) * vtV ;
|
||||
}
|
||||
else if ( ptR1.x >= 0 && ptR2.x <= dL) {
|
||||
if ( ptInt1.x < dLongMvLen + EPS_SMALL) {
|
||||
|
||||
if ( ptInt1.x > - EPS_SMALL) {
|
||||
|
||||
;
|
||||
}
|
||||
else if ( ptR1.x < 0 && ptR2.x > dL) {
|
||||
if ( ptInt2.x > dLongMvLen)
|
||||
|
||||
ptR1 = ptP - ( ptP.x / vtV.x) * vtV ;
|
||||
ptR2 = ptP + ( ( dL - ptP.x) / vtV.x) * vtV ;
|
||||
}
|
||||
else if ( ptR1.x < 0 && ptR2.x >= 0 && ptR2.x <= dL) {
|
||||
ptInt2 = ptP + ( ( dLongMvLen - ptP.x) / vtV.x) * vtV ;
|
||||
}
|
||||
else {
|
||||
|
||||
ptR1 = ptP - ( ptP.x / vtV.x) * vtV ;
|
||||
if ( ptInt2.x > dLongMvLen) {
|
||||
|
||||
ptInt1 = ptP - ( ptP.x / vtV.x) * vtV ;
|
||||
ptInt2 = ptP + ( ( dLongMvLen - ptP.x) / vtV.x) * vtV ;
|
||||
|
||||
if ( ptInt1.y * ptInt1.y + ptInt1.z * ptInt1.z > dSqRad &&
|
||||
ptInt2.y * ptInt2.y + ptInt2.z * ptInt2.z > dSqRad)
|
||||
|
||||
return false ;
|
||||
}
|
||||
else if ( ptInt2.x > 0)
|
||||
|
||||
ptInt1 = ptP - ( ptP.x / vtV.x) * vtV ;
|
||||
else
|
||||
return false ;
|
||||
}
|
||||
}
|
||||
else
|
||||
return false ;
|
||||
|
||||
// Riporto le coordinate nel sistema di riferimento
|
||||
// griglia
|
||||
ptR1.LocToLoc( CircFrame, GridFrame) ;
|
||||
ptR2.LocToLoc( CircFrame, GridFrame) ;
|
||||
|
||||
ptInters[0] = ptR1 ;
|
||||
ptInters[1] = ptR2 ;
|
||||
ptInt1.ToGlob( CircFrame) ;
|
||||
ptInt2.ToGlob( CircFrame) ;
|
||||
}
|
||||
|
||||
return true ;
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
VolZmap::IntersLineMyPolyhedron( const Point3d& ptLineSt, const Vector3d& vtLineDir,
|
||||
const Frame3d& PolyFrame, double dLenX, double dLenY, double dLenZ, double dDeltaX,
|
||||
Point3d& ptInt1, Point3d& ptInt2)
|
||||
{
|
||||
|
||||
double SqIndet = EPS_SMALL * EPS_SMALL ;
|
||||
|
||||
Point3d ptP = ptLineSt ;
|
||||
Vector3d vtV = vtLineDir ;
|
||||
|
||||
// Trasformazione delle coordinate
|
||||
ptP.ToLoc( PolyFrame) ;
|
||||
vtV.ToLoc( PolyFrame) ;
|
||||
|
||||
// Facce 1 e 2 parallele a XY
|
||||
// Facce 3 e 4 parallele a XZ
|
||||
// Facce 5 e 6 oblique
|
||||
Point3d ptFacet135( 0, 0, dLenZ /2) ;
|
||||
Point3d ptFacet246( dLenX + dDeltaX, dLenY, - dLenZ / 2) ;
|
||||
|
||||
// Servono per descrivere i piani obliqui
|
||||
Vector3d vtFacet5 = ptFacet135 - ptP ;
|
||||
Vector3d vtFacet6 = ptFacet246 - ptP ;
|
||||
|
||||
Vector3d vtOb( dLenY, - dDeltaX, 0) ;
|
||||
|
||||
Point3d ptI1 = ptP + ( ( ptFacet135.z - ptP.z) / vtV.z) * vtV ;
|
||||
Point3d ptI2 = ptP + ( ( ptFacet246.z - ptP.z) / vtV.z) * vtV ;
|
||||
Point3d ptI3 = ptP + ( ( ptFacet135.y - ptP.y) / vtV.y) * vtV ;
|
||||
Point3d ptI4 = ptP + ( ( ptFacet246.y - ptP.y) / vtV.y) * vtV ;
|
||||
Point3d ptI5 = ptP + ( ( vtFacet5 * vtOb) / ( vtV * vtOb)) * vtV ;
|
||||
Point3d ptI6 = ptP + ( ( vtFacet6 * vtOb) / ( vtV * vtOb)) * vtV ;
|
||||
|
||||
int nIntNum = 0 ;
|
||||
|
||||
// Intersezione con la prima faccia
|
||||
if ( ptI1.y >= 0 && ptI1.y <= dLenY &&
|
||||
ptI1.x * dLenY >= dDeltaX * ptI1.y && ( ptI1.x - dLenX) * dLenY <= dDeltaX * ptI1.y) {
|
||||
|
||||
ptInt1 = ptI1 ;
|
||||
++ nIntNum ;
|
||||
}
|
||||
|
||||
// Intersezione con la seconda faccia
|
||||
if ( ptI2.y >= 0 && ptI2.y <= dLenY &&
|
||||
ptI2.x * dLenY >= dDeltaX * ptI2.y && ( ptI2.x - dLenX) * dLenY <= dDeltaX * ptI2.y) {
|
||||
|
||||
if ( nIntNum == 0) {
|
||||
|
||||
ptInt1 = ptI2 ;
|
||||
++ nIntNum ;
|
||||
}
|
||||
else if ( ( ptInt1 - ptI2).SqLen() > SqIndet) {
|
||||
|
||||
ptInt2 = ptI2 ;
|
||||
++ nIntNum ;
|
||||
}
|
||||
}
|
||||
|
||||
// Intersezione con la terza faccia
|
||||
if ( nIntNum < 2 &&
|
||||
ptI3.x >= 0 && ptI3.x <= dLenX &&
|
||||
ptI3.z >= - ptFacet135.z && ptI3.z <= ptFacet135.z) {
|
||||
|
||||
if ( nIntNum == 0) {
|
||||
|
||||
ptInt1 = ptI3 ;
|
||||
++ nIntNum ;
|
||||
}
|
||||
else if ( ( ptInt1 - ptI3).SqLen() > SqIndet) {
|
||||
|
||||
ptInt2 = ptI3 ;
|
||||
++ nIntNum ;
|
||||
}
|
||||
}
|
||||
|
||||
// Intersezione con la quarta faccia
|
||||
if ( nIntNum < 2 &&
|
||||
ptI4.x >= dDeltaX && ptI4.x <= dLenX + dDeltaX &&
|
||||
ptI4.z >= - ptFacet135.z && ptI4.z <= ptFacet135.z) {
|
||||
|
||||
if ( nIntNum == 0) {
|
||||
|
||||
ptInt1 = ptI4 ;
|
||||
++ nIntNum ;
|
||||
}
|
||||
else if ( ( ptInt1 - ptI4).SqLen() > SqIndet) {
|
||||
|
||||
ptInt2 = ptI4 ;
|
||||
++ nIntNum ;
|
||||
}
|
||||
}
|
||||
|
||||
// Intersezione con la quinta faccia
|
||||
if ( nIntNum < 2 &&
|
||||
ptI5.y >= 0 && ptI5.y <= dLenY &&
|
||||
ptI5.z >= - ptFacet135.z && ptI5.z <= ptFacet135.z) {
|
||||
|
||||
if ( nIntNum == 0) {
|
||||
|
||||
ptInt1 = ptI5 ;
|
||||
++ nIntNum ;
|
||||
}
|
||||
else if ( ( ptInt1 - ptI5).SqLen() > SqIndet) {
|
||||
|
||||
ptInt2 = ptI5 ;
|
||||
++ nIntNum ;
|
||||
}
|
||||
}
|
||||
|
||||
// Intersezione con la sesta faccia
|
||||
if ( nIntNum < 2 &&
|
||||
ptI6.y >= 0 && ptI6.y <= dLenY &&
|
||||
ptI6.z >= - ptFacet135.z && ptI6.z <= ptFacet135.z) {
|
||||
|
||||
if ( nIntNum == 0) {
|
||||
|
||||
ptInt1 = ptI6;
|
||||
++ nIntNum ;
|
||||
}
|
||||
else if ( ( ptInt1 - ptI6).SqLen() > SqIndet) {
|
||||
|
||||
ptInt2 = ptI6;
|
||||
++ nIntNum ;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if ( nIntNum == 2) {
|
||||
|
||||
ptInt1.ToGlob( PolyFrame) ;
|
||||
ptInt2.ToGlob( PolyFrame) ;
|
||||
|
||||
return true ;
|
||||
}
|
||||
else
|
||||
return false ;
|
||||
}
|
||||
/*
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
VolZmap::IntersLineMyPolyhedron( const Point3d& ptLineSt, const Vector3d& vtLineDir,
|
||||
const Frame3d& PolyFrame, double dLenX, double dLenY, double dLenZ, double dDeltaX,
|
||||
Point3d& ptInt1, Point3d& ptInt2)
|
||||
{
|
||||
|
||||
double SqIndet = EPS_SMALL * EPS_SMALL ;
|
||||
|
||||
Point3d ptP = ptLineSt ;
|
||||
Vector3d vtV = vtLineDir ;
|
||||
|
||||
// Trasformazione delle coordinate
|
||||
ptP.ToLoc( PolyFrame) ;
|
||||
vtV.ToLoc( PolyFrame) ;
|
||||
|
||||
// Facce 1 e 2 parallele a XY
|
||||
// Facce 3 e 4 parallele a XZ
|
||||
// Facce 5 e 6 oblique
|
||||
Point3d ptFacet135( 0, 0, dLenZ /2) ;
|
||||
Point3d ptFacet246( dLenX + dDeltaX, dLenY, - dLenZ / 2) ;
|
||||
|
||||
// Servono per descrivere i piani obliqui
|
||||
Vector3d vtFacet5 = ptFacet135 - ptP ;
|
||||
Vector3d vtFacet6 = ptFacet246 - ptP ;
|
||||
|
||||
Vector3d vtOb( dLenY, - dDeltaX, 0) ;
|
||||
|
||||
Point3d ptI1 = ptP + ( ( ptFacet135.z - ptP.z) / vtV.z) * vtV ;
|
||||
Point3d ptI2 = ptP + ( ( ptFacet246.z - ptP.z) / vtV.z) * vtV ;
|
||||
Point3d ptI3 = ptP + ( ( ptFacet135.y - ptP.y) / vtV.y) * vtV ;
|
||||
Point3d ptI4 = ptP + ( ( ptFacet246.y - ptP.y) / vtV.y) * vtV ;
|
||||
Point3d ptI5 = ptP + ( ( vtFacet5 * vtOb) / ( vtV * vtOb)) * vtV ;
|
||||
Point3d ptI6 = ptP + ( ( vtFacet6 * vtOb) / ( vtV * vtOb)) * vtV ;
|
||||
|
||||
int nIntNum = 0 ;
|
||||
|
||||
// Intersezione con la prima faccia
|
||||
if ( ptI1.y > - EPS_SMALL && ptI1.y < dLenY + EPS_SMALL &&
|
||||
ptI1.x * dLenY > dDeltaX * ptI1.y - EPS_SMALL &&
|
||||
( ptI1.x - dLenX) * dLenY < dDeltaX * ptI1.y + EPS_SMALL) {
|
||||
|
||||
ptInt1 = ptI1 ;
|
||||
++ nIntNum ;
|
||||
}
|
||||
|
||||
// Intersezione con la seconda faccia
|
||||
if ( ptI2.y > - EPS_SMALL && ptI2.y <dLenY + EPS_SMALL &&
|
||||
ptI2.x * dLenY > dDeltaX * ptI2.y - EPS_SMALL &&
|
||||
( ptI2.x - dLenX) * dLenY < dDeltaX * ptI2.y + EPS_SMALL) {
|
||||
|
||||
if ( nIntNum == 0) {
|
||||
|
||||
ptInt1 = ptI2 ;
|
||||
++ nIntNum ;
|
||||
}
|
||||
else if ( ( ptInt1 - ptI2).SqLen() > SqIndet) {
|
||||
|
||||
ptInt2 = ptI2 ;
|
||||
++ nIntNum ;
|
||||
}
|
||||
}
|
||||
|
||||
// Intersezione con la terza faccia
|
||||
if ( nIntNum < 2 &&
|
||||
ptI3.x > - EPS_SMALL && ptI3.x < dLenX + EPS_SMALL &&
|
||||
ptI3.z > - ptFacet135.z - EPS_SMALL &&
|
||||
ptI3.z < ptFacet135.z + EPS_SMALL) {
|
||||
|
||||
if ( nIntNum == 0) {
|
||||
|
||||
ptInt1 = ptI3 ;
|
||||
++ nIntNum ;
|
||||
}
|
||||
else if ( ( ptInt1 - ptI3).SqLen() > SqIndet) {
|
||||
|
||||
ptInt2 = ptI3 ;
|
||||
++ nIntNum ;
|
||||
}
|
||||
}
|
||||
|
||||
// Intersezione con la quarta faccia
|
||||
if ( nIntNum < 2 &&
|
||||
ptI4.x > dDeltaX - EPS_SMALL && ptI4.x < dLenX + dDeltaX + EPS_SMALL &&
|
||||
ptI4.z > - ptFacet135.z - EPS_SMALL &&
|
||||
ptI4.z < ptFacet135.z + EPS_SMALL) {
|
||||
|
||||
if ( nIntNum == 0) {
|
||||
|
||||
ptInt1 = ptI4 ;
|
||||
++ nIntNum ;
|
||||
}
|
||||
else if ( ( ptInt1 - ptI4).SqLen() > SqIndet) {
|
||||
|
||||
ptInt2 = ptI4 ;
|
||||
++ nIntNum ;
|
||||
}
|
||||
}
|
||||
|
||||
// Intersezione con la quinta faccia
|
||||
if ( nIntNum < 2 &&
|
||||
ptI5.y > - EPS_SMALL && ptI5.y < dLenY + EPS_SMALL &&
|
||||
ptI5.z > - ptFacet135.z - EPS_SMALL &&
|
||||
ptI5.z < ptFacet135.z + EPS_SMALL) {
|
||||
|
||||
if ( nIntNum == 0) {
|
||||
|
||||
ptInt1 = ptI5 ;
|
||||
++ nIntNum ;
|
||||
}
|
||||
else if ( ( ptInt1 - ptI5).SqLen() > SqIndet) {
|
||||
|
||||
ptInt2 = ptI5 ;
|
||||
++ nIntNum ;
|
||||
}
|
||||
}
|
||||
|
||||
// Intersezione con la sesta faccia
|
||||
if ( nIntNum < 2 &&
|
||||
ptI6.y > - EPS_SMALL && ptI6.y < dLenY + EPS_SMALL &&
|
||||
ptI6.z > - ptFacet135.z - EPS_SMALL &&
|
||||
ptI6.z < ptFacet135.z + EPS_SMALL) {
|
||||
|
||||
if ( nIntNum == 0) {
|
||||
|
||||
ptInt1 = ptI6;
|
||||
++ nIntNum ;
|
||||
}
|
||||
else if ( ( ptInt1 - ptI6).SqLen() > SqIndet) {
|
||||
|
||||
ptInt2 = ptI6;
|
||||
++ nIntNum ;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if ( nIntNum == 2) {
|
||||
|
||||
ptInt1.ToGlob( PolyFrame) ;
|
||||
ptInt2.ToGlob( PolyFrame) ;
|
||||
|
||||
return true ;
|
||||
}
|
||||
else
|
||||
return false ;
|
||||
} */
|
||||
+120
-34
@@ -31,11 +31,11 @@ VolZmap::Create( const Point3d& ptO, double dLengthX, double dLengthY, double dL
|
||||
{
|
||||
|
||||
// Controlli l'ammissibilità delle dimensioni lineari del grezzo e del passo
|
||||
if ( dPrec < EPS_SMALL || dLengthX < EPS_SMALL || dLengthY < EPS_SMALL || dLengthZ < EPS_SMALL)
|
||||
if ( dPrec < EPS_SMALL || dLengthX < EPS_SMALL || dLengthY < EPS_SMALL || dLengthZ < EPS_SMALL)
|
||||
return false ;
|
||||
|
||||
// Aggiorno il passo
|
||||
m_dStep = dPrec ;
|
||||
// Il passo di discretizzazione non può essere inferiore a 100 * EPS_SMALL
|
||||
m_dStep = max( dPrec, 100 * EPS_SMALL) ;
|
||||
|
||||
// Aggiorno la dimensione della mappa 1 o 3
|
||||
m_nMapNum = ( bFlag ? 3 : 1) ;
|
||||
@@ -48,30 +48,48 @@ VolZmap::Create( const Point3d& ptO, double dLengthX, double dLengthY, double dL
|
||||
m_MapFrame[0].Set( ptO, X_AX, Y_AX, Z_AX) ;
|
||||
|
||||
// Definisco i vettori dei limiti su indici
|
||||
m_nVNx[0] = static_cast <unsigned int> ( ceil( dLengthX / m_dStep)) ;
|
||||
m_nVNy[0] = static_cast <unsigned int> ( ceil( dLengthY / m_dStep)) ;
|
||||
m_nNx[0] = static_cast <unsigned int> ( floor( ( dLengthX + 0.5 * m_dStep + EPS_SMALL) / m_dStep)) ;
|
||||
m_nNy[0] = static_cast <unsigned int> ( floor( ( dLengthY + 0.5 * m_dStep + EPS_SMALL) / m_dStep)) ;
|
||||
|
||||
if ( m_nMapNum > 1) {
|
||||
// Definisco il numero di blocchi lungo x e y
|
||||
unsigned int nMinBlockNum = 1 ;
|
||||
|
||||
m_nFracLin[0] = max( nMinBlockNum,
|
||||
m_nNx[0] / m_nDexNumPBlock +
|
||||
( m_nNx[0] % m_nDexNumPBlock >= m_nDexNumPBlock / 2 ? 1 : 0)) ;
|
||||
m_nFracLin[1] = max( nMinBlockNum,
|
||||
m_nNy[0] / m_nDexNumPBlock +
|
||||
( m_nNy[0] % m_nDexNumPBlock >= m_nDexNumPBlock / 2 ? 1 : 0)) ;
|
||||
|
||||
if ( bFlag) {
|
||||
|
||||
m_MapFrame[1].Set( ptO, Y_AX, Z_AX, X_AX) ;
|
||||
m_MapFrame[2].Set( ptO, Z_AX, X_AX, Y_AX) ;
|
||||
|
||||
m_nVNx[1] = static_cast <unsigned int> ( ceil( dLengthY / m_dStep)) ;
|
||||
m_nVNy[1] = static_cast <unsigned int> ( ceil( dLengthZ / m_dStep)) ;
|
||||
m_nNx[1] = static_cast <unsigned int> ( floor( ( dLengthY + 0.5 * m_dStep + EPS_SMALL) / m_dStep)) ;
|
||||
m_nNy[1] = static_cast <unsigned int> ( floor( ( dLengthZ + 0.5 * m_dStep + EPS_SMALL) / m_dStep)) ;
|
||||
|
||||
m_nVNx[2] = static_cast <unsigned int> ( ceil( dLengthZ / m_dStep)) ;
|
||||
m_nVNy[2] = static_cast <unsigned int> ( ceil( dLengthX / m_dStep)) ;
|
||||
m_nNx[2] = static_cast <unsigned int> ( floor( ( dLengthZ + 0.5 * m_dStep + EPS_SMALL) / m_dStep)) ;
|
||||
m_nNy[2] = static_cast <unsigned int> ( floor( ( dLengthX + 0.5 * m_dStep + EPS_SMALL) / m_dStep)) ;
|
||||
|
||||
// Definisco il numero di blocchi lungo z
|
||||
m_nFracLin[2] = max( nMinBlockNum,
|
||||
m_nNy[1] / m_nDexNumPBlock +
|
||||
( m_nNy[1] % m_nDexNumPBlock >= m_nDexNumPBlock / 2 ? 1 : 0)) ;
|
||||
}
|
||||
else {
|
||||
|
||||
m_MapFrame[1].Set( ptO, Y_AX, Z_AX, X_AX) ;
|
||||
m_MapFrame[2].Set( ptO, Z_AX, X_AX, Y_AX) ;
|
||||
|
||||
m_nVNx[1] = 0 ;
|
||||
m_nVNy[1] = 0 ;
|
||||
m_nNx[1] = 0 ;
|
||||
m_nNy[1] = 0 ;
|
||||
|
||||
m_nVNx[2] = 0 ;
|
||||
m_nVNy[2] = 0 ;
|
||||
m_nNx[2] = 0 ;
|
||||
m_nNy[2] = 0 ;
|
||||
|
||||
// Definisco il numero di blocchi lungo z
|
||||
m_nFracLin[2] = 1 ;
|
||||
}
|
||||
|
||||
// Definizione della mappa
|
||||
@@ -80,41 +98,61 @@ VolZmap::Create( const Point3d& ptO, double dLengthX, double dLengthY, double dL
|
||||
// Calcolo del numero di celle per ogni mappa
|
||||
for ( unsigned int i = 0 ; i < m_nMapNum ; ++ i)
|
||||
|
||||
m_nVDim[i] = m_nVNx[i] * m_nVNy[i] ;
|
||||
m_nDim[i] = m_nNx[i] * m_nNy[i] ;
|
||||
|
||||
// Creazione delle celle per ogni mappa
|
||||
for ( unsigned int i = 0 ; i < m_nMapNum ; ++ i)
|
||||
|
||||
m_TriZValues[i].resize( m_nVDim[i]) ;
|
||||
m_Values[i].resize( m_nDim[i]) ;
|
||||
|
||||
// Riempimento delle celle
|
||||
for ( unsigned int i = 0 ; i < m_nMapNum ; ++ i)
|
||||
for ( unsigned int j = 0 ; j < m_nVDim[i] ; ++ j) {
|
||||
for ( unsigned int j = 0 ; j < m_nDim[i] ; ++ j) {
|
||||
|
||||
m_TriZValues[i][j].resize(2) ;
|
||||
m_Values[i][j].resize(2) ;
|
||||
|
||||
m_TriZValues[i][j][0] = 0 ;
|
||||
m_Values[i][j][0].dZVal = 0 ;
|
||||
|
||||
if ( i == 0)
|
||||
m_TriZValues[i][j][1] = dLengthZ ;
|
||||
else if ( i == 1)
|
||||
m_TriZValues[i][j][1] = dLengthX ;
|
||||
else if ( i == 2)
|
||||
m_TriZValues[i][j][1] = dLengthY ;
|
||||
switch ( i) {
|
||||
case 0 :
|
||||
m_Values[i][j][1].dZVal = dLengthZ ;
|
||||
m_Values[i][j][0].vtN = Vector3d( 0, 0, - 1) ;
|
||||
m_Values[i][j][1].vtN = Vector3d( 0, 0, 1) ;
|
||||
break ;
|
||||
case 1 :
|
||||
m_Values[i][j][1].dZVal = dLengthX ;
|
||||
m_Values[i][j][0].vtN = Vector3d( - 1, 0, 0) ;
|
||||
m_Values[i][j][1].vtN = Vector3d( 1, 0, 0) ;
|
||||
break ;
|
||||
case 2 :
|
||||
m_Values[i][j][1].dZVal = dLengthY ;
|
||||
m_Values[i][j][0].vtN = Vector3d( 0, - 1, 0) ;
|
||||
m_Values[i][j][1].vtN = Vector3d( 0, 1, 0) ;
|
||||
break ;
|
||||
}
|
||||
}
|
||||
|
||||
// Definizione delle limitazioni iniziali in Z per ogni mappa
|
||||
for ( unsigned int i = 0 ; i < m_nMapNum ; ++ i) {
|
||||
|
||||
m_dVMinZ[i] = 0 ;
|
||||
m_dMinZ[i] = 0 ;
|
||||
|
||||
if ( i == 0)
|
||||
m_dVMaxZ[i] = dLengthZ ;
|
||||
m_dMaxZ[i] = dLengthZ ;
|
||||
else if ( i == 1)
|
||||
m_dVMaxZ[i] = dLengthX ;
|
||||
m_dMaxZ[i] = dLengthX ;
|
||||
else if ( i == 2)
|
||||
m_dVMaxZ[i] = dLengthY ;
|
||||
m_dMaxZ[i] = dLengthY ;
|
||||
}
|
||||
|
||||
// Ridimensiono e setto il vettore dei blocchi a falso
|
||||
int BlockVecSize = m_nFracLin[0] * m_nFracLin[1] * m_nFracLin[2] ;
|
||||
|
||||
m_BlockToUpdate.resize( BlockVecSize) ;
|
||||
|
||||
for ( int nCount = 0 ; nCount < BlockVecSize ; ++ nCount)
|
||||
|
||||
m_BlockToUpdate[nCount] = true ;
|
||||
|
||||
// Aggiornamento dello stato
|
||||
m_nStatus = OK ;
|
||||
@@ -122,10 +160,11 @@ VolZmap::Create( const Point3d& ptO, double dLengthX, double dLengthY, double dL
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
bool
|
||||
VolZmap::CreateFromFlatRegion( const ISurfFlatRegion& Surf, double dDimZ, double dPrec, bool bFlag)
|
||||
{
|
||||
|
||||
#if 0
|
||||
Point3d ptMapOrig, ptMapEnd ;
|
||||
|
||||
// Aggiorno la dimensione della mappa 1 o 3
|
||||
@@ -159,6 +198,16 @@ VolZmap::CreateFromFlatRegion( const ISurfFlatRegion& Surf, double dDimZ, double
|
||||
// Ridimensiono il vettore di dexel e creo lo Zmap
|
||||
m_TriZValues[0].resize( m_nVDim[0]) ;
|
||||
|
||||
// Definisco il numero di blocchi lungo x e y
|
||||
unsigned int nMinBlockNum = 1 ;
|
||||
|
||||
m_nFracLin[0] = max( nMinBlockNum,
|
||||
m_nVNx[0] / m_nDexNumPBlock +
|
||||
( m_nVNx[0] % m_nDexNumPBlock >= m_nDexNumPBlock / 2 ? 1 : 0)) ;
|
||||
m_nFracLin[1] = max( nMinBlockNum,
|
||||
m_nVNy[0] / m_nDexNumPBlock +
|
||||
( m_nVNy[0] % m_nDexNumPBlock >= m_nDexNumPBlock / 2 ? 1 : 0)) ;
|
||||
|
||||
// Se Tridexel ridimensiono anche gli altri vettori
|
||||
if ( bFlag) {
|
||||
|
||||
@@ -177,6 +226,11 @@ VolZmap::CreateFromFlatRegion( const ISurfFlatRegion& Surf, double dDimZ, double
|
||||
|
||||
m_TriZValues[1].resize( m_nVDim[1]) ;
|
||||
m_TriZValues[2].resize( m_nVDim[2]) ;
|
||||
|
||||
// Definisco il numero di blocchi lungo z
|
||||
m_nFracLin[2] = max( nMinBlockNum,
|
||||
m_nVNy[1] / m_nDexNumPBlock +
|
||||
( m_nVNy[1] % m_nDexNumPBlock >= m_nDexNumPBlock / 2 ? 1 : 0)) ;
|
||||
}
|
||||
else {
|
||||
|
||||
@@ -324,10 +378,19 @@ VolZmap::CreateFromFlatRegion( const ISurfFlatRegion& Surf, double dDimZ, double
|
||||
m_dVMinZ[2] = 0 ;
|
||||
m_dVMaxZ[2] = 0 ;
|
||||
}
|
||||
|
||||
// Ridimensiono e setto il vettore dei blocchi a falso
|
||||
int BlockVecSize = m_nFracLin[0] * m_nFracLin[1] * m_nFracLin[2] ;
|
||||
|
||||
m_BlockToUpdate.resize( BlockVecSize) ;
|
||||
|
||||
for ( int nCount = 0 ; nCount < BlockVecSize ; ++ nCount)
|
||||
|
||||
m_BlockToUpdate[nCount] = true ;
|
||||
|
||||
// Aggiornamento dello stato
|
||||
m_nStatus = OK ;
|
||||
|
||||
#endif
|
||||
return true ;
|
||||
}
|
||||
|
||||
@@ -335,7 +398,8 @@ VolZmap::CreateFromFlatRegion( const ISurfFlatRegion& Surf, double dDimZ, double
|
||||
bool
|
||||
VolZmap::CreateFromTriMesh( const ISurfTriMesh& Surf, double dPrec, bool bFlag)
|
||||
{
|
||||
// Se la superficie non è chiusa non ha senso continuare
|
||||
#if 0
|
||||
// Se la superficie non è chiusa non ha senso continuare
|
||||
if ( ! Surf.IsClosed())
|
||||
return false ;
|
||||
|
||||
@@ -372,6 +436,16 @@ VolZmap::CreateFromTriMesh( const ISurfTriMesh& Surf, double dPrec, bool bFlag)
|
||||
// Ridimensiono il vettore di dexel e creo lo Zmap
|
||||
m_TriZValues[0].resize( m_nVDim[0]) ;
|
||||
|
||||
// Definisco il numero di blocchi lungo x e y
|
||||
unsigned int nMinBlockNum = 1 ;
|
||||
|
||||
m_nFracLin[0] = max( nMinBlockNum,
|
||||
m_nVNx[0] / m_nDexNumPBlock +
|
||||
( m_nVNx[0] % m_nDexNumPBlock >= m_nDexNumPBlock / 2 ? 1 : 0)) ;
|
||||
m_nFracLin[1] = max( nMinBlockNum,
|
||||
m_nVNy[0] / m_nDexNumPBlock +
|
||||
( m_nVNy[0] % m_nDexNumPBlock >= m_nDexNumPBlock / 2 ? 1 : 0)) ;
|
||||
|
||||
// Se Tridexel ridimensiono anche gli altri vettori
|
||||
if ( bFlag) {
|
||||
|
||||
@@ -390,6 +464,11 @@ VolZmap::CreateFromTriMesh( const ISurfTriMesh& Surf, double dPrec, bool bFlag)
|
||||
|
||||
m_TriZValues[1].resize( m_nVDim[1]) ;
|
||||
m_TriZValues[2].resize( m_nVDim[2]) ;
|
||||
|
||||
// Definisco il numero di blocchi lungo z
|
||||
m_nFracLin[2] = max( nMinBlockNum,
|
||||
m_nVNy[1] / m_nDexNumPBlock +
|
||||
( m_nVNy[1] % m_nDexNumPBlock >= m_nDexNumPBlock / 2 ? 1 : 0)) ;
|
||||
}
|
||||
|
||||
|
||||
@@ -587,9 +666,16 @@ VolZmap::CreateFromTriMesh( const ISurfTriMesh& Surf, double dPrec, bool bFlag)
|
||||
m_dVMaxZ[2] = 0 ;
|
||||
}
|
||||
|
||||
|
||||
// Ridimensiono e setto il vettore dei blocchi a falso
|
||||
int BlockVecSize = m_nFracLin[0] * m_nFracLin[1] * m_nFracLin[2] ;
|
||||
|
||||
m_BlockToUpdate.resize( BlockVecSize) ;
|
||||
|
||||
for ( int nCount = 0 ; nCount < BlockVecSize ; ++ nCount)
|
||||
|
||||
m_BlockToUpdate[nCount] = true ;
|
||||
|
||||
m_nStatus = OK ;
|
||||
|
||||
#endif
|
||||
return true ;
|
||||
}
|
||||
+949
-535
File diff suppressed because it is too large
Load Diff
+670
-2937
File diff suppressed because it is too large
Load Diff
+51
-48
@@ -28,15 +28,18 @@ GEOOBJ_REGISTER( VOL_ZMAP, NGE_V_ZMP, VolZmap) ;
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
VolZmap::VolZmap(void)
|
||||
: m_nStatus( TO_VERIFY), m_dStep( EPS_SMALL), m_nTempProp( 0), m_dLinTol( LIN_TOL_STD), m_dAngTolDeg( ANG_TOL_APPROX_DEG)
|
||||
: m_nStatus( TO_VERIFY), m_dStep( EPS_SMALL), m_nTempProp( 0), m_dLinTol( LIN_TOL_STD), m_dAngTolDeg( ANG_TOL_APPROX_DEG),
|
||||
m_nDexNumPBlock( N_DEXBLOCK)
|
||||
{
|
||||
m_nMapNum = 0 ;
|
||||
m_nNumBlock = 0 ;
|
||||
for ( int i = 0 ; i < N_MAPS ; ++ i) {
|
||||
m_nVNx[i] = 0 ;
|
||||
m_nVNy[i] = 0 ;
|
||||
m_nVDim[i] = 0 ;
|
||||
m_dVMinZ[i] = 0 ;
|
||||
m_dVMaxZ[i] = 0 ;
|
||||
m_nNx[i] = 0 ;
|
||||
m_nNy[i] = 0 ;
|
||||
m_nDim[i] = 0 ;
|
||||
m_dMinZ[i] = 0 ;
|
||||
m_dMaxZ[i] = 0 ;
|
||||
m_nFracLin[i] = 0 ;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -53,12 +56,12 @@ VolZmap::Clear( void)
|
||||
m_nMapNum = 0 ;
|
||||
for ( int i = 0 ; i < N_MAPS ; ++ i) {
|
||||
m_MapFrame[i].Reset() ;
|
||||
m_nVNx[i] = 0 ;
|
||||
m_nVNy[i] = 0 ;
|
||||
m_nVDim[i] = 0 ;
|
||||
m_dVMinZ[i] = 0 ;
|
||||
m_dVMaxZ[i] = 0 ;
|
||||
m_TriZValues[i].clear() ;
|
||||
m_nNx[i] = 0 ;
|
||||
m_nNy[i] = 0 ;
|
||||
m_nDim[i] = 0 ;
|
||||
m_dMinZ[i] = 0 ;
|
||||
m_dMaxZ[i] = 0 ;
|
||||
m_Values[i].clear() ;
|
||||
}
|
||||
m_dStep = EPS_SMALL ;
|
||||
m_dLinTol = LIN_TOL_STD ;
|
||||
@@ -112,14 +115,14 @@ VolZmap::CopyFrom( const VolZmap& vzmSrc)
|
||||
|
||||
m_MapFrame[i] = vzmSrc.m_MapFrame[i] ;
|
||||
|
||||
m_nVNx[i] = vzmSrc.m_nVNx[i] ;
|
||||
m_nVNy[i] = vzmSrc.m_nVNy[i] ;
|
||||
m_nVDim[i] = vzmSrc.m_nVDim[i] ;
|
||||
m_nNx[i] = vzmSrc.m_nNx[i] ;
|
||||
m_nNy[i] = vzmSrc.m_nNy[i] ;
|
||||
m_nDim[i] = vzmSrc.m_nDim[i] ;
|
||||
|
||||
m_dVMinZ[i] = vzmSrc.m_dVMinZ[i] ;
|
||||
m_dVMaxZ[i] = vzmSrc.m_dVMaxZ[i] ;
|
||||
m_dMinZ[i] = vzmSrc.m_dMinZ[i] ;
|
||||
m_dMaxZ[i] = vzmSrc.m_dMaxZ[i] ;
|
||||
|
||||
m_TriZValues[i] = vzmSrc.m_TriZValues[i] ;
|
||||
m_Values[i] = vzmSrc.m_Values[i] ;
|
||||
}
|
||||
|
||||
m_dStep = vzmSrc.m_dStep ;
|
||||
@@ -168,9 +171,9 @@ VolZmap::Save( NgeWriter& ngeOut) const
|
||||
for ( unsigned int i = 0 ; i < m_nMapNum ; ++ i) {
|
||||
if ( ! ngeOut.WriteFrame( m_MapFrame[i], ";", true))
|
||||
return false ;
|
||||
if ( ! ngeOut.WriteInt( m_nVNx[i], ",", false))
|
||||
if ( ! ngeOut.WriteInt( m_nNx[i], ",", false))
|
||||
return false ;
|
||||
if ( ! ngeOut.WriteInt( m_nVNy[i], ";", true))
|
||||
if ( ! ngeOut.WriteInt( m_nNy[i], ";", true))
|
||||
return false ;
|
||||
}
|
||||
// passo di campionamento (distanza tra spilloni)
|
||||
@@ -179,9 +182,9 @@ VolZmap::Save( NgeWriter& ngeOut) const
|
||||
// ciclo sulle mappe
|
||||
for ( unsigned int i = 0 ; i < m_nMapNum ; ++ i) {
|
||||
// ciclo sui dexel
|
||||
for ( unsigned int j = 0 ; j < m_nVDim[i] ; ++ j) {
|
||||
for ( unsigned int j = 0 ; j < m_nDim[i] ; ++ j) {
|
||||
// numero di estremi
|
||||
unsigned int nDim = unsigned int( m_TriZValues[i][j].size()) ;
|
||||
unsigned int nDim = unsigned int( m_Values[i][j].size()) ;
|
||||
if ( ! ngeOut.WriteInt( nDim, ",", false))
|
||||
return false ;
|
||||
// se dexel nullo
|
||||
@@ -194,7 +197,7 @@ VolZmap::Save( NgeWriter& ngeOut) const
|
||||
else {
|
||||
for ( unsigned int k = 0 ; k < nDim ; ++ k) {
|
||||
bool bEndL = ( k == nDim - 1) ;
|
||||
if ( ! ngeOut.WriteDouble( m_TriZValues[i][j][k], ( bEndL ? ";" : ","), bEndL))
|
||||
if ( ! ngeOut.WriteDouble( m_Values[i][j][k].dZVal, ( bEndL ? ";" : ","), bEndL))
|
||||
return false ;
|
||||
}
|
||||
}
|
||||
@@ -215,11 +218,11 @@ VolZmap::Load( NgeReader& ngeIn)
|
||||
for ( unsigned int i = 0 ; i < m_nMapNum ; ++ i) {
|
||||
if ( ! ngeIn.ReadFrame( m_MapFrame[i], ";", true))
|
||||
return false ;
|
||||
if ( ! ngeIn.ReadInt( m_nVNx[i], ",", false))
|
||||
if ( ! ngeIn.ReadInt( m_nNx[i], ",", false))
|
||||
return false ;
|
||||
if ( ! ngeIn.ReadInt( m_nVNy[i], ";", true))
|
||||
if ( ! ngeIn.ReadInt( m_nNy[i], ";", true))
|
||||
return false ;
|
||||
m_nVDim[i] = m_nVNx[i] * m_nVNy[i] ;
|
||||
m_nDim[i] = m_nNx[i] * m_nNy[i] ;
|
||||
}
|
||||
// passo di campionamento (distanza tra spilloni)
|
||||
if ( ! ngeIn.ReadDouble( m_dStep, ";", true))
|
||||
@@ -227,9 +230,9 @@ VolZmap::Load( NgeReader& ngeIn)
|
||||
// ciclo sulle mappe
|
||||
for ( unsigned int i = 0 ; i < m_nMapNum ; ++ i) {
|
||||
// dimensiono i vettori
|
||||
m_TriZValues[i].resize( m_nVDim[i]) ;
|
||||
m_Values[i].resize( m_nDim[i]) ;
|
||||
// ciclo sui dexel
|
||||
for ( unsigned int j = 0 ; j < m_nVDim[i] ; ++ j) {
|
||||
for ( unsigned int j = 0 ; j < m_nDim[i] ; ++ j) {
|
||||
// leggo il numero di estremi nel dexel
|
||||
unsigned int nDim ;
|
||||
if ( ! ngeIn.ReadInt( nDim, ",", false))
|
||||
@@ -247,11 +250,11 @@ VolZmap::Load( NgeReader& ngeIn)
|
||||
// altrimenti
|
||||
else {
|
||||
// dimensiono l'array
|
||||
m_TriZValues[i][j].resize( nDim) ;
|
||||
m_Values[i][j].resize( nDim) ;
|
||||
// leggo i valori
|
||||
for ( unsigned int k = 0 ; k < nDim ; ++ k) {
|
||||
bool bEndL = ( k == nDim - 1) ;
|
||||
if ( ! ngeIn.ReadDouble( m_TriZValues[i][j][k], ( bEndL ? ";" : ","), bEndL))
|
||||
if ( ! ngeIn.ReadDouble( m_Values[i][j][k].dZVal, ( bEndL ? ";" : ","), bEndL))
|
||||
return false ;
|
||||
}
|
||||
}
|
||||
@@ -274,24 +277,24 @@ VolZmap::GetLocalBBox( BBox3d& b3Loc, int nFlag) const
|
||||
// se richiesto approssimato
|
||||
if ( ( nFlag & BBF_EXACT) == 0) {
|
||||
b3Loc.Add( ORIG) ;
|
||||
b3Loc.Add( Point3d( m_nVNx[0] * m_dStep, m_nVNy[0] * m_dStep, m_dVMaxZ[0])) ;
|
||||
b3Loc.Add( Point3d( m_nNx[0] * m_dStep, m_nNy[0] * m_dStep, m_dMaxZ[0])) ;
|
||||
b3Loc.ToGlob( m_MapFrame[0]) ;
|
||||
return true ;
|
||||
}
|
||||
// calcolo preciso
|
||||
// ciclo sui dexel (punti in basso con ciclo aggiunto per punti in alto di ultima riga)
|
||||
double dY = 0 ;
|
||||
for ( size_t j = 0 ; j <= m_nVNy[0] ; ++ j) {
|
||||
size_t jc = ( ( j != m_nVNy[0]) ? j : m_nVNy[0] -1) ;
|
||||
for ( size_t j = 0 ; j <= m_nNy[0] ; ++ j) {
|
||||
size_t jc = ( ( j != m_nNy[0]) ? j : m_nNy[0] -1) ;
|
||||
double dX = 0 ;
|
||||
// punto a sinistra di ogni dexel (aggiungo un ciclo per fare punto a destra di ultimo)
|
||||
for ( size_t i = 0 ; i <= m_nVNx[0] ; ++ i) {
|
||||
size_t ic = ( ( i != m_nVNx[0]) ? i : m_nVNx[0] -1) ;
|
||||
size_t nPos = ic + jc * m_nVNx[0] ;
|
||||
if ( m_TriZValues[0][nPos].size() > 0) {
|
||||
for ( size_t i = 0 ; i <= m_nNx[0] ; ++ i) {
|
||||
size_t ic = ( ( i != m_nNx[0]) ? i : m_nNx[0] -1) ;
|
||||
size_t nPos = ic + jc * m_nNx[0] ;
|
||||
if ( m_Values[0][nPos].size() > 0) {
|
||||
Point3d ptP = m_MapFrame[0].Orig() + dX * m_MapFrame[0].VersX() + dY * m_MapFrame[0].VersY() ;
|
||||
b3Loc.Add( ptP + m_TriZValues[0][nPos][0] * m_MapFrame[0].VersZ()) ;
|
||||
b3Loc.Add( ptP + m_TriZValues[0][nPos][m_TriZValues[0][nPos].size()-1] * m_MapFrame[0].VersZ()) ;
|
||||
b3Loc.Add( ptP + m_Values[0][nPos][0].dZVal * m_MapFrame[0].VersZ()) ;
|
||||
b3Loc.Add( ptP + m_Values[0][nPos][m_Values[0][nPos].size()-1].dZVal * m_MapFrame[0].VersZ()) ;
|
||||
}
|
||||
// passo al punto successivo
|
||||
dX += m_dStep ;
|
||||
@@ -318,24 +321,24 @@ VolZmap::GetBBox( const Frame3d& frRef, BBox3d& b3Ref, int nFlag) const
|
||||
// se richiesto approssimato
|
||||
if ( ( nFlag & BBF_EXACT) == 0) {
|
||||
b3Ref.Add( ORIG) ;
|
||||
b3Ref.Add( Point3d( m_nVNx[0] * m_dStep, m_nVNy[0] * m_dStep, m_dVMaxZ[0])) ;
|
||||
b3Ref.Add( Point3d( m_nNx[0] * m_dStep, m_nNy[0] * m_dStep, m_dMaxZ[0])) ;
|
||||
b3Ref.ToGlob( frUse) ;
|
||||
return true ;
|
||||
}
|
||||
// calcolo preciso
|
||||
// ciclo sui dexel (punti in basso con ciclo aggiunto per punti in alto di ultima riga)
|
||||
double dY = 0 ;
|
||||
for ( size_t j = 0 ; j <= m_nVNy[0] ; ++ j) {
|
||||
size_t jc = ( ( j != m_nVNy[0]) ? j : m_nVNy[0] -1) ;
|
||||
for ( size_t j = 0 ; j <= m_nNy[0] ; ++ j) {
|
||||
size_t jc = ( ( j != m_nNy[0]) ? j : m_nNy[0] -1) ;
|
||||
double dX = 0 ;
|
||||
// punto a sinistra di ogni dexel (aggiungo un ciclo per fare punto a destra di ultimo)
|
||||
for ( size_t i = 0 ; i <= m_nVNx[0] ; ++ i) {
|
||||
size_t ic = ( ( i != m_nVNx[0]) ? i : m_nVNx[0] -1) ;
|
||||
size_t nPos = ic + jc * m_nVNx[0] ;
|
||||
if ( m_TriZValues[0][nPos].size() > 0) {
|
||||
for ( size_t i = 0 ; i <= m_nNx[0] ; ++ i) {
|
||||
size_t ic = ( ( i != m_nNx[0]) ? i : m_nNx[0] -1) ;
|
||||
size_t nPos = ic + jc * m_nNx[0] ;
|
||||
if ( m_Values[0][nPos].size() > 0) {
|
||||
Point3d ptP = frUse.Orig() + dX * frUse.VersX() + dY * frUse.VersY() ;
|
||||
b3Ref.Add( ptP + m_TriZValues[0][nPos][0] * frUse.VersZ()) ;
|
||||
b3Ref.Add( ptP + m_TriZValues[0][nPos][m_TriZValues[0][nPos].size()-1] * frUse.VersZ()) ;
|
||||
b3Ref.Add( ptP + m_Values[0][nPos][0].dZVal * frUse.VersZ()) ;
|
||||
b3Ref.Add( ptP + m_Values[0][nPos][m_Values[0][nPos].size()-1].dZVal * frUse.VersZ()) ;
|
||||
}
|
||||
// passo al punto successivo
|
||||
dX += m_dStep ;
|
||||
|
||||
@@ -16,12 +16,20 @@
|
||||
#include "ObjGraphicsMgr.h"
|
||||
#include "GeoObjRW.h"
|
||||
#include "CurveComposite.h"
|
||||
#include "SurfFlatRegion.h"
|
||||
#include "/EgtDev/Include/EGkVolZmap.h"
|
||||
#include "/EgtDev/Include/EGkPoint3d.h"
|
||||
#include "/EgtDev/Include/EGkVector3d.h"
|
||||
#include "/EgtDev/Include/ENkPolynomialRoots.h"
|
||||
#include "/EgtDev/Include/EgkIntersLinesurfTm.h"
|
||||
#include "SurfFlatRegion.h"
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
struct TriaStruct {
|
||||
int i, j, k ;
|
||||
Point3d ptVert ;
|
||||
TRIA3DVECTOR vecTria ;
|
||||
} ;
|
||||
typedef std::vector <TriaStruct> TriHolder ;
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
class VolZmap : public IVolZmap, public IGeoObjRW
|
||||
@@ -65,6 +73,8 @@ class VolZmap : public IVolZmap, public IGeoObjRW
|
||||
bool CreateFromFlatRegion( const ISurfFlatRegion& Surf, double dDimZ, double dPrec, bool bTriDex) override ;
|
||||
bool CreateFromTriMesh( const ISurfTriMesh& Surf, double dPrec, bool bTriDex) override ;
|
||||
bool GetAllTriangles( TRIA3DLIST& lstTria) const override ;
|
||||
bool GetBlockTriangles( int nBlock, TRIA3DLIST& lstTria) const override ;
|
||||
bool GetBlockInfo( std::vector<bool> & bModified) const override ;
|
||||
bool GetDexelLines( int nDir, int nPos1, int nPos2, POLYLINELIST& lstPL) const override ;
|
||||
bool SetTolerances( double dLinTol, double dAngTolDeg = 90) override ;
|
||||
bool SetStdTool( const std::string& pToolName, double dH, double dR, double dCornR) override ;
|
||||
@@ -105,78 +115,85 @@ class VolZmap : public IVolZmap, public IGeoObjRW
|
||||
bool AddDexelSideFace( int nPos, int nPosAdj, const Point3d& ptP, const Point3d& ptQ,
|
||||
const Vector3d& vtZ, const Vector3d& vtNorm, TRIA3DLIST& lstTria) const ;
|
||||
bool MarchingCubes( TRIA3DLIST& lstTria) const ;
|
||||
bool MarchingCubes( int nBlock, TRIA3DLIST& lstTria) const ;
|
||||
bool ExtMarchingCubes( int nBlock, TRIA3DLIST& lstTria, TriHolder& triHold) const ;
|
||||
bool FlipEdges( TriHolder& triHold) const ;
|
||||
bool FlipEdges( int nBlock, TriHolder& triHold) ;
|
||||
bool FlipEdges( int nNumBlocks, int nBlocks[], TriHolder triHold []) ;
|
||||
bool IsThereMat( int nI, int nJ, int nK) const ;
|
||||
bool IsThereMat( const int nMatr[][3], int nNum, double & dHx, double & dHy, double & dHz) const ;
|
||||
bool IntersPos( int nVec1[], int nVec2[], Point3d & ptInt) const ;
|
||||
bool IntersPos( int nVec1[], int nVec2[], Point3d & ptInt, Vector3d & vtNormal) const ;
|
||||
|
||||
// OPERAZIONI SU INTERVALLI
|
||||
bool SubtractIntervals( unsigned int nGrid, unsigned int nI, unsigned int nJ, double dMin, double dMax) ;
|
||||
bool SubtractIntervals( unsigned int nGrid, const Point3d& ptP, double dMin, double dMax) ;
|
||||
bool AddIntervals( unsigned int nGrid, unsigned int nI, unsigned int nJ, double dMin, double dMax) ;
|
||||
bool AddIntervals( unsigned int nGrid, const Point3d& ptP, double dMin, double dMax) ;
|
||||
bool SubtractIntervals( unsigned int nGrid, unsigned int nI, unsigned int nJ,
|
||||
double dMin, double dMax, const Vector3d& vtNMin, const Vector3d& vtNMax) ;
|
||||
bool SubtractIntervals( unsigned int nGrid, const Point3d& ptP,
|
||||
double dMin, double dMax, const Vector3d& vtNMin, const Vector3d& vtNMax) ;
|
||||
bool AddIntervals( unsigned int nGrid, unsigned int nI, unsigned int nJ,
|
||||
double dMin, double dMax, const Vector3d& vtNMin, const Vector3d& vtNMax) ;
|
||||
bool AddIntervals( unsigned int nGrid, const Point3d& ptP,
|
||||
double dMin, double dMax, const Vector3d& vtNMin, const Vector3d& vtNMax) ;
|
||||
|
||||
// SOTTRAZIONI
|
||||
// UTENSILI
|
||||
// Asse di simmetria parallelo a Z
|
||||
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) ;
|
||||
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) ;
|
||||
|
||||
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) ;
|
||||
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) ;
|
||||
|
||||
bool Dr_ZMilling( unsigned int nGrid, const Point3d & ptLs, const Point3d & ptLe, const Vector3d & vtToolDir) ;
|
||||
bool Sw_ZMilling( unsigned int nGrid, const Point3d & ptLs, const Point3d & ptLe, const Vector3d & vtToolDir) ;
|
||||
bool Dr_ZMilling( unsigned int nGrid, const Point3d& ptLs, const Point3d& ptLe, const Vector3d & vtToolDir) ;
|
||||
bool Sw_ZMilling( unsigned int nGrid, const Point3d& ptLs, const Point3d& ptLe, const Vector3d & vtToolDir) ;
|
||||
|
||||
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) ;
|
||||
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 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) ;
|
||||
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
|
||||
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) ;
|
||||
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) ;
|
||||
|
||||
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) ;
|
||||
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) ;
|
||||
|
||||
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) ;
|
||||
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, double dHei, double dMaxRad, double dMinRad) ;
|
||||
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, double dHei, double dMaxRad, double dMinRad) ;
|
||||
|
||||
// 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, double dHei, double dMaxRad, double dMinRad) ;
|
||||
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, double dHei, double dMaxRad, double dMinRad) ;
|
||||
|
||||
// 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 CompConus_Drilling( unsigned int nGrid, const Point3d & ptS, const Point3d & ptE, const Vector3d & vtToolDir, double dHei, double dMaxRad, double dMinRad) ;
|
||||
bool CompCyl_Drilling( unsigned int nGrid, const Point3d& ptS, const Point3d& ptE, const Vector3d& vtToolDir, double dHei, double dRad) ;
|
||||
bool CompConus_Drilling( unsigned int nGrid, const Point3d& ptS, const Point3d& ptE, const Vector3d& vtToolDir, double dHei, double dMaxRad, double dMinRad) ;
|
||||
|
||||
// Milling
|
||||
bool CompCyl_Milling( unsigned int nGrid, const Point3d & ptS, const Point3d & ptE, const Vector3d & vtToolDir, double dHei, double dRad) ;
|
||||
bool CompConus_Milling( unsigned int nGrid, const Point3d & ptS, const Point3d & ptE, const Vector3d & vtToolDir, double dHei, double dMaxRad, double dMinRad) ;
|
||||
bool CompConusAux_Milling( unsigned int nGrid, const Point3d & ptI, const Point3d & ptF, const Vector3d & vtV1, const Vector3d & vtV2, const Vector3d & vtV3,
|
||||
unsigned int & nStI, unsigned int & nStJ, unsigned int & nEnI, unsigned int & nEnJ,
|
||||
double dHei, double dMaxRad, double dMinRad, double dCoef) ;
|
||||
bool CompCyl_Milling( unsigned int nGrid, const Point3d& ptS, const Point3d& ptE, const Vector3d& vtToolDir, double dHei, double dRad) ;
|
||||
bool CompConus_Milling( unsigned int nGrid, const Point3d& ptS, const Point3d& ptE, const Vector3d& vtToolDir, double dHei, double dMaxRad, double dMinRad) ;
|
||||
|
||||
// Generica traslazione sfera
|
||||
bool CompBall_Milling( unsigned int nGrid, const Point3d & ptS, const Point3d & ptE, double dRad) ;
|
||||
bool CompBall_Milling( unsigned int nGrid, const Point3d& ptS, const Point3d& ptE, double dRad) ;
|
||||
|
||||
// BBox per utensili e solidi semplici
|
||||
inline bool BoundingBox( unsigned int nGrid, const Point3d& ptP1, const Point3d& ptP2, const Vector3d& vtV1, const Vector3d& vtV2,
|
||||
@@ -198,20 +215,25 @@ class VolZmap : public IVolZmap, public IGeoObjRW
|
||||
const Frame3d& CylFrame, double dL, double dR,
|
||||
Point3d& ptInt1, Point3d& ptInt2) ;
|
||||
bool IntersZLineCylinder( const Point3d& ptLine,
|
||||
const Point3d& ptBase, const Point3d& ptTop, const Vector3d& vtDir, double dCylR,
|
||||
const Point3d& ptBase, const Point3d& ptTop, double dCylR,
|
||||
double& dInfZ, double& dSupZ) ;
|
||||
bool IntersLineEllipticalCylinder( const Frame3d& CircFrame, const Vector3d& vtLineDir, const Point3d& ptLineSt,
|
||||
PNTVECTOR& ptInters, double dObCoef, double dSqRad, double dL) ;
|
||||
bool IntersLineEllipticalCylinder( const Vector3d& vtLineDir, const Point3d& ptLineSt,
|
||||
const Frame3d& CircFrame, double dSqRad, double dLongMvLen, double dOrtMvLen,
|
||||
Point3d& ptInt1, Point3d& ptInt2) ;
|
||||
bool IntersLineConus( const Point3d& ptLineSt, const Vector3d& vtLineDir,
|
||||
const Frame3d& ConusFrame, double dTan, double dl, double dL,
|
||||
Point3d& ptInt1, Point3d& ptInt2) ;
|
||||
bool IntersLineSphere( const Point3d& ptLineSt, const Vector3d& vtLineDir,
|
||||
const Point3d& ptCenter, double dRad,
|
||||
Point3d& ptInt1, Point3d& ptInt2) ;
|
||||
bool IntersLineMyPolyhedron( const Point3d& ptLineSt, const Vector3d& vtLineDir,
|
||||
const Frame3d& PolyFrame, double dLenX, double dLenY, double dLenZ, double dDeltaX,
|
||||
Point3d& ptInt1, Point3d& ptInt2) ;
|
||||
|
||||
private :
|
||||
enum Status { ERR = 0, OK = 1, TO_VERIFY = 2} ;
|
||||
static const int N_MAPS = 3 ;
|
||||
static const int N_DEXBLOCK = 10000 ;
|
||||
|
||||
private :
|
||||
ObjGraphicsMgr m_OGrMgr ; // gestore grafica dell'oggetto
|
||||
@@ -220,13 +242,26 @@ class VolZmap : public IVolZmap, public IGeoObjRW
|
||||
double m_dStep ; // passo delle griglie
|
||||
unsigned int m_nMapNum ; // numero di griglie ( 1 o 3)
|
||||
Frame3d m_MapFrame[N_MAPS] ; // riferimenti delle griglie
|
||||
unsigned int m_nVNx[N_MAPS] ; // dimensione di ciascuna griglia in X
|
||||
unsigned int m_nVNy[N_MAPS] ; // dimensione di ciascuna griglia in Y
|
||||
unsigned int m_nVDim[N_MAPS] ; // dimensione di ciascuna griglia ( X * Y)
|
||||
double m_dVMinZ[N_MAPS] ; // minimo in Zlocale di ciascuna griglia
|
||||
double m_dVMaxZ[N_MAPS] ; // massimo in Zlocale di ciascuna griglia
|
||||
std::vector<std::vector<double>> m_TriZValues[N_MAPS] ; // dexel delle 3 griglie
|
||||
double m_dLinTol ; // dati per utensile
|
||||
unsigned int m_nNx[N_MAPS] ; // dimensione di ciascuna griglia in X
|
||||
unsigned int m_nNy[N_MAPS] ; // dimensione di ciascuna griglia in Y
|
||||
unsigned int m_nDim[N_MAPS] ; // dimensione di ciascuna griglia ( X * Y)
|
||||
double m_dMinZ[N_MAPS] ; // minimo in Zlocale di ciascuna griglia
|
||||
double m_dMaxZ[N_MAPS] ; // massimo in Zlocale di ciascuna griglia
|
||||
|
||||
struct Data { // Struttura dati: estremi del dexel e versori normali
|
||||
double dZVal ;
|
||||
Vector3d vtN ;
|
||||
} ;
|
||||
|
||||
std::vector<std::vector<Data>> m_Values[N_MAPS] ; // dexel delle 3 griglie
|
||||
|
||||
unsigned int m_nDexNumPBlock ; // Numero di dexel per blocco
|
||||
unsigned int m_nFracLin[3] ; // Numero di blocchi per per ogni asse
|
||||
unsigned int m_nNumBlock ; // Numero totale di blocchi
|
||||
|
||||
mutable std::vector<bool> m_BlockToUpdate ;
|
||||
|
||||
double m_dLinTol ; // Dati per utensile
|
||||
double m_dAngTolDeg ;
|
||||
std::string m_sToolName ;
|
||||
unsigned int m_nToolType ;
|
||||
@@ -239,6 +274,7 @@ class VolZmap : public IVolZmap, public IGeoObjRW
|
||||
double m_dTipRadius ;
|
||||
} ;
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
inline VolZmap* CreateBasicVolZmap( void)
|
||||
{ return (static_cast<VolZmap*>( CreateGeoObj( VOL_ZMAP))) ; }
|
||||
|
||||
Reference in New Issue
Block a user