public override RenderedSvg RenderColumn() { RenderedSvg result = base.RenderColumn(); SvgGroup group = new SvgGroup(); for (int i = 0; i < vm.Samples.Length; i++) { SampleVM sample = vm.Samples[i]; //sample circle sign SvgCircle circle = new SvgCircle(); circle.CenterX = Helpers.dtos(circleXoffset); circle.CenterY = Helpers.dtos(sample.Level); circle.Radius = Helpers.dtos(circleRadius); circle.Stroke = blackPaint; group.Children.Add(circle); //sample depth label SvgText depthText = new SvgText(string.Format("{0:0.##} м", sample.Depth)); depthText.Transforms.Add(new Svg.Transforms.SvgTranslate(textXoffset, (float)(sample.Level + 2.0 * circleRadius + textFontSize * 0.5))); depthText.Fill = blackPaint; depthText.FontSize = Helpers.dtos(textFontSize); group.Children.Add(depthText); //sample comment SvgText commentText = new SvgText(sample.Comment); commentText.Transforms.Add(new Svg.Transforms.SvgTranslate(textXoffset, (float)(sample.Level + 2.0 * circleRadius + textFontSize * 1.5))); commentText.Fill = blackPaint; commentText.FontSize = Helpers.dtos(textFontSize); group.Children.Add(commentText); } result.SVG = group; return(result); }
public RenderedSvg RenderHeader() { RenderedSvg result = new RenderedSvg(); SvgPaintServer blackPaint = new SvgColourServer(System.Drawing.Color.Black); string[] spans = vm.Heading.Split(new char[] { '\n' }, StringSplitOptions.RemoveEmptyEntries).Select(s => s.Trim()).ToArray(); SvgText text = new SvgText(); float fontSize = 10.0f; foreach (var span in spans) { SvgTextSpan tspan = new SvgTextSpan(); tspan.Text = span; tspan.FontSize = new SvgUnit(fontSize); tspan.Dy.Add(Helpers.dtos(fontSize * 1.2)); tspan.X.Add(0); tspan.Fill = blackPaint; text.Children.Add(tspan); } //text.Transforms.Add(new Svg.Transforms.SvgTranslate(0, (float)(- (fontSize * 1.2) * spans.Length * 0.5))); result.RenderedSize = headerView.RenderSize; result.SVG = text; return(result); }
public override RenderedSvg RenderColumn() { RenderedSvg result = base.RenderColumn(); SvgGroup group = new SvgGroup(); SvgColourServer blackPaint = new SvgColourServer(System.Drawing.Color.Black); double width = view.RenderSize.Width; //drawing layer boundaries LayerVM[] layers = columnVm.Layers.ToArray(); double boundary = 0.0; for (int i = 0; i < layers.Length; i++) { LayerVM lVM = layers[i]; if (i < layers.Length - 1) { boundary += lVM.Length; SvgLine line = new SvgLine(); line.Stroke = blackPaint; line.StartX = Helpers.dtos(0.0); line.EndX = Helpers.dtos(width); line.StartY = Helpers.dtos(boundary); line.EndY = Helpers.dtos(boundary); group.Children.Add(line); } var layerSvg = layerPainter.Paint(layers[i], width, lVM.Length); layerSvg.Transforms.Add(new Svg.Transforms.SvgTranslate(0.0f, (float)(boundary - lVM.Length))); group.Children.Add(layerSvg); } result.SVG = group; return(result); }
public virtual RenderedSvg RenderColumn() { RenderedSvg result = new RenderedSvg(); result.RenderedSize = view.RenderSize; result.SVG = new Svg.SvgGroup(); return(result); }
public RenderedSvg RenderHeader() { RenderedSvg result = new RenderedSvg(); SvgText text = new SvgText(vm.Heading); text.FontSize = new SvgUnit((float)10); text.Fill = new SvgColourServer(System.Drawing.Color.Black); result.RenderedSize = headerView.RenderSize; result.SVG = text; return(result); }
public override RenderedSvg RenderColumn() { RenderedSvg result = base.RenderColumn(); Svg.SvgGroup group = new Svg.SvgGroup(); foreach (Intervals.PhotoRegion region in vm.ImageRegions) { Svg.SvgImage image = new Svg.SvgImage(); string base64; using (MemoryStream ms = new MemoryStream()) { WriteableBitmap wbm = new WriteableBitmap(region.BitmapImage); PngBitmapEncoder encoder = new PngBitmapEncoder(); encoder.Frames.Add(BitmapFrame.Create(wbm)); encoder.Save(ms); byte[] bytes = ms.ToArray(); base64 = Convert.ToBase64String(bytes); } image.Href = string.Format("data:image/png;base64,{0}", base64); image.Width = Helpers.dtos(region.WpfWidth); Size imSize = region.ImageSize; //how many WPF units in one image unit //double wpfScaleFactor = region.WpfWidth / imSize.Width; double h = (region.ImageLowerDepth - region.ImageUpperDepth) * vm.CurrentScaleFactor; image.Height = Helpers.dtos(h); //System.Diagnostics.Trace.WriteLine(string.Format("svg image height is {0}({1})", image.Height, h)); //home many real meters in one image unit double depthScaleFactor = (region.ImageLowerDepth - region.ImageUpperDepth) / imSize.Height; image.Y = Helpers.dtos((region.ImageUpperDepth - vm.UpperBound) * vm.CurrentScaleFactor); //Helpers.dtos((region.ImageUpperDepth - vm.UpperBound) / depthScaleFactor * wpfScaleFactor); //System.Diagnostics.Trace.WriteLine(string.Format("svg image top is {0}({1})", image.Y, (region.ImageUpperDepth - vm.UpperBound) * vm.CurrentScaleFactor)); group.Children.Add(image); } result.SVG = group; return(result); }
public override RenderedSvg RenderColumn() { RenderedSvg result = base.RenderColumn(); double width = result.RenderedSize.Width; SvgGroup linesGroup = new SvgGroup(); SvgColourServer blackPaint = new SvgColourServer(System.Drawing.Color.Black); int minRank = int.MaxValue; LayerBoundary[] boundaries = vm.Boundaries.OrderBy(b => b.Level).ToArray(); var rank = boundaries.Select(b => b.Rank).Min(); for (int i = 0; i < boundaries.Length; i++) { LayerBoundary boundary = boundaries[i]; SvgLine line = new SvgLine(); line.StartX = Helpers.dtos(0.0); line.EndX = Helpers.dtos(width); line.StartY = Helpers.dtos(boundary.Level); line.EndY = Helpers.dtos(boundary.Level); line.Stroke = blackPaint; linesGroup.Children.Add(line); minRank = Math.Min(minRank, boundary.Rank); string textStr = string.Format("{0}", boundary.Numbers[rank]); //putting layer number as well SvgText text2 = new SvgText(textStr); text2.Transforms.Add(new Svg.Transforms.SvgTranslate(labelXoffset, (float)(boundary.Level + labelYoffset))); text2.FontSize = Helpers.dtos(10.0); text2.Fill = blackPaint; linesGroup.Children.Add(text2); } result.SVG = linesGroup; return(result); }
public override RenderedSvg RenderColumn() { RenderedSvg result = base.RenderColumn(); SvgGroup group = new SvgGroup(); SvgColourServer blackPiant = new SvgColourServer(System.Drawing.Color.Black); //first adding ticks double tickStep = Math.Pow(10.0, TickDepthResolutionOrder); double tickStart; if (TickDepthResolutionOrder <= 0) { tickStart = Math.Round(vm.UpperBound, -TickDepthResolutionOrder); } else { tickStart = Math.Round(vm.UpperBound / tickStep) * tickStep; } if (tickStart < vm.UpperBound) { tickStart += tickStart; } double tick = tickStart; //How many WPF units in 1 real meter of depth double depthScaleFactor = vm.ColumnHeight / (vm.LowerBound - vm.UpperBound); Func <double, double> depthToY = depth => (depth - vm.UpperBound) * depthScaleFactor; while (tick < vm.LowerBound) { SvgLine line = new SvgLine(); line.Stroke = blackPiant; line.StartX = Helpers.dtos(0); line.EndX = Helpers.dtos(labelXoffset); line.StartY = Helpers.dtos(depthToY(tick)); line.EndY = Helpers.dtos(depthToY(tick)); group.Children.Add(line); tick += tickStep; //SvgText text = new SvgText(string.Format("{0}",tick)); //text.Transforms.Add(new Svg.Transforms.SvgTranslate()); } //now adding labels double labelStep = Math.Pow(10.0, LabelDepthResolutionOrder); double labelStart; if (LabelDepthResolutionOrder <= 0) { labelStart = Math.Round(vm.UpperBound, -LabelDepthResolutionOrder); } else { labelStart = Math.Round(vm.UpperBound / labelStep) * labelStep; } if (labelStart < vm.UpperBound) { labelStart += labelStep; } double label = labelStart; while (label < vm.LowerBound) { SvgText text = new SvgText(string.Format("{0}", label)); text.Transforms.Add(new Svg.Transforms.SvgTranslate(labelXoffset, (float)depthToY(label) + labelYoffset)); text.Fill = blackPiant; text.FontSize = Helpers.dtos(labelSize); group.Children.Add(text); label += labelStep; } result.SVG = group; return(result); }
public static SvgDocument Generate(ISvgRenderableColumn[] columns, ILegendGroup[] legend) { //generating headers SvgGroup headerGroup = new SvgGroup(); SvgPaintServer blackPaint = new SvgColourServer(System.Drawing.Color.Black); double horizontalOffset = 0.0; double headerHeight = 0; for (int i = 0; i < columns.Length; i++) { RenderedSvg heading = columns[i].RenderHeader(); SvgRectangle rect = new SvgRectangle(); headerHeight = heading.RenderedSize.Height; rect.Width = Helpers.dtos(heading.RenderedSize.Width); rect.Height = Helpers.dtos(heading.RenderedSize.Height); rect.X = Helpers.dtos(horizontalOffset); rect.Y = Helpers.dtos(0.0); rect.Stroke = blackPaint; heading.SVG.Transforms.Add(new SvgTranslate((float)(horizontalOffset + heading.RenderedSize.Width * 0.5), (float)heading.RenderedSize.Height * 0.9f)); heading.SVG.Transforms.Add(new SvgRotate((float)-90.0)); headerGroup.Children.Add(rect); headerGroup.Children.Add(heading.SVG); horizontalOffset += heading.RenderedSize.Width; } //generating columns SvgGroup columnsGroup = new SvgGroup(); double columnHeight = 0.0; horizontalOffset = 0.0; columnsGroup.Transforms.Add(new SvgTranslate(0.0f, (float)headerHeight)); for (int i = 0; i < columns.Length; i++) { RenderedSvg column = columns[i].RenderColumn(); SvgRectangle rect = new SvgRectangle(); columnHeight = column.RenderedSize.Height; rect.Width = Helpers.dtos(column.RenderedSize.Width); rect.Height = Helpers.dtos(column.RenderedSize.Height); rect.X = Helpers.dtos(horizontalOffset); rect.Y = Helpers.dtos(0.0); rect.Stroke = blackPaint; column.SVG.Transforms.Add(new SvgTranslate((float)(horizontalOffset))); columnsGroup.Children.Add(rect); columnsGroup.Children.Add(column.SVG); horizontalOffset += column.RenderedSize.Width; } //generating legend group SvgGroup legendGroup = new SvgGroup(); const float legendYGap = 30.0f; const float legendXOffset = 10.0f; legendGroup.Transforms.Add(new SvgTranslate(legendXOffset, Helpers.dtos(headerHeight + columnHeight + legendYGap))); const float titleYoffset = 60.0f; const float itemsYoffset = 20.0f; const float itemYgap = 20.0f; const float interGroupYgap = 15.0f; const float itemImageWidth = 64.0f; const float itemImageHeight = 32.0f; const float descrXoffset = 150.0f; SvgText legendTitle = new SvgText("Условные обозначения"); legendTitle.FontSize = 22; legendTitle.Fill = new SvgColourServer(System.Drawing.Color.Black); legendTitle.Transforms.Add(new SvgTranslate(30.0f, Helpers.dtos(titleYoffset * 0.25f))); legendGroup.Children.Add(legendTitle); float currGroupOffset = 0.0f; int k = 0; foreach (ILegendGroup group in legend) { //title SvgText groupTitle = new SvgText(group.GroupName); groupTitle.FontSize = new SvgUnit((float)18); groupTitle.Fill = new SvgColourServer(System.Drawing.Color.Black); groupTitle.Transforms.Add(new SvgTranslate(0.0f, currGroupOffset + titleYoffset)); legendGroup.Children.Add(groupTitle); //items var items = group.Items; int j = 0; SvgElement[] fragments = items.Select(item => item.GetPresentation(itemImageWidth, itemImageHeight)).ToArray(); foreach (var item in items) { if (fragments[j] == null) { continue; } float yOffset = currGroupOffset + titleYoffset + itemsYoffset + j * (itemYgap + itemImageHeight); if (fragments[j] is SvgFragment) { SvgFragment fragment = (SvgFragment)fragments[j]; fragment.X = 0; fragment.Y = yOffset; } else { fragments[j].Transforms.Add(new SvgTranslate(0, yOffset)); } legendGroup.Children.Add(fragments[j]); SvgText text = new SvgText(item.Description); text.FontSize = new SvgUnit((float)14); text.Fill = new SvgColourServer(System.Drawing.Color.Black); text.Transforms.Add(new SvgTranslate(descrXoffset, yOffset + itemImageHeight * 0.5f)); legendGroup.Children.Add(text); j++; } currGroupOffset += titleYoffset + itemsYoffset + (itemYgap + itemImageHeight) * items.Length + interGroupYgap; k++; } //gathering definitions SvgDefinitionList allDefs = new SvgDefinitionList(); for (int i = 0; i < columns.Length; i++) { SvgDefinitionList defs = columns[i].Definitions; foreach (SvgPatternServer def in defs.Children) { //overridings tile size allDefs.Children.Add(def); } } SvgDocument result = new SvgDocument(); result.Children.Add(allDefs); result.Width = Helpers.dtos(horizontalOffset); result.Height = Helpers.dtos((headerHeight + columnHeight + legendYGap + currGroupOffset)); result.Fill = new SvgColourServer(System.Drawing.Color.White); result.Children.Add(headerGroup); result.Children.Add(columnsGroup); result.Children.Add(legendGroup); return(result); }