Пример #1
0
        public void ShouldLinearlyInterpolateColorsInGradientPattern(float x)
        {
            var pattern = new GradientPattern(VColor.White, VColor.Black);

            AssertActualEqualToExpected(
                pattern.GetColorAt(CreatePoint(x, 0, 0)),
                VColor.LinearRGB(1 - x, 1 - x, 1 - x));
        }
Пример #2
0
        public void TestPatternGradientCreate()
        {
            var pattern = new GradientPattern(Color.White, Color.Black);

            Assert.AreEqual(pattern.PatternAt(Point.Zero), Color.White);
            Assert.AreEqual(pattern.PatternAt(new Point(0.25, 0, 0)), new Color(0.75, 0.75, 0.75));
            Assert.AreEqual(pattern.PatternAt(new Point(0.5, 0, 0)), new Color(0.5, 0.5, 0.5));
            Assert.AreEqual(pattern.PatternAt(new Point(0.75, 0, 0)), new Color(0.25, 0.25, 0.25));
        }
        public void AGradientLinearlyInterpolatesBetweenTwoColors()
        {
            var pattern = new GradientPattern(Color.WHITE, Color.BLACK);

            Assert.AreEqual(Color.WHITE, pattern.PatternAt(new Point(0, 0, 0)));
            Assert.AreEqual(new Color(0.75, 0.75, 0.75), pattern.PatternAt(new Point(0.25, 0, 0)));
            Assert.AreEqual(new Color(0.5, 0.5, 0.5), pattern.PatternAt(new Point(0.5, 0, 0)));
            Assert.AreEqual(new Color(0.25, 0.25, 0.25), pattern.PatternAt(new Point(0.75, 0, 0)));
        }
        public void GradientLinearlyInterpolatesBetweenColors()
        {
            var pattern = new GradientPattern(ColourFactory.White, ColourFactory.Black);

            Assert.AreEqual(ColourFactory.White, pattern.PatternAt(new Point(0, 0, 0)));
            Assert.AreEqual(new Colour(0.75,0.75,0.75), pattern.PatternAt(new Point(0.25, 0, 0)));
            Assert.AreEqual(new Colour(0.5, 0.5, 0.5), pattern.PatternAt(new Point(0.5, 0, 0)));
            Assert.AreEqual(new Colour(0.25, 0.25, 0.25), pattern.PatternAt(new Point(0.75, 0, 0)));
        }
Пример #5
0
        public void GradientPattern()
        {
            var p = new GradientPattern(Color.White, Color.Black);

            Assert.That.VectorsAreEqual(p.At(Point(0f, 0f, 0f)), Color.White);
            Assert.That.VectorsAreEqual(p.At(Point(.25f, 0f, 0f)), new Color(.75f, .75f, .75f));
            Assert.That.VectorsAreEqual(p.At(Point(.5f, 0f, 0f)), new Color(.5f, .5f, .5f));
            Assert.That.VectorsAreEqual(p.At(Point(.75f, 0f, 0f)), new Color(.25f, .25f, .25f));
        }
Пример #6
0
        public void TestGradientPatternTransform()
        {
            var pattern = new GradientPattern(_white, _black);

            Assert.AreEqual(_white, pattern.ColorAt(Tuple.Point(0, 0, 0)));
            Assert.AreEqual(new Color(0.75, 0.75, 0.75), pattern.ColorAt(Tuple.Point(0.25, 0, 0)));
            Assert.AreEqual(new Color(0.5, 0.5, 0.5), pattern.ColorAt(Tuple.Point(0.5, 0, 0)));
            Assert.AreEqual(new Color(0.25, 0.25, 0.25), pattern.ColorAt(Tuple.Point(1.75, 0, 0)));
        }
Пример #7
0
        public void Gradient()
        {
            GradientPattern pattern = new GradientPattern(SolidPattern.White, SolidPattern.Black);

            Assert.True(Color.White == pattern.PatternAt(new Point(0, 0, 0)));
            Assert.True(new Color(0.75f, 0.75f, 0.75f) == pattern.PatternAt(new Point(0.25f, 0, 0)));
            Assert.True(new Color(0.5f, 0.5f, 0.5f) == pattern.PatternAt(new Point(0.5f, 0, 0)));
            Assert.True(new Color(0.25f, 0.25f, 0.25f) == pattern.PatternAt(new Point(0.75f, 0, 0)));
        }
