private void CreateOrUpdateInRefrenceArdoner(IModel thisModel, DependencyTreeItemControl treeItemControlOfReference, IModel modelOfReference) { DeleteInReferences(); CreateOrUpdateArdoner(thisModel, treeItemControlOfReference, modelOfReference, _inReferenceArdoner, false); }
private void CreateOrUpdateArdoner(IModel thisModel, DependencyTreeItemControl treeItemControlOfReference, IModel modelOfReference, Dictionary <Guid, BezierCurveAdorner> store, bool isLeft) { BezierCurveAdorner bezierCurveAdorner; var toRight = 550 + (isLeft ? 0 : 20); var halfRight = Math.Round((double)toRight / 2); var positionFactor = isLeft ? -1 : 1; var from = new Point(toRight, _yOffset); var to = treeItemControlOfReference.TranslatePoint(from, this); var controlOne = from; var controlTwo = to; var offsetFactor = Math.Ceiling((to.Y - from.Y) / 50); offsetFactor *= offsetFactor < 0 ? -1 : 1; var xOffset = 20 * (offsetFactor > 1 ? offsetFactor > halfRight ? halfRight : offsetFactor : 1) * positionFactor; controlOne.X = from.X + xOffset; controlOne.Y = from.Y; controlTwo.X = to.X + xOffset; controlTwo.Y = to.Y; if (store.ContainsKey(modelOfReference.Id)) { bezierCurveAdorner = store[modelOfReference.Id]; if (bezierCurveAdorner.IsSelected != IsSelected) { DeleteArdoner(modelOfReference.Id); return; } // Adding this item to InReference of referenced tree view item to draw the backline // Only update if some some point has changed if (bezierCurveAdorner.From != from || bezierCurveAdorner.ControlOne != controlOne || bezierCurveAdorner.ControlTwo != controlTwo || bezierCurveAdorner.To != to) { bezierCurveAdorner.From = from; bezierCurveAdorner.ControlOne = controlOne; bezierCurveAdorner.ControlTwo = controlTwo; bezierCurveAdorner.To = to; bezierCurveAdorner.UpdateLayout(); _host.AdornerLayer.UpdateLayout(); } } else { if (!treeItemControlOfReference.ReferenceControls.Contains(this)) { treeItemControlOfReference.ReferenceControls.Add(this); } bezierCurveAdorner = new BezierCurveAdorner(this, from, controlOne, controlTwo, to) { IsHitTestVisible = false }; bezierCurveAdorner.IsHarmfull = thisModel.IsHarmfull; bezierCurveAdorner.IsSelected = IsSelected; _host.AdornerLayer.Add(bezierCurveAdorner); store.Add(modelOfReference.Id, bezierCurveAdorner); _host.AdornerLayer.UpdateLayout(); } }
private void CreateOrUpdateOutRefrenceArdoner(IModel thisModel, DependencyTreeItemControl teeItemControlOfReference, IModel modelOfReference) { CreateOrUpdateArdoner(thisModel, teeItemControlOfReference, modelOfReference, _outReferenceArdoner, true); }