/*! \endcond */
        #endregion

        #region ### Public Methods ###

        public override void Refresh()
        {
            base.Refresh();
            var vol = InVolume.GetData <CGVolume>();


            if (vol && vol.Count > 0 && vol.CrossSize > 0 && vol.CrossMaterialGroups.Count > 0)
            {
                List <IntRegion> volSets = new List <IntRegion>();
                if (Split)
                {
                    float dist;
                    float lastdist  = 0;
                    int   lastIndex = 0;
                    for (int sample = 0; sample < vol.Count; sample++)
                    {
                        dist = vol.FToDistance(vol.F[sample]);
                        if (dist - lastdist >= SplitLength)
                        {
                            volSets.Add(new IntRegion(lastIndex, sample));
                            lastdist  = dist;
                            lastIndex = sample;
                        }
                    }
                    if (lastIndex < vol.Count - 1)
                    {
                        volSets.Add(new IntRegion(lastIndex, vol.Count - 1));
                    }
                }
                else
                {
                    volSets.Add(new IntRegion(0, vol.Count - 1));
                }

                CGVMesh[] data = OutVMesh.GetAllData <CGVMesh>();
                System.Array.Resize <CGVMesh>(ref data, volSets.Count);

                prepare(vol);
                for (int sub = 0; sub < volSets.Count; sub++)
                {
                    data[sub] = CGVMesh.Get(data[sub], vol, volSets[sub], GenerateUV, ReverseTriOrder);
                    build(data[sub], vol, volSets[sub]);
                }

                OutVMesh.SetData(data);
            }
            else
            {
                OutVMesh.SetData(null);
            }
        }