Пример #8
0
        public void GradientLinearlyInterpolatesBetweenColors()
        {
            var pat = new GradientPattern(white, black);

            Assert.Equal(white, pat.GetColor(Vector4.CreatePosition(0, 0, 0)));
            Assert.Equal(new Color(0.75, 0.75, 0.75), pat.GetColor(Vector4.CreatePosition(0.25, 0, 0)));
            Assert.Equal(new Color(0.5, 0.5, 0.5), pat.GetColor(Vector4.CreatePosition(0.5, 0, 0)));
            Assert.Equal(new Color(0.25, 0.25, 0.25), pat.GetColor(Vector4.CreatePosition(0.75, 0, 0)));
        }
Пример #9
0
        public void GradientPattern()
        {
            GradientPattern pattern = new GradientPattern(white, black);

            Assert.AreEqual(pattern.PatternAt(Tuple.Point(0, 0, 0)), white);
            Assert.AreEqual(pattern.PatternAt(Tuple.Point(0.25, 0, 0)), new Color(0.75, 0.75, 0.75));
            Assert.AreEqual(pattern.PatternAt(Tuple.Point(0.5, 0, 0)), new Color(0.5, 0.5, 0.5));
            Assert.AreEqual(pattern.PatternAt(Tuple.Point(0.75, 0, 0)), new Color(0.25, 0.25, 0.25));
        }
        public void BasicTest()
        {
            var pattern = new GradientPattern(Color.White, Color.Black);

            Check.That(pattern.GetColor(Helper.CreatePoint(0, 0, 0))).IsEqualTo(new Color(1, 1, 1));
            Check.That(pattern.GetColor(Helper.CreatePoint(0.25, 0, 0))).IsEqualTo(new Color(0.75, 0.75, 0.75));
            Check.That(pattern.GetColor(Helper.CreatePoint(0.5, 0, 0))).IsEqualTo(new Color(0.5, 0.5, 0.5));
            Check.That(pattern.GetColor(Helper.CreatePoint(0.75, 0, 0))).IsEqualTo(new Color(0.25, 0.25, 0.25));
        }
Пример #11
0
        public void ColorAt_should_linearly_interpolate_between_colors()
        {
            var pattern = new GradientPattern(Colors.White, Colors.Black);

            pattern.ColorAt(new Point(0, 0, 0)).Should().Be(Colors.White);
            pattern.ColorAt(new Point(0.25, 0, 0)).Should().Be(new Color(0.75, 0.75, 0.75));
            pattern.ColorAt(new Point(0.5, 0, 0)).Should().Be(new Color(0.5, 0.5, 0.5));
            pattern.ColorAt(new Point(0.75, 0, 0)).Should().Be(new Color(0.25, 0.25, 0.25));
        }
Пример #12
0
        private static void TestCase05()
        {
            // A gradient linearly interpolates between colors
            Pattern pattern = new GradientPattern(white, black);

            Assert.Equal(white, pattern.ColorAt(Tuple.Point(0, 0, 0)));
            Assert.Equal(Tuple.Color(0.75f, 0.75f, 0.75f), pattern.ColorAt(Tuple.Point(0.25f, 0, 0)));
            Assert.Equal(Tuple.Color(0.5f, 0.5f, 0.5f), pattern.ColorAt(Tuple.Point(0.5f, 0, 0)));
            Assert.Equal(Tuple.Color(0.25f, 0.25f, 0.25f), pattern.ColorAt(Tuple.Point(0.75f, 0, 0)));
        }
Пример #13
0
        public void Linearly_Interpolates_Between_Colors()
        {
            var pattern    = new GradientPattern(Color.White, Color.Black);
            var unitSphere = new Sphere();

            pattern.ColorAt(new Point(0, 0, 0), unitSphere).ShouldBe(Color.White);
            pattern.ColorAt(new Point(0.25, 0, 0), unitSphere).ShouldBe(Color.White * .75);
            pattern.ColorAt(new Point(0.5, 0, 0), unitSphere).ShouldBe(Color.White * .5);
            pattern.ColorAt(new Point(0.75, 0, 0), unitSphere).ShouldBe(Color.White * .25);
        }
