diff --git a/sources/RevitDBExplorer/Domain/DataModel/ValueContainers/CurveHandler.cs b/sources/RevitDBExplorer/Domain/DataModel/ValueContainers/CurveHandler.cs index 4791702a..8a8c881c 100644 --- a/sources/RevitDBExplorer/Domain/DataModel/ValueContainers/CurveHandler.cs +++ b/sources/RevitDBExplorer/Domain/DataModel/ValueContainers/CurveHandler.cs @@ -19,6 +19,12 @@ internal sealed class CurveHandler : TypeHandler [CodeToString] protected override IEnumerable GetVisualization(SnoopableContext context, Curve curve) { + if (curve is Line line) + { + yield return new VisualizationItem("Line", "Origin", new CubeDrawingVisual(line.Origin, VisualizationItem.Accent1Color)); + yield return new VisualizationItem("Line", "Direction", new ArrowDrawingVisual(line.Origin, line.Direction, VisualizationItem.Accent2Color)); + } + if (curve.IsBound) { var startPoint = curve.GetEndPoint(0); diff --git a/sources/RevitDBExplorer/Domain/DataModel/ValueContainers/EdgeHandler.cs b/sources/RevitDBExplorer/Domain/DataModel/ValueContainers/EdgeHandler.cs index eb9a5008..6dff176d 100644 --- a/sources/RevitDBExplorer/Domain/DataModel/ValueContainers/EdgeHandler.cs +++ b/sources/RevitDBExplorer/Domain/DataModel/ValueContainers/EdgeHandler.cs @@ -21,6 +21,12 @@ protected override IEnumerable GetVisualization(SnoopableCont { var curve = edge.AsCurve(); + if (curve is Line line) + { + //yield return new VisualizationItem("Edge", "AsCurve().Origin", new CubeDrawingVisual(line.Origin, VisualizationItem.Accent1Color)); + //yield return new VisualizationItem("Edge", "AsCurve().Direction", new ArrowDrawingVisual(line.Origin, line.Direction, VisualizationItem.Accent2Color)); + } + if (curve.IsBound) { var startPoint = curve.GetEndPoint(0); diff --git a/sources/RevitDBExplorer/Domain/DataModel/ValueContainers/ElementHandler.cs b/sources/RevitDBExplorer/Domain/DataModel/ValueContainers/ElementHandler.cs index b18e04f9..b8eb64a5 100644 --- a/sources/RevitDBExplorer/Domain/DataModel/ValueContainers/ElementHandler.cs +++ b/sources/RevitDBExplorer/Domain/DataModel/ValueContainers/ElementHandler.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Linq; using Autodesk.Revit.DB; using NSourceGenerators; using RevitDBExplorer.Domain.DataModel.ValueContainers.Base; @@ -40,14 +41,51 @@ protected override IEnumerable Snooop(SnoopableContext context, protected override bool CanBeVisualized(SnoopableContext context, Element element) => element is not ElementType; [CodeToString] protected override IEnumerable GetVisualization(SnoopableContext context, Element element) - { + { var bb = element.get_BoundingBox(null); + var refPoint = bb.CenterPoint(); + + if (element is FamilyInstance familyInstance) + { + yield return new VisualizationItem("FamilyInstance", "FacingOrientation", new ArrowDrawingVisual(refPoint, familyInstance.FacingOrientation, VisualizationItem.Accent1Color)); + yield return new VisualizationItem("FamilyInstance", "HandOrientation", new ArrowDrawingVisual(refPoint, familyInstance.HandOrientation, VisualizationItem.Accent2Color)); + + var totalTransform = familyInstance.GetTotalTransform(); + var transformedOrgin = totalTransform.OfPoint(XYZ.Zero); + + yield return new VisualizationItem("FamilyInstance", "GetTotalTransform", new VectorDrawingVisual(XYZ.Zero, transformedOrgin, VisualizationItem.Accent3Color)); + + if (familyInstance.HasSweptProfile()) + { + var profile = familyInstance.GetSweptProfile(); + var sweptProfile = profile.GetSweptProfile(); + //yield return new VisualizationItem("FamilyInstance", "GetSweptProfile().GetSweptProfile().Curves", new CurvesDrawingVisual(sweptProfile.Curves.ToEnumerable().ToArray(), VisualizationItem.Accent3Color)); + } + } + + + if (element is Wall wall) + { + yield return new VisualizationItem("Wall", "Orientation", new ArrowDrawingVisual(refPoint, wall.Orientation, VisualizationItem.Accent1Color)); + } + + if (element.Location is not null) + { + if (element.Location is LocationPoint locationPoint) + { + yield return new VisualizationItem("Element", "Location.Point", new CubeDrawingVisual(locationPoint.Point, VisualizationItem.PointColor)); + } + if (element.Location is LocationCurve locationCurve) + { + yield return new VisualizationItem("Element", "Location.Curve", new CurveDrawingVisual(locationCurve.Curve, VisualizationItem.PointColor)); + } + } if (bb != null && (bb.Max != null) && (bb.Min != null)) { yield return new VisualizationItem("Element", "get_BoundingBox(null).Min", new CrossDrawingVisual(bb.Min, VisualizationItem.StartColor)); yield return new VisualizationItem("Element", "get_BoundingBox(null).Max", new CrossDrawingVisual(bb.Max, VisualizationItem.EndColor)); - } + } } } } \ No newline at end of file diff --git a/sources/RevitDBExplorer/Domain/DataModel/ValueContainers/RebarHandler.cs b/sources/RevitDBExplorer/Domain/DataModel/ValueContainers/RebarHandler.cs index 2c54b62b..6c0f4ff7 100644 --- a/sources/RevitDBExplorer/Domain/DataModel/ValueContainers/RebarHandler.cs +++ b/sources/RevitDBExplorer/Domain/DataModel/ValueContainers/RebarHandler.cs @@ -34,13 +34,13 @@ protected override IEnumerable GetVisualization(SnoopableCont { if (rebar.IsRebarShapeDriven()) { - var bb = rebar.get_BoundingBox(null); - var center = (bb.Min + bb.Max) / 2; + var refPoint = rebar.get_BoundingBox(null).CenterPoint(); + var rebarShapeDrivenAccessor = rebar.GetShapeDrivenAccessor(); var normal = rebarShapeDrivenAccessor.Normal; - yield return new VisualizationItem("Rebar", "GetShapeDrivenAccessor().Normal", new ArrowDrawingVisual(center, normal, VisualizationItem.NormalColor)); + yield return new VisualizationItem("Rebar", "GetShapeDrivenAccessor().Normal", new ArrowDrawingVisual(refPoint, normal, VisualizationItem.NormalColor)); var curves = rebar.GetCenterlineCurves(false, true, true, MultiplanarOption.IncludeOnlyPlanarCurves, 0); var startPoint = curves.First().GetEndPoint(0); diff --git a/sources/RevitDBExplorer/Domain/DataModel/ValueContainers/SolidHandler.cs b/sources/RevitDBExplorer/Domain/DataModel/ValueContainers/SolidHandler.cs index 55834c55..984e67a9 100644 --- a/sources/RevitDBExplorer/Domain/DataModel/ValueContainers/SolidHandler.cs +++ b/sources/RevitDBExplorer/Domain/DataModel/ValueContainers/SolidHandler.cs @@ -21,6 +21,20 @@ internal sealed class SolidHandler : TypeHandler protected override bool CanBeVisualized(SnoopableContext context, Solid solid) => true; protected override IEnumerable GetVisualization(SnoopableContext context, Solid solid) { + XYZ centroid = null; + try + { + centroid = solid.ComputeCentroid(); + } + catch + { + + } + if (centroid != null) + { + yield return new VisualizationItem("Solid", "ComputeCentroid", new CubeDrawingVisual(centroid, VisualizationItem.PointColor)); + } + yield return new VisualizationItem("Solid", "*", new SolidDrawingVisual(solid, VisualizationItem.SolidColor)); } } diff --git a/sources/RevitDBExplorer/Domain/DataModel/ValueContainers/TransformHandler.cs b/sources/RevitDBExplorer/Domain/DataModel/ValueContainers/TransformHandler.cs index 1c5ebfa6..2ee6ddf5 100644 --- a/sources/RevitDBExplorer/Domain/DataModel/ValueContainers/TransformHandler.cs +++ b/sources/RevitDBExplorer/Domain/DataModel/ValueContainers/TransformHandler.cs @@ -1,6 +1,7 @@ using System.Collections.Generic; using Autodesk.Revit.DB; using RevitDBExplorer.Domain.DataModel.ValueContainers.Base; +using RevitExplorer.Visualizations.DrawingVisuals; // (c) Revit Database Explorer https://github.com/NeVeSpl/RevitDBExplorer/blob/main/license.md @@ -25,6 +26,14 @@ protected override string ToLabel(SnoopableContext context, Transform transform) return $"Transform: {id}"; } - + + protected override bool CanBeVisualized(SnoopableContext context, Transform transform) => true; + + + protected override IEnumerable GetVisualization(SnoopableContext context, Transform transform) + { + var transformedOrgin = transform.OfPoint(XYZ.Zero); + yield return new VisualizationItem("Transform", "*", new VectorDrawingVisual(XYZ.Zero, transformedOrgin, VisualizationItem.Accent3Color)); + } } } \ No newline at end of file diff --git a/sources/RevitDBExplorer/Domain/DataModel/VisualizationItem.cs b/sources/RevitDBExplorer/Domain/DataModel/VisualizationItem.cs index 3d6ac9e5..cde0542c 100644 --- a/sources/RevitDBExplorer/Domain/DataModel/VisualizationItem.cs +++ b/sources/RevitDBExplorer/Domain/DataModel/VisualizationItem.cs @@ -16,7 +16,10 @@ internal class VisualizationItem public readonly static Color StartColor = new Color(0, 255, 0); public readonly static Color EndColor = new Color(255, 0, 0); public readonly static Color CurveColor = new Color(80, 175, 228); - public readonly static Color PointColor = new Color(255, 69, 0); + public readonly static Color PointColor = new Color(0, 0, 255); + public readonly static Color Accent1Color = new Color(0, 255, 255); + public readonly static Color Accent2Color = new Color(255, 0, 255); + public readonly static Color Accent3Color = new Color(255, 255, 0); public string Group { get; set; } diff --git a/sources/RevitDBExplorer/Extensions/Autodesk.Revit.DB/BoundingBoxXYZExtensions.cs b/sources/RevitDBExplorer/Extensions/Autodesk.Revit.DB/BoundingBoxXYZExtensions.cs index 1ca0f7b2..1c86dc17 100644 --- a/sources/RevitDBExplorer/Extensions/Autodesk.Revit.DB/BoundingBoxXYZExtensions.cs +++ b/sources/RevitDBExplorer/Extensions/Autodesk.Revit.DB/BoundingBoxXYZExtensions.cs @@ -6,6 +6,16 @@ namespace Autodesk.Revit.DB { internal static class BoundingBoxXYZExtensions { + public static XYZ CenterPoint(this BoundingBoxXYZ bb) + { + if ((bb?.Max != null) && (bb?.Min != null)) + { + return bb.Min.Add(0.5 * bb.Max.Subtract(bb.Min)); + } + return XYZ.Zero; + } + + public static IList GetEdges(this BoundingBoxXYZ bb) { var min = bb.Transform.OfPoint(bb.Min); diff --git a/sources/RevitDBExplorer/Extensions/Autodesk.Revit.DB/CurveArrayExtensions.cs b/sources/RevitDBExplorer/Extensions/Autodesk.Revit.DB/CurveArrayExtensions.cs new file mode 100644 index 00000000..d3821737 --- /dev/null +++ b/sources/RevitDBExplorer/Extensions/Autodesk.Revit.DB/CurveArrayExtensions.cs @@ -0,0 +1,17 @@ +using System.Collections.Generic; + +// (c) Revit Database Explorer https://github.com/NeVeSpl/RevitDBExplorer/blob/main/license.md + +namespace Autodesk.Revit.DB +{ + public static class CurveArrayExtensions + { + public static IEnumerable ToEnumerable(this CurveArray array) + { + foreach (Curve curve in array) + { + yield return curve; + } + } + } +} \ No newline at end of file diff --git a/sources/RevitDBExplorer/RevitDBExplorer.csproj b/sources/RevitDBExplorer/RevitDBExplorer.csproj index fa5187a2..2046e002 100644 --- a/sources/RevitDBExplorer/RevitDBExplorer.csproj +++ b/sources/RevitDBExplorer/RevitDBExplorer.csproj @@ -75,7 +75,7 @@ - + diff --git a/sources/RevitDBExplorer/UIComponents/QueryEditor/QueryEditorView.xaml b/sources/RevitDBExplorer/UIComponents/QueryEditor/QueryEditorView.xaml index b8850337..f103af87 100644 --- a/sources/RevitDBExplorer/UIComponents/QueryEditor/QueryEditorView.xaml +++ b/sources/RevitDBExplorer/UIComponents/QueryEditor/QueryEditorView.xaml @@ -30,7 +30,7 @@ + Placeholder="Query Revit database">