Beispiel #1
0
 private void ClearDuckHighlight()
 {
     if (_cornerWireBoxVisual3D != null)
     {
         MainViewport.Children.Remove(_cornerWireBoxVisual3D);
         _cornerWireBoxVisual3D = null;
     }
 }
Beispiel #2
0
        private void HighlightDuckVisual3D(ModelVisual3D duckModelVisual3D)
        {
            if (_cornerWireBoxVisual3D != null)
            {
                ClearDuckHighlight();
            }

            var duckBounds = duckModelVisual3D.Content.Bounds;

            duckBounds = duckModelVisual3D.Transform.TransformBounds(duckBounds);

            _cornerWireBoxVisual3D = new CornerWireBoxVisual3D()
            {
                CenterPosition = duckBounds.GetCenterPosition(),
                Size           = duckBounds.Size,
                LineColor      = Colors.DimGray,
                LineThickness  = 1,
            };

            MainViewport.Children.Add(_cornerWireBoxVisual3D);
        }
Beispiel #3
0
        private void HighlightObject(ModelVisual3D newHighlightedObject, Rect3D highlightedObjectBounds)
        {
            if (newHighlightedObject == null)
            {
                _highlightedModelVisual3D = null;

                if (_highlightWireBoxVisual3D != null)
                {
                    if (LinesVisual.Children.Contains(_highlightWireBoxVisual3D))
                    {
                        LinesVisual.Children.Remove(_highlightWireBoxVisual3D);
                    }

                    _highlightWireBoxVisual3D = null;
                }
            }
            else if (newHighlightedObject == _selectedModelVisual3D)
            {
                // Do nothing - do not highlight selected object
            }
            else
            {
                if (_highlightWireBoxVisual3D == null)
                {
                    _highlightWireBoxVisual3D = new CornerWireBoxVisual3D()
                    {
                        IsLineLengthPercent = false,
                        LineLength          = 5,
                        LineThickness       = 2,
                        LineColor           = SceneEditorContext.Current.HighlightedColor
                    };
                }

                if (highlightedObjectBounds.IsEmpty)
                {
                    highlightedObjectBounds = ModelUtils.GetBounds(newHighlightedObject, newHighlightedObject.Transform, checkOnlyBounds: true);
                }

                double standardSelectionLineLength = 5;
                double minSize = Math.Min(highlightedObjectBounds.SizeX, Math.Min(highlightedObjectBounds.SizeY, highlightedObjectBounds.SizeZ));

                if (minSize > standardSelectionLineLength * 3)
                {
                    _highlightWireBoxVisual3D.LineLength = standardSelectionLineLength;
                }
                else
                {
                    _highlightWireBoxVisual3D.LineLength = minSize / 3;
                }

                _highlightWireBoxVisual3D.CenterPosition = highlightedObjectBounds.GetCenterPosition();
                _highlightWireBoxVisual3D.Size           = highlightedObjectBounds.Size;


                if (!LinesVisual.Children.Contains(_highlightWireBoxVisual3D))
                {
                    LinesVisual.Children.Add(_highlightWireBoxVisual3D);
                }

                _highlightedModelVisual3D = newHighlightedObject;
            }
        }
Beispiel #4
0
        private void SelectObject(ModelVisual3D newSelectedObject, Rect3D selectedObjectBounds)
        {
            if (newSelectedObject == null)
            {
                _selectedModelVisual3D              = null;
                _selectedObjectScaleTransform       = null;
                _selectedObjectTranslateTransform3D = null;

                if (_selectionWireBoxVisual3D != null)
                {
                    if (LinesVisual.Children.Contains(_selectionWireBoxVisual3D))
                    {
                        LinesVisual.Children.Remove(_selectionWireBoxVisual3D);
                    }

                    _selectionWireBoxVisual3D = null;
                }

                OverlayCanvas.ClearScreenPositions();
            }
            else
            {
                if (_selectionWireBoxVisual3D == null)
                {
                    _selectionWireBoxVisual3D = new CornerWireBoxVisual3D()
                    {
                        IsLineLengthPercent = false,
                        LineLength          = 5,
                        LineThickness       = 2,
                        LineColor           = SceneEditorContext.Current.SelectedColor
                    };
                }

                if (selectedObjectBounds.IsEmpty)
                {
                    selectedObjectBounds = ModelUtils.GetBounds(newSelectedObject, newSelectedObject.Transform, checkOnlyBounds: true);
                }

                double standardSelectionLineLength = 5;
                double minSize = Math.Min(selectedObjectBounds.SizeX, Math.Min(selectedObjectBounds.SizeY, selectedObjectBounds.SizeZ));

                if (minSize > standardSelectionLineLength * 3)
                {
                    _selectionWireBoxVisual3D.LineLength = standardSelectionLineLength;
                }
                else
                {
                    _selectionWireBoxVisual3D.LineLength = minSize / 3;
                }


                _selectionWireBoxVisual3D.CenterPosition = selectedObjectBounds.GetCenterPosition();
                _selectionWireBoxVisual3D.Size           = selectedObjectBounds.Size;


                if (!LinesVisual.Children.Contains(_selectionWireBoxVisual3D))
                {
                    LinesVisual.Children.Add(_selectionWireBoxVisual3D);
                }

                _selectedModelVisual3D = newSelectedObject;
                _selectedObjectTranslateTransform3D = GetFirstTranslateTransform3D(_selectedModelVisual3D.Transform);
                _selectedObjectScaleTransform       = GetFirstScaleTransform3D(_selectedModelVisual3D.Transform);
            }
        }