Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / wpf / src / Core / CSharp / System / Windows / Media / PathStreamGeometryContext.cs / 1 / PathStreamGeometryContext.cs
//---------------------------------------------------------------------------- // //// Copyright (C) Microsoft Corporation. All rights reserved. // // // This class is used by the StreamGeometry class to generate an inlined, // flattened geometry stream. // //--------------------------------------------------------------------------- using MS.Internal; using MS.Internal.PresentationCore; using MS.Utility; using System; using System.Collections; using System.Collections.Generic; using System.Runtime.InteropServices; using System.Windows.Threading; using System.Windows; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Media.Composition; using System.Windows.Media.Effects; using System.Windows.Media.Imaging; using System.Windows.Media.Media3D; using System.Diagnostics; using SR=MS.Internal.PresentationCore.SR; using SRID=MS.Internal.PresentationCore.SRID; using System.Security; using System.Security.Permissions; namespace System.Windows.Media { ////// PathStreamGeometryContext /// internal class PathStreamGeometryContext : CapacityStreamGeometryContext { #region Public Methods static PathStreamGeometryContext() { // We grab the default values for these properties so that we can avoid setting // properties to their default values (as this will require that we reserve // storage for these values). s_defaultFillRule = (FillRule)PathGeometry.FillRuleProperty.GetDefaultValue(typeof(PathGeometry)); s_defaultValueForPathFigureIsClosed = (bool)PathFigure.IsClosedProperty.GetDefaultValue(typeof(PathFigure)); s_defaultValueForPathFigureIsFilled = (bool)PathFigure.IsFilledProperty.GetDefaultValue(typeof(PathFigure)); s_defaultValueForPathFigureStartPoint = (Point)PathFigure.StartPointProperty.GetDefaultValue(typeof(PathFigure)); // This code assumes that sub-classes of PathSegment don't override the default value for these properties s_defaultValueForPathSegmentIsStroked = (bool)PathSegment.IsStrokedProperty.GetDefaultValue(typeof(PathSegment)); s_defaultValueForPathSegmentIsSmoothJoin = (bool)PathSegment.IsSmoothJoinProperty.GetDefaultValue(typeof(PathSegment)); s_defaultValueForArcSegmentIsLargeArc = (bool)ArcSegment.IsLargeArcProperty.GetDefaultValue(typeof(ArcSegment)); s_defaultValueForArcSegmentSweepDirection = (SweepDirection)ArcSegment.SweepDirectionProperty.GetDefaultValue(typeof(ArcSegment)); s_defaultValueForArcSegmentRotationAngle = (double)ArcSegment.RotationAngleProperty.GetDefaultValue(typeof(ArcSegment)); } internal PathStreamGeometryContext() { _pathGeometry = new PathGeometry(); } internal PathStreamGeometryContext(FillRule fillRule, Transform transform) { _pathGeometry = new PathGeometry(); if (fillRule != s_defaultFillRule) { _pathGeometry.FillRule = fillRule; } if ((transform != null) && !transform.IsIdentity) { _pathGeometry.Transform = transform.Clone(); } } internal override void SetFigureCount(int figureCount) { Debug.Assert(_figures == null, "It is illegal to call SetFigureCount multiple times or after BeginFigure."); Debug.Assert(figureCount > 0); _figures = new PathFigureCollection(figureCount); _pathGeometry.Figures = _figures; } internal override void SetSegmentCount(int segmentCount) { Debug.Assert(_figures != null, "It is illegal to call SetSegmentCount before BeginFigure."); Debug.Assert(_currentFigure != null, "It is illegal to call SetSegmentCount before BeginFigure."); Debug.Assert(_segments == null, "It is illegal to call SetSegmentCount multiple times per BeginFigure or after a *To method."); Debug.Assert(segmentCount > 0); _segments = new PathSegmentCollection(segmentCount); _currentFigure.Segments = _segments; } ////// SetClosed - Sets the current closed state of the figure. /// override internal void SetClosedState(bool isClosed) { Debug.Assert(_currentFigure != null); if (isClosed != _currentIsClosed) { _currentFigure.IsClosed = isClosed; _currentIsClosed = isClosed; } } ////// BeginFigure - Start a new figure. /// public override void BeginFigure(Point startPoint, bool isFilled, bool isClosed) { // _currentFigure != null -> _figures != null Debug.Assert(_currentFigure == null || _figures != null); // Is this the first figure? if (_currentFigure == null) { // If so, have we not yet allocated the collection? if (_figures == null) { // While we could always just retrieve _pathGeometry.Figures (which would auto-promote) // it's more efficient to create the collection ourselves and set it explicitly. _figures = new PathFigureCollection(); _pathGeometry.Figures = _figures; } } FinishSegment(); // Clear the old reference to the segment collection _segments = null; _currentFigure = new PathFigure(); _currentIsClosed = isClosed; if (startPoint != s_defaultValueForPathFigureStartPoint) { _currentFigure.StartPoint = startPoint; } if (isClosed != s_defaultValueForPathFigureIsClosed) { _currentFigure.IsClosed = isClosed; } if (isFilled != s_defaultValueForPathFigureIsFilled) { _currentFigure.IsFilled = isFilled; } _figures.Add(_currentFigure); _currentSegmentType = MIL_SEGMENT_TYPE.MilSegmentNone; } ////// LineTo - append a LineTo to the current figure. /// public override void LineTo(Point point, bool isStroked, bool isSmoothJoin) { _scratchForLine[0] = point; GenericPolyTo(_scratchForLine, isStroked, isSmoothJoin, MIL_SEGMENT_TYPE.MilSegmentPolyLine); } ////// QuadraticBezierTo - append a QuadraticBezierTo to the current figure. /// public override void QuadraticBezierTo(Point point1, Point point2, bool isStroked, bool isSmoothJoin) { _scratchForQuadraticBezier[0] = point1; _scratchForQuadraticBezier[1] = point2; GenericPolyTo(_scratchForQuadraticBezier, isStroked, isSmoothJoin, MIL_SEGMENT_TYPE.MilSegmentPolyQuadraticBezier); } ////// BezierTo - apply a BezierTo to the current figure. /// public override void BezierTo(Point point1, Point point2, Point point3, bool isStroked, bool isSmoothJoin) { _scratchForBezier[0] = point1; _scratchForBezier[1] = point2; _scratchForBezier[2] = point3; GenericPolyTo(_scratchForBezier, isStroked, isSmoothJoin, MIL_SEGMENT_TYPE.MilSegmentPolyBezier); } ////// PolyLineTo - append a PolyLineTo to the current figure. /// public override void PolyLineTo(IListpoints, bool isStroked, bool isSmoothJoin) { GenericPolyTo(points, isStroked, isSmoothJoin, MIL_SEGMENT_TYPE.MilSegmentPolyLine); } /// /// PolyQuadraticBezierTo - append a PolyQuadraticBezierTo to the current figure. /// public override void PolyQuadraticBezierTo(IListpoints, bool isStroked, bool isSmoothJoin) { GenericPolyTo(points, isStroked, isSmoothJoin, MIL_SEGMENT_TYPE.MilSegmentPolyQuadraticBezier); } /// /// PolyBezierTo - append a PolyBezierTo to the current figure. /// public override void PolyBezierTo(IListpoints, bool isStroked, bool isSmoothJoin) { GenericPolyTo(points, isStroked, isSmoothJoin, MIL_SEGMENT_TYPE.MilSegmentPolyBezier); } /// /// ArcTo - append an ArcTo to the current figure. /// public override void ArcTo(Point point, Size size, double rotationAngle, bool isLargeArc, SweepDirection sweepDirection, bool isStroked, bool isSmoothJoin) { Debug.Assert(_figures != null); Debug.Assert(_currentFigure != null); FinishSegment(); // Is this the first segment? if (_segments == null) { // While we could always just retrieve _currentFigure.Segments (which would auto-promote) // it's more efficient to create the collection ourselves and set it explicitly. _segments = new PathSegmentCollection(); _currentFigure.Segments = _segments; } ArcSegment segment = new ArcSegment(); segment.Point = point; segment.Size = size; if (isLargeArc != s_defaultValueForArcSegmentIsLargeArc) { segment.IsLargeArc = isLargeArc; } if (sweepDirection != s_defaultValueForArcSegmentSweepDirection) { segment.SweepDirection = sweepDirection; } if (rotationAngle != s_defaultValueForArcSegmentRotationAngle) { segment.RotationAngle = rotationAngle; } // Handle common PathSegment properties. if (isStroked != s_defaultValueForPathSegmentIsStroked) { segment.IsStroked = isStroked; } if (isSmoothJoin != s_defaultValueForPathSegmentIsSmoothJoin) { segment.IsSmoothJoin = isSmoothJoin; } _segments.Add(segment); _currentSegmentType = MIL_SEGMENT_TYPE.MilSegmentArc; } ////// PathStreamGeometryContext is never opened, so it shouldn't be closed. /// public override void Close() { Debug.Assert(false); } #endregion Public Methods ////// GetPathGeometry - Retrieves the PathGeometry built by this Context. /// internal PathGeometry GetPathGeometry() { FinishSegment(); Debug.Assert(_currentSegmentPoints == null); return _pathGeometry; } private void GenericPolyTo(IListpoints, bool isStroked, bool isSmoothJoin, MIL_SEGMENT_TYPE segmentType) { Debug.Assert(_figures != null); Debug.Assert(_currentFigure != null); int count = points.Count; Debug.Assert(points != null); Debug.Assert(count != 0); if (_currentSegmentType != segmentType || _currentSegmentIsStroked != isStroked || _currentSegmentIsSmoothJoin != isSmoothJoin) { FinishSegment(); _currentSegmentType = segmentType; _currentSegmentIsStroked = isStroked; _currentSegmentIsSmoothJoin = isSmoothJoin; } if (_currentSegmentPoints == null) { _currentSegmentPoints = new PointCollection(); } for (int i = 0; i < count; ++i) { _currentSegmentPoints.Add(points[i]); } } /// /// FinishSegment - called to completed any outstanding Segment which may be present. /// private void FinishSegment() { if (_currentSegmentPoints != null) { Debug.Assert(_currentFigure != null); int count = _currentSegmentPoints.Count; Debug.Assert(count > 0); // Is this the first segment? if (_segments == null) { // While we could always just retrieve _currentFigure.Segments (which would auto-promote) // it's more efficient to create the collection ourselves and set it explicitly. _segments = new PathSegmentCollection(); _currentFigure.Segments = _segments; } PathSegment segment; switch (_currentSegmentType) { case MIL_SEGMENT_TYPE.MilSegmentPolyLine: if (count == 1) { LineSegment lSegment = new LineSegment(); lSegment.Point = _currentSegmentPoints[0]; segment = lSegment; } else { PolyLineSegment pSegment = new PolyLineSegment(); pSegment.Points = _currentSegmentPoints; segment = pSegment; } break; case MIL_SEGMENT_TYPE.MilSegmentPolyBezier: if (count == 3) { BezierSegment bSegment = new BezierSegment(); bSegment.Point1 = _currentSegmentPoints[0]; bSegment.Point2 = _currentSegmentPoints[1]; bSegment.Point3 = _currentSegmentPoints[2]; segment = bSegment; } else { Debug.Assert(count % 3 == 0); PolyBezierSegment pSegment = new PolyBezierSegment(); pSegment.Points = _currentSegmentPoints; segment = pSegment; } break; case MIL_SEGMENT_TYPE.MilSegmentPolyQuadraticBezier: if (count == 2) { QuadraticBezierSegment qSegment = new QuadraticBezierSegment(); qSegment.Point1 = _currentSegmentPoints[0]; qSegment.Point2 = _currentSegmentPoints[1]; segment = qSegment; } else { Debug.Assert(count % 2 == 0); PolyQuadraticBezierSegment pSegment = new PolyQuadraticBezierSegment(); pSegment.Points = _currentSegmentPoints; segment = pSegment; } break; default: segment = null; Debug.Assert(false); break; } // Handle common PathSegment properties. if (_currentSegmentIsStroked != s_defaultValueForPathSegmentIsStroked) { segment.IsStroked = _currentSegmentIsStroked; } if (_currentSegmentIsSmoothJoin != s_defaultValueForPathSegmentIsSmoothJoin) { segment.IsSmoothJoin = _currentSegmentIsSmoothJoin; } _segments.Add(segment); _currentSegmentPoints = null; _currentSegmentType = MIL_SEGMENT_TYPE.MilSegmentNone; } } #region Private Fields private PathGeometry _pathGeometry; private PathFigureCollection _figures; private PathFigure _currentFigure; private PathSegmentCollection _segments; private bool _currentIsClosed; private MIL_SEGMENT_TYPE _currentSegmentType; private PointCollection _currentSegmentPoints; private bool _currentSegmentIsStroked; private bool _currentSegmentIsSmoothJoin; private Point[] _scratchForLine = new Point[1]; private Point[] _scratchForQuadraticBezier = new Point[2]; private Point[] _scratchForBezier = new Point[3]; private static FillRule s_defaultFillRule; private static bool s_defaultValueForPathFigureIsClosed; private static bool s_defaultValueForPathFigureIsFilled; private static Point s_defaultValueForPathFigureStartPoint; // This code assumes that sub-classes of PathSegment don't override the default value for these properties private static bool s_defaultValueForPathSegmentIsStroked; private static bool s_defaultValueForPathSegmentIsSmoothJoin; private static bool s_defaultValueForArcSegmentIsLargeArc; private static SweepDirection s_defaultValueForArcSegmentSweepDirection; private static double s_defaultValueForArcSegmentRotationAngle; #endregion Private Fields } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. //---------------------------------------------------------------------------- // //// Copyright (C) Microsoft Corporation. All rights reserved. // // // This class is used by the StreamGeometry class to generate an inlined, // flattened geometry stream. // //--------------------------------------------------------------------------- using MS.Internal; using MS.Internal.PresentationCore; using MS.Utility; using System; using System.Collections; using System.Collections.Generic; using System.Runtime.InteropServices; using System.Windows.Threading; using System.Windows; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Media.Composition; using System.Windows.Media.Effects; using System.Windows.Media.Imaging; using System.Windows.Media.Media3D; using System.Diagnostics; using SR=MS.Internal.PresentationCore.SR; using SRID=MS.Internal.PresentationCore.SRID; using System.Security; using System.Security.Permissions; namespace System.Windows.Media { ////// PathStreamGeometryContext /// internal class PathStreamGeometryContext : CapacityStreamGeometryContext { #region Public Methods static PathStreamGeometryContext() { // We grab the default values for these properties so that we can avoid setting // properties to their default values (as this will require that we reserve // storage for these values). s_defaultFillRule = (FillRule)PathGeometry.FillRuleProperty.GetDefaultValue(typeof(PathGeometry)); s_defaultValueForPathFigureIsClosed = (bool)PathFigure.IsClosedProperty.GetDefaultValue(typeof(PathFigure)); s_defaultValueForPathFigureIsFilled = (bool)PathFigure.IsFilledProperty.GetDefaultValue(typeof(PathFigure)); s_defaultValueForPathFigureStartPoint = (Point)PathFigure.StartPointProperty.GetDefaultValue(typeof(PathFigure)); // This code assumes that sub-classes of PathSegment don't override the default value for these properties s_defaultValueForPathSegmentIsStroked = (bool)PathSegment.IsStrokedProperty.GetDefaultValue(typeof(PathSegment)); s_defaultValueForPathSegmentIsSmoothJoin = (bool)PathSegment.IsSmoothJoinProperty.GetDefaultValue(typeof(PathSegment)); s_defaultValueForArcSegmentIsLargeArc = (bool)ArcSegment.IsLargeArcProperty.GetDefaultValue(typeof(ArcSegment)); s_defaultValueForArcSegmentSweepDirection = (SweepDirection)ArcSegment.SweepDirectionProperty.GetDefaultValue(typeof(ArcSegment)); s_defaultValueForArcSegmentRotationAngle = (double)ArcSegment.RotationAngleProperty.GetDefaultValue(typeof(ArcSegment)); } internal PathStreamGeometryContext() { _pathGeometry = new PathGeometry(); } internal PathStreamGeometryContext(FillRule fillRule, Transform transform) { _pathGeometry = new PathGeometry(); if (fillRule != s_defaultFillRule) { _pathGeometry.FillRule = fillRule; } if ((transform != null) && !transform.IsIdentity) { _pathGeometry.Transform = transform.Clone(); } } internal override void SetFigureCount(int figureCount) { Debug.Assert(_figures == null, "It is illegal to call SetFigureCount multiple times or after BeginFigure."); Debug.Assert(figureCount > 0); _figures = new PathFigureCollection(figureCount); _pathGeometry.Figures = _figures; } internal override void SetSegmentCount(int segmentCount) { Debug.Assert(_figures != null, "It is illegal to call SetSegmentCount before BeginFigure."); Debug.Assert(_currentFigure != null, "It is illegal to call SetSegmentCount before BeginFigure."); Debug.Assert(_segments == null, "It is illegal to call SetSegmentCount multiple times per BeginFigure or after a *To method."); Debug.Assert(segmentCount > 0); _segments = new PathSegmentCollection(segmentCount); _currentFigure.Segments = _segments; } ////// SetClosed - Sets the current closed state of the figure. /// override internal void SetClosedState(bool isClosed) { Debug.Assert(_currentFigure != null); if (isClosed != _currentIsClosed) { _currentFigure.IsClosed = isClosed; _currentIsClosed = isClosed; } } ////// BeginFigure - Start a new figure. /// public override void BeginFigure(Point startPoint, bool isFilled, bool isClosed) { // _currentFigure != null -> _figures != null Debug.Assert(_currentFigure == null || _figures != null); // Is this the first figure? if (_currentFigure == null) { // If so, have we not yet allocated the collection? if (_figures == null) { // While we could always just retrieve _pathGeometry.Figures (which would auto-promote) // it's more efficient to create the collection ourselves and set it explicitly. _figures = new PathFigureCollection(); _pathGeometry.Figures = _figures; } } FinishSegment(); // Clear the old reference to the segment collection _segments = null; _currentFigure = new PathFigure(); _currentIsClosed = isClosed; if (startPoint != s_defaultValueForPathFigureStartPoint) { _currentFigure.StartPoint = startPoint; } if (isClosed != s_defaultValueForPathFigureIsClosed) { _currentFigure.IsClosed = isClosed; } if (isFilled != s_defaultValueForPathFigureIsFilled) { _currentFigure.IsFilled = isFilled; } _figures.Add(_currentFigure); _currentSegmentType = MIL_SEGMENT_TYPE.MilSegmentNone; } ////// LineTo - append a LineTo to the current figure. /// public override void LineTo(Point point, bool isStroked, bool isSmoothJoin) { _scratchForLine[0] = point; GenericPolyTo(_scratchForLine, isStroked, isSmoothJoin, MIL_SEGMENT_TYPE.MilSegmentPolyLine); } ////// QuadraticBezierTo - append a QuadraticBezierTo to the current figure. /// public override void QuadraticBezierTo(Point point1, Point point2, bool isStroked, bool isSmoothJoin) { _scratchForQuadraticBezier[0] = point1; _scratchForQuadraticBezier[1] = point2; GenericPolyTo(_scratchForQuadraticBezier, isStroked, isSmoothJoin, MIL_SEGMENT_TYPE.MilSegmentPolyQuadraticBezier); } ////// BezierTo - apply a BezierTo to the current figure. /// public override void BezierTo(Point point1, Point point2, Point point3, bool isStroked, bool isSmoothJoin) { _scratchForBezier[0] = point1; _scratchForBezier[1] = point2; _scratchForBezier[2] = point3; GenericPolyTo(_scratchForBezier, isStroked, isSmoothJoin, MIL_SEGMENT_TYPE.MilSegmentPolyBezier); } ////// PolyLineTo - append a PolyLineTo to the current figure. /// public override void PolyLineTo(IListpoints, bool isStroked, bool isSmoothJoin) { GenericPolyTo(points, isStroked, isSmoothJoin, MIL_SEGMENT_TYPE.MilSegmentPolyLine); } /// /// PolyQuadraticBezierTo - append a PolyQuadraticBezierTo to the current figure. /// public override void PolyQuadraticBezierTo(IListpoints, bool isStroked, bool isSmoothJoin) { GenericPolyTo(points, isStroked, isSmoothJoin, MIL_SEGMENT_TYPE.MilSegmentPolyQuadraticBezier); } /// /// PolyBezierTo - append a PolyBezierTo to the current figure. /// public override void PolyBezierTo(IListpoints, bool isStroked, bool isSmoothJoin) { GenericPolyTo(points, isStroked, isSmoothJoin, MIL_SEGMENT_TYPE.MilSegmentPolyBezier); } /// /// ArcTo - append an ArcTo to the current figure. /// public override void ArcTo(Point point, Size size, double rotationAngle, bool isLargeArc, SweepDirection sweepDirection, bool isStroked, bool isSmoothJoin) { Debug.Assert(_figures != null); Debug.Assert(_currentFigure != null); FinishSegment(); // Is this the first segment? if (_segments == null) { // While we could always just retrieve _currentFigure.Segments (which would auto-promote) // it's more efficient to create the collection ourselves and set it explicitly. _segments = new PathSegmentCollection(); _currentFigure.Segments = _segments; } ArcSegment segment = new ArcSegment(); segment.Point = point; segment.Size = size; if (isLargeArc != s_defaultValueForArcSegmentIsLargeArc) { segment.IsLargeArc = isLargeArc; } if (sweepDirection != s_defaultValueForArcSegmentSweepDirection) { segment.SweepDirection = sweepDirection; } if (rotationAngle != s_defaultValueForArcSegmentRotationAngle) { segment.RotationAngle = rotationAngle; } // Handle common PathSegment properties. if (isStroked != s_defaultValueForPathSegmentIsStroked) { segment.IsStroked = isStroked; } if (isSmoothJoin != s_defaultValueForPathSegmentIsSmoothJoin) { segment.IsSmoothJoin = isSmoothJoin; } _segments.Add(segment); _currentSegmentType = MIL_SEGMENT_TYPE.MilSegmentArc; } ////// PathStreamGeometryContext is never opened, so it shouldn't be closed. /// public override void Close() { Debug.Assert(false); } #endregion Public Methods ////// GetPathGeometry - Retrieves the PathGeometry built by this Context. /// internal PathGeometry GetPathGeometry() { FinishSegment(); Debug.Assert(_currentSegmentPoints == null); return _pathGeometry; } private void GenericPolyTo(IListpoints, bool isStroked, bool isSmoothJoin, MIL_SEGMENT_TYPE segmentType) { Debug.Assert(_figures != null); Debug.Assert(_currentFigure != null); int count = points.Count; Debug.Assert(points != null); Debug.Assert(count != 0); if (_currentSegmentType != segmentType || _currentSegmentIsStroked != isStroked || _currentSegmentIsSmoothJoin != isSmoothJoin) { FinishSegment(); _currentSegmentType = segmentType; _currentSegmentIsStroked = isStroked; _currentSegmentIsSmoothJoin = isSmoothJoin; } if (_currentSegmentPoints == null) { _currentSegmentPoints = new PointCollection(); } for (int i = 0; i < count; ++i) { _currentSegmentPoints.Add(points[i]); } } /// /// FinishSegment - called to completed any outstanding Segment which may be present. /// private void FinishSegment() { if (_currentSegmentPoints != null) { Debug.Assert(_currentFigure != null); int count = _currentSegmentPoints.Count; Debug.Assert(count > 0); // Is this the first segment? if (_segments == null) { // While we could always just retrieve _currentFigure.Segments (which would auto-promote) // it's more efficient to create the collection ourselves and set it explicitly. _segments = new PathSegmentCollection(); _currentFigure.Segments = _segments; } PathSegment segment; switch (_currentSegmentType) { case MIL_SEGMENT_TYPE.MilSegmentPolyLine: if (count == 1) { LineSegment lSegment = new LineSegment(); lSegment.Point = _currentSegmentPoints[0]; segment = lSegment; } else { PolyLineSegment pSegment = new PolyLineSegment(); pSegment.Points = _currentSegmentPoints; segment = pSegment; } break; case MIL_SEGMENT_TYPE.MilSegmentPolyBezier: if (count == 3) { BezierSegment bSegment = new BezierSegment(); bSegment.Point1 = _currentSegmentPoints[0]; bSegment.Point2 = _currentSegmentPoints[1]; bSegment.Point3 = _currentSegmentPoints[2]; segment = bSegment; } else { Debug.Assert(count % 3 == 0); PolyBezierSegment pSegment = new PolyBezierSegment(); pSegment.Points = _currentSegmentPoints; segment = pSegment; } break; case MIL_SEGMENT_TYPE.MilSegmentPolyQuadraticBezier: if (count == 2) { QuadraticBezierSegment qSegment = new QuadraticBezierSegment(); qSegment.Point1 = _currentSegmentPoints[0]; qSegment.Point2 = _currentSegmentPoints[1]; segment = qSegment; } else { Debug.Assert(count % 2 == 0); PolyQuadraticBezierSegment pSegment = new PolyQuadraticBezierSegment(); pSegment.Points = _currentSegmentPoints; segment = pSegment; } break; default: segment = null; Debug.Assert(false); break; } // Handle common PathSegment properties. if (_currentSegmentIsStroked != s_defaultValueForPathSegmentIsStroked) { segment.IsStroked = _currentSegmentIsStroked; } if (_currentSegmentIsSmoothJoin != s_defaultValueForPathSegmentIsSmoothJoin) { segment.IsSmoothJoin = _currentSegmentIsSmoothJoin; } _segments.Add(segment); _currentSegmentPoints = null; _currentSegmentType = MIL_SEGMENT_TYPE.MilSegmentNone; } } #region Private Fields private PathGeometry _pathGeometry; private PathFigureCollection _figures; private PathFigure _currentFigure; private PathSegmentCollection _segments; private bool _currentIsClosed; private MIL_SEGMENT_TYPE _currentSegmentType; private PointCollection _currentSegmentPoints; private bool _currentSegmentIsStroked; private bool _currentSegmentIsSmoothJoin; private Point[] _scratchForLine = new Point[1]; private Point[] _scratchForQuadraticBezier = new Point[2]; private Point[] _scratchForBezier = new Point[3]; private static FillRule s_defaultFillRule; private static bool s_defaultValueForPathFigureIsClosed; private static bool s_defaultValueForPathFigureIsFilled; private static Point s_defaultValueForPathFigureStartPoint; // This code assumes that sub-classes of PathSegment don't override the default value for these properties private static bool s_defaultValueForPathSegmentIsStroked; private static bool s_defaultValueForPathSegmentIsSmoothJoin; private static bool s_defaultValueForArcSegmentIsLargeArc; private static SweepDirection s_defaultValueForArcSegmentSweepDirection; private static double s_defaultValueForArcSegmentRotationAngle; #endregion Private Fields } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- GeneratedView.cs
- FacetDescriptionElement.cs
- ComContractElementCollection.cs
- SimpleFileLog.cs
- FileAuthorizationModule.cs
- StylusPointCollection.cs
- TransformPatternIdentifiers.cs
- DispatcherHookEventArgs.cs
- SupportingTokenListenerFactory.cs
- PageContentCollection.cs
- HotSpotCollection.cs
- Baml6ConstructorInfo.cs
- SmtpSpecifiedPickupDirectoryElement.cs
- DotExpr.cs
- HttpDictionary.cs
- PersistenceTypeAttribute.cs
- ToolBarButton.cs
- SessionMode.cs
- ColorInterpolationModeValidation.cs
- ValidationPropertyAttribute.cs
- SrgsOneOf.cs
- PointAnimationClockResource.cs
- ParseChildrenAsPropertiesAttribute.cs
- HtmlInputControl.cs
- Visual3DCollection.cs
- Switch.cs
- XmlBaseReader.cs
- NetworkStream.cs
- _AutoWebProxyScriptWrapper.cs
- LiteralTextContainerControlBuilder.cs
- TrustSection.cs
- XmlILStorageConverter.cs
- SqlFormatter.cs
- fixedPageContentExtractor.cs
- ReadOnlyMetadataCollection.cs
- DbParameterCollectionHelper.cs
- MethodImplAttribute.cs
- GradientStop.cs
- DocumentOrderQuery.cs
- AnnotationResourceCollection.cs
- ListItemCollection.cs
- HttpErrorTraceRecord.cs
- FactoryId.cs
- TypeSystemProvider.cs
- DataGridViewMethods.cs
- updateconfighost.cs
- TextShapeableCharacters.cs
- GestureRecognitionResult.cs
- DataListItemCollection.cs
- RangeExpression.cs
- SmiConnection.cs
- XmlNodeChangedEventManager.cs
- PreviewPageInfo.cs
- SafeFileMappingHandle.cs
- JoinGraph.cs
- SqlDataSourceCache.cs
- TypeDelegator.cs
- CodeCatchClause.cs
- CommandManager.cs
- SqlConnectionPoolProviderInfo.cs
- DataGridToolTip.cs
- ToggleProviderWrapper.cs
- XmlAtomicValue.cs
- ZoomPercentageConverter.cs
- Cursor.cs
- Listbox.cs
- ScrollViewer.cs
- XPathAxisIterator.cs
- CatalogZone.cs
- CustomSignedXml.cs
- AssertFilter.cs
- XmlSerializationWriter.cs
- XomlCompilerParameters.cs
- CharacterBuffer.cs
- MediaEntryAttribute.cs
- XmlSerializationReader.cs
- EdmComplexTypeAttribute.cs
- NoClickablePointException.cs
- IItemProperties.cs
- TextFormatterImp.cs
- SchemaElementLookUpTable.cs
- CalendarTable.cs
- SqlConnectionPoolProviderInfo.cs
- InputMethod.cs
- SwitchAttribute.cs
- Quaternion.cs
- BindingExpressionBase.cs
- SerialPinChanges.cs
- GenericWebPart.cs
- ToolStripSplitStackLayout.cs
- ProbeDuplex11AsyncResult.cs
- TextRunCache.cs
- ReadOnlyDictionary.cs
- PermissionAttributes.cs
- StructuredProperty.cs
- Int32AnimationBase.cs
- TimeoutValidationAttribute.cs
- HtmlContainerControl.cs
- RenderContext.cs
- XmlSchemaObjectCollection.cs