예제 #1
0
        private void UpdateBuffer()
        {
            uint packSize = AnnotationVariable.DataType.GetPackSizeScalar();

            if (AnnotationVariable.IsMatrix && Values[0] is SerializableColor)
            {
                for (int i = 0; i < Values.Count; ++i)
                {
                    uint stepOffset = packSize * AnnotationVariable.Rows;
                    stepOffset = stepOffset.RoundUpMultiple16();
                    AnnotationVariable.CopyColorToBuffer((SerializableColor)Values.ElementAt(i), stepOffset, packSize * (uint)i);
                }
            }
            else
            {
                uint startOffset = 0;
                for (int column = 0; column < AnnotationVariable.Columns; ++column)
                {
                    for (int row = 0; row < AnnotationVariable.Rows; ++row)
                    {
                        if (Values[row * column + column] != null)
                        {
                            AnnotationVariable.CopyToBuffer(PropertyHelpers.ConvertToCorrectType(AnnotationVariable.DataType, Values[row * (int)AnnotationVariable.Columns + column]), startOffset);
                        }
                        startOffset += packSize;
                    }
                    startOffset = startOffset.RoundUpMultiple16();
                }
            }
            ITempHelper helper = ((App)Application.Current).ActiveViewport;

            AnnotationVariable.AnnotationGroup.MarshalBuffer(helper.ViewportHost, helper.IsStandardShaderActive);
        }
예제 #2
0
        public static UIElement CreateSlider(object source, string path, AnnotationVariable var, object storedValue)
        {
            Slider slider = new Slider();

            slider.Minimum       = (var.DataType.IsIntegral()) ? var.GetMinimumInteger() : var.GetMinimumDouble();
            slider.Maximum       = (var.DataType.IsIntegral()) ? var.GetMaximumInteger() : var.GetMaximumDouble();
            slider.TickFrequency = (var.DataType.IsIntegral()) ? var.GetStepInteger() : var.GetStepDouble();

            slider.IsSnapToTickEnabled        = true;
            slider.HorizontalContentAlignment = HorizontalAlignment.Stretch;
            slider.HorizontalAlignment        = HorizontalAlignment.Stretch;
            slider.Width = 250;
            Binding binding = new Binding();

            binding.Source = source;
            binding.Mode   = BindingMode.TwoWay;
            binding.Path   = new PropertyPath(path);

            BindingOperations.SetBinding(slider, RangeBase.ValueProperty, binding);
            if (storedValue == null)
            {
                slider.Value = Math.Max(Math.Min(0.0, slider.Maximum), slider.Minimum);
            }
            else
            {
                slider.Value = (double)storedValue;
            }
            return(slider);
        }
예제 #3
0
        public static UIElement CreateSpinner(object source, string path, AnnotationVariable var, object storedValue)
        {
            if (var.DataType.IsIntegral())
            {
                IntegerUpDown spinner = new IntegerUpDown();
                spinner.Increment = var.GetStepInteger();
                spinner.Minimum   = var.GetMinimumInteger();
                spinner.Maximum   = var.GetMaximumInteger();

                Binding binding = new Binding();
                binding.Source = source;
                binding.Mode   = BindingMode.TwoWay;
                binding.Path   = new PropertyPath(path);

                BindingOperations.SetBinding(spinner, IntegerUpDown.ValueProperty, binding);
                if (storedValue == null)
                {
                    spinner.Value = Math.Max(Math.Min(0, spinner.Maximum.Value), spinner.Minimum.Value);
                }
                else
                {
                    spinner.Value = (int)storedValue;
                }
                spinner.HorizontalContentAlignment = HorizontalAlignment.Stretch;
                spinner.HorizontalAlignment        = HorizontalAlignment.Stretch;

                return(spinner);
            }
            else
            {
                DoubleUpDown spinner = new DoubleUpDown();
                spinner.Increment = var.GetStepDouble();
                spinner.Minimum   = var.GetMinimumDouble();
                spinner.Maximum   = var.GetMaximumDouble();


                Binding binding = new Binding();
                binding.Source = source;
                binding.Mode   = BindingMode.TwoWay;
                binding.Path   = new PropertyPath(path);

                BindingOperations.SetBinding(spinner, DoubleUpDown.ValueProperty, binding);
                if (storedValue == null)
                {
                    spinner.Value = Math.Max(Math.Min(0, spinner.Maximum.Value), spinner.Minimum.Value);
                }
                else
                {
                    spinner.Value = (double)storedValue;
                }
                spinner.HorizontalContentAlignment = HorizontalAlignment.Stretch;
                spinner.HorizontalAlignment        = HorizontalAlignment.Stretch;

                return(spinner);
            }
        }
예제 #4
0
        public static double GetStepDouble(this AnnotationVariable var)
        {
            string uistep = "";
            double step   = 0.1;

            if (var.Annotations?.TryGetValue("UIStep", out uistep) ?? false)
            {
                double.TryParse(uistep, NumberStyles.Any, CultureInfo.InvariantCulture, out step);
            }
            return(step);
        }
