private void ClearDuckHighlight() { if (_cornerWireBoxVisual3D != null) { MainViewport.Children.Remove(_cornerWireBoxVisual3D); _cornerWireBoxVisual3D = null; } }
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); }
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; } }
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); } }