Beispiel #1
0
        static void solid_bgnd_read(Lib3dsBackground background, Lib3dsIo io)
        {
            Lib3dsChunk  c = new Lib3dsChunk();
            Lib3dsChunks chunk;
            bool         have_lin = false;

            lib3ds_chunk_read_start(c, Lib3dsChunks.CHK_SOLID_BGND, io);

            while ((chunk = lib3ds_chunk_read_next(c, io)) != 0)
            {
                switch (chunk)
                {
                case Lib3dsChunks.CHK_LIN_COLOR_F:
                    lib3ds_io_read_rgb(io, background.solid_color);
                    have_lin = true;
                    break;

                case Lib3dsChunks.CHK_COLOR_F:
                    lib3ds_io_read_rgb(io, background.solid_color);
                    break;

                default: lib3ds_chunk_unknown(chunk, io); break;
                }
            }

            lib3ds_chunk_read_end(c, io);
        }
Beispiel #2
0
        public static void lib3ds_background_read(Lib3dsBackground background, Lib3dsIo io)
        {
            Lib3dsChunk c = new Lib3dsChunk();

            lib3ds_chunk_read(c, io);
            switch (c.chunk)
            {
            case Lib3dsChunks.CHK_BIT_MAP: background.bitmap_name = lib3ds_io_read_string(io, 64); break;

            case Lib3dsChunks.CHK_SOLID_BGND:
                lib3ds_chunk_read_reset(c, io);
                solid_bgnd_read(background, io);
                break;

            case Lib3dsChunks.CHK_V_GRADIENT:
                lib3ds_chunk_read_reset(c, io);
                v_gradient_read(background, io);
                break;

            case Lib3dsChunks.CHK_USE_BIT_MAP: background.use_bitmap = true; break;

            case Lib3dsChunks.CHK_USE_SOLID_BGND: background.use_solid = true; break;

            case Lib3dsChunks.CHK_USE_V_GRADIENT: background.use_gradient = true; break;
            }
        }
Beispiel #3
0
        static void v_gradient_read(Lib3dsBackground background, Lib3dsIo io)
        {
            Lib3dsChunk  c = new Lib3dsChunk();
            Lib3dsChunks chunk;

            List <float[]> color     = new List <float[]>();
            List <float[]> lin_color = new List <float[]>();
            bool           have_lin  = false;

            lib3ds_chunk_read_start(c, Lib3dsChunks.CHK_V_GRADIENT, io);

            background.gradient_percent = lib3ds_io_read_float(io);
            lib3ds_chunk_read_tell(c, io);

            while ((chunk = lib3ds_chunk_read_next(c, io)) != 0)
            {
                switch (chunk)
                {
                case Lib3dsChunks.CHK_COLOR_F:
                {
                    float[] col = new float[3];
                    lib3ds_io_read_rgb(io, col);
                    color.Add(col);
                }
                break;

                case Lib3dsChunks.CHK_LIN_COLOR_F:
                {
                    float[] col = new float[3];
                    lib3ds_io_read_rgb(io, col);
                    lin_color.Add(col);
                    have_lin = true;
                }
                break;

                default: lib3ds_chunk_unknown(chunk, io); break;
                }
            }

            if (have_lin)
            {
                color = lin_color;
            }

            while (color.Count < 3)
            {
                color.Add(new float[3]);
            }

            for (int i = 0; i < 3; i++)
            {
                background.gradient_top[i]    = color[0][i];
                background.gradient_middle[i] = color[1][i];
                background.gradient_bottom[i] = color[2][i];
            }

            lib3ds_chunk_read_end(c, io);
        }
Beispiel #4
0
        public static void lib3ds_background_write(Lib3dsBackground background, Lib3dsIo io)
        {
            if (background.bitmap_name.Length > 0)
            {             // ---- LIB3DS_BIT_MAP ----
                Lib3dsChunk c = new Lib3dsChunk();
                c.chunk = Lib3dsChunks.CHK_BIT_MAP;
                c.size  = 6 + 1 + (uint)background.bitmap_name.Length;
                lib3ds_chunk_write(c, io);
                lib3ds_io_write_string(io, background.bitmap_name);
            }

            if (colorf_defined(background.solid_color))
            {             // ---- LIB3DS_SOLID_BGND ----
                Lib3dsChunk c = new Lib3dsChunk();
                c.chunk = Lib3dsChunks.CHK_SOLID_BGND;
                c.size  = 42;
                lib3ds_chunk_write(c, io);
                colorf_write(background.solid_color, io);
            }

            if (colorf_defined(background.gradient_top) ||
                colorf_defined(background.gradient_middle) ||
                colorf_defined(background.gradient_bottom))
            {             // ---- LIB3DS_V_GRADIENT ----
                Lib3dsChunk c = new Lib3dsChunk();
                c.chunk = Lib3dsChunks.CHK_V_GRADIENT;
                c.size  = 118;
                lib3ds_chunk_write(c, io);
                lib3ds_io_write_float(io, background.gradient_percent);
                colorf_write(background.gradient_top, io);
                colorf_write(background.gradient_middle, io);
                colorf_write(background.gradient_bottom, io);
            }

            if (background.use_bitmap)
            {             // ---- LIB3DS_USE_BIT_MAP ----
                Lib3dsChunk c = new Lib3dsChunk();
                c.chunk = Lib3dsChunks.CHK_USE_BIT_MAP;
                c.size  = 6;
                lib3ds_chunk_write(c, io);
            }

            if (background.use_solid)
            {             // ---- LIB3DS_USE_SOLID_BGND ----
                Lib3dsChunk c = new Lib3dsChunk();
                c.chunk = Lib3dsChunks.CHK_USE_SOLID_BGND;
                c.size  = 6;
                lib3ds_chunk_write(c, io);
            }

            if (background.use_gradient)
            {             // ---- LIB3DS_USE_V_GRADIENT ----
                Lib3dsChunk c = new Lib3dsChunk();
                c.chunk = Lib3dsChunks.CHK_USE_V_GRADIENT;
                c.size  = 6;
                lib3ds_chunk_write(c, io);
            }
        }