override public List <List <Property> > ApplySpecialProperties(ModelGroup test, List <List <Property> > combos)
        {
            // Adding a line to show the version being set in the empty set model and the extension model
            var currentVersion = properties.Find(e => e.name == Propertyname.Version_Current);

            combos[0].Add(currentVersion);
            combos[5].Add(currentVersion);

            // Replace the full set with the 'Version + Fake Feature' set
            var setToAdd = ComboHelper.CustomComboCreation(
                properties.Find(e => e.name == Propertyname.Version),
                properties.Find(e => e.name == Propertyname.Description_AtRoot));

            combos[1] = (setToAdd);

            // Show if each model is expected to load or not
            var willLoad         = properties.Find(e => e.name == Propertyname.ModelShouldLoad_InCurrent);
            var willLoadInFuture = properties.Find(e => e.name == Propertyname.ModelShouldLoad_InFuture);
            var wontLoad         = properties.Find(e => e.name == Propertyname.ModelShouldLoad_No);

            combos[0].Add(willLoad);
            combos[1].Add(willLoad);
            combos[2].Add(willLoad);
            combos[3].Add(willLoad);
            combos[4].Add(willLoadInFuture);
            combos[5].Add(wontLoad);

            return(combos);
        }
        public Compatibility(List <string> imageList) : base(imageList)
        {
            modelGroupName       = ModelGroupName.Compatibility;
            onlyBinaryProperties = false;
            noPrerequisite       = false;
            noSampleImages       = true;

            properties = new List <Property>
            {
                new Property(Propertyname.MinVersion, "2.1"),
                new Property(Propertyname.Version, "2.1", group: 1),
                new Property(Propertyname.Version_Current, "2.0", group: 1),
                new Property(Propertyname.Description_AtRoot, "Light object added at root", group: 2),
                new Property(Propertyname.Description_InProperty, "Light property added to node object", group: 2),
                new Property(Propertyname.Description_WithFallback, "Alpha mode updated with a new enum value, and a fallback value", group: 2),
                new Property(Propertyname.Description_RequiresVersion, "Requires a specific version or higher", group: 2),
                new Property(Propertyname.Description_ExtensionRequired, "Extension required", group: 2),
                new Property(Propertyname.ModelShouldLoad_InCurrent, ":white_check_mark:", group: 3),
                new Property(Propertyname.ModelShouldLoad_InFuture, "Only in version 2.1 or higher", group: 3),
                new Property(Propertyname.ModelShouldLoad_No, ":x:", group: 3),
            };
            specialProperties = new List <Property>
            {
                new Property(Propertyname.AlphaMode_Blend, glTFLoader.Schema.Material.AlphaModeEnum.BLEND),
            };
            specialCombos.Add(ComboHelper.CustomComboCreation(
                                  properties.Find(e => e.name == Propertyname.Description_RequiresVersion),
                                  properties.Find(e => e.name == Propertyname.Version),
                                  properties.Find(e => e.name == Propertyname.MinVersion)));
            specialCombos.Add(ComboHelper.CustomComboCreation(
                                  properties.Find(e => e.name == Propertyname.Version),
                                  properties.Find(e => e.name == Propertyname.Description_WithFallback),
                                  specialProperties.Find(e => e.name == Propertyname.AlphaMode_Blend)));
            specialCombos.Add(ComboHelper.CustomComboCreation(
                                  properties.Find(e => e.name == Propertyname.Version),
                                  properties.Find(e => e.name == Propertyname.Description_InProperty)));
            removeCombos.Add(ComboHelper.CustomComboCreation(
                                 properties.Find(e => e.name == Propertyname.MinVersion)));
            removeCombos.Add(ComboHelper.CustomComboCreation(
                                 properties.Find(e => e.name == Propertyname.Version)));
            removeCombos.Add(ComboHelper.CustomComboCreation(
                                 properties.Find(e => e.name == Propertyname.Version_Current)));
            removeCombos.Add(ComboHelper.CustomComboCreation(
                                 properties.Find(e => e.name == Propertyname.Description_AtRoot)));
            removeCombos.Add(ComboHelper.CustomComboCreation(
                                 properties.Find(e => e.name == Propertyname.Description_InProperty)));
            removeCombos.Add(ComboHelper.CustomComboCreation(
                                 properties.Find(e => e.name == Propertyname.Description_WithFallback)));
            removeCombos.Add(ComboHelper.CustomComboCreation(
                                 properties.Find(e => e.name == Propertyname.Description_RequiresVersion)));
            removeCombos.Add(ComboHelper.CustomComboCreation(
                                 properties.Find(e => e.name == Propertyname.ModelShouldLoad_InCurrent)));
            removeCombos.Add(ComboHelper.CustomComboCreation(
                                 properties.Find(e => e.name == Propertyname.ModelShouldLoad_InFuture)));
            removeCombos.Add(ComboHelper.CustomComboCreation(
                                 properties.Find(e => e.name == Propertyname.ModelShouldLoad_No)));
        }
        public Material_SpecularGlossiness(List <string> textures, List <string> figures) : base(textures, figures)
        {
            modelGroupName       = ModelGroupName.Material_SpecularGlossiness;
            onlyBinaryProperties = false;
            var diffuseTexture = new Runtime.Image
            {
                Uri = textures.Find(e => e.Contains("Diffuse_Plane"))
            };
            var specularGlossinessTexture = new Runtime.Image
            {
                Uri = textures.Find(e => e.Contains("SpecularGlossiness_Plane"))
            };
            var baseColorTexture = new Runtime.Image
            {
                Uri = textures.Find(e => e.Contains("BaseColor_X"))
            };

            usedTextures.Add(diffuseTexture);
            usedTextures.Add(specularGlossinessTexture);
            usedTextures.Add(baseColorTexture);
            var colorCoord = new List <Vector4>()
            {
                new Vector4(0.0f, 0.0f, 1.0f, 0.8f),
                new Vector4(1.0f, 0.0f, 0.0f, 0.8f),
                new Vector4(0.0f, 0.0f, 1.0f, 0.8f),
                new Vector4(1.0f, 0.0f, 0.0f, 0.8f)
            };

            requiredProperty = new List <Property>
            {
                new Property(Propertyname.ExtensionUsed_SpecularGlossiness, "Specular Glossiness", group: 3),
                new Property(Propertyname.BaseColorTexture, baseColorTexture)
            };
            properties = new List <Property>
            {
                new Property(Propertyname.VertexColor_Vector3_Float, colorCoord, group: 2),
                new Property(Propertyname.DiffuseTexture, diffuseTexture),
                new Property(Propertyname.DiffuseFactor, new Vector4(0.2f, 0.2f, 0.2f, 0.8f)),
                new Property(Propertyname.SpecularFactor, new Vector3(0.4f, 0.4f, 0.4f), group: 1),
                new Property(Propertyname.SpecularFactor_Override, new Vector3(0.0f, 0.0f, 0.0f), group: 1),
                new Property(Propertyname.GlossinessFactor, 0.3f),
                new Property(Propertyname.SpecularGlossinessTexture, specularGlossinessTexture),
            };
            specialCombos.Add(ComboHelper.CustomComboCreation(
                                  properties.Find(e => e.name == Propertyname.DiffuseFactor),
                                  properties.Find(e => e.name == Propertyname.DiffuseTexture)));
            specialCombos.Add(ComboHelper.CustomComboCreation(
                                  properties.Find(e => e.name == Propertyname.SpecularGlossinessTexture),
                                  properties.Find(e => e.name == Propertyname.SpecularFactor)));
            specialCombos.Add(ComboHelper.CustomComboCreation(
                                  properties.Find(e => e.name == Propertyname.SpecularGlossinessTexture),
                                  properties.Find(e => e.name == Propertyname.GlossinessFactor)));
            removeCombos.Add(ComboHelper.CustomComboCreation(
                                 properties.Find(e => e.name == Propertyname.SpecularFactor_Override)));
        }
