//called when data for any output pin is requested public void Evaluate(int SpreadMax) { //update if (FSVGIn.IsChanged || FSizeIn.IsChanged || FBackgroundIn.IsChanged || FIgnoreView.IsChanged || FViewIn.IsChanged || FResized) { FResized = false; FSVGDoc = new SvgDocument(); foreach (var elem in FSVGIn) { if (elem != null) { FSVGDoc.Children.Add(elem); } } FSVGDoc.Transforms = new SvgTransformCollection(); //set view if (!FIgnoreView[0]) { var view = FViewIn[0]; if (view.Equals(SvgViewBox.Empty)) { view = new SvgViewBox(-1, -1, 2, 2); } FSVGDoc.ViewBox = view; } //calc size FSize.Width = FSizeIn[0].X; FSize.Height = FSizeIn[0].Y; if (FSize == SizeF.Empty) { FSize = new SizeF(this.Width, this.Height); } //set size and output doc FSVGDoc.Width = new SvgUnit(SvgUnitType.User, Math.Max(FSize.Width, 1)); FSVGDoc.Height = new SvgUnit(SvgUnitType.User, Math.Max(FSize.Height, 1)); FOutput[0] = new SvgDoc(FSVGDoc, FBackgroundIn[0].Color); FSizeOutput[0] = new Vector2(FSize.Width, FSize.Height); } //render to window if (FThisNode.Window != null) { if (FBitMap == null) { FBitMap = new Bitmap((int)Math.Ceiling(FSVGDoc.Width), (int)Math.Ceiling(FSVGDoc.Height)); } else if (FBitMap.Height != FSVGDoc.Height || FBitMap.Width != FSVGDoc.Width) { FBitMap.Dispose(); FBitMap = new Bitmap((int)Math.Ceiling(FSVGDoc.Width), (int)Math.Ceiling(FSVGDoc.Height)); } //clear bitmap var g = Graphics.FromImage(FBitMap); g.Clear(FBackgroundIn[0].Color); g.Dispose(); FSVGDoc.Draw(FBitMap); FPicBox.Image = FBitMap; } }
#pragma warning restore #endregion fields & pins //called when data for any output pin is requested public void Evaluate(int SpreadMax) { if (InputChanged() || FBackgroundIn.IsChanged || FReloadIn[0]) { FDocOut.SliceCount = SpreadMax; FLayerOut.SliceCount = SpreadMax; FViewOut.SliceCount = SpreadMax; FHasViewOut.SliceCount = SpreadMax; FSizeOut.SliceCount = SpreadMax; FHasSizeOut.SliceCount = SpreadMax; for (int i = 0; i < SpreadMax; i++) { var doc = ReadDocument(i); if (doc != null) { FDocOut[i] = new SvgDoc(doc, FBackgroundIn[i].Color); var spread = FLayerOut[i]; spread.SliceCount = doc.Children.Count; for (int j = 0; j < spread.SliceCount; j++) { spread[j] = doc.Children[j]; } //check view and size var noView = doc.ViewBox.Equals(SvgViewBox.Empty); var hp = new SvgUnit(SvgUnitType.Percentage, 100); var noSize = (doc.Width == hp && doc.Height == hp); var view = doc.ViewBox; if (noView) { if (noSize) { view = doc.Bounds; } else { view = doc.GetDimensions(); } doc.ViewBox = view; } if (noSize) { doc.Width = new SvgUnit(SvgUnitType.User, view.Width); doc.Height = new SvgUnit(SvgUnitType.User, view.Height); } FViewOut[i] = view; FHasViewOut[i] = !noView; var size = doc.GetDimensions(); FSizeOut[i] = new Vector2D(size.Width, size.Height); FHasSizeOut[i] = !noSize; } else { FDocOut[i] = new SvgDoc(); FLayerOut[i].SliceCount = 0; FViewOut[i] = new SvgViewBox(); FHasViewOut[i] = false; FSizeOut[i] = new Vector2D(); FHasSizeOut[i] = false; } } } //FLogger.Log(LogType.Debug, "hi tty!"); }