From b5999e3361cbae58e07b16fb6701435447dbacdd Mon Sep 17 00:00:00 2001 From: Claire Kuang Date: Tue, 3 Dec 2024 19:48:24 +0000 Subject: [PATCH 1/4] adds properties field to DataObject --- src/Speckle.Objects/Data/ArcgisObject.cs | 21 +++++++ src/Speckle.Objects/Data/CivilObject.cs | 8 ++- src/Speckle.Objects/Data/DataObject.cs | 6 +- src/Speckle.Objects/Data/EtabsObject.cs | 29 +++++++++ src/Speckle.Objects/Data/NavisworksObject.cs | 20 ++++++ src/Speckle.Objects/Data/RevitObject.cs | 2 + src/Speckle.Objects/Data/TeklaObject.cs | 2 + src/Speckle.Objects/Interfaces.cs | 65 +++++++++++++++----- 8 files changed, 132 insertions(+), 21 deletions(-) create mode 100644 src/Speckle.Objects/Data/ArcgisObject.cs create mode 100644 src/Speckle.Objects/Data/EtabsObject.cs create mode 100644 src/Speckle.Objects/Data/NavisworksObject.cs diff --git a/src/Speckle.Objects/Data/ArcgisObject.cs b/src/Speckle.Objects/Data/ArcgisObject.cs new file mode 100644 index 00000000..241c7e6c --- /dev/null +++ b/src/Speckle.Objects/Data/ArcgisObject.cs @@ -0,0 +1,21 @@ +using Speckle.Sdk.Models; + +namespace Speckle.Objects.Data; + +/// +/// Represents a ArcGIS.Core.CoreObjectsBase object in ArcGIS +/// +[SpeckleType("Objects.Data.ArcgisObject")] +public class ArcgisObject : Base, IGisObject +{ + public required string name { get; set; } + public required string type { get; set; } + + public required List? displayValue { get; set; } + + public required Dictionary properties { get; set; } + + public required string units { get; set; } + + IReadOnlyList? IDataObject.displayValue => displayValue; +} diff --git a/src/Speckle.Objects/Data/CivilObject.cs b/src/Speckle.Objects/Data/CivilObject.cs index f9785e5a..ef6bd3b4 100644 --- a/src/Speckle.Objects/Data/CivilObject.cs +++ b/src/Speckle.Objects/Data/CivilObject.cs @@ -5,8 +5,8 @@ namespace Speckle.Objects.Data; /// /// Represents an Autodesk.Civil.DatabaseServices.Entity object in Civil3d /// -[SpeckleType("Objects.Data.CivilObject")] -public class CivilObject : Base, ICivilObject +[SpeckleType("Objects.Data.Civil3dObject")] +public class Civil3dObject : Base, ICivilObject { public required string name { get; set; } public required string type { get; set; } @@ -20,10 +20,12 @@ public class CivilObject : Base, ICivilObject /// Children objects, eg profiles, this civil entity may contain. /// [DetachProperty] - public required List elements { get; set; } + public required List elements { get; set; } public required List displayValue { get; set; } + public required Dictionary properties { get; set; } + public required string units { get; set; } IReadOnlyList ICivilObject.elements => elements; diff --git a/src/Speckle.Objects/Data/DataObject.cs b/src/Speckle.Objects/Data/DataObject.cs index 98ca4d68..607fc5bd 100644 --- a/src/Speckle.Objects/Data/DataObject.cs +++ b/src/Speckle.Objects/Data/DataObject.cs @@ -8,7 +8,9 @@ public class DataObject : Base, IDataObject public required string name { get; set; } [DetachProperty] - public required List displayValue { get; set; } + public required List? displayValue { get; set; } - IReadOnlyList IDataObject.displayValue => displayValue; + public required Dictionary properties { get; set; } + + IReadOnlyList? IDataObject.displayValue => displayValue; } diff --git a/src/Speckle.Objects/Data/EtabsObject.cs b/src/Speckle.Objects/Data/EtabsObject.cs new file mode 100644 index 00000000..e32e86f9 --- /dev/null +++ b/src/Speckle.Objects/Data/EtabsObject.cs @@ -0,0 +1,29 @@ +using Speckle.Sdk.Models; + +namespace Speckle.Objects.Data; + +/// +/// Represents a model object in ETABS +/// +[SpeckleType("Objects.Data.EtabsObject")] +public class EtabsObject : Base, ICsiObject +{ + public required string name { get; set; } + public required string type { get; set; } + + /// + /// Children objects, eg joints, this etabs object may contain. + /// + [DetachProperty] + public required List elements { get; set; } + + public required List displayValue { get; set; } + + public required Dictionary properties { get; set; } + + public required string units { get; set; } + + IReadOnlyList ICsiObject.elements => elements; + + IReadOnlyList IDataObject.displayValue => displayValue; +} diff --git a/src/Speckle.Objects/Data/NavisworksObject.cs b/src/Speckle.Objects/Data/NavisworksObject.cs new file mode 100644 index 00000000..afab5841 --- /dev/null +++ b/src/Speckle.Objects/Data/NavisworksObject.cs @@ -0,0 +1,20 @@ +using Speckle.Sdk.Models; + +namespace Speckle.Objects.Data; + +/// +/// Represents a "first selectable ancestor" Navisworks.ModelItem object in Navisworks +/// +[SpeckleType("Objects.Data.NavisworksObject")] +public class NavisworksObject : Base, INavisworksObject +{ + public required string name { get; set; } + + public required List displayValue { get; set; } + + public required Dictionary properties { get; set; } + + public required string units { get; set; } + + IReadOnlyList IDataObject.displayValue => displayValue; +} diff --git a/src/Speckle.Objects/Data/RevitObject.cs b/src/Speckle.Objects/Data/RevitObject.cs index d958ace9..b4506e5b 100644 --- a/src/Speckle.Objects/Data/RevitObject.cs +++ b/src/Speckle.Objects/Data/RevitObject.cs @@ -27,6 +27,8 @@ public class RevitObject : Base, IRevitObject public required List displayValue { get; set; } + public required Dictionary properties { get; set; } + public required string units { get; set; } IReadOnlyList IRevitObject.elements => elements; diff --git a/src/Speckle.Objects/Data/TeklaObject.cs b/src/Speckle.Objects/Data/TeklaObject.cs index dae831ca..248cf309 100644 --- a/src/Speckle.Objects/Data/TeklaObject.cs +++ b/src/Speckle.Objects/Data/TeklaObject.cs @@ -19,6 +19,8 @@ public class TeklaObject : Base, ITeklaObject public required List displayValue { get; set; } + public required Dictionary properties { get; set; } + public required string units { get; set; } IReadOnlyList ITeklaObject.elements => elements; diff --git a/src/Speckle.Objects/Interfaces.cs b/src/Speckle.Objects/Interfaces.cs index f22af6fc..2f6e5fc8 100644 --- a/src/Speckle.Objects/Interfaces.cs +++ b/src/Speckle.Objects/Interfaces.cs @@ -83,18 +83,6 @@ public interface ITransformable : ISpeckleObject bool TransformTo(Transform transform, out ITransformable transformed); } -#endregion - -#region GIS -public interface IGisFeature : ISpeckleObject -{ - Base attributes { get; set; } -} - -#endregion - -#region Data objects - /// /// Specifies displayable value(s) to be used as a fallback /// if a displayable form cannot be converted. @@ -118,14 +106,42 @@ public interface IDisplayValue : ISpeckleObject T displayValue { get; } } -public interface IDataObject : ISpeckleObject +#endregion + +#region GIS +public interface IGisFeature : ISpeckleObject { + Base attributes { get; set; } +} + +#endregion + +#region Data objects + +/// +/// Specifies properties on objects to be used for data-based workflows +/// +public interface IProperties : ISpeckleObject +{ + Dictionary properties { get; } +} + +public interface IDataObject : ISpeckleObject, IProperties +{ + /// + /// The name of the object, primarily used to decorate the object for consumption in frontend and other apps + /// string name { get; } + /// + /// The geometry used for visual representation. + /// + /// + /// Should be simple geometry types: Point, Line, Polyline, and Mesh. + /// Null indicates a non-displayable data object. + /// [DetachProperty] - IReadOnlyList displayValue { get; } - - // POC: we should add "properties" field here once we formalize the struct + IReadOnlyList? displayValue { get; } } public interface IRevitObject : IDataObject @@ -159,4 +175,21 @@ public interface ITeklaObject : IDataObject [DetachProperty] IReadOnlyList elements { get; } } + +public interface ICsiObject : IDataObject +{ + string type { get; } + + [DetachProperty] + IReadOnlyList elements { get; } +} + +public interface IGisObject : IDataObject +{ + string type { get; } +} + +public interface INavisworksObject : IDataObject { } + + #endregion From ab0ff7b792e2d797188a9bdd3df9d5a99bb4b664 Mon Sep 17 00:00:00 2001 From: Claire Kuang Date: Tue, 3 Dec 2024 22:13:46 +0000 Subject: [PATCH 2/4] removes unnecessary classes --- src/Speckle.Objects/BuiltElements/GridLine.cs | 14 -- .../BuiltElements/Revit/DirectShape.cs | 26 --- .../BuiltElements/Revit/Enums.cs | 180 ------------------ .../Data/{CivilObject.cs => Civil3dObject.cs} | 4 +- src/Speckle.Objects/Deprecated/LegacyV2.cs | 2 + src/Speckle.Objects/Interfaces.cs | 7 +- 6 files changed, 5 insertions(+), 228 deletions(-) delete mode 100644 src/Speckle.Objects/BuiltElements/GridLine.cs delete mode 100644 src/Speckle.Objects/BuiltElements/Revit/DirectShape.cs delete mode 100644 src/Speckle.Objects/BuiltElements/Revit/Enums.cs rename src/Speckle.Objects/Data/{CivilObject.cs => Civil3dObject.cs} (87%) diff --git a/src/Speckle.Objects/BuiltElements/GridLine.cs b/src/Speckle.Objects/BuiltElements/GridLine.cs deleted file mode 100644 index 52576177..00000000 --- a/src/Speckle.Objects/BuiltElements/GridLine.cs +++ /dev/null @@ -1,14 +0,0 @@ -using Speckle.Sdk.Models; - -namespace Speckle.Objects.BuiltElements; - -[SpeckleType("Objects.BuiltElements.GridLine")] -public class GridLine : Base, IDisplayValue> -{ - public required ICurve baseLine { get; set; } - public string label { get; set; } - public string units { get; set; } - - [DetachProperty] - public List displayValue { get; set; } -} diff --git a/src/Speckle.Objects/BuiltElements/Revit/DirectShape.cs b/src/Speckle.Objects/BuiltElements/Revit/DirectShape.cs deleted file mode 100644 index 97f1a2f5..00000000 --- a/src/Speckle.Objects/BuiltElements/Revit/DirectShape.cs +++ /dev/null @@ -1,26 +0,0 @@ -using Speckle.Objects.Geometry; -using Speckle.Sdk.Models; - -namespace Speckle.Objects.BuiltElements.Revit; - -[SpeckleType("Objects.BuiltElements.Revit.DirectShape")] -public class DirectShape : Base, IDisplayValue> -{ - public required string name { get; set; } - public RevitCategory category { get; set; } - public Base? parameters { get; set; } - public string elementId { get; set; } - - [DetachProperty] - public List baseGeometries { get; set; } = new(); - - public string units { get; set; } - - [DetachProperty] - public List displayValue { get; set; } - - public bool IsValidObject(Base @base) - { - return @base is Point || @base is ICurve || @base is Mesh || @base is Brep; - } -} diff --git a/src/Speckle.Objects/BuiltElements/Revit/Enums.cs b/src/Speckle.Objects/BuiltElements/Revit/Enums.cs deleted file mode 100644 index 5ae7fa48..00000000 --- a/src/Speckle.Objects/BuiltElements/Revit/Enums.cs +++ /dev/null @@ -1,180 +0,0 @@ -namespace Speckle.Objects.BuiltElements.Revit; - -//This is an enum so that we can easily create a dropdown in GH for schema builder -//NOTE: if edited the list in Objects.Converter.Revit.Categories should be updated too -public enum RevitCategory -{ - AbutmentFoundations = 0, - AbutmentPiles = 1, - AbutmentWalls = 2, - DuctTerminal = 4, - BridgeAbutments = 3, - Alignments = 5, - StructConnectionAnchors = 6, - ApproachSlabs = 7, - BridgeArches = 8, - AudioVisualDevices = 9, - StairsRailingBaluster = 10, - BridgeBearings = 11, - StructConnectionBolts = 12, - BridgeCables = 13, - BridgeDecks = 14, - BridgeFraming = 15, - CableTrayFitting = 16, - CableTrayRun = 17, - CableTray = 18, - Casework = 19, - Ceilings = 20, - Columns = 21, - CommunicationDevices = 22, - ConduitFitting = 23, - Conduit = 24, - Coordination_Model = 25, - BridgeFramingCrossBracing = 26, - CurtainWallPanels = 27, - CurtaSystem = 28, - CurtainWallMullions = 29, - DataDevices = 30, - BridgeFramingDiaphragms = 31, - Doors = 32, - DuctAccessory = 33, - DuctFitting = 34, - PlaceHolderDucts = 35, - DuctSystem = 36, - DuctCurves = 37, - ElectricalEquipment = 38, - ElectricalFixtures = 39, - Entourage = 40, - ExpansionJoints = 41, - FireAlarmDevices = 42, - FireProtection = 43, - Floors = 44, - FoodServiceEquipment = 45, - Furniture = 46, - FurnitureSystems = 47, - GenericAnnotation = 48, - GenericModel = 49, - BridgeGirders = 50, - Hardscape = 51, - LightingDevices = 52, - LightingFixtures = 53, - Lines = 54, - Mass = 55, - MechanicalEquipment = 56, - MedicalEquipment = 57, - NurseCallDevices = 58, - Parking = 59, - Parts = 60, - PierCaps = 61, - PierColumns = 62, - BridgeFoundations = 63, - PierPiles = 64, - BridgeTowers = 65, - PierWalls = 66, - BridgePiers = 67, - PipeAccessory = 68, - PipeFitting = 69, - PlaceHolderPipes = 70, - PipeSegments = 71, - PipeCurves = 72, - PipingSystem = 73, - Planting = 74, - StructConnectionPlates = 75, - PlumbingFixtures = 76, - StructConnectionProfiles = 77, - StairsRailing = 78, - Ramps = 79, - Roads = 80, - Roofs = 81, - SecurityDevices = 82, - StructConnectionShearStuds = 83, - Signage = 84, - Site = 85, - SpecialityEquipment = 86, - Sprinklers = 87, - Stairs = 88, - StructuralFramingSystem = 89, - StructuralColumns = 90, - StructConnections = 91, - FabricAreas = 92, - StructuralFoundation = 93, - StructuralFraming = 94, - Rebar = 95, - Coupler = 96, - StructuralStiffener = 97, - StructuralTendons = 98, - StructuralTruss = 99, - TemporaryStructure = 100, - Topography = 101, - BridgeFramingTrusses = 102, - VerticalCirculation = 103, - VibrationDampers = 104, - VibrationIsolators = 105, - VibrationManagement = 106, - Walls = 107, - StructConnectionWelds = 108, - Windows = 109, - Railings = 110, -} - -/// -/// FamilyDocuments can only be assigned these categories -/// This is a subset of the list above which was manually retrieved from Revit's UI -/// -public enum RevitFamilyCategory -{ - AudioVisualDevices = 9, - CableTrayFitting = 16, - Casework = 19, - Columns = 21, - CommunicationDevices = 22, - ConduitFitting = 23, - DataDevices = 30, - Doors = 32, - DuctAccessory = 33, - DuctFitting = 34, - ElectricalEquipment = 38, - ElectricalFixtures = 39, - Entourage = 40, - FireAlarmDevices = 42, - FireProtection = 43, - FoodServiceEquipment = 45, - Furniture = 46, - FurnitureSystems = 47, - GenericModel = 49, - Hardscape = 51, - LightingDevices = 52, - LightingFixtures = 53, - Mass = 55, - MechanicalEquipment = 56, - MedicalEquipment = 57, - NurseCallDevices = 58, - Parking = 59, - PipeAccessory = 68, - PipeFitting = 69, - Planting = 74, - PlumbingFixtures = 76, - Roads = 80, - SecurityDevices = 82, - Signage = 84, - Site = 85, - SpecialityEquipment = 86, - Sprinklers = 87, - StructuralFramingSystem = 89, - StructuralColumns = 90, - StructConnections = 91, - StructuralFoundation = 93, - StructuralFraming = 94, - StructuralStiffener = 97, - TemporaryStructure = 100, - VerticalCirculation = 103, - Windows = 109, - Railings = 110, -} - -public enum LocationLine -{ - Centerline, - Exterior, - Interior, -} diff --git a/src/Speckle.Objects/Data/CivilObject.cs b/src/Speckle.Objects/Data/Civil3dObject.cs similarity index 87% rename from src/Speckle.Objects/Data/CivilObject.cs rename to src/Speckle.Objects/Data/Civil3dObject.cs index ef6bd3b4..90f7cf18 100644 --- a/src/Speckle.Objects/Data/CivilObject.cs +++ b/src/Speckle.Objects/Data/Civil3dObject.cs @@ -20,7 +20,7 @@ public class Civil3dObject : Base, ICivilObject /// Children objects, eg profiles, this civil entity may contain. /// [DetachProperty] - public required List elements { get; set; } + public required List elements { get; set; } public required List displayValue { get; set; } @@ -28,7 +28,7 @@ public class Civil3dObject : Base, ICivilObject public required string units { get; set; } - IReadOnlyList ICivilObject.elements => elements; + IReadOnlyList ICivilObject.elements => elements; IReadOnlyList IDataObject.displayValue => displayValue; } diff --git a/src/Speckle.Objects/Deprecated/LegacyV2.cs b/src/Speckle.Objects/Deprecated/LegacyV2.cs index cac72d0b..9ec73a99 100644 --- a/src/Speckle.Objects/Deprecated/LegacyV2.cs +++ b/src/Speckle.Objects/Deprecated/LegacyV2.cs @@ -6,6 +6,7 @@ namespace Speckle.Objects.Deprecated; [DeprecatedSpeckleType("Objects.Other.BlockInstance")] [DeprecatedSpeckleType("Objects.Other.Revit.RevitInstance")] [DeprecatedSpeckleType("Objects.BuiltElements.View")] +[DeprecatedSpeckleType("Objects.BuiltElements.GridLine")] [DeprecatedSpeckleType("Objects.Other.BlockDefinition")] [DeprecatedSpeckleType("Objects.Other.DisplayStyle")] [DeprecatedSpeckleType("Objects.Other.Material")] @@ -13,4 +14,5 @@ namespace Speckle.Objects.Deprecated; [DeprecatedSpeckleType("Objects.Other.Revit.RevitMaterial")] [DeprecatedSpeckleType("Objects.BuiltElements.Revit.Parameter")] [DeprecatedSpeckleType("Objects.BuiltElements.Revit.Curve.ModelCurve")] +[DeprecatedSpeckleType("Objects.BuiltElements.Revit.DirectShape")] public class LegacyV2 : Base { } diff --git a/src/Speckle.Objects/Interfaces.cs b/src/Speckle.Objects/Interfaces.cs index 2f6e5fc8..4cd16768 100644 --- a/src/Speckle.Objects/Interfaces.cs +++ b/src/Speckle.Objects/Interfaces.cs @@ -140,7 +140,6 @@ public interface IDataObject : ISpeckleObject, IProperties /// Should be simple geometry types: Point, Line, Polyline, and Mesh. /// Null indicates a non-displayable data object. /// - [DetachProperty] IReadOnlyList? displayValue { get; } } @@ -154,7 +153,6 @@ public interface IRevitObject : IDataObject Base? location { get; } - [DetachProperty] IReadOnlyList elements { get; } } @@ -164,15 +162,13 @@ public interface ICivilObject : IDataObject List? baseCurves { get; } - [DetachProperty] - IReadOnlyList elements { get; } + IReadOnlyList elements { get; } } public interface ITeklaObject : IDataObject { string type { get; } - [DetachProperty] IReadOnlyList elements { get; } } @@ -180,7 +176,6 @@ public interface ICsiObject : IDataObject { string type { get; } - [DetachProperty] IReadOnlyList elements { get; } } From 1e5bf903a2126e45a21b7563997c0b7481eb4397 Mon Sep 17 00:00:00 2001 From: Claire Kuang Date: Tue, 3 Dec 2024 22:30:24 +0000 Subject: [PATCH 3/4] update tests --- tests/Speckle.Objects.Tests.Unit/Utils/ShallowCopyTests.cs | 6 +++--- tests/Speckle.Sdk.Serialization.Tests/SerializationTests.cs | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/Speckle.Objects.Tests.Unit/Utils/ShallowCopyTests.cs b/tests/Speckle.Objects.Tests.Unit/Utils/ShallowCopyTests.cs index 59abfbca..47ea8580 100644 --- a/tests/Speckle.Objects.Tests.Unit/Utils/ShallowCopyTests.cs +++ b/tests/Speckle.Objects.Tests.Unit/Utils/ShallowCopyTests.cs @@ -1,6 +1,6 @@ using System.Collections; using NUnit.Framework; -using Speckle.Objects.BuiltElements.Revit; +using Speckle.Objects.Data; using Speckle.Objects.Geometry; using Speckle.Sdk.Common; using Speckle.Sdk.Models; @@ -14,10 +14,9 @@ public class ShallowCopyTests public void CanShallowCopy_Wall() { const string UNITS = Units.Meters; - var ds = new DirectShape() + var ds = new DataObject() { name = "directShape", - units = UNITS, displayValue = new List { new Mesh @@ -33,6 +32,7 @@ public class ShallowCopyTests units = UNITS, }, }, + properties = new Dictionary(), }; var shallow = ds.ShallowCopy(); diff --git a/tests/Speckle.Sdk.Serialization.Tests/SerializationTests.cs b/tests/Speckle.Sdk.Serialization.Tests/SerializationTests.cs index 70cd8ba4..9a79d02d 100644 --- a/tests/Speckle.Sdk.Serialization.Tests/SerializationTests.cs +++ b/tests/Speckle.Sdk.Serialization.Tests/SerializationTests.cs @@ -5,7 +5,7 @@ using NUnit.Framework; using Shouldly; using Speckle.Newtonsoft.Json; using Speckle.Newtonsoft.Json.Linq; -using Speckle.Objects.BuiltElements; +using Speckle.Objects.Data; using Speckle.Sdk.Common; using Speckle.Sdk.Host; using Speckle.Sdk.Models; @@ -41,7 +41,7 @@ public class SerializationTests public void Setup() { TypeLoader.Reset(); - TypeLoader.Initialize(typeof(Base).Assembly, typeof(GridLine).Assembly, _assembly); + TypeLoader.Initialize(typeof(Base).Assembly, typeof(DataObject).Assembly, _assembly); } private async Task ReadJson(string fullName) From 81007e0ecf8487a2ffa7722be3cbb373e30f98f8 Mon Sep 17 00:00:00 2001 From: Claire Kuang Date: Wed, 4 Dec 2024 12:14:17 +0000 Subject: [PATCH 4/4] pr fixes --- src/Speckle.Objects/Data/ArcgisObject.cs | 5 +++-- src/Speckle.Objects/Data/Civil3dObject.cs | 3 ++- src/Speckle.Objects/Data/DataObject.cs | 4 ++-- src/Speckle.Objects/Data/EtabsObject.cs | 5 +++-- src/Speckle.Objects/Data/NavisworksObject.cs | 3 ++- src/Speckle.Objects/Data/RevitObject.cs | 3 ++- src/Speckle.Objects/Data/TeklaObject.cs | 3 ++- src/Speckle.Objects/Interfaces.cs | 15 +++------------ 8 files changed, 19 insertions(+), 22 deletions(-) diff --git a/src/Speckle.Objects/Data/ArcgisObject.cs b/src/Speckle.Objects/Data/ArcgisObject.cs index 241c7e6c..abe87aea 100644 --- a/src/Speckle.Objects/Data/ArcgisObject.cs +++ b/src/Speckle.Objects/Data/ArcgisObject.cs @@ -11,11 +11,12 @@ public class ArcgisObject : Base, IGisObject public required string name { get; set; } public required string type { get; set; } - public required List? displayValue { get; set; } + [DetachProperty] + public required List displayValue { get; set; } public required Dictionary properties { get; set; } public required string units { get; set; } - IReadOnlyList? IDataObject.displayValue => displayValue; + IReadOnlyList IDisplayValue>.displayValue => displayValue; } diff --git a/src/Speckle.Objects/Data/Civil3dObject.cs b/src/Speckle.Objects/Data/Civil3dObject.cs index 90f7cf18..cad3e2fe 100644 --- a/src/Speckle.Objects/Data/Civil3dObject.cs +++ b/src/Speckle.Objects/Data/Civil3dObject.cs @@ -22,6 +22,7 @@ public class Civil3dObject : Base, ICivilObject [DetachProperty] public required List elements { get; set; } + [DetachProperty] public required List displayValue { get; set; } public required Dictionary properties { get; set; } @@ -30,5 +31,5 @@ public class Civil3dObject : Base, ICivilObject IReadOnlyList ICivilObject.elements => elements; - IReadOnlyList IDataObject.displayValue => displayValue; + IReadOnlyList IDisplayValue>.displayValue => displayValue; } diff --git a/src/Speckle.Objects/Data/DataObject.cs b/src/Speckle.Objects/Data/DataObject.cs index 607fc5bd..baefdb03 100644 --- a/src/Speckle.Objects/Data/DataObject.cs +++ b/src/Speckle.Objects/Data/DataObject.cs @@ -8,9 +8,9 @@ public class DataObject : Base, IDataObject public required string name { get; set; } [DetachProperty] - public required List? displayValue { get; set; } + public required List displayValue { get; set; } public required Dictionary properties { get; set; } - IReadOnlyList? IDataObject.displayValue => displayValue; + IReadOnlyList IDisplayValue>.displayValue => displayValue; } diff --git a/src/Speckle.Objects/Data/EtabsObject.cs b/src/Speckle.Objects/Data/EtabsObject.cs index e32e86f9..fa11940f 100644 --- a/src/Speckle.Objects/Data/EtabsObject.cs +++ b/src/Speckle.Objects/Data/EtabsObject.cs @@ -3,7 +3,7 @@ using Speckle.Sdk.Models; namespace Speckle.Objects.Data; /// -/// Represents a model object in ETABS +/// Represents a wrapper object in ETABS /// [SpeckleType("Objects.Data.EtabsObject")] public class EtabsObject : Base, ICsiObject @@ -17,6 +17,7 @@ public class EtabsObject : Base, ICsiObject [DetachProperty] public required List elements { get; set; } + [DetachProperty] public required List displayValue { get; set; } public required Dictionary properties { get; set; } @@ -25,5 +26,5 @@ public class EtabsObject : Base, ICsiObject IReadOnlyList ICsiObject.elements => elements; - IReadOnlyList IDataObject.displayValue => displayValue; + IReadOnlyList IDisplayValue>.displayValue => displayValue; } diff --git a/src/Speckle.Objects/Data/NavisworksObject.cs b/src/Speckle.Objects/Data/NavisworksObject.cs index afab5841..571cc286 100644 --- a/src/Speckle.Objects/Data/NavisworksObject.cs +++ b/src/Speckle.Objects/Data/NavisworksObject.cs @@ -10,11 +10,12 @@ public class NavisworksObject : Base, INavisworksObject { public required string name { get; set; } + [DetachProperty] public required List displayValue { get; set; } public required Dictionary properties { get; set; } public required string units { get; set; } - IReadOnlyList IDataObject.displayValue => displayValue; + IReadOnlyList IDisplayValue>.displayValue => displayValue; } diff --git a/src/Speckle.Objects/Data/RevitObject.cs b/src/Speckle.Objects/Data/RevitObject.cs index b4506e5b..20238bee 100644 --- a/src/Speckle.Objects/Data/RevitObject.cs +++ b/src/Speckle.Objects/Data/RevitObject.cs @@ -25,6 +25,7 @@ public class RevitObject : Base, IRevitObject [DetachProperty] public required List elements { get; set; } + [DetachProperty] public required List displayValue { get; set; } public required Dictionary properties { get; set; } @@ -33,5 +34,5 @@ public class RevitObject : Base, IRevitObject IReadOnlyList IRevitObject.elements => elements; - IReadOnlyList IDataObject.displayValue => displayValue; + IReadOnlyList IDisplayValue>.displayValue => displayValue; } diff --git a/src/Speckle.Objects/Data/TeklaObject.cs b/src/Speckle.Objects/Data/TeklaObject.cs index 248cf309..737dbb55 100644 --- a/src/Speckle.Objects/Data/TeklaObject.cs +++ b/src/Speckle.Objects/Data/TeklaObject.cs @@ -17,6 +17,7 @@ public class TeklaObject : Base, ITeklaObject [DetachProperty] public required List elements { get; set; } + [DetachProperty] public required List displayValue { get; set; } public required Dictionary properties { get; set; } @@ -25,5 +26,5 @@ public class TeklaObject : Base, ITeklaObject IReadOnlyList ITeklaObject.elements => elements; - IReadOnlyList IDataObject.displayValue => displayValue; + IReadOnlyList IDisplayValue>.displayValue => displayValue; } diff --git a/src/Speckle.Objects/Interfaces.cs b/src/Speckle.Objects/Interfaces.cs index 4cd16768..2e9ac929 100644 --- a/src/Speckle.Objects/Interfaces.cs +++ b/src/Speckle.Objects/Interfaces.cs @@ -84,7 +84,7 @@ public interface ITransformable : ISpeckleObject } /// -/// Specifies displayable value(s) to be used as a fallback +/// Specifies displayable simple geometries to be used as a fallback /// if a displayable form cannot be converted. /// /// @@ -95,7 +95,7 @@ public interface ITransformable : ISpeckleObject /// /// Type of display value. /// Expected to be either a type or a of s, -/// most likely or . +/// Should be constrained to types of , , or . /// public interface IDisplayValue : ISpeckleObject { @@ -126,21 +126,12 @@ public interface IProperties : ISpeckleObject Dictionary properties { get; } } -public interface IDataObject : ISpeckleObject, IProperties +public interface IDataObject : ISpeckleObject, IProperties, IDisplayValue> { /// /// The name of the object, primarily used to decorate the object for consumption in frontend and other apps /// string name { get; } - - /// - /// The geometry used for visual representation. - /// - /// - /// Should be simple geometry types: Point, Line, Polyline, and Mesh. - /// Null indicates a non-displayable data object. - /// - IReadOnlyList? displayValue { get; } } public interface IRevitObject : IDataObject