Example #1
0
        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;
            }
        }
Example #4
0
 // Store parameter info passed into the constructor.
 public StretchParametersEventArgs(StretchParameters stretchParams)
 {
     StretchParams = stretchParams;
 }
Example #5
0
        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;
            }
        }