Potrzebuję pomocy przy czytaniu plików .STL (modele do druku 3D). Używam skryptu podpatrzonego na jednej ze stron. Umożliwia on określenie rozmiarów modelu. Generalnie skrypt działa i w większości przypadków się sprawdza, ale... Gdy model w pliku nie jest wycentrowany tylko przeniesiony od punkt 0,0,0 to jego skrypt wczytuje jego rozmiar właśnie od 0,0,0 do maksymalnych wartości. Przykład: Mamy boxa 3x3x3, przeniesionego o 2 punkty na każdej osi. Skrypt nie wskaże rozmiaru modelu jako 3x3x3 ale 5x5x5. Mam nadzieję, że wiecie o co chodzi. Poniżej funkcja:
function stl($file) {
$x_max = 0;
$y_max = 0;
$z_max = 0;
$x_min = 0;
$y_min = 0;
$z_min = 0;
$filepath = $file;
$fp = fopen($filepath, "rb"); $numOfFacets = unpack("I", $data);
for ($i = 0; $i < $numOfFacets[1]; $i++){
//Start Normal Vector
$normalVectorsX[$i] = $hold[1];
$normalVectorsY[$i] = $hold[1];
$normalVectorsZ[$i] = $hold[1];
//End Normal Vector
//Start Vertex1
$vertex1X[$i] = $hold[1];
$vertex1Y[$i] = $hold[1];
$vertex1Z[$i] = $hold[1];
//End Vertex1
//Start Vertex2
$vertex2X[$i] = $hold[1];
$vertex2Y[$i] = $hold[1];
$vertex2Z[$i] = $hold[1];
//End Vertex2
//Start Vertex3
$vertex3X[$i] = $hold[1];
$vertex3Y[$i] = $hold[1];
$vertex3Z[$i] = $hold[1];
//End Vertex3
//Attribute Byte Count
// $hold = unpack("S", $data);
// $abc[$i] = $hold[1];
$x_vals = array($vertex1X[$i], $vertex2X[$i], $vertex3X[$i]); $y_vals = array($vertex1Y[$i], $vertex2Y[$i], $vertex3Y[$i]); $z_vals = array($vertex1Z[$i], $vertex2Z[$i], $vertex3Z[$i]);
if (max($x_vals) > $x_max) { }
if (max($y_vals) > $y_max) { }
if (max($z_vals) > $z_max) { }
if (min($x_vals) < $x_min) { }
if (min($y_vals) < $y_min) { }
if (min($z_vals) < $z_min) { }
}
echo 'X: ',$x_dim,'<br>'; echo 'Y: ',$y_dim,'<br>'; echo 'Z: ',$z_dim,'<br>';
}