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);
                }
Example #2
0
            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);
            }
Example #3
0
            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);
            }