コード例 #1
0
        private void ClearButton_OnClick(object sender, RoutedEventArgs e)
        {
            ObjectsVisual.Children.Clear();

            SelectObject(null);
            HighlightObject(null);
            OverlayViewport.HideModelMover();
            OverlayCanvas.ClearScreenPositions();
        }
コード例 #2
0
        private void UpdateEditorModeUI()
        {
            if (_currentEditorMode == EditorModes.Create)
            {
                CreateOptionsPanel.Visibility = Visibility.Visible;
                EditOptionsPanel.Visibility   = Visibility.Collapsed;

                ViewportBorder.Cursor = Cursors.Arrow;
            }
            else if (_currentEditorMode == EditorModes.Edit)
            {
                CreateOptionsPanel.Visibility = Visibility.Collapsed;
                EditOptionsPanel.Visibility   = Visibility.Visible;

                ViewportBorder.Cursor = Cursors.Hand;
            }

            SelectObject(null);
            HighlightObject(null);
            OverlayViewport.HideModelMover();
            OverlayCanvas.ClearScreenPositions();

            UpdateHorizontalMouseLines();
        }
コード例 #3
0
        private void ProcessEditMouseButtonPressed(MouseButtonEventArgs e)
        {
            Point mousePosition = e.GetPosition(MainViewport);


            if ((EditPositionsToggleButton.IsChecked ?? false))
            {
                // Get all screen positions that are near mousePosition
                var intersectingScreenPositions = OverlayCanvas.GetIntersectingScreenPositions(mousePosition, OverlayCanvas.PositionSelectionMinMouseDistance);

                if (intersectingScreenPositions != null && intersectingScreenPositions.Count > 0)
                {
                    bool updateModelMover = false;

                    foreach (var intersectingScreenPosition in intersectingScreenPositions)
                    {
                        if (intersectingScreenPosition.IsSelected) // If we clicked on selected position, unselect it
                        {
                            OverlayCanvas.ClearSelectedScreenPosition(intersectingScreenPosition);
                            updateModelMover = true;
                        }
                        else if (intersectingScreenPosition.IsHighlighted) // select highlighted position
                        {
                            OverlayCanvas.ClearHighlightedScreenPosition(intersectingScreenPosition);
                            OverlayCanvas.SelectScreenPosition(intersectingScreenPosition);
                            updateModelMover = true;
                        }
                    }

                    if (updateModelMover)
                    {
                        if (OverlayCanvas.GetSelectedScreenPositionsCount() == 0)
                        {
                            // No more selected positions
                            OverlayViewport.HideModelMover();
                        }
                        else
                        {
                            OverlayViewport.SetupModelMover();

                            // Get center position of all highlighted positions
                            _startMovePosition = OverlayCanvas.GetCenterWorldPosition(p => p.IsSelected);
                            OverlayViewport.ModelMoverPosition = _startMovePosition;

                            OverlayViewport.UpdateModelMoverSize(desiredScreenLength: 100);
                        }
                    }

                    // If we have clicked on a position, do not proceed with checking which object was clicked
                    return;
                }
            }


            var hitModelVisual3D = GetHitObject(mousePosition);

            if (hitModelVisual3D != null)
            {
                if (_selectedModelVisual3D == hitModelVisual3D)
                {
                    return;
                }

                if (EditObjectToggleButton.IsChecked ?? false)
                {
                    // Show selection CornerWireBoxVisual3D around selected object
                    var selectedModelBounds = ModelUtils.GetBounds(hitModelVisual3D, hitModelVisual3D.Transform, checkOnlyBounds: true);
                    SelectObject(hitModelVisual3D, selectedModelBounds);

                    OverlayViewport.SetupModelMover();

                    _startMovePosition = selectedModelBounds.GetCenterPosition();
                    OverlayViewport.ModelMoverPosition = _startMovePosition;

                    OverlayViewport.UpdateModelMoverSize(desiredScreenLength: 100);
                }
                else
                {
                    OverlayCanvas.ClearScreenPositions(); // Clear positions on previously selected model

                    var meshGeometry3D = GetMeshGeometry3D(hitModelVisual3D);
                    OverlayCanvas.AddScreenPositions(meshGeometry3D, hitModelVisual3D.Transform);

                    _selectedModelVisual3D = hitModelVisual3D;
                }
            }


            if (_selectedModelVisual3D == null)
            {
                SelectObject(null);
                OverlayViewport.HideModelMover();
            }

            HighlightObject(null);
        }