using Hi.Geom; using Hi.Disp; namespace Sample.Disp { /// /// Demonstrates a simple solar system animation using interface. /// Shows how to create a hierarchical transform structure with sun, earth and moon using /// matrices and model matrix stack transformations. /// /// /// ### Source Code /// [!code-csharp[SampleCode](~/../Hi.Sample.Wpf/Disp/DemoSatellite.cs)] /// public class DemoSatellite : IDisplayee { Drawing sun; Drawing earth; Drawing moon; double angle_earth; double angle_moon; DemoSatellite() { sun = Box3d.CenterUnitBox.ScaleFromCenter(4).ToDraw_Face(); earth = Box3d.CenterUnitBox.ScaleFromCenter(2).ToDraw_Face(); moon = Box3d.CenterUnitBox.ToDraw_Face(); } /// public void Display(Bind bind) { sun.Display(bind); bind.ModelMatStack.Push(); bind.ModelMatStack.Mul(new Mat4d(new AxisAngle4d(new Vec3d(0, 0, 1), angle_earth += 0.03))); bind.ModelMatStack.Mul(new Mat4d(new Vec3d(12, 0, 0))); earth.Display(bind); bind.ModelMatStack.Push(); bind.ModelMatStack.Mul(new Mat4d(new AxisAngle4d(new Vec3d(0, 0, 1), angle_moon += 0.02))); bind.ModelMatStack.Mul(new Mat4d(new Vec3d(4, 0, 0))); moon.Display(bind); bind.ModelMatStack.Pop(); bind.ModelMatStack.Pop(); } /// public void ExpandToBox3d(Box3d dst) { dst.Expand(new Vec3d(-14, -14, -2)); dst.Expand(new Vec3d(14, 14, 2)); } static void Main() { DemoUtil.RunApplication("DemoSatellite", new DemoSatellite()); } } }