protected void LoadTextureCoordinates(Dictionary <string, VtkDataAttribute> attributes, int size) { var textureCoordinates = new TextureCoordinates(); textureCoordinates.Name = GetStringPart(); textureCoordinates.Dim = GetCount(); VtkDataType dtType = VtkDataType.Float; if (_curPartIdx < _curLineParts.Length) { dtType = GetDataType(); } Debug.WriteLine(string.Format("TEXTURE_COORDINATES name: {0}, dataType: {1}, dim: {2}", textureCoordinates.Name, dtType, textureCoordinates.Dim)); attributes[textureCoordinates.Name] = textureCoordinates; textureCoordinates.Values = new List <float[]>(size); for (int i = 0; i < size; i++) { var val = new float[textureCoordinates.Dim]; for (int j = 0; j < textureCoordinates.Dim; j++) { val[j] = GetDataAsFloat(dtType); } textureCoordinates.Values.Add(val); } }
private VtkDataType GetDataType() { var dataType = VtkDataType.Int; VtkDataType.TryParse(GetStringPart(), true, out dataType); return(dataType); }
protected void LoadScalars(Dictionary <string, VtkDataAttribute> attributes, int size) { Scalars scalars; VtkDataType dtType = FileFormat == VtkFileFormat.Ascii ? VtkDataType.Float : VtkDataType.UnsignedChar; if (_curToken == VtkToken.ColorScalars) { scalars = new ColorScalars(); scalars.Name = GetStringPart(); scalars.ComponentCount = 4; Debug.WriteLine(string.Format("COLOR_SCALARS name: {0}, dataType: {1}, numComp: {2}", scalars.Name, dtType, scalars.ComponentCount)); } else { scalars = new Scalars(); scalars.Name = GetStringPart(); dtType = GetDataType(); scalars.ComponentCount = 1; if (_curPartIdx < _curLineParts.Length) { scalars.ComponentCount = GetCount(); } Debug.WriteLine(string.Format("SCALARS name: {0}, dataType: {1}, numComp: {2}", scalars.Name, dtType, scalars.ComponentCount)); var token = GetVtkToken(); Debug.Assert(token == VtkToken.LookupTable); scalars.LookupTable = GetStringPart(); Debug.WriteLine(string.Format("SCALARS LOOKUP_TABLE: {0}", scalars.LookupTable)); } attributes[scalars.Name] = scalars; scalars.Values = new List <float[]>(size); for (int i = 0; i < size; i++) { var val = new float[scalars.ComponentCount]; for (int j = 0; j < scalars.ComponentCount; j++) { val[j] = GetDataAsFloat(dtType); if (FileFormat == VtkFileFormat.BINARY) { val[j] /= 255f; } } scalars.Values.Add(val); } }
protected void LoadPoints(VtkDataSet dataSet) { int n = GetCount(); VtkDataType dtType = GetDataType(); Debug.WriteLine(string.Format("POINTS size: {0}", n)); Debug.WriteLine(string.Format("POINTS data type: {0}", dtType.ToString())); dataSet.PointDataType = dtType; dataSet.Points = new List <Vector3>(n); for (int i = 0; i < n; i++) { dataSet.Points.Add(new Vector3() { X = GetDataAsFloat(dtType), Y = GetDataAsFloat(dtType), Z = GetDataAsFloat(dtType) }); } }
protected override float GetDataAsFloat(VtkDataType dataType) { var tok = GetStringPart(); switch (dataType) { case VtkDataType.Bit: return((float)int.Parse(tok)); break; case VtkDataType.UnsignedChar: return((float)sbyte.Parse(tok)); break; case VtkDataType.Char: return((float)byte.Parse(tok)); break; case VtkDataType.UnsignedShort: return((float)ushort.Parse(tok)); break; case VtkDataType.Short: return((float)short.Parse(tok)); break; case VtkDataType.UnsignedInt: return((float)int.Parse(tok)); break; case VtkDataType.Int: return((float)int.Parse(tok)); break; case VtkDataType.UnsignedLong: return((float)ulong.Parse(tok)); break; case VtkDataType.Long: return((float)long.Parse(tok)); break; case VtkDataType.Float: return((float)float.Parse(tok)); break; case VtkDataType.Double: return((float)double.Parse(tok)); break; } return(0); }
protected override float GetDataAsFloat(VtkDataType dataType) { //as stated in file-format.pdf for vtk binary format, it is written in big endian format, so we should check whether we need swap bytes here if (BitConverter.IsLittleEndian) { byte[] bytes; switch (dataType) { case VtkDataType.Bit: return((float)_reader.Read()); break; case VtkDataType.UnsignedChar: return((float)_reader.ReadSByte()); break; case VtkDataType.Char: return((float)_reader.ReadByte()); break; case VtkDataType.UnsignedShort: bytes = _reader.ReadBytes(sizeof(ushort)); return((float)BitConverter.ToUInt16(bytes.Reverse().ToArray(), 0)); break; case VtkDataType.Short: bytes = _reader.ReadBytes(sizeof(short)); return((float)BitConverter.ToInt16(bytes.Reverse().ToArray(), 0)); break; case VtkDataType.UnsignedInt: bytes = _reader.ReadBytes(sizeof(uint)); return((float)BitConverter.ToUInt32(bytes.Reverse().ToArray(), 0)); break; case VtkDataType.Int: bytes = _reader.ReadBytes(sizeof(int)); return((float)BitConverter.ToInt32(bytes.Reverse().ToArray(), 0)); break; case VtkDataType.UnsignedLong: bytes = _reader.ReadBytes(sizeof(ulong)); return((float)BitConverter.ToUInt64(bytes.Reverse().ToArray(), 0)); break; case VtkDataType.Long: bytes = _reader.ReadBytes(sizeof(long)); return((float)BitConverter.ToInt64(bytes.Reverse().ToArray(), 0)); break; case VtkDataType.Float: bytes = _reader.ReadBytes(sizeof(float)); return((float)BitConverter.ToSingle(bytes.Reverse().ToArray(), 0)); case VtkDataType.Double: bytes = _reader.ReadBytes(sizeof(double)); return((float)BitConverter.ToDouble(bytes.Reverse().ToArray(), 0)); break; } } else { switch (dataType) { case VtkDataType.Bit: return((float)_reader.Read()); break; case VtkDataType.UnsignedChar: return((float)_reader.ReadSByte()); break; case VtkDataType.Char: return((float)_reader.ReadByte()); break; case VtkDataType.UnsignedShort: return((float)_reader.ReadUInt16()); break; case VtkDataType.Short: return((float)_reader.ReadInt16()); break; case VtkDataType.UnsignedInt: return((float)_reader.ReadUInt32()); break; case VtkDataType.Int: return((float)_reader.ReadInt32()); break; case VtkDataType.UnsignedLong: return((float)_reader.ReadUInt64()); break; case VtkDataType.Long: return((float)_reader.ReadInt64()); break; case VtkDataType.Float: return((float)_reader.ReadSingle()); break; case VtkDataType.Double: return((float)_reader.ReadDouble()); break; } } return(0); }
protected abstract float GetDataAsFloat(VtkDataType dataType);