/// <summary> /// Sort Modelgroups in Farthest to Closest order, to enable transparency /// Should be applied whenever the scene is significantly re-oriented /// </summary> public static void AlphaSort(Point3D CameraPosition, Visual3DCollection Models) { ArrayList list = new ArrayList(); foreach (Visual3D model in Models) { double distance = (Point3D.Subtract(CameraPosition, ((ModelUIElement3D)model).Model.Bounds.Location )).Length; list.Add(new ModelDistance(distance, model)); } list.Sort(new DistanceComparer(SortDirection.FarToNear)); Models.Clear(); foreach (ModelDistance modelDistance in list) { Models.Add(modelDistance.model); } }
void UpdateMeshResolution(short resolution, double sampling_interval) { // ------------------------------ // Adjust cursor size // ------------------------------ CursorScaleB.ScaleX = CursorScaleB.ScaleY = CursorScaleB.ScaleZ = Math.PI / 8 / resolution; // ------------------------------ // Create pixelization scheme // ------------------------------ pixelization = new Healpix.Healpix(); pixelization.Resolution = resolution; // ------------------------------ // Create border lines // ------------------------------ border = new HealpixBorder(); try { border.SamplingInterval = sampling_interval; border.Resolution = resolution; } catch (Exception e) { Console.WriteLine("{0} Exception caught.", e); } Visual3DCollection elements = BorderContainer.Children; elements.Clear(); int n = border.GetNumberOfBorderLines(); for (int i = 0; i < n; i++) { WirePolyline line = new WirePolyline(); line.Points = border.GetAsCartesianCoord(i); line.Color = Colors.Black; line.Thickness = border.GetBorderThickness(i); elements.Add(line); } UpdateMapMesh(); }