It states that the number of triangles is and unsigned 32 bit integer. Unsigned integers are not a native data type in VB. So what needs to be done is convert a Long signed integer into an unsigned integer. Microsoft has a good description of this at http://support.microsoft.com/kb/189323.
The key function that needs to be used is:
The code to read the number of triangles then is:
Private Const OFFSET_4 = 4294967296# Function LongToUnsigned(Value As Long) As Double If Value < 0 Then LongToUnsigned = Value + OFFSET_4 Else LongToUnsigned = Value End If End Function
Sub ReadBlockStl() Open "C:\Block.STL" For Binary Access Read As #1 Dim NumOfTrian As Long Get #1, 81, NumOfTrian Close #1 MsgBox LongToUnsigned(NumOfTrian) End Sub
This code worked find on a cube that had 12 triangles.
However, I tried it on an object that 33924 triangles and I got an overflow error on a for-loop for NumOfTrian. Of course, NumOfTrian is a Long with a maximum positive value of 32768. But when I used a double precission, I still get the same overflow error.