示例#1
0
 private void SetSliceMode(SliceModeEnum value)
 {
     _SliceMode = value;
     sliceNoneButton.Checked = value == SliceModeEnum.None;
     sliceUButton.Checked    = value == SliceModeEnum.SliceU;
     sliceVButton.Checked    = value == SliceModeEnum.SliceV;
     SliceModeChanged?.Invoke(this, new EventArgs());
 }
示例#2
0
 private void SliceVButton_Click(object sender, EventArgs e)
 {
     try
     {
         SliceMode = SliceModeEnum.SliceV;
     }
     catch (BaseException ex) { ExceptionDialog.Show(ex); }
 }
示例#3
0
        private Index[,] CalculatePointIndices()
        {
            const int minLevel = 2, maxLevel = 8;
            int       uCount = UCount, vCount = VCount;
            int       delta  = WireframeImage.DeltaLevel;
            int       uLevel = (uCount.Log2() + delta).Clip(minLevel, maxLevel);
            int       vLevel = (vCount.Log2() + delta).Clip(minLevel, maxLevel);
            int       nu     = CalculatePointCount(uCount, uLevel, UPeriodic, out int uShift);
            int       nu2    = nu / 2;
            int       nv     = CalculatePointCount(vCount, vLevel, VPeriodic, out int vShift);
            int       nv2    = nv / 2;

            SliceModeEnum sliceMode = WireframeImage.SliceMode;

            switch (sliceMode)
            {
            case SliceModeEnum.None:
                break;

            case SliceModeEnum.SliceU:
                nv = 1;
                break;

            case SliceModeEnum.SliceV:
                nu = 1;
                break;

            default:
                throw new InvalidCaseException("sliceMode", sliceMode, 561093);
            }
            int sliceValue = WireframeImage.SliceValue;

            //if (sliceValue < 0) sliceValue = 0;
            Index[,] indices = new Index[nu, nv];
            for (int i = 0; i < nu; i++)
            {
                for (int j = 0; j < nv; j++)
                {
                    int i1 = Min(i << uShift, uCount - 1);
                    int j1 = Min(j << vShift, vCount - 1);
                    int i2 = nu2 + sliceValue << vShift;
                    int j2 = nv2 + sliceValue << vShift;
                    indices[i, j] = sliceMode switch
                    {
                        SliceModeEnum.None => new Index(i1, j1),
                        SliceModeEnum.SliceU => new Index(i1, j2),
                        SliceModeEnum.SliceV => new Index(i2, j1),
                        _ => throw new InvalidCaseException(nameof(sliceMode), sliceMode, 681261),
                    };
                }
            }
            return(indices);
        }