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()); }
private void SliceVButton_Click(object sender, EventArgs e) { try { SliceMode = SliceModeEnum.SliceV; } catch (BaseException ex) { ExceptionDialog.Show(ex); } }
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); }