示例#1
0
            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);
                }
            }
示例#2
0
            private VtkDataType GetDataType()
            {
                var dataType = VtkDataType.Int;

                VtkDataType.TryParse(GetStringPart(), true, out dataType);

                return(dataType);
            }
示例#3
0
            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);
                }
            }
示例#4
0
            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)
                    });
                }
            }
示例#5
0
            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);
            }
示例#6
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);
            }
示例#7
0
 protected abstract float GetDataAsFloat(VtkDataType dataType);