コード例 #1
0
ファイル: TestObjects.cs プロジェクト: dotnet/wpf-test
        /// <summary/>
        public SceneTestObjects(Variation v)
            : base(v)
        {
            visual3Ds        = FactoryParser.MakeScene(v);
            camera           = FactoryParser.MakeCamera(v);
            camera.Transform = TransformFactory.MakeTransform(v["CameraTransform"]);

            ObjectUtils.NameObjects(visual3Ds);
        }
コード例 #2
0
ファイル: FactoryParser.cs プロジェクト: dotnet/wpf-test
        private static Model3DCollection MakeModelCollection(Variation v, string namePrefix)
        {
            // Meta-symbology:
            //  { }* == Klene star, or 0 or more occurrances of the stuff inside the brackets
            //  { }? == Optional, the stuff inside the brackets may or may not exist
            //  < >  == Description of what's parsed, the stuff inside the brackets is not a literal string

            // You can specify up to 10 children per model group (0-9)
            // namePrefix has format:  "Child{n}*"

            Model3DCollection collection = new Model3DCollection();

            for (int i = 0; i < 10; i++)
            {
                string modelName  = namePrefix + i.ToString();
                string modelValue = v[modelName];
                if (modelValue == null)
                {
                    break;
                }

                string materialName     = modelName.Replace("Child", "Material");
                string backMaterialName = modelName.Replace("Child", "BackMaterial");
                string transformName    = modelName.Replace("Child", "ModelTransform");

                try
                {
                    Model3D model = ModelFactory.MakeModel(modelValue);
                    if (model is GeometryModel3D)
                    {
                        Material front = MakeMaterial(v, materialName);
                        Material back  = MakeMaterial(v, backMaterialName);
                        if (front != null)
                        {
                            ((GeometryModel3D)model).Material = front;
                        }
                        ((GeometryModel3D)model).BackMaterial = back;
                    }
                    model.Transform = TransformFactory.MakeTransform(v[transformName]);

                    if (model is Model3DGroup && v[modelName + "0"] != null)
                    {
                        ((Model3DGroup)model).Children = MakeModelCollection(v, modelName);
                    }
                    collection.Add(model);
                }
                catch (ArgumentException)
                {
                    throw new ApplicationException("Confused by attribute (" + modelName + " = " + modelValue + ")");
                }
            }

            return(collection);
        }
コード例 #3
0
ファイル: FactoryParser.cs プロジェクト: dotnet/wpf-test
        private static Model3D MakeCustomModel3D(Variation v, string visualName)
        {
            string visualContent      = v[visualName];
            string materialName       = visualName.Replace("Visual", "Material");
            string backMaterialName   = visualName.Replace("Visual", "BackMaterial");
            string modelTransformName = visualName.Replace("Visual", "ModelTransform");
            string modelChildrenName  = visualName.Replace("Visual", "Child");

            Model3D model = ModelFactory.MakeModel(visualContent);

            if (model is GeometryModel3D)
            {
                // Material syntax is going to look a little wacky, but it's the easiest way to do this.
                //
                //      Material0="255,255,255,255"
                //      Material0Type="Specular"
                //      Material0Color="255,255,255,255"
                //      Material0AmbientColor="255,255,255,255"
                //      Material0SpecularPower="20"
                //

                Material front = MakeMaterial(v, materialName);
                if (front != null)
                {
                    ((GeometryModel3D)model).Material = front;
                }
                Material back = MakeMaterial(v, backMaterialName);
                if (back != null)
                {
                    ((GeometryModel3D)model).BackMaterial = back;
                }
            }
            model.Transform = TransformFactory.MakeTransform(v[modelTransformName]);

            if (model is Model3DGroup && v[modelChildrenName + "0"] != null)
            {
                ((Model3DGroup)model).Children = MakeModelCollection(v, modelChildrenName);
            }
            return(model);
        }
コード例 #4
0
ファイル: FactoryParser.cs プロジェクト: dotnet/wpf-test
        private static Visual3D MakeVisual3D(Variation v, string visualName)
        {
            string skipName            = visualName.Replace("Visual", "Skip");
            string skipType            = v[skipName] == null ? string.Empty : v[skipName];
            string visualType          = v[visualName.Replace("Visual", "VisualType")];
            string visualTransformName = visualName.Replace("Visual", "VisualTransform");

            Visual3D visual = null;

            if (visualType == null || visualType == "ModelVisual3D")
            {
                //Default V1 test codepath
                visual = MakeModelVisual3D(v, visualName);
                ((ModelVisual3D)visual).Transform = TransformFactory.MakeTransform(v[visualTransformName]);
            }

#if TARGET_NET3_5
            else if (visualType == "ModelUIElement3D")
            {
                visual           = MakeModelUIElement3D(v, visualName);
                visual.Transform = TransformFactory.MakeTransform(v[visualTransformName]);
            }
            else if (visualType == "ViewportVisual3D")
            {
                visual           = MakeViewportVisual3D(v, visualName);
                visual.Transform = TransformFactory.MakeTransform(v[visualTransformName]);
            }
#endif

            else
            {
                throw new ArgumentException("Unable to create VisualType (" + visualType + ")." +
                                            "Supported types are ModelVisual3D (+V3.5 ModelUIElement3D and ViewportVisual3D).");
            }


            visual.SetValue(Const.SkipProperty, skipType);
            return(visual);
        }
コード例 #5
0
ファイル: FactoryParser.cs プロジェクト: dotnet/wpf-test
        private static Visual3D MakeViewportVisual3D(Variation v, string visualName)
        {
            Viewport2DVisual3D visual = new Viewport2DVisual3D();

            string visualContent = v[visualName];
            string materialName  = visualName.Replace("Visual", "Material");
            //Back Material is intentionally omitted
            string modelTransformName = visualName.Replace("Visual", "VisualTransform");
            string modelChildName     = visualName.Replace("Visual", "Child");

            //Only Geometry, Material and child are accepted, not general Model3D's.
            visual.Geometry = MeshFactory.MakeMesh(visualContent);
            Material material = MakeMaterial(v, materialName);

            //Material can be null.
            if (material != null)
            {
                //
                material.SetValue(Viewport2DVisual3D.IsVisualHostMaterialProperty, true);
                visual.Material = material;
            }
            visual.Transform = TransformFactory.MakeTransform(v[modelTransformName]);

            //

            //This operates at the same tree level as the parent, as it has
            //a one-to-one parent relationship.

            if (v[modelChildName] != null)
            {
                Visual childVisual = VisualFactory.MakeVisual(v[modelChildName]);
                if (childVisual != null)
                {
                    visual.Visual = childVisual;
                }
            }
            return(visual);
        }