private void CreateElements() { bool bIsNodeCountLarge = this.IsEnoughCycle(); if (!bIsNodeCountLarge) { this.MinViewportAngle = COriginViewprotAngel; this.MaxViewportAngle = COriginViewprotAngel + this.FileItems.Count * (360d / this.TemplateCount); } double dAverageAngle = 360d / TemplateCount; this.TotalDegree = this.FileItems.Count * dAverageAngle; for (int nIndex = 0; nIndex < this.FileItems.Count; nIndex++) { InteractivePanel3D oVisualItem = new InteractivePanel3D(this.FileItems[nIndex], nIndex); double dDegree = nIndex * dAverageAngle; Transform3DGroup oTransform3DGroup = this.CreateVisualItemTransform(dDegree); oVisualItem.Transform = oTransform3DGroup; oVisualItem.Degree = dDegree; this.ElementList.Add(oVisualItem); } DoUpdateLayout(); CompositionTarget.Rendering -= CompositionTarget_AutoCarousel; CompositionTarget.Rendering += CompositionTarget_AutoCarousel; }
private void DoUpdateLayout() { for (int i = 0; i < ElementList.Count; i++) { InteractivePanel3D oVisualItem = this.ElementList[i]; if (oVisualItem.Degree + this.CameraAngleYZm.Angle >= this.TotalDegree / 2d) { oVisualItem.Degree -= this.TotalDegree; } else if (oVisualItem.Degree + this.CameraAngleYZm.Angle <= -this.TotalDegree / 2d) { oVisualItem.Degree += this.TotalDegree; } //元素块角度与3D场景旋转角度的角度差; 角度差在定义的范围内则元素块显示,否则隐藏 double dDistanceToCenter = Math.Abs(oVisualItem.Degree + this.CameraAngleYZm.Angle - COriginViewprotAngel); if (dDistanceToCenter <= CBoundDegree) { this.SetVisualItemVisible(oVisualItem); } else { this.SetVisualItemInvisible(oVisualItem); } } }
private void SetVisualItemInvisible(InteractivePanel3D oVisualItem) { if (oVisualItem.IsVisible) { if (this.Viewport3DZm.Children.Contains(oVisualItem)) { this.Viewport3DZm.Children.Remove(oVisualItem); oVisualItem.IsVisible = false; } } }
private void SetVisualItemVisible(InteractivePanel3D oVisualItem) { if (!oVisualItem.IsVisible) { if (!this.Viewport3DZm.Children.Contains(oVisualItem)) { oVisualItem.IsVisible = true; oVisualItem.Transform = this.CreateVisualItemTransform(oVisualItem.Degree); this.Viewport3DZm.Children.Add(oVisualItem); } } }
private void FreeElements() { if (this.ElementList != null) { for (int i = 0; i < this.ElementList.Count; i++) { InteractivePanel3D oVisualItem = this.ElementList[i]; oVisualItem.Dispose(); } this.Viewport3DZm.Children.Clear(); this.ElementList.Clear(); this.ElementList = null; } }