Пример #14
0
        public void T06_Gradient()
        {
            Pattern pattern = new GradientPattern(new SolidColorPattern(Color.white),
                                                  new SolidColorPattern(Color.black));

            Assert.AreEqual(Color.white, pattern.PatternAt(new Point(0, 0, 0)));
            Assert.AreEqual(new Color(0.75, 0.75, 0.75), pattern.PatternAt(new Point(0.25, 0, 0)));
            Assert.AreEqual(new Color(0.5, 0.5, 0.5), pattern.PatternAt(new Point(0.5, 0, 0)));
            Assert.AreEqual(new Color(0.25, 0.25, 0.25), pattern.PatternAt(new Point(0.75, 0, 0)));
        }
Пример #15
0
        public void ColorAt()
        {
            var pattern = new GradientPattern(Color.White, Color.Black);

            Assert.Equal(Color.White, pattern.ColorAt(Point.Zero));
            Assert.Equal(new Color(0.75f, 0.75f, 0.75f), pattern.ColorAt(new Point(0.25f, 0, 0)));
            Assert.Equal(new Color(0.5f, 0.5f, 0.5f), pattern.ColorAt(new Point(0.5f, 0, 0)));
            Assert.Equal(new Color(0.25f, 0.25f, 0.25f), pattern.ColorAt(new Point(0.75f, 0, 0)));
            Assert.Equal(Color.Black, pattern.ColorAt(new Point(1, 0, 0)));
        }
Пример #16
0
        public void A_gradient_linearly_interpolates_between_colors()
        {
            var pattern = new GradientPattern(Color.White, Color.Black);

            Assert.AreEqual(
                new Color(1, 1, 1),
                pattern.ColorAt(Tuple.Point(0, 0, 0)));
            Assert.AreEqual(
                new Color(0.75, 0.75, 0.75),
                pattern.ColorAt(Tuple.Point(0.25, 0, 0)));
            Assert.AreEqual(
                new Color(0.5, 0.5, 0.5),
                pattern.ColorAt(Tuple.Point(0.5, 0, 0)));
            Assert.AreEqual(
                new Color(0.25, 0.25, 0.25),
                pattern.ColorAt(Tuple.Point(0.75, 0, 0)));
        }
Пример #17
0
        public static Bitmap GenerateDebugImage(int width, int height, string message)
        {
            GradientPattern pattern = new GradientPattern();

            pattern.bottomLeft  = (Color)QColor.generateRandomOpaque(128, 255);
            pattern.bottomRight = (Color)QColor.generateRandomOpaque(128, 255);
            pattern.topLeft     = Color.Fuchsia;
            pattern.topRight    = Color.Fuchsia;

            Bitmap          bmp      = pattern.makeBitmap(width, height);
            GDIPlusRenderer r        = new GDIPlusRenderer(bmp);
            float           fontSize = Math.Min(width, height) / 10.0f;

            fontSize = Range.clamp(fontSize, 10, 45);
            using (Font f = new Font("Arial", fontSize, FontStyle.Bold))
            {
                TextFormat tf = new TextFormat(f, Color.Black, true, Color.White, false);
                tf.render(r, message, 0, height / 2);
                bmp = r.RenderTargetAsGDIBitmap();
            }


            return(bmp);
        }