예제 #5
0
        public static int GetStepInteger(this AnnotationVariable var)
        {
            string uistep = "";
            int    step   = 1;

            if (var.Annotations?.TryGetValue("UIStep", out uistep) ?? false)
            {
                int.TryParse(uistep, out step);
            }
            return(step);
        }
예제 #6
0
        public static double GetMaximumDouble(this AnnotationVariable var)
        {
            double maximum = double.MaxValue;
            string max     = "";

            if (var.Annotations?.TryGetValue("UIMax", out max) ?? false)
            {
                double.TryParse(max, NumberStyles.Any, CultureInfo.InvariantCulture, out maximum);
            }
            if (var.IsSNorm || var.IsUNorm)
            {
                maximum = Math.Min(maximum, 1.0);
            }
            return(maximum);
        }
예제 #7
0
        public static int GetMaximumInteger(this AnnotationVariable var)
        {
            int    maximum = int.MaxValue;
            string max     = "";

            if (var.Annotations?.TryGetValue("UIMax", out max) ?? false)
            {
                int.TryParse(max, out maximum);
            }
            if (var.IsSNorm || var.IsUNorm)
            {
                maximum = Math.Min(maximum, 1);
            }
            return(maximum);
        }
예제 #8
0
        public static void EndVar()
        {
            if (_varValid)
            {
                if (_activeGroup.AnnotationVariables.Count > 0 && !_activeVar.IsTexture &&
                    (
                        (_activeGroup.AnnotationVariables.Last().DataType.IsMinimum() && !_activeVar.DataType.IsMinimum()) ||
                        (!_activeGroup.AnnotationVariables.Last().DataType.IsMinimum() && _activeVar.DataType.IsMinimum())))

                {
                    _curOffset = _curOffset.RoundUpMultiple16();
                }

                _activeGroup.AnnotationVariables.Add(_activeVar);

                if (!_activeVar.IsTexture)
                {
                    uint size = 0;
                    if (_activeVar.IsScalar)
                    {
                        size = _activeVar.DataType.GetPackSizeScalar();
                    }
                    else if (_activeVar.IsVector)
                    {
                        size = _activeVar.DataType.GetPackSizeScalar() * _activeVar.Columns;
                    }
                    else if (_activeVar.IsMatrix)
                    {
                        size = (_activeVar.Columns - 1) * 16 + (_activeVar.DataType.GetPackSizeScalar() * _activeVar.Rows);
                    }
                    if (_activeVar.Dimension > 0)
                    {
                        size  = size.RoundUpMultiple16();
                        size *= (uint)_activeVar.Dimension;
                    }

                    uint nextMultiple = _curOffset.RoundUpMultiple16();
                    if (_curOffset + size > nextMultiple && _curOffset > 0)
                    {
                        _curOffset = nextMultiple;
                    }
                    _activeVar.Offset = _curOffset;
                    _activeVar.Size   = size;
                    _curOffset       += size;
                }
            }
            _activeVar = null;
        }
예제 #9
0
        public static double GetMinimumDouble(this AnnotationVariable var)
        {
            double minimum = double.MinValue;
            string min     = "";

            if (var.Annotations?.TryGetValue("UIMin", out min) ?? false)
            {
                double.TryParse(min, NumberStyles.Any, CultureInfo.InvariantCulture, out minimum);
            }
            if (var.IsSNorm)
            {
                minimum = Math.Max(minimum, -1.0);
            }
            else if (var.IsUNorm || var.DataType.IsUnsigned())
            {
                minimum = Math.Max(minimum, 0.0);
            }
            return(minimum);
        }
예제 #10
0
        public static int GetMinimumInteger(this AnnotationVariable var)
        {
            int    minimum = int.MinValue;
            string min     = "";

            if (var.Annotations?.TryGetValue("UIMin", out min) ?? false)
            {
                int.TryParse(min, out minimum);
            }
            if (var.IsSNorm)
            {
                minimum = Math.Max(minimum, -1);
            }
            else if (var.IsUNorm || var.DataType.IsUnsigned())
            {
                minimum = Math.Max(minimum, 0);
            }
            return(minimum);
        }
예제 #11
0
        public ImagePicker(AnnotationVariable annotationVar)
        {
            InitializeComponent();

            ((ImagePickerViewModel)DataContext).AnnotationVariable = annotationVar;
        }
        public DropdownVecMatProperty(AnnotationVariable annotationVar)
        {
            InitializeComponent();

            ((DropdownVecMatPropertyViewModel)DataContext).AnnotationVariable = annotationVar;
        }
예제 #13
0
 public static void BeginVar()
 {
     _activeVar = new AnnotationVariable();
     _varValid  = true;
 }
예제 #14
0
 public static void DestroyGroup()
 {
     _activeVar   = null;
     _activeGroup = null;
 }