Exemple #4
0
        public Material(List <string> textures, List <string> figures) : base(textures, figures)
        {
            modelGroupName       = ModelGroupName.Material;
            onlyBinaryProperties = false;
            noPrerequisite       = false;
            Runtime.Image emissiveTexture = new Runtime.Image
            {
                Uri = textures.Find(e => e.Contains("Emissive_Plane"))
            };
            Runtime.Image normalTexture = new Runtime.Image
            {
                Uri = textures.Find(e => e.Contains("Normal_Plane"))
            };
            Runtime.Image occlusionTexture = new Runtime.Image
            {
                Uri = textures.Find(e => e.Contains("Occlusion_Plane"))
            };
            usedTextures.Add(emissiveTexture);
            usedTextures.Add(normalTexture);
            usedTextures.Add(occlusionTexture);
            List <Vector3> planeNormals = new List <Vector3>()
            {
                new Vector3(0.0f, 0.0f, 1.0f),
                new Vector3(0.0f, 0.0f, 1.0f),
                new Vector3(0.0f, 0.0f, 1.0f),
                new Vector3(0.0f, 0.0f, 1.0f)
            };

            requiredProperty = new List <Property>
            {
                new Property(Propertyname.MetallicFactor, 0.0f),
                new Property(Propertyname.BaseColorFactor, new Vector4(0.2f, 0.2f, 0.2f, 1.0f)),
            };
            properties = new List <Property>
            {
                new Property(Propertyname.EmissiveFactor, new Vector3(1.0f, 1.0f, 1.0f)),
                new Property(Propertyname.EmissiveTexture, emissiveTexture),
                new Property(Propertyname.NormalTexture, normalTexture),
                new Property(Propertyname.Scale, 10.0f, Propertyname.NormalTexture),
                new Property(Propertyname.OcclusionTexture, occlusionTexture),
                new Property(Propertyname.Strength, 0.5f, Propertyname.OcclusionTexture)
            };
            specialProperties = new List <Property>
            {
                new Property(Propertyname.VertexNormal, planeNormals),
            };
            specialCombos.Add(ComboHelper.CustomComboCreation(
                                  properties.Find(e => e.name == Propertyname.EmissiveFactor),
                                  properties.Find(e => e.name == Propertyname.EmissiveTexture)));
            removeCombos.Add(ComboHelper.CustomComboCreation(
                                 properties.Find(e => e.name == Propertyname.EmissiveTexture)));
        }
