Esempio n. 1
0
        /// <summary>
        /// This is the method that actually does the work.
        /// </summary>
        /// <param name="DA">The DA object is used to retrieve from inputs and store in outputs.</param>
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            // Declare variables
            IGH_Goo       X = null;
            List <int>    M = new List <int>();
            List <double> V = new List <double>();
            List <Color>  C = new List <Color>();

            // Access the input parameters
            if (!DA.GetData(0, ref X))
            {
                return;
            }
            if (!DA.GetDataList(1, M))
            {
                return;
            }
            if (!DA.GetDataList(2, V))
            {
                return;
            }
            if (!DA.GetDataList(3, C))
            {
                return;
            }

            int total = M.Count;

            if (V.Count > total)
            {
                total = V.Count;
            }
            if (C.Count > total)
            {
                total = C.Count;
            }

            int i = 0;
            int j = M.Count;

            for (i = j; i < total; i++)
            {
                M.Add(M[j - 1]);
            }

            j = V.Count;
            for (i = j; i < total; i++)
            {
                V.Add(V[j - 1]);
            }

            j = C.Count;
            for (i = j; i < total; i++)
            {
                C.Add(C[j - 1]);
            }

            wObject Z = new wObject();

            if (X != null)
            {
                X.CastTo(out Z);
            }
            mLayer L = new mLayer((mLayer)Z.Element);

            List <mModifier> modifiers = new List <mModifier>();

            foreach (mModifier mm in L.Modifiers)
            {
                modifiers.Add(mm);
            }

            int[] Ma = M.ToArray();

            string tID = String.Join("~", Ma);

            if (tID != ID)
            {
                Array.Sort(Ma);
                Array.Reverse(Ma);
                int Mi = Ma[0];

                ModeIndex = Ma;
                UpdateMessage();

                if (Mi < 4)
                {
                    Params.Input[2].NickName = "-";
                }
                else
                {
                    Params.Input[2].NickName = "V";
                }
                if (Mi < 9)
                {
                    Params.Input[3].NickName = "-";
                }
                else
                {
                    Params.Input[3].NickName = "C";
                }
                if (Mi < 9)
                {
                    Params.Input[3].Description = "Not used by this filter";
                }
                else
                {
                    Params.Input[3].Description = "Color";
                }
            }

            //L.Modifiers.Clear();

            for (i = 0; i < M.Count; i++)
            {
                mModifier modifier = null;
                switch (M[i])
                {
                case 0:    //Invert
                    modifier = new mModifyInvert();
                    break;

                case 1:    //Solarize
                    modifier = new mModifySolarize();
                    break;

                case 2:    //Grayscale
                    modifier = new mModifyGrayscale();
                    break;

                case 3:    //Vignette
                    modifier = new mModifyVignette();
                    break;

                case 4:    //Emboss
                    modifier = new mModifyEmboss((float)V[i]);
                    break;

                case 5:    //Brightness
                    modifier = new mModifyBrightness((int)V[i]);
                    break;

                case 6:    //Contrast
                    modifier = new mModifyContrast((int)V[i]);
                    break;

                case 7:    //Feather
                    modifier = new mModifyFeather((int)V[i]);
                    break;

                case 8:    //Gaussian
                    modifier = new mModifyGaussian(1 + (int)V[i]);
                    break;

                case 9:    //Border
                    modifier = new mModifyGaussian((int)V[i]);
                    break;

                case 10:    //Tint
                    modifier = new mModifyColorTint(new Wind.Types.wColor(C[i].A, C[i].R, C[i].G, C[i].B), (int)V[i]);
                    break;
                }
                modifiers.Add(modifier);
            }

            L.Modifiers = modifiers;

            wObject W = new wObject(L, "Macaw", L.Type);


            DA.SetData(0, W);
            DA.SetData(1, L.Modifiers.Count);
        }
Esempio n. 2
0
 public void AddFilter(mModifier Modifier)
 {
     Modifiers.Add(Modifier);
 }