예제 #1
0
        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;
        }
예제 #2
0
        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);
                }
            }
        }
예제 #3
0
 private void SetVisualItemInvisible(InteractivePanel3D oVisualItem)
 {
     if (oVisualItem.IsVisible)
     {
         if (this.Viewport3DZm.Children.Contains(oVisualItem))
         {
             this.Viewport3DZm.Children.Remove(oVisualItem);
             oVisualItem.IsVisible = false;
         }
     }
 }
예제 #4
0
 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);
         }
     }
 }
예제 #5
0
 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;
     }
 }