Пример #18
0
 public static IOutputTarget Gradient(string text, System.ConsoleColor[] gradient = null, GradientPattern pattern = GradientPattern.Letter) => _target.Gradient(text, gradient, pattern);
 private void cmbPatternType_SelectedIndexChanged(object sender, EventArgs e)
 {
     if ((string)cmbPatternType.SelectedItem == "Simple")
     {
         if (tabPatternProperties.TabPages.Contains(tabPicture))
         {
             tabPatternProperties.TabPages.Remove(tabPicture);
         }
         if (tabPatternProperties.TabPages.Contains(tabGradient))
         {
             tabPatternProperties.TabPages.Remove(tabGradient);
         }
         if (tabPatternProperties.TabPages.Contains(tabHatch))
         {
             tabPatternProperties.TabPages.Remove(tabHatch);
         }
         if (tabPatternProperties.TabPages.Contains(tabSimple) == false)
         {
             tabPatternProperties.TabPages.Add(tabSimple);
             tabPatternProperties.SelectedTab = tabSimple;
         }
     }
     if ((string)cmbPatternType.SelectedItem == "Picture")
     {
         if (tabPatternProperties.TabPages.Contains(tabSimple))
         {
             tabPatternProperties.TabPages.Remove(tabSimple);
         }
         if (tabPatternProperties.TabPages.Contains(tabGradient))
         {
             tabPatternProperties.TabPages.Remove(tabGradient);
         }
         if (tabPatternProperties.TabPages.Contains(tabHatch))
         {
             tabPatternProperties.TabPages.Remove(tabHatch);
         }
         if (tabPatternProperties.TabPages.Contains(tabPicture) == false)
         {
             tabPatternProperties.TabPages.Add(tabPicture);
             tabPatternProperties.SelectedTab = tabPicture;
         }
     }
     if ((string)cmbPatternType.SelectedItem == "Gradient")
     {
         if (tabPatternProperties.TabPages.Contains(tabSimple))
         {
             tabPatternProperties.TabPages.Remove(tabSimple);
         }
         if (tabPatternProperties.TabPages.Contains(tabPicture))
         {
             tabPatternProperties.TabPages.Remove(tabPicture);
         }
         if (tabPatternProperties.TabPages.Contains(tabHatch))
         {
             tabPatternProperties.TabPages.Remove(tabHatch);
         }
         if (tabPatternProperties.TabPages.Contains(tabGradient) == false)
         {
             tabPatternProperties.TabPages.Add(tabGradient);
             tabPatternProperties.SelectedTab = tabGradient;
         }
     }
     if ((string)cmbPatternType.SelectedItem == "Hatch")
     {
         if (tabPatternProperties.TabPages.Contains(tabSimple))
         {
             tabPatternProperties.TabPages.Remove(tabSimple);
         }
         if (tabPatternProperties.TabPages.Contains(tabPicture))
         {
             tabPatternProperties.TabPages.Remove(tabPicture);
         }
         if (tabPatternProperties.TabPages.Contains(tabGradient))
         {
             tabPatternProperties.TabPages.Remove(tabGradient);
         }
         if (tabPatternProperties.TabPages.Contains(tabHatch) == false)
         {
             tabPatternProperties.TabPages.Add(tabHatch);
             tabPatternProperties.SelectedTab = tabHatch;
         }
     }
     if (_ignoreChanges) return;
     int index = ccPatterns.Patterns.IndexOf(ccPatterns.SelectedPattern);
     if (index == -1) return;
     IPattern oldPattern = ccPatterns.SelectedPattern;
     if ((string)cmbPatternType.SelectedItem == "Simple")
     {
         SimplePattern sp = new SimplePattern();
         if (oldPattern != null) sp.CopyOutline(oldPattern);
         ccPatterns.Patterns[index] = sp;
         ccPatterns.RefreshList();
         ccPatterns.SelectedPattern = sp;
         UpdateSimplePatternControls(sp);
     }
     if ((string)cmbPatternType.SelectedItem == "Picture")
     {
         PicturePattern pp = new PicturePattern();
         if (oldPattern != null) pp.CopyOutline(oldPattern);
         ccPatterns.Patterns[index] = pp;
         ccPatterns.RefreshList();
         ccPatterns.SelectedPattern = pp;
         UpdatePicturePatternControls(pp);
     }
     if ((string)cmbPatternType.SelectedItem == "Gradient")
     {
         GradientPattern gp = new GradientPattern();
         if (oldPattern != null) gp.CopyOutline(oldPattern);
         ccPatterns.Patterns[index] = gp;
         ccPatterns.RefreshList();
         ccPatterns.SelectedPattern = gp;
         UpdateGradientPatternControls(gp);
     }
     if ((string)cmbPatternType.SelectedItem == "Hatch")
     {
         HatchPattern hp = new HatchPattern();
         if (oldPattern != null) hp.CopyOutline(oldPattern);
         ccPatterns.Patterns[index] = hp;
         ccPatterns.RefreshList();
         ccPatterns.SelectedPattern = hp;
     }
 }
