// Update the 3D view public void BuildView() { ObservableCollection <Object3D> myObjects = new ObservableCollection <Object3D>(); GeometricalViewModel myView = new GeometricalViewModel(); double H = myStructure.StoryHeight; double T = myStructure.SlabThickness; myStructure.RescaleAll(); for (int i = 0; i < myStructure.NumStories; i++) { if (myStructure?.Slabs != null) { foreach (var myslab in myStructure?.Slabs) { List <MWPoint2D> pts = myslab.Points.Select(s => s).ToList(); pts.Add(pts[0]); Object3D slab = new Object3D { Curve = new PolylineCurve(pts.Select(p => new Rhino.Geometry.Point3d(p.X, p.Y, (i + 1) * H))), Vector = new Vector3d(0, 0, 0.3), Color = Color.FromArgb(255, 200, 200, 200), Holes = myStructure.Openings.Select(op => op.Points.Select(p => new Point3D(p.X, p.Y, (i + 1) * H)).ToList()).ToList() }; myObjects.Add(slab); } } //columns if (myStructure?.Columns != null) { foreach (var mycolumn in myStructure?.Columns) { List <MWPoint2D> pts = mycolumn.Points.Select(s => s).ToList(); pts.Add(pts[0]); Object3D Acolumn = new Object3D { Curve = new PolylineCurve(pts.Select(p => new Rhino.Geometry.Point3d(p.X, p.Y, i * H + 0.5 * T))), Vector = new Vector3d(0, 0, H), Color = Color.FromArgb(255, 200, 50, 50) }; myObjects.Add(Acolumn); } } //walls if (myStructure?.Walls != null) { foreach (var mywall in myStructure?.Walls) { var points = myStructure.ExpandWall(new MWPoint2D(mywall.Points[0].X, mywall.Points[0].Y), new MWPoint2D(mywall.Points[1].X, mywall.Points[1].Y)); //var points = mywall.Select(p => p).ToList(); points.Add(points[0]); //Console.WriteLine("new wall"); //foreach (var p in points) // Console.WriteLine("X = {0}, Y = {1}", p.X, p.Y); Object3D wall = new Object3D { Curve = new PolylineCurve(points.Select(p => new Rhino.Geometry.Point3d(p.X, p.Y, i * H + 0.5 * T))), Vector = new Vector3d(0, 0, H), Color = Color.FromArgb(255, 50, 50, 200) }; myObjects.Add(wall); } } } myView.Objects = myObjects; My3DView = myView; }