private void ComputeSegmentParameter() { PathSegmentAdorner pathSegmentAdorner = (PathSegmentAdorner)this.pathPartAdorner; Point position = this.ActiveView.Artboard.CalculateTransformFromArtboardToContent().Value.Transform(this.MouseDevice.GetPosition((IInputElement)this.ActiveView.Artboard)); PathFigureEditor pathFigureEditor = new PathFigureEditor(pathSegmentAdorner.PathGeometry.Figures[pathSegmentAdorner.FigureIndex]); Matrix transformMatrix = pathSegmentAdorner.PathAdornerSet.GetTransformMatrix((IViewObject)this.ActiveView.HitTestRoot); Point closestPoint; double distanceSquared; this.pathSegmentParameter = pathFigureEditor.GetClosestPointOfUpstreamSegment(pathSegmentAdorner.LastPointIndex, position, transformMatrix, Tolerances.CurveFlatteningTolerance, out closestPoint, out distanceSquared); }
protected override void OnBegin(PathEditContext pathEditContext, MouseDevice mouseDevice) { PerformanceUtility.MeasurePerformanceUntilRender(PerformanceEvent.EditPath); Point viewRootCoordinates = this.GetPointInViewRootCoordinates(mouseDevice, false); PathFigureEditor pathFigureEditor = new PathFigureEditor(pathEditContext.GetPathFigure(this.Path), this.PathEditorTarget.PathDiffChangeList, pathEditContext.FigureIndex); Matrix elementTransformToRoot = this.EditingElementTransformToRoot; int partIndex = pathEditContext.PartIndex; Point closestPoint; double distanceSquared; double ofUpstreamSegment = pathFigureEditor.GetClosestPointOfUpstreamSegment(partIndex, viewRootCoordinates, elementTransformToRoot, Tolerances.CurveFlatteningTolerance, out closestPoint, out distanceSquared); this.InsertPoint(pathEditContext, ofUpstreamSegment); base.OnBegin(pathEditContext, mouseDevice); this.End(); }