Пример #20
0
        public static Tuple <World, Camera> Create(int width, int height)
        {
            var world = new World();

            var cam = new Camera(width, height, Math.PI / 3);

            cam.Transform = Transform.View(
                Vector4.CreatePosition(0, 10, 0),
                Vector4.CreatePosition(0, 0.25, 0),
                Vector4.CreateDirection(0, 0, -1));

            cam.ProgressMonitorFactory =
                (_rows, _cols) => new DefaultProgressMonitor();

            var l1 = new PointLight(Vector4.CreatePosition(-20, 3.5, -50), Color.White);
            var l2 = new PointLight(Vector4.CreatePosition(10, 100, 500), new Color(1, 1, 1));

            var g1 = new GradientPattern(
                new Color(0, 1, 0),
                new Color(0, 0, 1));

            g1.Transform =
                Transform.RotateZ(-0.2) *
                Transform.RotateY(Math.PI / 5) *
                Transform.Translate(-1, 0, 0) *
                Transform.Scale(2, 2, 2);

            var s0 = new Sphere()
            {
                Transform =
                    Transform.Scale(2, 2, 2),

                Material = new Material()
                {
                    Pattern         = g1,
                    Reflective      = 0.9,
                    Transparency    = 0.4,
                    RefractiveIndex = 1.5,
                    Ambient         = 0.01,
                    Diffuse         = 0.2,
                    Specular        = 1.0,
                    Shininess       = 350,
                },
            };

            var s00 = new Sphere()
            {
                Transform =
                    Transform.Scale(1.8, 1.8, 1.8),

                Material = new Material()
                {
                    Pattern         = g1,
                    Reflective      = 0.9,
                    Transparency    = 0.8,
                    RefractiveIndex = 1.0022,
                    Ambient         = 0.001,
                    Diffuse         = 0.1,
                    Specular        = 5.0,
                    Shininess       = 350,
                },
            };

            var       group1 = new Group();
            const int n      = 16;

            for (var i = 0; i < n; i++)
            {
                var r   = (2 * Math.PI / n) * i;
                var s   = new Sphere();
                var g   = 0.5 + (i * 0.5 / n);
                var col = new Color(0.605, g, 0.869);
                s.Material = new Material()
                {
                    // Color = new Color(0.605, 0.904, 0.869),
                    Color     = col,
                    Diffuse   = 0.9,
                    Ambient   = 0.1,
                    Specular  = 0.2,
                    Shininess = 20,
                };

                var offset = rng.NextDouble() * 2.0;

                s.Transform =
                    Transform.RotateY(r) *
                    Transform.Translate(0, 0, -5 + offset) *
                    Transform.Scale(0.5, 0.5, 0.5);

                group1.Add(s);
            }

            group1.Transform =
                Transform.RotateX(Math.PI / 3) *
                Transform.RotateY(Math.PI / 1);

            var floor = new Plane();

            floor.Material = new Material()
            {
                Color    = new Color(1, 1, 1),
                Ambient  = 1.0,
                Specular = 0,
                Diffuse  = 0,
            };

            floor.Transform =
                Transform.Translate(0, -100, 0);

            floor.Material = new Material()
            {
                Specular = 0,
                Pattern  = new StripePattern(
                    new Color(0.22, 0.22, 0.22),
                    new Color(0.41, 0.41, 0.41))
                {
                    Transform =
                        Transform.RotateY(Math.PI / 4) *
                        Transform.Scale(10, 1, 1),
                },
            };

            world.Objects.Add(s0);
            world.Objects.Add(s00);
            world.Objects.Add(group1);
            world.Objects.Add(floor);

            world.Lights.Add(l1);
            // world.Lights.Add(l2);

            return(Tuple.Create(world, cam));
        }