Exemple #5
0
        public Material_MetallicRoughness(List <string> textures, List <string> figures) : base(textures, figures)
        {
            modelGroupName       = ModelGroupName.Material_MetallicRoughness;
            onlyBinaryProperties = false;
            Runtime.Image baseColorTexture = new Runtime.Image
            {
                Uri = textures.Find(e => e.Contains("BaseColor_Plane"))
            };
            Runtime.Image metallicRoughnessTexture = new Runtime.Image
            {
                Uri = textures.Find(e => e.Contains("MetallicRoughness_Plane"))
            };
            usedTextures.Add(baseColorTexture);
            usedTextures.Add(metallicRoughnessTexture);
            List <Vector4> colorCoord = new List <Vector4>()
            {
                new Vector4(0.0f, 0.0f, 1.0f, 0.8f),
                new Vector4(1.0f, 0.0f, 0.0f, 0.8f),
                new Vector4(0.0f, 0.0f, 1.0f, 0.8f),
                new Vector4(1.0f, 0.0f, 0.0f, 0.8f)
            };

            properties = new List <Property>
            {
                new Property(Propertyname.VertexColor_Vector3_Float, colorCoord, group: 2),
                new Property(Propertyname.BaseColorTexture, baseColorTexture),
                new Property(Propertyname.BaseColorFactor, new Vector4(0.2f, 0.2f, 0.2f, 0.8f)),
                new Property(Propertyname.MetallicFactor, 0.0f),
                new Property(Propertyname.RoughnessFactor, 0.0f),
                new Property(Propertyname.MetallicRoughnessTexture, metallicRoughnessTexture),
            };
            // Not called explicitly, but values are required here to run ApplySpecialProperties
            specialProperties = new List <Property>
            {
                new Property(Propertyname.VertexColor_Vector3_Float, colorCoord, group: 2),
            };
            specialCombos.Add(ComboHelper.CustomComboCreation(
                                  properties.Find(e => e.name == Propertyname.BaseColorFactor),
                                  properties.Find(e => e.name == Propertyname.BaseColorTexture)));
            specialCombos.Add(ComboHelper.CustomComboCreation(
                                  properties.Find(e => e.name == Propertyname.MetallicRoughnessTexture),
                                  properties.Find(e => e.name == Propertyname.MetallicFactor)));
            specialCombos.Add(ComboHelper.CustomComboCreation(
                                  properties.Find(e => e.name == Propertyname.MetallicRoughnessTexture),
                                  properties.Find(e => e.name == Propertyname.RoughnessFactor)));
        }
        public Mesh_Indices(List <string> textures, List <string> figures) : base(textures, figures)
        {
            modelGroupName       = ModelGroupName.Mesh_Indices;
            onlyBinaryProperties = false;
            noPrerequisite       = false;
            Runtime.Image figureIndices = new Runtime.Image
            {
                Uri = figures.Find(e => e.Contains("Indices"))
            };
            usedFigures.Add(figureIndices);
            List <Vector3> noIndicesPositionsTriangles = new List <Vector3>()
            {
                new Vector3(-0.5f, -0.5f, 0.0f),
                new Vector3(0.5f, -0.5f, 0.0f),
                new Vector3(0.5f, 0.5f, 0.0f),
                new Vector3(-0.5f, -0.5f, 0.0f),
                new Vector3(0.5f, 0.5f, 0.0f),
                new Vector3(-0.5f, 0.5f, 0.0f),
            };
            List <Vector3> noIndicesPositionsLines = new List <Vector3>()
            {
                new Vector3(0.5f, -0.5f, 0.0f),
                new Vector3(0.5f, 0.5f, 0.0f),
                new Vector3(0.5f, 0.5f, 0.0f),
                new Vector3(-0.5f, 0.5f, 0.0f),
                new Vector3(-0.5f, 0.5f, 0.0f),
                new Vector3(-0.5f, -0.5f, 0.0f),
                new Vector3(-0.5f, -0.5f, 0.0f),
                new Vector3(0.5f, -0.5f, 0.0f),
            };
            List <Vector3> noIndicesPositionsLineloopPointsFan = new List <Vector3>()
            {
                new Vector3(0.5f, -0.5f, 0.0f),
                new Vector3(0.5f, 0.5f, 0.0f),
                new Vector3(-0.5f, 0.5f, 0.0f),
                new Vector3(-0.5f, -0.5f, 0.0f),
            };
            List <Vector3> noIndicesPositionsLineStrip = new List <Vector3>()
            {
                new Vector3(0.5f, -0.5f, 0.0f),
                new Vector3(0.5f, 0.5f, 0.0f),
                new Vector3(-0.5f, 0.5f, 0.0f),
                new Vector3(-0.5f, -0.5f, 0.0f),
                new Vector3(0.5f, -0.5f, 0.0f),
            };
            List <Vector3> noIndicesPositionsTrianglestrip = new List <Vector3>()
            {
                new Vector3(0.5f, -0.5f, 0.0f),
                new Vector3(0.5f, 0.5f, 0.0f),
                new Vector3(-0.5f, -0.5f, 0.0f),
                new Vector3(-0.5f, 0.5f, 0.0f),
            };

            Runtime.GLTF defaultModel        = Common.SinglePlane(); // Only used to get the default indices
            List <int>   defaultModelIndices = new List <int>(defaultModel.Scenes[0].Nodes[0].Mesh.MeshPrimitives[0].Indices);
            List <int>   linesIndices        = new List <int>
            {
                0, 3, 3, 2, 2, 1, 1, 0,
            };
            List <int> lineloopPointsFanIndices = new List <int>
            {
                0, 3, 2, 1,
            };
            List <int> linestripIndices = new List <int>
            {
                0, 3, 2, 1, 0,
            };
            List <int> trianglestripIndices = new List <int>
            {
                0, 3, 1, 2,
            };
            List <Vector4> vertexColors = new List <Vector4>()
            {
                new Vector4(0.0f, 1.0f, 0.0f, 0.2f),
                new Vector4(1.0f, 0.0f, 0.0f, 0.2f),
                new Vector4(0.0f, 0.0f, 1.0f, 0.2f)
            };

            properties = new List <Property>
            {
                new Property(Propertyname.Mode_Points, Runtime.MeshPrimitive.ModeEnum.POINTS, group: 1),
                new Property(Propertyname.Mode_Lines, Runtime.MeshPrimitive.ModeEnum.LINES, group: 1),
                new Property(Propertyname.Mode_Line_Loop, Runtime.MeshPrimitive.ModeEnum.LINE_LOOP, group: 1),
                new Property(Propertyname.Mode_Line_Strip, Runtime.MeshPrimitive.ModeEnum.LINE_STRIP, group: 1),
                new Property(Propertyname.Mode_Triangle_Strip, Runtime.MeshPrimitive.ModeEnum.TRIANGLE_STRIP, group: 1),
                new Property(Propertyname.Mode_Triangle_Fan, Runtime.MeshPrimitive.ModeEnum.TRIANGLE_FAN, group: 1),
                new Property(Propertyname.Mode_Triangles, Runtime.MeshPrimitive.ModeEnum.TRIANGLES, group: 1),
                new Property(Propertyname.IndicesValues_Points, lineloopPointsFanIndices, Propertyname.Mode_Points, group: 2),
                new Property(Propertyname.IndicesValues_Lines, linesIndices, Propertyname.Mode_Lines, group: 2),
                new Property(Propertyname.IndicesValues_LineLoop, lineloopPointsFanIndices, Propertyname.Mode_Line_Loop, group: 2),
                new Property(Propertyname.IndicesValues_LineStrip, linestripIndices, Propertyname.Mode_Line_Strip, group: 2),
                new Property(Propertyname.IndicesValues_TriangleStrip, trianglestripIndices, Propertyname.Mode_Triangle_Strip, group: 2),
                new Property(Propertyname.IndicesValues_TriangleFan, lineloopPointsFanIndices, Propertyname.Mode_Triangle_Fan, group: 2),
                new Property(Propertyname.IndicesValues_Triangles, defaultModelIndices, Propertyname.Mode_Triangles, group: 2),
                new Property(Propertyname.IndicesValues_None, " ", group: 2),
                new Property(Propertyname.IndicesComponentType_Byte, Runtime.MeshPrimitive.IndexComponentTypeEnum.UNSIGNED_BYTE, group: 4),
                new Property(Propertyname.IndicesComponentType_Short, Runtime.MeshPrimitive.IndexComponentTypeEnum.UNSIGNED_SHORT, group: 4),
                new Property(Propertyname.IndicesComponentType_Int, Runtime.MeshPrimitive.IndexComponentTypeEnum.UNSIGNED_INT, group: 4),
                new Property(Propertyname.IndicesComponentType_None, " ", group: 4),
            };
            specialProperties = new List <Property>
            {
                new Property(Propertyname.VertexColor_Vector4_Float, vertexColors),
                new Property(Propertyname.Mode_Points, noIndicesPositionsLineloopPointsFan, group: 1),
                new Property(Propertyname.Mode_Lines, noIndicesPositionsLines, group: 1),
                new Property(Propertyname.Mode_Line_Loop, noIndicesPositionsLineloopPointsFan, group: 1),
                new Property(Propertyname.Mode_Line_Strip, noIndicesPositionsLineStrip, group: 1),
                new Property(Propertyname.Mode_Triangle_Strip, noIndicesPositionsTrianglestrip, group: 1),
                new Property(Propertyname.Mode_Triangle_Fan, noIndicesPositionsLineloopPointsFan, group: 1),
                new Property(Propertyname.Mode_Triangles, noIndicesPositionsTriangles, group: 1),
            };
            // Each mode with and without indices, and drop singles
            var defaultIndices = properties.Find(e => e.name == Propertyname.IndicesComponentType_Int);
            var noIndicesType  = properties.Find(e => e.name == Propertyname.IndicesComponentType_None);
            var noIndicesValue = properties.Find(e => e.name == Propertyname.IndicesValues_None);

            foreach (var property in properties)
            {
                if (property.propertyGroup == 1)
                {
                    var IndicesValues = properties.Find(e => e.prerequisite == property.name);
                    specialCombos.Add(ComboHelper.CustomComboCreation(
                                          property,
                                          defaultIndices,
                                          IndicesValues));
                    specialCombos.Add(ComboHelper.CustomComboCreation(
                                          property,
                                          noIndicesValue,
                                          noIndicesType));
                }
                removeCombos.Add(ComboHelper.CustomComboCreation(
                                     property));
            }
            specialCombos.Add(ComboHelper.CustomComboCreation(
                                  properties.Find(e => e.name == Propertyname.IndicesValues_Triangles),
                                  properties.Find(e => e.name == Propertyname.IndicesComponentType_Byte),
                                  properties.Find(e => e.name == Propertyname.Mode_Triangles)));
            specialCombos.Add(ComboHelper.CustomComboCreation(
                                  properties.Find(e => e.name == Propertyname.IndicesValues_Triangles),
                                  properties.Find(e => e.name == Propertyname.IndicesComponentType_Short),
                                  properties.Find(e => e.name == Propertyname.Mode_Triangles)));
        }
        public Mesh_PrimitiveMode(List <string> imageList) : base(imageList)
        {
            modelGroupName       = ModelGroupName.Mesh_PrimitiveMode;
            onlyBinaryProperties = false;
            noPrerequisite       = false;

            Runtime.Image figureIndices = new Runtime.Image
            {
                Uri = imageList.Find(e => e.Contains("Indices"))
            };
            Runtime.Image figurePointsIndices = new Runtime.Image
            {
                Uri = imageList.Find(e => e.Contains("Indices_Points"))
            };
            //Runtime.Image normalTexture = new Runtime.Image
            //{
            //    Uri = textures.Find(e => e.Contains("Normal_Plane"))
            //};
            //usedTextures.Add(normalTexture);
            usedFigures.Add(figureIndices);
            usedFigures.Add(figurePointsIndices);

            List <Vector3> noIndicesPositionsTriangles = new List <Vector3>()
            {
                new Vector3(-0.5f, -0.5f, 0.0f),
                new Vector3(0.5f, -0.5f, 0.0f),
                new Vector3(0.5f, 0.5f, 0.0f),
                new Vector3(-0.5f, -0.5f, 0.0f),
                new Vector3(0.5f, 0.5f, 0.0f),
                new Vector3(-0.5f, 0.5f, 0.0f),
            };
            List <Vector3> noIndicesPositionsLines = new List <Vector3>()
            {
                new Vector3(0.5f, -0.5f, 0.0f),
                new Vector3(-0.5f, -0.5f, 0.0f),
                new Vector3(-0.5f, -0.5f, 0.0f),
                new Vector3(-0.5f, 0.5f, 0.0f),
                new Vector3(-0.5f, 0.5f, 0.0f),
                new Vector3(0.5f, 0.5f, 0.0f),
                new Vector3(0.5f, 0.5f, 0.0f),
                new Vector3(0.5f, -0.5f, 0.0f),
            };
            List <Vector3> noIndicesPositionsLineloopFan = new List <Vector3>()
            {
                new Vector3(0.5f, -0.5f, 0.0f),
                new Vector3(0.5f, 0.5f, 0.0f),
                new Vector3(-0.5f, 0.5f, 0.0f),
                new Vector3(-0.5f, -0.5f, 0.0f),
            };

            // Make a list of verticies for points with 1024 values
            List <Vector3> noIndicesPositionsPoints = new List <Vector3>();
            List <Vector3> cornerPoints             = new List <Vector3>()
            {
                new Vector3(0.5f, -0.5f, 0.0f),
                new Vector3(-0.5f, -0.5f, 0.0f),
                new Vector3(-0.5f, 0.5f, 0.0f),
                new Vector3(0.5f, 0.5f, 0.0f),
                new Vector3(0.5f, -0.5f, 0.0f)
            };

            for (int corner = 0; corner < 4; corner++)
            {
                for (int x = 256; x > 0; x--)
                {
                    Vector3 startPoint     = cornerPoints[corner];
                    Vector3 endPoint       = cornerPoints[corner + 1];
                    float   fractionOfLine = (float)x / 256f;
                    noIndicesPositionsPoints.Add(PointOnLine.FindPoint(startPoint, endPoint, fractionOfLine));
                }
            }

            List <Vector3> noIndicesPositionsLineStrip = new List <Vector3>()
            {
                new Vector3(0.5f, -0.5f, 0.0f),
                new Vector3(0.5f, 0.5f, 0.0f),
                new Vector3(-0.5f, 0.5f, 0.0f),
                new Vector3(-0.5f, -0.5f, 0.0f),
                new Vector3(0.5f, -0.5f, 0.0f),
            };
            List <Vector3> noIndicesPositionsTrianglestrip = new List <Vector3>()
            {
                new Vector3(0.5f, -0.5f, 0.0f),
                new Vector3(0.5f, 0.5f, 0.0f),
                new Vector3(-0.5f, -0.5f, 0.0f),
                new Vector3(-0.5f, 0.5f, 0.0f),
            };

            Runtime.GLTF defaultModel        = Common.SinglePlane(); // Only used to get the default indices
            List <int>   defaultModelIndices = new List <int>(defaultModel.Scenes[0].Nodes[0].Mesh.MeshPrimitives[0].Indices);
            List <int>   linesIndices        = new List <int>
            {
                0, 3, 3, 2, 2, 1, 1, 0,
            };
            List <int> lineloopFanIndices = new List <int>
            {
                0, 3, 2, 1,
            };
            List <int> linestripIndices = new List <int>
            {
                0, 3, 2, 1, 0,
            };
            List <int> trianglestripIndices = new List <int>
            {
                0, 3, 1, 2,
            };
            List <int> pointsIndices = new List <int>();

            for (int x = 0; x < noIndicesPositionsPoints.Count; x++)
            {
                pointsIndices.Add(x);
            }

            //List<Vector2> pointsTextureCoords = new List<Vector2>()
            //{
            //    new Vector2(1.0f, 1.0f),
            //    new Vector2(0.75f, 1.0f),
            //    new Vector2(0.5f, 1.0f),
            //    new Vector2(0.25f, 1.0f),
            //    new Vector2(0.0f, 1.0f),
            //    new Vector2(0.0f, 0.75f),
            //    new Vector2(0.0f, 0.5f),
            //    new Vector2(0.0f, 0.25f),
            //    new Vector2(0.0f, 0.0f),
            //    new Vector2(0.25f, 0.0f),
            //    new Vector2(0.5f, 0.0f),
            //    new Vector2(0.75f, 0.0f),
            //    new Vector2(1.0f, 0.0f),
            //    new Vector2(1.0f, 0.25f),
            //    new Vector2(1.0f, 0.5f),
            //    new Vector2(1.0f, 0.75f),
            //};
            //List<Vector2> linesTextureCoords = new List<Vector2>()
            //{
            //    new Vector2(1.0f, 1.0f),
            //    new Vector2(0.0f, 1.0f),
            //    new Vector2(0.0f, 1.0f),
            //    new Vector2(0.0f, 0.0f),
            //    new Vector2(0.0f, 0.0f),
            //    new Vector2(1.0f, 0.0f),
            //    new Vector2(1.0f, 0.0f),
            //    new Vector2(1.0f, 1.0f),
            //};
            //List<List<Vector2>> textureCoords = new List<List<Vector2>>()
            //{
            //    pointsTextureCoords,
            //    linesTextureCoords
            //};
            //List<Vector3> normalsPoints = new List<Vector3>();
            //List<Vector4> tangentsPoints = new List<Vector4>();
            //for (int x = 0; x < 16; x++)
            //{
            //    normalsPoints.Add(new Vector3(0.0f, 0.0f, 1.0f));
            //    tangentsPoints.Add(new Vector4(1.0f, 0.0f, 0.0f, 1.0f));
            //}
            //List<Vector3> normalsLines = new List<Vector3>();
            //List<Vector4> tangentsLines = new List<Vector4>();
            //for (int x = 0; x < 8; x++)
            //{
            //    normalsLines.Add(new Vector3(0.0f, 0.0f, 1.0f));
            //    tangentsLines.Add(new Vector4(1.0f, 0.0f, 0.0f, 1.0f));
            //}
            //List<List<Vector3>> normals = new List<List<Vector3>>()
            //{
            //    normalsPoints,
            //    normalsLines
            //};
            //List<List<Vector4>> tangents = new List<List<Vector4>>()
            //{
            //    tangentsPoints,
            //    tangentsLines
            //};

            properties = new List <Property>
            {
                new Property(Propertyname.Mode_Points, Runtime.MeshPrimitive.ModeEnum.POINTS, group: 1),
                new Property(Propertyname.Mode_Lines, Runtime.MeshPrimitive.ModeEnum.LINES, group: 1),
                new Property(Propertyname.Mode_Line_Loop, Runtime.MeshPrimitive.ModeEnum.LINE_LOOP, group: 1),
                new Property(Propertyname.Mode_Line_Strip, Runtime.MeshPrimitive.ModeEnum.LINE_STRIP, group: 1),
                new Property(Propertyname.Mode_Triangle_Strip, Runtime.MeshPrimitive.ModeEnum.TRIANGLE_STRIP, group: 1),
                new Property(Propertyname.Mode_Triangle_Fan, Runtime.MeshPrimitive.ModeEnum.TRIANGLE_FAN, group: 1),
                new Property(Propertyname.Mode_Triangles, Runtime.MeshPrimitive.ModeEnum.TRIANGLES, group: 1),
                new Property(Propertyname.IndicesValues_Points, "[0 - 1023]", Propertyname.Mode_Points, group: 2),
                new Property(Propertyname.IndicesValues_Lines, linesIndices, Propertyname.Mode_Lines, group: 2),
                new Property(Propertyname.IndicesValues_LineLoop, lineloopFanIndices, Propertyname.Mode_Line_Loop, group: 2),
                new Property(Propertyname.IndicesValues_LineStrip, linestripIndices, Propertyname.Mode_Line_Strip, group: 2),
                new Property(Propertyname.IndicesValues_TriangleStrip, trianglestripIndices, Propertyname.Mode_Triangle_Strip, group: 2),
                new Property(Propertyname.IndicesValues_TriangleFan, lineloopFanIndices, Propertyname.Mode_Triangle_Fan, group: 2),
                new Property(Propertyname.IndicesValues_Triangles, defaultModelIndices, Propertyname.Mode_Triangles, group: 2),
                new Property(Propertyname.IndicesValues_None, " ", group: 2),
                new Property(Propertyname.IndicesComponentType_Byte, Runtime.MeshPrimitive.IndexComponentTypeEnum.UNSIGNED_BYTE, group: 4),
                new Property(Propertyname.IndicesComponentType_Short, Runtime.MeshPrimitive.IndexComponentTypeEnum.UNSIGNED_SHORT, group: 4),
                new Property(Propertyname.IndicesComponentType_Int, Runtime.MeshPrimitive.IndexComponentTypeEnum.UNSIGNED_INT, group: 4),
                new Property(Propertyname.IndicesComponentType_None, " ", group: 4),
                //new Property(Propertyname.VertexUV0_Float, ":white_check_mark:", group:5),
                //new Property(Propertyname.VertexNormal, ":white_check_mark:"),
                //new Property(Propertyname.VertexTangent, ":white_check_mark:"),
                //new Property(Propertyname.NormalTexture, normalTexture),
            };
            specialProperties = new List <Property>
            {
                //new Property(Propertyname.VertexUV0_Float, textureCoords, group:5),
                //new Property(Propertyname.VertexNormal, normals),
                //new Property(Propertyname.VertexTangent, tangents),
                new Property(Propertyname.Mode_Points, noIndicesPositionsPoints, group: 1),
                new Property(Propertyname.Mode_Lines, noIndicesPositionsLines, group: 1),
                new Property(Propertyname.Mode_Line_Loop, noIndicesPositionsLineloopFan, group: 1),
                new Property(Propertyname.Mode_Line_Strip, noIndicesPositionsLineStrip, group: 1),
                new Property(Propertyname.Mode_Triangle_Strip, noIndicesPositionsTrianglestrip, group: 1),
                new Property(Propertyname.Mode_Triangle_Fan, noIndicesPositionsLineloopFan, group: 1),
                new Property(Propertyname.Mode_Triangles, noIndicesPositionsTriangles, group: 1),
                new Property(Propertyname.IndicesValues_Points, pointsIndices, Propertyname.Mode_Points, group: 2),
            };
            // Each mode with and without indices, and drop singles
            var defaultIndices = properties.Find(e => e.name == Propertyname.IndicesComponentType_Int);
            var noIndicesType  = properties.Find(e => e.name == Propertyname.IndicesComponentType_None);
            var noIndicesValue = properties.Find(e => e.name == Propertyname.IndicesValues_None);

            foreach (var property in properties)
            {
                if (property.propertyGroup == 1)
                {
                    var IndicesValues = properties.Find(e => e.prerequisite == property.name);
                    specialCombos.Add(ComboHelper.CustomComboCreation(
                                          property,
                                          defaultIndices,
                                          IndicesValues));
                    specialCombos.Add(ComboHelper.CustomComboCreation(
                                          property,
                                          noIndicesValue,
                                          noIndicesType));
                }
                removeCombos.Add(ComboHelper.CustomComboCreation(
                                     property));
            }

            var valueTriangles = properties.Find(e => e.name == Propertyname.IndicesValues_Triangles);
            var modeTriangles  = properties.Find(e => e.name == Propertyname.Mode_Triangles);
            var modePoints     = properties.Find(e => e.name == Propertyname.Mode_Points);
            var modeLines      = properties.Find(e => e.name == Propertyname.Mode_Lines);
            var typeByte       = properties.Find(e => e.name == Propertyname.IndicesComponentType_Byte);
            var typeShort      = properties.Find(e => e.name == Propertyname.IndicesComponentType_Short);
            var vertexUV       = properties.Find(e => e.name == Propertyname.VertexUV0_Float);

            //var normal = properties.Find(e => e.name == Propertyname.VertexNormal);
            //var tangent = properties.Find(e => e.name == Propertyname.VertexTangent);
            //var normalTex = properties.Find(e => e.name == Propertyname.NormalTexture);
            specialCombos.Add(new List <Property>()
            {
                valueTriangles,
                typeByte,
                modeTriangles
            });
            specialCombos.Add(new List <Property>()
            {
                valueTriangles,
                typeShort,
                modeTriangles
            });
            //specialCombos.Add(new List<Property>()
            //{
            //    modePoints,
            //    noIndicesValue,
            //    noIndicesType,
            //    vertexUV,
            //    normal
            //});
            //specialCombos.Add(new List<Property>()
            //{
            //    modeLines,
            //    noIndicesValue,
            //    noIndicesType,
            //    vertexUV,
            //    normal
            //});
            //specialCombos.Add(new List<Property>()
            //{
            //    modeLines,
            //    noIndicesValue,
            //    noIndicesType,
            //    vertexUV,
            //    normal,
            //    tangent,
            //    normalTex
            //});
        }