private void InputStretchParamsButton_Click(object sender, EventArgs e) { // Fire the OnStretchInputsEntered event and provide the stretch parameter input. if (OnStretchInputsEntered != null) { // Create a new StretchParametersEventArgs to contain the input values. StretchParameters inputStretchParams = null; // Create the right type of stretch parameters defined by the user. switch (_stretchParamsType) { // - Minimum and maximum RGB values. case "Min Max RGB": // Get the models that contains the min/max red, green, and blue picker choices. RgbValuePickerModel minRgbModel = _minRgbPicker.Model as RgbValuePickerModel; RgbValuePickerModel maxRgbModel = _maxRgbPicker.Model as RgbValuePickerModel; // Read min/max RGB values that were chosen. double[] minValues = { minRgbModel.SelectedRed, minRgbModel.SelectedGreen, minRgbModel.SelectedBlue }; double[] maxValues = { maxRgbModel.SelectedRed, maxRgbModel.SelectedGreen, maxRgbModel.SelectedBlue }; // Create a new MinMaxStretchParameters object with the values. inputStretchParams = new MinMaxStretchParameters(minValues, maxValues); break; // - Minimum and maximum percent clip values. case "% Clip": // Read min/max percent values that were chosen. double minPercent = _minPercentSlider.Value; double maxPercent = _maxPercentSlider.Value; inputStretchParams = new PercentClipStretchParameters(minPercent, maxPercent); break; // Standard deviation factor. case "Std Dev": // Get the model that contains the standard deviation factor choices. StdDevFactorPickerModel factorModel = _stdDevPicker.Model as StdDevFactorPickerModel; // Get the selected factor. double standardDevFactor = factorModel.SelectedFactor; inputStretchParams = new StandardDeviationStretchParameters(standardDevFactor); break; } // Create a new StretchParametersEventArgs and provide the stretch parameters. StretchParametersEventArgs inputParamsEventArgs = new StretchParametersEventArgs(inputStretchParams); // Raise the event with the custom arguments. OnStretchInputsEntered(sender, inputParamsEventArgs); } }
private void ApplyRendererButton_Click(object sender, EventArgs e) { // Create the correct type of StretchParameters with the corresponding user inputs. StretchParameters stretchParameters = null; // See which type is selected and apply the corresponding input parameters to create the renderer. switch (_parameterInputTypeSpinner.SelectedItem.ToString()) { case "Min Max": // Read the minimum and maximum values for the red, green, and blue bands. double minRed = Convert.ToDouble(_minRedSpinner.SelectedItem); double minGreen = Convert.ToDouble(_minGreenSpinner.SelectedItem); double minBlue = Convert.ToDouble(_minBlueSpinner.SelectedItem); double maxRed = Convert.ToDouble(_maxRedSpinner.SelectedItem); double maxGreen = Convert.ToDouble(_maxGreenSpinner.SelectedItem); double maxBlue = Convert.ToDouble(_maxBlueSpinner.SelectedItem); // Create an array of the minimum and maximum values. double[] minValues = { minRed, minGreen, minBlue }; double[] maxValues = { maxRed, maxGreen, maxBlue }; // Create a new MinMaxStretchParameters with the values. stretchParameters = new MinMaxStretchParameters(minValues, maxValues); break; case "Percent Clip": // Get the percentile cutoff below which values in the raster dataset are to be clipped. double minimumPercent = Convert.ToDouble(_minPercentClipSlider.Progress); // Get the percentile cutoff above which pixel values in the raster dataset are to be clipped. double maximumPercent = Convert.ToDouble(_maxPercentClipSlider.Progress); // Create a new PercentClipStretchParameters with the inputs. stretchParameters = new PercentClipStretchParameters(minimumPercent, maximumPercent); break; case "Standard Deviation": // Read the standard deviation factor (the number of standard deviations used to define the range of pixel values). double standardDeviationFactor = Convert.ToDouble(_stdDeviationFactorSpinner.SelectedItem); // Create a new StandardDeviationStretchParameters with the selected number of standard deviations. stretchParameters = new StandardDeviationStretchParameters(standardDeviationFactor); break; } // Create an array to specify the raster bands (red, green, blue). int[] bands = { 0, 1, 2 }; // Create the RgbRenderer with the stretch parameters created above, then apply it to the raster layer. RgbRenderer rasterRenderer = new RgbRenderer(stretchParameters, bands, null, true); _rasterLayer.Renderer = rasterRenderer; }
private static void MorphBoneStretch(LimbDataBone bone, BonePixels bonePixel, StretchParameters stretchParameters) { var boneStartPoint = new Vector2(bone.StartPoint.X, bone.StartPoint.Y); var boneEndPoint = new Vector2(bone.EndPoint.X, bone.EndPoint.Y); var boneLength = Vector2.Distance(boneStartPoint, boneEndPoint); var indices = bonePixel.VertexIndices; foreach (var vertexIndex in indices) { var vertex = GB.LimbDataManager.LimbData.Mesh.Vertices[vertexIndex]; var vertexPoint = new Vector2(vertex.X, vertex.Y); var vertexWeight = GB.LimbDataManager.LimbData.Mesh.GetVertexWeight(vertex); var closestPointOnLine3D = Utils.GetClosestPointOnLine(bone.StartPoint, bone.EndPoint, new Vector3(vertexPoint.X, vertexPoint.Y, 0)); var closestPointOnLine2D = new Vector2(closestPointOnLine3D.X, closestPointOnLine3D.Y); var progressOnLine = Vector2.Distance(closestPointOnLine2D, boneStartPoint) / boneLength; if (progressOnLine < 0 || progressOnLine > 1) { continue; } var distance = Vector2.Distance(vertexPoint, closestPointOnLine2D); var directionVector = Vector2.Normalize(vertexPoint - closestPointOnLine2D); var distanceMultiplier = distance / 2f; var curveScale = 1f + stretchParameters.Power * stretchParameters.Curve.Evaluate(progressOnLine); vertex.X += curveScale * directionVector.X * stretchParameters.Power * distanceMultiplier * vertexWeight; vertex.Y += curveScale * directionVector.Y * stretchParameters.Power * distanceMultiplier * vertexWeight; vertex.Z = bone.BoneHash; GB.LimbDataManager.LimbData.Mesh.Vertices[vertexIndex] = vertex; } }
// Store parameter info passed into the constructor. public StretchParametersEventArgs(StretchParameters stretchParams) { StretchParams = stretchParams; }
private void ApplyRgbRendererButton_Click(object sender, System.Windows.RoutedEventArgs e) { // Create the correct type of StretchParameters with the corresponding user inputs. StretchParameters stretchParameters = null; // See which type is selected and apply the corresponding input parameters to create the renderer. switch (StretchTypeComboBox.SelectedValue.ToString()) { case "Min Max": // Read the minimum and maximum values for the red, green, and blue bands. double minRed = Convert.ToDouble(MinRedComboBox.SelectedValue); double minGreen = Convert.ToDouble(MinGreenComboBox.SelectedValue); double minBlue = Convert.ToDouble(MinBlueComboBox.SelectedValue); double maxRed = Convert.ToDouble(MaxRedComboBox.SelectedValue); double maxGreen = Convert.ToDouble(MaxGreenComboBox.SelectedValue); double maxBlue = Convert.ToDouble(MaxBlueComboBox.SelectedValue); // Create an array of the minimum and maximum values. double[] minValues = { minRed, minGreen, minBlue }; double[] maxValues = { maxRed, maxGreen, maxBlue }; // Create a new MinMaxStretchParameters with the values. stretchParameters = new MinMaxStretchParameters(minValues, maxValues); break; case "Percent Clip": // Get the percentile cutoff below which values in the raster dataset are to be clipped. double minimumPercent = MinimumValueSlider.SelectedIndex; // Get the percentile cutoff above which pixel values in the raster dataset are to be clipped. double maximumPercent = MaximumValueSlider.SelectedIndex; // Create a new PercentClipStretchParameters with the inputs. stretchParameters = new PercentClipStretchParameters(minimumPercent, maximumPercent); break; case "Standard Deviation": // Read the standard deviation factor (the number of standard deviations used to define the range of pixel values). double standardDeviationFactor = Convert.ToDouble(StdDeviationFactorComboBox.SelectedValue); // Create a new StandardDeviationStretchParameters with the selected number of standard deviations. stretchParameters = new StandardDeviationStretchParameters(standardDeviationFactor); break; } // Create an array to specify the raster bands (red, green, blue). int[] bands = { 0, 1, 2 }; // Create the RgbRenderer with the stretch parameters created above, then apply it to the raster layer. RgbRenderer rgbRenderer; StretchRenderer stretchRenderer; if (stretchItem.IsEnabled == false) { rgbRenderer = new RgbRenderer(stretchParameters, bands, null, true); _rasterLayer.Renderer = rgbRenderer; } else if (stretchItem.IsEnabled == true) { PresetColorRampType pcrt; int colorType = Convert.ToInt32(ColorRampCsy.SelectedIndex - 1); switch (colorType) { case -1: pcrt = PresetColorRampType.Elevation; break; case 0: pcrt = PresetColorRampType.Elevation; break; case 1: pcrt = PresetColorRampType.DemScreen; break; case 2: pcrt = PresetColorRampType.DemScreen; break; default: pcrt = PresetColorRampType.DemScreen; break; } uint colorSize = Convert.ToUInt32(ColorRampSizeCsy.SelectedValue); stretchRenderer = new StretchRenderer(stretchParameters, null, true, ColorRamp.Create(pcrt, colorSize)); _rasterLayer.Renderer = stretchRenderer; } }