Пример #21
0
        ///-------------------------------------------------------------------------------------------------
        /// <summary>   Main entry-point for this application. </summary>
        ///
        /// <remarks>   Kemp, 1/18/2019. </remarks>
        ///
        /// <param name="args"> An array of command-line argument strings. </param>
        ///-------------------------------------------------------------------------------------------------

        static void Main(string[] args)
        {
            World defaultWorld = new World();

            defaultWorld.AddLight(new LightPoint(new Point(-10, 10, -10), new Color(1, 1, 1)));

            Sphere s1 = new Sphere();

            s1.Material          = new Material();
            s1.Material.Color    = new Color(0.8, 1.0, 0.6);
            s1.Material.Diffuse  = new Color(0.7, 0.7, 0.7);
            s1.Material.Specular = new Color(0.2, 0.2, 0.2);

            Sphere s2 = new Sphere();

            s2.Transform = MatrixOps.CreateScalingTransform(0.5, 0.5, 0.5);
            defaultWorld.AddObject(s1);
            defaultWorld.AddObject(s2);
            Color  white = new Color(1, 1, 1);
            Color  black = new Color(0, 0, 0);
            Sphere s     = new Sphere();


            {
                Material m = new Material();
                m.Pattern   = new StripePattern(white, black);
                m.Ambient   = new Color(1, 1, 1);
                m.Diffuse   = new Color(0, 0, 0);
                m.Specular  = new Color(0, 0, 0);
                m.Shininess = 0;
                RayTracerLib.Vector eyev    = new RayTracerLib.Vector(0, 0, -1);
                RayTracerLib.Vector normalv = new RayTracerLib.Vector(0, 0, -1);
                Point      p1    = new Point(0.9, 0, 0);
                Point      p2    = new Point(1.1, 0, 0);
                LightPoint light = new LightPoint(new Point(0, 0, -10), new Color(1, 1, 1));
                Color      c1    = Ops.Lighting(m, s, light, p1, eyev, normalv, false);
                Color      c2    = Ops.Lighting(m, s, light, p2, eyev, normalv, false);
                bool       foo1  = (c1.Equals(white));
                bool       foo2  = (c2.Equals(black));
                Console.WriteLine("~~~~~~~~~~~~~~~~~~~~~");
            }
            //public void PatternWithObjectTransformation()

            {
                Shape shape = new Sphere()
                {
                    Transform = MatrixOps.CreateScalingTransform(2, 2, 2)
                };
                Pattern pattern = new TestPattern {
                    Transform = MatrixOps.CreateTranslationTransform(0.5, 1, 1.5)
                };
                Color c    = pattern.PatternAtObject(shape, new Point(2.5, 3, 3.5));
                bool  foo1 = (c.Equals(new Color(0.75, 0.5, 0.25)));

                Console.WriteLine("~~~~~~~~~~~~~~~~~~~~~");
            }

            //public void GradientInterpolates()
            {
                Pattern pattern = new GradientPattern(black, white);
                bool    foo1    = (pattern.PatternAt(new Point(0, 0, 0)).Equals(black));
                bool    foo2    = (pattern.PatternAt(new Point(0.25, 0, 0)).Equals(new Color(0.25, 0.25, 0.25)));
                bool    foo3    = (pattern.PatternAt(new Point(0.5, 0, 0)).Equals(new Color(0.5, 0.5, 0.5)));
                bool    foo4    = (pattern.PatternAt(new Point(0.75, 0, 0)).Equals(new Color(0.75, 0.75, 0.75)));

                Console.WriteLine("~~~~~~~~~~~~~~~~~~~~~");
            }
            {
                Pattern pattern = new CheckedPattern(black, white);
                bool    foo1    = (pattern.PatternAt(new Point(0, 0, 0)).Equals(black));
                bool    foo2    = (pattern.PatternAt(new Point(0.99, 0, 0)).Equals(black));
                bool    foo3    = (pattern.PatternAt(new Point(1.01, 0, 0)).Equals(white));

                Console.WriteLine("~~~~~~~~~~~~~~~~~~~~~");
            }
            Console.Write("Press Enter to finish ... ");
            Console.Read();
        }
