private void Transform(IEnumerable <IFacet> facets, IEnumerable <double> lightVecor = null) { UiElementsCollection = null; var enumerable = facets as IList <IFacet> ?? facets.ToList(); var roberts = new RobertsAlgorithm(); var res = roberts.HideLines(enumerable, new Vertex(1000, 0, 0, 5000)).ToList(); var resultFacet = res.Where(x => x.IsHidden != true).ToObservableCollection(); // shadow facets var uiCollection = ShadowFasets(enumerable).ToObservableCollection(); // detail faces uiCollection.InsertRange(FillFasets(resultFacet, lightVecor)); UiElementsCollection = uiCollection; #region Draw Normal and Central points //for (int i = 0; i < res.Count - 1; i++) //{ // var collection = res[i].Normal.ToList(); // var arr = res[i].ArristCollection.ToList(); // UiElementsCollection.Add(CreateLine(collection[0], collection[1] + 100, arr[0].FirstVertex.X + CenterX, arr[0].FirstVertex.Y + CenterY, "")); //} //for (int i = 0; i < res.Count - 1; i++) //{ // var item = res[i].Center.ToList(); // UiElementsCollection.Add(CreateEllipse(item[0] + CenterX - 5, item[1] + CenterY - 5)); //} #endregion }
private void ViewProjection() { viewRotate = true; _drawTheFirst(); _projectionTransform = () => { var coll = (IEnumerable <IFacet>)_resultTransformationFacets.DeepClone(); var rotate = _transformation.GetRotateFacets(coll, FiView, Teta, 0); foreach (var item in rotate) { var arrises = item.ArristCollection.ToList(); item.FaceColor = IsBulb ? _lightFace.RgbLigth(MainColor, item, new List <double> { LightViewVector[1], -LightViewVector[0], -LightViewVector[2] }, Ro > 0 && LightViewVector[2] > 0) : MainColor; } var resColl = _transformation.ViewTransformation(rotate, 0, 0, Ro, Distance); var roberts = new RobertsAlgorithm(); var res = roberts.HideLines(resColl, new Vertex(1000, 0, 0, Ro > 0 ? -Math.Abs(LightViewVector[2]) : Math.Abs(LightViewVector[2]))) .ToList(); var resultFacet = res.Where(x => x.IsHidden != true).ToObservableCollection(); var uiCollection = new ObservableCollection <UIElement>(); foreach (var item in resultFacet) { var arrises = item.ArristCollection.ToList(); var listPoint = arrises.Select(arris => new Point(arris.FirstVertex.X + CenterX, arris.FirstVertex.Y + CenterY)).ToList(); var detailPath = new Path { Fill = item.FaceColor, Stroke = item.FaceColor, Data = new CombinedGeometry(new PathGeometry(new [] { new PathFigure(listPoint[listPoint.Count - 1], new [] { new PolyLineSegment(listPoint, false) }, true) }), null) }; uiCollection.Add(detailPath); } UiElementsCollection = uiCollection; }; _projectionTransform(); }