STL Format: Unterschied zwischen den Versionen
Aus Wikizone
(Die Seite wurde neu angelegt: „<pre> <!-- Name: stlvolume.php Desc: Binary STL File Volume approximation Comments: This php script will generate the bounding box volume of a given .stl file. Cr…“) |
|||
| Zeile 1: | Zeile 1: | ||
| + | inary STL files have the following format: | ||
| + | <pre> | ||
| + | UINT8[80] – Header | ||
| + | UINT32 – Number of triangles | ||
| + | |||
| + | foreach triangle | ||
| + | REAL32[3] – Normal vector | ||
| + | REAL32[3] – Vertex 1 | ||
| + | REAL32[3] – Vertex 2 | ||
| + | REAL32[3] – Vertex 3 | ||
| + | UINT16 – Attribute byte count | ||
| + | end | ||
| + | </pre> | ||
| + | |||
| + | == Programmbeispiele == | ||
| + | |||
| + | |||
| + | '''PHP Beispiel - Volumen der Bounding Box eines binary STL Files berechnen''' | ||
| + | |||
| + | Kann z.B. zum Berechnen der vorausichtlichen Materialmenge genutzt werden. | ||
| + | |||
| + | Quelle: http://schmidtcds.com/2011/07/php-stl-files/ Zugriff: 2013-01 | ||
| + | |||
<pre> | <pre> | ||
<!-- | <!-- | ||
Aktuelle Version vom 23. Januar 2013, 15:03 Uhr
inary STL files have the following format:
UINT8[80] – Header UINT32 – Number of triangles foreach triangle REAL32[3] – Normal vector REAL32[3] – Vertex 1 REAL32[3] – Vertex 2 REAL32[3] – Vertex 3 UINT16 – Attribute byte count end
Programmbeispiele[Bearbeiten]
PHP Beispiel - Volumen der Bounding Box eines binary STL Files berechnen
Kann z.B. zum Berechnen der vorausichtlichen Materialmenge genutzt werden.
Quelle: http://schmidtcds.com/2011/07/php-stl-files/ Zugriff: 2013-01
<!--
Name: stlvolume.php
Desc: Binary STL File Volume approximation
Comments: This php script will generate the bounding box volume of a given .stl file.
Created By: Michael D. Schmidt
Date: July 17, 2011
-->
<?php
$x_max = 0;
$y_max = 0;
$z_max = 0;
$x_min = 0;
$y_min = 0;
$z_min = 0;
$filepath = "PUT THE LOCATION OF YOUR .STL FILE HERE";
$fp = fopen($filepath, "rb");
$section = file_get_contents($filepath, NULL, NULL, 0, 79);
fseek($fp, 80);
$data = fread($fp, 4);
$numOfFacets = unpack("I", $data);
for ($i = 0; $i < $numOfFacets[1]; $i++){
//Start Normal Vector
$data = fread($fp, 4);
$hold = unpack("f", $data);
$normalVectorsX[$i] = $hold[1];
$data = fread($fp, 4);
$hold = unpack("f", $data);
$normalVectorsY[$i] = $hold[1];
$data = fread($fp, 4);
$hold = unpack("f", $data);
$normalVectorsZ[$i] = $hold[1];
//End Normal Vector
//Start Vertex1
$data = fread($fp, 4);
$hold = unpack("f", $data);
$vertex1X[$i] = $hold[1];
$data = fread($fp, 4);
$hold = unpack("f", $data);
$vertex1Y[$i] = $hold[1];
$data = fread($fp, 4);
$hold = unpack("f", $data);
$vertex1Z[$i] = $hold[1];
//End Vertex1
//Start Vertex2
$data = fread($fp, 4);
$hold = unpack("f", $data);
$vertex2X[$i] = $hold[1];
$data = fread($fp, 4);
$hold = unpack("f", $data);
$vertex2Y[$i] = $hold[1];
$data = fread($fp, 4);
$hold = unpack("f", $data);
$vertex2Z[$i] = $hold[1];
//End Vertex2
//Start Vertex3
$data = fread($fp, 4);
$hold = unpack("f", $data);
$vertex3X[$i] = $hold[1];
$data = fread($fp, 4);
$hold = unpack("f", $data);
$vertex3Y[$i] = $hold[1];
$data = fread($fp, 4);
$hold = unpack("f", $data);
$vertex3Z[$i] = $hold[1];
//End Vertex3
//Attribute Byte Count
$data = fread($fp, 2);
$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) {
$x_max = max($x_vals);
}
if(max($y_vals) > $y_max) {
$y_max = max($y_vals);
}
if(max($z_vals) > $z_max) {
$z_max = max($z_vals);
}
if(min($x_vals) < $x_min) {
$x_min = min($x_vals);
}
if(min($y_vals) < $y_min) {
$y_min = min($y_vals);
}
if(min($z_vals) < $z_min) {
$z_min = min($z_vals);
}
}
$x_dim = $x_max - $x_min;
$y_dim = $y_max - $y_min;
$z_dim = $z_max - $z_min;
$volume = $x_dim*$y_dim*$z_dim;
$raw_cost = 15;
$tray_cost = $raw_cost;
$material_cost = $raw_cost*$volume*1.02;
$support_cost = $raw_cost*2;
$total = $tray_cost + $material_cost + $support_cost;
echo "$".number_format($total, 2, '.', ',');
?>