Exemple #1
0
        private void SetButtonIcon()
        {
            _withIcon = !string.IsNullOrEmpty(_materialButton.Image);

            if (_withIcon)
            {
                var fileName = _materialButton.Image.File.Split('.').First();
                var id       = this.Resources.GetIdentifier(fileName, "drawable", Material.Context.PackageName);
                var width    = (int)MaterialHelper.ConvertToDp(18);
                var height   = (int)MaterialHelper.ConvertToDp(18);
                var drawable = MaterialHelper.GetDrawableCopyFromResource <Drawable>(id);
                drawable.SetBounds(0, 0, width, height);
                drawable.SetTint(_materialButton.TextColor.ToAndroid());

                this.Control.SetCompoundDrawables(drawable, null, null, null);
                this.Control.CompoundDrawablePadding = 8;
            }
        }
Exemple #2
0
        public Model3DGroup GetModel()
        {
            Model3DGroup model3DGroup = new Model3DGroup();

            meshs.ForEach(x =>
            {
                List <Point3D> list1  = new List <Point3D>();
                List <Vector3D> list2 = new List <Vector3D>();
                List <Point> list3    = new List <Point>();
                for (int i = 0; i < x.vertices.Count; ++i)
                {
                    list1.Add(x.vertices[i].position);
                    list2.Add(x.normals[i]);
                    list3.Add(x.vertices[i].uvcoord);
                }
                List <int> list4 = new List <int>();
                x.faces.ForEach(y =>
                {
                    list4.Add(y[0]);
                    list4.Add(y[1]);
                    list4.Add(y[2]);
                });
                MeshGeometry3D geometry = new MeshGeometry3D
                {
                    Normals            = new Vector3DCollection(list2),
                    Positions          = new Point3DCollection(list1),
                    TextureCoordinates = new PointCollection(list3),
                    TriangleIndices    = new Int32Collection(list4)
                };
                Material material = Materials.Gray;
                byte[] buffer     = MainWindow.Buildings.ReadFile(x.texture[0].ToLower());
                if (buffer.Length > 0)
                {
                    material = MaterialHelper.CreateImageMaterial(ToImage(buffer), 1.0);
                }
                model3DGroup.Children.Add(new GeometryModel3D
                {
                    Geometry     = geometry,
                    Material     = material,
                    BackMaterial = material
                });
            });
            return(model3DGroup);
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="MainViewModel"/> class.
        /// </summary>
        public MainViewModel()
        {
            // Create a model group
            var modelGroup = new Model3DGroup();

            // Create a mesh builder and add a box to it
            var meshBuilder = new MeshBuilder(false, false);

            meshBuilder.AddBox(new Point3D(0, 5, 5), 2, 2, 5);
            meshBuilder.AddBox(new Rect3D(0, 0, 1.2, 1, 5, 0.4));
            MeshGeometry3D g = new MeshGeometry3D();

            // Create a mesh from the builder (and freeze it)
            var mesh = meshBuilder.ToMesh(true);

            // Create some materials
            var greenMaterial  = MaterialHelper.CreateMaterial(Colors.Green);
            var redMaterial    = MaterialHelper.CreateMaterial(Colors.Red);
            var blueMaterial   = MaterialHelper.CreateMaterial(Colors.Blue);
            var insideMaterial = MaterialHelper.CreateMaterial(Colors.Yellow);



            //The Importer to load .obj files
            ModelImporter importer = new ModelImporter();

            //The Material (Color) that is applyed to the importet objects
            Material material = new DiffuseMaterial(new SolidColorBrush(Colors.White));

            importer.DefaultMaterial = material;
            Model3D block = importer.Load(@"D:\Program Files (x86)\Steam\SteamApps\workshop\content\387990\877698157\Objects\Mesh\Seat.obj");

            //modelGroup.Children.Add(block);

            // Add 3 models to the group (using the same mesh, that's why we had to freeze it)
            modelGroup.Children.Add(new GeometryModel3D {
                Geometry = mesh, Material = greenMaterial, BackMaterial = insideMaterial
            });
            //modelGroup.Children.Add(new GeometryModel3D { Geometry = mesh, Transform = new TranslateTransform3D(-2, 0, 0), Material = redMaterial, BackMaterial = insideMaterial });
            //modelGroup.Children.Add(new GeometryModel3D { Geometry = mesh, Transform = new TranslateTransform3D(2, 0, 0), Material = blueMaterial, BackMaterial = insideMaterial });

            // Set the property, which will be bound to the Content property of the ModelVisual3D (see MainWindow.xaml)
            this.Model = modelGroup;
        }
Exemple #4
0
        public VertexUI(Vertex vertex) : base(vertex)
        {
            Vertex = vertex;
            var sphere = new SphereVisual3D();

            sphere.Model.Material = MaterialHelper.CreateMaterial(Color.FromRgb(255, 0, 0));
            sphere.Center         = vertex.Point.Multiply(SCALE_FACTOR);
            sphere.Radius         = sphere.Radius * 0.5;

            VisualElement = sphere;

            Material colorMaterial;

            switch (vertex.Type)
            {
            case 0:
                colorMaterial = DefaultVertexMaterial;
                break;

            case 1:
                colorMaterial = BindVertexMaterial;
                break;

            case 2:
                colorMaterial = ControlVertexMaterial;
                break;

            case 3:
                colorMaterial = MassVertexMaterial;
                break;

            default:
                colorMaterial = UnknownVertexMaterial;
                break;
            }


            var groupMaterial = new MaterialGroup();

            groupMaterial.Children.Add(colorMaterial);
            Material = groupMaterial;

            Title = "Узел №" + vertex.Number;
        }
        private void AddEdge(ModelUIElement3D element, Point3D center, double x, double y, double z, Vector3D faceNormal)
        {
            var builder = new MeshBuilder(false, true);

            builder.AddBox(center, x, y, z);

            var geometry = builder.ToMesh();

            geometry.Freeze();

            var model = new GeometryModel3D {
                Geometry = geometry, Material = MaterialHelper.CreateMaterial(EdgeBrush)
            };

            element.Model = model;

            faceNormals.Add(element, faceNormal);
            faceUpVectors.Add(element, ModelUpDirection);
        }
Exemple #6
0
        //public event EventHandler ModelVisualizationRequested;
        public MainWindow()
        {
            InitializeComponent();
            m_replacementMaterial     = MaterialHelper.CreateMaterial(Brushes.LightBlue, 0.0, 40);
            m_backReplacementMaterial = MaterialHelper.CreateMaterial(Brushes.Green, 0.0, 40);
            m_viewModel = new MainViewModel
            {
                ShownVisual3d = new ModelVisual3D()
            };
            this.DataContext = m_viewModel;

            m_visualizerPreparationStage = ServicePreparationStage.NotOpened;
            if (TryOpenVisualizerService())
            {
                TryReconnect();
            }

            OnResetCameraClick(this, null);
        }
        private void AddBases(ModelVisual3D model, int number, double turns, double length)
        {
            var b  = turns * 2 * Math.PI;
            var l  = length;
            var p1 = 0d;
            var p2 = 3.14;

            for (int i = 0; i < number; i++)
            {
                var u   = (double)i / (number - 1);
                var bu  = b * u;
                var x1  = Math.Cos(bu + p1) + Math.Cos(bu + p1);
                var y1  = Math.Sin(bu + p1) + Math.Sin(bu + p1);
                var z   = u * l;
                var x2  = Math.Cos(bu + p2) + Math.Cos(bu + p2);
                var y2  = Math.Sin(bu + p2) + Math.Sin(bu + p2);
                var pt1 = new Point3D(x1, y1, z);
                var pt2 = new Point3D(x2, y2, z);
                var pt3 = new Point3D(0, 0, z);

                var j      = r.Next(4);
                var brush1 = BaseBrush1[j];
                var brush2 = BaseBrush2[j];

                var ts = new PipeVisual3D
                {
                    Point1   = pt1,
                    Point2   = pt3,
                    Diameter = 0.4,
                    Material = MaterialHelper.CreateMaterial(brush1)
                };
                model.Children.Add(ts);

                var ts2 = new PipeVisual3D
                {
                    Point1   = pt3,
                    Point2   = pt2,
                    Diameter = 0.4,
                    Material = MaterialHelper.CreateMaterial(brush2)
                };
                model.Children.Add(ts2);
            }
        }
Exemple #8
0
        private GradientDrawable CreateShapeDrawable(float cornerRadius, int borderWidth, Color backgroundColor, Color borderColor)
        {
            GradientDrawable shapeDrawable = null;

            if (_button.ButtonType != MaterialButtonType.Text)
            {
                shapeDrawable = _withIcon ? MaterialHelper.GetDrawableCopyFromResource <GradientDrawable>(Resource.Drawable.drawable_shape_with_icon) : MaterialHelper.GetDrawableCopyFromResource <GradientDrawable>(Resource.Drawable.drawable_shape);
            }
            else
            {
                shapeDrawable = MaterialHelper.GetDrawableCopyFromResource <GradientDrawable>(Resource.Drawable.drawable_shape_text);
            }

            shapeDrawable.SetCornerRadius(cornerRadius);
            shapeDrawable.SetColor(backgroundColor);
            shapeDrawable.SetStroke(borderWidth, borderColor);

            return(shapeDrawable);
        }
Exemple #9
0
        GeometryModel3D AddGeometry(IEnumerable <Point3D> centers, double l)
        {
            var builder = new MeshBuilder();

            foreach (var center in centers)
            {
                builder.AddPyramid(center, l, l, true);
            }

            var mv = new GeometryModel3D
            {
                Geometry = builder.ToMesh(true),
                Material = MaterialHelper.CreateMaterial(Brushes.Gold)
            };

            TriangleCount = builder.TriangleIndices.Count / 3;

            return(mv);
        }
Exemple #10
0
        public void runDemoModel()
        {
            // Create a mesh builder and add a box to it
            var meshBuilder = new MeshBuilder(false, false);

            meshBuilder.AddBox(new Point3D(0, 0, 1), 1, 2, 0.5);
            meshBuilder.AddBox(new Rect3D(0, 0, 1.2, 0.5, 1, 0.4));

            // Create a mesh from the builder (and freeze it)
            var mesh = meshBuilder.ToMesh(true);

            // Create some materials
            var greenMaterial = MaterialHelper.CreateMaterial(Colors.Green);

            //create a model
            this.Model = new GeometryModel3D {
                Geometry = mesh, Transform = new TranslateTransform3D(0, 0, 0), Material = greenMaterial, BackMaterial = greenMaterial
            };
        }
Exemple #11
0
        /// <summary>
        /// Initializes a new instance of the <see cref="MainViewModel"/> class.
        /// </summary>
        public MainViewModel()
        {
            // Create a model group
            var modelGroup = new Model3DGroup();

            // Create a mesh builder and add a box to it
            var meshBuilder = new MeshBuilder(false, false);

            meshBuilder.AddBox(new Point3D(0, 0, 1), 1, 2, 0.5);
            meshBuilder.AddBox(new Rect3D(0, 0, 1.2, 0.5, 1, 0.4));

            // Create a mesh from the builder (and freeze it)
            var mesh = meshBuilder.ToMesh(true);

            // Create some materials
            var greenMaterial  = MaterialHelper.CreateMaterial(Colors.Green);
            var redMaterial    = MaterialHelper.CreateMaterial(Colors.Red);
            var blueMaterial   = MaterialHelper.CreateMaterial(Colors.Blue);
            var insideMaterial = MaterialHelper.CreateMaterial(Colors.Yellow);

            // Add 3 models to the group (using the same mesh, that's why we had to freeze it)
            modelGroup.Children.Add(new GeometryModel3D {
                Geometry = mesh, Material = greenMaterial, BackMaterial = insideMaterial
            });
            modelGroup.Children.Add(new GeometryModel3D {
                Geometry = mesh, Transform = new TranslateTransform3D(-2, 0, 0), Material = redMaterial, BackMaterial = insideMaterial
            });
            modelGroup.Children.Add(new GeometryModel3D {
                Geometry = mesh, Transform = new TranslateTransform3D(2, 0, 0), Material = blueMaterial, BackMaterial = insideMaterial
            });

            //// Set the property, which will be bound to the Content property of the ModelVisual3D (see MainWindow.xaml)
            //AxisAngleRotation3D rotateAxis = new AxisAngleRotation3D(new Vector3D(0, 1, 0), 180/*or 360*/);
            //Rotation3DAnimation rotateAnimation = new Rotation3DAnimation(rotateAxis, TimeSpan.FromSeconds(2));

            //var rotateTransform = new RotateTransform3D();
            //rotateTransform.BeginAnimation(RotateTransform3D.RotationProperty, rotateAnimation);

            //modelGroup.Transform = rotateTransform;

            this.Model = modelGroup;
        }
Exemple #12
0
        private void CreateContainedButtonDrawable(bool elevated)
        {
            var normalStateDrawable   = this.CreateShapeDrawable(_cornerRadius, _borderWidth, _normalColor, _borderColor);
            var disabledStateDrawable = this.CreateShapeDrawable(_cornerRadius, _borderWidth, _disabledColor, _disabledBorderColor);

            if (Material.IsLollipop)
            {
                var rippleColor       = _normalColor.IsColorDark() ? Color.ParseColor("#52FFFFFF") : Color.ParseColor("#52000000");
                var rippleDrawable    = _withIcon ? MaterialHelper.GetDrawableCopyFromResource <RippleDrawable>(Resource.Drawable.drawable_ripple_with_icon) : MaterialHelper.GetDrawableCopyFromResource <RippleDrawable>(Resource.Drawable.drawable_ripple);
                var insetDrawable     = rippleDrawable.FindDrawableByLayerId(Resource.Id.inset_drawable) as InsetDrawable;
                var statelistDrawable = insetDrawable.Drawable as StateListDrawable;
                this.SetStates(statelistDrawable, normalStateDrawable, normalStateDrawable, disabledStateDrawable);

                rippleDrawable.SetColor(new Android.Content.Res.ColorStateList(new int[][]
                {
                    new int[] {}
                },
                                                                               new int[]
                {
                    rippleColor
                }));
                this.Control.Background        = rippleDrawable;
                this.Control.StateListAnimator = elevated ? AnimatorInflater.LoadStateListAnimator(this.Context, Resource.Animator.material_button_state_list_anim) : null;
            }

            else if (Material.IsJellyBean)
            {
                var stateListDrawable    = new StateListDrawable();
                var pressedStateDrawable = this.CreateShapeDrawable(_cornerRadius, _borderWidth, _pressedColor, _borderColor);
                this.SetStates(stateListDrawable, normalStateDrawable, pressedStateDrawable, disabledStateDrawable);
                this.Control.Background = stateListDrawable;
            }

            else
            {
                var insetDrawable        = MaterialHelper.GetDrawableCopyFromResource <InsetDrawable>(Resource.Drawable.drawable_selector);
                var stateListDrawable    = insetDrawable.Drawable as StateListDrawable;
                var pressedStateDrawable = this.CreateShapeDrawable(_cornerRadius, _borderWidth, _pressedColor, _borderColor);
                this.SetStates(stateListDrawable, normalStateDrawable, pressedStateDrawable, disabledStateDrawable);
                this.Control.Background = insetDrawable;
            }
        }
Exemple #13
0
        /// <summary>
        /// Make viewport geometry for triangles
        /// </summary>
        private static List <GeometryModel3D> _geometryFromTriangles(Point3DCollection vertices, Int32Collection triangles)
        {
            var material = MaterialHelper.CreateMaterial(Colors.LightGray); // Just in case, not to accidentally remain invisible (consequence of null)
            var mesh     = new MeshGeometry3D()
            {
                Positions       = vertices,
                TriangleIndices = triangles
            };
            var geom = new GeometryModel3D()
            {
                Geometry     = mesh,
                Material     = material,
                BackMaterial = null
            };

            var geomList = new List <GeometryModel3D>();

            geomList.Add(geom);
            return(geomList);
        }
        public static Model3D DrawLines(List <Line> lines, double diameter, int resolutiontube, System.Windows.Media.Media3D.Material mat)
        {
            var modelGroup  = new Model3DGroup();
            var meshBuilder = new MeshBuilder(false, false);


            foreach (Line l in lines)
            {
                meshBuilder.AddCylinder(RhinoToHelixPoint(l.From), RhinoToHelixPoint(l.To), diameter, resolutiontube); // resolution hard-coded, section parameter = radius
            }
            var mesh      = meshBuilder.ToMesh(true);
            var CMaterial = MaterialHelper.CreateMaterial(Colors.Gray);

            modelGroup.Children.Add(new GeometryModel3D {
                Geometry = mesh, Material = CMaterial, BackMaterial = CMaterial
            });

            // Assign modelGroup to model to draw
            return(modelGroup);
        }
Exemple #15
0
        /// <summary>
        /// Calculates the texture of the specified model.
        /// </summary>
        /// <param name="model">
        /// The model.
        /// </param>
        /// <param name="mesh">
        /// The mesh.
        /// </param>
        public override void Calculate(TerrainModel model, MeshGeometry3D mesh)
        {
            var normals   = MeshGeometryHelper.CalculateNormals(mesh);
            var texcoords = new PointCollection();

            for (int i = 0; i < normals.Count; i++)
            {
                double slopedir = Math.Atan2(normals[i].Y, normals[i].X) * 180 / Math.PI;
                if (slopedir < 0)
                {
                    slopedir += 360;
                }

                double u = slopedir / 360;
                texcoords.Add(new Point(u, u));
            }

            this.TextureCoordinates = texcoords;
            this.Material           = MaterialHelper.CreateMaterial(this.Brush);
        }
Exemple #16
0
        internal void sample(Color color)
        {
            ///*
            GeometryModel3D bigCubeModel = GeometryGenerator.CreateCubeModel();

            bigCubeModel.Material = MaterialHelper.CreateMaterial(new SolidColorBrush(color));

            this.Content = bigCubeModel;
            Rect3D           r              = this.Parent.Content.Bounds;
            double           min            = Math.Min(r.SizeX, Math.Min(r.SizeY, r.SizeZ));
            Transform3DGroup transformGroup = new Transform3DGroup();

            //transformGroup.Children.Add(new TranslateTransform3D(0.5 * parent.Children.Count, 0, 0));
            //transformGroup.Children.Add(new TranslateTransform3D(new Point3D(r.X, r.Y, r.Z).ToVector3D()));
            //transformGroup.Children.Add(new ScaleTransform3D(new Vector3D(r.SizeY, r.SizeY, r.SizeY), new Point3D(r.X,r.Y,r.Z)));
            transformGroup.Children.Add(new TranslateTransform3D(parent.rootPoint().ToVector3D()));
            transformGroup.Children.Add(new ScaleTransform3D(new Vector3D(min, min, min), parent.rootPoint()));
            this.Transform = transformGroup;
            //*/
        }
        /// <summary>
        /// The load image.
        /// </summary>
        /// <param name="url">
        /// The url.
        /// </param>
        /// <param name="setter">
        /// The setter.
        /// </param>
        private void LoadImage(string url, Action <Material> setter)
        {
            var client = new WebClient();

            client.DownloadDataCompleted += (sender, e) =>
            {
                if (e.Error != null)
                {
                    return;
                }

                var image = new BitmapImage();
                image.BeginInit();
                image.StreamSource = new MemoryStream(e.Result);
                image.EndInit();

                setter(MaterialHelper.CreateImageMaterial(image, 0.5));
            };
            client.DownloadDataAsync(new Uri(url));
        }
Exemple #18
0
        private static void CreatePolygon(VectorTileFeature feature, Pallete pallete, Model3DGroup model3DGroup, Vector2 <int> shiftCoords)
        {
            PointCollection points             = new PointCollection();
            List <List <Vector2 <int> > > list = feature.Geometry <int>();

            foreach (List <Vector2 <int> > item in list)
            {
                points.Clear();

                foreach (Vector2 <int> point in item)
                {
                    points.Add(new Point(point.X + shiftCoords.X, point.Y + shiftCoords.Y));
                }

                points.RemoveAt(points.Count - 1);

                var model       = new GeometryModel3D();
                var meshbuilder = new MeshBuilder(true, true);

                var result = CuttingEarsTriangulator.Triangulate(points);

                List <int> tri = new List <int>();
                for (int i = 0; i < result.Count; i++)
                {
                    tri.Add(result[i]);
                    if (tri.Count == 3)
                    {
                        //Console.WriteLine("Triangle " + (i / 3).ToString() + " : " + tri[0].ToString() + ", " + tri[1].ToString() + ", " + tri[2].ToString());
                        meshbuilder.AddTriangle(new Point3D(points[tri[0]].X, points[tri[0]].Y, 1),
                                                new Point3D(points[tri[1]].X, points[tri[1]].Y, 1),
                                                new Point3D(points[tri[2]].X, points[tri[2]].Y, 1));
                        tri.Clear();
                    }
                }

                model.Geometry = meshbuilder.ToMesh();
                model.Material = MaterialHelper.CreateMaterial(pallete.MainFillColor.ToMediaColor());

                model3DGroup.Children.Add(model);
            }
        }
        private void StartBtnClick(object sender, RoutedEventArgs e)
        {
            this.viewPort3d.Children.Remove(device3D);

            Point mousePos = PointToScreen(Mouse.GetPosition(sender as Button));

            //var sphereSize = 5;
            /* keep these values low, the higher the values the more detailed the sphere which may impact your rendering perfomance.*/
            //var phi = 12;
            //var theta = 12;


            foreach (SensorsData sensor in sensorsDataList)
            {
                MeshBuilder meshBuilder = new MeshBuilder();

                meshBuilder.AddBox(new Point3D(sensor.x, sensor.y, sensor.deltaZ), 20, 20, 0.005);
                //meshBuilder.AddCylinder(new Point3D(sensor.x+100, sensor.y+100, sensor.deltaZ), new Point3D(sensor.x+100, sensor.y+100, sensor.deltaZ + 10), 10, 12);
                //meshBuilder.AddSphere(new Point3D(sensor.x, sensor.y, sensor.z), sphereSize, theta, phi);
                GeometryModel3D sphereModel;

                if (sensor.deltaZ >= 2)
                {
                    sphereModel = new GeometryModel3D(meshBuilder.ToMesh(), MaterialHelper.CreateMaterial(Brushes.Red, null, null, 1, 0));
                }
                else if (sensor.deltaZ < 2 && sensor.deltaZ > -2)
                {
                    sphereModel = new GeometryModel3D(meshBuilder.ToMesh(), MaterialHelper.CreateMaterial(Brushes.Red));
                }
                else
                {
                    sphereModel = new GeometryModel3D(meshBuilder.ToMesh(), MaterialHelper.CreateMaterial(Brushes.LawnGreen, null, null, 1, 0));
                }

                groupModel.Children.Add(sphereModel);
            }

            device3D.Content = groupModel;

            this.viewPort3d.Children.Add(device3D);
        }
        public MainWindow()
        {
            InitializeComponent();
            Loaded += MainWindow_Loaded;
            Clouds  = MaterialHelper.CreateMaterial(Brushes.Transparent);

            // set this to true to download the latest cloud image (from the url specified above)
            loadCurrent = false;

            if (loadCurrent)
            {
                var client = new WebClient();
                client.DownloadDataCompleted += client_DownloadDataCompleted;
                client.DownloadDataAsync(new Uri(url));
            }
            else
            {
                SetDefaultClouds();
            }
            DataContext = this;
        }
Exemple #21
0
    public override void CreatePreview()
    {
        if (Preview != null)
        {
            return;
        }

        Preview = DoCreatePreview();

        Preview.GetComponent <Renderer>().material = MaterialHelper.GetNextMaterial(Id.GetHashCode());
        foreach (var c in Preview.GetComponents <Collider>())
        {
            c.enabled = false;
            Object.Destroy(c);
        }

        Preview.transform.SetParent(Collider.transform, false);

        SyncPreview();
        RefreshHighlighted();
    }
        public MandelbrotMountain()
        {
            solver = new MandelbrotSolver();

            var brush = new LinearGradientBrush();

            brush.StartPoint = new Point(0, 0);
            brush.EndPoint   = new Point(1, 0);
            brush.GradientStops.Add(new GradientStop(Color.FromRgb(0, 7, 100), 0));
            brush.GradientStops.Add(new GradientStop(Color.FromRgb(32, 107, 203), 0.15));
            brush.GradientStops.Add(new GradientStop(Color.FromRgb(237, 255, 255), 0.42));
            brush.GradientStops.Add(new GradientStop(Color.FromRgb(255, 170, 0), 0.64));
            brush.GradientStops.Add(new GradientStop(Color.FromRgb(0, 0, 0), 0.854));
            //      brush.GradientStops.Add(new GradientStop(Color.FromRgb(0, 7, 100), 1.0));
            gradientMaterial = MaterialHelper.CreateMaterial(brush, null, Brushes.Gray, 1.0, 200);

            MaxIterations = 32;
            HeightFactor  = 0.3;

            Generate();
        }
Exemple #23
0
        /// <summary>
        /// Initializes a new instance of the <see cref="MainViewModel"/> class.
        /// </summary>
        public MainViewModel()
        {
            // Create a model group
            var modelGroup = new Model3DGroup();

            // Create a mesh builder and add a box to it
            var meshBuilder = new MeshBuilder(false, false);

            meshBuilder.AddBox(new Point3D(0, 0, 1), 1, 2, 0.5);
            meshBuilder.AddBox(new Rect3D(0, 0, 1.2, 0.5, 1, 0.4));



            // Create a mesh from the builder (and freeze it)
            var mesh = meshBuilder.ToMesh(true);

            var meshBuilder1 = new MeshBuilder(false, false);

            meshBuilder1.AddCylinder(new Point3D(-10, 20, 0), new Point3D(10, 10, 0), 0.05);

            var mesh1 = meshBuilder1.ToMesh(true);

            // Create some materials
            var greenMaterial  = MaterialHelper.CreateMaterial(Colors.Green);
            var redMaterial    = MaterialHelper.CreateMaterial(Colors.Red);
            var blueMaterial   = MaterialHelper.CreateMaterial(Colors.Blue);
            var insideMaterial = MaterialHelper.CreateMaterial(Colors.Yellow);

            // Add 3 models to the group (using the same mesh, that's why we had to freeze it)
            //modelGroup.Children.Add(new GeometryModel3D { Geometry = mesh, Material = greenMaterial, BackMaterial = insideMaterial });
            //modelGroup.Children.Add(new GeometryModel3D { Geometry = mesh, Transform = new TranslateTransform3D(-2, 0, 0), Material = redMaterial, BackMaterial = insideMaterial });
            //modelGroup.Children.Add(new GeometryModel3D { Geometry = mesh, Transform = new TranslateTransform3D(2, 0, 0), Material = blueMaterial, BackMaterial = insideMaterial });

            modelGroup.Children.Add(new GeometryModel3D {
                Geometry = mesh1, Material = redMaterial, BackMaterial = insideMaterial
            });

            // Set the property, which will be bound to the Content property of the ModelVisual3D (see MainWindow.xaml)
            this.Model = modelGroup;
        }
Exemple #24
0
        /// <summary>
        /// Initializes a new instance of the <see cref="MainViewModel"/> class.
        /// </summary>
        public MainViewModel()
        {
            // Create a model group
            var modelGroup = new Model3DGroup();

            // Create a mesh builder and add a box to it
            var meshBuilder = new MeshBuilder(false, false);

            meshBuilder.AddSphere(new Point3D(0, 0, 0), 0.5);

            // Create a mesh from the builder (and freeze it)
            var mesh = meshBuilder.ToMesh(true);


            var blueMaterial   = MaterialHelper.CreateMaterial(Colors.Blue);
            var insideMaterial = MaterialHelper.CreateMaterial(Colors.Yellow);
            var greyMaterial   = MaterialHelper.CreateMaterial(Colors.LightGray);

            List <TranslateTransform3D> transformations = GetAllSheres();


            transformations.ForEach(
                f =>
                modelGroup.Children.Add(new GeometryModel3D
            {
                Geometry     = mesh,
                Transform    = f,
                Material     = blueMaterial,
                BackMaterial = insideMaterial
            }));

            // Set the property, which will be bound to the Content property of the ModelVisual3D (see MainWindow.xaml)
            this.Model = modelGroup;

            Thread t = new Thread(Do);

            t.Start();

            //Do();
        }
Exemple #25
0
    public Quad SetupSubQuad(QuadPosition quadPosition)
    {
        GameObject go = new GameObject(string.Format("Quad_{0}", quadPosition));

        Mesh mesh = GetMesh(quadPosition);

        mesh.bounds = new Bounds(Vector3.zero, new Vector3(PlanetRadius * 2, PlanetRadius * 2, PlanetRadius * 2));

        Material material = MaterialHelper.CreateTemp(ColorShader, "Quad");

        Quad quadComponent = go.AddComponent <Quad>();

        quadComponent.Planetoid    = this;
        quadComponent.QuadMesh     = mesh;
        quadComponent.QuadMaterial = material;
        quadComponent.SetupCorners(quadPosition);

        if (Atmosphere != null)
        {
            Atmosphere.InitUniforms(null, quadComponent.QuadMaterial, false);
        }

        QuadGenerationConstants gc = QuadGenerationConstants.Init(TerrainMaxHeight);

        gc.planetRadius = PlanetRadius;

        quadComponent.Position            = quadPosition;
        quadComponent.generationConstants = gc;
        quadComponent.ShouldDraw          = false;

        if (qdtccc == null)
        {
            qdtccc = new QuadDistanceToClosestCornerComparer();
        }

        Quads.Add(quadComponent);
        Quads.Sort(qdtccc);

        return(quadComponent);
    }
        public void Init()
        {
            // Create a model group
            modelGroup = new Model3DGroup();

            // Create a mesh builder and add a box to it
            MeshBuilder meshBuilder = new MeshBuilder(false, false);

            //meshBuilder.AddBox(new Point3D(0, 0, 1), 1, 2, 0.5);
            //meshBuilder.AddBox(new Rect3D(0, 0, 1.2, 0.5, 1, 0.4));
            meshBuilder.AddEllipsoid(new Point3D(1, 1, 1), 2, 2, 2);

            //meshBuilder.AddArrow(new Point3D(0,0,0),new Point3D(10,10,10),2  );

            // Create a mesh from the builder (and freeze it)
            var mesh = meshBuilder.ToMesh(true);

            // Create some materials
            greenMaterial  = MaterialHelper.CreateMaterial(Colors.Green);
            redMaterial    = MaterialHelper.CreateMaterial(Colors.Red);
            blueMaterial   = MaterialHelper.CreateMaterial(Colors.Blue);
            insideMaterial = MaterialHelper.CreateMaterial(Colors.Yellow);

            materialBuffer.Add(Colors.Green, greenMaterial);
            materialBuffer.Add(Colors.Red, redMaterial);
            materialBuffer.Add(Colors.Blue, blueMaterial);
            materialBuffer.Add(Colors.Yellow, insideMaterial);

            // Add 3 models to the group (using the same mesh, that's why we had to freeze it)
            modelGroup.Children.Add(new GeometryModel3D {
                Geometry = mesh, Material = greenMaterial, Transform = new TranslateTransform3D(0, 0, 0), BackMaterial = insideMaterial
            });
            //modelGroup.Children.Add(new GeometryModel3D { Geometry = mesh, Transform = new TranslateTransform3D(-2, 0, 0), Material = redMaterial, BackMaterial = insideMaterial });
            //modelGroup.Children.Add(new GeometryModel3D { Geometry = mesh, Transform = new TranslateTransform3D(2, 0, 0), Material = blueMaterial, BackMaterial = insideMaterial });

            // Set the property, which will be bound to the Content property of the ModelVisual3D (see MainWindow.xaml)
            this.Model = modelGroup;

            defaultMaterial = blueMaterial;
        }
Exemple #27
0
        protected override void InitNode()
        {
            InitOceanNode();

            OceanMaterial = MaterialHelper.CreateTemp(OceanShader, "Ocean");

            ParentBody.Atmosphere.InitUniforms(OceanMaterial);

            OldLocalToOcean = Matrix4x4d.identity;
            Offset          = Vector4.zero;

            // Create the projected grid. The resolution is the size in pixels of each square in the grid.
            // If the squares are small the size of the mesh will exceed the max verts for a mesh in Unity. In this case split the mesh up into smaller meshes.
            Resolution = Mathf.Max(1, Resolution);

            // The number of squares in the grid on the x and y axis
            var NX       = Screen.width / Resolution;
            var NY       = Screen.height / Resolution;
            var numGrids = 1;

            const int MAX_VERTS = 65000;

            // The number of meshes need to make a grid of this resolution
            if (NX * NY > MAX_VERTS)
            {
                numGrids += (NX * NY) / MAX_VERTS;
            }

            ScreenMeshGrids = new Mesh[numGrids];

            // Make the meshes. The end product will be a grid of verts that cover the screen on the x and y axis with the z depth at 0.
            // This grid is then projected as the ocean by the shader
            for (byte i = 0; i < numGrids; i++)
            {
                NY = Screen.height / numGrids / Resolution;

                ScreenMeshGrids[i]        = MeshFactory.MakeOceanPlane(NX, NY, (float)i / (float)numGrids, 1.0f / (float)numGrids);
                ScreenMeshGrids[i].bounds = new Bounds(Vector3.zero, new Vector3(1e8f, 1e8f, 1e8f));
            }
        }
Exemple #28
0
        public GeometryModel3D GenerateInteractionDiagram(Column column, Color color)
        {
            double scaleXYZ = 10;

            Console.WriteLine("MaxMX = {0}, MaxMy = {1}, MaxP = {2}", batchDesign.MaxMx, batchDesign.MaxMy, batchDesign.MaxP);
            List <Point3D> normalPoints = column.diagramVertices.Select(x => new Point3D(x.X / BatchDesign.MaxMx, x.Y / BatchDesign.MaxMy, -x.Z / BatchDesign.MaxP)).ToList();

            normalPoints = normalPoints.Select(x => new Point3D(scaleXYZ * x.X, scaleXYZ * x.Y, scaleXYZ * x.Z)).ToList();

            var meshBuilder = new MeshBuilder(false, true);

            for (int i = 0; i < normalPoints.Count; i++)
            {
                Point3D pt = normalPoints[i];
                meshBuilder.Positions.Add(pt);
                meshBuilder.TextureCoordinates.Add(new Point());
            }

            for (int i = 0; i < column.diagramFaces.Count; i++)
            {
                var t = column.diagramFaces[i];
                meshBuilder.AddTriangle(new List <int> {
                    column.diagramVertices.IndexOf(t.Points[0]),
                    column.diagramVertices.IndexOf(t.Points[1]),
                    column.diagramVertices.IndexOf(t.Points[2])
                });
                meshBuilder.AddCylinder(normalPoints[column.diagramVertices.IndexOf(t.Points[0])],
                                        normalPoints[column.diagramVertices.IndexOf(t.Points[1])], 0.05, 8);
                meshBuilder.AddCylinder(normalPoints[column.diagramVertices.IndexOf(t.Points[1])],
                                        normalPoints[column.diagramVertices.IndexOf(t.Points[2])], 0.05, 8);
                meshBuilder.AddCylinder(normalPoints[column.diagramVertices.IndexOf(t.Points[0])],
                                        normalPoints[column.diagramVertices.IndexOf(t.Points[2])], 0.05, 8);
            }
            //var mat = new DiffuseMaterial(GradientBrushes.BlueWhiteRed);
            var mesh = new GeometryModel3D(meshBuilder.ToMesh(), MaterialHelper.CreateMaterial(color));

            mesh.BackMaterial = mesh.Material;

            return(mesh);
        }
Exemple #29
0
        /// <summary>
        /// Shows the and hang transparents and solids.
        /// </summary>
        /// <param name="transparents">The transparents.</param>
        /// <param name="solids">The solids.</param>
        public static void ShowAndHangTransparentsAndSolids(IList <TessellatedSolid> transparents, IList <TessellatedSolid> solids)
        {
            var window = new Window3DPlot();

            foreach (var ts in solids)
            {
                window.view1.Children.Add(MakeModelVisual3D(ts));
            }
            foreach (var ts in transparents)
            {
                var positions =
                    ts.Faces.SelectMany(
                        f => f.Vertices.Select(v => new Point3D(v.Position[0], v.Position[1], v.Position[2])));
                var normals =
                    ts.Faces.SelectMany(f => f.Vertices.Select(v => new Vector3D(f.Normal[0], f.Normal[1], f.Normal[2])));
                var r = ts.SolidColor.R;
                var g = ts.SolidColor.G;
                var b = ts.SolidColor.B;
                window.view1.Children.Add(
                    new ModelVisual3D
                {
                    Content =
                        new GeometryModel3D
                    {
                        Geometry = new MeshGeometry3D
                        {
                            Positions = new Point3DCollection(positions),
                            Normals   = new Vector3DCollection(normals)
                        },
                        Material = MaterialHelper.CreateMaterial(new System.Windows.Media.Color {
                            A = 120, R = r, G = g, B = b
                        })
                    }
                });
            }

            window.view1.FitView(window.view1.Camera.LookDirection, window.view1.Camera.UpDirection);
            window.ShowDialog();
        }
Exemple #30
0
        private void SetGeometry(string model)
        {
            Model3DGroup device = null;

            try
            {
                //Import 3D model file
                ModelImporter import = new ModelImporter();
                System.Windows.Media.Media3D.Material mat = MaterialHelper.CreateMaterial(
                    //new SolidColorBrush(Colors.SaddleBrown));
                    new SolidColorBrush(Colors.Pink));
                import.DefaultMaterial = mat;
                //Load the 3D model file
                device = import.Load(model);
            }
            catch (Exception e)
            {
                // Handle exception in case can not file 3D model
                MessageBox.Show("Exception Error : " + e.StackTrace);
            }
            Visual3DModel = device;
        }