Пример #22
0
        private void CmbPatternTypeSelectedIndexChanged(object sender, EventArgs e)
        {
            if ((string)cmbPatternType.SelectedItem == "Simple")
            {
                if (tabPatternProperties.TabPages.Contains(tabPicture))
                {
                    tabPatternProperties.TabPages.Remove(tabPicture);
                }

                if (tabPatternProperties.TabPages.Contains(tabGradient))
                {
                    tabPatternProperties.TabPages.Remove(tabGradient);
                }

                if (tabPatternProperties.TabPages.Contains(tabHatch))
                {
                    tabPatternProperties.TabPages.Remove(tabHatch);
                }

                if (tabPatternProperties.TabPages.Contains(tabSimple) == false)
                {
                    tabPatternProperties.TabPages.Add(tabSimple);
                    tabPatternProperties.SelectedTab = tabSimple;
                }
            }

            if ((string)cmbPatternType.SelectedItem == "Picture")
            {
                if (tabPatternProperties.TabPages.Contains(tabSimple))
                {
                    tabPatternProperties.TabPages.Remove(tabSimple);
                }

                if (tabPatternProperties.TabPages.Contains(tabGradient))
                {
                    tabPatternProperties.TabPages.Remove(tabGradient);
                }

                if (tabPatternProperties.TabPages.Contains(tabHatch))
                {
                    tabPatternProperties.TabPages.Remove(tabHatch);
                }

                if (tabPatternProperties.TabPages.Contains(tabPicture) == false)
                {
                    tabPatternProperties.TabPages.Add(tabPicture);
                    tabPatternProperties.SelectedTab = tabPicture;
                }
            }

            if ((string)cmbPatternType.SelectedItem == "Gradient")
            {
                if (tabPatternProperties.TabPages.Contains(tabSimple))
                {
                    tabPatternProperties.TabPages.Remove(tabSimple);
                }

                if (tabPatternProperties.TabPages.Contains(tabPicture))
                {
                    tabPatternProperties.TabPages.Remove(tabPicture);
                }

                if (tabPatternProperties.TabPages.Contains(tabHatch))
                {
                    tabPatternProperties.TabPages.Remove(tabHatch);
                }

                if (tabPatternProperties.TabPages.Contains(tabGradient) == false)
                {
                    tabPatternProperties.TabPages.Add(tabGradient);
                    tabPatternProperties.SelectedTab = tabGradient;
                }
            }

            if ((string)cmbPatternType.SelectedItem == "Hatch")
            {
                if (tabPatternProperties.TabPages.Contains(tabSimple))
                {
                    tabPatternProperties.TabPages.Remove(tabSimple);
                }

                if (tabPatternProperties.TabPages.Contains(tabPicture))
                {
                    tabPatternProperties.TabPages.Remove(tabPicture);
                }

                if (tabPatternProperties.TabPages.Contains(tabGradient))
                {
                    tabPatternProperties.TabPages.Remove(tabGradient);
                }

                if (tabPatternProperties.TabPages.Contains(tabHatch) == false)
                {
                    tabPatternProperties.TabPages.Add(tabHatch);
                    tabPatternProperties.SelectedTab = tabHatch;
                }
            }

            if (_ignoreChanges)
            {
                return;
            }

            int index = ccPatterns.Patterns.IndexOf(ccPatterns.SelectedPattern);

            if (index == -1)
            {
                return;
            }

            IPattern oldPattern = ccPatterns.SelectedPattern;

            if ((string)cmbPatternType.SelectedItem == "Simple")
            {
                SimplePattern sp = new SimplePattern();
                if (oldPattern != null)
                {
                    sp.CopyOutline(oldPattern);
                }
                ccPatterns.Patterns[index] = sp;
                ccPatterns.RefreshList();
                ccPatterns.SelectedPattern = sp;
                UpdateSimplePatternControls(sp);
            }

            if ((string)cmbPatternType.SelectedItem == "Picture")
            {
                PicturePattern pp = new PicturePattern();
                if (oldPattern != null)
                {
                    pp.CopyOutline(oldPattern);
                }
                ccPatterns.Patterns[index] = pp;
                ccPatterns.RefreshList();
                ccPatterns.SelectedPattern = pp;
                UpdatePicturePatternControls(pp);
            }

            if ((string)cmbPatternType.SelectedItem == "Gradient")
            {
                GradientPattern gp = new GradientPattern();
                if (oldPattern != null)
                {
                    gp.CopyOutline(oldPattern);
                }
                ccPatterns.Patterns[index] = gp;
                ccPatterns.RefreshList();
                ccPatterns.SelectedPattern = gp;
                UpdateGradientPatternControls(gp);
            }

            if ((string)cmbPatternType.SelectedItem == "Hatch")
            {
                HatchPattern hp = new HatchPattern();
                if (oldPattern != null)
                {
                    hp.CopyOutline(oldPattern);
                }
                ccPatterns.Patterns[index] = hp;
                ccPatterns.RefreshList();
                ccPatterns.SelectedPattern = hp;
            }
        }
 public void Given_gradient_pattern(string id, string aId, string bId)
 {
     patterns[id] = new GradientPattern(colors[aId], colors[bId]);
 }