Exemple #1
0
        static void RenderTo(this DrawingGroup drawing, d.Graphics graphics, double opacity) {
            var gc = graphics.BeginContainer();
            Utility.SetGraphicsQuality(graphics);
			if (drawing.Transform != null && !drawing.Transform.Value.IsIdentity)
                graphics.MultiplyTransform(drawing.Transform.Value.ToGdiPlus(), d2.MatrixOrder.Prepend);
			if (drawing.ClipGeometry != null)
                graphics.Clip = new d.Region(drawing.ClipGeometry.ToGdiPlus());
			if (!Utility.IsZero(drawing.Opacity - 1) && drawing.Children.Count > 1) {
				var intersects = false;
				var c = drawing.Children.Count;
				var b = new Rect[c];
				for(var i = 0; i < c; ++i) b[i] = drawing.Children[i].Bounds;
				for(var i = 0; i < c; ++i) {
					for(var j = 0; j < c; ++j) 
						if (i != j && Rect.Intersect(b[i], b[j]) != Rect.Empty) {
							intersects = true;
							break;
						}
					if (intersects) break;
				}
				if (intersects)
					Utility.Warning("DrawingGroup.Opacity creates translucency between overlapping children");
			}
            foreach (Drawing d in drawing.Children) d.RenderTo(graphics, opacity * drawing.Opacity);
            graphics.EndContainer(gc);
            if (drawing.OpacityMask != null) Utility.Warning("DrawingGroup OpacityMask ignored.");
            if (drawing.BitmapEffect != null) Utility.Warning("DrawingGroup BitmapEffect ignored.");
            if (drawing.GuidelineSet != null) Utility.Warning("DrawingGroup GuidelineSet ignored.");
		}