Model3DGroup CreateModel(Description description, double radius) { Model3DGroup ans = new Model3DGroup(); Blades = new List <Blade>(); for (int i = 0; i < description.Count; i++) { var blade = new Blade(description.BladeType, radius, MyLib.ToRad(20), Reversed); blade.Transform = blade.OriginTransform = MyLib.Transform(blade).Rotate(new Vector3D(0, 0, 1), (Reversed ? -1 : 1) * (AngleOffset + i * 2.0 * Math.PI / description.Count)).Value; Blades.Add(blade); ans.Children.Add(blade.Model); } SubTransforms.Add(new MatrixTransform3D());//theta return(ans); }
protected override Model3D CreateModel(params object[] vs) { MyLib.AssertTypes(vs, typeof(double), typeof(double)); double r = Radius = (double)vs[0]; double n = (double)vs[1]; double coneAngle = ConeAngle = MyLib.ToRad(50); blades = new List <Blade>(); Model3DGroup ans = new Model3DGroup(); for (int i = 0; i < n; i++) { double a = Math.PI * 2 * i / n; var blade = new Blade(r, coneAngle, MyLib.ToRad(40), new[] { Colors.DarkGray, Colors.DarkSlateGray, Colors.DimGray, Colors.Gray, Colors.LightGray, Colors.LightSlateGray, Colors.SlateGray }[MyLib.Rand.Next(7)]); blade.Transform = MyLib.Transform(new MatrixTransform3D()).Rotate(new Vector3D(0, 0, 1), a) /*.Translate(new Vector3D(0, 0, r * Math.Tan(coneAngle)))*/.Value; blades.Add(blade); ans.Children.Add(blade.Model); } return(ans); }
protected override Model3D CreateModel(params object[] vs) { propeller = new Propeller(Propeller.Types.Basic); propeller.Transform = propeller.OriginTransform = MyLib.Transform(propeller).TranslatePrepend(new Vector3D(0, 1.5, 0)).RotatePrepend(new Vector3D(1, 0, 0), MyLib.ToRad(-90)).Value; drill = new Drill(1.5, 50); drill.Transform = drill.OriginTransform = MyLib.Transform(drill).TranslatePrepend(new Vector3D(1.5, 0, 0)).RotatePrepend(new Vector3D(0, 1, 0), MyLib.ToRad(90)).Value; var ans = new Model3DGroup(); ans.Children.Add(CreateBodyModel()); ans.Children.Add(propeller.Model); ans.Children.Add(drill.Model); propeller.DownwardWindSpeed = () => { return(Vector3D.DotProduct(RB.velocity, new Vector3D(-Math.Sin(RB.theta), Math.Cos(RB.theta), 0))); }; this.SubTransforms.Add(new MatrixTransform3D()); this.SubTransforms.Add(new MatrixTransform3D()); //AddSphere(ans); return(ans); }