From f924a5903af6b5211fd6bac504f1de5a5807ad7a Mon Sep 17 00:00:00 2001 From: Jonathon Broughton <760691+jsdbroughton@users.noreply.github.com> Date: Tue, 17 Dec 2024 14:40:56 +0000 Subject: [PATCH] Navisworks! (#438) * Navisworks Connector Init * Build crap * Moar Init * WIP - not yet working * Minor fixes * Fix missing constuctors * unfix * Test commit * Test commit * Handle Document Events * Document Model Store * Proper implementation * package updates * updated to dev * Document Events binding ??? * registration order * Minimised events subscribed and handle new document state to clear models * Stub Send command * Refactor Connector class to change access modifier of Container property The commit modifies the access modifier of the Container property in the Connector class from public to private. This change improves encapsulation and ensures that the property can only be accessed within the class itself. * Fix NavisworksDocumentStore model list initialization and document validation The commit fixes the initialization of the Models list in the NavisworksDocumentStore class. Instead of assigning an empty array, it now uses the Clear() method to clear the existing models. Additionally, the commit improves the document validation logic by checking if critical properties are accessible before considering the document valid. It also handles cases where the document is disposed. These changes ensure proper initialization of model lists and accurate document validation in NavisworksDocumentStore. * Effectively debouncing on the SDI changes events * Get Selected Objects * ElementSelectionExtension is a collection of helpers to aid the resolution of intent * [Navisworks] Manage document and model state changes - Refactor NavisworksDocumentEvents to manage both document and model state change notifications - Update comments to reflect the new functionality - Rename SubscribeToEvents method to SubscribeToDocumentModelEvents for clarity - Add HandleDocumentModelCountChanging and HandleDocumentModelCountChanged methods to track model count changes - Update OnDocumentModelCountChanged method name to NotifyValidModelStateChange for clarity - Update UnsubscribeFromEvents method name to UnsubscribeFromDocumentModelEvents for clarity - Remove unused constants from NavisworksDocumentStore class * Update Navisworks API references and fix typos - Update references to `Autodesk.Navisworks.Api` namespace to `NAV` namespace - Fix typo in file name: `GlobalUsings.cs` renamed to `GlobalUsing.cs` - Update references to `ModelItem` type from `Autodesk.Navisworks.Api` namespace to `NAV.ModelItem` - Update references to `Document` type from `Autodesk.Navisworks.Api` namespace to `NAV.Document` - Update references to database related types from `Autodesk.Navisworks.Api.Data` namespace to `NAV.Data` - Add new file: NavisworksRootObjectBuilder.cs - Remove unused using statements * Add Navisworks2024 converter dependencies and update project references - Added "Objects.Converter.Navisworks2024" to the packages.lock.json file with dependencies on "Speckle.Converters.Common" and "Speckle.Navisworks.API" - Updated the Speckle.Connectors.Navisworks2024.csproj file to include a reference to "Speckle.Converters.Navisworks2024.csproj" and "Speckle.Converters.Common.csproj" - Added "speckle.converters.common" to the packages.lock.json file with dependencies on "Microsoft.Extensions.Logging.Abstractions" and "Speckle.Objects" - Renamed files: - NavisworksConversionSettings.cs -> NavisworksConversionSettingsFactory.cs - GlobalUsings.cs -> GlobalUsing.cs - NavisworksConversionSettings.cs -> Settings/NavisworksConversionSettings.cs - NavisworksConversionSettings.cs -> Services/NavisworksToSpeckleUnitConverter.cs - NavisworksConversionSettings.cs -> ToSpeckle/NavisworksRootToSpeckleConverter.cs * feat: Add NavisworksSendBinding changes - Added Microsoft.Extensions.DependencyInjection and Microsoft.Extensions.Logging namespaces - Added Speckle.Connectors.Common.Operations namespace - Added Speckle.Connectors.DUI.Exceptions, Speckle.Connectors.DUI.Logging, and Speckle.Connectors.DUI.Models.Card namespaces - Added Speckle.Sdk and Speckle.Sdk.Common namespaces - Updated constructor of NavisworksSendBinding class to include additional parameters - Updated Send method in NavisworksSendBinding class to include try-catch block for handling exceptions during send operation - Updated CancelSend method in NavisworksSendBinding class to call the cancellation manager's CancelOperation method with the modelCardId parameter - Added ResolveIndexPathToModelItem method in ElementSelectionExtension class to resolve the model item path from an index path string - Added ResolveGeometryLeafNodes method in ElementSelectionExtension class to resolve geometry leaf nodes from a model item - Updated Send method in NavisworksSendBinding class to use the resolved model items for sending data * Update namespace in Navisworks plugin files - Update namespace from "Speckle.Connector.Navisworks.NavisPlugin" to "Speckle.Connector.Navisworks.Plugin" in Commands.cs, DockableConnectorPane.cs, and NavisworksRibbon.xaml.cs files. * Add Navisworks sending operations and converters - Added sending operations for Navisworks models - Registered the root object builder and send operation for Navisworks model items - Added Navisworks converters to the service registration - Updated the NavisworksRootToSpeckleConverter to handle null targets and validate target type before conversion * Add folder to project items - Added a new folder to the project items in the Navisworks converter. - The folder includes the necessary files for extensions, global using, service registration, and conversion settings factory. * Refactor NavisworksConversionSettings class to use properties instead of fields - Convert fields to properties in NavisworksConversionSettings class - Update constructor to initialize properties instead of fields * Add Navisworks conversion settings factory and store initialization - Add `INavisworksConversionSettingsFactory` to the constructor of `NavisworksSendBinding` - Initialize `_conversionSettingsFactory` in the constructor of `NavisworksSendBinding` - Initialize the conversion settings store with `_conversionSettingsFactory.Create(NavisworksApp.ActiveDocument)` * Change element selection path separator from '.' to '/' in ElementSelectionExtension.cs This commit updates the code in ElementSelectionExtension.cs to change the default separator used for resolving a Navisworks model item's unique index path representation. The previous separator was '.', and it has been changed to '/'. This change ensures consistency and compatibility with other parts of the codebase that rely on this representation. * Add Navisworks model item to Speckle converter - Add `ModelItemToSpeckleConverter.cs` file for converting Navisworks model items to Speckle objects. - Update `GlobalUsing.cs` to include `SSM` namespace. - Update project file `Speckle.Converters.NavisworksShared.projitems` to include the new converter file. * Update Speckle.Objects and Speckle.Sdk versions to 3.1.0-dev.200 - Updated the requested and resolved versions of Speckle.Objects and Speckle.Sdk to 3.1.0-dev.200 in packages.lock.json files for Connectors/Navisworks/Speckle.Connectors.Navisworks2024 and Converters/Navisworks/Speckle.Converters.Navisworks2024 directories. - Also updated the contentHash values for both packages. Note: This commit updates the versions of Speckle.Objects and Speckle.Sdk to 3.1.0-dev.200 in the mentioned directories' packages.lock.json files, along with their respective contentHash values being updated as well. * Add Navisworks and 2024 projects, along with their connectors and converters This commit adds the Navisworks project, along with the 2024 project. It also includes the connectors and converters for both projects. * Add Navisworks conversion settings and modes This commit adds new files for Navisworks conversion settings and modes. - The `ConversionModes.cs` file defines enums for representation mode and origin mode used during conversion. - The `NavisworksConversionSettings.cs` file represents the settings used for Navisworks conversions, including properties such as document, units, origin mode, hidden elements, visual representation mode, and more. - A new factory class `NavisworksConversionSettingsFactory.cs` is added to create instances of the conversion settings with calculated values based on the active document. - A new file `GeometryHelpers.cs` which contains a static class `GeometryHelpers`. The class provides a method `VectorMatch` that compares two vectors to determine if they are approximately equal within a given tolerance. The method takes in two vectors and an optional tolerance value, and returns true if the vectors match within the tolerance, otherwise false. * Add ArrayExtensions.cs for converting arrays to generic type arrays This commit adds a new file, ArrayExtensions.cs, which contains an extension method for converting arrays to generic type arrays. The method uses the `Array.Copy` function to copy the elements of the original array into a new array of the specified generic type. This allows for more flexibility when working with arrays in the codebase. Specifically Navisworks heavily uses 1* indexed arrays which are a pain to access generically. * Delete Navisworks converters This commit deletes two files: ModelItemToSpeckleConverter.cs and NavisworksRootToSpeckleConverter.cs. These files contained code related to converting Navisworks models to Speckle format. The deletion of these files indicates that the functionality provided by these converters is no longer needed or has been replaced by other methods. * Add new classes for double-precision geometric primitives and transformation matrices - Added `Primitives.cs` file containing definitions for `PointD`, `TriangleD`, and `LineD` classes with double-precision vertex storage - Added `TransformMatrix.cs` file containing a class for 4x4 transformation matrices - Updated project items to include the new files in the build process * Add NavisworksObject and NavisworksGeometryObject classes This commit adds the NavisworksObject and NavisworksGeometryObject classes to handle non-geometry and geometry-based Speckle objects converted from Navisworks. These classes implement the INavisworksObject interface, which provides methods for adding properties to objects and retrieving property values by key. The NavisworksObject class represents a non-geometry object with a name property and a dictionary of properties, while the NavisworksGeometryObject class represents a geometry-based object with a displayValue property, name property, and a dictionary of properties. * Add ClassPropertiesExtractor, DisplayValueExtractor, and PropertySetsExtractor classes - Added ClassPropertiesExtractor class to extract class properties from a NAV.ModelItem - Added DisplayValueExtractor class to extract display values from a NAV.ModelItem - Added PropertySetsExtractor class to extract property sets from a NAV.ModelItem * feat: Add ExcludeProperties option to NavisworksConversionSettings This commit adds a new boolean property, ExcludeProperties, to the NavisworksConversionSettings class. This property allows users to specify whether properties should be excluded from the output. The default value is set to false. Changes: - Added ExcludeProperties boolean property to NavisworksConversionSettings - Updated NavisworksConversionSettingsFactory to include _excludeProperties field and pass it to the NavisworksConversionSettings constructor * feat: Add ModelItemTopLevelConverterToSpeckle This commit adds the `ModelItemTopLevelConverterToSpeckle` class, which converts Navisworks `ModelItem` objects to Speckle Base objects. The converter extracts display values, class properties, and property sets from the Navisworks object and creates a corresponding Speckle Base object. * Add ModelPropertiesExtractor to NavisworksShared This commit adds the ModelPropertiesExtractor class to the NavisworksShared project. The ModelPropertiesExtractor is responsible for extracting model properties from a NAV.Model and adding them to a dictionary. These properties include Creator, Filename, Source Filename, Units, Transform, Guid, and Source Guid. The extracted properties are then added to the navisworks object as key-value pairs. * Refactor PropertyHelpers to handle property conversion and sanitization - Refactored `PropertyHelpers` class to be static - Added a dictionary of type handlers for converting property values - Implemented `ConvertPropertyValue` method to convert property values based on their data type - Added support for handling different data types, including boolean, string, integer, double, datetime, named constant, and 3D point - Implemented `SanitizePropertyName` method to replace invalid characters in property names with underscores - Added `IsCategoryToBeSkipped` method to determine if a property category should be skipped during processing * feat: Add property set extraction logic This commit adds logic to extract property sets from a NAV.ModelItem. It iterates through the property categories and properties, skipping certain categories as needed. Each property is added to a dictionary with its sanitized name as the key and its converted value based on Speckle units. The resulting property sets are stored in a dictionary with the sanitized category name as the key. * Refactor ModelItemTopLevelConverterToSpeckle: Add IRootToSpeckleConverter interface This commit adds the `IRootToSpeckleConverter` interface to the `ModelItemTopLevelConverterToSpeckle` class. It also modifies the `Convert` method to handle null target objects and updates the implementation of the `CreateNonGeometryObject` method. * Add Navisworks 2020 - 2025 In addition to 2024 * Update DocumentModelStore.cs - Made `HostAppSaveState` and `LoadState` methods public - Updated method signatures to reflect changes * Add BoundingBoxToSpeckleRawConverter This commit adds the BoundingBoxToSpeckleRawConverter class, which is responsible for converting NAV.BoundingBox3D objects to Box objects. It includes methods for converting the target object and a nullable version of it. The converter uses settings from the IConverterSettingsStore interface to set up the base plane and create the bounding box with appropriate units and intervals. * Fix null reference exception in NavisworksRootObjectBuilder.cs The code change fixes a null reference exception that occurs when checking if `navisworksModelItems` is empty or null. If it is, a `SpeckleException` is thrown with the message "No objects to convert". Additionally, a check for `sendInfo` being null has been added before continuing with the conversion process. The progress of the conversion is reported using the `onOperationProgressed` callback. * Refactor NavisworksBasicConnectorBinding and NavisworksSendBinding - Simplify AddModel method in NavisworksBasicConnectorBinding - Remove unused import statements in NavisworksSendBinding - Update initialization of conversion settings in NavisworksSendBinding * Update NavisworksServiceRegistration.cs - Removed unused using statements - Updated AddDUI method to use NavisworksDocumentModelStore - Updated DocumentModelStore registration to use NavisworksDocumentModelStore * Refactor NavisworksDocumentModelStore to updated API - Clear the store and save when models are removed - Load state from the database when models are added - Rename methods for clarity: ReadFromFile() -> LoadState(), WriteToFile() -> HostAppSaveState() - Improve exception handling and error messages * Refactor data extractors in Navisworks converter - Make `GetClassProperties`, `GetDisplayValue`, `GetModelProperties`, and `GetPropertySets` methods internal - Remove unused using statements * Update GlobalUsing.cs: Remove unnecessary global using statement The commit removes an unnecessary global using statement in the GlobalUsing.cs file. This change helps to clean up the code and improve readability. * Add NavisworksPrimitiveProcessor and PrimitiveProcessor classes - Added NavisworksPrimitiveProcessor class with methods for processing Navisworks primitives - Added PrimitiveProcessor class with methods for processing generic primitives - Updated the constructor of PrimitiveProcessor to accept an additional parameter for local to world transformation - Updated the Line, Point, and Triangle methods in both classes to use the new transformation logic * feat: Add internal modifier to VectorMatch method - Changed the access modifier of the VectorMatch method in GeometryHelpers class from public to internal. feat: Add sealed modifier to NavisworksObject and NavisworksGeometryObject classes - Added the sealed modifier to the NavisworksObject and NavisworksGeometryObject classes in NavisworksObjects.cs file. refactor: Rename enum values in ConversionModes.cs - Renamed the enum values MODEL_ORIGIN, PROJECT_BASE_ORIGIN, and BOUNDING_BOX_ORIGIN to MODELORIGIN, PROJECTBASEORIGIN, and BOUNDINGBOXORIGIN respectively in ConversionModes.cs file. refactor: Update CreateGeometryObject method signature - Updated the CreateGeometryObject method signature in ModelItemTopLevelConverterToSpeckle.cs file by making it static and using DisplayValueExtractor.GetDisplayValue instead of _displayValueExtractor.GetDisplayValue. * Change origin mode constants to use camel case and update related calculations - Update the origin mode constant from "MODEL_ORIGIN" to "MODELORIGIN" - Update the origin mode constant from "PROJECT_BASE_ORIGIN" to "PROJECTBASEORIGIN" - Update the origin mode constant from "BOUNDING_BOX_ORIGIN" to "BOUNDINGBOXORIGIN" - Update the calculation of the transformation vector based on the new origin mode constants * Add NavisworksPrimitiveProcessor and BoundingBoxToSpeckleRawConverter The commit adds two new files: NavisworksPrimitiveProcessor.cs and BoundingBoxToSpeckleRawConverter.cs to the project. These files are included in the compilation process. * Add support for Speckle connectors in Navisworks versions 2020 to 2025. - Added runtime requirements and component entries for Navisworks versions 2020 to 2025. - Each component entry includes the module name and app description. * Add database transaction for table creation in NavisworksDocumentModelStore.cs This commit adds a database transaction to ensure the existence of the required table before performing any operations in NavisworksDocumentModelStore.cs. This helps maintain data integrity and prevents errors related to missing tables. * Update Navisworks connectors to include Speckle.Connectors.DUI dependency. - Added "Speckle.Connectors.DUI" as a dependency in the Navisworks2020, Navisworks2021, Navisworks2022, Navisworks2023, and Navisworks2024 packages. - Updated project references in the Navisworks2024 package to include the "Speckle.Connectors.DUI" project. - Added "Speckle.Connectors.DUI" as a dependency in the Navisworks2025 package. - Renamed "NavisworksServiceRegistration.cs" to "NavisworksConnectorServiceRegistration.cs". - Updated project references in the NavisworksConverters for 2020 and 2021 packages to include the "Speckle.Connectors.DUI" project. * Refactor NavisworksSendBinding constructor parameters and dependencies - Changed the type of `_conversionSettingsFactory` parameter in `NavisworksSendBinding` constructor from `INavisworksConversionSettingsFactory` to `NavisworksConversionSettingsFactory`. - Removed duplicate initialization of `Parent` and `Commands` properties in the `NavisworksSendBinding` constructor. - Moved the call to `SubscribeToNavisworksEvents()` after initializing `_conversionSettingsFactory`. Register additional services for Navisworks connector - Added registration for `ToSpeckleSettingsManager`. - Added registration for `IOperationProgressManager`. Refactor NavisworksRootObjectBuilder - Updated access to `_converterSettings.Current.SpeckleUnits` to `_converterSettings.Current.Derived.SpeckleUnits`. Update DockableConnectorPane.cs - Updated the call to `services.AddNavisworksConverters()` to use the correct method name, which is now `services.AddNavisworksConverter()`. Refactor ClassPropertiesExtractor, ModelPropertiesExtractor, and PropertySetsExtractor - Updated access to `_settingsStore.Current.ExcludeProperties` to use `_settingsStore.Current.User.ExcludeProperties`. Register additional services for Navisworks converter - Added registration for `IToSpeckleSettingsManager`. - Added registration for `INavisworksConversionSettingsFactory`. * Bruh!! - Update the type of _conversionSettingsFactory field from NavisworksConversionSettingsFactory to INavisworksConversionSettingsFactory. - Update the type of conversionSettingsFactory parameter in the constructor from NavisworksConversionSettingsFactory to INavisworksConversionSettingsFactory. * Add NavisworksRootObjectBuilder and related settings classes for sending operations Add NavisworksRootObjectBuilder and related settings classes for sending operations - Added NavisworksRootObjectBuilder class for sending operations - Added ConvertHiddenElementsSetting class for sending operations - Added IncludeInternalPropertiesSetting class for sending operations - Added OriginModeSetting class for sending operations - Added VisualRepresentationSetting class for sending operations * Refactor conversion mode and origin mode enums - Renamed "ACTIVE" to "Active" - Renamed "ORIGINAL" to "Original" - Renamed "PERMANENT" to "Permanent" - Renamed "MODELORIGIN" to "ModelOrigin" - Renamed "PROJECTBASEORIGIN" to "ProjectBasePoint" - Renamed "BOUNDINGBOXORIGIN" to "BoundingBoxCenter" Updated the NavisworksConversionSettingsFactory class: - Updated references and imports - Updated switch cases for originMode enum with new names * feat: Add new settings to NavisworksSendBinding and remove unused import - Added new settings to the `GetSendSettings()` method in `NavisworksSendBinding` class. - Removed unused import of `Speckle.Connector.Navisworks.Settings` in `NavisworksConverterServiceRegistration.cs`. * Update Navisworks connector service registration and settings manager - Updated the service registration in `NavisworksConnectorServiceRegistration.cs` to use `ToSpeckleSettingsManagerNavisworks` instead of `ToSpeckleSettingsManager`. - Renamed `ToSpeckleSettingsManager.cs` to `ToSpeckleSettingsManagerNavisworks.cs` in the send operations settings folder. - Updated the project file `Speckle.Connectors.NavisworksShared.projitems` to include the renamed file. - Added a new dependency on `speckle.connectors.dui.webview`, which includes dependencies on `Microsoft.Web.WebView2` and `Speckle.Connectors.DUI`. - Updated the conversion settings factory in `NavisworksConversionSettingsFactory.cs` to use `IToSpeckleSettingsManagerNavisworks` instead of `IToSpeckleSettingsManager`. * Add project references to DUI and Navisworks converters in Navisworks connectors - Added a project reference to `Speckle.Connectors.DUI` in the Navisworks 2020, 2021, 2022, 2023, and 2025 connector projects. - Added project references to the respective Navisworks converter projects in the Navisworks 2020, 2021, 2022, 2023, and 2025 connector projects. - Removed a compile include for `NavisworksSelectionFilter.cs` from the shared Navisworks converter projitems file. - Added a compile include for `NavisworksSelectionFilter.cs` in the send filters folder of the shared Navisworks converter projitems file. * here we go again This commit adds support for Navisworks conversion settings in the SendBinding class. It introduces a new interface, IToSpeckleSettingsManagerNavisworks, and implements it in the ToSpeckleSettingsManagerNavisworks class. The NavisworksSendBinding constructor now takes an additional parameter of type IToSpeckleSettingsManagerNavisworks. In addition, some file and namespace renaming has been done to align with the changes made. * FFS - Cyclical relationships or missing assemblies * FFS - Removed references to Navisworks2020, Navisworks2021, Navisworks2022, Navisworks2023, and Navisworks2025 connectors in packages.lock.json files - Commented out project references to Navisworks2020, Navisworks2021, Navisworks2022, Navisworks2023, and Navisworks2025 connectors in csproj files - Updated project reference for shared converter in shproj file * Update NavisworksConnectorServiceRegistration.cs - Update the registration of ToSpeckleSettingsManagerNavisworks to use the interface IToSpeckleSettingsManagerNavisworks instead of the concrete class ToSpeckleSettingsManagerNavisworks. * Update NavisworksSendBinding to use ToSpeckleSettingsManagerNavisworks instead of IToSpeckleSettingsManagerNavisworks for conversion settings retrieval. Update NavisworksSendBinding to use ToSpeckleSettingsManagerNavisworks instead of IToSpeckleSettingsManagerNavisworks for conversion settings retrieval. This commit updates the NavisworksSendBinding code to replace the usage of IToSpeckleSettingsManagerNavisworks with ToSpeckleSettingsManagerNavisworks for retrieving conversion settings. This change ensures consistency and improves the overall functionality of the code. * Refactor NavisworksObjects.cs: Improve object representation and property handling - Rename `NavisworksObject` to `NavisworksModelItem` - Remove unused properties and suppress style warnings - Add required parameters to constructors for `name` and `displayValue` - Update property accessors for `elements`, `displayValue`, and `name` - Improve implementation of `AddProperty` and `GetProperty` methods * Refactor display value extraction and object creation in Navisworks converter - Refactored the `GetDisplayValue` method in `DisplayValueExtractor.cs` to be an instance method instead of static. - Updated the `CreateGeometryObject` method in `ModelItemTopLevelConverterToSpeckle.cs` to use an instance of `DisplayValueExtractor`. - Changed the return type of `CreateNonGeometryObject` method in `ModelItemTopLevelConverterToSpeckle.cs` to match the updated class name. These changes improve code organization and maintainability. * Update Speckle SDK and Objects to version 3.1.0-dev.203 in Navisworks connectors for versions 2020, 2021, 2022, and 2023. * Refactor NavisworksRootObjectBuilder.cs: Improve initialization of root object collection - Initialize root object collection with name and units in a more concise way - Improve readability and maintainability of the code * Fix logger import in NavisworksRootObjectBuilder.cs The commit fixes an issue with the logger import in the NavisworksRootObjectBuilder.cs file. The incorrect namespace was causing a compilation error. This change ensures that the correct namespace is used for the logger, resolving the compilation error and allowing for proper logging functionality. * Refactor ClassPropertiesExtractor to simplify GetClassProperties method The GetClassProperties method in the ClassPropertiesExtractor class has been refactored to improve readability and reduce unnecessary code. The if statement that checks for exclusion of properties has been removed, as it is no longer needed. Instead, the ExtractClassProperties method is directly returned. This change simplifies the logic and improves code maintainability. * Fix static method in DisplayValueExtractor The commit fixes a bug in the DisplayValueExtractor class where the GetDisplayValue method was not declared as static. This caused a compilation error. The fix makes the method static, allowing it to be called without an instance of the class. * Add BasePropertyHandler, HierarchicalPropertyHandler, IPropertyHandler, and StandardPropertyHandler classes for handling property assignment in Navisworks conversion. - Added IPropertyHandler interface to define the contract for handling property assignment to Speckle objects. - Added BasePropertyHandler class to provide common functionality for property assignment. - Added StandardPropertyHandler class to handle standard property assignment without any merging or hierarchy processing. - Added HierarchicalPropertyHandler class to handle property assignment with hierarchy merging for objects that require ancestor properties. * Refactor class hierarchy and method signatures for Navisworks conversion - Make `GetClassProperties` method in `ClassPropertiesExtractor` static - Remove `classPropertiesExtractor` parameter from constructors in `BasePropertyHandler`, `HierarchicalPropertyHandler`, and `StandardPropertyHandler` - Update references to `classPropertiesExtractor.GetClassProperties(modelItem)` to use the static method `ClassPropertiesExtractor.GetClassProperties(modelItem)` - Rename private field `_properties` in classes implementing `INavisworksObject` to `Properties` - Rename public property `elements` in class `NavisworksModelItem` to `Elements` - Rename public property `displayValue` in class `NavisworksModelGeometry` to lowercase (`displayvalue`) - Add missing using statements * Add ElementSelectionHelper class for working with Navisworks ModelItem selections. This commit adds a new file, ElementSelectionHelper.cs, which contains a static class called ElementSelectionHelper. This class provides extension methods for working with Navisworks ModelItem selections. The class includes the following significant changes: - Added ResolveModelItemToIndexPath method: This method takes a Navisworks ModelItem and resolves it to its unique index path representation. The resulting string represents the model item's path, including the model index and a hierarchical path identifier separated by a specified separator. - Added ResolveIndexPathToModelItem method: This method takes an index path string and resolves it to a Navisworks ModelItem. It splits the index path into parts, assigns the first part to the modelIndex variable as an integer, and joins the remaining parts as the pathId string. - Added IsElementVisible method: This method determines whether a Navisworks ModelItem and all its ancestors are visible. It checks the visibility status for each item in the item's ancestorsAndSelf collection and returns true if none of them are hidden. - Added ResolveGeometryLeafNodes method: This method takes a Navisworks ModelItem and returns a list of all its descendants (including itself) that have geometry. These changes enhance functionality related to working with Navisworks ModelItems in Speckle.Converter.NavisworksShared.Helpers namespace. * WIP on jsdb/navisworks WIP on jsdb/navisworks - Replaced `ModelItemTopLevelConverterToSpeckle` with `NavisworksRootToSpeckleConverter` in `NavisworksConverterServiceRegistration.cs` - Added new files to the project: `BasePropertyHandler.cs`, `HieraerchicalPropertyHandler.cs`, `IPropertyHandler.cs`, and `StandardPrpertyHandler.cs` - Updated the file path in the project items XML - Modified `NavisworksRootToSpeckleConverter.cs` to use the updated method name * Update Speckle.Objects to version 3.1.0-dev.205 in Navisworks connectors for versions 2020, 2021, and 2022. - Update Speckle.Objects to version 3.1.0-dev.205 - Update Speckle.Sdk to version 3.1.0-dev.205 - Update Speckle.Sdk.Dependencies to version 3.1.0-dev.205 * Fix reserved term replacement in PropertyHelpers.cs The commit fixes a bug in the PropertyHelpers.cs file where the reserved term "Item" was not being replaced correctly. The replacement has been changed from "Item_" to "Item". * Refactor property handlers and model objects - Remove unused code in ClassPropertiesExtractor.cs - Refactor PropertySetsExtractor.cs to use dependency injection for settingsStore - Refactor BasePropertyHandler.cs to include classPropertiesExtractor parameter - Rename HieraerchicalPropertyHandler.cs to HierarchicalPropertyHandler.cs - Rename StandardPrpertyHandler.cs to StandardPropertyHandler.cs - Update NavisworksConverterServiceRegistration.cs to register the new property handlers * Refactor model item name retrieval logic in ModelItemTopLevelConverterToSpeckle.cs - Refactored the GetObjectName method to improve readability and maintainability. - Updated the logic to retrieve the target object's display name, cycling through parent objects if necessary. - Added a fallback case to return "Unnamed model item" if no valid display name is found. * Whitespace in property name conversion to _ in PropertyHelpers.cs The code change fixes a bug in the `PropertyHelpers.cs` file where property names were not being converted correctly. The regular expression used to replace characters now includes whitespace characters as well. This ensures that all invalid characters are replaced with underscores, allowing for proper conversion of property names. * Add GeometryNodeMerger class to handle merging of sibling geometry nodes. - Added `GeometryNodeMerger` class to handle grouping and merging of sibling geometry nodes. - Updated `NavisworksRootObjectBuilderExtensions` to use `GeometryNodeMerger` for grouping and merging. - Updated `NavisworksRootObjectBuilder` to use `ClassPropertiesExtractor` and `PropertySetsExtractor`. - Refactored code in `NavisworksRootObjectBuilder.Build()` method to improve readability and maintainability. * modify GeometryNodeMerger.cs and NavisworksRootObjectBuilder.cs - Modified GeometryNodeMerger.cs to only group anonymous geometry nodes - Modified NavisworksRootObjectBuilder.cs to refactor the Build method, handle grouped nodes first, and set the final elements list * Initialize root collection, convert and store model items, process and merge grouped nodes, add remaining non-grouped nodes, finalize and return. * Add NavisworksMaterialUnpacker class for unpacking render materials This commit adds a new file, NavisworksMaterialUnpacker.cs, which contains the implementation of the NavisworksMaterialUnpacker class. This class is responsible for unpacking render materials from Navisworks objects. The NavisworksMaterialUnpacker class includes methods such as UnpackRenderMaterial and ConvertRenderColorAndTransparencyToSpeckle, which handle the extraction and conversion of render material properties. Additionally, the project file Speckle.Connectors.NavisworksShared.projitems has been updated to include the newly added NavisworksMaterialUnpacker.cs file. * Add `NavisworksMaterialUnpacker` to `NavisworksRootObjectBuilder` constructor - Add `NavisworksMaterialUnpacker` to the service collection in `NavisworksConnectorServiceRegistration.cs`. - Update the constructor of `NavisworksRootObjectBuilder` to include dependencies for `IRootToSpeckleConverter`, `ISendConversionCache`, `IConverterSettingsStore`, `ILogger`, `ISdkActivityFactory`, and `NavisworksMaterialUnpacker`. This commit adds the registration of the `NavisworksMaterialUnpacker` class to the service collection in order to enable dependency injection. It also updates the constructor of the `NavisworksRootObjectBuilder` class to include all necessary dependencies for its functionality. * Update Speckle.Objects to version 3.1.0-dev.212 in Navisworks connectors for versions 2020, 2021, and 2022. The commit updates the packages.lock.json file for the Navisworks connectors for versions 2020, 2021, and 2022. It changes the requested and resolved version of Speckle.Objects from 3.1.0-dev.205 to 3.1.0-dev.212 * Add NavisworksObject to finalElements in NavisworksRootObjectBuilder This commit adds the NavisworksObject class to the finalElements list in the NavisworksRootObjectBuilder. The NavisworksObject contains properties such as name, displayValue, properties, and units. This change improves the functionality of the code by including additional information for each element in the finalElements list. * Add applicationId to NavisworksRootObjectBuilder This commit adds the applicationId property to the NavisworksRootObjectBuilder class in order to include it in the finalElements list. This change ensures that the applicationId is properly assigned and included when building Navisworks objects for sending. * RunOnMainThreadAsync implemented - Refactored GetDocumentInfo method in NavisworksBasicConnectorBinding to run on the main thread using Parent.RunOnMainThreadAsync - Refactored HighlightObjects method in NavisworksBasicConnectorBinding to run on the main thread using Parent.RunOnMainThreadAsync - Refactored OnSelectionChange method in NavisworksSelectionBinding to use async/await and run UpdateSelectionAsync on the main thread using Parent.RunOnMainThreadAsync - Added async/await to Send method in NavisworksSendBinding and refactored code inside it to use async/await for better readability - Extracted common logic into separate methods in NavisworksSendBinding: GetModelCard, InitializeConverterSettings, GetNavisworksModelItems, ExecuteSendOperation - Added cancellation support to CancelSend method in NavisworksSendBinding by calling _cancellationManager.CancelOperation with modelCardId as argument - Refactored ProcessModelStateChange method in NavisworksDocumentEvents to use async/await and added check for _finalModelCount value * Restore DocumentModelStore.cs accessibility - not sure when that changed - Change access modifiers of HostAppSaveState and LoadState methods to protected - Update method comments to reflect changes in access modifiers * Refactor NavisworksConnectorServiceRegistration and NavisworksDocumentEvents - Added NavisworksMaterialUnpacker to service collection - Updated registration of DocumentModelStore in service collection - Updated references to DocumentModelStore with NavisworksDocumentModelStore in NavisworksDocumentEvents - Renamed HostAppSaveState method to protected override method in NavisworksDocumentModelStore - Added public method ReloadState as a wrapper for LoadState in NavisworksDocumentModelStore * Delete Navisworks solution file The commit deletes the Navisworks solution file, which is no longer needed. * Delete packages.lock.json * Remove Navisworks 2025 * Reset Navisworks project references and project names - Updated the project reference for "Navisworks" in Local.sln to use a new GUID - Updated the project reference for "2024" in Local.sln to use a new GUID - Updated the project reference for "Shared" in Local.sln to use a new GUID - Updated the project reference for "Speckle.Connectors.NavisworksShared" in Local.sln to use a new GUID - Updated the project reference for "Speckle.Converters.NavisworksShared" in Local.sln to use a new GUID - Updated the project name and GUID for "Navisworks" in Speckle.Connectors.sln - Updated the project name and GUID for "Shared" in Speckle.Connectors.sln * Update Microsoft.Web.WebView2 package to version 1.0.2088.41 in Autocad connectors for versions 2022, 2023, 2024, and 2025. This commit updates the Microsoft.Web.WebView2 package in the Autocad connectors for versions 2022, 2023, 2024, and 2025 from version 1.0.1938.49 to version 1.0.2088.41. This change ensures compatibility with the latest version of the package and includes necessary bug fixes or improvements related to web view functionality in the connectors. * Reset Navisworks project references and project names - Updated the project reference for "Navisworks" in Local.sln to use a new GUID - Updated the project reference for "2024" in Local.sln to use a new GUID - Updated the project reference for "Shared" in Local.sln to use a new GUID - Updated the project reference for "Speckle.Connectors.NavisworksShared" in Local.sln to use a new GUID - Updated the project reference for "Speckle.Converters.NavisworksShared" in Local.sln to use a new GUID - Updated the project name and GUID for "Navisworks" in Speckle.Connectors.sln - Updated the project name and GUID for "Shared" in Speckle.Connectors.sln * Update Microsoft.Web.WebView2 version to [1.0.1938.49, ) in Autocad and Civil3d connectors This commit updates the version of Microsoft.Web.WebView2 to [1.0.1938.49, ) in the Autocad and Civil3d connectors packages.lock.json files. The previous version was 1.0.2088.41, and the contentHash has also been updated accordingly. Note: This commit message is exactly 50 characters long, as per the requirement for a short description less than 50 characters. * Refactor to avoid the early disposal of COM objects - Remove the `GeometryNodeMerger` class from service registration in `NavisworksConnectorServiceRegistration.cs` - Change the access modifier of `UnpackRenderMaterial` method in `NavisworksMaterialUnpacker.cs` to internal - Change the access modifier of `ConvertRenderColorAndTransparencyToSpeckle` method in `NavisworksMaterialUnpacker.cs` to private static - Change the access modifier of `GroupSiblingGeometryNodes` method in `GeometryNodeMerger.cs` to public static - Add null checks for parameters in methods: - GetClassProperties in ClassPropertiesExtractor.cs - GetPropertySets and AssignProperties in BasePropertyHandler.cs - AssignClassProperties and ExtractClassProperties in ClassPropertiesExtractor.cs - GetPropertySets in PropertySetsExtractor.cs - AssignPropertySets, AssignModelProperties, and ExtractModelProperties in ModelPropertiesExtractor.cs - NavisworksRootObjectBuilder constructor * feat: Add geometry conversion functionality - Added `DisplayValueExtractor` class for extracting display values from Navisworks model items - Added `GeometryToSpeckleConverter` class for converting Navisworks geometry to Speckle SDK models - Updated dependencies in `NavisworksConverterServiceRegistration.cs` to include the new classes * Rename GeomtryNodeMerger.cs to GeometryNodeMerger.cs This commit renames the file GeomtryNodeMerger.cs to GeometryNodeMerger.cs. * Remove redundant code shared by both projects - Updated NavisworksSelectionBinding to include IElementSelectionService as a dependency in the constructor. - Updated NavisworksSendBinding to include IElementSelectionService as a dependency in the constructor. - Removed ElementSelectionExtension.cs file. - Added ElementSelectionService.cs file which includes methods for getting model item path, resolving model item from path, checking visibility of model items, and getting geometry nodes. * Navisworks proj cleanup (#443) * Clean up projects and locks for all Navisworks * Fix nuget error * Fixed Local SLN and removed some runtime IDs * add back RuntimeIdentifier * Fix lock files for NW * Update to SDK 3.1.0-218 * update locks --------- Co-authored-by: oguzhankoral Co-authored-by: Adam Hathcock Co-authored-by: Adam Hathcock --- .../Properties/launchSettings.json | 9 + .../Speckle.Connectors.Navisworks2020.csproj | 56 +++ .../packages.lock.json | 393 ++++++++++++++++++ .../Properties/launchSettings.json | 9 + .../Speckle.Connectors.Navisworks2021.csproj | 56 +++ .../packages.lock.json | 393 ++++++++++++++++++ .../Properties/launchSettings.json | 9 + .../Speckle.Connectors.Navisworks2022.csproj | 57 +++ .../packages.lock.json | 393 ++++++++++++++++++ .../Properties/launchSettings.json | 9 + .../Speckle.Connectors.Navisworks2023.csproj | 59 +++ .../packages.lock.json | 393 ++++++++++++++++++ .../Properties/launchSettings.json | 9 + .../Speckle.Connectors.Navisworks2024.csproj | 58 +++ .../packages.lock.json | 393 ++++++++++++++++++ .../Properties/launchSettings.json | 9 + .../Speckle.Connectors.Navisworks2025.csproj | 56 +++ .../packages.lock.json | 393 ++++++++++++++++++ .../NavisworksBasicConnectorBinding.cs | 78 ++++ .../Bindings/NavisworksSelectionBinding.cs | 71 ++++ .../Bindings/NavisworksSendBinding.cs | 194 +++++++++ .../NavisworksConnectorServiceRegistration.cs | 72 ++++ .../Extensions/ElementSelectionService.cs | 23 + .../GlobalUsing.cs | 2 + .../HostApp/NavisworksDocumentEvents.cs | 224 ++++++++++ .../HostApp/NavisworksDocumentModelStore.cs | 170 ++++++++ .../HostApp/NavisworksIdleManager.cs | 30 ++ .../HostApp/NavisworksMaterialUnpacker.cs | 164 ++++++++ .../Send/Filters/NavisworksSelectionFilter.cs | 13 + .../Operations/Send/GeometryNodeMerger.cs | 22 + .../Send/NavisworksRootObjectBuilder.cs | 182 ++++++++ .../Settings/ConvertHiddenEleementsSetting.cs | 12 + .../IncludeInternalPropertiesSetting.cs | 12 + .../Send/Settings/OriginModeSetting.cs | 18 + .../ToSpeckleSettingsManagerNavisworks.cs | 127 ++++++ .../Settings/VisualRepresentationSetting.cs | 18 + .../PathConstants.cs | 6 + .../Plugin/AppUtils.cs | 20 + .../Plugin/BrowserPane.xaml | 17 + .../Plugin/BrowserPane.xaml.cs | 8 + .../Plugin/Commands.cs | 7 + .../Plugin/DockableConnectorPane.cs | 63 +++ .../Plugin/NavisworksRibbon.name | 9 + .../Plugin/NavisworksRibbon.xaml | 15 + .../Plugin/NavisworksRibbon.xaml.cs | 198 +++++++++ .../Plugin/PackageContents.xml | 37 ++ .../Resources/s2logo16.png | Bin 0 -> 714 bytes .../Resources/s2logo32.png | Bin 0 -> 1672 bytes ...ckle.Connectors.NavisworksShared.projitems | 60 +++ ...Speckle.Connectors.NavisworksShared.shproj | 12 + .../Speckle.Converters.Navisworks2020.csproj | 20 + .../packages.lock.json | 359 ++++++++++++++++ .../Speckle.Converters.Navisworks2021.csproj | 20 + .../packages.lock.json | 359 ++++++++++++++++ .../Speckle.Converters.Navisworks2022.csproj | 20 + .../packages.lock.json | 359 ++++++++++++++++ .../Speckle.Converters.Navisworks2023.csproj | 20 + .../packages.lock.json | 359 ++++++++++++++++ .../Speckle.Converters.Navisworks2024.csproj | 20 + .../packages.lock.json | 359 ++++++++++++++++ .../Speckle.Converters.Navisworks2025.csproj | 20 + .../packages.lock.json | 359 ++++++++++++++++ .../ClassPropertiesExtractor.cs | 51 +++ .../DataExtractors/DisplayValueExtractor.cs | 38 ++ .../ModelPropertiesExtractor.cs | 59 +++ .../DataExtractors/PropertySetsExtractor.cs | 64 +++ .../DataHandlers/BasePropertyHandler.cs | 101 +++++ .../HierarchicalPropertyHandler.cs | 117 ++++++ .../DataHandlers/IPropertyHandler.cs | 12 + .../DataHandlers/StandardPropertyHandler.cs | 28 ++ .../NavisworksConverterServiceRegistration.cs | 50 +++ .../Extensions/ArrayExtensions.cs | 15 + .../Geometries/Primitives.cs | 155 +++++++ .../Geometries/TransformMatrix.cs | 59 +++ .../GlobalUsing.cs | 4 + .../Helpers/ElementSelectionHelper.cs | 80 ++++ .../Helpers/GeometryHelpers.cs | 16 + .../Helpers/PrimitiveProcessor.cs | 173 ++++++++ .../Helpers/PropertyHelpers.cs | 106 +++++ .../PathConstants.cs | 6 + .../NavisworksToSpeckleUnitConverter.cs | 26 ++ .../Settings/ConversionModes.cs | 51 +++ .../Settings/NavisworksConversionSettings.cs | 27 ++ .../NavisworksConversionSettingsFactory.cs | 140 +++++++ ...ckle.Converters.NavisworksShared.projitems | 40 ++ ...Speckle.Converters.NavisworksShared.shproj | 12 + .../NavisworksRootToSpeckleConverter.cs | 53 +++ .../Raw/BoundingBoxToSpeckleRawConverter.cs | 52 +++ .../Raw/GeometryToSpeckleConverter.cs | 245 +++++++++++ .../ModelItemTopLevelConverterToSpeckle.cs | 108 +++++ Directory.Packages.props | 3 +- Local.sln | 161 +++++++ Speckle.Connectors.sln | 159 +++++++ 93 files changed, 9122 insertions(+), 1 deletion(-) create mode 100644 Connectors/Navisworks/Speckle.Connectors.Navisworks2020/Properties/launchSettings.json create mode 100644 Connectors/Navisworks/Speckle.Connectors.Navisworks2020/Speckle.Connectors.Navisworks2020.csproj create mode 100644 Connectors/Navisworks/Speckle.Connectors.Navisworks2020/packages.lock.json create mode 100644 Connectors/Navisworks/Speckle.Connectors.Navisworks2021/Properties/launchSettings.json create mode 100644 Connectors/Navisworks/Speckle.Connectors.Navisworks2021/Speckle.Connectors.Navisworks2021.csproj create mode 100644 Connectors/Navisworks/Speckle.Connectors.Navisworks2021/packages.lock.json create mode 100644 Connectors/Navisworks/Speckle.Connectors.Navisworks2022/Properties/launchSettings.json create mode 100644 Connectors/Navisworks/Speckle.Connectors.Navisworks2022/Speckle.Connectors.Navisworks2022.csproj create mode 100644 Connectors/Navisworks/Speckle.Connectors.Navisworks2022/packages.lock.json create mode 100644 Connectors/Navisworks/Speckle.Connectors.Navisworks2023/Properties/launchSettings.json create mode 100644 Connectors/Navisworks/Speckle.Connectors.Navisworks2023/Speckle.Connectors.Navisworks2023.csproj create mode 100644 Connectors/Navisworks/Speckle.Connectors.Navisworks2023/packages.lock.json create mode 100644 Connectors/Navisworks/Speckle.Connectors.Navisworks2024/Properties/launchSettings.json create mode 100644 Connectors/Navisworks/Speckle.Connectors.Navisworks2024/Speckle.Connectors.Navisworks2024.csproj create mode 100644 Connectors/Navisworks/Speckle.Connectors.Navisworks2024/packages.lock.json create mode 100644 Connectors/Navisworks/Speckle.Connectors.Navisworks2025/Properties/launchSettings.json create mode 100644 Connectors/Navisworks/Speckle.Connectors.Navisworks2025/Speckle.Connectors.Navisworks2025.csproj create mode 100644 Connectors/Navisworks/Speckle.Connectors.Navisworks2025/packages.lock.json create mode 100644 Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Bindings/NavisworksBasicConnectorBinding.cs create mode 100644 Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Bindings/NavisworksSelectionBinding.cs create mode 100644 Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Bindings/NavisworksSendBinding.cs create mode 100644 Connectors/Navisworks/Speckle.Connectors.NavisworksShared/DependencyInjection/NavisworksConnectorServiceRegistration.cs create mode 100644 Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Extensions/ElementSelectionService.cs create mode 100644 Connectors/Navisworks/Speckle.Connectors.NavisworksShared/GlobalUsing.cs create mode 100644 Connectors/Navisworks/Speckle.Connectors.NavisworksShared/HostApp/NavisworksDocumentEvents.cs create mode 100644 Connectors/Navisworks/Speckle.Connectors.NavisworksShared/HostApp/NavisworksDocumentModelStore.cs create mode 100644 Connectors/Navisworks/Speckle.Connectors.NavisworksShared/HostApp/NavisworksIdleManager.cs create mode 100644 Connectors/Navisworks/Speckle.Connectors.NavisworksShared/HostApp/NavisworksMaterialUnpacker.cs create mode 100644 Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/Filters/NavisworksSelectionFilter.cs create mode 100644 Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/GeometryNodeMerger.cs create mode 100644 Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/NavisworksRootObjectBuilder.cs create mode 100644 Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/Settings/ConvertHiddenEleementsSetting.cs create mode 100644 Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/Settings/IncludeInternalPropertiesSetting.cs create mode 100644 Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/Settings/OriginModeSetting.cs create mode 100644 Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/Settings/ToSpeckleSettingsManagerNavisworks.cs create mode 100644 Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/Settings/VisualRepresentationSetting.cs create mode 100644 Connectors/Navisworks/Speckle.Connectors.NavisworksShared/PathConstants.cs create mode 100644 Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Plugin/AppUtils.cs create mode 100644 Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Plugin/BrowserPane.xaml create mode 100644 Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Plugin/BrowserPane.xaml.cs create mode 100644 Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Plugin/Commands.cs create mode 100644 Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Plugin/DockableConnectorPane.cs create mode 100644 Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Plugin/NavisworksRibbon.name create mode 100644 Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Plugin/NavisworksRibbon.xaml create mode 100644 Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Plugin/NavisworksRibbon.xaml.cs create mode 100644 Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Plugin/PackageContents.xml create mode 100644 Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Resources/s2logo16.png create mode 100644 Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Resources/s2logo32.png create mode 100644 Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Speckle.Connectors.NavisworksShared.projitems create mode 100644 Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Speckle.Connectors.NavisworksShared.shproj create mode 100644 Converters/Navisworks/Speckle.Converters.Navisworks2020/Speckle.Converters.Navisworks2020.csproj create mode 100644 Converters/Navisworks/Speckle.Converters.Navisworks2020/packages.lock.json create mode 100644 Converters/Navisworks/Speckle.Converters.Navisworks2021/Speckle.Converters.Navisworks2021.csproj create mode 100644 Converters/Navisworks/Speckle.Converters.Navisworks2021/packages.lock.json create mode 100644 Converters/Navisworks/Speckle.Converters.Navisworks2022/Speckle.Converters.Navisworks2022.csproj create mode 100644 Converters/Navisworks/Speckle.Converters.Navisworks2022/packages.lock.json create mode 100644 Converters/Navisworks/Speckle.Converters.Navisworks2023/Speckle.Converters.Navisworks2023.csproj create mode 100644 Converters/Navisworks/Speckle.Converters.Navisworks2023/packages.lock.json create mode 100644 Converters/Navisworks/Speckle.Converters.Navisworks2024/Speckle.Converters.Navisworks2024.csproj create mode 100644 Converters/Navisworks/Speckle.Converters.Navisworks2024/packages.lock.json create mode 100644 Converters/Navisworks/Speckle.Converters.Navisworks2025/Speckle.Converters.Navisworks2025.csproj create mode 100644 Converters/Navisworks/Speckle.Converters.Navisworks2025/packages.lock.json create mode 100644 Converters/Navisworks/Speckle.Converters.NavisworksShared/DataExtractors/ClassPropertiesExtractor.cs create mode 100644 Converters/Navisworks/Speckle.Converters.NavisworksShared/DataExtractors/DisplayValueExtractor.cs create mode 100644 Converters/Navisworks/Speckle.Converters.NavisworksShared/DataExtractors/ModelPropertiesExtractor.cs create mode 100644 Converters/Navisworks/Speckle.Converters.NavisworksShared/DataExtractors/PropertySetsExtractor.cs create mode 100644 Converters/Navisworks/Speckle.Converters.NavisworksShared/DataHandlers/BasePropertyHandler.cs create mode 100644 Converters/Navisworks/Speckle.Converters.NavisworksShared/DataHandlers/HierarchicalPropertyHandler.cs create mode 100644 Converters/Navisworks/Speckle.Converters.NavisworksShared/DataHandlers/IPropertyHandler.cs create mode 100644 Converters/Navisworks/Speckle.Converters.NavisworksShared/DataHandlers/StandardPropertyHandler.cs create mode 100644 Converters/Navisworks/Speckle.Converters.NavisworksShared/DependencyInjection/NavisworksConverterServiceRegistration.cs create mode 100644 Converters/Navisworks/Speckle.Converters.NavisworksShared/Extensions/ArrayExtensions.cs create mode 100644 Converters/Navisworks/Speckle.Converters.NavisworksShared/Geometries/Primitives.cs create mode 100644 Converters/Navisworks/Speckle.Converters.NavisworksShared/Geometries/TransformMatrix.cs create mode 100644 Converters/Navisworks/Speckle.Converters.NavisworksShared/GlobalUsing.cs create mode 100644 Converters/Navisworks/Speckle.Converters.NavisworksShared/Helpers/ElementSelectionHelper.cs create mode 100644 Converters/Navisworks/Speckle.Converters.NavisworksShared/Helpers/GeometryHelpers.cs create mode 100644 Converters/Navisworks/Speckle.Converters.NavisworksShared/Helpers/PrimitiveProcessor.cs create mode 100644 Converters/Navisworks/Speckle.Converters.NavisworksShared/Helpers/PropertyHelpers.cs create mode 100644 Converters/Navisworks/Speckle.Converters.NavisworksShared/PathConstants.cs create mode 100644 Converters/Navisworks/Speckle.Converters.NavisworksShared/Services/NavisworksToSpeckleUnitConverter.cs create mode 100644 Converters/Navisworks/Speckle.Converters.NavisworksShared/Settings/ConversionModes.cs create mode 100644 Converters/Navisworks/Speckle.Converters.NavisworksShared/Settings/NavisworksConversionSettings.cs create mode 100644 Converters/Navisworks/Speckle.Converters.NavisworksShared/Settings/NavisworksConversionSettingsFactory.cs create mode 100644 Converters/Navisworks/Speckle.Converters.NavisworksShared/Speckle.Converters.NavisworksShared.projitems create mode 100644 Converters/Navisworks/Speckle.Converters.NavisworksShared/Speckle.Converters.NavisworksShared.shproj create mode 100644 Converters/Navisworks/Speckle.Converters.NavisworksShared/ToSpeckle/NavisworksRootToSpeckleConverter.cs create mode 100644 Converters/Navisworks/Speckle.Converters.NavisworksShared/ToSpeckle/Raw/BoundingBoxToSpeckleRawConverter.cs create mode 100644 Converters/Navisworks/Speckle.Converters.NavisworksShared/ToSpeckle/Raw/GeometryToSpeckleConverter.cs create mode 100644 Converters/Navisworks/Speckle.Converters.NavisworksShared/ToSpeckle/TopLevel/ModelItemTopLevelConverterToSpeckle.cs diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2020/Properties/launchSettings.json b/Connectors/Navisworks/Speckle.Connectors.Navisworks2020/Properties/launchSettings.json new file mode 100644 index 000000000..618204c00 --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2020/Properties/launchSettings.json @@ -0,0 +1,9 @@ +{ + "profiles": { + "Speckle.Connector.Navisworks2020": { + "commandName": "Executable", + "executablePath": "C:\\Program Files\\Autodesk\\Navisworks Manage 2020\\Roamer.exe", + "commandLineArgs": " -licensing AdLM" + } + } +} diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2020/Speckle.Connectors.Navisworks2020.csproj b/Connectors/Navisworks/Speckle.Connectors.Navisworks2020/Speckle.Connectors.Navisworks2020.csproj new file mode 100644 index 000000000..5b663b2ce --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2020/Speckle.Connectors.Navisworks2020.csproj @@ -0,0 +1,56 @@ + + + net48 + x64 + win-x64 + 512 + + v17 + 2020 + + true + $(DefineConstants);TRACE;NAVIS2020;NAVIS + + NextGen Speckle Connector for Autodesk Navisworks Manage + $(Authors) jonathon@speckle.systems + $(PackageTags) connector nwd nwc nwf navisworks manage + + $(AppData)\Autodesk\ApplicationPlugins\Speckle.Connectors.Navisworksv3.bundle + $(AppData)\Autodesk\ApplicationPlugins\Speckle.Connectors.Navisworksv3.bundle\Contents\$(NavisworksVersion) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2020/packages.lock.json b/Connectors/Navisworks/Speckle.Connectors.Navisworks2020/packages.lock.json new file mode 100644 index 000000000..f94103af1 --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2020/packages.lock.json @@ -0,0 +1,393 @@ +{ + "version": 2, + "dependencies": { + ".NETFramework,Version=v4.8": { + "Microsoft.NETFramework.ReferenceAssemblies": { + "type": "Direct", + "requested": "[1.0.3, )", + "resolved": "1.0.3", + "contentHash": "vUc9Npcs14QsyOD01tnv/m8sQUnGTGOw1BCmKcv77LBJY7OxhJ+zJF7UD/sCL3lYNFuqmQEVlkfS4Quif6FyYg==", + "dependencies": { + "Microsoft.NETFramework.ReferenceAssemblies.net48": "1.0.3" + } + }, + "Microsoft.SourceLink.GitHub": { + "type": "Direct", + "requested": "[8.0.0, )", + "resolved": "8.0.0", + "contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==", + "dependencies": { + "Microsoft.Build.Tasks.Git": "8.0.0", + "Microsoft.SourceLink.Common": "8.0.0" + } + }, + "PolySharp": { + "type": "Direct", + "requested": "[1.14.1, )", + "resolved": "1.14.1", + "contentHash": "mOOmFYwad3MIOL14VCjj02LljyF1GNw1wP0YVlxtcPvqdxjGGMNdNJJxHptlry3MOd8b40Flm8RPOM8JOlN2sQ==" + }, + "Speckle.InterfaceGenerator": { + "type": "Direct", + "requested": "[0.9.6, )", + "resolved": "0.9.6", + "contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w==" + }, + "Speckle.Navisworks.API": { + "type": "Direct", + "requested": "[2020.0.0, )", + "resolved": "2020.0.0", + "contentHash": "biB2RR0HNxrbHD7zBZoJUhwzPwVE5IFg9l4/747bHOLRJC3FM5UtzdjGwvRZwfOlFyM4P26NYARSiCaxSNIBpg==" + }, + "Speckle.Objects": { + "type": "Direct", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", + "dependencies": { + "Speckle.Sdk": "3.1.0-dev.218" + } + }, + "GraphQL.Client": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "8yPNBbuVBpTptivyAlak4GZvbwbUcjeQTL4vN1HKHRuOykZ4r7l5fcLS6vpyPyLn0x8FsL31xbOIKyxbmR9rbA==", + "dependencies": { + "GraphQL.Client.Abstractions": "6.0.0", + "GraphQL.Client.Abstractions.Websocket": "6.0.0", + "System.Net.WebSockets.Client.Managed": "1.0.22", + "System.Reactive": "5.0.0" + } + }, + "GraphQL.Client.Abstractions": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "h7uzWFORHZ+CCjwr/ThAyXMr0DPpzEANDa4Uo54wqCQ+j7qUKwqYTgOrb1W40sqbvNaZm9v/X7It31SUw0maHA==", + "dependencies": { + "GraphQL.Primitives": "6.0.0" + } + }, + "GraphQL.Client.Abstractions.Websocket": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "Nr9bPf8gIOvLuXpqEpqr9z9jslYFJOvd0feHth3/kPqeR3uMbjF5pjiwh4jxyMcxHdr8Pb6QiXkV3hsSyt0v7A==", + "dependencies": { + "GraphQL.Client.Abstractions": "6.0.0" + } + }, + "GraphQL.Primitives": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "yg72rrYDapfsIUrul7aF6wwNnTJBOFvuA9VdDTQpPa8AlAriHbufeXYLBcodKjfUdkCnaiggX1U/nEP08Zb5GA==" + }, + "Microsoft.Bcl.AsyncInterfaces": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "W8DPQjkMScOMTtJbPwmPyj9c3zYSFGawDW3jwlBOOsnY+EzZFLgNQ/UMkK35JmkNOVPdCyPr2Tw7Vv9N+KA3ZQ==", + "dependencies": { + "System.Threading.Tasks.Extensions": "4.5.4" + } + }, + "Microsoft.Build.Tasks.Git": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ==" + }, + "Microsoft.CSharp": { + "type": "Transitive", + "resolved": "4.7.0", + "contentHash": "pTj+D3uJWyN3My70i2Hqo+OXixq3Os2D1nJ2x92FFo6sk8fYS1m1WLNTs0Dc1uPaViH0YvEEwvzddQ7y4rhXmA==" + }, + "Microsoft.Data.Sqlite": { + "type": "Transitive", + "resolved": "7.0.5", + "contentHash": "KGxbPeWsQMnmQy43DSBxAFtHz3l2JX8EWBSGUCvT3CuZ8KsuzbkqMIJMDOxWtG8eZSoCDI04aiVQjWuuV8HmSw==", + "dependencies": { + "Microsoft.Data.Sqlite.Core": "7.0.5", + "SQLitePCLRaw.bundle_e_sqlite3": "2.1.4" + } + }, + "Microsoft.Data.Sqlite.Core": { + "type": "Transitive", + "resolved": "7.0.5", + "contentHash": "FTerRmQPqHrCrnoUzhBu+E+1DNGwyrAMLqHkAqOOOu5pGfyMOj8qQUBxI/gDtWtG11p49UxSfWmBzRNlwZqfUg==", + "dependencies": { + "SQLitePCLRaw.core": "2.1.4" + } + }, + "Microsoft.Extensions.Configuration": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "nOP8R1mVb/6mZtm2qgAJXn/LFm/2kMjHDAg/QJLFG6CuWYJtaD3p1BwQhufBVvRzL9ceJ/xF0SQ0qsI2GkDQAA==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "2.2.0" + } + }, + "Microsoft.Extensions.Configuration.Abstractions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "65MrmXCziWaQFrI0UHkQbesrX5wTwf9XPjY5yFm/VkgJKFJ5gqvXRoXjIZcf2wLi5ZlwGz/oMYfyURVCWbM5iw==", + "dependencies": { + "Microsoft.Extensions.Primitives": "2.2.0" + } + }, + "Microsoft.Extensions.Configuration.Binder": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "vJ9xvOZCnUAIHcGC3SU35r3HKmHTVIeHzo6u/qzlHAqD8m6xv92MLin4oJntTvkpKxVX3vI1GFFkIQtU3AdlsQ==", + "dependencies": { + "Microsoft.Extensions.Configuration": "2.2.0" + } + }, + "Microsoft.Extensions.DependencyInjection.Abstractions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "f9hstgjVmr6rmrfGSpfsVOl2irKAgr1QjrSi3FgnS7kulxband50f2brRLwySAQTADPZeTdow0mpSMcoAdadCw==" + }, + "Microsoft.Extensions.Options": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "UpZLNLBpIZ0GTebShui7xXYh6DmBHjWM8NxGxZbdQh/bPZ5e6YswqI+bru6BnEL5eWiOdodsXtEz3FROcgi/qg==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Primitives": "2.2.0", + "System.ComponentModel.Annotations": "4.5.0" + } + }, + "Microsoft.Extensions.Primitives": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "azyQtqbm4fSaDzZHD/J+V6oWMFaf2tWP4WEGIYePLCMw3+b2RQdj9ybgbQyjCshcitQKQ4lEDOZjmSlTTrHxUg==", + "dependencies": { + "System.Memory": "4.5.1", + "System.Runtime.CompilerServices.Unsafe": "4.5.1" + } + }, + "Microsoft.NETFramework.ReferenceAssemblies.net48": { + "type": "Transitive", + "resolved": "1.0.3", + "contentHash": "zMk4D+9zyiEWByyQ7oPImPN/Jhpj166Ky0Nlla4eXlNL8hI/BtSJsgR8Inldd4NNpIAH3oh8yym0W2DrhXdSLQ==" + }, + "Microsoft.SourceLink.Common": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw==" + }, + "Speckle.DoubleNumerics": { + "type": "Transitive", + "resolved": "4.0.1", + "contentHash": "MzEQ1Im0zTja+tEsdRIk/WlPiKqb22NmTOJcR1ZKm/mz46pezyyID3/wRz6vJUELMpSLnG7LhsxBL+nxbr7V0w==" + }, + "Speckle.Newtonsoft.Json": { + "type": "Transitive", + "resolved": "13.0.2", + "contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA==" + }, + "SQLitePCLRaw.bundle_e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "EWI1olKDjFEBMJu0+3wuxwziIAdWDVMYLhuZ3Qs84rrz+DHwD00RzWPZCa+bLnHCf3oJwuFZIRsHT5p236QXww==", + "dependencies": { + "SQLitePCLRaw.lib.e_sqlite3": "2.1.4", + "SQLitePCLRaw.provider.dynamic_cdecl": "2.1.4" + } + }, + "SQLitePCLRaw.core": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "inBjvSHo9UDKneGNzfUfDjK08JzlcIhn1+SP5Y3m6cgXpCxXKCJDy6Mka7LpgSV+UZmKSnC8rTwB0SQ0xKu5pA==", + "dependencies": { + "System.Memory": "4.5.3" + } + }, + "SQLitePCLRaw.lib.e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "2C9Q9eX7CPLveJA0rIhf9RXAvu+7nWZu1A2MdG6SD/NOu26TakGgL1nsbc0JAspGijFOo3HoN79xrx8a368fBg==" + }, + "SQLitePCLRaw.provider.dynamic_cdecl": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "ZsaKKhgYF9B1fvcnOGKl3EycNAwd9CRWX7v0rEfuPWhQQ5Jjpvf2VEHahiLIGHio3hxi3EIKFJw9KvyowWOUAw==", + "dependencies": { + "SQLitePCLRaw.core": "2.1.4" + } + }, + "System.Buffers": { + "type": "Transitive", + "resolved": "4.4.0", + "contentHash": "AwarXzzoDwX6BgrhjoJsk6tUezZEozOT5Y9QKF94Gl4JK91I4PIIBkBco9068Y9/Dra8Dkbie99kXB8+1BaYKw==" + }, + "System.ComponentModel.Annotations": { + "type": "Transitive", + "resolved": "4.5.0", + "contentHash": "UxYQ3FGUOtzJ7LfSdnYSFd7+oEv6M8NgUatatIN2HxNtDdlcvFAf+VIq4Of9cDMJEJC0aSRv/x898RYhB4Yppg==" + }, + "System.Memory": { + "type": "Transitive", + "resolved": "4.5.3", + "contentHash": "3oDzvc/zzetpTKWMShs1AADwZjQ/36HnsufHRPcOjyRAAMLDlu2iD33MBI2opxnezcVUtXyqDXXjoFMOU9c7SA==", + "dependencies": { + "System.Buffers": "4.4.0", + "System.Numerics.Vectors": "4.4.0", + "System.Runtime.CompilerServices.Unsafe": "4.5.2" + } + }, + "System.Net.WebSockets.Client.Managed": { + "type": "Transitive", + "resolved": "1.0.22", + "contentHash": "WqEOxPlXjuZrIjUtXNE9NxEfU/n5E35iV2PtoZdJSUC4tlrqwHnTee+wvMIM4OUaJWmwrymeqcgYrE0IkGAgLA==", + "dependencies": { + "System.Buffers": "4.4.0", + "System.Numerics.Vectors": "4.4.0" + } + }, + "System.Numerics.Vectors": { + "type": "Transitive", + "resolved": "4.4.0", + "contentHash": "UiLzLW+Lw6HLed1Hcg+8jSRttrbuXv7DANVj0DkL9g6EnnzbL75EB7EWsw5uRbhxd/4YdG8li5XizGWepmG3PQ==" + }, + "System.Reactive": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ==", + "dependencies": { + "System.Threading.Tasks.Extensions": "4.5.4" + } + }, + "System.Runtime.CompilerServices.Unsafe": { + "type": "Transitive", + "resolved": "4.5.3", + "contentHash": "3TIsJhD1EiiT0w2CcDMN/iSSwnNnsrnbzeVHSKkaEgV85txMprmuO+Yq2AdSbeVGcg28pdNDTPK87tJhX7VFHw==" + }, + "System.Threading.Tasks.Extensions": { + "type": "Transitive", + "resolved": "4.5.4", + "contentHash": "zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg==", + "dependencies": { + "System.Runtime.CompilerServices.Unsafe": "4.5.3" + } + }, + "speckle.connectors.common": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", + "Speckle.Connectors.Logging": "[1.0.0, )", + "Speckle.Objects": "[3.1.0-dev.218, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" + } + }, + "speckle.connectors.dui": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", + "Speckle.Connectors.Common": "[1.0.0, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )", + "System.Threading.Tasks.Dataflow": "[6.0.0, )" + } + }, + "speckle.connectors.dui.webview": { + "type": "Project", + "dependencies": { + "Microsoft.Web.WebView2": "[1.0.1938.49, )", + "Speckle.Connectors.DUI": "[1.0.0, )" + } + }, + "speckle.connectors.logging": { + "type": "Project" + }, + "speckle.converters.common": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", + "Speckle.Objects": "[3.1.0-dev.218, )" + } + }, + "speckle.converters.navisworks2020": { + "type": "Project", + "dependencies": { + "Speckle.Connectors.DUI": "[1.0.0, )", + "Speckle.Converters.Common": "[1.0.0, )", + "Speckle.Navisworks.API": "[2020.0.0, )" + } + }, + "Microsoft.Extensions.DependencyInjection": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "MZtBIwfDFork5vfjpJdG5g8wuJFt7d/y3LOSVVtDK/76wlbtz6cjltfKHqLx2TKVqTj5/c41t77m1+h20zqtPA==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0" + } + }, + "Microsoft.Extensions.Logging": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "Nxqhadc9FCmFHzU+fz3oc8sFlE6IadViYg8dfUdGzJZ2JUxnCsRghBhhOWdM4B2zSZqEc+0BjliBh/oNdRZuig==", + "dependencies": { + "Microsoft.Extensions.Configuration.Binder": "2.2.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging.Abstractions": "2.2.0", + "Microsoft.Extensions.Options": "2.2.0" + } + }, + "Microsoft.Extensions.Logging.Abstractions": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "B2WqEox8o+4KUOpL7rZPyh6qYjik8tHi2tN8Z9jZkHzED8ElYgZa/h6K+xliB435SqUcWT290Fr2aa8BtZjn8A==" + }, + "Microsoft.Web.WebView2": { + "type": "CentralTransitive", + "requested": "[1.0.1938.49, )", + "resolved": "1.0.1938.49", + "contentHash": "z8KnFnaTYzhA/ZnyRX0qGfS1NU5ZBJeClAH64F0fVDvdDJTvME7xl6zTJ0Jlfe1BtL3C0NH9xTy64shg2baKdw==" + }, + "Speckle.Sdk": { + "type": "CentralTransitive", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", + "dependencies": { + "GraphQL.Client": "6.0.0", + "Microsoft.Bcl.AsyncInterfaces": "5.0.0", + "Microsoft.CSharp": "4.7.0", + "Microsoft.Data.Sqlite": "7.0.5", + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging": "2.2.0", + "Speckle.DoubleNumerics": "4.0.1", + "Speckle.Newtonsoft.Json": "13.0.2", + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" + } + }, + "Speckle.Sdk.Dependencies": { + "type": "CentralTransitive", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" + }, + "System.Threading.Tasks.Dataflow": { + "type": "CentralTransitive", + "requested": "[6.0.0, )", + "resolved": "6.0.0", + "contentHash": "+tyDCU3/B1lDdOOAJywHQoFwyXIUghIaP2BxG79uvhfTnO+D9qIgjVlL/JV2NTliYbMHpd6eKDmHp2VHpij7MA==" + } + }, + ".NETFramework,Version=v4.8/win-x64": { + "SQLitePCLRaw.lib.e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "2C9Q9eX7CPLveJA0rIhf9RXAvu+7nWZu1A2MdG6SD/NOu26TakGgL1nsbc0JAspGijFOo3HoN79xrx8a368fBg==" + }, + "Microsoft.Web.WebView2": { + "type": "CentralTransitive", + "requested": "[1.0.1938.49, )", + "resolved": "1.0.1938.49", + "contentHash": "z8KnFnaTYzhA/ZnyRX0qGfS1NU5ZBJeClAH64F0fVDvdDJTvME7xl6zTJ0Jlfe1BtL3C0NH9xTy64shg2baKdw==" + } + } + } +} \ No newline at end of file diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2021/Properties/launchSettings.json b/Connectors/Navisworks/Speckle.Connectors.Navisworks2021/Properties/launchSettings.json new file mode 100644 index 000000000..4c3311c03 --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2021/Properties/launchSettings.json @@ -0,0 +1,9 @@ +{ + "profiles": { + "Speckle.Connector.Navisworks2021": { + "commandName": "Executable", + "executablePath": "C:\\Program Files\\Autodesk\\Navisworks Manage 2021\\Roamer.exe", + "commandLineArgs": " -licensing AdLM" + } + } +} diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2021/Speckle.Connectors.Navisworks2021.csproj b/Connectors/Navisworks/Speckle.Connectors.Navisworks2021/Speckle.Connectors.Navisworks2021.csproj new file mode 100644 index 000000000..542d8fae2 --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2021/Speckle.Connectors.Navisworks2021.csproj @@ -0,0 +1,56 @@ + + + net48 + x64 + win-x64 + 512 + + v18 + 2021 + + true + $(DefineConstants);TRACE;NAVIS2021;NAVIS + + NextGen Speckle Connector for Autodesk Navisworks Manage + $(Authors) jonathon@speckle.systems + $(PackageTags) connector nwd nwc nwf navisworks manage + + $(AppData)\Autodesk\ApplicationPlugins\Speckle.Connectors.Navisworksv3.bundle + $(AppData)\Autodesk\ApplicationPlugins\Speckle.Connectors.Navisworksv3.bundle\Contents\$(NavisworksVersion) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2021/packages.lock.json b/Connectors/Navisworks/Speckle.Connectors.Navisworks2021/packages.lock.json new file mode 100644 index 000000000..010e2851e --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2021/packages.lock.json @@ -0,0 +1,393 @@ +{ + "version": 2, + "dependencies": { + ".NETFramework,Version=v4.8": { + "Microsoft.NETFramework.ReferenceAssemblies": { + "type": "Direct", + "requested": "[1.0.3, )", + "resolved": "1.0.3", + "contentHash": "vUc9Npcs14QsyOD01tnv/m8sQUnGTGOw1BCmKcv77LBJY7OxhJ+zJF7UD/sCL3lYNFuqmQEVlkfS4Quif6FyYg==", + "dependencies": { + "Microsoft.NETFramework.ReferenceAssemblies.net48": "1.0.3" + } + }, + "Microsoft.SourceLink.GitHub": { + "type": "Direct", + "requested": "[8.0.0, )", + "resolved": "8.0.0", + "contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==", + "dependencies": { + "Microsoft.Build.Tasks.Git": "8.0.0", + "Microsoft.SourceLink.Common": "8.0.0" + } + }, + "PolySharp": { + "type": "Direct", + "requested": "[1.14.1, )", + "resolved": "1.14.1", + "contentHash": "mOOmFYwad3MIOL14VCjj02LljyF1GNw1wP0YVlxtcPvqdxjGGMNdNJJxHptlry3MOd8b40Flm8RPOM8JOlN2sQ==" + }, + "Speckle.InterfaceGenerator": { + "type": "Direct", + "requested": "[0.9.6, )", + "resolved": "0.9.6", + "contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w==" + }, + "Speckle.Navisworks.API": { + "type": "Direct", + "requested": "[2021.0.0, )", + "resolved": "2021.0.0", + "contentHash": "cY7sU8dxISfTQLinUIOki/azS+bIX28uEZQO4ijrq0eOUhJlKcKWS273kHPoL0+T0Xrkd+1OWj2YFa2PbHGgwQ==" + }, + "Speckle.Objects": { + "type": "Direct", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", + "dependencies": { + "Speckle.Sdk": "3.1.0-dev.218" + } + }, + "GraphQL.Client": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "8yPNBbuVBpTptivyAlak4GZvbwbUcjeQTL4vN1HKHRuOykZ4r7l5fcLS6vpyPyLn0x8FsL31xbOIKyxbmR9rbA==", + "dependencies": { + "GraphQL.Client.Abstractions": "6.0.0", + "GraphQL.Client.Abstractions.Websocket": "6.0.0", + "System.Net.WebSockets.Client.Managed": "1.0.22", + "System.Reactive": "5.0.0" + } + }, + "GraphQL.Client.Abstractions": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "h7uzWFORHZ+CCjwr/ThAyXMr0DPpzEANDa4Uo54wqCQ+j7qUKwqYTgOrb1W40sqbvNaZm9v/X7It31SUw0maHA==", + "dependencies": { + "GraphQL.Primitives": "6.0.0" + } + }, + "GraphQL.Client.Abstractions.Websocket": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "Nr9bPf8gIOvLuXpqEpqr9z9jslYFJOvd0feHth3/kPqeR3uMbjF5pjiwh4jxyMcxHdr8Pb6QiXkV3hsSyt0v7A==", + "dependencies": { + "GraphQL.Client.Abstractions": "6.0.0" + } + }, + "GraphQL.Primitives": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "yg72rrYDapfsIUrul7aF6wwNnTJBOFvuA9VdDTQpPa8AlAriHbufeXYLBcodKjfUdkCnaiggX1U/nEP08Zb5GA==" + }, + "Microsoft.Bcl.AsyncInterfaces": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "W8DPQjkMScOMTtJbPwmPyj9c3zYSFGawDW3jwlBOOsnY+EzZFLgNQ/UMkK35JmkNOVPdCyPr2Tw7Vv9N+KA3ZQ==", + "dependencies": { + "System.Threading.Tasks.Extensions": "4.5.4" + } + }, + "Microsoft.Build.Tasks.Git": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ==" + }, + "Microsoft.CSharp": { + "type": "Transitive", + "resolved": "4.7.0", + "contentHash": "pTj+D3uJWyN3My70i2Hqo+OXixq3Os2D1nJ2x92FFo6sk8fYS1m1WLNTs0Dc1uPaViH0YvEEwvzddQ7y4rhXmA==" + }, + "Microsoft.Data.Sqlite": { + "type": "Transitive", + "resolved": "7.0.5", + "contentHash": "KGxbPeWsQMnmQy43DSBxAFtHz3l2JX8EWBSGUCvT3CuZ8KsuzbkqMIJMDOxWtG8eZSoCDI04aiVQjWuuV8HmSw==", + "dependencies": { + "Microsoft.Data.Sqlite.Core": "7.0.5", + "SQLitePCLRaw.bundle_e_sqlite3": "2.1.4" + } + }, + "Microsoft.Data.Sqlite.Core": { + "type": "Transitive", + "resolved": "7.0.5", + "contentHash": "FTerRmQPqHrCrnoUzhBu+E+1DNGwyrAMLqHkAqOOOu5pGfyMOj8qQUBxI/gDtWtG11p49UxSfWmBzRNlwZqfUg==", + "dependencies": { + "SQLitePCLRaw.core": "2.1.4" + } + }, + "Microsoft.Extensions.Configuration": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "nOP8R1mVb/6mZtm2qgAJXn/LFm/2kMjHDAg/QJLFG6CuWYJtaD3p1BwQhufBVvRzL9ceJ/xF0SQ0qsI2GkDQAA==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "2.2.0" + } + }, + "Microsoft.Extensions.Configuration.Abstractions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "65MrmXCziWaQFrI0UHkQbesrX5wTwf9XPjY5yFm/VkgJKFJ5gqvXRoXjIZcf2wLi5ZlwGz/oMYfyURVCWbM5iw==", + "dependencies": { + "Microsoft.Extensions.Primitives": "2.2.0" + } + }, + "Microsoft.Extensions.Configuration.Binder": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "vJ9xvOZCnUAIHcGC3SU35r3HKmHTVIeHzo6u/qzlHAqD8m6xv92MLin4oJntTvkpKxVX3vI1GFFkIQtU3AdlsQ==", + "dependencies": { + "Microsoft.Extensions.Configuration": "2.2.0" + } + }, + "Microsoft.Extensions.DependencyInjection.Abstractions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "f9hstgjVmr6rmrfGSpfsVOl2irKAgr1QjrSi3FgnS7kulxband50f2brRLwySAQTADPZeTdow0mpSMcoAdadCw==" + }, + "Microsoft.Extensions.Options": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "UpZLNLBpIZ0GTebShui7xXYh6DmBHjWM8NxGxZbdQh/bPZ5e6YswqI+bru6BnEL5eWiOdodsXtEz3FROcgi/qg==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Primitives": "2.2.0", + "System.ComponentModel.Annotations": "4.5.0" + } + }, + "Microsoft.Extensions.Primitives": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "azyQtqbm4fSaDzZHD/J+V6oWMFaf2tWP4WEGIYePLCMw3+b2RQdj9ybgbQyjCshcitQKQ4lEDOZjmSlTTrHxUg==", + "dependencies": { + "System.Memory": "4.5.1", + "System.Runtime.CompilerServices.Unsafe": "4.5.1" + } + }, + "Microsoft.NETFramework.ReferenceAssemblies.net48": { + "type": "Transitive", + "resolved": "1.0.3", + "contentHash": "zMk4D+9zyiEWByyQ7oPImPN/Jhpj166Ky0Nlla4eXlNL8hI/BtSJsgR8Inldd4NNpIAH3oh8yym0W2DrhXdSLQ==" + }, + "Microsoft.SourceLink.Common": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw==" + }, + "Speckle.DoubleNumerics": { + "type": "Transitive", + "resolved": "4.0.1", + "contentHash": "MzEQ1Im0zTja+tEsdRIk/WlPiKqb22NmTOJcR1ZKm/mz46pezyyID3/wRz6vJUELMpSLnG7LhsxBL+nxbr7V0w==" + }, + "Speckle.Newtonsoft.Json": { + "type": "Transitive", + "resolved": "13.0.2", + "contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA==" + }, + "SQLitePCLRaw.bundle_e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "EWI1olKDjFEBMJu0+3wuxwziIAdWDVMYLhuZ3Qs84rrz+DHwD00RzWPZCa+bLnHCf3oJwuFZIRsHT5p236QXww==", + "dependencies": { + "SQLitePCLRaw.lib.e_sqlite3": "2.1.4", + "SQLitePCLRaw.provider.dynamic_cdecl": "2.1.4" + } + }, + "SQLitePCLRaw.core": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "inBjvSHo9UDKneGNzfUfDjK08JzlcIhn1+SP5Y3m6cgXpCxXKCJDy6Mka7LpgSV+UZmKSnC8rTwB0SQ0xKu5pA==", + "dependencies": { + "System.Memory": "4.5.3" + } + }, + "SQLitePCLRaw.lib.e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "2C9Q9eX7CPLveJA0rIhf9RXAvu+7nWZu1A2MdG6SD/NOu26TakGgL1nsbc0JAspGijFOo3HoN79xrx8a368fBg==" + }, + "SQLitePCLRaw.provider.dynamic_cdecl": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "ZsaKKhgYF9B1fvcnOGKl3EycNAwd9CRWX7v0rEfuPWhQQ5Jjpvf2VEHahiLIGHio3hxi3EIKFJw9KvyowWOUAw==", + "dependencies": { + "SQLitePCLRaw.core": "2.1.4" + } + }, + "System.Buffers": { + "type": "Transitive", + "resolved": "4.4.0", + "contentHash": "AwarXzzoDwX6BgrhjoJsk6tUezZEozOT5Y9QKF94Gl4JK91I4PIIBkBco9068Y9/Dra8Dkbie99kXB8+1BaYKw==" + }, + "System.ComponentModel.Annotations": { + "type": "Transitive", + "resolved": "4.5.0", + "contentHash": "UxYQ3FGUOtzJ7LfSdnYSFd7+oEv6M8NgUatatIN2HxNtDdlcvFAf+VIq4Of9cDMJEJC0aSRv/x898RYhB4Yppg==" + }, + "System.Memory": { + "type": "Transitive", + "resolved": "4.5.3", + "contentHash": "3oDzvc/zzetpTKWMShs1AADwZjQ/36HnsufHRPcOjyRAAMLDlu2iD33MBI2opxnezcVUtXyqDXXjoFMOU9c7SA==", + "dependencies": { + "System.Buffers": "4.4.0", + "System.Numerics.Vectors": "4.4.0", + "System.Runtime.CompilerServices.Unsafe": "4.5.2" + } + }, + "System.Net.WebSockets.Client.Managed": { + "type": "Transitive", + "resolved": "1.0.22", + "contentHash": "WqEOxPlXjuZrIjUtXNE9NxEfU/n5E35iV2PtoZdJSUC4tlrqwHnTee+wvMIM4OUaJWmwrymeqcgYrE0IkGAgLA==", + "dependencies": { + "System.Buffers": "4.4.0", + "System.Numerics.Vectors": "4.4.0" + } + }, + "System.Numerics.Vectors": { + "type": "Transitive", + "resolved": "4.4.0", + "contentHash": "UiLzLW+Lw6HLed1Hcg+8jSRttrbuXv7DANVj0DkL9g6EnnzbL75EB7EWsw5uRbhxd/4YdG8li5XizGWepmG3PQ==" + }, + "System.Reactive": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ==", + "dependencies": { + "System.Threading.Tasks.Extensions": "4.5.4" + } + }, + "System.Runtime.CompilerServices.Unsafe": { + "type": "Transitive", + "resolved": "4.5.3", + "contentHash": "3TIsJhD1EiiT0w2CcDMN/iSSwnNnsrnbzeVHSKkaEgV85txMprmuO+Yq2AdSbeVGcg28pdNDTPK87tJhX7VFHw==" + }, + "System.Threading.Tasks.Extensions": { + "type": "Transitive", + "resolved": "4.5.4", + "contentHash": "zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg==", + "dependencies": { + "System.Runtime.CompilerServices.Unsafe": "4.5.3" + } + }, + "speckle.connectors.common": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", + "Speckle.Connectors.Logging": "[1.0.0, )", + "Speckle.Objects": "[3.1.0-dev.218, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" + } + }, + "speckle.connectors.dui": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", + "Speckle.Connectors.Common": "[1.0.0, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )", + "System.Threading.Tasks.Dataflow": "[6.0.0, )" + } + }, + "speckle.connectors.dui.webview": { + "type": "Project", + "dependencies": { + "Microsoft.Web.WebView2": "[1.0.1938.49, )", + "Speckle.Connectors.DUI": "[1.0.0, )" + } + }, + "speckle.connectors.logging": { + "type": "Project" + }, + "speckle.converters.common": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", + "Speckle.Objects": "[3.1.0-dev.218, )" + } + }, + "speckle.converters.navisworks2021": { + "type": "Project", + "dependencies": { + "Speckle.Connectors.DUI": "[1.0.0, )", + "Speckle.Converters.Common": "[1.0.0, )", + "Speckle.Navisworks.API": "[2021.0.0, )" + } + }, + "Microsoft.Extensions.DependencyInjection": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "MZtBIwfDFork5vfjpJdG5g8wuJFt7d/y3LOSVVtDK/76wlbtz6cjltfKHqLx2TKVqTj5/c41t77m1+h20zqtPA==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0" + } + }, + "Microsoft.Extensions.Logging": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "Nxqhadc9FCmFHzU+fz3oc8sFlE6IadViYg8dfUdGzJZ2JUxnCsRghBhhOWdM4B2zSZqEc+0BjliBh/oNdRZuig==", + "dependencies": { + "Microsoft.Extensions.Configuration.Binder": "2.2.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging.Abstractions": "2.2.0", + "Microsoft.Extensions.Options": "2.2.0" + } + }, + "Microsoft.Extensions.Logging.Abstractions": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "B2WqEox8o+4KUOpL7rZPyh6qYjik8tHi2tN8Z9jZkHzED8ElYgZa/h6K+xliB435SqUcWT290Fr2aa8BtZjn8A==" + }, + "Microsoft.Web.WebView2": { + "type": "CentralTransitive", + "requested": "[1.0.1938.49, )", + "resolved": "1.0.1938.49", + "contentHash": "z8KnFnaTYzhA/ZnyRX0qGfS1NU5ZBJeClAH64F0fVDvdDJTvME7xl6zTJ0Jlfe1BtL3C0NH9xTy64shg2baKdw==" + }, + "Speckle.Sdk": { + "type": "CentralTransitive", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", + "dependencies": { + "GraphQL.Client": "6.0.0", + "Microsoft.Bcl.AsyncInterfaces": "5.0.0", + "Microsoft.CSharp": "4.7.0", + "Microsoft.Data.Sqlite": "7.0.5", + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging": "2.2.0", + "Speckle.DoubleNumerics": "4.0.1", + "Speckle.Newtonsoft.Json": "13.0.2", + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" + } + }, + "Speckle.Sdk.Dependencies": { + "type": "CentralTransitive", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" + }, + "System.Threading.Tasks.Dataflow": { + "type": "CentralTransitive", + "requested": "[6.0.0, )", + "resolved": "6.0.0", + "contentHash": "+tyDCU3/B1lDdOOAJywHQoFwyXIUghIaP2BxG79uvhfTnO+D9qIgjVlL/JV2NTliYbMHpd6eKDmHp2VHpij7MA==" + } + }, + ".NETFramework,Version=v4.8/win-x64": { + "SQLitePCLRaw.lib.e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "2C9Q9eX7CPLveJA0rIhf9RXAvu+7nWZu1A2MdG6SD/NOu26TakGgL1nsbc0JAspGijFOo3HoN79xrx8a368fBg==" + }, + "Microsoft.Web.WebView2": { + "type": "CentralTransitive", + "requested": "[1.0.1938.49, )", + "resolved": "1.0.1938.49", + "contentHash": "z8KnFnaTYzhA/ZnyRX0qGfS1NU5ZBJeClAH64F0fVDvdDJTvME7xl6zTJ0Jlfe1BtL3C0NH9xTy64shg2baKdw==" + } + } + } +} \ No newline at end of file diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2022/Properties/launchSettings.json b/Connectors/Navisworks/Speckle.Connectors.Navisworks2022/Properties/launchSettings.json new file mode 100644 index 000000000..c8dd67e7d --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2022/Properties/launchSettings.json @@ -0,0 +1,9 @@ +{ + "profiles": { + "Speckle.Connector.Navisworks2022": { + "commandName": "Executable", + "executablePath": "C:\\Program Files\\Autodesk\\Navisworks Manage 2022\\Roamer.exe", + "commandLineArgs": " -licensing AdLM" + } + } +} diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2022/Speckle.Connectors.Navisworks2022.csproj b/Connectors/Navisworks/Speckle.Connectors.Navisworks2022/Speckle.Connectors.Navisworks2022.csproj new file mode 100644 index 000000000..72c3d9959 --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2022/Speckle.Connectors.Navisworks2022.csproj @@ -0,0 +1,57 @@ + + + + net48 + x64 + win-x64 + 512 + + v19 + 2022 + + true + $(DefineConstants);TRACE;NAVIS2022;NAVIS + + NextGen Speckle Connector for Autodesk Navisworks Manage + $(Authors) jonathon@speckle.systems + $(PackageTags) connector nwd nwc nwf navisworks manage + + $(AppData)\Autodesk\ApplicationPlugins\Speckle.Connectors.Navisworksv3.bundle + $(AppData)\Autodesk\ApplicationPlugins\Speckle.Connectors.Navisworksv3.bundle\Contents\$(NavisworksVersion) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2022/packages.lock.json b/Connectors/Navisworks/Speckle.Connectors.Navisworks2022/packages.lock.json new file mode 100644 index 000000000..094f3f0de --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2022/packages.lock.json @@ -0,0 +1,393 @@ +{ + "version": 2, + "dependencies": { + ".NETFramework,Version=v4.8": { + "Microsoft.NETFramework.ReferenceAssemblies": { + "type": "Direct", + "requested": "[1.0.3, )", + "resolved": "1.0.3", + "contentHash": "vUc9Npcs14QsyOD01tnv/m8sQUnGTGOw1BCmKcv77LBJY7OxhJ+zJF7UD/sCL3lYNFuqmQEVlkfS4Quif6FyYg==", + "dependencies": { + "Microsoft.NETFramework.ReferenceAssemblies.net48": "1.0.3" + } + }, + "Microsoft.SourceLink.GitHub": { + "type": "Direct", + "requested": "[8.0.0, )", + "resolved": "8.0.0", + "contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==", + "dependencies": { + "Microsoft.Build.Tasks.Git": "8.0.0", + "Microsoft.SourceLink.Common": "8.0.0" + } + }, + "PolySharp": { + "type": "Direct", + "requested": "[1.14.1, )", + "resolved": "1.14.1", + "contentHash": "mOOmFYwad3MIOL14VCjj02LljyF1GNw1wP0YVlxtcPvqdxjGGMNdNJJxHptlry3MOd8b40Flm8RPOM8JOlN2sQ==" + }, + "Speckle.InterfaceGenerator": { + "type": "Direct", + "requested": "[0.9.6, )", + "resolved": "0.9.6", + "contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w==" + }, + "Speckle.Navisworks.API": { + "type": "Direct", + "requested": "[2022.0.0, )", + "resolved": "2022.0.0", + "contentHash": "x0RW4Iqw8YHVK4ZiLEyLLfI5ffuRBR0KhEvmy9ZpT8SLNeDL/c6jn+7JWBVFUJPu+ObVnU+KqJjLdHmphN0lMQ==" + }, + "Speckle.Objects": { + "type": "Direct", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", + "dependencies": { + "Speckle.Sdk": "3.1.0-dev.218" + } + }, + "GraphQL.Client": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "8yPNBbuVBpTptivyAlak4GZvbwbUcjeQTL4vN1HKHRuOykZ4r7l5fcLS6vpyPyLn0x8FsL31xbOIKyxbmR9rbA==", + "dependencies": { + "GraphQL.Client.Abstractions": "6.0.0", + "GraphQL.Client.Abstractions.Websocket": "6.0.0", + "System.Net.WebSockets.Client.Managed": "1.0.22", + "System.Reactive": "5.0.0" + } + }, + "GraphQL.Client.Abstractions": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "h7uzWFORHZ+CCjwr/ThAyXMr0DPpzEANDa4Uo54wqCQ+j7qUKwqYTgOrb1W40sqbvNaZm9v/X7It31SUw0maHA==", + "dependencies": { + "GraphQL.Primitives": "6.0.0" + } + }, + "GraphQL.Client.Abstractions.Websocket": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "Nr9bPf8gIOvLuXpqEpqr9z9jslYFJOvd0feHth3/kPqeR3uMbjF5pjiwh4jxyMcxHdr8Pb6QiXkV3hsSyt0v7A==", + "dependencies": { + "GraphQL.Client.Abstractions": "6.0.0" + } + }, + "GraphQL.Primitives": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "yg72rrYDapfsIUrul7aF6wwNnTJBOFvuA9VdDTQpPa8AlAriHbufeXYLBcodKjfUdkCnaiggX1U/nEP08Zb5GA==" + }, + "Microsoft.Bcl.AsyncInterfaces": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "W8DPQjkMScOMTtJbPwmPyj9c3zYSFGawDW3jwlBOOsnY+EzZFLgNQ/UMkK35JmkNOVPdCyPr2Tw7Vv9N+KA3ZQ==", + "dependencies": { + "System.Threading.Tasks.Extensions": "4.5.4" + } + }, + "Microsoft.Build.Tasks.Git": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ==" + }, + "Microsoft.CSharp": { + "type": "Transitive", + "resolved": "4.7.0", + "contentHash": "pTj+D3uJWyN3My70i2Hqo+OXixq3Os2D1nJ2x92FFo6sk8fYS1m1WLNTs0Dc1uPaViH0YvEEwvzddQ7y4rhXmA==" + }, + "Microsoft.Data.Sqlite": { + "type": "Transitive", + "resolved": "7.0.5", + "contentHash": "KGxbPeWsQMnmQy43DSBxAFtHz3l2JX8EWBSGUCvT3CuZ8KsuzbkqMIJMDOxWtG8eZSoCDI04aiVQjWuuV8HmSw==", + "dependencies": { + "Microsoft.Data.Sqlite.Core": "7.0.5", + "SQLitePCLRaw.bundle_e_sqlite3": "2.1.4" + } + }, + "Microsoft.Data.Sqlite.Core": { + "type": "Transitive", + "resolved": "7.0.5", + "contentHash": "FTerRmQPqHrCrnoUzhBu+E+1DNGwyrAMLqHkAqOOOu5pGfyMOj8qQUBxI/gDtWtG11p49UxSfWmBzRNlwZqfUg==", + "dependencies": { + "SQLitePCLRaw.core": "2.1.4" + } + }, + "Microsoft.Extensions.Configuration": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "nOP8R1mVb/6mZtm2qgAJXn/LFm/2kMjHDAg/QJLFG6CuWYJtaD3p1BwQhufBVvRzL9ceJ/xF0SQ0qsI2GkDQAA==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "2.2.0" + } + }, + "Microsoft.Extensions.Configuration.Abstractions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "65MrmXCziWaQFrI0UHkQbesrX5wTwf9XPjY5yFm/VkgJKFJ5gqvXRoXjIZcf2wLi5ZlwGz/oMYfyURVCWbM5iw==", + "dependencies": { + "Microsoft.Extensions.Primitives": "2.2.0" + } + }, + "Microsoft.Extensions.Configuration.Binder": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "vJ9xvOZCnUAIHcGC3SU35r3HKmHTVIeHzo6u/qzlHAqD8m6xv92MLin4oJntTvkpKxVX3vI1GFFkIQtU3AdlsQ==", + "dependencies": { + "Microsoft.Extensions.Configuration": "2.2.0" + } + }, + "Microsoft.Extensions.DependencyInjection.Abstractions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "f9hstgjVmr6rmrfGSpfsVOl2irKAgr1QjrSi3FgnS7kulxband50f2brRLwySAQTADPZeTdow0mpSMcoAdadCw==" + }, + "Microsoft.Extensions.Options": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "UpZLNLBpIZ0GTebShui7xXYh6DmBHjWM8NxGxZbdQh/bPZ5e6YswqI+bru6BnEL5eWiOdodsXtEz3FROcgi/qg==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Primitives": "2.2.0", + "System.ComponentModel.Annotations": "4.5.0" + } + }, + "Microsoft.Extensions.Primitives": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "azyQtqbm4fSaDzZHD/J+V6oWMFaf2tWP4WEGIYePLCMw3+b2RQdj9ybgbQyjCshcitQKQ4lEDOZjmSlTTrHxUg==", + "dependencies": { + "System.Memory": "4.5.1", + "System.Runtime.CompilerServices.Unsafe": "4.5.1" + } + }, + "Microsoft.NETFramework.ReferenceAssemblies.net48": { + "type": "Transitive", + "resolved": "1.0.3", + "contentHash": "zMk4D+9zyiEWByyQ7oPImPN/Jhpj166Ky0Nlla4eXlNL8hI/BtSJsgR8Inldd4NNpIAH3oh8yym0W2DrhXdSLQ==" + }, + "Microsoft.SourceLink.Common": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw==" + }, + "Speckle.DoubleNumerics": { + "type": "Transitive", + "resolved": "4.0.1", + "contentHash": "MzEQ1Im0zTja+tEsdRIk/WlPiKqb22NmTOJcR1ZKm/mz46pezyyID3/wRz6vJUELMpSLnG7LhsxBL+nxbr7V0w==" + }, + "Speckle.Newtonsoft.Json": { + "type": "Transitive", + "resolved": "13.0.2", + "contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA==" + }, + "SQLitePCLRaw.bundle_e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "EWI1olKDjFEBMJu0+3wuxwziIAdWDVMYLhuZ3Qs84rrz+DHwD00RzWPZCa+bLnHCf3oJwuFZIRsHT5p236QXww==", + "dependencies": { + "SQLitePCLRaw.lib.e_sqlite3": "2.1.4", + "SQLitePCLRaw.provider.dynamic_cdecl": "2.1.4" + } + }, + "SQLitePCLRaw.core": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "inBjvSHo9UDKneGNzfUfDjK08JzlcIhn1+SP5Y3m6cgXpCxXKCJDy6Mka7LpgSV+UZmKSnC8rTwB0SQ0xKu5pA==", + "dependencies": { + "System.Memory": "4.5.3" + } + }, + "SQLitePCLRaw.lib.e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "2C9Q9eX7CPLveJA0rIhf9RXAvu+7nWZu1A2MdG6SD/NOu26TakGgL1nsbc0JAspGijFOo3HoN79xrx8a368fBg==" + }, + "SQLitePCLRaw.provider.dynamic_cdecl": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "ZsaKKhgYF9B1fvcnOGKl3EycNAwd9CRWX7v0rEfuPWhQQ5Jjpvf2VEHahiLIGHio3hxi3EIKFJw9KvyowWOUAw==", + "dependencies": { + "SQLitePCLRaw.core": "2.1.4" + } + }, + "System.Buffers": { + "type": "Transitive", + "resolved": "4.4.0", + "contentHash": "AwarXzzoDwX6BgrhjoJsk6tUezZEozOT5Y9QKF94Gl4JK91I4PIIBkBco9068Y9/Dra8Dkbie99kXB8+1BaYKw==" + }, + "System.ComponentModel.Annotations": { + "type": "Transitive", + "resolved": "4.5.0", + "contentHash": "UxYQ3FGUOtzJ7LfSdnYSFd7+oEv6M8NgUatatIN2HxNtDdlcvFAf+VIq4Of9cDMJEJC0aSRv/x898RYhB4Yppg==" + }, + "System.Memory": { + "type": "Transitive", + "resolved": "4.5.3", + "contentHash": "3oDzvc/zzetpTKWMShs1AADwZjQ/36HnsufHRPcOjyRAAMLDlu2iD33MBI2opxnezcVUtXyqDXXjoFMOU9c7SA==", + "dependencies": { + "System.Buffers": "4.4.0", + "System.Numerics.Vectors": "4.4.0", + "System.Runtime.CompilerServices.Unsafe": "4.5.2" + } + }, + "System.Net.WebSockets.Client.Managed": { + "type": "Transitive", + "resolved": "1.0.22", + "contentHash": "WqEOxPlXjuZrIjUtXNE9NxEfU/n5E35iV2PtoZdJSUC4tlrqwHnTee+wvMIM4OUaJWmwrymeqcgYrE0IkGAgLA==", + "dependencies": { + "System.Buffers": "4.4.0", + "System.Numerics.Vectors": "4.4.0" + } + }, + "System.Numerics.Vectors": { + "type": "Transitive", + "resolved": "4.4.0", + "contentHash": "UiLzLW+Lw6HLed1Hcg+8jSRttrbuXv7DANVj0DkL9g6EnnzbL75EB7EWsw5uRbhxd/4YdG8li5XizGWepmG3PQ==" + }, + "System.Reactive": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ==", + "dependencies": { + "System.Threading.Tasks.Extensions": "4.5.4" + } + }, + "System.Runtime.CompilerServices.Unsafe": { + "type": "Transitive", + "resolved": "4.5.3", + "contentHash": "3TIsJhD1EiiT0w2CcDMN/iSSwnNnsrnbzeVHSKkaEgV85txMprmuO+Yq2AdSbeVGcg28pdNDTPK87tJhX7VFHw==" + }, + "System.Threading.Tasks.Extensions": { + "type": "Transitive", + "resolved": "4.5.4", + "contentHash": "zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg==", + "dependencies": { + "System.Runtime.CompilerServices.Unsafe": "4.5.3" + } + }, + "speckle.connectors.common": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", + "Speckle.Connectors.Logging": "[1.0.0, )", + "Speckle.Objects": "[3.1.0-dev.218, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" + } + }, + "speckle.connectors.dui": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", + "Speckle.Connectors.Common": "[1.0.0, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )", + "System.Threading.Tasks.Dataflow": "[6.0.0, )" + } + }, + "speckle.connectors.dui.webview": { + "type": "Project", + "dependencies": { + "Microsoft.Web.WebView2": "[1.0.1938.49, )", + "Speckle.Connectors.DUI": "[1.0.0, )" + } + }, + "speckle.connectors.logging": { + "type": "Project" + }, + "speckle.converters.common": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", + "Speckle.Objects": "[3.1.0-dev.218, )" + } + }, + "speckle.converters.navisworks2022": { + "type": "Project", + "dependencies": { + "Speckle.Connectors.DUI": "[1.0.0, )", + "Speckle.Converters.Common": "[1.0.0, )", + "Speckle.Navisworks.API": "[2022.0.0, )" + } + }, + "Microsoft.Extensions.DependencyInjection": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "MZtBIwfDFork5vfjpJdG5g8wuJFt7d/y3LOSVVtDK/76wlbtz6cjltfKHqLx2TKVqTj5/c41t77m1+h20zqtPA==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0" + } + }, + "Microsoft.Extensions.Logging": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "Nxqhadc9FCmFHzU+fz3oc8sFlE6IadViYg8dfUdGzJZ2JUxnCsRghBhhOWdM4B2zSZqEc+0BjliBh/oNdRZuig==", + "dependencies": { + "Microsoft.Extensions.Configuration.Binder": "2.2.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging.Abstractions": "2.2.0", + "Microsoft.Extensions.Options": "2.2.0" + } + }, + "Microsoft.Extensions.Logging.Abstractions": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "B2WqEox8o+4KUOpL7rZPyh6qYjik8tHi2tN8Z9jZkHzED8ElYgZa/h6K+xliB435SqUcWT290Fr2aa8BtZjn8A==" + }, + "Microsoft.Web.WebView2": { + "type": "CentralTransitive", + "requested": "[1.0.1938.49, )", + "resolved": "1.0.1938.49", + "contentHash": "z8KnFnaTYzhA/ZnyRX0qGfS1NU5ZBJeClAH64F0fVDvdDJTvME7xl6zTJ0Jlfe1BtL3C0NH9xTy64shg2baKdw==" + }, + "Speckle.Sdk": { + "type": "CentralTransitive", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", + "dependencies": { + "GraphQL.Client": "6.0.0", + "Microsoft.Bcl.AsyncInterfaces": "5.0.0", + "Microsoft.CSharp": "4.7.0", + "Microsoft.Data.Sqlite": "7.0.5", + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging": "2.2.0", + "Speckle.DoubleNumerics": "4.0.1", + "Speckle.Newtonsoft.Json": "13.0.2", + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" + } + }, + "Speckle.Sdk.Dependencies": { + "type": "CentralTransitive", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" + }, + "System.Threading.Tasks.Dataflow": { + "type": "CentralTransitive", + "requested": "[6.0.0, )", + "resolved": "6.0.0", + "contentHash": "+tyDCU3/B1lDdOOAJywHQoFwyXIUghIaP2BxG79uvhfTnO+D9qIgjVlL/JV2NTliYbMHpd6eKDmHp2VHpij7MA==" + } + }, + ".NETFramework,Version=v4.8/win-x64": { + "SQLitePCLRaw.lib.e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "2C9Q9eX7CPLveJA0rIhf9RXAvu+7nWZu1A2MdG6SD/NOu26TakGgL1nsbc0JAspGijFOo3HoN79xrx8a368fBg==" + }, + "Microsoft.Web.WebView2": { + "type": "CentralTransitive", + "requested": "[1.0.1938.49, )", + "resolved": "1.0.1938.49", + "contentHash": "z8KnFnaTYzhA/ZnyRX0qGfS1NU5ZBJeClAH64F0fVDvdDJTvME7xl6zTJ0Jlfe1BtL3C0NH9xTy64shg2baKdw==" + } + } + } +} \ No newline at end of file diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2023/Properties/launchSettings.json b/Connectors/Navisworks/Speckle.Connectors.Navisworks2023/Properties/launchSettings.json new file mode 100644 index 000000000..2c8b4363f --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2023/Properties/launchSettings.json @@ -0,0 +1,9 @@ +{ + "profiles": { + "Speckle.Connector.Navisworks2023": { + "commandName": "Executable", + "executablePath": "C:\\Program Files\\Autodesk\\Navisworks Manage 2023\\Roamer.exe", + "commandLineArgs": " -licensing AdLM" + } + } +} diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2023/Speckle.Connectors.Navisworks2023.csproj b/Connectors/Navisworks/Speckle.Connectors.Navisworks2023/Speckle.Connectors.Navisworks2023.csproj new file mode 100644 index 000000000..d093ac0bf --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2023/Speckle.Connectors.Navisworks2023.csproj @@ -0,0 +1,59 @@ + + + + net48 + x64 + win-x64 + 512 + + v20 + 2023 + + true + $(DefineConstants);TRACE;NAVIS2023;NAVIS + + NextGen Speckle Connector for Autodesk Navisworks Manage + $(Authors) jonathon@speckle.systems + $(PackageTags) connector nwd nwc nwf navisworks manage + + $(AppData)\Autodesk\ApplicationPlugins\Speckle.Connectors.Navisworksv3.bundle + $(AppData)\Autodesk\ApplicationPlugins\Speckle.Connectors.Navisworksv3.bundle\Contents\$(NavisworksVersion) + Speckle.Connector.Navisworks + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2023/packages.lock.json b/Connectors/Navisworks/Speckle.Connectors.Navisworks2023/packages.lock.json new file mode 100644 index 000000000..60b4cc5cd --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2023/packages.lock.json @@ -0,0 +1,393 @@ +{ + "version": 2, + "dependencies": { + ".NETFramework,Version=v4.8": { + "Microsoft.NETFramework.ReferenceAssemblies": { + "type": "Direct", + "requested": "[1.0.3, )", + "resolved": "1.0.3", + "contentHash": "vUc9Npcs14QsyOD01tnv/m8sQUnGTGOw1BCmKcv77LBJY7OxhJ+zJF7UD/sCL3lYNFuqmQEVlkfS4Quif6FyYg==", + "dependencies": { + "Microsoft.NETFramework.ReferenceAssemblies.net48": "1.0.3" + } + }, + "Microsoft.SourceLink.GitHub": { + "type": "Direct", + "requested": "[8.0.0, )", + "resolved": "8.0.0", + "contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==", + "dependencies": { + "Microsoft.Build.Tasks.Git": "8.0.0", + "Microsoft.SourceLink.Common": "8.0.0" + } + }, + "PolySharp": { + "type": "Direct", + "requested": "[1.14.1, )", + "resolved": "1.14.1", + "contentHash": "mOOmFYwad3MIOL14VCjj02LljyF1GNw1wP0YVlxtcPvqdxjGGMNdNJJxHptlry3MOd8b40Flm8RPOM8JOlN2sQ==" + }, + "Speckle.InterfaceGenerator": { + "type": "Direct", + "requested": "[0.9.6, )", + "resolved": "0.9.6", + "contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w==" + }, + "Speckle.Navisworks.API": { + "type": "Direct", + "requested": "[2023.0.0, )", + "resolved": "2023.0.0", + "contentHash": "+qRmcyLD3DpuSSwX2IbEwp0gJllbiKgv313PZfEfh8I2uvxf+5YNqDzY0OGOxWIdPKqaQmdUZ1ELzoDtucCWzA==" + }, + "Speckle.Objects": { + "type": "Direct", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", + "dependencies": { + "Speckle.Sdk": "3.1.0-dev.218" + } + }, + "GraphQL.Client": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "8yPNBbuVBpTptivyAlak4GZvbwbUcjeQTL4vN1HKHRuOykZ4r7l5fcLS6vpyPyLn0x8FsL31xbOIKyxbmR9rbA==", + "dependencies": { + "GraphQL.Client.Abstractions": "6.0.0", + "GraphQL.Client.Abstractions.Websocket": "6.0.0", + "System.Net.WebSockets.Client.Managed": "1.0.22", + "System.Reactive": "5.0.0" + } + }, + "GraphQL.Client.Abstractions": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "h7uzWFORHZ+CCjwr/ThAyXMr0DPpzEANDa4Uo54wqCQ+j7qUKwqYTgOrb1W40sqbvNaZm9v/X7It31SUw0maHA==", + "dependencies": { + "GraphQL.Primitives": "6.0.0" + } + }, + "GraphQL.Client.Abstractions.Websocket": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "Nr9bPf8gIOvLuXpqEpqr9z9jslYFJOvd0feHth3/kPqeR3uMbjF5pjiwh4jxyMcxHdr8Pb6QiXkV3hsSyt0v7A==", + "dependencies": { + "GraphQL.Client.Abstractions": "6.0.0" + } + }, + "GraphQL.Primitives": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "yg72rrYDapfsIUrul7aF6wwNnTJBOFvuA9VdDTQpPa8AlAriHbufeXYLBcodKjfUdkCnaiggX1U/nEP08Zb5GA==" + }, + "Microsoft.Bcl.AsyncInterfaces": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "W8DPQjkMScOMTtJbPwmPyj9c3zYSFGawDW3jwlBOOsnY+EzZFLgNQ/UMkK35JmkNOVPdCyPr2Tw7Vv9N+KA3ZQ==", + "dependencies": { + "System.Threading.Tasks.Extensions": "4.5.4" + } + }, + "Microsoft.Build.Tasks.Git": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ==" + }, + "Microsoft.CSharp": { + "type": "Transitive", + "resolved": "4.7.0", + "contentHash": "pTj+D3uJWyN3My70i2Hqo+OXixq3Os2D1nJ2x92FFo6sk8fYS1m1WLNTs0Dc1uPaViH0YvEEwvzddQ7y4rhXmA==" + }, + "Microsoft.Data.Sqlite": { + "type": "Transitive", + "resolved": "7.0.5", + "contentHash": "KGxbPeWsQMnmQy43DSBxAFtHz3l2JX8EWBSGUCvT3CuZ8KsuzbkqMIJMDOxWtG8eZSoCDI04aiVQjWuuV8HmSw==", + "dependencies": { + "Microsoft.Data.Sqlite.Core": "7.0.5", + "SQLitePCLRaw.bundle_e_sqlite3": "2.1.4" + } + }, + "Microsoft.Data.Sqlite.Core": { + "type": "Transitive", + "resolved": "7.0.5", + "contentHash": "FTerRmQPqHrCrnoUzhBu+E+1DNGwyrAMLqHkAqOOOu5pGfyMOj8qQUBxI/gDtWtG11p49UxSfWmBzRNlwZqfUg==", + "dependencies": { + "SQLitePCLRaw.core": "2.1.4" + } + }, + "Microsoft.Extensions.Configuration": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "nOP8R1mVb/6mZtm2qgAJXn/LFm/2kMjHDAg/QJLFG6CuWYJtaD3p1BwQhufBVvRzL9ceJ/xF0SQ0qsI2GkDQAA==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "2.2.0" + } + }, + "Microsoft.Extensions.Configuration.Abstractions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "65MrmXCziWaQFrI0UHkQbesrX5wTwf9XPjY5yFm/VkgJKFJ5gqvXRoXjIZcf2wLi5ZlwGz/oMYfyURVCWbM5iw==", + "dependencies": { + "Microsoft.Extensions.Primitives": "2.2.0" + } + }, + "Microsoft.Extensions.Configuration.Binder": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "vJ9xvOZCnUAIHcGC3SU35r3HKmHTVIeHzo6u/qzlHAqD8m6xv92MLin4oJntTvkpKxVX3vI1GFFkIQtU3AdlsQ==", + "dependencies": { + "Microsoft.Extensions.Configuration": "2.2.0" + } + }, + "Microsoft.Extensions.DependencyInjection.Abstractions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "f9hstgjVmr6rmrfGSpfsVOl2irKAgr1QjrSi3FgnS7kulxband50f2brRLwySAQTADPZeTdow0mpSMcoAdadCw==" + }, + "Microsoft.Extensions.Options": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "UpZLNLBpIZ0GTebShui7xXYh6DmBHjWM8NxGxZbdQh/bPZ5e6YswqI+bru6BnEL5eWiOdodsXtEz3FROcgi/qg==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Primitives": "2.2.0", + "System.ComponentModel.Annotations": "4.5.0" + } + }, + "Microsoft.Extensions.Primitives": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "azyQtqbm4fSaDzZHD/J+V6oWMFaf2tWP4WEGIYePLCMw3+b2RQdj9ybgbQyjCshcitQKQ4lEDOZjmSlTTrHxUg==", + "dependencies": { + "System.Memory": "4.5.1", + "System.Runtime.CompilerServices.Unsafe": "4.5.1" + } + }, + "Microsoft.NETFramework.ReferenceAssemblies.net48": { + "type": "Transitive", + "resolved": "1.0.3", + "contentHash": "zMk4D+9zyiEWByyQ7oPImPN/Jhpj166Ky0Nlla4eXlNL8hI/BtSJsgR8Inldd4NNpIAH3oh8yym0W2DrhXdSLQ==" + }, + "Microsoft.SourceLink.Common": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw==" + }, + "Speckle.DoubleNumerics": { + "type": "Transitive", + "resolved": "4.0.1", + "contentHash": "MzEQ1Im0zTja+tEsdRIk/WlPiKqb22NmTOJcR1ZKm/mz46pezyyID3/wRz6vJUELMpSLnG7LhsxBL+nxbr7V0w==" + }, + "Speckle.Newtonsoft.Json": { + "type": "Transitive", + "resolved": "13.0.2", + "contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA==" + }, + "SQLitePCLRaw.bundle_e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "EWI1olKDjFEBMJu0+3wuxwziIAdWDVMYLhuZ3Qs84rrz+DHwD00RzWPZCa+bLnHCf3oJwuFZIRsHT5p236QXww==", + "dependencies": { + "SQLitePCLRaw.lib.e_sqlite3": "2.1.4", + "SQLitePCLRaw.provider.dynamic_cdecl": "2.1.4" + } + }, + "SQLitePCLRaw.core": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "inBjvSHo9UDKneGNzfUfDjK08JzlcIhn1+SP5Y3m6cgXpCxXKCJDy6Mka7LpgSV+UZmKSnC8rTwB0SQ0xKu5pA==", + "dependencies": { + "System.Memory": "4.5.3" + } + }, + "SQLitePCLRaw.lib.e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "2C9Q9eX7CPLveJA0rIhf9RXAvu+7nWZu1A2MdG6SD/NOu26TakGgL1nsbc0JAspGijFOo3HoN79xrx8a368fBg==" + }, + "SQLitePCLRaw.provider.dynamic_cdecl": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "ZsaKKhgYF9B1fvcnOGKl3EycNAwd9CRWX7v0rEfuPWhQQ5Jjpvf2VEHahiLIGHio3hxi3EIKFJw9KvyowWOUAw==", + "dependencies": { + "SQLitePCLRaw.core": "2.1.4" + } + }, + "System.Buffers": { + "type": "Transitive", + "resolved": "4.4.0", + "contentHash": "AwarXzzoDwX6BgrhjoJsk6tUezZEozOT5Y9QKF94Gl4JK91I4PIIBkBco9068Y9/Dra8Dkbie99kXB8+1BaYKw==" + }, + "System.ComponentModel.Annotations": { + "type": "Transitive", + "resolved": "4.5.0", + "contentHash": "UxYQ3FGUOtzJ7LfSdnYSFd7+oEv6M8NgUatatIN2HxNtDdlcvFAf+VIq4Of9cDMJEJC0aSRv/x898RYhB4Yppg==" + }, + "System.Memory": { + "type": "Transitive", + "resolved": "4.5.3", + "contentHash": "3oDzvc/zzetpTKWMShs1AADwZjQ/36HnsufHRPcOjyRAAMLDlu2iD33MBI2opxnezcVUtXyqDXXjoFMOU9c7SA==", + "dependencies": { + "System.Buffers": "4.4.0", + "System.Numerics.Vectors": "4.4.0", + "System.Runtime.CompilerServices.Unsafe": "4.5.2" + } + }, + "System.Net.WebSockets.Client.Managed": { + "type": "Transitive", + "resolved": "1.0.22", + "contentHash": "WqEOxPlXjuZrIjUtXNE9NxEfU/n5E35iV2PtoZdJSUC4tlrqwHnTee+wvMIM4OUaJWmwrymeqcgYrE0IkGAgLA==", + "dependencies": { + "System.Buffers": "4.4.0", + "System.Numerics.Vectors": "4.4.0" + } + }, + "System.Numerics.Vectors": { + "type": "Transitive", + "resolved": "4.4.0", + "contentHash": "UiLzLW+Lw6HLed1Hcg+8jSRttrbuXv7DANVj0DkL9g6EnnzbL75EB7EWsw5uRbhxd/4YdG8li5XizGWepmG3PQ==" + }, + "System.Reactive": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ==", + "dependencies": { + "System.Threading.Tasks.Extensions": "4.5.4" + } + }, + "System.Runtime.CompilerServices.Unsafe": { + "type": "Transitive", + "resolved": "4.5.3", + "contentHash": "3TIsJhD1EiiT0w2CcDMN/iSSwnNnsrnbzeVHSKkaEgV85txMprmuO+Yq2AdSbeVGcg28pdNDTPK87tJhX7VFHw==" + }, + "System.Threading.Tasks.Extensions": { + "type": "Transitive", + "resolved": "4.5.4", + "contentHash": "zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg==", + "dependencies": { + "System.Runtime.CompilerServices.Unsafe": "4.5.3" + } + }, + "speckle.connectors.common": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", + "Speckle.Connectors.Logging": "[1.0.0, )", + "Speckle.Objects": "[3.1.0-dev.218, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" + } + }, + "speckle.connectors.dui": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", + "Speckle.Connectors.Common": "[1.0.0, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )", + "System.Threading.Tasks.Dataflow": "[6.0.0, )" + } + }, + "speckle.connectors.dui.webview": { + "type": "Project", + "dependencies": { + "Microsoft.Web.WebView2": "[1.0.1938.49, )", + "Speckle.Connectors.DUI": "[1.0.0, )" + } + }, + "speckle.connectors.logging": { + "type": "Project" + }, + "speckle.converters.common": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", + "Speckle.Objects": "[3.1.0-dev.218, )" + } + }, + "speckle.converters.navisworks2023": { + "type": "Project", + "dependencies": { + "Speckle.Connectors.DUI": "[1.0.0, )", + "Speckle.Converters.Common": "[1.0.0, )", + "Speckle.Navisworks.API": "[2023.0.0, )" + } + }, + "Microsoft.Extensions.DependencyInjection": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "MZtBIwfDFork5vfjpJdG5g8wuJFt7d/y3LOSVVtDK/76wlbtz6cjltfKHqLx2TKVqTj5/c41t77m1+h20zqtPA==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0" + } + }, + "Microsoft.Extensions.Logging": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "Nxqhadc9FCmFHzU+fz3oc8sFlE6IadViYg8dfUdGzJZ2JUxnCsRghBhhOWdM4B2zSZqEc+0BjliBh/oNdRZuig==", + "dependencies": { + "Microsoft.Extensions.Configuration.Binder": "2.2.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging.Abstractions": "2.2.0", + "Microsoft.Extensions.Options": "2.2.0" + } + }, + "Microsoft.Extensions.Logging.Abstractions": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "B2WqEox8o+4KUOpL7rZPyh6qYjik8tHi2tN8Z9jZkHzED8ElYgZa/h6K+xliB435SqUcWT290Fr2aa8BtZjn8A==" + }, + "Microsoft.Web.WebView2": { + "type": "CentralTransitive", + "requested": "[1.0.1938.49, )", + "resolved": "1.0.1938.49", + "contentHash": "z8KnFnaTYzhA/ZnyRX0qGfS1NU5ZBJeClAH64F0fVDvdDJTvME7xl6zTJ0Jlfe1BtL3C0NH9xTy64shg2baKdw==" + }, + "Speckle.Sdk": { + "type": "CentralTransitive", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", + "dependencies": { + "GraphQL.Client": "6.0.0", + "Microsoft.Bcl.AsyncInterfaces": "5.0.0", + "Microsoft.CSharp": "4.7.0", + "Microsoft.Data.Sqlite": "7.0.5", + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging": "2.2.0", + "Speckle.DoubleNumerics": "4.0.1", + "Speckle.Newtonsoft.Json": "13.0.2", + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" + } + }, + "Speckle.Sdk.Dependencies": { + "type": "CentralTransitive", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" + }, + "System.Threading.Tasks.Dataflow": { + "type": "CentralTransitive", + "requested": "[6.0.0, )", + "resolved": "6.0.0", + "contentHash": "+tyDCU3/B1lDdOOAJywHQoFwyXIUghIaP2BxG79uvhfTnO+D9qIgjVlL/JV2NTliYbMHpd6eKDmHp2VHpij7MA==" + } + }, + ".NETFramework,Version=v4.8/win-x64": { + "SQLitePCLRaw.lib.e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "2C9Q9eX7CPLveJA0rIhf9RXAvu+7nWZu1A2MdG6SD/NOu26TakGgL1nsbc0JAspGijFOo3HoN79xrx8a368fBg==" + }, + "Microsoft.Web.WebView2": { + "type": "CentralTransitive", + "requested": "[1.0.1938.49, )", + "resolved": "1.0.1938.49", + "contentHash": "z8KnFnaTYzhA/ZnyRX0qGfS1NU5ZBJeClAH64F0fVDvdDJTvME7xl6zTJ0Jlfe1BtL3C0NH9xTy64shg2baKdw==" + } + } + } +} \ No newline at end of file diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2024/Properties/launchSettings.json b/Connectors/Navisworks/Speckle.Connectors.Navisworks2024/Properties/launchSettings.json new file mode 100644 index 000000000..32e5dc126 --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2024/Properties/launchSettings.json @@ -0,0 +1,9 @@ +{ + "profiles": { + "Speckle.Connector.Navisworks2024": { + "commandName": "Executable", + "executablePath": "C:\\Program Files\\Autodesk\\Navisworks Manage 2024\\Roamer.exe", + "commandLineArgs": " -licensing AdLM" + } + } +} diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2024/Speckle.Connectors.Navisworks2024.csproj b/Connectors/Navisworks/Speckle.Connectors.Navisworks2024/Speckle.Connectors.Navisworks2024.csproj new file mode 100644 index 000000000..6b346613c --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2024/Speckle.Connectors.Navisworks2024.csproj @@ -0,0 +1,58 @@ + + + + net48 + x64 + win-x64 + 512 + + v21 + 2024 + + true + $(DefineConstants);TRACE;NAVIS2024;NAVIS + + NextGen Speckle Connector for Autodesk Navisworks Manage + $(Authors) jonathon@speckle.systems + $(PackageTags) connector nwd nwc nwf navisworks manage + + $(AppData)\Autodesk\ApplicationPlugins\Speckle.Connectors.Navisworksv3.bundle + $(AppData)\Autodesk\ApplicationPlugins\Speckle.Connectors.Navisworksv3.bundle\Contents\$(NavisworksVersion) + Speckle.Connector.Navisworks + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2024/packages.lock.json b/Connectors/Navisworks/Speckle.Connectors.Navisworks2024/packages.lock.json new file mode 100644 index 000000000..d47f24827 --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2024/packages.lock.json @@ -0,0 +1,393 @@ +{ + "version": 2, + "dependencies": { + ".NETFramework,Version=v4.8": { + "Microsoft.NETFramework.ReferenceAssemblies": { + "type": "Direct", + "requested": "[1.0.3, )", + "resolved": "1.0.3", + "contentHash": "vUc9Npcs14QsyOD01tnv/m8sQUnGTGOw1BCmKcv77LBJY7OxhJ+zJF7UD/sCL3lYNFuqmQEVlkfS4Quif6FyYg==", + "dependencies": { + "Microsoft.NETFramework.ReferenceAssemblies.net48": "1.0.3" + } + }, + "Microsoft.SourceLink.GitHub": { + "type": "Direct", + "requested": "[8.0.0, )", + "resolved": "8.0.0", + "contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==", + "dependencies": { + "Microsoft.Build.Tasks.Git": "8.0.0", + "Microsoft.SourceLink.Common": "8.0.0" + } + }, + "PolySharp": { + "type": "Direct", + "requested": "[1.14.1, )", + "resolved": "1.14.1", + "contentHash": "mOOmFYwad3MIOL14VCjj02LljyF1GNw1wP0YVlxtcPvqdxjGGMNdNJJxHptlry3MOd8b40Flm8RPOM8JOlN2sQ==" + }, + "Speckle.InterfaceGenerator": { + "type": "Direct", + "requested": "[0.9.6, )", + "resolved": "0.9.6", + "contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w==" + }, + "Speckle.Navisworks.API": { + "type": "Direct", + "requested": "[2024.0.0, )", + "resolved": "2024.0.0", + "contentHash": "SnkvhcENMy3YLWbzy4lCweMuWdAbNzAtwvffFH2xVHmnm/2INnMGucYGazAHN496d6wgl9YRGa4qftgVsg7T7A==" + }, + "Speckle.Objects": { + "type": "Direct", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", + "dependencies": { + "Speckle.Sdk": "3.1.0-dev.218" + } + }, + "GraphQL.Client": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "8yPNBbuVBpTptivyAlak4GZvbwbUcjeQTL4vN1HKHRuOykZ4r7l5fcLS6vpyPyLn0x8FsL31xbOIKyxbmR9rbA==", + "dependencies": { + "GraphQL.Client.Abstractions": "6.0.0", + "GraphQL.Client.Abstractions.Websocket": "6.0.0", + "System.Net.WebSockets.Client.Managed": "1.0.22", + "System.Reactive": "5.0.0" + } + }, + "GraphQL.Client.Abstractions": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "h7uzWFORHZ+CCjwr/ThAyXMr0DPpzEANDa4Uo54wqCQ+j7qUKwqYTgOrb1W40sqbvNaZm9v/X7It31SUw0maHA==", + "dependencies": { + "GraphQL.Primitives": "6.0.0" + } + }, + "GraphQL.Client.Abstractions.Websocket": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "Nr9bPf8gIOvLuXpqEpqr9z9jslYFJOvd0feHth3/kPqeR3uMbjF5pjiwh4jxyMcxHdr8Pb6QiXkV3hsSyt0v7A==", + "dependencies": { + "GraphQL.Client.Abstractions": "6.0.0" + } + }, + "GraphQL.Primitives": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "yg72rrYDapfsIUrul7aF6wwNnTJBOFvuA9VdDTQpPa8AlAriHbufeXYLBcodKjfUdkCnaiggX1U/nEP08Zb5GA==" + }, + "Microsoft.Bcl.AsyncInterfaces": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "W8DPQjkMScOMTtJbPwmPyj9c3zYSFGawDW3jwlBOOsnY+EzZFLgNQ/UMkK35JmkNOVPdCyPr2Tw7Vv9N+KA3ZQ==", + "dependencies": { + "System.Threading.Tasks.Extensions": "4.5.4" + } + }, + "Microsoft.Build.Tasks.Git": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ==" + }, + "Microsoft.CSharp": { + "type": "Transitive", + "resolved": "4.7.0", + "contentHash": "pTj+D3uJWyN3My70i2Hqo+OXixq3Os2D1nJ2x92FFo6sk8fYS1m1WLNTs0Dc1uPaViH0YvEEwvzddQ7y4rhXmA==" + }, + "Microsoft.Data.Sqlite": { + "type": "Transitive", + "resolved": "7.0.5", + "contentHash": "KGxbPeWsQMnmQy43DSBxAFtHz3l2JX8EWBSGUCvT3CuZ8KsuzbkqMIJMDOxWtG8eZSoCDI04aiVQjWuuV8HmSw==", + "dependencies": { + "Microsoft.Data.Sqlite.Core": "7.0.5", + "SQLitePCLRaw.bundle_e_sqlite3": "2.1.4" + } + }, + "Microsoft.Data.Sqlite.Core": { + "type": "Transitive", + "resolved": "7.0.5", + "contentHash": "FTerRmQPqHrCrnoUzhBu+E+1DNGwyrAMLqHkAqOOOu5pGfyMOj8qQUBxI/gDtWtG11p49UxSfWmBzRNlwZqfUg==", + "dependencies": { + "SQLitePCLRaw.core": "2.1.4" + } + }, + "Microsoft.Extensions.Configuration": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "nOP8R1mVb/6mZtm2qgAJXn/LFm/2kMjHDAg/QJLFG6CuWYJtaD3p1BwQhufBVvRzL9ceJ/xF0SQ0qsI2GkDQAA==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "2.2.0" + } + }, + "Microsoft.Extensions.Configuration.Abstractions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "65MrmXCziWaQFrI0UHkQbesrX5wTwf9XPjY5yFm/VkgJKFJ5gqvXRoXjIZcf2wLi5ZlwGz/oMYfyURVCWbM5iw==", + "dependencies": { + "Microsoft.Extensions.Primitives": "2.2.0" + } + }, + "Microsoft.Extensions.Configuration.Binder": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "vJ9xvOZCnUAIHcGC3SU35r3HKmHTVIeHzo6u/qzlHAqD8m6xv92MLin4oJntTvkpKxVX3vI1GFFkIQtU3AdlsQ==", + "dependencies": { + "Microsoft.Extensions.Configuration": "2.2.0" + } + }, + "Microsoft.Extensions.DependencyInjection.Abstractions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "f9hstgjVmr6rmrfGSpfsVOl2irKAgr1QjrSi3FgnS7kulxband50f2brRLwySAQTADPZeTdow0mpSMcoAdadCw==" + }, + "Microsoft.Extensions.Options": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "UpZLNLBpIZ0GTebShui7xXYh6DmBHjWM8NxGxZbdQh/bPZ5e6YswqI+bru6BnEL5eWiOdodsXtEz3FROcgi/qg==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Primitives": "2.2.0", + "System.ComponentModel.Annotations": "4.5.0" + } + }, + "Microsoft.Extensions.Primitives": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "azyQtqbm4fSaDzZHD/J+V6oWMFaf2tWP4WEGIYePLCMw3+b2RQdj9ybgbQyjCshcitQKQ4lEDOZjmSlTTrHxUg==", + "dependencies": { + "System.Memory": "4.5.1", + "System.Runtime.CompilerServices.Unsafe": "4.5.1" + } + }, + "Microsoft.NETFramework.ReferenceAssemblies.net48": { + "type": "Transitive", + "resolved": "1.0.3", + "contentHash": "zMk4D+9zyiEWByyQ7oPImPN/Jhpj166Ky0Nlla4eXlNL8hI/BtSJsgR8Inldd4NNpIAH3oh8yym0W2DrhXdSLQ==" + }, + "Microsoft.SourceLink.Common": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw==" + }, + "Speckle.DoubleNumerics": { + "type": "Transitive", + "resolved": "4.0.1", + "contentHash": "MzEQ1Im0zTja+tEsdRIk/WlPiKqb22NmTOJcR1ZKm/mz46pezyyID3/wRz6vJUELMpSLnG7LhsxBL+nxbr7V0w==" + }, + "Speckle.Newtonsoft.Json": { + "type": "Transitive", + "resolved": "13.0.2", + "contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA==" + }, + "SQLitePCLRaw.bundle_e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "EWI1olKDjFEBMJu0+3wuxwziIAdWDVMYLhuZ3Qs84rrz+DHwD00RzWPZCa+bLnHCf3oJwuFZIRsHT5p236QXww==", + "dependencies": { + "SQLitePCLRaw.lib.e_sqlite3": "2.1.4", + "SQLitePCLRaw.provider.dynamic_cdecl": "2.1.4" + } + }, + "SQLitePCLRaw.core": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "inBjvSHo9UDKneGNzfUfDjK08JzlcIhn1+SP5Y3m6cgXpCxXKCJDy6Mka7LpgSV+UZmKSnC8rTwB0SQ0xKu5pA==", + "dependencies": { + "System.Memory": "4.5.3" + } + }, + "SQLitePCLRaw.lib.e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "2C9Q9eX7CPLveJA0rIhf9RXAvu+7nWZu1A2MdG6SD/NOu26TakGgL1nsbc0JAspGijFOo3HoN79xrx8a368fBg==" + }, + "SQLitePCLRaw.provider.dynamic_cdecl": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "ZsaKKhgYF9B1fvcnOGKl3EycNAwd9CRWX7v0rEfuPWhQQ5Jjpvf2VEHahiLIGHio3hxi3EIKFJw9KvyowWOUAw==", + "dependencies": { + "SQLitePCLRaw.core": "2.1.4" + } + }, + "System.Buffers": { + "type": "Transitive", + "resolved": "4.4.0", + "contentHash": "AwarXzzoDwX6BgrhjoJsk6tUezZEozOT5Y9QKF94Gl4JK91I4PIIBkBco9068Y9/Dra8Dkbie99kXB8+1BaYKw==" + }, + "System.ComponentModel.Annotations": { + "type": "Transitive", + "resolved": "4.5.0", + "contentHash": "UxYQ3FGUOtzJ7LfSdnYSFd7+oEv6M8NgUatatIN2HxNtDdlcvFAf+VIq4Of9cDMJEJC0aSRv/x898RYhB4Yppg==" + }, + "System.Memory": { + "type": "Transitive", + "resolved": "4.5.3", + "contentHash": "3oDzvc/zzetpTKWMShs1AADwZjQ/36HnsufHRPcOjyRAAMLDlu2iD33MBI2opxnezcVUtXyqDXXjoFMOU9c7SA==", + "dependencies": { + "System.Buffers": "4.4.0", + "System.Numerics.Vectors": "4.4.0", + "System.Runtime.CompilerServices.Unsafe": "4.5.2" + } + }, + "System.Net.WebSockets.Client.Managed": { + "type": "Transitive", + "resolved": "1.0.22", + "contentHash": "WqEOxPlXjuZrIjUtXNE9NxEfU/n5E35iV2PtoZdJSUC4tlrqwHnTee+wvMIM4OUaJWmwrymeqcgYrE0IkGAgLA==", + "dependencies": { + "System.Buffers": "4.4.0", + "System.Numerics.Vectors": "4.4.0" + } + }, + "System.Numerics.Vectors": { + "type": "Transitive", + "resolved": "4.4.0", + "contentHash": "UiLzLW+Lw6HLed1Hcg+8jSRttrbuXv7DANVj0DkL9g6EnnzbL75EB7EWsw5uRbhxd/4YdG8li5XizGWepmG3PQ==" + }, + "System.Reactive": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ==", + "dependencies": { + "System.Threading.Tasks.Extensions": "4.5.4" + } + }, + "System.Runtime.CompilerServices.Unsafe": { + "type": "Transitive", + "resolved": "4.5.3", + "contentHash": "3TIsJhD1EiiT0w2CcDMN/iSSwnNnsrnbzeVHSKkaEgV85txMprmuO+Yq2AdSbeVGcg28pdNDTPK87tJhX7VFHw==" + }, + "System.Threading.Tasks.Extensions": { + "type": "Transitive", + "resolved": "4.5.4", + "contentHash": "zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg==", + "dependencies": { + "System.Runtime.CompilerServices.Unsafe": "4.5.3" + } + }, + "speckle.connectors.common": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", + "Speckle.Connectors.Logging": "[1.0.0, )", + "Speckle.Objects": "[3.1.0-dev.218, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" + } + }, + "speckle.connectors.dui": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", + "Speckle.Connectors.Common": "[1.0.0, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )", + "System.Threading.Tasks.Dataflow": "[6.0.0, )" + } + }, + "speckle.connectors.dui.webview": { + "type": "Project", + "dependencies": { + "Microsoft.Web.WebView2": "[1.0.1938.49, )", + "Speckle.Connectors.DUI": "[1.0.0, )" + } + }, + "speckle.connectors.logging": { + "type": "Project" + }, + "speckle.converters.common": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", + "Speckle.Objects": "[3.1.0-dev.218, )" + } + }, + "speckle.converters.navisworks2024": { + "type": "Project", + "dependencies": { + "Speckle.Connectors.DUI": "[1.0.0, )", + "Speckle.Converters.Common": "[1.0.0, )", + "Speckle.Navisworks.API": "[2024.0.0, )" + } + }, + "Microsoft.Extensions.DependencyInjection": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "MZtBIwfDFork5vfjpJdG5g8wuJFt7d/y3LOSVVtDK/76wlbtz6cjltfKHqLx2TKVqTj5/c41t77m1+h20zqtPA==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0" + } + }, + "Microsoft.Extensions.Logging": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "Nxqhadc9FCmFHzU+fz3oc8sFlE6IadViYg8dfUdGzJZ2JUxnCsRghBhhOWdM4B2zSZqEc+0BjliBh/oNdRZuig==", + "dependencies": { + "Microsoft.Extensions.Configuration.Binder": "2.2.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging.Abstractions": "2.2.0", + "Microsoft.Extensions.Options": "2.2.0" + } + }, + "Microsoft.Extensions.Logging.Abstractions": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "B2WqEox8o+4KUOpL7rZPyh6qYjik8tHi2tN8Z9jZkHzED8ElYgZa/h6K+xliB435SqUcWT290Fr2aa8BtZjn8A==" + }, + "Microsoft.Web.WebView2": { + "type": "CentralTransitive", + "requested": "[1.0.1938.49, )", + "resolved": "1.0.1938.49", + "contentHash": "z8KnFnaTYzhA/ZnyRX0qGfS1NU5ZBJeClAH64F0fVDvdDJTvME7xl6zTJ0Jlfe1BtL3C0NH9xTy64shg2baKdw==" + }, + "Speckle.Sdk": { + "type": "CentralTransitive", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", + "dependencies": { + "GraphQL.Client": "6.0.0", + "Microsoft.Bcl.AsyncInterfaces": "5.0.0", + "Microsoft.CSharp": "4.7.0", + "Microsoft.Data.Sqlite": "7.0.5", + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging": "2.2.0", + "Speckle.DoubleNumerics": "4.0.1", + "Speckle.Newtonsoft.Json": "13.0.2", + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" + } + }, + "Speckle.Sdk.Dependencies": { + "type": "CentralTransitive", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" + }, + "System.Threading.Tasks.Dataflow": { + "type": "CentralTransitive", + "requested": "[6.0.0, )", + "resolved": "6.0.0", + "contentHash": "+tyDCU3/B1lDdOOAJywHQoFwyXIUghIaP2BxG79uvhfTnO+D9qIgjVlL/JV2NTliYbMHpd6eKDmHp2VHpij7MA==" + } + }, + ".NETFramework,Version=v4.8/win-x64": { + "SQLitePCLRaw.lib.e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "2C9Q9eX7CPLveJA0rIhf9RXAvu+7nWZu1A2MdG6SD/NOu26TakGgL1nsbc0JAspGijFOo3HoN79xrx8a368fBg==" + }, + "Microsoft.Web.WebView2": { + "type": "CentralTransitive", + "requested": "[1.0.1938.49, )", + "resolved": "1.0.1938.49", + "contentHash": "z8KnFnaTYzhA/ZnyRX0qGfS1NU5ZBJeClAH64F0fVDvdDJTvME7xl6zTJ0Jlfe1BtL3C0NH9xTy64shg2baKdw==" + } + } + } +} \ No newline at end of file diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2025/Properties/launchSettings.json b/Connectors/Navisworks/Speckle.Connectors.Navisworks2025/Properties/launchSettings.json new file mode 100644 index 000000000..3b8100b12 --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2025/Properties/launchSettings.json @@ -0,0 +1,9 @@ +{ + "profiles": { + "Speckle.Connector.Navisworks2025": { + "commandName": "Executable", + "executablePath": "C:\\Program Files\\Autodesk\\Navisworks Manage 2025\\Roamer.exe", + "commandLineArgs": " -licensing AdLM" + } + } +} diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2025/Speckle.Connectors.Navisworks2025.csproj b/Connectors/Navisworks/Speckle.Connectors.Navisworks2025/Speckle.Connectors.Navisworks2025.csproj new file mode 100644 index 000000000..917a87414 --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2025/Speckle.Connectors.Navisworks2025.csproj @@ -0,0 +1,56 @@ + + + net48 + x64 + win-x64 + 512 + + v22 + 2025 + + true + $(DefineConstants);TRACE;NAVIS2025;NAVIS + + NextGen Speckle Connector for Autodesk Navisworks Manage + $(Authors) jonathon@speckle.systems + $(PackageTags) connector nwd nwc nwf navisworks manage + + $(AppData)\Autodesk\ApplicationPlugins\Speckle.Connectors.Navisworksv3.bundle + $(AppData)\Autodesk\ApplicationPlugins\Speckle.Connectors.Navisworksv3.bundle\Contents\$(NavisworksVersion) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2025/packages.lock.json b/Connectors/Navisworks/Speckle.Connectors.Navisworks2025/packages.lock.json new file mode 100644 index 000000000..db9cf1712 --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2025/packages.lock.json @@ -0,0 +1,393 @@ +{ + "version": 2, + "dependencies": { + ".NETFramework,Version=v4.8": { + "Microsoft.NETFramework.ReferenceAssemblies": { + "type": "Direct", + "requested": "[1.0.3, )", + "resolved": "1.0.3", + "contentHash": "vUc9Npcs14QsyOD01tnv/m8sQUnGTGOw1BCmKcv77LBJY7OxhJ+zJF7UD/sCL3lYNFuqmQEVlkfS4Quif6FyYg==", + "dependencies": { + "Microsoft.NETFramework.ReferenceAssemblies.net48": "1.0.3" + } + }, + "Microsoft.SourceLink.GitHub": { + "type": "Direct", + "requested": "[8.0.0, )", + "resolved": "8.0.0", + "contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==", + "dependencies": { + "Microsoft.Build.Tasks.Git": "8.0.0", + "Microsoft.SourceLink.Common": "8.0.0" + } + }, + "Microsoft.Web.WebView2": { + "type": "Direct", + "requested": "[1.0.2045.28, )", + "resolved": "1.0.2045.28", + "contentHash": "QDsR/HCNjzqYZrIuNLxyfmOIqVfMq1iGyoBR3OVVlFl4NZ12T8jRC0MNpOReKfgwtO5zh8g+eBYR6RAXFltcVA==" + }, + "PolySharp": { + "type": "Direct", + "requested": "[1.14.1, )", + "resolved": "1.14.1", + "contentHash": "mOOmFYwad3MIOL14VCjj02LljyF1GNw1wP0YVlxtcPvqdxjGGMNdNJJxHptlry3MOd8b40Flm8RPOM8JOlN2sQ==" + }, + "Speckle.InterfaceGenerator": { + "type": "Direct", + "requested": "[0.9.6, )", + "resolved": "0.9.6", + "contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w==" + }, + "Speckle.Navisworks.API": { + "type": "Direct", + "requested": "[2025.0.0, )", + "resolved": "2025.0.0", + "contentHash": "+q2IObnUGqtC1O/ddy2p0HKm1eXRo7Yi80oD9VIWClidvGb3rVsXKZWBHiv4HwSn5JcOMSEt1cdSlRQLm8Ehjg==" + }, + "Speckle.Objects": { + "type": "Direct", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", + "dependencies": { + "Speckle.Sdk": "3.1.0-dev.218" + } + }, + "GraphQL.Client": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "8yPNBbuVBpTptivyAlak4GZvbwbUcjeQTL4vN1HKHRuOykZ4r7l5fcLS6vpyPyLn0x8FsL31xbOIKyxbmR9rbA==", + "dependencies": { + "GraphQL.Client.Abstractions": "6.0.0", + "GraphQL.Client.Abstractions.Websocket": "6.0.0", + "System.Net.WebSockets.Client.Managed": "1.0.22", + "System.Reactive": "5.0.0" + } + }, + "GraphQL.Client.Abstractions": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "h7uzWFORHZ+CCjwr/ThAyXMr0DPpzEANDa4Uo54wqCQ+j7qUKwqYTgOrb1W40sqbvNaZm9v/X7It31SUw0maHA==", + "dependencies": { + "GraphQL.Primitives": "6.0.0" + } + }, + "GraphQL.Client.Abstractions.Websocket": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "Nr9bPf8gIOvLuXpqEpqr9z9jslYFJOvd0feHth3/kPqeR3uMbjF5pjiwh4jxyMcxHdr8Pb6QiXkV3hsSyt0v7A==", + "dependencies": { + "GraphQL.Client.Abstractions": "6.0.0" + } + }, + "GraphQL.Primitives": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "yg72rrYDapfsIUrul7aF6wwNnTJBOFvuA9VdDTQpPa8AlAriHbufeXYLBcodKjfUdkCnaiggX1U/nEP08Zb5GA==" + }, + "Microsoft.Bcl.AsyncInterfaces": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "W8DPQjkMScOMTtJbPwmPyj9c3zYSFGawDW3jwlBOOsnY+EzZFLgNQ/UMkK35JmkNOVPdCyPr2Tw7Vv9N+KA3ZQ==", + "dependencies": { + "System.Threading.Tasks.Extensions": "4.5.4" + } + }, + "Microsoft.Build.Tasks.Git": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ==" + }, + "Microsoft.CSharp": { + "type": "Transitive", + "resolved": "4.7.0", + "contentHash": "pTj+D3uJWyN3My70i2Hqo+OXixq3Os2D1nJ2x92FFo6sk8fYS1m1WLNTs0Dc1uPaViH0YvEEwvzddQ7y4rhXmA==" + }, + "Microsoft.Data.Sqlite": { + "type": "Transitive", + "resolved": "7.0.5", + "contentHash": "KGxbPeWsQMnmQy43DSBxAFtHz3l2JX8EWBSGUCvT3CuZ8KsuzbkqMIJMDOxWtG8eZSoCDI04aiVQjWuuV8HmSw==", + "dependencies": { + "Microsoft.Data.Sqlite.Core": "7.0.5", + "SQLitePCLRaw.bundle_e_sqlite3": "2.1.4" + } + }, + "Microsoft.Data.Sqlite.Core": { + "type": "Transitive", + "resolved": "7.0.5", + "contentHash": "FTerRmQPqHrCrnoUzhBu+E+1DNGwyrAMLqHkAqOOOu5pGfyMOj8qQUBxI/gDtWtG11p49UxSfWmBzRNlwZqfUg==", + "dependencies": { + "SQLitePCLRaw.core": "2.1.4" + } + }, + "Microsoft.Extensions.Configuration": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "nOP8R1mVb/6mZtm2qgAJXn/LFm/2kMjHDAg/QJLFG6CuWYJtaD3p1BwQhufBVvRzL9ceJ/xF0SQ0qsI2GkDQAA==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "2.2.0" + } + }, + "Microsoft.Extensions.Configuration.Abstractions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "65MrmXCziWaQFrI0UHkQbesrX5wTwf9XPjY5yFm/VkgJKFJ5gqvXRoXjIZcf2wLi5ZlwGz/oMYfyURVCWbM5iw==", + "dependencies": { + "Microsoft.Extensions.Primitives": "2.2.0" + } + }, + "Microsoft.Extensions.Configuration.Binder": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "vJ9xvOZCnUAIHcGC3SU35r3HKmHTVIeHzo6u/qzlHAqD8m6xv92MLin4oJntTvkpKxVX3vI1GFFkIQtU3AdlsQ==", + "dependencies": { + "Microsoft.Extensions.Configuration": "2.2.0" + } + }, + "Microsoft.Extensions.DependencyInjection.Abstractions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "f9hstgjVmr6rmrfGSpfsVOl2irKAgr1QjrSi3FgnS7kulxband50f2brRLwySAQTADPZeTdow0mpSMcoAdadCw==" + }, + "Microsoft.Extensions.Options": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "UpZLNLBpIZ0GTebShui7xXYh6DmBHjWM8NxGxZbdQh/bPZ5e6YswqI+bru6BnEL5eWiOdodsXtEz3FROcgi/qg==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Primitives": "2.2.0", + "System.ComponentModel.Annotations": "4.5.0" + } + }, + "Microsoft.Extensions.Primitives": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "azyQtqbm4fSaDzZHD/J+V6oWMFaf2tWP4WEGIYePLCMw3+b2RQdj9ybgbQyjCshcitQKQ4lEDOZjmSlTTrHxUg==", + "dependencies": { + "System.Memory": "4.5.1", + "System.Runtime.CompilerServices.Unsafe": "4.5.1" + } + }, + "Microsoft.NETFramework.ReferenceAssemblies.net48": { + "type": "Transitive", + "resolved": "1.0.3", + "contentHash": "zMk4D+9zyiEWByyQ7oPImPN/Jhpj166Ky0Nlla4eXlNL8hI/BtSJsgR8Inldd4NNpIAH3oh8yym0W2DrhXdSLQ==" + }, + "Microsoft.SourceLink.Common": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw==" + }, + "Speckle.DoubleNumerics": { + "type": "Transitive", + "resolved": "4.0.1", + "contentHash": "MzEQ1Im0zTja+tEsdRIk/WlPiKqb22NmTOJcR1ZKm/mz46pezyyID3/wRz6vJUELMpSLnG7LhsxBL+nxbr7V0w==" + }, + "Speckle.Newtonsoft.Json": { + "type": "Transitive", + "resolved": "13.0.2", + "contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA==" + }, + "SQLitePCLRaw.bundle_e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "EWI1olKDjFEBMJu0+3wuxwziIAdWDVMYLhuZ3Qs84rrz+DHwD00RzWPZCa+bLnHCf3oJwuFZIRsHT5p236QXww==", + "dependencies": { + "SQLitePCLRaw.lib.e_sqlite3": "2.1.4", + "SQLitePCLRaw.provider.dynamic_cdecl": "2.1.4" + } + }, + "SQLitePCLRaw.core": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "inBjvSHo9UDKneGNzfUfDjK08JzlcIhn1+SP5Y3m6cgXpCxXKCJDy6Mka7LpgSV+UZmKSnC8rTwB0SQ0xKu5pA==", + "dependencies": { + "System.Memory": "4.5.3" + } + }, + "SQLitePCLRaw.lib.e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "2C9Q9eX7CPLveJA0rIhf9RXAvu+7nWZu1A2MdG6SD/NOu26TakGgL1nsbc0JAspGijFOo3HoN79xrx8a368fBg==" + }, + "SQLitePCLRaw.provider.dynamic_cdecl": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "ZsaKKhgYF9B1fvcnOGKl3EycNAwd9CRWX7v0rEfuPWhQQ5Jjpvf2VEHahiLIGHio3hxi3EIKFJw9KvyowWOUAw==", + "dependencies": { + "SQLitePCLRaw.core": "2.1.4" + } + }, + "System.Buffers": { + "type": "Transitive", + "resolved": "4.4.0", + "contentHash": "AwarXzzoDwX6BgrhjoJsk6tUezZEozOT5Y9QKF94Gl4JK91I4PIIBkBco9068Y9/Dra8Dkbie99kXB8+1BaYKw==" + }, + "System.ComponentModel.Annotations": { + "type": "Transitive", + "resolved": "4.5.0", + "contentHash": "UxYQ3FGUOtzJ7LfSdnYSFd7+oEv6M8NgUatatIN2HxNtDdlcvFAf+VIq4Of9cDMJEJC0aSRv/x898RYhB4Yppg==" + }, + "System.Memory": { + "type": "Transitive", + "resolved": "4.5.3", + "contentHash": "3oDzvc/zzetpTKWMShs1AADwZjQ/36HnsufHRPcOjyRAAMLDlu2iD33MBI2opxnezcVUtXyqDXXjoFMOU9c7SA==", + "dependencies": { + "System.Buffers": "4.4.0", + "System.Numerics.Vectors": "4.4.0", + "System.Runtime.CompilerServices.Unsafe": "4.5.2" + } + }, + "System.Net.WebSockets.Client.Managed": { + "type": "Transitive", + "resolved": "1.0.22", + "contentHash": "WqEOxPlXjuZrIjUtXNE9NxEfU/n5E35iV2PtoZdJSUC4tlrqwHnTee+wvMIM4OUaJWmwrymeqcgYrE0IkGAgLA==", + "dependencies": { + "System.Buffers": "4.4.0", + "System.Numerics.Vectors": "4.4.0" + } + }, + "System.Numerics.Vectors": { + "type": "Transitive", + "resolved": "4.4.0", + "contentHash": "UiLzLW+Lw6HLed1Hcg+8jSRttrbuXv7DANVj0DkL9g6EnnzbL75EB7EWsw5uRbhxd/4YdG8li5XizGWepmG3PQ==" + }, + "System.Reactive": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ==", + "dependencies": { + "System.Threading.Tasks.Extensions": "4.5.4" + } + }, + "System.Runtime.CompilerServices.Unsafe": { + "type": "Transitive", + "resolved": "4.5.3", + "contentHash": "3TIsJhD1EiiT0w2CcDMN/iSSwnNnsrnbzeVHSKkaEgV85txMprmuO+Yq2AdSbeVGcg28pdNDTPK87tJhX7VFHw==" + }, + "System.Threading.Tasks.Extensions": { + "type": "Transitive", + "resolved": "4.5.4", + "contentHash": "zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg==", + "dependencies": { + "System.Runtime.CompilerServices.Unsafe": "4.5.3" + } + }, + "speckle.connectors.common": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", + "Speckle.Connectors.Logging": "[1.0.0, )", + "Speckle.Objects": "[3.1.0-dev.218, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" + } + }, + "speckle.connectors.dui": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", + "Speckle.Connectors.Common": "[1.0.0, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )", + "System.Threading.Tasks.Dataflow": "[6.0.0, )" + } + }, + "speckle.connectors.dui.webview": { + "type": "Project", + "dependencies": { + "Microsoft.Web.WebView2": "[1.0.1938.49, )", + "Speckle.Connectors.DUI": "[1.0.0, )" + } + }, + "speckle.connectors.logging": { + "type": "Project" + }, + "speckle.converters.common": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", + "Speckle.Objects": "[3.1.0-dev.218, )" + } + }, + "speckle.converters.navisworks2025": { + "type": "Project", + "dependencies": { + "Speckle.Connectors.DUI": "[1.0.0, )", + "Speckle.Converters.Common": "[1.0.0, )", + "Speckle.Navisworks.API": "[2025.0.0, )" + } + }, + "Microsoft.Extensions.DependencyInjection": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "MZtBIwfDFork5vfjpJdG5g8wuJFt7d/y3LOSVVtDK/76wlbtz6cjltfKHqLx2TKVqTj5/c41t77m1+h20zqtPA==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0" + } + }, + "Microsoft.Extensions.Logging": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "Nxqhadc9FCmFHzU+fz3oc8sFlE6IadViYg8dfUdGzJZ2JUxnCsRghBhhOWdM4B2zSZqEc+0BjliBh/oNdRZuig==", + "dependencies": { + "Microsoft.Extensions.Configuration.Binder": "2.2.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging.Abstractions": "2.2.0", + "Microsoft.Extensions.Options": "2.2.0" + } + }, + "Microsoft.Extensions.Logging.Abstractions": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "B2WqEox8o+4KUOpL7rZPyh6qYjik8tHi2tN8Z9jZkHzED8ElYgZa/h6K+xliB435SqUcWT290Fr2aa8BtZjn8A==" + }, + "Speckle.Sdk": { + "type": "CentralTransitive", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", + "dependencies": { + "GraphQL.Client": "6.0.0", + "Microsoft.Bcl.AsyncInterfaces": "5.0.0", + "Microsoft.CSharp": "4.7.0", + "Microsoft.Data.Sqlite": "7.0.5", + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging": "2.2.0", + "Speckle.DoubleNumerics": "4.0.1", + "Speckle.Newtonsoft.Json": "13.0.2", + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" + } + }, + "Speckle.Sdk.Dependencies": { + "type": "CentralTransitive", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" + }, + "System.Threading.Tasks.Dataflow": { + "type": "CentralTransitive", + "requested": "[6.0.0, )", + "resolved": "6.0.0", + "contentHash": "+tyDCU3/B1lDdOOAJywHQoFwyXIUghIaP2BxG79uvhfTnO+D9qIgjVlL/JV2NTliYbMHpd6eKDmHp2VHpij7MA==" + } + }, + ".NETFramework,Version=v4.8/win-x64": { + "Microsoft.Web.WebView2": { + "type": "Direct", + "requested": "[1.0.2045.28, )", + "resolved": "1.0.2045.28", + "contentHash": "QDsR/HCNjzqYZrIuNLxyfmOIqVfMq1iGyoBR3OVVlFl4NZ12T8jRC0MNpOReKfgwtO5zh8g+eBYR6RAXFltcVA==" + }, + "SQLitePCLRaw.lib.e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "2C9Q9eX7CPLveJA0rIhf9RXAvu+7nWZu1A2MdG6SD/NOu26TakGgL1nsbc0JAspGijFOo3HoN79xrx8a368fBg==" + } + } + } +} \ No newline at end of file diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Bindings/NavisworksBasicConnectorBinding.cs b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Bindings/NavisworksBasicConnectorBinding.cs new file mode 100644 index 000000000..62c0ffda0 --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Bindings/NavisworksBasicConnectorBinding.cs @@ -0,0 +1,78 @@ +using Speckle.Connector.Navisworks.HostApp; +using Speckle.Connectors.Common.Caching; +using Speckle.Connectors.DUI.Bindings; +using Speckle.Connectors.DUI.Bridge; +using Speckle.Connectors.DUI.Models; +using Speckle.Connectors.DUI.Models.Card; +using Speckle.Sdk; + +namespace Speckle.Connector.Navisworks.Bindings; + +public class NavisworksBasicConnectorBinding : IBasicConnectorBinding +{ + public string Name => "baseBinding"; + public IBrowserBridge Parent { get; } + public BasicConnectorBindingCommands Commands { get; } + + private readonly DocumentModelStore _store; + private readonly ISendConversionCache _sendConversionCache; + private readonly ISpeckleApplication _speckleApplication; + private readonly NavisworksDocumentEvents _documentEvents; + + public NavisworksBasicConnectorBinding( + IBrowserBridge parent, + DocumentModelStore store, + ISendConversionCache sendConversionCache, + ISpeckleApplication speckleApplication, + NavisworksDocumentEvents documentEvents + ) + { + Parent = parent; + _store = store; + _sendConversionCache = sendConversionCache; + _speckleApplication = speckleApplication; + _documentEvents = documentEvents; + Commands = new BasicConnectorBindingCommands(parent); + } + + public string GetSourceApplicationName() => _speckleApplication.Slug; + + public string GetSourceApplicationVersion() => _speckleApplication.HostApplicationVersion; + + public string GetConnectorVersion() => _speckleApplication.SpeckleVersion; + + public DocumentInfo? GetDocumentInfo() => + Parent + .RunOnMainThreadAsync( + () => + Task.FromResult( + NavisworksApp.ActiveDocument is null || NavisworksApp.ActiveDocument.Models.Count == 0 + ? null + : new DocumentInfo( + NavisworksApp.ActiveDocument.CurrentFileName, + NavisworksApp.ActiveDocument.Title, + NavisworksApp.ActiveDocument.GetHashCode().ToString() + ) + ) + ) + .Result; + + public DocumentModelStore GetDocumentState() => _store; + + public void AddModel(ModelCard model) => _store.AddModel(model); + + public void UpdateModel(ModelCard model) => _store.UpdateModel(model); + + public void RemoveModel(ModelCard model) => _store.RemoveModel(model); + + public Task HighlightModel(string modelCardId) => Task.CompletedTask; + + public async Task HighlightObjects(IReadOnlyList objectIds) => + await Parent + .RunOnMainThreadAsync(async () => + { + // TODO: Implement highlighting logic on main thread + await Task.CompletedTask.ConfigureAwait(false); + }) + .ConfigureAwait(false); +} diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Bindings/NavisworksSelectionBinding.cs b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Bindings/NavisworksSelectionBinding.cs new file mode 100644 index 000000000..52389c16b --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Bindings/NavisworksSelectionBinding.cs @@ -0,0 +1,71 @@ +using Speckle.Connector.Navisworks.Services; +using Speckle.Connectors.DUI.Bindings; +using Speckle.Connectors.DUI.Bridge; + +namespace Speckle.Connector.Navisworks.Bindings; + +public class NavisworksSelectionBinding : ISelectionBinding +{ + private readonly IAppIdleManager _appIdleManager; + private readonly IElementSelectionService _selectionService; + private const string SELECTION_EVENT = "setSelection"; + public string Name { get; } = "selectionBinding"; + public IBrowserBridge Parent { get; } + + public NavisworksSelectionBinding( + IAppIdleManager idleManager, + IBrowserBridge parent, + IElementSelectionService selectionService + ) + { + _selectionService = selectionService; + _appIdleManager = idleManager; + Parent = parent; + + NavisworksApp.ActiveDocument.CurrentSelection.Changed += OnSelectionChange; + } + + private void OnSelectionChange(object? o, EventArgs eventArgs) => + _appIdleManager.SubscribeToIdle( + nameof(NavisworksSelectionBinding), + async () => await UpdateSelectionAsync().ConfigureAwait(false) + ); + + private void UpdateSelection() + { + SelectionInfo selInfo = GetSelection(); + Parent.Send(SELECTION_EVENT, selInfo); + } + + private async Task UpdateSelectionAsync() + { + var selInfo = await Parent + .RunOnMainThreadAsync(() => Task.FromResult(GetSelection())) + .ConfigureAwait(false); + + await Parent.Send(SELECTION_EVENT, selInfo).ConfigureAwait(false); + } + + public SelectionInfo GetSelection() + { + // Ensure there is an active document and a valid selection + var activeDocument = NavisworksApp.ActiveDocument; + if (activeDocument == null || activeDocument.CurrentSelection.SelectedItems.IsEmpty) + { + // Return an empty list if no valid selection exists + return new SelectionInfo([], "No selection available"); + } + + // Ensure only visible elements are processed by filtering using IsElementVisible + var selectedObjectsIds = new HashSet( + activeDocument + .CurrentSelection.SelectedItems.Where(_selectionService.IsVisible) // Exclude hidden elements + .Select(_selectionService.GetModelItemPath) // Resolve to index paths + ); + + return new SelectionInfo( + [.. selectedObjectsIds], + $"{selectedObjectsIds.Count} object{(selectedObjectsIds.Count != 1 ? "s" : "")}" + ); + } +} diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Bindings/NavisworksSendBinding.cs b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Bindings/NavisworksSendBinding.cs new file mode 100644 index 000000000..8e5c15e3a --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Bindings/NavisworksSendBinding.cs @@ -0,0 +1,194 @@ +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; +using Speckle.Connector.Navisworks.Operations.Send.Settings; +using Speckle.Connector.Navisworks.Services; +using Speckle.Connectors.Common.Cancellation; +using Speckle.Connectors.Common.Operations; +using Speckle.Connectors.DUI.Bindings; +using Speckle.Connectors.DUI.Bridge; +using Speckle.Connectors.DUI.Exceptions; +using Speckle.Connectors.DUI.Logging; +using Speckle.Connectors.DUI.Models; +using Speckle.Connectors.DUI.Models.Card; +using Speckle.Connectors.DUI.Models.Card.SendFilter; +using Speckle.Connectors.DUI.Settings; +using Speckle.Converter.Navisworks.Settings; +using Speckle.Converters.Common; +using Speckle.Sdk; +using Speckle.Sdk.Common; +using Speckle.Sdk.Logging; + +namespace Speckle.Connector.Navisworks.Bindings; + +public class NavisworksSendBinding : ISendBinding +{ + public string Name => "sendBinding"; + public IBrowserBridge Parent { get; } + + public SendBindingUICommands Commands { get; } + + private readonly DocumentModelStore _store; + private readonly IServiceProvider _serviceProvider; + private readonly List _sendFilters; + private readonly CancellationManager _cancellationManager; + private readonly IOperationProgressManager _operationProgressManager; + private readonly ILogger _logger; + private readonly ISpeckleApplication _speckleApplication; + private readonly ISdkActivityFactory _activityFactory; + private readonly INavisworksConversionSettingsFactory _conversionSettingsFactory; + private readonly ToSpeckleSettingsManagerNavisworks _toSpeckleSettingsManagerNavisworks; + private readonly IElementSelectionService _selectionService; + + public NavisworksSendBinding( + DocumentModelStore store, + IBrowserBridge parent, + IEnumerable sendFilters, + IServiceProvider serviceProvider, + CancellationManager cancellationManager, + IOperationProgressManager operationProgressManager, + ILogger logger, + ISpeckleApplication speckleApplication, + ISdkActivityFactory activityFactory, + INavisworksConversionSettingsFactory conversionSettingsFactory, + ToSpeckleSettingsManagerNavisworks toSpeckleSettingsManagerNavisworks, + IElementSelectionService selectionService + ) + { + Parent = parent; + Commands = new SendBindingUICommands(parent); + _store = store; + _serviceProvider = serviceProvider; + _sendFilters = sendFilters.ToList(); + _cancellationManager = cancellationManager; + _operationProgressManager = operationProgressManager; + _logger = logger; + _speckleApplication = speckleApplication; + _activityFactory = activityFactory; + _conversionSettingsFactory = conversionSettingsFactory; + _toSpeckleSettingsManagerNavisworks = toSpeckleSettingsManagerNavisworks; + _selectionService = selectionService; + SubscribeToNavisworksEvents(); + } + + private static void SubscribeToNavisworksEvents() { } + + public List GetSendFilters() => _sendFilters; + + public List GetSendSettings() => + [ + new VisualRepresentationSetting(RepresentationMode.Active), + new OriginModeSetting(OriginMode.ModelOrigin), + new IncludeInternalPropertiesSetting(false), + new ConvertHiddenElementsSetting(false), + ]; + + public async Task Send(string modelCardId) + { + using var activity = _activityFactory.Start(); + try + { + await Parent + .RunOnMainThreadAsync(async () => + { + var modelCard = GetModelCard(modelCardId); + + using var scope = _serviceProvider.CreateScope(); + + InitializeConverterSettings(scope, modelCard); + + CancellationToken token = _cancellationManager.InitCancellationTokenSource(modelCardId); + + var navisworksModelItems = GetNavisworksModelItems(modelCard); + + var sendResult = await ExecuteSendOperation(scope, modelCard, navisworksModelItems, token) + .ConfigureAwait(false); + + await Commands + .SetModelSendResult(modelCardId, sendResult.RootObjId, sendResult.ConversionResults) + .ConfigureAwait(false); + }) + .ConfigureAwait(false); + } + catch (OperationCanceledException) + { + // SWALLOW -> UI handles it immediately, so we do not need to handle anything for now! + // Idea for later -> when cancel called, create promise from UI to solve it later with this catch block. + // So have 3 state on UI -> Cancellation clicked -> Cancelling -> Cancelled + } + catch (Exception ex) when (!ex.IsFatal()) // UX reasons - we will report operation exceptions as model card error. We may change this later when we have more exception documentation + { + _logger.LogModelCardHandledError(ex); + await Commands.SetModelError(modelCardId, ex).ConfigureAwait(false); + } + } + + private SenderModelCard GetModelCard(string modelCardId) => + _store.GetModelById(modelCardId) is not SenderModelCard modelCard + ? throw new InvalidOperationException("No publish model card was found.") + : modelCard; + + private void InitializeConverterSettings(IServiceScope scope, SenderModelCard modelCard) => + scope + .ServiceProvider.GetRequiredService>() + .Initialize( + _conversionSettingsFactory.Create( + originMode: _toSpeckleSettingsManagerNavisworks.GetOriginMode(modelCard), + visualRepresentationMode: _toSpeckleSettingsManagerNavisworks.GetVisualRepresentationMode(modelCard), + convertHiddenElements: _toSpeckleSettingsManagerNavisworks.GetConvertHiddenElements(modelCard), + includeInternalProperties: _toSpeckleSettingsManagerNavisworks.GetIncludeInternalProperties(modelCard) + ) + ); + + private List GetNavisworksModelItems(SenderModelCard modelCard) + { + var selectedPaths = modelCard.SendFilter.NotNull().RefreshObjectIds(); + if (selectedPaths.Count == 0) + { + throw new SpeckleSendFilterException("No objects were found to convert. Please update your publish filter!"); + } + + var modelItems = modelCard + .SendFilter.NotNull() + .RefreshObjectIds() + .Select(_selectionService.GetModelItemFromPath) + .SelectMany(_selectionService.GetGeometryNodes) + .Where(_selectionService.IsVisible) + .ToList(); + + return modelItems.Count == 0 + ? throw new SpeckleSendFilterException("No objects were found to convert. Please update your publish filter!") + : modelItems; + } + + private async Task ExecuteSendOperation( + IServiceScope scope, + SenderModelCard modelCard, + List navisworksModelItems, + CancellationToken token + ) => + await scope + .ServiceProvider.GetRequiredService>() + .Execute( + navisworksModelItems, + modelCard.GetSendInfo(_speckleApplication.Slug), + _operationProgressManager.CreateOperationProgressEventHandler(Parent, modelCard.ModelCardId!, token), + token + ) + .ConfigureAwait(false); + + public void CancelSend(string modelCardId) => _cancellationManager.CancelOperation(modelCardId); + + /// + /// Cancels all outstanding send operations for the current document. + /// This method is called when the active document changes, to ensure + /// that any in-progress send operations are properly canceled before + /// the new document is loaded. + /// + public void CancelAllSendOperations() + { + foreach (var modelCardId in _store.GetSenders().Select(m => m.ModelCardId)) + { + CancelSend(modelCardId ?? string.Empty); + } + } +} diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/DependencyInjection/NavisworksConnectorServiceRegistration.cs b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/DependencyInjection/NavisworksConnectorServiceRegistration.cs new file mode 100644 index 000000000..a1d398292 --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/DependencyInjection/NavisworksConnectorServiceRegistration.cs @@ -0,0 +1,72 @@ +using Microsoft.Extensions.DependencyInjection; +using Speckle.Connector.Navisworks.Bindings; +using Speckle.Connector.Navisworks.HostApp; +using Speckle.Connector.Navisworks.Operations.Send; +using Speckle.Connector.Navisworks.Operations.Send.Filters; +using Speckle.Connector.Navisworks.Operations.Send.Settings; +using Speckle.Connector.Navisworks.Services; +using Speckle.Connectors.Common; +using Speckle.Connectors.Common.Builders; +using Speckle.Connectors.Common.Cancellation; +using Speckle.Connectors.Common.Operations; +using Speckle.Connectors.DUI; +using Speckle.Connectors.DUI.Bindings; +using Speckle.Connectors.DUI.Bridge; +using Speckle.Connectors.DUI.Models; +using Speckle.Connectors.DUI.Models.Card.SendFilter; +using Speckle.Connectors.DUI.WebView; +using Speckle.Converter.Navisworks.Settings; +using Speckle.Converters.Common; +using Speckle.Sdk.Models.GraphTraversal; + +namespace Speckle.Connector.Navisworks.DependencyInjection; + +public static class NavisworksConnectorServiceRegistration +{ + public static void AddNavisworks(this IServiceCollection serviceCollection) + { + // Register Core functionality + serviceCollection.AddConnectorUtils(); + serviceCollection.AddDUI(); + serviceCollection.AddDUIView(); + + // Register bindings + serviceCollection.AddSingleton(); + serviceCollection.AddSingleton(); + serviceCollection.AddSingleton(); + serviceCollection.AddSingleton(); + serviceCollection.AddSingleton(); + + // Register Navisworks specific binding + serviceCollection.AddSingleton(sp => sp.GetRequiredService()); + serviceCollection.AddSingleton(); + serviceCollection.AddSingleton(); + + // Conversion settings + serviceCollection.AddSingleton(); + serviceCollection.AddScoped< + IConverterSettingsStore, + ConverterSettingsStore + >(); + + serviceCollection.AddScoped(); + + // Sending operations + serviceCollection.AddScoped, NavisworksRootObjectBuilder>(); + serviceCollection.AddScoped>(); + serviceCollection.AddSingleton(DefaultTraversal.CreateTraversalFunc()); + serviceCollection.AddSingleton(); + + // Register Intercom/interop + serviceCollection.RegisterTopLevelExceptionHandler(); + serviceCollection.AddTransient(); + serviceCollection.AddSingleton(); + serviceCollection.AddSingleton(); + serviceCollection.AddSingleton(sp => sp.GetRequiredService()); + serviceCollection.AddSingleton(); + + // register filters + serviceCollection.AddScoped(); + serviceCollection.AddScoped(); + } +} diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Extensions/ElementSelectionService.cs b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Extensions/ElementSelectionService.cs new file mode 100644 index 000000000..4399b947a --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Extensions/ElementSelectionService.cs @@ -0,0 +1,23 @@ +using static Speckle.Converter.Navisworks.Helpers.ElementSelectionHelper; + +namespace Speckle.Connector.Navisworks.Services; + +public interface IElementSelectionService +{ + string GetModelItemPath(NAV.ModelItem modelItem); + NAV.ModelItem GetModelItemFromPath(string path); + bool IsVisible(NAV.ModelItem modelItem); + IReadOnlyCollection GetGeometryNodes(NAV.ModelItem modelItem); +} + +public class ElementSelectionService : IElementSelectionService +{ + public string GetModelItemPath(NAV.ModelItem modelItem) => ResolveModelItemToIndexPath(modelItem); + + public NAV.ModelItem GetModelItemFromPath(string path) => ResolveIndexPathToModelItem(path); + + public bool IsVisible(NAV.ModelItem modelItem) => IsElementVisible(modelItem); + + public IReadOnlyCollection GetGeometryNodes(NAV.ModelItem modelItem) => + ResolveGeometryLeafNodes(modelItem); +} diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/GlobalUsing.cs b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/GlobalUsing.cs new file mode 100644 index 000000000..8b9816d3e --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/GlobalUsing.cs @@ -0,0 +1,2 @@ +global using NAV = Autodesk.Navisworks.Api; +global using NavisworksApp = Autodesk.Navisworks.Api.Application; diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/HostApp/NavisworksDocumentEvents.cs b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/HostApp/NavisworksDocumentEvents.cs new file mode 100644 index 000000000..26fed81ee --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/HostApp/NavisworksDocumentEvents.cs @@ -0,0 +1,224 @@ +using Microsoft.Extensions.DependencyInjection; +using Speckle.Connector.Navisworks.Bindings; +using Speckle.Connectors.DUI.Bindings; +using Speckle.Connectors.DUI.Bridge; + +namespace Speckle.Connector.Navisworks.HostApp; + +/// +/// Manages document and model state change notifications for the Navisworks connector. +/// Coalesces various document events into batched updates to be processed during idle time. +/// +public sealed class NavisworksDocumentEvents : IDisposable +{ + private readonly IServiceProvider _serviceProvider; + private readonly ITopLevelExceptionHandler _topLevelExceptionHandler; + private readonly IAppIdleManager _idleManager; + private readonly IBrowserBridge _parent; + private readonly object _subscriptionLock = new(); + + private bool _isSubscribed; + private bool _isProcessing; + private bool _disposed; + + private int _priorModelCount; + private int _finalModelCount; + + /// + /// Initializes a new instance of the class and subscribes to document events. + /// + /// The service provider for dependency injection. + /// Handles exceptions during event processing. + /// Manages idle processing. + public NavisworksDocumentEvents( + IServiceProvider serviceProvider, + ITopLevelExceptionHandler topLevelExceptionHandler, + IAppIdleManager idleManager, + IBrowserBridge parent + ) + { + _serviceProvider = serviceProvider; + _topLevelExceptionHandler = topLevelExceptionHandler; + _idleManager = idleManager; + + _parent = parent; + + SubscribeToDocumentModelEvents(); + } + + /// + /// Subscribes to document-level events to monitor model state changes. + /// + private void SubscribeToDocumentModelEvents() + { + lock (_subscriptionLock) + { + if (_isSubscribed) + { + return; + } + + var activeDocument = NavisworksApp.ActiveDocument; + if (activeDocument != null) + { + activeDocument.Models.CollectionChanging += HandleDocumentModelCountChanging; + activeDocument.Models.CollectionChanged += HandleDocumentModelCountChanged; + } + + _isSubscribed = true; + } + } + + /// + /// Tracks the current model count before changes occur. + /// + private void HandleDocumentModelCountChanging(object sender, EventArgs e) => + _priorModelCount = ((NAV.Document)sender).Models.Count; + + /// + /// Schedules processing of model count changes during idle time. + /// + private void HandleDocumentModelCountChanged(object sender, EventArgs e) + { + _finalModelCount = ((NAV.Document)sender).Models.Count; + + _topLevelExceptionHandler.CatchUnhandled( + () => + _idleManager.SubscribeToIdle( + nameof(NavisworksDocumentEvents), + async () => await ProcessModelStateChangeAsync().ConfigureAwait(false) + ) + ); + } + + private async Task ProcessModelStateChangeAsync() + { + if (_isProcessing) + { + return; + } + + _isProcessing = true; + + try + { + await _parent + .RunOnMainThreadAsync(async () => + { + var store = _serviceProvider.GetRequiredService(); + var basicBinding = _serviceProvider.GetRequiredService(); + var commands = (basicBinding as NavisworksBasicConnectorBinding)?.Commands; + + switch (_finalModelCount) + { + case 0 when _priorModelCount > 0: + store.ClearAndSave(); + break; + case > 0 when _priorModelCount == 0: + store.ReloadState(); + break; + } + + if (commands != null) + { + await commands.NotifyDocumentChanged().ConfigureAwait(false); + } + }) + .ConfigureAwait(false); + } + finally + { + _isProcessing = false; + } + } + + /// + /// Processes model state changes by updating the store and notifying commands. + /// + private async Task NotifyValidModelStateChange() + { + if (_isProcessing) + { + return; + } + + _isProcessing = true; + + try + { + var store = _serviceProvider.GetRequiredService(); + var basicBinding = _serviceProvider.GetRequiredService(); + var commands = (basicBinding as NavisworksBasicConnectorBinding)?.Commands; + + switch (_finalModelCount) + { + case 0 when _priorModelCount > 0: + // Clear the store when models are removed + store.ClearAndSave(); + break; + case > 0 when _priorModelCount == 0: + // Load state when models are added + store.ReloadState(); + break; + } + + if (commands != null) + { + await commands.NotifyDocumentChanged().ConfigureAwait(false); + } + } + finally + { + _isProcessing = false; + } + } + + private void UnsubscribeFromDocumentModelEvents() + { + var activeDocument = NavisworksApp.ActiveDocument; + if (activeDocument != null) + { + UnsubscribeFromModelEvents(activeDocument); + } + + _isSubscribed = false; + } + + private void UnsubscribeFromModelEvents(NAV.Document document) + { + document.Models.CollectionChanged -= HandleDocumentModelCountChanged; + document.Models.CollectionChanging -= HandleDocumentModelCountChanging; + + var sendBinding = _serviceProvider.GetRequiredService(); + sendBinding.CancelAllSendOperations(); + } + + /// + /// Disposes of resources and unsubscribes from events. + /// + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + private void Dispose(bool disposing) + { + if (_disposed) + { + return; + } + + if (disposing) + { + UnsubscribeFromDocumentModelEvents(); + } + + _disposed = true; + } + + ~NavisworksDocumentEvents() + { + Dispose(false); + } +} diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/HostApp/NavisworksDocumentModelStore.cs b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/HostApp/NavisworksDocumentModelStore.cs new file mode 100644 index 000000000..e00529721 --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/HostApp/NavisworksDocumentModelStore.cs @@ -0,0 +1,170 @@ +using System.Data; +using Speckle.Connectors.DUI.Bridge; +using Speckle.Connectors.DUI.Models; +using Speckle.Connectors.DUI.Utils; + +namespace Speckle.Connector.Navisworks.HostApp; + +/// +/// Manages persistence of Speckle model states within Navisworks' embedded SQLite database. +/// Provides mechanisms for reliable read/write operations with retry handling and validation. +/// +public sealed class NavisworksDocumentModelStore : DocumentModelStore +{ + private const string TABLE_NAME = "speckle"; + private const string KEY_NAME = "Speckle_DUI3"; + + private readonly ITopLevelExceptionHandler _topLevelExceptionHandler; + + public NavisworksDocumentModelStore( + IJsonSerializer jsonSerializer, + ITopLevelExceptionHandler topLevelExceptionHandler + ) + : base(jsonSerializer) + { + _topLevelExceptionHandler = topLevelExceptionHandler; + LoadState(); + } + + protected override void HostAppSaveState(string modelCardState) + { + if (!IsActiveDocumentValid()) + { + return; + } + + try + { + SaveStateToDatabase(modelCardState); + } + catch (NAV.Data.DatabaseException ex) + { + _topLevelExceptionHandler.CatchUnhandled( + () => throw new InvalidOperationException("Failed to write Speckle state to database", ex) + ); + } + } + + /// + /// Public method to reload the state from storage. + /// + public void ReloadState() => LoadState(); + + protected override void LoadState() + { + if (!IsActiveDocumentValid()) + { + ClearAndSave(); + return; + } + + try + { + string serializedState = RetrieveStateFromDatabase(); + LoadFromString(serializedState); + } + catch (NAV.Data.DatabaseException ex) + { + ClearAndSave(); // Clear models on failure to avoid stale data + _topLevelExceptionHandler.CatchUnhandled( + () => throw new InvalidOperationException("Failed to read Speckle state from database", ex) + ); + } + } + + private static bool IsActiveDocumentValid() + { + try + { + var activeDoc = NavisworksApp.ActiveDocument; + return activeDoc?.Database != null && activeDoc.Models.Count > 0 && activeDoc.ActiveSheet != null; + } + catch (ArgumentException) + { + return false; // Handle invalid document access + } + catch (ObjectDisposedException) + { + return false; // Handle disposed document state + } + } + + private static void SaveStateToDatabase(string modelCardState) + { + var activeDoc = NavisworksApp.ActiveDocument; + if (activeDoc?.Database == null) + { + return; + } + + var database = activeDoc.Database; + + using (var transaction = database.BeginTransaction(NAV.Data.DatabaseChangedAction.Reset)) + { + EnsureDatabaseTableExists(transaction); + } + + using (var transaction = database.BeginTransaction(NAV.Data.DatabaseChangedAction.Edited)) + { + try + { + ReplaceStateInDatabase(transaction, modelCardState); + transaction.Commit(); + } + catch + { + transaction.Rollback(); // Roll back transaction on failure + throw; + } + } + } + + private static void EnsureDatabaseTableExists(NAV.Data.NavisworksTransaction transaction) + { + var command = transaction.Connection.CreateCommand(); + command.CommandText = $"CREATE TABLE IF NOT EXISTS {TABLE_NAME}(key TEXT PRIMARY KEY, value TEXT)"; + command.ExecuteNonQuery(); + transaction.Commit(); // Ensure table exists before proceeding + } + + private static void ReplaceStateInDatabase(NAV.Data.NavisworksTransaction transaction, string serializedState) + { + var command = transaction.Connection.CreateCommand(); + + command.CommandText = $"DELETE FROM {TABLE_NAME} WHERE key = @key"; + command.Parameters.AddWithValue("@key", KEY_NAME); + command.ExecuteNonQuery(); + + command.CommandText = $"INSERT INTO {TABLE_NAME}(key, value) VALUES(@key, @value)"; + command.Parameters.AddWithValue("@key", KEY_NAME); + command.Parameters.AddWithValue("@value", serializedState); + command.ExecuteNonQuery(); + } + + private static string RetrieveStateFromDatabase() + { + var database = NavisworksApp.ActiveDocument!.Database; + using var table = new DataTable(); + + using (var transaction = database.BeginTransaction(NAV.Data.DatabaseChangedAction.Reset)) + { + EnsureDatabaseTableExists(transaction); + } + + using var dataAdapter = new NAV.Data.NavisworksDataAdapter( + $"SELECT value FROM {TABLE_NAME} WHERE key = @key", + database.Value + ); + dataAdapter.SelectCommand.Parameters.AddWithValue("@key", KEY_NAME); + dataAdapter.Fill(table); + + if (table.Rows.Count <= 0) + { + return string.Empty; // Return an empty collection if no state is found + } + + string stateString = table.Rows[0]["value"] as string ?? string.Empty; + + return stateString; + } +} diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/HostApp/NavisworksIdleManager.cs b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/HostApp/NavisworksIdleManager.cs new file mode 100644 index 000000000..2a9087774 --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/HostApp/NavisworksIdleManager.cs @@ -0,0 +1,30 @@ +using Speckle.Connectors.DUI.Bridge; + +namespace Speckle.Connector.Navisworks.HostApp; + +/// +/// Manages the scheduling of deferred operations during Navisworks idle periods. +/// Ensures UI updates and operations are batched efficiently to prevent UI freezing. +/// +public sealed class NavisworksIdleManager : AppIdleManager +{ + private readonly IIdleCallManager _idleCallManager; + + /// + /// Initializes a new instance of the NavisworksIdleManager. + /// + /// The manager responsible for queuing and executing deferred operations. + public NavisworksIdleManager(IIdleCallManager idleCallManager) + : base(idleCallManager) + { + _idleCallManager = idleCallManager; + } + + /// + /// Subscribes to Navisworks idle events when operations are queued. + /// + protected override void AddEvent() => NavisworksApp.Idle += NavisworksAppOnIdle; + + private void NavisworksAppOnIdle(object? sender, EventArgs e) => + _idleCallManager.AppOnIdle(() => NavisworksApp.Idle -= NavisworksAppOnIdle); +} diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/HostApp/NavisworksMaterialUnpacker.cs b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/HostApp/NavisworksMaterialUnpacker.cs new file mode 100644 index 000000000..030f00b5d --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/HostApp/NavisworksMaterialUnpacker.cs @@ -0,0 +1,164 @@ +using Microsoft.Extensions.Logging; +using Speckle.Connector.Navisworks.Services; +using Speckle.Converter.Navisworks.Settings; +using Speckle.Converters.Common; +using Speckle.Objects.Other; +using Speckle.Sdk; + +namespace Speckle.Connector.Navisworks.HostApp; + +public class NavisworksMaterialUnpacker( + ILogger logger, + IConverterSettingsStore converterSettings, + IElementSelectionService selectionService +) +{ + // Helper function to select a property based on the representation mode + // Selector method for individual properties + private static T Select(RepresentationMode mode, T active, T permanent, T original, T defaultValue) => + mode switch + { + RepresentationMode.Active => active, + RepresentationMode.Permanent => permanent, + RepresentationMode.Original => original, + _ => defaultValue, + }; + + internal List UnpackRenderMaterial(IReadOnlyList navisworksObjects) + { + if (navisworksObjects == null) + { + throw new ArgumentNullException(nameof(navisworksObjects)); + } + + Dictionary renderMaterialProxies = []; + + foreach (NAV.ModelItem navisworksObject in navisworksObjects) + { + try + { + if (!navisworksObject.HasGeometry) + { + continue; + } + + var navisworksObjectId = selectionService.GetModelItemPath(navisworksObject); + + var geometry = navisworksObject.Geometry; + + // Extract the current visual representation mode + var mode = converterSettings.Current.User.VisualRepresentationMode; + + using var defaultColor = new NAV.Color(1.0, 1.0, 1.0); + + // Assign properties using the selector + var renderColor = Select( + mode, + geometry.ActiveColor, + geometry.PermanentColor, + geometry.OriginalColor, + defaultColor + ); + + var renderTransparency = Select( + mode, + geometry.ActiveTransparency, + geometry.PermanentTransparency, + geometry.OriginalTransparency, + 0.0 + ); + + var renderMaterialId = Select( + mode, + geometry.ActiveColor.GetHashCode(), + geometry.PermanentColor.GetHashCode(), + geometry.OriginalColor.GetHashCode(), + 0 + ); + + var materialName = $"NavisworksMaterial_{Math.Abs(NavisworksColorToColor(renderColor).ToArgb())}"; + + // Alternatively the material could be stored on the Item property + var itemCategory = navisworksObject.PropertyCategories.FindCategoryByDisplayName("Item"); + if (itemCategory != null) + { + var itemProperties = itemCategory.Properties; + var itemMaterial = itemProperties.FindPropertyByDisplayName("Material"); + if (itemMaterial != null && !string.IsNullOrEmpty(itemMaterial.DisplayName)) + { + materialName = itemMaterial.Value.ToDisplayString(); + } + } + + // Or in a Material property + var materialPropertyCategory = navisworksObject.PropertyCategories.FindCategoryByDisplayName("Material"); + if (materialPropertyCategory != null) + { + var material = materialPropertyCategory.Properties; + var name = material.FindPropertyByDisplayName("Name"); + if (name != null && !string.IsNullOrEmpty(name.DisplayName)) + { + materialName = name.Value.ToDisplayString(); + } + } + + if (renderMaterialProxies.TryGetValue(renderMaterialId.ToString(), out RenderMaterialProxy? value)) + { + value.objects.Add(navisworksObjectId); + } + else + { + renderMaterialProxies[renderMaterialId.ToString()] = new RenderMaterialProxy() + { + // For now, we will just use the color and transparency to create a new material + // There is more information that is in the Material object that could be used to create a more accurate material + // But is constant regardless of the user settings + value = ConvertRenderColorAndTransparencyToSpeckle( + materialName, + renderTransparency, + renderColor, + renderMaterialId + ), + objects = [navisworksObjectId] + }; + } + } + catch (Exception ex) when (!ex.IsFatal()) + { + logger.LogError(ex, "Failed to unpack render material from Navisworks object"); + } + } + + return renderMaterialProxies.Values.ToList(); + } + + private static RenderMaterial ConvertRenderColorAndTransparencyToSpeckle( + string name, + double transparency, + NAV.Color navisworksColor, + int applicationId + ) + { + var color = NavisworksColorToColor(navisworksColor); + + var speckleRenderMaterial = new RenderMaterial() + { + name = !string.IsNullOrEmpty(name) ? name : $"NavisworksMaterial_{Math.Abs(color.ToArgb())}", + opacity = 1 - transparency, + metalness = 0, + roughness = 1, + diffuse = color.ToArgb(), + emissive = 0, + applicationId = applicationId.ToString() + }; + + return speckleRenderMaterial; + } + + private static System.Drawing.Color NavisworksColorToColor(NAV.Color color) => + System.Drawing.Color.FromArgb( + Convert.ToInt32(color.R * 255), + Convert.ToInt32(color.G * 255), + Convert.ToInt32(color.B * 255) + ); +} diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/Filters/NavisworksSelectionFilter.cs b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/Filters/NavisworksSelectionFilter.cs new file mode 100644 index 000000000..dab2b224d --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/Filters/NavisworksSelectionFilter.cs @@ -0,0 +1,13 @@ +using Speckle.Connectors.DUI.Models.Card.SendFilter; + +namespace Speckle.Connector.Navisworks.Operations.Send.Filters; + +public class NavisworksSelectionFilter : DirectSelectionSendFilter +{ + public NavisworksSelectionFilter() + { + IsDefault = true; + } + + public override List RefreshObjectIds() => SelectedObjectIds; +} diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/GeometryNodeMerger.cs b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/GeometryNodeMerger.cs new file mode 100644 index 000000000..828234ca1 --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/GeometryNodeMerger.cs @@ -0,0 +1,22 @@ +using Speckle.Connector.Navisworks.Services; + +namespace Speckle.Connector.Navisworks.Operations.Send; + +/// +/// Groups geometry nodes by their parent paths for merging displayValues +/// +public static class GeometryNodeMerger +{ + public static Dictionary> GroupSiblingGeometryNodes(IReadOnlyList nodes) => + nodes + .Where(node => node.HasGeometry && string.IsNullOrEmpty(node.DisplayName)) // Only anonymous geometry nodes + .GroupBy(node => + { + var service = new ElementSelectionService(); + var path = service.GetModelItemPath(node); + var lastSeparatorIndex = path.LastIndexOf(PathConstants.SEPARATOR); + return lastSeparatorIndex == -1 ? path : path[..lastSeparatorIndex]; + }) + .Where(group => group.Count() > 1) // Only group multiples + .ToDictionary(group => group.Key, group => group.ToList()); +} diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/NavisworksRootObjectBuilder.cs b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/NavisworksRootObjectBuilder.cs new file mode 100644 index 000000000..f58d59377 --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/NavisworksRootObjectBuilder.cs @@ -0,0 +1,182 @@ +using Microsoft.Extensions.Logging; +using Speckle.Connector.Navisworks.HostApp; +using Speckle.Connector.Navisworks.Services; +using Speckle.Connectors.Common.Builders; +using Speckle.Connectors.Common.Caching; +using Speckle.Connectors.Common.Conversion; +using Speckle.Connectors.Common.Operations; +using Speckle.Converter.Navisworks.Settings; +using Speckle.Converters.Common; +using Speckle.Objects.Data; +using Speckle.Sdk; +using Speckle.Sdk.Logging; +using Speckle.Sdk.Models; +using Speckle.Sdk.Models.Collections; +using static Speckle.Connector.Navisworks.Operations.Send.GeometryNodeMerger; + +namespace Speckle.Connector.Navisworks.Operations.Send; + +public class NavisworksRootObjectBuilder( + IRootToSpeckleConverter rootToSpeckleConverter, + ISendConversionCache sendConversionCache, + IConverterSettingsStore converterSettings, + ILogger logger, + ISdkActivityFactory activityFactory, + NavisworksMaterialUnpacker materialUnpacker, + IElementSelectionService elementSelectionService +) : IRootObjectBuilder +{ + internal NavisworksConversionSettings GetCurrentSettings() => converterSettings.Current; + + public Task Build( + IReadOnlyList navisworksModelItems, + SendInfo sendInfo, + IProgress onOperationProgressed, + CancellationToken cancellationToken = default + ) + { + using var activity = activityFactory.Start("Build"); + + // 1. Validate input + if (!navisworksModelItems.Any()) + { + throw new SpeckleException("No objects to convert"); + } + + // 2. Initialize root collection + var rootObjectCollection = new Collection + { + name = NavisworksApp.ActiveDocument.Title ?? "Unnamed model", + ["units"] = converterSettings.Current.Derived.SpeckleUnits + }; + + // 3. Convert all model items and store results + if (navisworksModelItems == null) + { + throw new ArgumentNullException(nameof(navisworksModelItems)); + } + + List results = new(navisworksModelItems.Count); + var convertedBases = new Dictionary(); + int processedCount = 0; + int totalCount = navisworksModelItems.Count; + + if (onOperationProgressed == null || sendInfo == null) + { + throw new ArgumentNullException(nameof(onOperationProgressed)); + } + + foreach (var item in navisworksModelItems) + { + cancellationToken.ThrowIfCancellationRequested(); + var converted = ConvertNavisworksItem(item, convertedBases, sendInfo); + results.Add(converted); + processedCount++; + onOperationProgressed.Report(new CardProgress("Converting", (double)processedCount / totalCount)); + } + + if (results.All(x => x.Status == Status.ERROR)) + { + throw new SpeckleException("Failed to convert all objects."); // fail fast instead creating empty commit! It will appear as model card error with red color. + } + + // 4. Initialize final elements list and group nodes + var finalElements = new List(); + var groupedNodes = GroupSiblingGeometryNodes(navisworksModelItems); + var processedPaths = new HashSet(); + + // 5. Process and merge grouped nodes + foreach (var group in groupedNodes) + { + var siblingBases = new List(); + foreach (var itemPath in group.Value.Select(elementSelectionService.GetModelItemPath)) + { + processedPaths.Add(itemPath); + + if (convertedBases.TryGetValue(itemPath, out var convertedBase) && convertedBase != null) + { + siblingBases.Add(convertedBase); + } + } + + if (siblingBases.Count == 0) + { + continue; + } + + var navisworksObject = new NavisworksObject + { + name = elementSelectionService.GetModelItemFromPath(group.Key).DisplayName ?? string.Empty, + displayValue = siblingBases.SelectMany(b => b["displayValue"] as List ?? []).ToList(), + properties = siblingBases.First()["properties"] as Dictionary ?? [], + units = converterSettings.Current.Derived.SpeckleUnits, + applicationId = group.Key + }; + + finalElements.Add(navisworksObject); + } + + // 6. Add remaining non-grouped nodes + foreach (var result in results.Where(result => !processedPaths.Contains(result.SourceId))) + { + if (!convertedBases.TryGetValue(result.SourceId, out var convertedBase) || convertedBase == null) + { + continue; + } + // TODO: check if converted base is a collection when full tree sending is implemented + + if (convertedBase is Collection convertedCollection) + { + finalElements.Add(convertedCollection); + } + else + { + var navisworksObject = new NavisworksObject + { + name = convertedBase["name"] as string ?? string.Empty, + displayValue = convertedBase["displayValue"] as List ?? [], + properties = convertedBase["properties"] as Dictionary ?? [], + units = converterSettings.Current.Derived.SpeckleUnits, + applicationId = convertedBase.applicationId + }; + finalElements.Add(navisworksObject); + } + } + + using (var _ = activityFactory.Start("UnpackRenderMaterials")) + { + // 7. - Unpack the render material proxies + rootObjectCollection[ProxyKeys.RENDER_MATERIAL] = materialUnpacker.UnpackRenderMaterial(navisworksModelItems); + } + + // 8. Finalize and return + rootObjectCollection.elements = finalElements; + return Task.FromResult(new RootObjectBuilderResult(rootObjectCollection, results)); + } + + private SendConversionResult ConvertNavisworksItem( + NAV.ModelItem navisworksItem, + Dictionary convertedBases, + SendInfo sendInfo + ) + { + string applicationId = elementSelectionService.GetModelItemPath(navisworksItem); + string sourceType = navisworksItem.GetType().Name; + + try + { + Base converted = sendConversionCache.TryGetValue(applicationId, sendInfo.ProjectId, out ObjectReference? cached) + ? cached + : rootToSpeckleConverter.Convert(navisworksItem); + + convertedBases[applicationId] = converted; + + return new SendConversionResult(Status.SUCCESS, applicationId, sourceType, converted); + } + catch (Exception ex) when (!ex.IsFatal()) + { + logger.LogError(ex, "Failed to convert model item {id}", applicationId); + return new SendConversionResult(Status.ERROR, applicationId, "ModelItem", null, ex); + } + } +} diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/Settings/ConvertHiddenEleementsSetting.cs b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/Settings/ConvertHiddenEleementsSetting.cs new file mode 100644 index 000000000..fe2966800 --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/Settings/ConvertHiddenEleementsSetting.cs @@ -0,0 +1,12 @@ +using Speckle.Connectors.DUI.Settings; + +namespace Speckle.Connector.Navisworks.Operations.Send.Settings; + +public class ConvertHiddenElementsSetting(bool value) : ICardSetting +{ + public string? Id { get; set; } = "convertHiddenElements"; + public string? Title { get; set; } = "Convert Hidden Elements"; + public string? Type { get; set; } = "boolean"; + public List? Enum { get; set; } + public object? Value { get; set; } = value; +} diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/Settings/IncludeInternalPropertiesSetting.cs b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/Settings/IncludeInternalPropertiesSetting.cs new file mode 100644 index 000000000..594cf59bc --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/Settings/IncludeInternalPropertiesSetting.cs @@ -0,0 +1,12 @@ +using Speckle.Connectors.DUI.Settings; + +namespace Speckle.Connector.Navisworks.Operations.Send.Settings; + +public class IncludeInternalPropertiesSetting(bool value) : ICardSetting +{ + public string? Id { get; set; } = "includeInternalProperties"; + public string? Title { get; set; } = "Include Internal Properties"; + public string? Type { get; set; } = "boolean"; + public List? Enum { get; set; } + public object? Value { get; set; } = value; +} diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/Settings/OriginModeSetting.cs b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/Settings/OriginModeSetting.cs new file mode 100644 index 000000000..cbc398d64 --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/Settings/OriginModeSetting.cs @@ -0,0 +1,18 @@ +using Speckle.Connectors.DUI.Settings; +using Speckle.Converter.Navisworks.Settings; + +namespace Speckle.Connector.Navisworks.Operations.Send.Settings; + +public class OriginModeSetting(OriginMode value) : ICardSetting +{ + public string? Id { get; set; } = "originMode"; + public string? Title { get; set; } = "Origin Mode"; + public string? Type { get; set; } = "string"; + public List? Enum { get; set; } = System.Enum.GetNames(typeof(OriginMode)).ToList(); + public object? Value { get; set; } = value.ToString(); + + public static readonly Dictionary OriginModeMap = System + .Enum.GetValues(typeof(OriginMode)) + .Cast() + .ToDictionary(v => v.ToString(), v => v); +} diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/Settings/ToSpeckleSettingsManagerNavisworks.cs b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/Settings/ToSpeckleSettingsManagerNavisworks.cs new file mode 100644 index 000000000..d90be1218 --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/Settings/ToSpeckleSettingsManagerNavisworks.cs @@ -0,0 +1,127 @@ +using System.Diagnostics.CodeAnalysis; +using Speckle.Connectors.Common.Caching; +using Speckle.Connectors.DUI.Models.Card; +using Speckle.Converter.Navisworks.Settings; +using Speckle.InterfaceGenerator; +using Speckle.Sdk.Common; + +namespace Speckle.Connector.Navisworks.Operations.Send.Settings; + +[GenerateAutoInterface] +public class ToSpeckleSettingsManagerNavisworks : IToSpeckleSettingsManagerNavisworks +{ + private readonly ISendConversionCache _sendConversionCache; + + // cache invalidation process run with ModelCardId since the settings are model specific + private readonly Dictionary _visualRepresentationCache = []; + private readonly Dictionary _originModeCache = []; + private readonly Dictionary _convertHiddenElementsCache = []; + private readonly Dictionary _includeInternalPropertiesCache = []; + + public ToSpeckleSettingsManagerNavisworks(ISendConversionCache sendConversionCache) + { + _sendConversionCache = sendConversionCache; + } + + public RepresentationMode GetVisualRepresentationMode(SenderModelCard modelCard) + { + if (modelCard == null) + { + throw new ArgumentNullException(nameof(modelCard)); + } + + var representationString = modelCard.Settings?.First(s => s.Id == "visualRepresentation").Value as string; + + if ( + representationString is not null + && VisualRepresentationSetting.VisualRepresentationMap.TryGetValue( + representationString, + out RepresentationMode representation + ) + ) + { + if (_visualRepresentationCache.TryGetValue(modelCard.ModelCardId.NotNull(), out RepresentationMode previousType)) + { + if (previousType != representation) + { + EvictCacheForModelCard(modelCard); + } + } + + _visualRepresentationCache[modelCard.ModelCardId.NotNull()] = representation; + return representation; + } + + throw new ArgumentException($"Invalid visual representation value: {representationString}"); + } + + public OriginMode GetOriginMode(SenderModelCard modelCard) + { + if (modelCard == null) + { + throw new ArgumentNullException(nameof(modelCard)); + } + + var originString = modelCard.Settings?.First(s => s.Id == "originMode").Value as string; + + if (originString is not null && OriginModeSetting.OriginModeMap.TryGetValue(originString, out OriginMode origin)) + { + if (_originModeCache.TryGetValue(modelCard.ModelCardId.NotNull(), out OriginMode previousType)) + { + if (previousType != origin) + { + EvictCacheForModelCard(modelCard); + } + } + _originModeCache[modelCard.ModelCardId.NotNull()] = origin; + return origin; + } + + throw new ArgumentException($"Invalid origin mode value: {originString}"); + } + + public bool GetConvertHiddenElements(SenderModelCard modelCard) + { + if (modelCard == null) + { + throw new ArgumentNullException(nameof(modelCard)); + } + + var value = modelCard.Settings?.FirstOrDefault(s => s.Id == "convertHiddenElements")?.Value as bool?; + + var returnValue = value != null && value.NotNull(); + if (_convertHiddenElementsCache.TryGetValue(modelCard.ModelCardId.NotNull(), out var previousValue)) + { + if (previousValue != returnValue) + { + EvictCacheForModelCard(modelCard); + } + } + + _convertHiddenElementsCache[modelCard.ModelCardId] = returnValue; + return returnValue; + } + + public bool GetIncludeInternalProperties([NotNull] SenderModelCard modelCard) + { + var value = modelCard.Settings?.FirstOrDefault(s => s.Id == "includeInternalProperties")?.Value as bool?; + + var returnValue = value != null && value.NotNull(); + if (_includeInternalPropertiesCache.TryGetValue(modelCard.ModelCardId.NotNull(), out var previousValue)) + { + if (previousValue != returnValue) + { + EvictCacheForModelCard(modelCard); + } + } + + _includeInternalPropertiesCache[modelCard.ModelCardId] = returnValue; + return returnValue; + } + + private void EvictCacheForModelCard(SenderModelCard modelCard) + { + var objectIds = modelCard.SendFilter != null ? modelCard.SendFilter.NotNull().SelectedObjectIds : []; + _sendConversionCache.EvictObjects(objectIds); + } +} diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/Settings/VisualRepresentationSetting.cs b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/Settings/VisualRepresentationSetting.cs new file mode 100644 index 000000000..0c58f809f --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/Settings/VisualRepresentationSetting.cs @@ -0,0 +1,18 @@ +using Speckle.Connectors.DUI.Settings; +using Speckle.Converter.Navisworks.Settings; + +namespace Speckle.Connector.Navisworks.Operations.Send.Settings; + +public class VisualRepresentationSetting(RepresentationMode value) : ICardSetting +{ + public string? Id { get; set; } = "visualRepresentation"; + public string? Title { get; set; } = "Visual Representation"; + public string? Type { get; set; } = "string"; + public List? Enum { get; set; } = System.Enum.GetNames(typeof(RepresentationMode)).ToList(); + public object? Value { get; set; } = value.ToString(); + + public static readonly Dictionary VisualRepresentationMap = System + .Enum.GetValues(typeof(RepresentationMode)) + .Cast() + .ToDictionary(v => v.ToString(), v => v); +} diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/PathConstants.cs b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/PathConstants.cs new file mode 100644 index 000000000..dae9e4253 --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/PathConstants.cs @@ -0,0 +1,6 @@ +namespace Speckle.Connector.Navisworks; + +public static class PathConstants +{ + public const char SEPARATOR = '/'; +} diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Plugin/AppUtils.cs b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Plugin/AppUtils.cs new file mode 100644 index 000000000..de3da18a5 --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Plugin/AppUtils.cs @@ -0,0 +1,20 @@ +using Speckle.Sdk.Host; + +namespace Speckle.Connector.Navisworks.NavisPlugin; + +public static class AppUtils +{ + public static HostApplication App => +#if NAVIS + HostApplications.Navisworks; +#else + throw new NotSupportedException(); +#endif + + public static HostAppVersion Version => +#if NAVIS2024 + HostAppVersion.v2024; +#else + throw new NotSupportedException(); +#endif +} diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Plugin/BrowserPane.xaml b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Plugin/BrowserPane.xaml new file mode 100644 index 000000000..ab3a0c963 --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Plugin/BrowserPane.xaml @@ -0,0 +1,17 @@ + + + + + diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Plugin/BrowserPane.xaml.cs b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Plugin/BrowserPane.xaml.cs new file mode 100644 index 000000000..2605eece7 --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Plugin/BrowserPane.xaml.cs @@ -0,0 +1,8 @@ +using System.Windows.Controls; + +namespace Speckle.Connectors.Navisworks; + +public class BrowserPane : UserControl +{ + public BrowserPane() { } +} diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Plugin/Commands.cs b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Plugin/Commands.cs new file mode 100644 index 000000000..00bf0f0ea --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Plugin/Commands.cs @@ -0,0 +1,7 @@ +namespace Speckle.Connector.Navisworks.Plugin; + +public abstract class LaunchSpeckleConnector +{ + public const string COMMAND = "Speckle_Launch"; + public const string PLUGIN = "SpeckleUI3"; +} diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Plugin/DockableConnectorPane.cs b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Plugin/DockableConnectorPane.cs new file mode 100644 index 000000000..d6022ca75 --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Plugin/DockableConnectorPane.cs @@ -0,0 +1,63 @@ +using System.Diagnostics.CodeAnalysis; +using System.Windows.Forms; +using System.Windows.Forms.Integration; +using Microsoft.Extensions.DependencyInjection; +using Speckle.Connector.Navisworks.DependencyInjection; +using Speckle.Connectors.Common; +using Speckle.Connectors.DUI; +using Speckle.Connectors.DUI.WebView; +using Speckle.Converter.Navisworks.DependencyInjection; +using Speckle.Sdk.Host; + +namespace Speckle.Connector.Navisworks.Plugin; + +[ + NAV.Plugins.DockPanePlugin(450, 750, FixedSize = false, AutoScroll = true, MinimumHeight = 410, MinimumWidth = 250), + NAV.Plugins.Plugin( + LaunchSpeckleConnector.PLUGIN, + "Speckle", + DisplayName = "Speckle", + Options = NAV.Plugins.PluginOptions.None, + ToolTip = "Speckle Connector for Navisworks", + ExtendedToolTip = "Speckle Connector for Navisworks" + ) +] +[SuppressMessage( + "design", + "CA1812:Avoid uninstantiated internal classes", + Justification = "Instantiated by Navisworks" +)] +internal sealed class Connector : NAV.Plugins.DockPanePlugin +{ + private ServiceProvider? Container { get; set; } + + public override Control CreateControlPane() + { + var services = new ServiceCollection(); + + services.Initialize(HostApplications.Navisworks, HostAppVersion.v2024); + + services.AddNavisworks(); + services.AddNavisworksConverter(); + + Container = services.BuildServiceProvider(); + + Container.UseDUI(); + + var u = Container.GetRequiredService(); + + var speckleHost = new ElementHost { AutoSize = true, Child = u }; + + speckleHost.CreateControl(); + + return speckleHost; + } + + public override void DestroyControlPane(Control pane) + { + if (pane is UserControl control) + { + control.Dispose(); + } + } +} diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Plugin/NavisworksRibbon.name b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Plugin/NavisworksRibbon.name new file mode 100644 index 000000000..ac79a9a2f --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Plugin/NavisworksRibbon.name @@ -0,0 +1,9 @@ +# This file uses UTF8 encoding. Lines starting with # or $, or ending with = +# do NOT need translating. +$utf8 + +# DisplayName= +# SpeckleNextGen + +# Speckle.DisplayName= +# SpeckleNextGen diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Plugin/NavisworksRibbon.xaml b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Plugin/NavisworksRibbon.xaml new file mode 100644 index 000000000..787daf4a5 --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Plugin/NavisworksRibbon.xaml @@ -0,0 +1,15 @@ + + + + + + + + + + diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Plugin/NavisworksRibbon.xaml.cs b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Plugin/NavisworksRibbon.xaml.cs new file mode 100644 index 000000000..37fcbe83b --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Plugin/NavisworksRibbon.xaml.cs @@ -0,0 +1,198 @@ +using System.Diagnostics.CodeAnalysis; +using System.Windows.Forms; +#if DEBUG +using System.Text; +#endif + +namespace Speckle.Connector.Navisworks.Plugin; + +[ + NAV.Plugins.Plugin("SpeckleNavisworksNextGen", "Speckle", DisplayName = "Speckle Next Gen"), + NAV.Plugins.Strings("NavisworksRibbon.name"), + NAV.Plugins.RibbonLayout("NavisworksRibbon.xaml"), + NAV.Plugins.RibbonTab("Speckle", DisplayName = "Speckle Next Gen", LoadForCanExecute = true), + NAV.Plugins.Command( + LaunchSpeckleConnector.COMMAND, + LoadForCanExecute = true, + Icon = "Resources/s2logo16.png", + LargeIcon = "Resources/s2logo32.png", + Shortcut = "Ctrl+Shift+S", + ToolTip = "Next Gen Speckle Connector for Navisworks", + DisplayName = "Speckle\rConnector" + ), +] +[SuppressMessage( + "design", + "CA1812:Avoid uninstantiated internal classes", + Justification = "Instantiated by Navisworks" +)] +internal sealed class RibbonHandler : NAV.Plugins.CommandHandlerPlugin +{ + // ReSharper disable once CollectionNeverQueried.Local + private static readonly Dictionary s_loadedPlugins = []; + + /// + /// Determines the state of a command in Navisworks. + /// + /// The ID of the command to check. + /// The state of the command. + public override NAV.Plugins.CommandState CanExecuteCommand(string commandId) => + commandId == LaunchSpeckleConnector.COMMAND + ? new NAV.Plugins.CommandState(true) + : new NAV.Plugins.CommandState(false); + + /// + /// Loads a plugin in Navisworks. + /// + /// The name of the plugin to load. + /// Optional. Specifies whether to check if the application is automated. Default is true. + /// Optional. The command associated with the plugin. Default is an empty string. + private static void LoadPlugin(string plugin, bool notAutomatedCheck = true, string command = "") + { + if (ShouldSkipLoad(notAutomatedCheck)) + { + return; + } + + if (ShouldSkipPluginLoad(plugin, command)) + { + return; + } + + var pluginRecord = NavisworksApp.Plugins.FindPlugin(plugin + ".Speckle"); + if (pluginRecord is null) + { + return; + } + + var loadedPlugin = pluginRecord.LoadedPlugin ?? pluginRecord.LoadPlugin(); + + ActivatePluginPane(pluginRecord, loadedPlugin, command); + } + + /// + /// Checks whether the load should be skipped based on the notAutomatedCheck flag and application automation status. + /// + /// The flag indicating whether to check if the application is automated. + /// True if the load should be skipped, False otherwise. + private static bool ShouldSkipLoad(bool notAutomatedCheck) => notAutomatedCheck && NavisworksApp.IsAutomated; + + /// + /// Checks whether the plugin load should be skipped based on the plugin and command values. + /// + /// The name of the plugin. + /// The command associated with the plugin. + /// True if the plugin load should be skipped, False otherwise. + private static bool ShouldSkipPluginLoad(string plugin, string command) => + string.IsNullOrEmpty(plugin) || string.IsNullOrEmpty(command); + + /// + /// Activates the plugin's pane if it is of the right type. + /// + /// The plugin record. + /// The loaded plugin instance. + /// The command associated with the plugin. + private static void ActivatePluginPane(NAV.Plugins.PluginRecord pluginRecord, object loadedPlugin, string command) + { + if (ShouldActivatePluginPane(pluginRecord)) + { + var dockPanePlugin = (NAV.Plugins.DockPanePlugin)loadedPlugin; + dockPanePlugin.ActivatePane(); + + s_loadedPlugins[dockPanePlugin] = true; + } + else + { +#if DEBUG + ShowPluginInfoMessageBox(); + ShowPluginNotLoadedMessageBox(command); +#endif + } + } + + /// + /// Checks whether the plugin's pane should be activated based on the plugin record. + /// + /// The plugin record. + /// True if the plugin's pane should be activated, False otherwise. + private static bool ShouldActivatePluginPane(NAV.Plugins.PluginRecord pluginRecord) => + pluginRecord.IsLoaded && pluginRecord is NAV.Plugins.DockPanePluginRecord && pluginRecord.IsEnabled; + + public override int ExecuteCommand(string commandId, params string[] parameters) + { + // ReSharper disable once RedundantAssignment + var buildVersion = string.Empty; + +#if NAVIS2020 + buildVersion = "2020"; +#endif +#if NAVIS2021 + buildVersion = "2021"; +#endif +#if NAVIS2022 + buildVersion = "2022"; +#endif +#if NAVIS2023 + buildVersion = "2023"; +#endif +#if NAVIS2024 + buildVersion = "2024"; +#endif +#if NAVIS2025 + buildVersion = "2025"; +#endif + + // Version + if (!NavisworksApp.Version.RuntimeProductName.Contains(buildVersion)) + { + MessageBox.Show( + "This Add-In was built for Navisworks " + + buildVersion + + ", please contact jonathon@speckle.systems for assistance...", + "Cannot Continue!", + MessageBoxButtons.OK, + MessageBoxIcon.Error + ); + return 0; + } + + switch (commandId) + { + case LaunchSpeckleConnector.COMMAND: + { + LoadPlugin(LaunchSpeckleConnector.PLUGIN, command: commandId); + break; + } + + default: + { + MessageBox.Show("You have clicked on an unexpected command with ID = '" + commandId + "'"); + break; + } + } + + return 0; + } + +#if DEBUG + /// + /// Shows a message box displaying plugin information. + /// + private static void ShowPluginInfoMessageBox() + { + var sb = new StringBuilder(); + foreach (var pr in NavisworksApp.Plugins.PluginRecords) + { + sb.AppendLine(pr.Name + ": " + pr.DisplayName + ", " + pr.Id); + } + + MessageBox.Show(sb.ToString()); + } + + /// + /// Shows a message box indicating that the plugin was not loaded. + /// + /// The command associated with the plugin. + private static void ShowPluginNotLoadedMessageBox(string command) => MessageBox.Show(command + " Plugin not loaded."); +#endif +} diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Plugin/PackageContents.xml b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Plugin/PackageContents.xml new file mode 100644 index 000000000..3830371c3 --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Plugin/PackageContents.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Resources/s2logo16.png b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Resources/s2logo16.png new file mode 100644 index 0000000000000000000000000000000000000000..61872f0d0cc34673152721968f5b93ef13aff8b4 GIT binary patch literal 714 zcmV;*0yX`KP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0$)i)K~y+Tm6Kga zQ(+j#hi=(LS5CY!VNB>kidYw2RM5q!h#*C~jYbsGT}U7MaL1G8SD9L~v5(5sEMkL2 zgeW^T1qF-NQcI;>Of1vo)*6=EId1R2^B!qMn?VPDyf4r5yubH(A2_m8oe|w-4myJu zEJZ&|x=dcuLos@Z$H)<%fg=HN4M})OjAGzWDWl)MWA9Px=3(OS--yC`nPz_gR8rBs zhT{VShkFSQ-c3trtf>s@jt!K}zmYTRkOY*Xvnx{I7s{r%w3akQaMIz+#7o;EnLQ<^ zz|Ps=n=nfI)~BP0&-bFJF^)s_83bnyIAZnxTTtZ~L2N}HDv3Jn3N1sGkUxZ$>8 zaOjfQRd{njNy|5siEU~vlepj-2ZU(=QM{h>qRKgm^7b&wuEnsmUdR?~yOKcEe+KE5 zM)Pom&6kPZTgF<^BV!pGaNJZ#C`fu?f-v(t8@lB42bzj$~`gmxjW={HDz zeT<%G4k#NohMaQ->eeMpy}AhUy<2>O8(8-M$$qRa>!BZbkg3ZOC>Q|+ERQYqJZ$|Y zq(WMda0Sv|s*qkfiiBT-U9Gby5c9MyOF#n(W+U;gZ!eNQ6;@xUu=so@*2Yx$F}xk; zZaSrl=p{J?lpPHpuwpI7oV^^?*FC6lx^T;K9?^Tn=(C>A)NLv#X2Ym$>p&qJg|>47 zL9SYg@3|U)u04AO?B9YvY3ORi;vF^08)tInr9X1_fk0(pO(Z5a3$c8&FfYLfZ}S;` wM9%O}Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D1|3O6K~z{rwU-G@ zR96&+O%<%&Z9zq9i`uxfRV1w@)f!RJHfdt8B8_#!q@=W|+NN0R!YU|=84)N9%1*6f zT~HBGs7?_VP#8cIfyyd7!{7|ayjkAgb7y!1BclvWy~&q*=iGD8`QN+e-J2OUSlfC5 z4o0%ztS1{D0^73S&-nEsAGRZlPhf1%=C3feW%E+%s~J18f$dp*HH*_5+R!}3k4_5< z1ZQ%TvjxwC0V15{NwGSp)vWXLf<552Y`7W)Fx+=GnRR}i(A)Mi3SfNc{m`sqf4nn+ zAI|f7JkRi0dy*T$0}w?6k?8^y*%qF%B*HKVwutpWQ970P5yVNWU3@iF=z()(BWE;HK0Y zJ@xMBdEkocxf_l4S)yj>YWD%!I`ECrSRG$xoJ*1;iegXBZdUuD8dep8~pa0my;Jw~+ByjNbl|KL`2Ub?7Q_Lt~yBmPh|> z5>H@AH862cJx-nb1)Vn+V0BCeto<}-E8h?3>PWyN>Ko8qy&vz3I`E086rDF*a3#YF z4!ax7#$yb*2(A6pSS8NDjL-_KODqB}KSs&hiB3XBI?}M?_yvp&YJ=C|RE+XhnT;bb zsDRf4yD>RbhMA&P%n5J8!st4<##X>1)YG608OoObmnBYKUs`dqDo>P*Z_+RYjm(vKW*0JhV&zV`4}PawNg%d?12K zaTz*w9=&EM1-?TG?hzygDDbG#-8s?HNolx;*-=2nakmJNt)kpPAj z;e8|>O@$udnnQq|6SUXqB!sRW$4*&O$OCR8r1C}P~2I8kW|CjV2)=BU`eff z)kc_YNn{CR1VnOQ$BpsK@k{|D{Wy%I z6HN~r6K@7|LMd^C=AR{0;VZ$**3entL2Mw_gYQ@czReAqDi=JyJ`+pAa$!y4O=1yN zbe;?vhzW}<23!!aTLuc)~K;)jkHB`lpP`uZo-&= zR=hzcX8x6LFk4g(n*bTSMItmEvPXNYE!q>t!24jB*?5d030S%NPqh3t7U#m2VQ%mZ zqkV-~0p+~*{v<;ZU`@q1K49S8E>83XcX1}_&Mm=< z{R)g><3I59>kkv)Z>a!tu!J>n(;-RMD|Bf6#mAX33EtLNk0n>I> zph!F$#o~`4rQS32>95-ydI79CE|5An%`2=PssM}eQOk$>sB852auUV}UoNdTy`eD? z6Wr^n*@8Z2b&+v_k1CO2<->&y_u>2*FYM$z1cv)*oEanidK?6LLqDYr8}={JV2_00 S^FF%(0000 literal 0 HcmV?d00001 diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Speckle.Connectors.NavisworksShared.projitems b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Speckle.Connectors.NavisworksShared.projitems new file mode 100644 index 000000000..099d2c611 --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Speckle.Connectors.NavisworksShared.projitems @@ -0,0 +1,60 @@ + + + + $(MSBuildAllProjects);$(MSBuildThisFileFullPath) + true + D1D9FBB0-5928-4AD0-9AD3-EC61B7BD96CA + + + Speckle.Connectors.NavisworksShared + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Always + + + Always + + + Always + + + Always + + + + + Always + + + + + + \ No newline at end of file diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Speckle.Connectors.NavisworksShared.shproj b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Speckle.Connectors.NavisworksShared.shproj new file mode 100644 index 000000000..1e6d1b02a --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Speckle.Connectors.NavisworksShared.shproj @@ -0,0 +1,12 @@ + + + + {62813838-52F7-43CB-9062-BB2611C00C79} + + + + + + + diff --git a/Converters/Navisworks/Speckle.Converters.Navisworks2020/Speckle.Converters.Navisworks2020.csproj b/Converters/Navisworks/Speckle.Converters.Navisworks2020/Speckle.Converters.Navisworks2020.csproj new file mode 100644 index 000000000..e00724486 --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.Navisworks2020/Speckle.Converters.Navisworks2020.csproj @@ -0,0 +1,20 @@ + + + net48 + x64 + $(DefineConstants);NAVIS2020 + Debug;Release;Local + + + + + + + + + + + + + + diff --git a/Converters/Navisworks/Speckle.Converters.Navisworks2020/packages.lock.json b/Converters/Navisworks/Speckle.Converters.Navisworks2020/packages.lock.json new file mode 100644 index 000000000..bb34ae7c9 --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.Navisworks2020/packages.lock.json @@ -0,0 +1,359 @@ +{ + "version": 2, + "dependencies": { + ".NETFramework,Version=v4.8": { + "Microsoft.NETFramework.ReferenceAssemblies": { + "type": "Direct", + "requested": "[1.0.3, )", + "resolved": "1.0.3", + "contentHash": "vUc9Npcs14QsyOD01tnv/m8sQUnGTGOw1BCmKcv77LBJY7OxhJ+zJF7UD/sCL3lYNFuqmQEVlkfS4Quif6FyYg==", + "dependencies": { + "Microsoft.NETFramework.ReferenceAssemblies.net48": "1.0.3" + } + }, + "Microsoft.SourceLink.GitHub": { + "type": "Direct", + "requested": "[8.0.0, )", + "resolved": "8.0.0", + "contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==", + "dependencies": { + "Microsoft.Build.Tasks.Git": "8.0.0", + "Microsoft.SourceLink.Common": "8.0.0" + } + }, + "PolySharp": { + "type": "Direct", + "requested": "[1.14.1, )", + "resolved": "1.14.1", + "contentHash": "mOOmFYwad3MIOL14VCjj02LljyF1GNw1wP0YVlxtcPvqdxjGGMNdNJJxHptlry3MOd8b40Flm8RPOM8JOlN2sQ==" + }, + "Speckle.InterfaceGenerator": { + "type": "Direct", + "requested": "[0.9.6, )", + "resolved": "0.9.6", + "contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w==" + }, + "Speckle.Navisworks.API": { + "type": "Direct", + "requested": "[2020.0.0, )", + "resolved": "2020.0.0", + "contentHash": "biB2RR0HNxrbHD7zBZoJUhwzPwVE5IFg9l4/747bHOLRJC3FM5UtzdjGwvRZwfOlFyM4P26NYARSiCaxSNIBpg==" + }, + "GraphQL.Client": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "8yPNBbuVBpTptivyAlak4GZvbwbUcjeQTL4vN1HKHRuOykZ4r7l5fcLS6vpyPyLn0x8FsL31xbOIKyxbmR9rbA==", + "dependencies": { + "GraphQL.Client.Abstractions": "6.0.0", + "GraphQL.Client.Abstractions.Websocket": "6.0.0", + "System.Net.WebSockets.Client.Managed": "1.0.22", + "System.Reactive": "5.0.0" + } + }, + "GraphQL.Client.Abstractions": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "h7uzWFORHZ+CCjwr/ThAyXMr0DPpzEANDa4Uo54wqCQ+j7qUKwqYTgOrb1W40sqbvNaZm9v/X7It31SUw0maHA==", + "dependencies": { + "GraphQL.Primitives": "6.0.0" + } + }, + "GraphQL.Client.Abstractions.Websocket": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "Nr9bPf8gIOvLuXpqEpqr9z9jslYFJOvd0feHth3/kPqeR3uMbjF5pjiwh4jxyMcxHdr8Pb6QiXkV3hsSyt0v7A==", + "dependencies": { + "GraphQL.Client.Abstractions": "6.0.0" + } + }, + "GraphQL.Primitives": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "yg72rrYDapfsIUrul7aF6wwNnTJBOFvuA9VdDTQpPa8AlAriHbufeXYLBcodKjfUdkCnaiggX1U/nEP08Zb5GA==" + }, + "Microsoft.Bcl.AsyncInterfaces": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "W8DPQjkMScOMTtJbPwmPyj9c3zYSFGawDW3jwlBOOsnY+EzZFLgNQ/UMkK35JmkNOVPdCyPr2Tw7Vv9N+KA3ZQ==", + "dependencies": { + "System.Threading.Tasks.Extensions": "4.5.4" + } + }, + "Microsoft.Build.Tasks.Git": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ==" + }, + "Microsoft.CSharp": { + "type": "Transitive", + "resolved": "4.7.0", + "contentHash": "pTj+D3uJWyN3My70i2Hqo+OXixq3Os2D1nJ2x92FFo6sk8fYS1m1WLNTs0Dc1uPaViH0YvEEwvzddQ7y4rhXmA==" + }, + "Microsoft.Data.Sqlite": { + "type": "Transitive", + "resolved": "7.0.5", + "contentHash": "KGxbPeWsQMnmQy43DSBxAFtHz3l2JX8EWBSGUCvT3CuZ8KsuzbkqMIJMDOxWtG8eZSoCDI04aiVQjWuuV8HmSw==", + "dependencies": { + "Microsoft.Data.Sqlite.Core": "7.0.5", + "SQLitePCLRaw.bundle_e_sqlite3": "2.1.4" + } + }, + "Microsoft.Data.Sqlite.Core": { + "type": "Transitive", + "resolved": "7.0.5", + "contentHash": "FTerRmQPqHrCrnoUzhBu+E+1DNGwyrAMLqHkAqOOOu5pGfyMOj8qQUBxI/gDtWtG11p49UxSfWmBzRNlwZqfUg==", + "dependencies": { + "SQLitePCLRaw.core": "2.1.4" + } + }, + "Microsoft.Extensions.Configuration": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "nOP8R1mVb/6mZtm2qgAJXn/LFm/2kMjHDAg/QJLFG6CuWYJtaD3p1BwQhufBVvRzL9ceJ/xF0SQ0qsI2GkDQAA==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "2.2.0" + } + }, + "Microsoft.Extensions.Configuration.Abstractions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "65MrmXCziWaQFrI0UHkQbesrX5wTwf9XPjY5yFm/VkgJKFJ5gqvXRoXjIZcf2wLi5ZlwGz/oMYfyURVCWbM5iw==", + "dependencies": { + "Microsoft.Extensions.Primitives": "2.2.0" + } + }, + "Microsoft.Extensions.Configuration.Binder": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "vJ9xvOZCnUAIHcGC3SU35r3HKmHTVIeHzo6u/qzlHAqD8m6xv92MLin4oJntTvkpKxVX3vI1GFFkIQtU3AdlsQ==", + "dependencies": { + "Microsoft.Extensions.Configuration": "2.2.0" + } + }, + "Microsoft.Extensions.DependencyInjection.Abstractions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "f9hstgjVmr6rmrfGSpfsVOl2irKAgr1QjrSi3FgnS7kulxband50f2brRLwySAQTADPZeTdow0mpSMcoAdadCw==" + }, + "Microsoft.Extensions.Options": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "UpZLNLBpIZ0GTebShui7xXYh6DmBHjWM8NxGxZbdQh/bPZ5e6YswqI+bru6BnEL5eWiOdodsXtEz3FROcgi/qg==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Primitives": "2.2.0", + "System.ComponentModel.Annotations": "4.5.0" + } + }, + "Microsoft.Extensions.Primitives": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "azyQtqbm4fSaDzZHD/J+V6oWMFaf2tWP4WEGIYePLCMw3+b2RQdj9ybgbQyjCshcitQKQ4lEDOZjmSlTTrHxUg==", + "dependencies": { + "System.Memory": "4.5.1", + "System.Runtime.CompilerServices.Unsafe": "4.5.1" + } + }, + "Microsoft.NETFramework.ReferenceAssemblies.net48": { + "type": "Transitive", + "resolved": "1.0.3", + "contentHash": "zMk4D+9zyiEWByyQ7oPImPN/Jhpj166Ky0Nlla4eXlNL8hI/BtSJsgR8Inldd4NNpIAH3oh8yym0W2DrhXdSLQ==" + }, + "Microsoft.SourceLink.Common": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw==" + }, + "Speckle.DoubleNumerics": { + "type": "Transitive", + "resolved": "4.0.1", + "contentHash": "MzEQ1Im0zTja+tEsdRIk/WlPiKqb22NmTOJcR1ZKm/mz46pezyyID3/wRz6vJUELMpSLnG7LhsxBL+nxbr7V0w==" + }, + "Speckle.Newtonsoft.Json": { + "type": "Transitive", + "resolved": "13.0.2", + "contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA==" + }, + "SQLitePCLRaw.bundle_e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "EWI1olKDjFEBMJu0+3wuxwziIAdWDVMYLhuZ3Qs84rrz+DHwD00RzWPZCa+bLnHCf3oJwuFZIRsHT5p236QXww==", + "dependencies": { + "SQLitePCLRaw.lib.e_sqlite3": "2.1.4", + "SQLitePCLRaw.provider.dynamic_cdecl": "2.1.4" + } + }, + "SQLitePCLRaw.core": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "inBjvSHo9UDKneGNzfUfDjK08JzlcIhn1+SP5Y3m6cgXpCxXKCJDy6Mka7LpgSV+UZmKSnC8rTwB0SQ0xKu5pA==", + "dependencies": { + "System.Memory": "4.5.3" + } + }, + "SQLitePCLRaw.lib.e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "2C9Q9eX7CPLveJA0rIhf9RXAvu+7nWZu1A2MdG6SD/NOu26TakGgL1nsbc0JAspGijFOo3HoN79xrx8a368fBg==" + }, + "SQLitePCLRaw.provider.dynamic_cdecl": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "ZsaKKhgYF9B1fvcnOGKl3EycNAwd9CRWX7v0rEfuPWhQQ5Jjpvf2VEHahiLIGHio3hxi3EIKFJw9KvyowWOUAw==", + "dependencies": { + "SQLitePCLRaw.core": "2.1.4" + } + }, + "System.Buffers": { + "type": "Transitive", + "resolved": "4.4.0", + "contentHash": "AwarXzzoDwX6BgrhjoJsk6tUezZEozOT5Y9QKF94Gl4JK91I4PIIBkBco9068Y9/Dra8Dkbie99kXB8+1BaYKw==" + }, + "System.ComponentModel.Annotations": { + "type": "Transitive", + "resolved": "4.5.0", + "contentHash": "UxYQ3FGUOtzJ7LfSdnYSFd7+oEv6M8NgUatatIN2HxNtDdlcvFAf+VIq4Of9cDMJEJC0aSRv/x898RYhB4Yppg==" + }, + "System.Memory": { + "type": "Transitive", + "resolved": "4.5.3", + "contentHash": "3oDzvc/zzetpTKWMShs1AADwZjQ/36HnsufHRPcOjyRAAMLDlu2iD33MBI2opxnezcVUtXyqDXXjoFMOU9c7SA==", + "dependencies": { + "System.Buffers": "4.4.0", + "System.Numerics.Vectors": "4.4.0", + "System.Runtime.CompilerServices.Unsafe": "4.5.2" + } + }, + "System.Net.WebSockets.Client.Managed": { + "type": "Transitive", + "resolved": "1.0.22", + "contentHash": "WqEOxPlXjuZrIjUtXNE9NxEfU/n5E35iV2PtoZdJSUC4tlrqwHnTee+wvMIM4OUaJWmwrymeqcgYrE0IkGAgLA==", + "dependencies": { + "System.Buffers": "4.4.0", + "System.Numerics.Vectors": "4.4.0" + } + }, + "System.Numerics.Vectors": { + "type": "Transitive", + "resolved": "4.4.0", + "contentHash": "UiLzLW+Lw6HLed1Hcg+8jSRttrbuXv7DANVj0DkL9g6EnnzbL75EB7EWsw5uRbhxd/4YdG8li5XizGWepmG3PQ==" + }, + "System.Reactive": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ==", + "dependencies": { + "System.Threading.Tasks.Extensions": "4.5.4" + } + }, + "System.Runtime.CompilerServices.Unsafe": { + "type": "Transitive", + "resolved": "4.5.3", + "contentHash": "3TIsJhD1EiiT0w2CcDMN/iSSwnNnsrnbzeVHSKkaEgV85txMprmuO+Yq2AdSbeVGcg28pdNDTPK87tJhX7VFHw==" + }, + "System.Threading.Tasks.Extensions": { + "type": "Transitive", + "resolved": "4.5.4", + "contentHash": "zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg==", + "dependencies": { + "System.Runtime.CompilerServices.Unsafe": "4.5.3" + } + }, + "speckle.connectors.common": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", + "Speckle.Connectors.Logging": "[1.0.0, )", + "Speckle.Objects": "[3.1.0-dev.218, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" + } + }, + "speckle.connectors.dui": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", + "Speckle.Connectors.Common": "[1.0.0, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )", + "System.Threading.Tasks.Dataflow": "[6.0.0, )" + } + }, + "speckle.connectors.logging": { + "type": "Project" + }, + "speckle.converters.common": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", + "Speckle.Objects": "[3.1.0-dev.218, )" + } + }, + "Microsoft.Extensions.DependencyInjection": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "MZtBIwfDFork5vfjpJdG5g8wuJFt7d/y3LOSVVtDK/76wlbtz6cjltfKHqLx2TKVqTj5/c41t77m1+h20zqtPA==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0" + } + }, + "Microsoft.Extensions.Logging": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "Nxqhadc9FCmFHzU+fz3oc8sFlE6IadViYg8dfUdGzJZ2JUxnCsRghBhhOWdM4B2zSZqEc+0BjliBh/oNdRZuig==", + "dependencies": { + "Microsoft.Extensions.Configuration.Binder": "2.2.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging.Abstractions": "2.2.0", + "Microsoft.Extensions.Options": "2.2.0" + } + }, + "Microsoft.Extensions.Logging.Abstractions": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "B2WqEox8o+4KUOpL7rZPyh6qYjik8tHi2tN8Z9jZkHzED8ElYgZa/h6K+xliB435SqUcWT290Fr2aa8BtZjn8A==" + }, + "Speckle.Objects": { + "type": "CentralTransitive", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", + "dependencies": { + "Speckle.Sdk": "3.1.0-dev.218" + } + }, + "Speckle.Sdk": { + "type": "CentralTransitive", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", + "dependencies": { + "GraphQL.Client": "6.0.0", + "Microsoft.Bcl.AsyncInterfaces": "5.0.0", + "Microsoft.CSharp": "4.7.0", + "Microsoft.Data.Sqlite": "7.0.5", + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging": "2.2.0", + "Speckle.DoubleNumerics": "4.0.1", + "Speckle.Newtonsoft.Json": "13.0.2", + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" + } + }, + "Speckle.Sdk.Dependencies": { + "type": "CentralTransitive", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" + }, + "System.Threading.Tasks.Dataflow": { + "type": "CentralTransitive", + "requested": "[6.0.0, )", + "resolved": "6.0.0", + "contentHash": "+tyDCU3/B1lDdOOAJywHQoFwyXIUghIaP2BxG79uvhfTnO+D9qIgjVlL/JV2NTliYbMHpd6eKDmHp2VHpij7MA==" + } + } + } +} \ No newline at end of file diff --git a/Converters/Navisworks/Speckle.Converters.Navisworks2021/Speckle.Converters.Navisworks2021.csproj b/Converters/Navisworks/Speckle.Converters.Navisworks2021/Speckle.Converters.Navisworks2021.csproj new file mode 100644 index 000000000..79e45bc9a --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.Navisworks2021/Speckle.Converters.Navisworks2021.csproj @@ -0,0 +1,20 @@ + + + net48 + x64 + $(DefineConstants);NAVIS2021 + Debug;Release;Local + + + + + + + + + + + + + + diff --git a/Converters/Navisworks/Speckle.Converters.Navisworks2021/packages.lock.json b/Converters/Navisworks/Speckle.Converters.Navisworks2021/packages.lock.json new file mode 100644 index 000000000..2d16a81f3 --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.Navisworks2021/packages.lock.json @@ -0,0 +1,359 @@ +{ + "version": 2, + "dependencies": { + ".NETFramework,Version=v4.8": { + "Microsoft.NETFramework.ReferenceAssemblies": { + "type": "Direct", + "requested": "[1.0.3, )", + "resolved": "1.0.3", + "contentHash": "vUc9Npcs14QsyOD01tnv/m8sQUnGTGOw1BCmKcv77LBJY7OxhJ+zJF7UD/sCL3lYNFuqmQEVlkfS4Quif6FyYg==", + "dependencies": { + "Microsoft.NETFramework.ReferenceAssemblies.net48": "1.0.3" + } + }, + "Microsoft.SourceLink.GitHub": { + "type": "Direct", + "requested": "[8.0.0, )", + "resolved": "8.0.0", + "contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==", + "dependencies": { + "Microsoft.Build.Tasks.Git": "8.0.0", + "Microsoft.SourceLink.Common": "8.0.0" + } + }, + "PolySharp": { + "type": "Direct", + "requested": "[1.14.1, )", + "resolved": "1.14.1", + "contentHash": "mOOmFYwad3MIOL14VCjj02LljyF1GNw1wP0YVlxtcPvqdxjGGMNdNJJxHptlry3MOd8b40Flm8RPOM8JOlN2sQ==" + }, + "Speckle.InterfaceGenerator": { + "type": "Direct", + "requested": "[0.9.6, )", + "resolved": "0.9.6", + "contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w==" + }, + "Speckle.Navisworks.API": { + "type": "Direct", + "requested": "[2021.0.0, )", + "resolved": "2021.0.0", + "contentHash": "cY7sU8dxISfTQLinUIOki/azS+bIX28uEZQO4ijrq0eOUhJlKcKWS273kHPoL0+T0Xrkd+1OWj2YFa2PbHGgwQ==" + }, + "GraphQL.Client": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "8yPNBbuVBpTptivyAlak4GZvbwbUcjeQTL4vN1HKHRuOykZ4r7l5fcLS6vpyPyLn0x8FsL31xbOIKyxbmR9rbA==", + "dependencies": { + "GraphQL.Client.Abstractions": "6.0.0", + "GraphQL.Client.Abstractions.Websocket": "6.0.0", + "System.Net.WebSockets.Client.Managed": "1.0.22", + "System.Reactive": "5.0.0" + } + }, + "GraphQL.Client.Abstractions": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "h7uzWFORHZ+CCjwr/ThAyXMr0DPpzEANDa4Uo54wqCQ+j7qUKwqYTgOrb1W40sqbvNaZm9v/X7It31SUw0maHA==", + "dependencies": { + "GraphQL.Primitives": "6.0.0" + } + }, + "GraphQL.Client.Abstractions.Websocket": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "Nr9bPf8gIOvLuXpqEpqr9z9jslYFJOvd0feHth3/kPqeR3uMbjF5pjiwh4jxyMcxHdr8Pb6QiXkV3hsSyt0v7A==", + "dependencies": { + "GraphQL.Client.Abstractions": "6.0.0" + } + }, + "GraphQL.Primitives": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "yg72rrYDapfsIUrul7aF6wwNnTJBOFvuA9VdDTQpPa8AlAriHbufeXYLBcodKjfUdkCnaiggX1U/nEP08Zb5GA==" + }, + "Microsoft.Bcl.AsyncInterfaces": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "W8DPQjkMScOMTtJbPwmPyj9c3zYSFGawDW3jwlBOOsnY+EzZFLgNQ/UMkK35JmkNOVPdCyPr2Tw7Vv9N+KA3ZQ==", + "dependencies": { + "System.Threading.Tasks.Extensions": "4.5.4" + } + }, + "Microsoft.Build.Tasks.Git": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ==" + }, + "Microsoft.CSharp": { + "type": "Transitive", + "resolved": "4.7.0", + "contentHash": "pTj+D3uJWyN3My70i2Hqo+OXixq3Os2D1nJ2x92FFo6sk8fYS1m1WLNTs0Dc1uPaViH0YvEEwvzddQ7y4rhXmA==" + }, + "Microsoft.Data.Sqlite": { + "type": "Transitive", + "resolved": "7.0.5", + "contentHash": "KGxbPeWsQMnmQy43DSBxAFtHz3l2JX8EWBSGUCvT3CuZ8KsuzbkqMIJMDOxWtG8eZSoCDI04aiVQjWuuV8HmSw==", + "dependencies": { + "Microsoft.Data.Sqlite.Core": "7.0.5", + "SQLitePCLRaw.bundle_e_sqlite3": "2.1.4" + } + }, + "Microsoft.Data.Sqlite.Core": { + "type": "Transitive", + "resolved": "7.0.5", + "contentHash": "FTerRmQPqHrCrnoUzhBu+E+1DNGwyrAMLqHkAqOOOu5pGfyMOj8qQUBxI/gDtWtG11p49UxSfWmBzRNlwZqfUg==", + "dependencies": { + "SQLitePCLRaw.core": "2.1.4" + } + }, + "Microsoft.Extensions.Configuration": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "nOP8R1mVb/6mZtm2qgAJXn/LFm/2kMjHDAg/QJLFG6CuWYJtaD3p1BwQhufBVvRzL9ceJ/xF0SQ0qsI2GkDQAA==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "2.2.0" + } + }, + "Microsoft.Extensions.Configuration.Abstractions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "65MrmXCziWaQFrI0UHkQbesrX5wTwf9XPjY5yFm/VkgJKFJ5gqvXRoXjIZcf2wLi5ZlwGz/oMYfyURVCWbM5iw==", + "dependencies": { + "Microsoft.Extensions.Primitives": "2.2.0" + } + }, + "Microsoft.Extensions.Configuration.Binder": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "vJ9xvOZCnUAIHcGC3SU35r3HKmHTVIeHzo6u/qzlHAqD8m6xv92MLin4oJntTvkpKxVX3vI1GFFkIQtU3AdlsQ==", + "dependencies": { + "Microsoft.Extensions.Configuration": "2.2.0" + } + }, + "Microsoft.Extensions.DependencyInjection.Abstractions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "f9hstgjVmr6rmrfGSpfsVOl2irKAgr1QjrSi3FgnS7kulxband50f2brRLwySAQTADPZeTdow0mpSMcoAdadCw==" + }, + "Microsoft.Extensions.Options": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "UpZLNLBpIZ0GTebShui7xXYh6DmBHjWM8NxGxZbdQh/bPZ5e6YswqI+bru6BnEL5eWiOdodsXtEz3FROcgi/qg==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Primitives": "2.2.0", + "System.ComponentModel.Annotations": "4.5.0" + } + }, + "Microsoft.Extensions.Primitives": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "azyQtqbm4fSaDzZHD/J+V6oWMFaf2tWP4WEGIYePLCMw3+b2RQdj9ybgbQyjCshcitQKQ4lEDOZjmSlTTrHxUg==", + "dependencies": { + "System.Memory": "4.5.1", + "System.Runtime.CompilerServices.Unsafe": "4.5.1" + } + }, + "Microsoft.NETFramework.ReferenceAssemblies.net48": { + "type": "Transitive", + "resolved": "1.0.3", + "contentHash": "zMk4D+9zyiEWByyQ7oPImPN/Jhpj166Ky0Nlla4eXlNL8hI/BtSJsgR8Inldd4NNpIAH3oh8yym0W2DrhXdSLQ==" + }, + "Microsoft.SourceLink.Common": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw==" + }, + "Speckle.DoubleNumerics": { + "type": "Transitive", + "resolved": "4.0.1", + "contentHash": "MzEQ1Im0zTja+tEsdRIk/WlPiKqb22NmTOJcR1ZKm/mz46pezyyID3/wRz6vJUELMpSLnG7LhsxBL+nxbr7V0w==" + }, + "Speckle.Newtonsoft.Json": { + "type": "Transitive", + "resolved": "13.0.2", + "contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA==" + }, + "SQLitePCLRaw.bundle_e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "EWI1olKDjFEBMJu0+3wuxwziIAdWDVMYLhuZ3Qs84rrz+DHwD00RzWPZCa+bLnHCf3oJwuFZIRsHT5p236QXww==", + "dependencies": { + "SQLitePCLRaw.lib.e_sqlite3": "2.1.4", + "SQLitePCLRaw.provider.dynamic_cdecl": "2.1.4" + } + }, + "SQLitePCLRaw.core": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "inBjvSHo9UDKneGNzfUfDjK08JzlcIhn1+SP5Y3m6cgXpCxXKCJDy6Mka7LpgSV+UZmKSnC8rTwB0SQ0xKu5pA==", + "dependencies": { + "System.Memory": "4.5.3" + } + }, + "SQLitePCLRaw.lib.e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "2C9Q9eX7CPLveJA0rIhf9RXAvu+7nWZu1A2MdG6SD/NOu26TakGgL1nsbc0JAspGijFOo3HoN79xrx8a368fBg==" + }, + "SQLitePCLRaw.provider.dynamic_cdecl": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "ZsaKKhgYF9B1fvcnOGKl3EycNAwd9CRWX7v0rEfuPWhQQ5Jjpvf2VEHahiLIGHio3hxi3EIKFJw9KvyowWOUAw==", + "dependencies": { + "SQLitePCLRaw.core": "2.1.4" + } + }, + "System.Buffers": { + "type": "Transitive", + "resolved": "4.4.0", + "contentHash": "AwarXzzoDwX6BgrhjoJsk6tUezZEozOT5Y9QKF94Gl4JK91I4PIIBkBco9068Y9/Dra8Dkbie99kXB8+1BaYKw==" + }, + "System.ComponentModel.Annotations": { + "type": "Transitive", + "resolved": "4.5.0", + "contentHash": "UxYQ3FGUOtzJ7LfSdnYSFd7+oEv6M8NgUatatIN2HxNtDdlcvFAf+VIq4Of9cDMJEJC0aSRv/x898RYhB4Yppg==" + }, + "System.Memory": { + "type": "Transitive", + "resolved": "4.5.3", + "contentHash": "3oDzvc/zzetpTKWMShs1AADwZjQ/36HnsufHRPcOjyRAAMLDlu2iD33MBI2opxnezcVUtXyqDXXjoFMOU9c7SA==", + "dependencies": { + "System.Buffers": "4.4.0", + "System.Numerics.Vectors": "4.4.0", + "System.Runtime.CompilerServices.Unsafe": "4.5.2" + } + }, + "System.Net.WebSockets.Client.Managed": { + "type": "Transitive", + "resolved": "1.0.22", + "contentHash": "WqEOxPlXjuZrIjUtXNE9NxEfU/n5E35iV2PtoZdJSUC4tlrqwHnTee+wvMIM4OUaJWmwrymeqcgYrE0IkGAgLA==", + "dependencies": { + "System.Buffers": "4.4.0", + "System.Numerics.Vectors": "4.4.0" + } + }, + "System.Numerics.Vectors": { + "type": "Transitive", + "resolved": "4.4.0", + "contentHash": "UiLzLW+Lw6HLed1Hcg+8jSRttrbuXv7DANVj0DkL9g6EnnzbL75EB7EWsw5uRbhxd/4YdG8li5XizGWepmG3PQ==" + }, + "System.Reactive": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ==", + "dependencies": { + "System.Threading.Tasks.Extensions": "4.5.4" + } + }, + "System.Runtime.CompilerServices.Unsafe": { + "type": "Transitive", + "resolved": "4.5.3", + "contentHash": "3TIsJhD1EiiT0w2CcDMN/iSSwnNnsrnbzeVHSKkaEgV85txMprmuO+Yq2AdSbeVGcg28pdNDTPK87tJhX7VFHw==" + }, + "System.Threading.Tasks.Extensions": { + "type": "Transitive", + "resolved": "4.5.4", + "contentHash": "zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg==", + "dependencies": { + "System.Runtime.CompilerServices.Unsafe": "4.5.3" + } + }, + "speckle.connectors.common": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", + "Speckle.Connectors.Logging": "[1.0.0, )", + "Speckle.Objects": "[3.1.0-dev.218, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" + } + }, + "speckle.connectors.dui": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", + "Speckle.Connectors.Common": "[1.0.0, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )", + "System.Threading.Tasks.Dataflow": "[6.0.0, )" + } + }, + "speckle.connectors.logging": { + "type": "Project" + }, + "speckle.converters.common": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", + "Speckle.Objects": "[3.1.0-dev.218, )" + } + }, + "Microsoft.Extensions.DependencyInjection": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "MZtBIwfDFork5vfjpJdG5g8wuJFt7d/y3LOSVVtDK/76wlbtz6cjltfKHqLx2TKVqTj5/c41t77m1+h20zqtPA==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0" + } + }, + "Microsoft.Extensions.Logging": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "Nxqhadc9FCmFHzU+fz3oc8sFlE6IadViYg8dfUdGzJZ2JUxnCsRghBhhOWdM4B2zSZqEc+0BjliBh/oNdRZuig==", + "dependencies": { + "Microsoft.Extensions.Configuration.Binder": "2.2.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging.Abstractions": "2.2.0", + "Microsoft.Extensions.Options": "2.2.0" + } + }, + "Microsoft.Extensions.Logging.Abstractions": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "B2WqEox8o+4KUOpL7rZPyh6qYjik8tHi2tN8Z9jZkHzED8ElYgZa/h6K+xliB435SqUcWT290Fr2aa8BtZjn8A==" + }, + "Speckle.Objects": { + "type": "CentralTransitive", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", + "dependencies": { + "Speckle.Sdk": "3.1.0-dev.218" + } + }, + "Speckle.Sdk": { + "type": "CentralTransitive", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", + "dependencies": { + "GraphQL.Client": "6.0.0", + "Microsoft.Bcl.AsyncInterfaces": "5.0.0", + "Microsoft.CSharp": "4.7.0", + "Microsoft.Data.Sqlite": "7.0.5", + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging": "2.2.0", + "Speckle.DoubleNumerics": "4.0.1", + "Speckle.Newtonsoft.Json": "13.0.2", + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" + } + }, + "Speckle.Sdk.Dependencies": { + "type": "CentralTransitive", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" + }, + "System.Threading.Tasks.Dataflow": { + "type": "CentralTransitive", + "requested": "[6.0.0, )", + "resolved": "6.0.0", + "contentHash": "+tyDCU3/B1lDdOOAJywHQoFwyXIUghIaP2BxG79uvhfTnO+D9qIgjVlL/JV2NTliYbMHpd6eKDmHp2VHpij7MA==" + } + } + } +} \ No newline at end of file diff --git a/Converters/Navisworks/Speckle.Converters.Navisworks2022/Speckle.Converters.Navisworks2022.csproj b/Converters/Navisworks/Speckle.Converters.Navisworks2022/Speckle.Converters.Navisworks2022.csproj new file mode 100644 index 000000000..c95f1af02 --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.Navisworks2022/Speckle.Converters.Navisworks2022.csproj @@ -0,0 +1,20 @@ + + + net48 + x64 + $(DefineConstants);NAVIS2022 + Debug;Release;Local + + + + + + + + + + + + + + diff --git a/Converters/Navisworks/Speckle.Converters.Navisworks2022/packages.lock.json b/Converters/Navisworks/Speckle.Converters.Navisworks2022/packages.lock.json new file mode 100644 index 000000000..a65080ed1 --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.Navisworks2022/packages.lock.json @@ -0,0 +1,359 @@ +{ + "version": 2, + "dependencies": { + ".NETFramework,Version=v4.8": { + "Microsoft.NETFramework.ReferenceAssemblies": { + "type": "Direct", + "requested": "[1.0.3, )", + "resolved": "1.0.3", + "contentHash": "vUc9Npcs14QsyOD01tnv/m8sQUnGTGOw1BCmKcv77LBJY7OxhJ+zJF7UD/sCL3lYNFuqmQEVlkfS4Quif6FyYg==", + "dependencies": { + "Microsoft.NETFramework.ReferenceAssemblies.net48": "1.0.3" + } + }, + "Microsoft.SourceLink.GitHub": { + "type": "Direct", + "requested": "[8.0.0, )", + "resolved": "8.0.0", + "contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==", + "dependencies": { + "Microsoft.Build.Tasks.Git": "8.0.0", + "Microsoft.SourceLink.Common": "8.0.0" + } + }, + "PolySharp": { + "type": "Direct", + "requested": "[1.14.1, )", + "resolved": "1.14.1", + "contentHash": "mOOmFYwad3MIOL14VCjj02LljyF1GNw1wP0YVlxtcPvqdxjGGMNdNJJxHptlry3MOd8b40Flm8RPOM8JOlN2sQ==" + }, + "Speckle.InterfaceGenerator": { + "type": "Direct", + "requested": "[0.9.6, )", + "resolved": "0.9.6", + "contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w==" + }, + "Speckle.Navisworks.API": { + "type": "Direct", + "requested": "[2022.0.0, )", + "resolved": "2022.0.0", + "contentHash": "x0RW4Iqw8YHVK4ZiLEyLLfI5ffuRBR0KhEvmy9ZpT8SLNeDL/c6jn+7JWBVFUJPu+ObVnU+KqJjLdHmphN0lMQ==" + }, + "GraphQL.Client": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "8yPNBbuVBpTptivyAlak4GZvbwbUcjeQTL4vN1HKHRuOykZ4r7l5fcLS6vpyPyLn0x8FsL31xbOIKyxbmR9rbA==", + "dependencies": { + "GraphQL.Client.Abstractions": "6.0.0", + "GraphQL.Client.Abstractions.Websocket": "6.0.0", + "System.Net.WebSockets.Client.Managed": "1.0.22", + "System.Reactive": "5.0.0" + } + }, + "GraphQL.Client.Abstractions": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "h7uzWFORHZ+CCjwr/ThAyXMr0DPpzEANDa4Uo54wqCQ+j7qUKwqYTgOrb1W40sqbvNaZm9v/X7It31SUw0maHA==", + "dependencies": { + "GraphQL.Primitives": "6.0.0" + } + }, + "GraphQL.Client.Abstractions.Websocket": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "Nr9bPf8gIOvLuXpqEpqr9z9jslYFJOvd0feHth3/kPqeR3uMbjF5pjiwh4jxyMcxHdr8Pb6QiXkV3hsSyt0v7A==", + "dependencies": { + "GraphQL.Client.Abstractions": "6.0.0" + } + }, + "GraphQL.Primitives": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "yg72rrYDapfsIUrul7aF6wwNnTJBOFvuA9VdDTQpPa8AlAriHbufeXYLBcodKjfUdkCnaiggX1U/nEP08Zb5GA==" + }, + "Microsoft.Bcl.AsyncInterfaces": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "W8DPQjkMScOMTtJbPwmPyj9c3zYSFGawDW3jwlBOOsnY+EzZFLgNQ/UMkK35JmkNOVPdCyPr2Tw7Vv9N+KA3ZQ==", + "dependencies": { + "System.Threading.Tasks.Extensions": "4.5.4" + } + }, + "Microsoft.Build.Tasks.Git": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ==" + }, + "Microsoft.CSharp": { + "type": "Transitive", + "resolved": "4.7.0", + "contentHash": "pTj+D3uJWyN3My70i2Hqo+OXixq3Os2D1nJ2x92FFo6sk8fYS1m1WLNTs0Dc1uPaViH0YvEEwvzddQ7y4rhXmA==" + }, + "Microsoft.Data.Sqlite": { + "type": "Transitive", + "resolved": "7.0.5", + "contentHash": "KGxbPeWsQMnmQy43DSBxAFtHz3l2JX8EWBSGUCvT3CuZ8KsuzbkqMIJMDOxWtG8eZSoCDI04aiVQjWuuV8HmSw==", + "dependencies": { + "Microsoft.Data.Sqlite.Core": "7.0.5", + "SQLitePCLRaw.bundle_e_sqlite3": "2.1.4" + } + }, + "Microsoft.Data.Sqlite.Core": { + "type": "Transitive", + "resolved": "7.0.5", + "contentHash": "FTerRmQPqHrCrnoUzhBu+E+1DNGwyrAMLqHkAqOOOu5pGfyMOj8qQUBxI/gDtWtG11p49UxSfWmBzRNlwZqfUg==", + "dependencies": { + "SQLitePCLRaw.core": "2.1.4" + } + }, + "Microsoft.Extensions.Configuration": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "nOP8R1mVb/6mZtm2qgAJXn/LFm/2kMjHDAg/QJLFG6CuWYJtaD3p1BwQhufBVvRzL9ceJ/xF0SQ0qsI2GkDQAA==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "2.2.0" + } + }, + "Microsoft.Extensions.Configuration.Abstractions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "65MrmXCziWaQFrI0UHkQbesrX5wTwf9XPjY5yFm/VkgJKFJ5gqvXRoXjIZcf2wLi5ZlwGz/oMYfyURVCWbM5iw==", + "dependencies": { + "Microsoft.Extensions.Primitives": "2.2.0" + } + }, + "Microsoft.Extensions.Configuration.Binder": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "vJ9xvOZCnUAIHcGC3SU35r3HKmHTVIeHzo6u/qzlHAqD8m6xv92MLin4oJntTvkpKxVX3vI1GFFkIQtU3AdlsQ==", + "dependencies": { + "Microsoft.Extensions.Configuration": "2.2.0" + } + }, + "Microsoft.Extensions.DependencyInjection.Abstractions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "f9hstgjVmr6rmrfGSpfsVOl2irKAgr1QjrSi3FgnS7kulxband50f2brRLwySAQTADPZeTdow0mpSMcoAdadCw==" + }, + "Microsoft.Extensions.Options": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "UpZLNLBpIZ0GTebShui7xXYh6DmBHjWM8NxGxZbdQh/bPZ5e6YswqI+bru6BnEL5eWiOdodsXtEz3FROcgi/qg==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Primitives": "2.2.0", + "System.ComponentModel.Annotations": "4.5.0" + } + }, + "Microsoft.Extensions.Primitives": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "azyQtqbm4fSaDzZHD/J+V6oWMFaf2tWP4WEGIYePLCMw3+b2RQdj9ybgbQyjCshcitQKQ4lEDOZjmSlTTrHxUg==", + "dependencies": { + "System.Memory": "4.5.1", + "System.Runtime.CompilerServices.Unsafe": "4.5.1" + } + }, + "Microsoft.NETFramework.ReferenceAssemblies.net48": { + "type": "Transitive", + "resolved": "1.0.3", + "contentHash": "zMk4D+9zyiEWByyQ7oPImPN/Jhpj166Ky0Nlla4eXlNL8hI/BtSJsgR8Inldd4NNpIAH3oh8yym0W2DrhXdSLQ==" + }, + "Microsoft.SourceLink.Common": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw==" + }, + "Speckle.DoubleNumerics": { + "type": "Transitive", + "resolved": "4.0.1", + "contentHash": "MzEQ1Im0zTja+tEsdRIk/WlPiKqb22NmTOJcR1ZKm/mz46pezyyID3/wRz6vJUELMpSLnG7LhsxBL+nxbr7V0w==" + }, + "Speckle.Newtonsoft.Json": { + "type": "Transitive", + "resolved": "13.0.2", + "contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA==" + }, + "SQLitePCLRaw.bundle_e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "EWI1olKDjFEBMJu0+3wuxwziIAdWDVMYLhuZ3Qs84rrz+DHwD00RzWPZCa+bLnHCf3oJwuFZIRsHT5p236QXww==", + "dependencies": { + "SQLitePCLRaw.lib.e_sqlite3": "2.1.4", + "SQLitePCLRaw.provider.dynamic_cdecl": "2.1.4" + } + }, + "SQLitePCLRaw.core": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "inBjvSHo9UDKneGNzfUfDjK08JzlcIhn1+SP5Y3m6cgXpCxXKCJDy6Mka7LpgSV+UZmKSnC8rTwB0SQ0xKu5pA==", + "dependencies": { + "System.Memory": "4.5.3" + } + }, + "SQLitePCLRaw.lib.e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "2C9Q9eX7CPLveJA0rIhf9RXAvu+7nWZu1A2MdG6SD/NOu26TakGgL1nsbc0JAspGijFOo3HoN79xrx8a368fBg==" + }, + "SQLitePCLRaw.provider.dynamic_cdecl": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "ZsaKKhgYF9B1fvcnOGKl3EycNAwd9CRWX7v0rEfuPWhQQ5Jjpvf2VEHahiLIGHio3hxi3EIKFJw9KvyowWOUAw==", + "dependencies": { + "SQLitePCLRaw.core": "2.1.4" + } + }, + "System.Buffers": { + "type": "Transitive", + "resolved": "4.4.0", + "contentHash": "AwarXzzoDwX6BgrhjoJsk6tUezZEozOT5Y9QKF94Gl4JK91I4PIIBkBco9068Y9/Dra8Dkbie99kXB8+1BaYKw==" + }, + "System.ComponentModel.Annotations": { + "type": "Transitive", + "resolved": "4.5.0", + "contentHash": "UxYQ3FGUOtzJ7LfSdnYSFd7+oEv6M8NgUatatIN2HxNtDdlcvFAf+VIq4Of9cDMJEJC0aSRv/x898RYhB4Yppg==" + }, + "System.Memory": { + "type": "Transitive", + "resolved": "4.5.3", + "contentHash": "3oDzvc/zzetpTKWMShs1AADwZjQ/36HnsufHRPcOjyRAAMLDlu2iD33MBI2opxnezcVUtXyqDXXjoFMOU9c7SA==", + "dependencies": { + "System.Buffers": "4.4.0", + "System.Numerics.Vectors": "4.4.0", + "System.Runtime.CompilerServices.Unsafe": "4.5.2" + } + }, + "System.Net.WebSockets.Client.Managed": { + "type": "Transitive", + "resolved": "1.0.22", + "contentHash": "WqEOxPlXjuZrIjUtXNE9NxEfU/n5E35iV2PtoZdJSUC4tlrqwHnTee+wvMIM4OUaJWmwrymeqcgYrE0IkGAgLA==", + "dependencies": { + "System.Buffers": "4.4.0", + "System.Numerics.Vectors": "4.4.0" + } + }, + "System.Numerics.Vectors": { + "type": "Transitive", + "resolved": "4.4.0", + "contentHash": "UiLzLW+Lw6HLed1Hcg+8jSRttrbuXv7DANVj0DkL9g6EnnzbL75EB7EWsw5uRbhxd/4YdG8li5XizGWepmG3PQ==" + }, + "System.Reactive": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ==", + "dependencies": { + "System.Threading.Tasks.Extensions": "4.5.4" + } + }, + "System.Runtime.CompilerServices.Unsafe": { + "type": "Transitive", + "resolved": "4.5.3", + "contentHash": "3TIsJhD1EiiT0w2CcDMN/iSSwnNnsrnbzeVHSKkaEgV85txMprmuO+Yq2AdSbeVGcg28pdNDTPK87tJhX7VFHw==" + }, + "System.Threading.Tasks.Extensions": { + "type": "Transitive", + "resolved": "4.5.4", + "contentHash": "zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg==", + "dependencies": { + "System.Runtime.CompilerServices.Unsafe": "4.5.3" + } + }, + "speckle.connectors.common": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", + "Speckle.Connectors.Logging": "[1.0.0, )", + "Speckle.Objects": "[3.1.0-dev.218, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" + } + }, + "speckle.connectors.dui": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", + "Speckle.Connectors.Common": "[1.0.0, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )", + "System.Threading.Tasks.Dataflow": "[6.0.0, )" + } + }, + "speckle.connectors.logging": { + "type": "Project" + }, + "speckle.converters.common": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", + "Speckle.Objects": "[3.1.0-dev.218, )" + } + }, + "Microsoft.Extensions.DependencyInjection": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "MZtBIwfDFork5vfjpJdG5g8wuJFt7d/y3LOSVVtDK/76wlbtz6cjltfKHqLx2TKVqTj5/c41t77m1+h20zqtPA==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0" + } + }, + "Microsoft.Extensions.Logging": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "Nxqhadc9FCmFHzU+fz3oc8sFlE6IadViYg8dfUdGzJZ2JUxnCsRghBhhOWdM4B2zSZqEc+0BjliBh/oNdRZuig==", + "dependencies": { + "Microsoft.Extensions.Configuration.Binder": "2.2.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging.Abstractions": "2.2.0", + "Microsoft.Extensions.Options": "2.2.0" + } + }, + "Microsoft.Extensions.Logging.Abstractions": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "B2WqEox8o+4KUOpL7rZPyh6qYjik8tHi2tN8Z9jZkHzED8ElYgZa/h6K+xliB435SqUcWT290Fr2aa8BtZjn8A==" + }, + "Speckle.Objects": { + "type": "CentralTransitive", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", + "dependencies": { + "Speckle.Sdk": "3.1.0-dev.218" + } + }, + "Speckle.Sdk": { + "type": "CentralTransitive", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", + "dependencies": { + "GraphQL.Client": "6.0.0", + "Microsoft.Bcl.AsyncInterfaces": "5.0.0", + "Microsoft.CSharp": "4.7.0", + "Microsoft.Data.Sqlite": "7.0.5", + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging": "2.2.0", + "Speckle.DoubleNumerics": "4.0.1", + "Speckle.Newtonsoft.Json": "13.0.2", + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" + } + }, + "Speckle.Sdk.Dependencies": { + "type": "CentralTransitive", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" + }, + "System.Threading.Tasks.Dataflow": { + "type": "CentralTransitive", + "requested": "[6.0.0, )", + "resolved": "6.0.0", + "contentHash": "+tyDCU3/B1lDdOOAJywHQoFwyXIUghIaP2BxG79uvhfTnO+D9qIgjVlL/JV2NTliYbMHpd6eKDmHp2VHpij7MA==" + } + } + } +} \ No newline at end of file diff --git a/Converters/Navisworks/Speckle.Converters.Navisworks2023/Speckle.Converters.Navisworks2023.csproj b/Converters/Navisworks/Speckle.Converters.Navisworks2023/Speckle.Converters.Navisworks2023.csproj new file mode 100644 index 000000000..e81f35e97 --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.Navisworks2023/Speckle.Converters.Navisworks2023.csproj @@ -0,0 +1,20 @@ + + + net48 + x64 + $(DefineConstants);NAVIS2023 + Debug;Release;Local + + + + + + + + + + + + + + diff --git a/Converters/Navisworks/Speckle.Converters.Navisworks2023/packages.lock.json b/Converters/Navisworks/Speckle.Converters.Navisworks2023/packages.lock.json new file mode 100644 index 000000000..8d7228f42 --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.Navisworks2023/packages.lock.json @@ -0,0 +1,359 @@ +{ + "version": 2, + "dependencies": { + ".NETFramework,Version=v4.8": { + "Microsoft.NETFramework.ReferenceAssemblies": { + "type": "Direct", + "requested": "[1.0.3, )", + "resolved": "1.0.3", + "contentHash": "vUc9Npcs14QsyOD01tnv/m8sQUnGTGOw1BCmKcv77LBJY7OxhJ+zJF7UD/sCL3lYNFuqmQEVlkfS4Quif6FyYg==", + "dependencies": { + "Microsoft.NETFramework.ReferenceAssemblies.net48": "1.0.3" + } + }, + "Microsoft.SourceLink.GitHub": { + "type": "Direct", + "requested": "[8.0.0, )", + "resolved": "8.0.0", + "contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==", + "dependencies": { + "Microsoft.Build.Tasks.Git": "8.0.0", + "Microsoft.SourceLink.Common": "8.0.0" + } + }, + "PolySharp": { + "type": "Direct", + "requested": "[1.14.1, )", + "resolved": "1.14.1", + "contentHash": "mOOmFYwad3MIOL14VCjj02LljyF1GNw1wP0YVlxtcPvqdxjGGMNdNJJxHptlry3MOd8b40Flm8RPOM8JOlN2sQ==" + }, + "Speckle.InterfaceGenerator": { + "type": "Direct", + "requested": "[0.9.6, )", + "resolved": "0.9.6", + "contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w==" + }, + "Speckle.Navisworks.API": { + "type": "Direct", + "requested": "[2023.0.0, )", + "resolved": "2023.0.0", + "contentHash": "+qRmcyLD3DpuSSwX2IbEwp0gJllbiKgv313PZfEfh8I2uvxf+5YNqDzY0OGOxWIdPKqaQmdUZ1ELzoDtucCWzA==" + }, + "GraphQL.Client": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "8yPNBbuVBpTptivyAlak4GZvbwbUcjeQTL4vN1HKHRuOykZ4r7l5fcLS6vpyPyLn0x8FsL31xbOIKyxbmR9rbA==", + "dependencies": { + "GraphQL.Client.Abstractions": "6.0.0", + "GraphQL.Client.Abstractions.Websocket": "6.0.0", + "System.Net.WebSockets.Client.Managed": "1.0.22", + "System.Reactive": "5.0.0" + } + }, + "GraphQL.Client.Abstractions": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "h7uzWFORHZ+CCjwr/ThAyXMr0DPpzEANDa4Uo54wqCQ+j7qUKwqYTgOrb1W40sqbvNaZm9v/X7It31SUw0maHA==", + "dependencies": { + "GraphQL.Primitives": "6.0.0" + } + }, + "GraphQL.Client.Abstractions.Websocket": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "Nr9bPf8gIOvLuXpqEpqr9z9jslYFJOvd0feHth3/kPqeR3uMbjF5pjiwh4jxyMcxHdr8Pb6QiXkV3hsSyt0v7A==", + "dependencies": { + "GraphQL.Client.Abstractions": "6.0.0" + } + }, + "GraphQL.Primitives": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "yg72rrYDapfsIUrul7aF6wwNnTJBOFvuA9VdDTQpPa8AlAriHbufeXYLBcodKjfUdkCnaiggX1U/nEP08Zb5GA==" + }, + "Microsoft.Bcl.AsyncInterfaces": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "W8DPQjkMScOMTtJbPwmPyj9c3zYSFGawDW3jwlBOOsnY+EzZFLgNQ/UMkK35JmkNOVPdCyPr2Tw7Vv9N+KA3ZQ==", + "dependencies": { + "System.Threading.Tasks.Extensions": "4.5.4" + } + }, + "Microsoft.Build.Tasks.Git": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ==" + }, + "Microsoft.CSharp": { + "type": "Transitive", + "resolved": "4.7.0", + "contentHash": "pTj+D3uJWyN3My70i2Hqo+OXixq3Os2D1nJ2x92FFo6sk8fYS1m1WLNTs0Dc1uPaViH0YvEEwvzddQ7y4rhXmA==" + }, + "Microsoft.Data.Sqlite": { + "type": "Transitive", + "resolved": "7.0.5", + "contentHash": "KGxbPeWsQMnmQy43DSBxAFtHz3l2JX8EWBSGUCvT3CuZ8KsuzbkqMIJMDOxWtG8eZSoCDI04aiVQjWuuV8HmSw==", + "dependencies": { + "Microsoft.Data.Sqlite.Core": "7.0.5", + "SQLitePCLRaw.bundle_e_sqlite3": "2.1.4" + } + }, + "Microsoft.Data.Sqlite.Core": { + "type": "Transitive", + "resolved": "7.0.5", + "contentHash": "FTerRmQPqHrCrnoUzhBu+E+1DNGwyrAMLqHkAqOOOu5pGfyMOj8qQUBxI/gDtWtG11p49UxSfWmBzRNlwZqfUg==", + "dependencies": { + "SQLitePCLRaw.core": "2.1.4" + } + }, + "Microsoft.Extensions.Configuration": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "nOP8R1mVb/6mZtm2qgAJXn/LFm/2kMjHDAg/QJLFG6CuWYJtaD3p1BwQhufBVvRzL9ceJ/xF0SQ0qsI2GkDQAA==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "2.2.0" + } + }, + "Microsoft.Extensions.Configuration.Abstractions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "65MrmXCziWaQFrI0UHkQbesrX5wTwf9XPjY5yFm/VkgJKFJ5gqvXRoXjIZcf2wLi5ZlwGz/oMYfyURVCWbM5iw==", + "dependencies": { + "Microsoft.Extensions.Primitives": "2.2.0" + } + }, + "Microsoft.Extensions.Configuration.Binder": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "vJ9xvOZCnUAIHcGC3SU35r3HKmHTVIeHzo6u/qzlHAqD8m6xv92MLin4oJntTvkpKxVX3vI1GFFkIQtU3AdlsQ==", + "dependencies": { + "Microsoft.Extensions.Configuration": "2.2.0" + } + }, + "Microsoft.Extensions.DependencyInjection.Abstractions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "f9hstgjVmr6rmrfGSpfsVOl2irKAgr1QjrSi3FgnS7kulxband50f2brRLwySAQTADPZeTdow0mpSMcoAdadCw==" + }, + "Microsoft.Extensions.Options": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "UpZLNLBpIZ0GTebShui7xXYh6DmBHjWM8NxGxZbdQh/bPZ5e6YswqI+bru6BnEL5eWiOdodsXtEz3FROcgi/qg==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Primitives": "2.2.0", + "System.ComponentModel.Annotations": "4.5.0" + } + }, + "Microsoft.Extensions.Primitives": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "azyQtqbm4fSaDzZHD/J+V6oWMFaf2tWP4WEGIYePLCMw3+b2RQdj9ybgbQyjCshcitQKQ4lEDOZjmSlTTrHxUg==", + "dependencies": { + "System.Memory": "4.5.1", + "System.Runtime.CompilerServices.Unsafe": "4.5.1" + } + }, + "Microsoft.NETFramework.ReferenceAssemblies.net48": { + "type": "Transitive", + "resolved": "1.0.3", + "contentHash": "zMk4D+9zyiEWByyQ7oPImPN/Jhpj166Ky0Nlla4eXlNL8hI/BtSJsgR8Inldd4NNpIAH3oh8yym0W2DrhXdSLQ==" + }, + "Microsoft.SourceLink.Common": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw==" + }, + "Speckle.DoubleNumerics": { + "type": "Transitive", + "resolved": "4.0.1", + "contentHash": "MzEQ1Im0zTja+tEsdRIk/WlPiKqb22NmTOJcR1ZKm/mz46pezyyID3/wRz6vJUELMpSLnG7LhsxBL+nxbr7V0w==" + }, + "Speckle.Newtonsoft.Json": { + "type": "Transitive", + "resolved": "13.0.2", + "contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA==" + }, + "SQLitePCLRaw.bundle_e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "EWI1olKDjFEBMJu0+3wuxwziIAdWDVMYLhuZ3Qs84rrz+DHwD00RzWPZCa+bLnHCf3oJwuFZIRsHT5p236QXww==", + "dependencies": { + "SQLitePCLRaw.lib.e_sqlite3": "2.1.4", + "SQLitePCLRaw.provider.dynamic_cdecl": "2.1.4" + } + }, + "SQLitePCLRaw.core": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "inBjvSHo9UDKneGNzfUfDjK08JzlcIhn1+SP5Y3m6cgXpCxXKCJDy6Mka7LpgSV+UZmKSnC8rTwB0SQ0xKu5pA==", + "dependencies": { + "System.Memory": "4.5.3" + } + }, + "SQLitePCLRaw.lib.e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "2C9Q9eX7CPLveJA0rIhf9RXAvu+7nWZu1A2MdG6SD/NOu26TakGgL1nsbc0JAspGijFOo3HoN79xrx8a368fBg==" + }, + "SQLitePCLRaw.provider.dynamic_cdecl": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "ZsaKKhgYF9B1fvcnOGKl3EycNAwd9CRWX7v0rEfuPWhQQ5Jjpvf2VEHahiLIGHio3hxi3EIKFJw9KvyowWOUAw==", + "dependencies": { + "SQLitePCLRaw.core": "2.1.4" + } + }, + "System.Buffers": { + "type": "Transitive", + "resolved": "4.4.0", + "contentHash": "AwarXzzoDwX6BgrhjoJsk6tUezZEozOT5Y9QKF94Gl4JK91I4PIIBkBco9068Y9/Dra8Dkbie99kXB8+1BaYKw==" + }, + "System.ComponentModel.Annotations": { + "type": "Transitive", + "resolved": "4.5.0", + "contentHash": "UxYQ3FGUOtzJ7LfSdnYSFd7+oEv6M8NgUatatIN2HxNtDdlcvFAf+VIq4Of9cDMJEJC0aSRv/x898RYhB4Yppg==" + }, + "System.Memory": { + "type": "Transitive", + "resolved": "4.5.3", + "contentHash": "3oDzvc/zzetpTKWMShs1AADwZjQ/36HnsufHRPcOjyRAAMLDlu2iD33MBI2opxnezcVUtXyqDXXjoFMOU9c7SA==", + "dependencies": { + "System.Buffers": "4.4.0", + "System.Numerics.Vectors": "4.4.0", + "System.Runtime.CompilerServices.Unsafe": "4.5.2" + } + }, + "System.Net.WebSockets.Client.Managed": { + "type": "Transitive", + "resolved": "1.0.22", + "contentHash": "WqEOxPlXjuZrIjUtXNE9NxEfU/n5E35iV2PtoZdJSUC4tlrqwHnTee+wvMIM4OUaJWmwrymeqcgYrE0IkGAgLA==", + "dependencies": { + "System.Buffers": "4.4.0", + "System.Numerics.Vectors": "4.4.0" + } + }, + "System.Numerics.Vectors": { + "type": "Transitive", + "resolved": "4.4.0", + "contentHash": "UiLzLW+Lw6HLed1Hcg+8jSRttrbuXv7DANVj0DkL9g6EnnzbL75EB7EWsw5uRbhxd/4YdG8li5XizGWepmG3PQ==" + }, + "System.Reactive": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ==", + "dependencies": { + "System.Threading.Tasks.Extensions": "4.5.4" + } + }, + "System.Runtime.CompilerServices.Unsafe": { + "type": "Transitive", + "resolved": "4.5.3", + "contentHash": "3TIsJhD1EiiT0w2CcDMN/iSSwnNnsrnbzeVHSKkaEgV85txMprmuO+Yq2AdSbeVGcg28pdNDTPK87tJhX7VFHw==" + }, + "System.Threading.Tasks.Extensions": { + "type": "Transitive", + "resolved": "4.5.4", + "contentHash": "zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg==", + "dependencies": { + "System.Runtime.CompilerServices.Unsafe": "4.5.3" + } + }, + "speckle.connectors.common": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", + "Speckle.Connectors.Logging": "[1.0.0, )", + "Speckle.Objects": "[3.1.0-dev.218, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" + } + }, + "speckle.connectors.dui": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", + "Speckle.Connectors.Common": "[1.0.0, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )", + "System.Threading.Tasks.Dataflow": "[6.0.0, )" + } + }, + "speckle.connectors.logging": { + "type": "Project" + }, + "speckle.converters.common": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", + "Speckle.Objects": "[3.1.0-dev.218, )" + } + }, + "Microsoft.Extensions.DependencyInjection": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "MZtBIwfDFork5vfjpJdG5g8wuJFt7d/y3LOSVVtDK/76wlbtz6cjltfKHqLx2TKVqTj5/c41t77m1+h20zqtPA==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0" + } + }, + "Microsoft.Extensions.Logging": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "Nxqhadc9FCmFHzU+fz3oc8sFlE6IadViYg8dfUdGzJZ2JUxnCsRghBhhOWdM4B2zSZqEc+0BjliBh/oNdRZuig==", + "dependencies": { + "Microsoft.Extensions.Configuration.Binder": "2.2.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging.Abstractions": "2.2.0", + "Microsoft.Extensions.Options": "2.2.0" + } + }, + "Microsoft.Extensions.Logging.Abstractions": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "B2WqEox8o+4KUOpL7rZPyh6qYjik8tHi2tN8Z9jZkHzED8ElYgZa/h6K+xliB435SqUcWT290Fr2aa8BtZjn8A==" + }, + "Speckle.Objects": { + "type": "CentralTransitive", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", + "dependencies": { + "Speckle.Sdk": "3.1.0-dev.218" + } + }, + "Speckle.Sdk": { + "type": "CentralTransitive", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", + "dependencies": { + "GraphQL.Client": "6.0.0", + "Microsoft.Bcl.AsyncInterfaces": "5.0.0", + "Microsoft.CSharp": "4.7.0", + "Microsoft.Data.Sqlite": "7.0.5", + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging": "2.2.0", + "Speckle.DoubleNumerics": "4.0.1", + "Speckle.Newtonsoft.Json": "13.0.2", + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" + } + }, + "Speckle.Sdk.Dependencies": { + "type": "CentralTransitive", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" + }, + "System.Threading.Tasks.Dataflow": { + "type": "CentralTransitive", + "requested": "[6.0.0, )", + "resolved": "6.0.0", + "contentHash": "+tyDCU3/B1lDdOOAJywHQoFwyXIUghIaP2BxG79uvhfTnO+D9qIgjVlL/JV2NTliYbMHpd6eKDmHp2VHpij7MA==" + } + } + } +} \ No newline at end of file diff --git a/Converters/Navisworks/Speckle.Converters.Navisworks2024/Speckle.Converters.Navisworks2024.csproj b/Converters/Navisworks/Speckle.Converters.Navisworks2024/Speckle.Converters.Navisworks2024.csproj new file mode 100644 index 000000000..4b10afb81 --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.Navisworks2024/Speckle.Converters.Navisworks2024.csproj @@ -0,0 +1,20 @@ + + + net48 + x64 + $(DefineConstants);NAVIS2024 + Debug;Release;Local + + + + + + + + + + + + + + diff --git a/Converters/Navisworks/Speckle.Converters.Navisworks2024/packages.lock.json b/Converters/Navisworks/Speckle.Converters.Navisworks2024/packages.lock.json new file mode 100644 index 000000000..d18eea0e3 --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.Navisworks2024/packages.lock.json @@ -0,0 +1,359 @@ +{ + "version": 2, + "dependencies": { + ".NETFramework,Version=v4.8": { + "Microsoft.NETFramework.ReferenceAssemblies": { + "type": "Direct", + "requested": "[1.0.3, )", + "resolved": "1.0.3", + "contentHash": "vUc9Npcs14QsyOD01tnv/m8sQUnGTGOw1BCmKcv77LBJY7OxhJ+zJF7UD/sCL3lYNFuqmQEVlkfS4Quif6FyYg==", + "dependencies": { + "Microsoft.NETFramework.ReferenceAssemblies.net48": "1.0.3" + } + }, + "Microsoft.SourceLink.GitHub": { + "type": "Direct", + "requested": "[8.0.0, )", + "resolved": "8.0.0", + "contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==", + "dependencies": { + "Microsoft.Build.Tasks.Git": "8.0.0", + "Microsoft.SourceLink.Common": "8.0.0" + } + }, + "PolySharp": { + "type": "Direct", + "requested": "[1.14.1, )", + "resolved": "1.14.1", + "contentHash": "mOOmFYwad3MIOL14VCjj02LljyF1GNw1wP0YVlxtcPvqdxjGGMNdNJJxHptlry3MOd8b40Flm8RPOM8JOlN2sQ==" + }, + "Speckle.InterfaceGenerator": { + "type": "Direct", + "requested": "[0.9.6, )", + "resolved": "0.9.6", + "contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w==" + }, + "Speckle.Navisworks.API": { + "type": "Direct", + "requested": "[2024.0.0, )", + "resolved": "2024.0.0", + "contentHash": "SnkvhcENMy3YLWbzy4lCweMuWdAbNzAtwvffFH2xVHmnm/2INnMGucYGazAHN496d6wgl9YRGa4qftgVsg7T7A==" + }, + "GraphQL.Client": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "8yPNBbuVBpTptivyAlak4GZvbwbUcjeQTL4vN1HKHRuOykZ4r7l5fcLS6vpyPyLn0x8FsL31xbOIKyxbmR9rbA==", + "dependencies": { + "GraphQL.Client.Abstractions": "6.0.0", + "GraphQL.Client.Abstractions.Websocket": "6.0.0", + "System.Net.WebSockets.Client.Managed": "1.0.22", + "System.Reactive": "5.0.0" + } + }, + "GraphQL.Client.Abstractions": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "h7uzWFORHZ+CCjwr/ThAyXMr0DPpzEANDa4Uo54wqCQ+j7qUKwqYTgOrb1W40sqbvNaZm9v/X7It31SUw0maHA==", + "dependencies": { + "GraphQL.Primitives": "6.0.0" + } + }, + "GraphQL.Client.Abstractions.Websocket": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "Nr9bPf8gIOvLuXpqEpqr9z9jslYFJOvd0feHth3/kPqeR3uMbjF5pjiwh4jxyMcxHdr8Pb6QiXkV3hsSyt0v7A==", + "dependencies": { + "GraphQL.Client.Abstractions": "6.0.0" + } + }, + "GraphQL.Primitives": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "yg72rrYDapfsIUrul7aF6wwNnTJBOFvuA9VdDTQpPa8AlAriHbufeXYLBcodKjfUdkCnaiggX1U/nEP08Zb5GA==" + }, + "Microsoft.Bcl.AsyncInterfaces": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "W8DPQjkMScOMTtJbPwmPyj9c3zYSFGawDW3jwlBOOsnY+EzZFLgNQ/UMkK35JmkNOVPdCyPr2Tw7Vv9N+KA3ZQ==", + "dependencies": { + "System.Threading.Tasks.Extensions": "4.5.4" + } + }, + "Microsoft.Build.Tasks.Git": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ==" + }, + "Microsoft.CSharp": { + "type": "Transitive", + "resolved": "4.7.0", + "contentHash": "pTj+D3uJWyN3My70i2Hqo+OXixq3Os2D1nJ2x92FFo6sk8fYS1m1WLNTs0Dc1uPaViH0YvEEwvzddQ7y4rhXmA==" + }, + "Microsoft.Data.Sqlite": { + "type": "Transitive", + "resolved": "7.0.5", + "contentHash": "KGxbPeWsQMnmQy43DSBxAFtHz3l2JX8EWBSGUCvT3CuZ8KsuzbkqMIJMDOxWtG8eZSoCDI04aiVQjWuuV8HmSw==", + "dependencies": { + "Microsoft.Data.Sqlite.Core": "7.0.5", + "SQLitePCLRaw.bundle_e_sqlite3": "2.1.4" + } + }, + "Microsoft.Data.Sqlite.Core": { + "type": "Transitive", + "resolved": "7.0.5", + "contentHash": "FTerRmQPqHrCrnoUzhBu+E+1DNGwyrAMLqHkAqOOOu5pGfyMOj8qQUBxI/gDtWtG11p49UxSfWmBzRNlwZqfUg==", + "dependencies": { + "SQLitePCLRaw.core": "2.1.4" + } + }, + "Microsoft.Extensions.Configuration": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "nOP8R1mVb/6mZtm2qgAJXn/LFm/2kMjHDAg/QJLFG6CuWYJtaD3p1BwQhufBVvRzL9ceJ/xF0SQ0qsI2GkDQAA==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "2.2.0" + } + }, + "Microsoft.Extensions.Configuration.Abstractions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "65MrmXCziWaQFrI0UHkQbesrX5wTwf9XPjY5yFm/VkgJKFJ5gqvXRoXjIZcf2wLi5ZlwGz/oMYfyURVCWbM5iw==", + "dependencies": { + "Microsoft.Extensions.Primitives": "2.2.0" + } + }, + "Microsoft.Extensions.Configuration.Binder": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "vJ9xvOZCnUAIHcGC3SU35r3HKmHTVIeHzo6u/qzlHAqD8m6xv92MLin4oJntTvkpKxVX3vI1GFFkIQtU3AdlsQ==", + "dependencies": { + "Microsoft.Extensions.Configuration": "2.2.0" + } + }, + "Microsoft.Extensions.DependencyInjection.Abstractions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "f9hstgjVmr6rmrfGSpfsVOl2irKAgr1QjrSi3FgnS7kulxband50f2brRLwySAQTADPZeTdow0mpSMcoAdadCw==" + }, + "Microsoft.Extensions.Options": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "UpZLNLBpIZ0GTebShui7xXYh6DmBHjWM8NxGxZbdQh/bPZ5e6YswqI+bru6BnEL5eWiOdodsXtEz3FROcgi/qg==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Primitives": "2.2.0", + "System.ComponentModel.Annotations": "4.5.0" + } + }, + "Microsoft.Extensions.Primitives": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "azyQtqbm4fSaDzZHD/J+V6oWMFaf2tWP4WEGIYePLCMw3+b2RQdj9ybgbQyjCshcitQKQ4lEDOZjmSlTTrHxUg==", + "dependencies": { + "System.Memory": "4.5.1", + "System.Runtime.CompilerServices.Unsafe": "4.5.1" + } + }, + "Microsoft.NETFramework.ReferenceAssemblies.net48": { + "type": "Transitive", + "resolved": "1.0.3", + "contentHash": "zMk4D+9zyiEWByyQ7oPImPN/Jhpj166Ky0Nlla4eXlNL8hI/BtSJsgR8Inldd4NNpIAH3oh8yym0W2DrhXdSLQ==" + }, + "Microsoft.SourceLink.Common": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw==" + }, + "Speckle.DoubleNumerics": { + "type": "Transitive", + "resolved": "4.0.1", + "contentHash": "MzEQ1Im0zTja+tEsdRIk/WlPiKqb22NmTOJcR1ZKm/mz46pezyyID3/wRz6vJUELMpSLnG7LhsxBL+nxbr7V0w==" + }, + "Speckle.Newtonsoft.Json": { + "type": "Transitive", + "resolved": "13.0.2", + "contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA==" + }, + "SQLitePCLRaw.bundle_e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "EWI1olKDjFEBMJu0+3wuxwziIAdWDVMYLhuZ3Qs84rrz+DHwD00RzWPZCa+bLnHCf3oJwuFZIRsHT5p236QXww==", + "dependencies": { + "SQLitePCLRaw.lib.e_sqlite3": "2.1.4", + "SQLitePCLRaw.provider.dynamic_cdecl": "2.1.4" + } + }, + "SQLitePCLRaw.core": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "inBjvSHo9UDKneGNzfUfDjK08JzlcIhn1+SP5Y3m6cgXpCxXKCJDy6Mka7LpgSV+UZmKSnC8rTwB0SQ0xKu5pA==", + "dependencies": { + "System.Memory": "4.5.3" + } + }, + "SQLitePCLRaw.lib.e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "2C9Q9eX7CPLveJA0rIhf9RXAvu+7nWZu1A2MdG6SD/NOu26TakGgL1nsbc0JAspGijFOo3HoN79xrx8a368fBg==" + }, + "SQLitePCLRaw.provider.dynamic_cdecl": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "ZsaKKhgYF9B1fvcnOGKl3EycNAwd9CRWX7v0rEfuPWhQQ5Jjpvf2VEHahiLIGHio3hxi3EIKFJw9KvyowWOUAw==", + "dependencies": { + "SQLitePCLRaw.core": "2.1.4" + } + }, + "System.Buffers": { + "type": "Transitive", + "resolved": "4.4.0", + "contentHash": "AwarXzzoDwX6BgrhjoJsk6tUezZEozOT5Y9QKF94Gl4JK91I4PIIBkBco9068Y9/Dra8Dkbie99kXB8+1BaYKw==" + }, + "System.ComponentModel.Annotations": { + "type": "Transitive", + "resolved": "4.5.0", + "contentHash": "UxYQ3FGUOtzJ7LfSdnYSFd7+oEv6M8NgUatatIN2HxNtDdlcvFAf+VIq4Of9cDMJEJC0aSRv/x898RYhB4Yppg==" + }, + "System.Memory": { + "type": "Transitive", + "resolved": "4.5.3", + "contentHash": "3oDzvc/zzetpTKWMShs1AADwZjQ/36HnsufHRPcOjyRAAMLDlu2iD33MBI2opxnezcVUtXyqDXXjoFMOU9c7SA==", + "dependencies": { + "System.Buffers": "4.4.0", + "System.Numerics.Vectors": "4.4.0", + "System.Runtime.CompilerServices.Unsafe": "4.5.2" + } + }, + "System.Net.WebSockets.Client.Managed": { + "type": "Transitive", + "resolved": "1.0.22", + "contentHash": "WqEOxPlXjuZrIjUtXNE9NxEfU/n5E35iV2PtoZdJSUC4tlrqwHnTee+wvMIM4OUaJWmwrymeqcgYrE0IkGAgLA==", + "dependencies": { + "System.Buffers": "4.4.0", + "System.Numerics.Vectors": "4.4.0" + } + }, + "System.Numerics.Vectors": { + "type": "Transitive", + "resolved": "4.4.0", + "contentHash": "UiLzLW+Lw6HLed1Hcg+8jSRttrbuXv7DANVj0DkL9g6EnnzbL75EB7EWsw5uRbhxd/4YdG8li5XizGWepmG3PQ==" + }, + "System.Reactive": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ==", + "dependencies": { + "System.Threading.Tasks.Extensions": "4.5.4" + } + }, + "System.Runtime.CompilerServices.Unsafe": { + "type": "Transitive", + "resolved": "4.5.3", + "contentHash": "3TIsJhD1EiiT0w2CcDMN/iSSwnNnsrnbzeVHSKkaEgV85txMprmuO+Yq2AdSbeVGcg28pdNDTPK87tJhX7VFHw==" + }, + "System.Threading.Tasks.Extensions": { + "type": "Transitive", + "resolved": "4.5.4", + "contentHash": "zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg==", + "dependencies": { + "System.Runtime.CompilerServices.Unsafe": "4.5.3" + } + }, + "speckle.connectors.common": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", + "Speckle.Connectors.Logging": "[1.0.0, )", + "Speckle.Objects": "[3.1.0-dev.218, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" + } + }, + "speckle.connectors.dui": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", + "Speckle.Connectors.Common": "[1.0.0, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )", + "System.Threading.Tasks.Dataflow": "[6.0.0, )" + } + }, + "speckle.connectors.logging": { + "type": "Project" + }, + "speckle.converters.common": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", + "Speckle.Objects": "[3.1.0-dev.218, )" + } + }, + "Microsoft.Extensions.DependencyInjection": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "MZtBIwfDFork5vfjpJdG5g8wuJFt7d/y3LOSVVtDK/76wlbtz6cjltfKHqLx2TKVqTj5/c41t77m1+h20zqtPA==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0" + } + }, + "Microsoft.Extensions.Logging": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "Nxqhadc9FCmFHzU+fz3oc8sFlE6IadViYg8dfUdGzJZ2JUxnCsRghBhhOWdM4B2zSZqEc+0BjliBh/oNdRZuig==", + "dependencies": { + "Microsoft.Extensions.Configuration.Binder": "2.2.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging.Abstractions": "2.2.0", + "Microsoft.Extensions.Options": "2.2.0" + } + }, + "Microsoft.Extensions.Logging.Abstractions": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "B2WqEox8o+4KUOpL7rZPyh6qYjik8tHi2tN8Z9jZkHzED8ElYgZa/h6K+xliB435SqUcWT290Fr2aa8BtZjn8A==" + }, + "Speckle.Objects": { + "type": "CentralTransitive", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", + "dependencies": { + "Speckle.Sdk": "3.1.0-dev.218" + } + }, + "Speckle.Sdk": { + "type": "CentralTransitive", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", + "dependencies": { + "GraphQL.Client": "6.0.0", + "Microsoft.Bcl.AsyncInterfaces": "5.0.0", + "Microsoft.CSharp": "4.7.0", + "Microsoft.Data.Sqlite": "7.0.5", + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging": "2.2.0", + "Speckle.DoubleNumerics": "4.0.1", + "Speckle.Newtonsoft.Json": "13.0.2", + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" + } + }, + "Speckle.Sdk.Dependencies": { + "type": "CentralTransitive", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" + }, + "System.Threading.Tasks.Dataflow": { + "type": "CentralTransitive", + "requested": "[6.0.0, )", + "resolved": "6.0.0", + "contentHash": "+tyDCU3/B1lDdOOAJywHQoFwyXIUghIaP2BxG79uvhfTnO+D9qIgjVlL/JV2NTliYbMHpd6eKDmHp2VHpij7MA==" + } + } + } +} \ No newline at end of file diff --git a/Converters/Navisworks/Speckle.Converters.Navisworks2025/Speckle.Converters.Navisworks2025.csproj b/Converters/Navisworks/Speckle.Converters.Navisworks2025/Speckle.Converters.Navisworks2025.csproj new file mode 100644 index 000000000..0ef228dda --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.Navisworks2025/Speckle.Converters.Navisworks2025.csproj @@ -0,0 +1,20 @@ + + + net48 + x64 + $(DefineConstants);NAVIS2025 + Debug;Release;Local + + + + + + + + + + + + + + diff --git a/Converters/Navisworks/Speckle.Converters.Navisworks2025/packages.lock.json b/Converters/Navisworks/Speckle.Converters.Navisworks2025/packages.lock.json new file mode 100644 index 000000000..a80b0e7e9 --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.Navisworks2025/packages.lock.json @@ -0,0 +1,359 @@ +{ + "version": 2, + "dependencies": { + ".NETFramework,Version=v4.8": { + "Microsoft.NETFramework.ReferenceAssemblies": { + "type": "Direct", + "requested": "[1.0.3, )", + "resolved": "1.0.3", + "contentHash": "vUc9Npcs14QsyOD01tnv/m8sQUnGTGOw1BCmKcv77LBJY7OxhJ+zJF7UD/sCL3lYNFuqmQEVlkfS4Quif6FyYg==", + "dependencies": { + "Microsoft.NETFramework.ReferenceAssemblies.net48": "1.0.3" + } + }, + "Microsoft.SourceLink.GitHub": { + "type": "Direct", + "requested": "[8.0.0, )", + "resolved": "8.0.0", + "contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==", + "dependencies": { + "Microsoft.Build.Tasks.Git": "8.0.0", + "Microsoft.SourceLink.Common": "8.0.0" + } + }, + "PolySharp": { + "type": "Direct", + "requested": "[1.14.1, )", + "resolved": "1.14.1", + "contentHash": "mOOmFYwad3MIOL14VCjj02LljyF1GNw1wP0YVlxtcPvqdxjGGMNdNJJxHptlry3MOd8b40Flm8RPOM8JOlN2sQ==" + }, + "Speckle.InterfaceGenerator": { + "type": "Direct", + "requested": "[0.9.6, )", + "resolved": "0.9.6", + "contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w==" + }, + "Speckle.Navisworks.API": { + "type": "Direct", + "requested": "[2025.0.0, )", + "resolved": "2025.0.0", + "contentHash": "+q2IObnUGqtC1O/ddy2p0HKm1eXRo7Yi80oD9VIWClidvGb3rVsXKZWBHiv4HwSn5JcOMSEt1cdSlRQLm8Ehjg==" + }, + "GraphQL.Client": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "8yPNBbuVBpTptivyAlak4GZvbwbUcjeQTL4vN1HKHRuOykZ4r7l5fcLS6vpyPyLn0x8FsL31xbOIKyxbmR9rbA==", + "dependencies": { + "GraphQL.Client.Abstractions": "6.0.0", + "GraphQL.Client.Abstractions.Websocket": "6.0.0", + "System.Net.WebSockets.Client.Managed": "1.0.22", + "System.Reactive": "5.0.0" + } + }, + "GraphQL.Client.Abstractions": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "h7uzWFORHZ+CCjwr/ThAyXMr0DPpzEANDa4Uo54wqCQ+j7qUKwqYTgOrb1W40sqbvNaZm9v/X7It31SUw0maHA==", + "dependencies": { + "GraphQL.Primitives": "6.0.0" + } + }, + "GraphQL.Client.Abstractions.Websocket": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "Nr9bPf8gIOvLuXpqEpqr9z9jslYFJOvd0feHth3/kPqeR3uMbjF5pjiwh4jxyMcxHdr8Pb6QiXkV3hsSyt0v7A==", + "dependencies": { + "GraphQL.Client.Abstractions": "6.0.0" + } + }, + "GraphQL.Primitives": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "yg72rrYDapfsIUrul7aF6wwNnTJBOFvuA9VdDTQpPa8AlAriHbufeXYLBcodKjfUdkCnaiggX1U/nEP08Zb5GA==" + }, + "Microsoft.Bcl.AsyncInterfaces": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "W8DPQjkMScOMTtJbPwmPyj9c3zYSFGawDW3jwlBOOsnY+EzZFLgNQ/UMkK35JmkNOVPdCyPr2Tw7Vv9N+KA3ZQ==", + "dependencies": { + "System.Threading.Tasks.Extensions": "4.5.4" + } + }, + "Microsoft.Build.Tasks.Git": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ==" + }, + "Microsoft.CSharp": { + "type": "Transitive", + "resolved": "4.7.0", + "contentHash": "pTj+D3uJWyN3My70i2Hqo+OXixq3Os2D1nJ2x92FFo6sk8fYS1m1WLNTs0Dc1uPaViH0YvEEwvzddQ7y4rhXmA==" + }, + "Microsoft.Data.Sqlite": { + "type": "Transitive", + "resolved": "7.0.5", + "contentHash": "KGxbPeWsQMnmQy43DSBxAFtHz3l2JX8EWBSGUCvT3CuZ8KsuzbkqMIJMDOxWtG8eZSoCDI04aiVQjWuuV8HmSw==", + "dependencies": { + "Microsoft.Data.Sqlite.Core": "7.0.5", + "SQLitePCLRaw.bundle_e_sqlite3": "2.1.4" + } + }, + "Microsoft.Data.Sqlite.Core": { + "type": "Transitive", + "resolved": "7.0.5", + "contentHash": "FTerRmQPqHrCrnoUzhBu+E+1DNGwyrAMLqHkAqOOOu5pGfyMOj8qQUBxI/gDtWtG11p49UxSfWmBzRNlwZqfUg==", + "dependencies": { + "SQLitePCLRaw.core": "2.1.4" + } + }, + "Microsoft.Extensions.Configuration": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "nOP8R1mVb/6mZtm2qgAJXn/LFm/2kMjHDAg/QJLFG6CuWYJtaD3p1BwQhufBVvRzL9ceJ/xF0SQ0qsI2GkDQAA==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "2.2.0" + } + }, + "Microsoft.Extensions.Configuration.Abstractions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "65MrmXCziWaQFrI0UHkQbesrX5wTwf9XPjY5yFm/VkgJKFJ5gqvXRoXjIZcf2wLi5ZlwGz/oMYfyURVCWbM5iw==", + "dependencies": { + "Microsoft.Extensions.Primitives": "2.2.0" + } + }, + "Microsoft.Extensions.Configuration.Binder": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "vJ9xvOZCnUAIHcGC3SU35r3HKmHTVIeHzo6u/qzlHAqD8m6xv92MLin4oJntTvkpKxVX3vI1GFFkIQtU3AdlsQ==", + "dependencies": { + "Microsoft.Extensions.Configuration": "2.2.0" + } + }, + "Microsoft.Extensions.DependencyInjection.Abstractions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "f9hstgjVmr6rmrfGSpfsVOl2irKAgr1QjrSi3FgnS7kulxband50f2brRLwySAQTADPZeTdow0mpSMcoAdadCw==" + }, + "Microsoft.Extensions.Options": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "UpZLNLBpIZ0GTebShui7xXYh6DmBHjWM8NxGxZbdQh/bPZ5e6YswqI+bru6BnEL5eWiOdodsXtEz3FROcgi/qg==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Primitives": "2.2.0", + "System.ComponentModel.Annotations": "4.5.0" + } + }, + "Microsoft.Extensions.Primitives": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "azyQtqbm4fSaDzZHD/J+V6oWMFaf2tWP4WEGIYePLCMw3+b2RQdj9ybgbQyjCshcitQKQ4lEDOZjmSlTTrHxUg==", + "dependencies": { + "System.Memory": "4.5.1", + "System.Runtime.CompilerServices.Unsafe": "4.5.1" + } + }, + "Microsoft.NETFramework.ReferenceAssemblies.net48": { + "type": "Transitive", + "resolved": "1.0.3", + "contentHash": "zMk4D+9zyiEWByyQ7oPImPN/Jhpj166Ky0Nlla4eXlNL8hI/BtSJsgR8Inldd4NNpIAH3oh8yym0W2DrhXdSLQ==" + }, + "Microsoft.SourceLink.Common": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw==" + }, + "Speckle.DoubleNumerics": { + "type": "Transitive", + "resolved": "4.0.1", + "contentHash": "MzEQ1Im0zTja+tEsdRIk/WlPiKqb22NmTOJcR1ZKm/mz46pezyyID3/wRz6vJUELMpSLnG7LhsxBL+nxbr7V0w==" + }, + "Speckle.Newtonsoft.Json": { + "type": "Transitive", + "resolved": "13.0.2", + "contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA==" + }, + "SQLitePCLRaw.bundle_e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "EWI1olKDjFEBMJu0+3wuxwziIAdWDVMYLhuZ3Qs84rrz+DHwD00RzWPZCa+bLnHCf3oJwuFZIRsHT5p236QXww==", + "dependencies": { + "SQLitePCLRaw.lib.e_sqlite3": "2.1.4", + "SQLitePCLRaw.provider.dynamic_cdecl": "2.1.4" + } + }, + "SQLitePCLRaw.core": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "inBjvSHo9UDKneGNzfUfDjK08JzlcIhn1+SP5Y3m6cgXpCxXKCJDy6Mka7LpgSV+UZmKSnC8rTwB0SQ0xKu5pA==", + "dependencies": { + "System.Memory": "4.5.3" + } + }, + "SQLitePCLRaw.lib.e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "2C9Q9eX7CPLveJA0rIhf9RXAvu+7nWZu1A2MdG6SD/NOu26TakGgL1nsbc0JAspGijFOo3HoN79xrx8a368fBg==" + }, + "SQLitePCLRaw.provider.dynamic_cdecl": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "ZsaKKhgYF9B1fvcnOGKl3EycNAwd9CRWX7v0rEfuPWhQQ5Jjpvf2VEHahiLIGHio3hxi3EIKFJw9KvyowWOUAw==", + "dependencies": { + "SQLitePCLRaw.core": "2.1.4" + } + }, + "System.Buffers": { + "type": "Transitive", + "resolved": "4.4.0", + "contentHash": "AwarXzzoDwX6BgrhjoJsk6tUezZEozOT5Y9QKF94Gl4JK91I4PIIBkBco9068Y9/Dra8Dkbie99kXB8+1BaYKw==" + }, + "System.ComponentModel.Annotations": { + "type": "Transitive", + "resolved": "4.5.0", + "contentHash": "UxYQ3FGUOtzJ7LfSdnYSFd7+oEv6M8NgUatatIN2HxNtDdlcvFAf+VIq4Of9cDMJEJC0aSRv/x898RYhB4Yppg==" + }, + "System.Memory": { + "type": "Transitive", + "resolved": "4.5.3", + "contentHash": "3oDzvc/zzetpTKWMShs1AADwZjQ/36HnsufHRPcOjyRAAMLDlu2iD33MBI2opxnezcVUtXyqDXXjoFMOU9c7SA==", + "dependencies": { + "System.Buffers": "4.4.0", + "System.Numerics.Vectors": "4.4.0", + "System.Runtime.CompilerServices.Unsafe": "4.5.2" + } + }, + "System.Net.WebSockets.Client.Managed": { + "type": "Transitive", + "resolved": "1.0.22", + "contentHash": "WqEOxPlXjuZrIjUtXNE9NxEfU/n5E35iV2PtoZdJSUC4tlrqwHnTee+wvMIM4OUaJWmwrymeqcgYrE0IkGAgLA==", + "dependencies": { + "System.Buffers": "4.4.0", + "System.Numerics.Vectors": "4.4.0" + } + }, + "System.Numerics.Vectors": { + "type": "Transitive", + "resolved": "4.4.0", + "contentHash": "UiLzLW+Lw6HLed1Hcg+8jSRttrbuXv7DANVj0DkL9g6EnnzbL75EB7EWsw5uRbhxd/4YdG8li5XizGWepmG3PQ==" + }, + "System.Reactive": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ==", + "dependencies": { + "System.Threading.Tasks.Extensions": "4.5.4" + } + }, + "System.Runtime.CompilerServices.Unsafe": { + "type": "Transitive", + "resolved": "4.5.3", + "contentHash": "3TIsJhD1EiiT0w2CcDMN/iSSwnNnsrnbzeVHSKkaEgV85txMprmuO+Yq2AdSbeVGcg28pdNDTPK87tJhX7VFHw==" + }, + "System.Threading.Tasks.Extensions": { + "type": "Transitive", + "resolved": "4.5.4", + "contentHash": "zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg==", + "dependencies": { + "System.Runtime.CompilerServices.Unsafe": "4.5.3" + } + }, + "speckle.connectors.common": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", + "Speckle.Connectors.Logging": "[1.0.0, )", + "Speckle.Objects": "[3.1.0-dev.218, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" + } + }, + "speckle.connectors.dui": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", + "Speckle.Connectors.Common": "[1.0.0, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )", + "System.Threading.Tasks.Dataflow": "[6.0.0, )" + } + }, + "speckle.connectors.logging": { + "type": "Project" + }, + "speckle.converters.common": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", + "Speckle.Objects": "[3.1.0-dev.218, )" + } + }, + "Microsoft.Extensions.DependencyInjection": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "MZtBIwfDFork5vfjpJdG5g8wuJFt7d/y3LOSVVtDK/76wlbtz6cjltfKHqLx2TKVqTj5/c41t77m1+h20zqtPA==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0" + } + }, + "Microsoft.Extensions.Logging": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "Nxqhadc9FCmFHzU+fz3oc8sFlE6IadViYg8dfUdGzJZ2JUxnCsRghBhhOWdM4B2zSZqEc+0BjliBh/oNdRZuig==", + "dependencies": { + "Microsoft.Extensions.Configuration.Binder": "2.2.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging.Abstractions": "2.2.0", + "Microsoft.Extensions.Options": "2.2.0" + } + }, + "Microsoft.Extensions.Logging.Abstractions": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "B2WqEox8o+4KUOpL7rZPyh6qYjik8tHi2tN8Z9jZkHzED8ElYgZa/h6K+xliB435SqUcWT290Fr2aa8BtZjn8A==" + }, + "Speckle.Objects": { + "type": "CentralTransitive", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", + "dependencies": { + "Speckle.Sdk": "3.1.0-dev.218" + } + }, + "Speckle.Sdk": { + "type": "CentralTransitive", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", + "dependencies": { + "GraphQL.Client": "6.0.0", + "Microsoft.Bcl.AsyncInterfaces": "5.0.0", + "Microsoft.CSharp": "4.7.0", + "Microsoft.Data.Sqlite": "7.0.5", + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging": "2.2.0", + "Speckle.DoubleNumerics": "4.0.1", + "Speckle.Newtonsoft.Json": "13.0.2", + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" + } + }, + "Speckle.Sdk.Dependencies": { + "type": "CentralTransitive", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" + }, + "System.Threading.Tasks.Dataflow": { + "type": "CentralTransitive", + "requested": "[6.0.0, )", + "resolved": "6.0.0", + "contentHash": "+tyDCU3/B1lDdOOAJywHQoFwyXIUghIaP2BxG79uvhfTnO+D9qIgjVlL/JV2NTliYbMHpd6eKDmHp2VHpij7MA==" + } + } + } +} \ No newline at end of file diff --git a/Converters/Navisworks/Speckle.Converters.NavisworksShared/DataExtractors/ClassPropertiesExtractor.cs b/Converters/Navisworks/Speckle.Converters.NavisworksShared/DataExtractors/ClassPropertiesExtractor.cs new file mode 100644 index 000000000..d55a7a801 --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.NavisworksShared/DataExtractors/ClassPropertiesExtractor.cs @@ -0,0 +1,51 @@ +using static Speckle.Converter.Navisworks.Helpers.PropertyHelpers; + +namespace Speckle.Converter.Navisworks.ToSpeckle; + +public static class ClassPropertiesExtractor +{ + public static Dictionary? GetClassProperties(NAV.ModelItem modelItem) + { + if (modelItem == null) + { + throw new ArgumentNullException(nameof(modelItem)); + } + + return ExtractClassProperties(modelItem); + } + + /// + /// Extracts property sets from a NAV.ModelItem and adds them to a dictionary, + /// including various details such as ClassName, ClassDisplayName, DisplayName, + /// InstanceGuid, Source, and Source Guid, ensuring that null or empty values + /// are not included in the final dictionary. + /// + /// The NAV.ModelItem from which properties are extracted. + /// A dictionary containing non-null/non-empty properties of the modelItem. + private static Dictionary ExtractClassProperties(NAV.ModelItem modelItem) + { + var propertyDictionary = new Dictionary(); + + // Define properties and their values to be added to the dictionary + var propertiesToAdd = new (string PropertyName, object? Value)[] + { + ("ClassName", modelItem.ClassName), + ("ClassDisplayName", modelItem.ClassDisplayName), + ("DisplayName", modelItem.DisplayName), + ("InstanceGuid", modelItem.InstanceGuid != Guid.Empty ? modelItem.InstanceGuid : null), + ("Source", modelItem.Model?.SourceFileName), + ("Source Guid", modelItem.Model?.SourceGuid) + }; + + // Loop through properties and add them if they are not null or empty + foreach ((string propertyName, object? value) in propertiesToAdd) + { + if (value != null) + { + AddPropertyIfNotNullOrEmpty(propertyDictionary, propertyName, value); + } + } + + return propertyDictionary; + } +} diff --git a/Converters/Navisworks/Speckle.Converters.NavisworksShared/DataExtractors/DisplayValueExtractor.cs b/Converters/Navisworks/Speckle.Converters.NavisworksShared/DataExtractors/DisplayValueExtractor.cs new file mode 100644 index 000000000..7ba6a7b24 --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.NavisworksShared/DataExtractors/DisplayValueExtractor.cs @@ -0,0 +1,38 @@ +using Microsoft.Extensions.Logging; +using Speckle.Converter.Navisworks.Settings; +using Speckle.Converters.Common; +using Speckle.Sdk.Models; +using static Speckle.Converter.Navisworks.Helpers.ElementSelectionHelper; + +namespace Speckle.Converter.Navisworks.ToSpeckle; + +public class DisplayValueExtractor +{ + private readonly IConverterSettingsStore _converterSettings; + private readonly ILogger _logger; + private readonly GeometryToSpeckleConverter _geometryConverter; + + public DisplayValueExtractor( + IConverterSettingsStore converterSettings, + ILogger logger + ) + { + _converterSettings = converterSettings; + _logger = logger; + _geometryConverter = new GeometryToSpeckleConverter(_converterSettings.Current); + } + + internal List GetDisplayValue(NAV.ModelItem modelItem) + { + if (modelItem == null) + { + throw new ArgumentNullException(nameof(modelItem)); + } + if (!modelItem.HasGeometry) + { + return []; + } + + return !IsElementVisible(modelItem) ? [] : _geometryConverter.Convert(modelItem); + } +} diff --git a/Converters/Navisworks/Speckle.Converters.NavisworksShared/DataExtractors/ModelPropertiesExtractor.cs b/Converters/Navisworks/Speckle.Converters.NavisworksShared/DataExtractors/ModelPropertiesExtractor.cs new file mode 100644 index 000000000..cd6ae2230 --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.NavisworksShared/DataExtractors/ModelPropertiesExtractor.cs @@ -0,0 +1,59 @@ +using Speckle.Converter.Navisworks.Settings; +using Speckle.Converters.Common; + +namespace Speckle.Converter.Navisworks.ToSpeckle; + +public class ModelPropertiesExtractor +{ + private readonly IConverterSettingsStore _settingsStore; + + public ModelPropertiesExtractor(IConverterSettingsStore settingsStore) + { + _settingsStore = settingsStore; + } + + internal Dictionary? GetModelProperties(NAV.Model model) + { + if (_settingsStore.Current.User.ExcludeProperties) + { + return null; + } + + var propertyDictionary = ExtractModelProperties(model); + + return propertyDictionary; + } + + /// + /// Extracts model properties from a NAV.ModelItem and adds them to a dictionary, + /// + /// The NAV.ModelItem from which model properties are extracted. + /// A dictionary containing model properties of the modelItem. + private static Dictionary ExtractModelProperties(NAV.Model model) + { + var propertyDictionary = new Dictionary(); + + // Define properties and their values to be added to the dictionary + var propertiesToAdd = new (string PropertyName, object? Value)[] + { + ("Creator", model.Creator), + ("Filename", model.FileName), + ("Source Filename", model.SourceFileName), + ("Units", model.Units.ToString()), + ("Transform", model.Transform.ToString()), + ("Guid", model.Guid != Guid.Empty ? model.Guid : null), + ("Source Guid", model.SourceGuid != Guid.Empty ? model.SourceGuid : null) + }; + + // Loop through properties and add them if they are not null or empty + foreach ((string propertyName, object? value) in propertiesToAdd) + { + if (value != null) + { + Helpers.PropertyHelpers.AddPropertyIfNotNullOrEmpty(propertyDictionary, propertyName, value); + } + } + + return propertyDictionary; + } +} diff --git a/Converters/Navisworks/Speckle.Converters.NavisworksShared/DataExtractors/PropertySetsExtractor.cs b/Converters/Navisworks/Speckle.Converters.NavisworksShared/DataExtractors/PropertySetsExtractor.cs new file mode 100644 index 000000000..ea7c8bc8f --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.NavisworksShared/DataExtractors/PropertySetsExtractor.cs @@ -0,0 +1,64 @@ +using Speckle.Converter.Navisworks.Settings; +using Speckle.Converters.Common; +using static Speckle.Converter.Navisworks.Helpers.PropertyHelpers; + +namespace Speckle.Converter.Navisworks.ToSpeckle; + +public class PropertySetsExtractor(IConverterSettingsStore settingsStore) +{ + internal Dictionary? GetPropertySets(NAV.ModelItem modelItem) + { + if (settingsStore.Current.User.ExcludeProperties) + { + return null; + } + + var propertyDictionary = ExtractPropertySets(modelItem); + + return propertyDictionary; + } + + /// + /// Extracts property sets from a NAV.ModelItem and adds them to a dictionary, + /// PropertySets are specific to the host application source appended to Navisworks and therefore + /// arbitrary in nature. + /// + /// The NAV.ModelItem from which property sets are extracted. + /// A dictionary containing property sets of the modelItem. + private Dictionary ExtractPropertySets(NAV.ModelItem modelItem) + { + var propertySetDictionary = new Dictionary(); + + foreach (var propertyCategory in modelItem.PropertyCategories) + { + if (IsCategoryToBeSkipped(propertyCategory)) + { + continue; + } + + var propertySet = new Dictionary(); + + foreach (var property in propertyCategory.Properties) + { + string sanitizedName = SanitizePropertyName(property.DisplayName); + var propertyValue = ConvertPropertyValue(property.Value, settingsStore.Current.Derived.SpeckleUnits); + + if (propertyValue != null) + { + propertySet[sanitizedName] = propertyValue; + } + } + + if (propertySet.Count <= 0) + { + continue; + } + + string categoryName = SanitizePropertyName(propertyCategory.DisplayName); + + propertySetDictionary[categoryName] = propertySet; + } + + return propertySetDictionary; + } +} diff --git a/Converters/Navisworks/Speckle.Converters.NavisworksShared/DataHandlers/BasePropertyHandler.cs b/Converters/Navisworks/Speckle.Converters.NavisworksShared/DataHandlers/BasePropertyHandler.cs new file mode 100644 index 000000000..363ec66e0 --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.NavisworksShared/DataHandlers/BasePropertyHandler.cs @@ -0,0 +1,101 @@ +namespace Speckle.Converter.Navisworks.ToSpeckle.PropertyHandlers; + +/// +/// Base property handler providing common functionality for property assignment. +/// +public abstract class BasePropertyHandler( + PropertySetsExtractor propertySetsExtractor, + ModelPropertiesExtractor modelPropertiesExtractor +) : IPropertyHandler +{ + public void AssignProperties(SSM.Base speckleObject, NAV.ModelItem modelItem) + { + AssignClassProperties(speckleObject, modelItem); + AssignPropertySets(speckleObject, modelItem); + } + + private static void AssignClassProperties(SSM.Base speckleObject, NAV.ModelItem modelItem) + { + var classProperties = ClassPropertiesExtractor.GetClassProperties(modelItem); + if (classProperties == null) + { + return; + } + + foreach (var kvp in classProperties) + { + if (speckleObject != null) + { + speckleObject[kvp.Key] = kvp.Value; + } + } + } + + protected abstract void AssignPropertySets(SSM.Base speckleObject, NAV.ModelItem modelItem); + + protected Dictionary> ProcessPropertySets(NAV.ModelItem modelItem) + { + var categorizedProperties = new Dictionary>(); + var propertySets = propertySetsExtractor.GetPropertySets(modelItem); + + if (propertySets != null) + { + foreach (var category in propertySets.Where(c => c.Key != "Internal")) + { + if (category.Value is not Dictionary properties) + { + continue; + } + + var categoryProps = CreatePropertyDictionary(properties); + if (categoryProps.Count > 0) + { + categorizedProperties[category.Key] = categoryProps; + } + } + } + + if (modelItem == null) + { + throw new ArgumentNullException(nameof(modelItem)); + } + + AddModelProperties(modelItem, categorizedProperties); + return categorizedProperties; + } + + private void AddModelProperties( + NAV.ModelItem modelItem, + Dictionary> categorizedProperties + ) + { + if (!modelItem.HasModel) + { + return; + } + + var modelProperties = modelPropertiesExtractor.GetModelProperties(modelItem.Model); + if (modelProperties == null) + { + return; + } + + var modelProps = CreatePropertyDictionary(modelProperties); + if (modelProps.Count > 0) + { + categorizedProperties["Model"] = modelProps; + } + } + + private static Dictionary CreatePropertyDictionary(Dictionary properties) + { + var propertyDict = new Dictionary(); + foreach (var prop in properties.Where(prop => IsValidPropertyValue(prop.Value))) + { + propertyDict[prop.Key] = prop.Value; + } + return propertyDict; + } + + protected static bool IsValidPropertyValue(object? value) => value != null && !string.IsNullOrEmpty(value.ToString()); +} diff --git a/Converters/Navisworks/Speckle.Converters.NavisworksShared/DataHandlers/HierarchicalPropertyHandler.cs b/Converters/Navisworks/Speckle.Converters.NavisworksShared/DataHandlers/HierarchicalPropertyHandler.cs new file mode 100644 index 000000000..9f25c6fb9 --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.NavisworksShared/DataHandlers/HierarchicalPropertyHandler.cs @@ -0,0 +1,117 @@ +namespace Speckle.Converter.Navisworks.ToSpeckle.PropertyHandlers; + +/// +/// Handles property assignment with hierarchy merging for objects that require ancestor properties. +/// +public class HierarchicalPropertyHandler( + PropertySetsExtractor propertySetsExtractor, + ModelPropertiesExtractor modelPropertiesExtractor +) : BasePropertyHandler(propertySetsExtractor, modelPropertiesExtractor) +{ + protected override void AssignPropertySets(SSM.Base speckleObject, NAV.ModelItem modelItem) + { + if (speckleObject == null) + { + throw new ArgumentNullException(nameof(speckleObject)); + } + var propertyDict = speckleObject["properties"] as Dictionary ?? new Dictionary(); + + if (modelItem == null) + { + throw new ArgumentNullException(nameof(modelItem)); + } + + var hierarchy = GetObjectHierarchy(modelItem); + var propertyCollection = new Dictionary>>(); + + foreach (var item in hierarchy) + { + CollectHierarchicalProperties(item, propertyCollection); + } + + ApplyFilteredProperties(propertyDict, propertyCollection); + + speckleObject["properties"] = propertyDict; + } + + private static List GetObjectHierarchy(NAV.ModelItem target) + { + var hierarchy = new List(); + var firstObjectAncestor = target.FindFirstObjectAncestor(); + + if (firstObjectAncestor == null) + { + hierarchy.Add(target); + return hierarchy; + } + + var current = target; + while (current != null) + { + hierarchy.Add(current); + if (current == firstObjectAncestor) + { + break; + } + current = current.Parent; + } + + hierarchy.Reverse(); + return hierarchy; + } + + private void CollectHierarchicalProperties( + NAV.ModelItem item, + Dictionary>> propertyCollection + ) + { + var categoryDictionaries = ProcessPropertySets(item); + + foreach (var kvp in categoryDictionaries) + { + if (!propertyCollection.TryGetValue(kvp.Key, out var categoryProperties)) + { + categoryProperties = []; + propertyCollection.Add(kvp.Key, categoryProperties); + } + + foreach (var prop in kvp.Value.Where(prop => IsValidPropertyValue(prop.Value))) + { + if (!categoryProperties.TryGetValue(prop.Key, out var valueSet)) + { + valueSet = []; + categoryProperties.Add(prop.Key, valueSet); + } + valueSet.Add(prop.Value); + } + } + } + + private static void ApplyFilteredProperties( + Dictionary propertyDict, + Dictionary>> propertyCollection + ) + { + foreach (var kvp in propertyCollection) + { + var categoryDict = new Dictionary(); + bool hasProperties = false; + + foreach (var kvS in kvp.Value) + { + if ((kvS.Value).Count != 1) + { + continue; + } + + categoryDict[kvS.Key] = kvS.Value.First(); + hasProperties = true; + } + + if (hasProperties) + { + propertyDict[kvp.Key] = categoryDict; + } + } + } +} diff --git a/Converters/Navisworks/Speckle.Converters.NavisworksShared/DataHandlers/IPropertyHandler.cs b/Converters/Navisworks/Speckle.Converters.NavisworksShared/DataHandlers/IPropertyHandler.cs new file mode 100644 index 000000000..73fbcc4bf --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.NavisworksShared/DataHandlers/IPropertyHandler.cs @@ -0,0 +1,12 @@ +namespace Speckle.Converter.Navisworks.ToSpeckle.PropertyHandlers; + +/// +/// Defines the contract for handling property assignment to Speckle objects. +/// +public interface IPropertyHandler +{ + /// + /// Processes and adds properties to a Speckle object from a Navisworks model item. + /// + void AssignProperties(SSM.Base speckleObject, NAV.ModelItem modelItem); +} diff --git a/Converters/Navisworks/Speckle.Converters.NavisworksShared/DataHandlers/StandardPropertyHandler.cs b/Converters/Navisworks/Speckle.Converters.NavisworksShared/DataHandlers/StandardPropertyHandler.cs new file mode 100644 index 000000000..6c12e7db6 --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.NavisworksShared/DataHandlers/StandardPropertyHandler.cs @@ -0,0 +1,28 @@ +namespace Speckle.Converter.Navisworks.ToSpeckle.PropertyHandlers; + +/// +/// Handles standard property assignment without any merging or hierarchy processing. +/// +public class StandardPropertyHandler( + PropertySetsExtractor propertySetsExtractor, + ModelPropertiesExtractor modelPropertiesExtractor +) : BasePropertyHandler(propertySetsExtractor, modelPropertiesExtractor) +{ + protected override void AssignPropertySets(SSM.Base speckleObject, NAV.ModelItem modelItem) + { + if (speckleObject == null) + { + throw new ArgumentNullException(nameof(speckleObject)); + } + var propertyDictionary = speckleObject["properties"] as Dictionary ?? []; + + var categoryDictionaries = ProcessPropertySets(modelItem); + + foreach (var kvp in categoryDictionaries) + { + categoryDictionaries[$"{kvp.Key}"] = kvp.Value; + } + + speckleObject["properties"] = propertyDictionary; + } +} diff --git a/Converters/Navisworks/Speckle.Converters.NavisworksShared/DependencyInjection/NavisworksConverterServiceRegistration.cs b/Converters/Navisworks/Speckle.Converters.NavisworksShared/DependencyInjection/NavisworksConverterServiceRegistration.cs new file mode 100644 index 000000000..31af6f872 --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.NavisworksShared/DependencyInjection/NavisworksConverterServiceRegistration.cs @@ -0,0 +1,50 @@ +using System.Reflection; +using Microsoft.Extensions.DependencyInjection; +using Speckle.Converter.Navisworks.Helpers; +using Speckle.Converter.Navisworks.Services; +using Speckle.Converter.Navisworks.Settings; +using Speckle.Converter.Navisworks.ToSpeckle; +using Speckle.Converter.Navisworks.ToSpeckle.PropertyHandlers; +using Speckle.Converters.Common; +using Speckle.Converters.Common.Registration; +using Speckle.Sdk; + +namespace Speckle.Converter.Navisworks.DependencyInjection; + +public static class NavisworksConverterServiceRegistration +{ + public static IServiceCollection AddNavisworksConverter(this IServiceCollection serviceCollection) + { + var converterAssembly = Assembly.GetExecutingAssembly(); + + // Register base converters + serviceCollection.AddMatchingInterfacesAsTransient(converterAssembly); + serviceCollection.AddRootCommon(converterAssembly); + + // Register property handlers + serviceCollection.AddScoped(); + serviceCollection.AddScoped(); + + // Register settings management + serviceCollection.AddScoped(); + serviceCollection.AddScoped< + IConverterSettingsStore, + ConverterSettingsStore + >(); + + // Register unit conversion + serviceCollection.AddSingleton, NavisworksToSpeckleUnitConverter>(); + + // Register converters and handlers + serviceCollection.AddApplicationConverters(converterAssembly); + serviceCollection.AddScoped(); + serviceCollection.AddScoped(); + serviceCollection.AddScoped(); + + // Register geometry conversion + serviceCollection.AddScoped(); + serviceCollection.AddScoped(); + + return serviceCollection; + } +} diff --git a/Converters/Navisworks/Speckle.Converters.NavisworksShared/Extensions/ArrayExtensions.cs b/Converters/Navisworks/Speckle.Converters.NavisworksShared/Extensions/ArrayExtensions.cs new file mode 100644 index 000000000..c8c3b5e74 --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.NavisworksShared/Extensions/ArrayExtensions.cs @@ -0,0 +1,15 @@ +using System.Runtime.CompilerServices; + +namespace Speckle.Converter.Navisworks.Extensions; + +internal static class ArrayExtension +{ + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static T[] ToArray(this Array arr) + where T : struct + { + var result = new T[arr.Length]; + Array.Copy(arr, result, result.Length); + return result; + } +} diff --git a/Converters/Navisworks/Speckle.Converters.NavisworksShared/Geometries/Primitives.cs b/Converters/Navisworks/Speckle.Converters.NavisworksShared/Geometries/Primitives.cs new file mode 100644 index 000000000..deb59b5bd --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.NavisworksShared/Geometries/Primitives.cs @@ -0,0 +1,155 @@ +namespace Speckle.Converter.Navisworks.Geometry; + +public readonly struct SafeBoundingBox +{ + public SafeVertex Center { get; } + public SafeVertex Min { get; } + public SafeVertex Max { get; } + public double SizeX { get; } + public double SizeY { get; } + public double SizeZ { get; } + + public SafeBoundingBox(NAV.BoundingBox3D boundingBox) + { + if (boundingBox == null) + { + throw new ArgumentNullException(nameof(boundingBox)); + } + + Center = new SafeVertex(boundingBox.Center); + Min = new SafeVertex(boundingBox.Min); + Max = new SafeVertex(boundingBox.Max); + SizeX = boundingBox.Size.X; + SizeY = boundingBox.Size.Y; + SizeZ = boundingBox.Size.Z; + } +} + +/// +/// Safe structure to store vector coordinates without COM dependency +/// +public readonly struct SafeVector +{ + public double X { get; } + public double Y { get; } + public double Z { get; } + + public SafeVector(NAV.Vector3D vector) + { + if (vector == null) + { + throw new ArgumentNullException(nameof(vector)); + } + X = vector.X; + Y = vector.Y; + Z = vector.Z; + } + + public SafeVector(NAV.Point3D point) + { + if (point == null) + { + throw new ArgumentNullException(nameof(point)); + } + X = point.X; + Y = point.Y; + Z = point.Z; + } + + // Constructor for raw coordinates + public SafeVector(double x, double y, double z) + { + X = x; + Y = y; + Z = z; + } +} + +public readonly struct SafeVertex +{ + public double X { get; } + public double Y { get; } + public double Z { get; } + + public SafeVertex(NAV.Vector3D vector) + { + if (vector == null) + { + throw new ArgumentNullException(nameof(vector)); + } + + X = vector.X; + Y = vector.Y; + Z = vector.Z; + } + + public SafeVertex(NAV.Point3D point) + { + if (point == null) + { + throw new ArgumentNullException(nameof(point)); + } + X = point.X; + Y = point.Y; + Z = point.Z; + } + + // Constructor for raw coordinates + public SafeVertex(double x, double y, double z) + { + X = x; + Y = y; + Z = z; + } +} + +public readonly struct SafePoint +{ + public SafeVertex Vertex { get; } + + public SafePoint(NAV.Vector3D point) + { + if (point == null) + { + throw new ArgumentNullException(nameof(point)); + } + + Vertex = new SafeVertex(point); + } +} + +public readonly struct SafeTriangle +{ + public SafeVertex Vertex1 { get; } + public SafeVertex Vertex2 { get; } + public SafeVertex Vertex3 { get; } + + public SafeTriangle(NAV.Vector3D v1, NAV.Vector3D v2, NAV.Vector3D v3) + { + if (v1 == null || v2 == null || v3 == null) + { + throw new ArgumentNullException(nameof(v1)); + } + + Vertex1 = new SafeVertex(v1); + Vertex2 = new SafeVertex(v2); + Vertex3 = new SafeVertex(v3); + } +} + +public readonly struct SafeLine +{ + public SafeVertex Start { get; } + public SafeVertex End { get; } + + public SafeLine(NAV.Vector3D start, NAV.Vector3D end) + { + if (start == null || end == null) + { + throw new ArgumentNullException(nameof(start)); + } + + Start = new SafeVertex(start); + End = new SafeVertex(end); + } +} diff --git a/Converters/Navisworks/Speckle.Converters.NavisworksShared/Geometries/TransformMatrix.cs b/Converters/Navisworks/Speckle.Converters.NavisworksShared/Geometries/TransformMatrix.cs new file mode 100644 index 000000000..8fd7dde7d --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.NavisworksShared/Geometries/TransformMatrix.cs @@ -0,0 +1,59 @@ +using Speckle.DoubleNumerics; + +namespace Speckle.Converter.Navisworks.Geometry; + +public class Transforms +{ + private readonly double[] _elements; + + /// + /// Creates a new 4x4 matrix with the given elements in row-major order. + /// + /// An array of 16 elements representing the matrix. + public Transforms(double[] elements) + { + if (elements == null || elements.Length != 16) + { + throw new ArgumentException("A 4x4 matrix must have exactly 16 elements.", nameof(elements)); + } + + this._elements = elements; + } + + /// + /// Accesses the element at the given row and column. + /// + public double this[int row, int col] + { + get => _elements[row * 4 + col]; + set => _elements[row * 4 + col] = value; + } + + /// + /// Applies the transformation defined by this matrix to a 3D vector. + /// + public NAV.Vector3D Transform(Vector3 vector) + { + var t1 = this[0, 3] * vector.X + this[1, 3] * vector.Y + this[2, 3] * vector.Z + this[3, 3]; + if (t1 == 0) + { + t1 = 1; // Prevent division by zero + } + + var x = (this[0, 0] * vector.X + this[0, 1] * vector.Y + this[0, 2] * vector.Z + this[0, 3]) / t1; + var y = (this[1, 0] * vector.X + this[1, 1] * vector.Y + this[1, 2] * vector.Z + this[1, 3]) / t1; + var z = (this[2, 0] * vector.X + this[2, 1] * vector.Y + this[2, 2] * vector.Z + this[2, 3]) / t1; + + return new NAV.Vector3D(x, y, z); + } + + /// + /// Creates an identity matrix. + /// + public static Transforms Identity() => new([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]); + + /// + /// Returns the matrix as a flat array in row-major order. + /// + public double[] ToArray() => (double[])_elements.Clone(); +} diff --git a/Converters/Navisworks/Speckle.Converters.NavisworksShared/GlobalUsing.cs b/Converters/Navisworks/Speckle.Converters.NavisworksShared/GlobalUsing.cs new file mode 100644 index 000000000..778ce58c3 --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.NavisworksShared/GlobalUsing.cs @@ -0,0 +1,4 @@ +global using NAV = Autodesk.Navisworks.Api; +global using NavisworksApp = Autodesk.Navisworks.Api.Application; +global using SSC = Speckle.Sdk.Common; +global using SSM = Speckle.Sdk.Models; diff --git a/Converters/Navisworks/Speckle.Converters.NavisworksShared/Helpers/ElementSelectionHelper.cs b/Converters/Navisworks/Speckle.Converters.NavisworksShared/Helpers/ElementSelectionHelper.cs new file mode 100644 index 000000000..e9605c38c --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.NavisworksShared/Helpers/ElementSelectionHelper.cs @@ -0,0 +1,80 @@ +namespace Speckle.Converter.Navisworks.Helpers; + +/// +/// Provides extension methods for working with Navisworks ModelItem selections. +/// +public static class ElementSelectionHelper +{ + /// + /// Resolves a Navisworks to its unique index path representation. + /// + /// The model item to resolve. + /// + /// A string representing the model item's path. The path includes the model index and + /// a hierarchical path identifier, separated by the specified separator (e.g., "0.a.b"). + /// For root-level model items, only the model index is included. + /// + /// Thrown if is null. + public static string ResolveModelItemToIndexPath(NAV.ModelItem modelItem) + { + if (modelItem == null) + { + throw new ArgumentNullException(nameof(modelItem)); + } + + var modelItemPathId = NavisworksApp.ActiveDocument.Models.CreatePathId(modelItem); + + var pathIndex = + modelItemPathId.PathId == "a" + ? $"{modelItemPathId.ModelIndex}" // Root-level model item + : $"{modelItemPathId.ModelIndex}{PathConstants.SEPARATOR}{modelItemPathId.PathId}"; // Nested model item + + return pathIndex; + } + + public static NAV.ModelItem ResolveIndexPathToModelItem(string indexPath) + { + if (indexPath == null) + { + throw new ArgumentNullException(nameof(indexPath)); + } + + var indexPathParts = indexPath.Split(PathConstants.SEPARATOR); + + var modelIndex = int.Parse(indexPathParts[0]); + var pathId = string.Join(PathConstants.SEPARATOR.ToString(), indexPathParts.Skip(1)); + + // assign the first part of indexPathParts to modelIndex and parse it to int, the second part to pathId string + NAV.DocumentParts.ModelItemPathId modelItemPathId = new() { ModelIndex = modelIndex, PathId = pathId }; + + var modelItem = NavisworksApp.ActiveDocument.Models.ResolvePathId(modelItemPathId); + return modelItem; + } + + /// + /// Determines whether a Navisworks and all its ancestors are visible. + /// + /// The model item to check for visibility. + /// True if the item and all ancestors are visible; otherwise, false. + /// Thrown if is null. + public static bool IsElementVisible(NAV.ModelItem modelItem) + { + if (modelItem == null) + { + throw new ArgumentNullException(nameof(modelItem)); + } + + // Check visibility status for the item and its ancestors + return modelItem.AncestorsAndSelf.All(item => !item.IsHidden); + } + + public static IReadOnlyCollection ResolveGeometryLeafNodes(NAV.ModelItem modelItem) + { + if (modelItem == null) + { + throw new ArgumentNullException(nameof(modelItem)); + } + + return modelItem.DescendantsAndSelf.Where(x => x.HasGeometry).ToList(); + } +} diff --git a/Converters/Navisworks/Speckle.Converters.NavisworksShared/Helpers/GeometryHelpers.cs b/Converters/Navisworks/Speckle.Converters.NavisworksShared/Helpers/GeometryHelpers.cs new file mode 100644 index 000000000..2ca3b3d6f --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.NavisworksShared/Helpers/GeometryHelpers.cs @@ -0,0 +1,16 @@ +namespace Speckle.Converter.Navisworks.Helpers; + +public static class GeometryHelpers +{ + /// + /// Compares two vectors to determine if they are approximately equal within a given tolerance. + /// + /// The first comparison vector. + /// The second comparison vector. + /// The tolerance value for the comparison. Default is 1e-9. + /// True if the vectors match within the tolerance; otherwise, false. + internal static bool VectorMatch(NAV.Vector3D vectorA, NAV.Vector3D vectorB, double tolerance = 1e-9) => + Math.Abs(vectorA.X - vectorB.X) < tolerance + && Math.Abs(vectorA.Y - vectorB.Y) < tolerance + && Math.Abs(vectorA.Z - vectorB.Z) < tolerance; +} diff --git a/Converters/Navisworks/Speckle.Converters.NavisworksShared/Helpers/PrimitiveProcessor.cs b/Converters/Navisworks/Speckle.Converters.NavisworksShared/Helpers/PrimitiveProcessor.cs new file mode 100644 index 000000000..b646184fd --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.NavisworksShared/Helpers/PrimitiveProcessor.cs @@ -0,0 +1,173 @@ +using System.Collections.ObjectModel; +using Autodesk.Navisworks.Api.Interop.ComApi; +using Speckle.Converter.Navisworks.Geometry; +using Speckle.DoubleNumerics; + +namespace Speckle.Converter.Navisworks.Helpers; + +public class PrimitiveProcessor : InwSimplePrimitivesCB +{ + private readonly List _coords = []; + private List _faces = []; + private List _lines = []; + private List _points = []; + private List _triangles = []; + private bool IsUpright { get; set; } + + internal PrimitiveProcessor(bool isUpright) + { + IsUpright = isUpright; + SetCoords(new ReadOnlyCollection([])); + SetFaces([]); + SetTriangles([]); + SetLines([]); + SetPoints([]); + } + + public IReadOnlyList Coords => _coords.AsReadOnly(); + private IReadOnlyList Faces => _faces.AsReadOnly(); + public IReadOnlyList Triangles => _triangles.AsReadOnly(); + public IReadOnlyList Lines => _lines.AsReadOnly(); + public IReadOnlyList Points => _points.AsReadOnly(); + internal IEnumerable? LocalToWorldTransformation { get; set; } + + public void Line(InwSimpleVertex? v1, InwSimpleVertex? v2) + { + if (v1 == null || v2 == null) + { + return; + } + + using var vD1 = TransformVectorToOrientation( + ApplyTransformation(VectorFromVertex(v1), LocalToWorldTransformation), + IsUpright + ); + using var vD2 = TransformVectorToOrientation( + ApplyTransformation(VectorFromVertex(v2), LocalToWorldTransformation), + IsUpright + ); + + try + { + var safeLine = new SafeLine(vD1, vD2); + AddLine(safeLine); + } + catch (ArgumentException ex) + { + Console.WriteLine($"ArgumentException caught: {ex.Message}"); + } + catch (InvalidOperationException ex) + { + Console.WriteLine($"InvalidOperationException caught: {ex.Message}"); + } + } + + public void Point(InwSimpleVertex? v1) + { + if (v1 == null) + { + return; + } + + using var vD1 = TransformVectorToOrientation( + ApplyTransformation(VectorFromVertex(v1), LocalToWorldTransformation), + IsUpright + ); + + var safePoint = new SafePoint(vD1); + AddPoint(safePoint); + } + + // TODO: Needed for Splines + public void SnapPoint(InwSimpleVertex? v1) => Point(v1); + + public void Triangle(InwSimpleVertex? v1, InwSimpleVertex? v2, InwSimpleVertex? v3) + { + if (v1 == null || v2 == null || v3 == null) + { + return; + } + + using var vD1 = TransformVectorToOrientation( + ApplyTransformation(VectorFromVertex(v1), LocalToWorldTransformation), + IsUpright + ); + using var vD2 = TransformVectorToOrientation( + ApplyTransformation(VectorFromVertex(v2), LocalToWorldTransformation), + IsUpright + ); + using var vD3 = TransformVectorToOrientation( + ApplyTransformation(VectorFromVertex(v3), LocalToWorldTransformation), + IsUpright + ); + + // Capture values immediately in our safe struct + var safeTriangle = new SafeTriangle(vD1, vD2, vD3); + + var indexPointer = Faces.Count; + AddFace(3); + AddFaces([indexPointer + 0, indexPointer + 1, indexPointer + 2]); + AddCoords( + [ + safeTriangle.Vertex1.X, + safeTriangle.Vertex1.Y, + safeTriangle.Vertex1.Z, + safeTriangle.Vertex2.X, + safeTriangle.Vertex2.Y, + safeTriangle.Vertex2.Z, + safeTriangle.Vertex3.X, + safeTriangle.Vertex3.Y, + safeTriangle.Vertex3.Z + ] + ); + + AddTriangle(safeTriangle); + } + + private void SetCoords(IEnumerable coords) + { + _coords.Clear(); + _coords.AddRange(coords); + } + + private void AddCoords(IEnumerable coords) => _coords.AddRange(coords); + + private void SetFaces(List faces) => _faces = faces ?? throw new ArgumentNullException(nameof(faces)); + + private void AddFace(int face) => _faces.Add(face); + + private void AddFaces(IEnumerable faces) => _faces.AddRange(faces); + + private void SetTriangles(List triangles) => + _triangles = triangles ?? throw new ArgumentNullException(nameof(triangles)); + + private void AddTriangle(SafeTriangle triangle) => _triangles.Add(triangle); + + private void SetLines(List lines) => _lines = lines ?? throw new ArgumentNullException(nameof(lines)); + + private void AddLine(SafeLine line) => _lines.Add(line); + + private void SetPoints(List points) => _points = points ?? throw new ArgumentNullException(nameof(points)); + + private void AddPoint(SafePoint point) => _points.Add(point); + + private static NAV.Vector3D TransformVectorToOrientation(NAV.Vector3D v, bool isUpright) => + isUpright ? v : new NAV.Vector3D(v.X, -v.Z, v.Y); + + private static NAV.Vector3D ApplyTransformation(Vector3 vector3, IEnumerable? matrixStore) + { + var matrix = matrixStore!.ToList(); + var t1 = matrix[3] * vector3.X + matrix[7] * vector3.Y + matrix[11] * vector3.Z + matrix[15]; + var vectorDoubleX = (matrix[0] * vector3.X + matrix[4] * vector3.Y + matrix[8] * vector3.Z + matrix[12]) / t1; + var vectorDoubleY = (matrix[1] * vector3.X + matrix[5] * vector3.Y + matrix[9] * vector3.Z + matrix[13]) / t1; + var vectorDoubleZ = (matrix[2] * vector3.X + matrix[6] * vector3.Y + matrix[10] * vector3.Z + matrix[14]) / t1; + + return new NAV.Vector3D(vectorDoubleX, vectorDoubleY, vectorDoubleZ); + } + + private static Vector3 VectorFromVertex(InwSimpleVertex v) + { + var arrayV = (Array)v.coord; + return new Vector3((float)arrayV.GetValue(1), (float)arrayV.GetValue(2), (float)arrayV.GetValue(3)); + } +} diff --git a/Converters/Navisworks/Speckle.Converters.NavisworksShared/Helpers/PropertyHelpers.cs b/Converters/Navisworks/Speckle.Converters.NavisworksShared/Helpers/PropertyHelpers.cs new file mode 100644 index 000000000..a9e771d64 --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.NavisworksShared/Helpers/PropertyHelpers.cs @@ -0,0 +1,106 @@ +using System.Globalization; +using System.Text.RegularExpressions; +using Speckle.Objects.Geometry; + +namespace Speckle.Converter.Navisworks.Helpers; + +public static class PropertyHelpers +{ + private static readonly HashSet s_excludedCategories = ["Geometry", "Metadata"]; + + private static readonly Dictionary> s_typeHandlers = + new() + { + { NAV.VariantDataType.Boolean, (value, _) => value.ToBoolean() }, + { NAV.VariantDataType.DisplayString, (value, _) => value.ToDisplayString() }, + { NAV.VariantDataType.IdentifierString, (value, _) => value.ToIdentifierString() }, + { NAV.VariantDataType.Int32, (value, _) => value.ToInt32() }, + { NAV.VariantDataType.Double, (value, _) => value.ToDouble() }, + { NAV.VariantDataType.DoubleAngle, (value, _) => value.ToDoubleAngle() }, + { NAV.VariantDataType.DoubleArea, (value, _) => value.ToDoubleArea() }, + { NAV.VariantDataType.DoubleLength, (value, _) => value.ToDoubleLength() }, + { NAV.VariantDataType.DoubleVolume, (value, _) => value.ToDoubleVolume() }, + { NAV.VariantDataType.DateTime, (value, _) => value.ToDateTime().ToString(CultureInfo.InvariantCulture) }, + { NAV.VariantDataType.NamedConstant, (value, _) => value.ToNamedConstant().DisplayName }, + { NAV.VariantDataType.None, (_, _) => null }, + { NAV.VariantDataType.Point2D, (_, _) => null }, + { + NAV.VariantDataType.Point3D, + (value, units) => + { + var point = value.ToPoint3D(); + var pointProperty = new Point(point.X, point.Y, point.Z, units); + return pointProperty.ToString(); + } + } + }; + + internal static dynamic? ConvertPropertyValue(NAV.VariantData value, string units) + { + if (s_typeHandlers.TryGetValue(value.DataType, out var handler)) + { + return handler(value, units); + } + + // Default case for unsupported types + return value.DataType == NAV.VariantDataType.None || value.DataType == NAV.VariantDataType.Point2D + ? null + : value.ToString(); + } + + /// + /// Adds a property to an object (either a Base object or a Dictionary) if the value is not null or empty. + /// + /// The object to which the property is to be added. Can be either a Base object or a Dictionary. + /// The name of the property to add. + /// The value of the property. + internal static void AddPropertyIfNotNullOrEmpty(object baseObject, string propertyName, object value) + { + switch (value) + { + case string stringValue: + { + if (!string.IsNullOrEmpty(stringValue)) + { + AssignProperty(baseObject, propertyName, value); + } + + break; + } + default: + AssignProperty(baseObject, propertyName, value); + break; + } + } + + /// + /// Helper method to assign the property to the base object or dictionary. + /// + private static void AssignProperty(object baseObject, string propertyName, object value) + { + switch (baseObject) + { + case SSM.Base baseObj: + baseObj[propertyName] = value; + break; + case Dictionary baseDict: + baseDict[propertyName] = value; + break; + default: + throw new ArgumentException("Unsupported object type", nameof(baseObject)); + } + } + + /// + /// Sanitizes property names by replacing invalid characters with underscores. + /// + internal static string SanitizePropertyName(string name) => + // Regex pattern from speckle-sharp/Core/Core/Models/DynamicBase.cs IsPropNameValid + name == "Item" + // Item is a reserved term for Indexed Properties: https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/indexers/using-indexers + ? "Item" + : Regex.Replace(name, @"[\.\/\s]", "_"); + + internal static bool IsCategoryToBeSkipped(NAV.PropertyCategory propertyCategory) => + s_excludedCategories.Contains(propertyCategory.DisplayName); +} diff --git a/Converters/Navisworks/Speckle.Converters.NavisworksShared/PathConstants.cs b/Converters/Navisworks/Speckle.Converters.NavisworksShared/PathConstants.cs new file mode 100644 index 000000000..8d8c8ea1c --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.NavisworksShared/PathConstants.cs @@ -0,0 +1,6 @@ +namespace Speckle.Converter.Navisworks; + +public static class PathConstants +{ + public const char SEPARATOR = '/'; +} diff --git a/Converters/Navisworks/Speckle.Converters.NavisworksShared/Services/NavisworksToSpeckleUnitConverter.cs b/Converters/Navisworks/Speckle.Converters.NavisworksShared/Services/NavisworksToSpeckleUnitConverter.cs new file mode 100644 index 000000000..8f75388a9 --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.NavisworksShared/Services/NavisworksToSpeckleUnitConverter.cs @@ -0,0 +1,26 @@ +using Speckle.Converters.Common; +using Speckle.Sdk.Common.Exceptions; + +namespace Speckle.Converter.Navisworks.Services; + +public sealed class NavisworksToSpeckleUnitConverter : IHostToSpeckleUnitConverter +{ + private readonly Dictionary _unitMapping = []; + + public NavisworksToSpeckleUnitConverter() + { + _unitMapping[NAV.Units.Millimeters] = SSC.Units.Millimeters; + _unitMapping[NAV.Units.Centimeters] = SSC.Units.Centimeters; + _unitMapping[NAV.Units.Meters] = SSC.Units.Meters; + _unitMapping[NAV.Units.Inches] = SSC.Units.Inches; + _unitMapping[NAV.Units.Feet] = SSC.Units.Feet; + _unitMapping[NAV.Units.Miles] = SSC.Units.Miles; + _unitMapping[NAV.Units.Kilometers] = SSC.Units.Kilometers; + _unitMapping[NAV.Units.Yards] = SSC.Units.Yards; + } + + public string ConvertOrThrow(NAV.Units hostUnit) => + _unitMapping.TryGetValue(hostUnit, out string? value) + ? value + : throw new UnitNotSupportedException($"The Unit System \"{hostUnit}\" is unsupported."); +} diff --git a/Converters/Navisworks/Speckle.Converters.NavisworksShared/Settings/ConversionModes.cs b/Converters/Navisworks/Speckle.Converters.NavisworksShared/Settings/ConversionModes.cs new file mode 100644 index 000000000..854c2ada6 --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.NavisworksShared/Settings/ConversionModes.cs @@ -0,0 +1,51 @@ +using System.Diagnostics.CodeAnalysis; + +namespace Speckle.Converter.Navisworks.Settings; + +/// +/// Defines the representation mode to be used during conversion. +/// +[SuppressMessage("ReSharper", "InconsistentNaming")] +public enum RepresentationMode +{ + /// + /// Uses the current active representation (e.g., overrides or temporary settings). + /// + Active, + + /// + /// Preserves the original representation as defined in the source data. + /// + Original, + + /// + /// Applies a fixed or user-defined representation, overriding others. + /// + Permanent +} + +/// +/// Specifies the origin mode, which defines the basis of a transformation +/// applied to the model before conversion. The transformation aligns +/// the model's origin point to a base point. +/// +[SuppressMessage("ReSharper", "InconsistentNaming")] +public enum OriginMode +{ + /// + /// Uses the model origin as the base point. This is the default mode. + /// No transformation is applied other than converting from the local + /// coordinate system to the world coordinate system. + /// + ModelOrigin, + + /// + /// Uses a user-defined project base point as the base point for the transformation. + /// + ProjectBasePoint, + + /// + /// Uses the center of the model's bounding box as the base point for the transformation. + /// + BoundingBoxCenter +} diff --git a/Converters/Navisworks/Speckle.Converters.NavisworksShared/Settings/NavisworksConversionSettings.cs b/Converters/Navisworks/Speckle.Converters.NavisworksShared/Settings/NavisworksConversionSettings.cs new file mode 100644 index 000000000..666fecf29 --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.NavisworksShared/Settings/NavisworksConversionSettings.cs @@ -0,0 +1,27 @@ +using Speckle.Converter.Navisworks.Geometry; + +namespace Speckle.Converter.Navisworks.Settings; + +/// +/// Represents the settings used for Navisworks conversions. +/// +public record NavisworksConversionSettings(Derived Derived, User User); + +// Derived from Navisworks Application +public record Derived( + NAV.Document Document, // The active Navisworks document to be processed. + SafeBoundingBox ModelBoundingBox, // The bounding box of the model. + SafeVector TransformVector, // Transformation vector applied to the model. + bool IsUpright, // Indicates if the model's orientation is upright relative to canonical up. + string SpeckleUnits // Units used in Speckle for standardised measurements. +); + +// Optional settings for conversion to be offered in UI +public record User( + OriginMode OriginMode, // Defines the base point for transformations. + bool IncludeInternalProperties, // Whether to include internal Navisworks properties in the output. + bool ConvertHiddenElements, // Whether to include hidden elements during the conversion process. + RepresentationMode VisualRepresentationMode, // Specifies the visual representation mode. + bool CoalescePropertiesFromFirstObjectAncestor, // Whether to merge properties from the first object ancestor. + bool ExcludeProperties // Whether to exclude properties from the output. +); diff --git a/Converters/Navisworks/Speckle.Converters.NavisworksShared/Settings/NavisworksConversionSettingsFactory.cs b/Converters/Navisworks/Speckle.Converters.NavisworksShared/Settings/NavisworksConversionSettingsFactory.cs new file mode 100644 index 000000000..3f6fd9a62 --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.NavisworksShared/Settings/NavisworksConversionSettingsFactory.cs @@ -0,0 +1,140 @@ +using Microsoft.Extensions.Logging; +using Speckle.Converter.Navisworks.Geometry; +using Speckle.Converter.Navisworks.Helpers; +using Speckle.Converters.Common; +using Speckle.InterfaceGenerator; + +namespace Speckle.Converter.Navisworks.Settings; + +[GenerateAutoInterface] +public class NavisworksConversionSettingsFactory : INavisworksConversionSettingsFactory +{ + private readonly IConverterSettingsStore _settingsStore; + private readonly ILogger _logger; + private readonly IHostToSpeckleUnitConverter _unitsConverter; + + private NAV.Document? _document; + private SafeBoundingBox _modelBoundingBox; + private bool _convertHiddenElements; + + public NavisworksConversionSettingsFactory( + IHostToSpeckleUnitConverter unitsConverter, + IConverterSettingsStore settingsStore, + ILogger logger + ) + { + _logger = logger; + _settingsStore = settingsStore; + _unitsConverter = unitsConverter; + } + + public NavisworksConversionSettings Current => _settingsStore.Current; + + private static readonly NAV.Vector3D s_canonicalUp = new(0, 0, 1); + + private OriginMode _originMode; + + /// + /// Creates a new instance of NavisworksConversionSettings with calculated values. + /// + /// + /// Thrown when no active document is found or document units cannot be converted. + /// + public NavisworksConversionSettings Create( + OriginMode originMode, + RepresentationMode visualRepresentationMode, + bool convertHiddenElements, + bool includeInternalProperties + ) + { + _convertHiddenElements = convertHiddenElements; + _originMode = originMode; + + // Initialize document and validate + InitializeDocument(); + + if (_document == null) + { + throw new InvalidOperationException("No active document found."); + } + + var units = _unitsConverter.ConvertOrThrow(_document.Units); + if (string.IsNullOrEmpty(units)) + { + throw new InvalidOperationException("Document units could not be converted."); + } + + // Calculate the transformation vector based on the origin mode + var transformVector = CalculateTransformVector(); + var isUpright = GeometryHelpers.VectorMatch(_document.UpVector, s_canonicalUp); + + return new NavisworksConversionSettings( + // Derived from Navisworks Application + new Derived( + Document: _document, + ModelBoundingBox: _modelBoundingBox, + TransformVector: transformVector, + IsUpright: isUpright, + SpeckleUnits: units + ), + // Optional settings for conversion to be offered in UI + new User( + OriginMode: _originMode, + IncludeInternalProperties: includeInternalProperties, + ConvertHiddenElements: _convertHiddenElements, + VisualRepresentationMode: visualRepresentationMode, + CoalescePropertiesFromFirstObjectAncestor: false, // Not yet exposed in the UI + ExcludeProperties: false // Not yet exposed in the UI + ) + ); + } + + private void InitializeDocument() + { + _document = NavisworksApp.ActiveDocument ?? throw new InvalidOperationException("No active document found."); + _logger.LogInformation("Creating settings for document: {DocumentName}", _document.Title); + _modelBoundingBox = new SafeBoundingBox(_document.GetBoundingBox(_convertHiddenElements)); + } + + private SafeVector CalculateTransformVector() => + _originMode switch + { + OriginMode.ProjectBasePoint => CalculateProjectBasePointTransform(), + OriginMode.BoundingBoxCenter => CalculateBoundingBoxTransform(), + OriginMode.ModelOrigin => new SafeVector(0.0, 0.0, 0.0), // Default identity transform + _ => throw new NotSupportedException($"OriginMode {_originMode} is not supported.") + }; + + /// + /// Calculates the transformation vector based on the project base point. + /// + /// The calculated transformation vector. + /// + /// This uses mocked project base point data and should be replaced with actual logic + /// when finally integrating with UI or external configurations. + /// + private SafeVector CalculateProjectBasePointTransform() + { + // TODO: Replace with actual logic to fetch project base point and units from UI or settings + var projectBasePoint = new SafeVector(10, 20, 0); + // ReSharper disable once ConvertToConstant.Local + var projectBasePointUnits = NAV.Units.Meters; + + var scale = NAV.UnitConversion.ScaleFactor(projectBasePointUnits, _document!.Units); + + // The transformation vector is the negative of the project base point, scaled to the source units. + // These units are independent of the Speckle units, and because they are from user input. + return new SafeVector(-projectBasePoint.X * scale, -projectBasePoint.Y * scale, 0); + } + + /// + /// Calculates the transformation vector based on the bounding box center offset from the origin. + /// + /// The calculated transformation vector. + /// + /// This uses the document active model bounding box center as the base point for the transformation. + /// Assumes no translation in the Z-axis. + /// + private SafeVector CalculateBoundingBoxTransform() => + new(-_modelBoundingBox.Center.X, -_modelBoundingBox.Center.Y, 0); +} diff --git a/Converters/Navisworks/Speckle.Converters.NavisworksShared/Speckle.Converters.NavisworksShared.projitems b/Converters/Navisworks/Speckle.Converters.NavisworksShared/Speckle.Converters.NavisworksShared.projitems new file mode 100644 index 000000000..211a57058 --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.NavisworksShared/Speckle.Converters.NavisworksShared.projitems @@ -0,0 +1,40 @@ + + + + $(MSBuildAllProjects);$(MSBuildThisFileFullPath) + true + 6886282C-EFA5-4ED0-85BD-2883E23E092B + + + Speckle.Converters.NavisworksShared + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Converters/Navisworks/Speckle.Converters.NavisworksShared/Speckle.Converters.NavisworksShared.shproj b/Converters/Navisworks/Speckle.Converters.NavisworksShared/Speckle.Converters.NavisworksShared.shproj new file mode 100644 index 000000000..016540e63 --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.NavisworksShared/Speckle.Converters.NavisworksShared.shproj @@ -0,0 +1,12 @@ + + + + {23830613-87F8-4655-B523-72189A597962} + + + + + + + diff --git a/Converters/Navisworks/Speckle.Converters.NavisworksShared/ToSpeckle/NavisworksRootToSpeckleConverter.cs b/Converters/Navisworks/Speckle.Converters.NavisworksShared/ToSpeckle/NavisworksRootToSpeckleConverter.cs new file mode 100644 index 000000000..eb1bfb10b --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.NavisworksShared/ToSpeckle/NavisworksRootToSpeckleConverter.cs @@ -0,0 +1,53 @@ +using Microsoft.Extensions.Logging; +using Speckle.Converter.Navisworks.Helpers; +using Speckle.Converter.Navisworks.Settings; +using Speckle.Converters.Common; +using Speckle.Converters.Common.Objects; +using Speckle.Converters.Common.Registration; +using Speckle.Sdk.Models; + +namespace Speckle.Converter.Navisworks.ToSpeckle; + +/// +/// Converts Navisworks ModelItem objects to Speckle Base objects. +/// +public class NavisworksRootToSpeckleConverter : IRootToSpeckleConverter +{ + private readonly IConverterManager _toSpeckle; + private readonly IConverterSettingsStore _settingsStore; + private readonly ILogger _logger; + + public NavisworksRootToSpeckleConverter( + IConverterSettingsStore settingsStore, + ILogger logger, + IConverterManager toSpeckle + ) + { + _toSpeckle = toSpeckle; + _logger = logger; + _settingsStore = settingsStore; + } + + public Base Convert(object target) + { + if (target == null) + { + throw new ArgumentNullException(nameof(target)); + } + + if (target is not NAV.ModelItem modelItem) + { + throw new InvalidOperationException($"The target object is not a ModelItem. It's a ${target.GetType()}."); + } + + Type type = target.GetType(); + + var objectConverter = _toSpeckle.ResolveConverter(type, true); + + Base result = objectConverter.Convert(modelItem); + + result.applicationId = ElementSelectionHelper.ResolveModelItemToIndexPath(modelItem); + + return result; + } +} diff --git a/Converters/Navisworks/Speckle.Converters.NavisworksShared/ToSpeckle/Raw/BoundingBoxToSpeckleRawConverter.cs b/Converters/Navisworks/Speckle.Converters.NavisworksShared/ToSpeckle/Raw/BoundingBoxToSpeckleRawConverter.cs new file mode 100644 index 000000000..43838ff4a --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.NavisworksShared/ToSpeckle/Raw/BoundingBoxToSpeckleRawConverter.cs @@ -0,0 +1,52 @@ +using Speckle.Converter.Navisworks.Settings; +using Speckle.Converters.Common; +using Speckle.Converters.Common.Objects; +using Speckle.Objects.Geometry; +using Speckle.Objects.Primitive; + +namespace Speckle.Converter.Navisworks.ToSpeckle.Raw; + +public class BoundingBoxToSpeckleRawConverter : ITypedConverter +{ + private readonly IConverterSettingsStore _settingsStore; + + public BoundingBoxToSpeckleRawConverter(IConverterSettingsStore settingsStore) + { + _settingsStore = settingsStore; + } + + public Box Convert(object target) => Convert((NAV.BoundingBox3D)target); + + public Box Convert(NAV.BoundingBox3D? target) + { + if (target == null) + { + return default!; // returns null for reference types (Box is a reference type) + } + + var minPoint = target.Min; + var maxPoint = target.Max; + + var units = _settingsStore.Current.Derived.SpeckleUnits; + + var basePlane = new Plane + { + origin = new Point(minPoint.X, minPoint.Y, minPoint.Z, units), + normal = new Vector(0, 0, 1, units), + xdir = new Vector(1, 0, 0, units), + ydir = new Vector(0, 1, 0, units), + units = units + }; + + var boundingBox = new Box + { + units = units, + plane = basePlane, + xSize = new Interval() { start = minPoint.X, end = maxPoint.X }, + ySize = new Interval() { start = minPoint.Y, end = maxPoint.Y }, + zSize = new Interval() { start = minPoint.Z, end = maxPoint.Z } + }; + + return boundingBox; + } +} diff --git a/Converters/Navisworks/Speckle.Converters.NavisworksShared/ToSpeckle/Raw/GeometryToSpeckleConverter.cs b/Converters/Navisworks/Speckle.Converters.NavisworksShared/ToSpeckle/Raw/GeometryToSpeckleConverter.cs new file mode 100644 index 000000000..cf440f256 --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.NavisworksShared/ToSpeckle/Raw/GeometryToSpeckleConverter.cs @@ -0,0 +1,245 @@ +using System.Runtime.InteropServices; +using Autodesk.Navisworks.Api.Interop.ComApi; +using Speckle.Converter.Navisworks.Extensions; +using Speckle.Converter.Navisworks.Geometry; +using Speckle.Converter.Navisworks.Helpers; +using Speckle.Converter.Navisworks.Settings; +using Speckle.Objects.Geometry; +using Speckle.Sdk.Models; +using ComApiBridge = Autodesk.Navisworks.Api.ComApi.ComApiBridge; + +namespace Speckle.Converter.Navisworks.ToSpeckle; + +/// +/// Converts Navisworks geometry to Speckle displayable geometry. +/// +/// Note: This class does not implement ITypedConverter{ModelGeometry, Base} because Navisworks geometry +/// conversion requires COM interop access that isn't available through the public ModelGeometry class. +/// The conversion process requires: +/// 1. Convert ModelItem to InwOaPath3 via ComApiBridge +/// 2. Use that to get InwOaFragmentList +/// 3. Process each InwOaFragment3 to generate primitives +/// 4. Convert those primitives to Speckle geometry with appropriate transforms +/// +public class GeometryToSpeckleConverter +{ + private readonly NavisworksConversionSettings _settings; + private readonly bool _isUpright; + private readonly SafeVector _transformVector; + private const double SCALE = 1.0; // Default scale factor + + public GeometryToSpeckleConverter(NavisworksConversionSettings settings) + { + _settings = settings ?? throw new ArgumentNullException(nameof(settings)); + _isUpright = settings.Derived.IsUpright; + _transformVector = settings.Derived.TransformVector; + } + + /// + /// Converts a ModelItem's geometry to Speckle display geometry by accessing the underlying COM objects. + /// Applies necessary transformations and unit scaling. + /// + internal List Convert(NAV.ModelItem modelItem) + { + if (modelItem == null) + { + throw new ArgumentNullException(nameof(modelItem)); + } + + if (!modelItem.HasGeometry) + { + return []; + } + + var comSelection = ComApiBridge.ToInwOpSelection([modelItem]); + try + { + var fragmentStack = new Stack(); + var paths = comSelection.Paths(); + try + { + // Populate fragment stack with all fragments + foreach (InwOaPath path in paths) + { + CollectFragments(path, fragmentStack); + } + + return ProcessFragments(fragmentStack, paths); + } + finally + { + if (paths != null) + { + Marshal.ReleaseComObject(paths); + } + } + } + finally + { + if (comSelection != null) + { + Marshal.ReleaseComObject(comSelection); + } + } + } + + private static void CollectFragments(InwOaPath path, Stack fragmentStack) + { + var fragments = path.Fragments(); + foreach (var fragment in fragments.OfType()) + { + if (fragment.path?.ArrayData is not Array pathData1 || path.ArrayData is not Array pathData2) + { + continue; + } + + var pathArray1 = pathData1.ToArray(); + var pathArray2 = pathData2.ToArray(); + + if (pathArray1.Length == pathArray2.Length && pathArray1.SequenceEqual(pathArray2)) + { + fragmentStack.Push(fragment); + } + } + } + + private List ProcessFragments(Stack fragmentStack, InwSelectionPathsColl paths) + { + var callbackListeners = new List(); + + foreach (InwOaPath path in paths) + { + var processor = new PrimitiveProcessor(_isUpright); + + foreach (var fragment in fragmentStack) + { + if (!ValidateFragmentPath(fragment, path)) + { + continue; + } + + var matrix = fragment.GetLocalToWorldMatrix(); + var transform = matrix as InwLTransform3f3; + if (transform?.Matrix is not Array matrixArray) + { + continue; + } + + processor.LocalToWorldTransformation = ConvertArrayToDouble(matrixArray); + fragment.GenerateSimplePrimitives(nwEVertexProperty.eNORMAL, processor); + } + + callbackListeners.Add(processor); + } + + var baseGeometries = ProcessGeometries(callbackListeners); + + return baseGeometries; + } + + private static bool ValidateFragmentPath(InwOaFragment3 fragment, InwOaPath path) + { + if (fragment.path?.ArrayData is not Array fragmentPathData || path.ArrayData is not Array pathData) + { + return false; + } + + return IsSameFragmentPath(fragmentPathData, pathData); + } + + private List ProcessGeometries(List processors) + { + var baseGeometries = new List(); + + foreach (var processor in processors) + { + if (processor.Triangles.Count > 0) + { + var mesh = CreateMesh(processor.Triangles); + baseGeometries.Add(mesh); + } + + if (processor.Lines.Count > 0) + { + var lines = CreateLines(processor.Lines); + baseGeometries.AddRange(lines); + } + } + + return baseGeometries; + } + + private Mesh CreateMesh(IReadOnlyList triangles) + { + var vertices = new List(); + var faces = new List(); + + for (var t = 0; t < triangles.Count; t++) + { + var triangle = triangles[t]; + + // No need to worry about disposal of COM across boundaries - we're working with our safe structs + vertices.AddRange( + [ + (triangle.Vertex1.X + _transformVector.X) * SCALE, + (triangle.Vertex1.Y + _transformVector.Y) * SCALE, + (triangle.Vertex1.Z + _transformVector.Z) * SCALE, + (triangle.Vertex2.X + _transformVector.X) * SCALE, + (triangle.Vertex2.Y + _transformVector.Y) * SCALE, + (triangle.Vertex2.Z + _transformVector.Z) * SCALE, + (triangle.Vertex3.X + _transformVector.X) * SCALE, + (triangle.Vertex3.Y + _transformVector.Y) * SCALE, + (triangle.Vertex3.Z + _transformVector.Z) * SCALE + ] + ); + faces.AddRange([0, t * 3, t * 3 + 1, t * 3 + 2]); + } + + return new Mesh + { + vertices = vertices, + faces = faces, + units = _settings.Derived.SpeckleUnits + }; + } + + private List CreateLines(IReadOnlyList lines) => + ( + from line in lines + select new Line + { + start = new Point( + (line.Start.X + _transformVector.X) * SCALE, + (line.Start.Y + _transformVector.Y) * SCALE, + (line.Start.Z + _transformVector.Z) * SCALE, + _settings.Derived.SpeckleUnits + ), + end = new Point( + (line.End.X + _transformVector.X) * SCALE, + (line.End.Y + _transformVector.Y) * SCALE, + (line.End.Z + _transformVector.Z) * SCALE, + _settings.Derived.SpeckleUnits + ), + units = _settings.Derived.SpeckleUnits + } + ).ToList(); + + private static double[]? ConvertArrayToDouble(Array arr) + { + if (arr.Rank != 1) + { + throw new ArgumentException("The input array must have a rank of 1."); + } + + var doubleArray = new double[arr.GetLength(0)]; + for (var ix = arr.GetLowerBound(0); ix <= arr.GetUpperBound(0); ++ix) + { + doubleArray[ix - arr.GetLowerBound(0)] = (double)arr.GetValue(ix); + } + + return doubleArray; + } + + private static bool IsSameFragmentPath(Array a1, Array a2) => + a1.Length == a2.Length && a1.Cast().SequenceEqual(a2.Cast()); +} diff --git a/Converters/Navisworks/Speckle.Converters.NavisworksShared/ToSpeckle/TopLevel/ModelItemTopLevelConverterToSpeckle.cs b/Converters/Navisworks/Speckle.Converters.NavisworksShared/ToSpeckle/TopLevel/ModelItemTopLevelConverterToSpeckle.cs new file mode 100644 index 000000000..17e3a89f2 --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.NavisworksShared/ToSpeckle/TopLevel/ModelItemTopLevelConverterToSpeckle.cs @@ -0,0 +1,108 @@ +using Speckle.Converter.Navisworks.Settings; +using Speckle.Converter.Navisworks.ToSpeckle.PropertyHandlers; +using Speckle.Converters.Common; +using Speckle.Converters.Common.Objects; +using Speckle.Sdk.Models; +using Speckle.Sdk.Models.Collections; + +namespace Speckle.Converter.Navisworks.ToSpeckle; + +/// +/// Converts Navisworks ModelItem objects to Speckle Base objects. +/// +[NameAndRankValue(nameof(NAV.ModelItem), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] +public class ModelItemToToSpeckleConverter : IToSpeckleTopLevelConverter +{ + private readonly StandardPropertyHandler _standardHandler; + private readonly HierarchicalPropertyHandler _hierarchicalHandler; + private readonly IConverterSettingsStore _settingsStore; + private readonly DisplayValueExtractor _displayValueExtractor; + + public ModelItemToToSpeckleConverter( + IConverterSettingsStore settingsStore, + StandardPropertyHandler standardHandler, + HierarchicalPropertyHandler hierarchicalHandler, + DisplayValueExtractor displayValueExtractor + ) + { + _settingsStore = settingsStore; + _standardHandler = standardHandler; + _hierarchicalHandler = hierarchicalHandler; + _displayValueExtractor = displayValueExtractor; + } + + /// + /// Converts a Navisworks object to a Speckle Base object. + /// + /// The object to convert. + /// The converted Speckle Base object. + public Base Convert(object target) + { + if (target == null) + { + throw new ArgumentNullException(nameof(target)); + } + + return Convert((NAV.ModelItem)target); + } + + // Converts a Navisworks ModelItem into a Speckle Base object + private Base Convert(NAV.ModelItem target) + { + var name = GetObjectName(target); + + Base navisworksObject = target.HasGeometry ? CreateGeometryObject(target, name) : CreateNonGeometryObject(name); + + IPropertyHandler handler = ShouldMergeProperties(target) ? _hierarchicalHandler : _standardHandler; + if (!_settingsStore.Current.User.ExcludeProperties) + { + handler.AssignProperties(navisworksObject, target); + } + + return navisworksObject; + } + + /// + /// Determines whether properties should be merged from ancestors. + /// Only geometry objects should have their properties merged. + /// + private static bool ShouldMergeProperties(NAV.ModelItem target) => target.HasGeometry; + + private Base CreateGeometryObject(NAV.ModelItem target, string name) => + new() + { + ["name"] = name, + ["displayValue"] = _displayValueExtractor.GetDisplayValue(target), + ["properties"] = new Dictionary() + }; + + private static Collection CreateNonGeometryObject(string name) => + new() + { + ["name"] = name, + ["elements"] = new List(), + ["properties"] = new Dictionary() + }; + + private static string GetObjectName(NAV.ModelItem target) + { + var targetName = target.DisplayName; + + var firstObjectAncestor = target.FindFirstObjectAncestor(); + + // while the target node name is null keep cycling through parent objects until displayname is not null or empty OR object is firstObjectAncestor + + while (string.IsNullOrEmpty(targetName) && target != firstObjectAncestor) + { + target = target.Parent; + targetName = target.DisplayName; + } + + if (string.IsNullOrEmpty(targetName)) + { + targetName = "Unnamed model item"; + } + + return targetName; + } +} diff --git a/Directory.Packages.props b/Directory.Packages.props index f6f6dbdd4..3d72a918e 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -45,9 +45,10 @@ + - + \ No newline at end of file diff --git a/Local.sln b/Local.sln index 8e6072242..f8d9e93d0 100644 --- a/Local.sln +++ b/Local.sln @@ -218,6 +218,50 @@ Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Speckle.Connectors.ETABSSha EndProject Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Speckle.Converters.ETABSShared", "Converters\CSi\Speckle.Converters.ETABSShared\Speckle.Converters.ETABSShared.shproj", "{36377858-D696-4567-AB05-637F4EC841F5}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Navisworks", "Navisworks", "{95AD741F-44B5-4E01-AF9C-FF9256E26D4B}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "2024", "2024", "{AE58C92C-DBF3-4248-8614-8F283B8CB5F8}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Shared", "Shared", "{46D4410B-009A-43BD-AA32-BDB8B00D9E93}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Connectors.Navisworks2024", "Connectors\Navisworks\Speckle.Connectors.Navisworks2024\Speckle.Connectors.Navisworks2024.csproj", "{CE4D238F-66C2-46B1-BD25-9AC22D7CCB1A}" +EndProject +Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Speckle.Connectors.NavisworksShared", "Connectors\Navisworks\Speckle.Connectors.NavisworksShared\Speckle.Connectors.NavisworksShared.shproj", "{62813838-52F7-43CB-9062-BB2611C00C79}" +EndProject +Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Speckle.Converters.NavisworksShared", "Converters\Navisworks\Speckle.Converters.NavisworksShared\Speckle.Converters.NavisworksShared.shproj", "{23830613-87F8-4655-B523-72189A597962}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "2020", "2020", "{EAFCD59F-3650-497C-94ED-AEEFC3131B18}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Connectors.Navisworks2020", "Connectors\Navisworks\Speckle.Connectors.Navisworks2020\Speckle.Connectors.Navisworks2020.csproj", "{B6985672-4704-4F86-A3E0-2310BF8E6D73}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Converters.Navisworks2020", "Converters\Navisworks\Speckle.Converters.Navisworks2020\Speckle.Converters.Navisworks2020.csproj", "{56680EA7-3599-4D88-83A5-B43BA93AC046}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "2021", "2021", "{78DE77B0-7954-41FF-B374-ABE705881CEC}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Converters.Navisworks2021", "Converters\Navisworks\Speckle.Converters.Navisworks2021\Speckle.Converters.Navisworks2021.csproj", "{6101B44D-3805-4AA1-B8D0-E06C461ED202}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "2022", "2022", "{19F15419-F493-4D53-83EA-F90869D97D6E}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Converters.Navisworks2022", "Converters\Navisworks\Speckle.Converters.Navisworks2022\Speckle.Converters.Navisworks2022.csproj", "{A675E34C-667E-4069-A8FA-92F2C2DB8A27}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "2023", "2023", "{91DCAFB0-283B-4B07-9F6F-7335DECEEB08}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Converters.Navisworks2023", "Converters\Navisworks\Speckle.Converters.Navisworks2023\Speckle.Converters.Navisworks2023.csproj", "{57AFB8CB-B310-49E4-9C53-621A614063CF}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "2025", "2025", "{A88CFA1F-B2D5-4DBE-8496-68D0AFA46F2D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Converters.Navisworks2025", "Converters\Navisworks\Speckle.Converters.Navisworks2025\Speckle.Converters.Navisworks2025.csproj", "{0B5AB325-3791-4A81-B0EF-BCA040381BE2}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Connectors.Navisworks2021", "Connectors\Navisworks\Speckle.Connectors.Navisworks2021\Speckle.Connectors.Navisworks2021.csproj", "{C635619C-2938-4E6F-9E25-56CE1632A7EC}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Connectors.Navisworks2022", "Connectors\Navisworks\Speckle.Connectors.Navisworks2022\Speckle.Connectors.Navisworks2022.csproj", "{04FC86A3-2E25-41A1-98C5-10898616CD78}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Connectors.Navisworks2023", "Connectors\Navisworks\Speckle.Connectors.Navisworks2023\Speckle.Connectors.Navisworks2023.csproj", "{FD44E1F0-D20A-49B6-ADC9-482D911A74FB}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Connectors.Navisworks2025", "Connectors\Navisworks\Speckle.Connectors.Navisworks2025\Speckle.Connectors.Navisworks2025.csproj", "{7791806E-7531-41D8-9C9D-4A1249D9F99C}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Converters.Navisworks2024", "Converters\Navisworks\Speckle.Converters.Navisworks2024\Speckle.Converters.Navisworks2024.csproj", "{52D789C2-5B3C-4225-9F84-C54B3AB4F1B5}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -555,6 +599,78 @@ Global {5E924B13-B3E8-4724-9BA7-CE82E39866EB}.Local|Any CPU.Build.0 = Debug|Any CPU {5E924B13-B3E8-4724-9BA7-CE82E39866EB}.Release|Any CPU.ActiveCfg = Release|Any CPU {5E924B13-B3E8-4724-9BA7-CE82E39866EB}.Release|Any CPU.Build.0 = Release|Any CPU + {CE4D238F-66C2-46B1-BD25-9AC22D7CCB1A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CE4D238F-66C2-46B1-BD25-9AC22D7CCB1A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CE4D238F-66C2-46B1-BD25-9AC22D7CCB1A}.Local|Any CPU.ActiveCfg = Debug|Any CPU + {CE4D238F-66C2-46B1-BD25-9AC22D7CCB1A}.Local|Any CPU.Build.0 = Debug|Any CPU + {CE4D238F-66C2-46B1-BD25-9AC22D7CCB1A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CE4D238F-66C2-46B1-BD25-9AC22D7CCB1A}.Release|Any CPU.Build.0 = Release|Any CPU + {B6985672-4704-4F86-A3E0-2310BF8E6D73}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B6985672-4704-4F86-A3E0-2310BF8E6D73}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B6985672-4704-4F86-A3E0-2310BF8E6D73}.Local|Any CPU.ActiveCfg = Debug|Any CPU + {B6985672-4704-4F86-A3E0-2310BF8E6D73}.Local|Any CPU.Build.0 = Debug|Any CPU + {B6985672-4704-4F86-A3E0-2310BF8E6D73}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B6985672-4704-4F86-A3E0-2310BF8E6D73}.Release|Any CPU.Build.0 = Release|Any CPU + {56680EA7-3599-4D88-83A5-B43BA93AC046}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {56680EA7-3599-4D88-83A5-B43BA93AC046}.Debug|Any CPU.Build.0 = Debug|Any CPU + {56680EA7-3599-4D88-83A5-B43BA93AC046}.Local|Any CPU.ActiveCfg = Local|Any CPU + {56680EA7-3599-4D88-83A5-B43BA93AC046}.Local|Any CPU.Build.0 = Local|Any CPU + {56680EA7-3599-4D88-83A5-B43BA93AC046}.Release|Any CPU.ActiveCfg = Release|Any CPU + {56680EA7-3599-4D88-83A5-B43BA93AC046}.Release|Any CPU.Build.0 = Release|Any CPU + {6101B44D-3805-4AA1-B8D0-E06C461ED202}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6101B44D-3805-4AA1-B8D0-E06C461ED202}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6101B44D-3805-4AA1-B8D0-E06C461ED202}.Local|Any CPU.ActiveCfg = Local|Any CPU + {6101B44D-3805-4AA1-B8D0-E06C461ED202}.Local|Any CPU.Build.0 = Local|Any CPU + {6101B44D-3805-4AA1-B8D0-E06C461ED202}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6101B44D-3805-4AA1-B8D0-E06C461ED202}.Release|Any CPU.Build.0 = Release|Any CPU + {A675E34C-667E-4069-A8FA-92F2C2DB8A27}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A675E34C-667E-4069-A8FA-92F2C2DB8A27}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A675E34C-667E-4069-A8FA-92F2C2DB8A27}.Local|Any CPU.ActiveCfg = Local|Any CPU + {A675E34C-667E-4069-A8FA-92F2C2DB8A27}.Local|Any CPU.Build.0 = Local|Any CPU + {A675E34C-667E-4069-A8FA-92F2C2DB8A27}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A675E34C-667E-4069-A8FA-92F2C2DB8A27}.Release|Any CPU.Build.0 = Release|Any CPU + {57AFB8CB-B310-49E4-9C53-621A614063CF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {57AFB8CB-B310-49E4-9C53-621A614063CF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {57AFB8CB-B310-49E4-9C53-621A614063CF}.Local|Any CPU.ActiveCfg = Local|Any CPU + {57AFB8CB-B310-49E4-9C53-621A614063CF}.Local|Any CPU.Build.0 = Local|Any CPU + {57AFB8CB-B310-49E4-9C53-621A614063CF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {57AFB8CB-B310-49E4-9C53-621A614063CF}.Release|Any CPU.Build.0 = Release|Any CPU + {0B5AB325-3791-4A81-B0EF-BCA040381BE2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0B5AB325-3791-4A81-B0EF-BCA040381BE2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0B5AB325-3791-4A81-B0EF-BCA040381BE2}.Local|Any CPU.ActiveCfg = Local|Any CPU + {0B5AB325-3791-4A81-B0EF-BCA040381BE2}.Local|Any CPU.Build.0 = Local|Any CPU + {0B5AB325-3791-4A81-B0EF-BCA040381BE2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0B5AB325-3791-4A81-B0EF-BCA040381BE2}.Release|Any CPU.Build.0 = Release|Any CPU + {C635619C-2938-4E6F-9E25-56CE1632A7EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C635619C-2938-4E6F-9E25-56CE1632A7EC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C635619C-2938-4E6F-9E25-56CE1632A7EC}.Local|Any CPU.ActiveCfg = Debug|Any CPU + {C635619C-2938-4E6F-9E25-56CE1632A7EC}.Local|Any CPU.Build.0 = Debug|Any CPU + {C635619C-2938-4E6F-9E25-56CE1632A7EC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C635619C-2938-4E6F-9E25-56CE1632A7EC}.Release|Any CPU.Build.0 = Release|Any CPU + {04FC86A3-2E25-41A1-98C5-10898616CD78}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {04FC86A3-2E25-41A1-98C5-10898616CD78}.Debug|Any CPU.Build.0 = Debug|Any CPU + {04FC86A3-2E25-41A1-98C5-10898616CD78}.Local|Any CPU.ActiveCfg = Debug|Any CPU + {04FC86A3-2E25-41A1-98C5-10898616CD78}.Local|Any CPU.Build.0 = Debug|Any CPU + {04FC86A3-2E25-41A1-98C5-10898616CD78}.Release|Any CPU.ActiveCfg = Release|Any CPU + {04FC86A3-2E25-41A1-98C5-10898616CD78}.Release|Any CPU.Build.0 = Release|Any CPU + {FD44E1F0-D20A-49B6-ADC9-482D911A74FB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FD44E1F0-D20A-49B6-ADC9-482D911A74FB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FD44E1F0-D20A-49B6-ADC9-482D911A74FB}.Local|Any CPU.ActiveCfg = Debug|Any CPU + {FD44E1F0-D20A-49B6-ADC9-482D911A74FB}.Local|Any CPU.Build.0 = Debug|Any CPU + {FD44E1F0-D20A-49B6-ADC9-482D911A74FB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FD44E1F0-D20A-49B6-ADC9-482D911A74FB}.Release|Any CPU.Build.0 = Release|Any CPU + {7791806E-7531-41D8-9C9D-4A1249D9F99C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7791806E-7531-41D8-9C9D-4A1249D9F99C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7791806E-7531-41D8-9C9D-4A1249D9F99C}.Local|Any CPU.ActiveCfg = Debug|Any CPU + {7791806E-7531-41D8-9C9D-4A1249D9F99C}.Local|Any CPU.Build.0 = Debug|Any CPU + {7791806E-7531-41D8-9C9D-4A1249D9F99C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7791806E-7531-41D8-9C9D-4A1249D9F99C}.Release|Any CPU.Build.0 = Release|Any CPU + {52D789C2-5B3C-4225-9F84-C54B3AB4F1B5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {52D789C2-5B3C-4225-9F84-C54B3AB4F1B5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {52D789C2-5B3C-4225-9F84-C54B3AB4F1B5}.Local|Any CPU.ActiveCfg = Local|Any CPU + {52D789C2-5B3C-4225-9F84-C54B3AB4F1B5}.Local|Any CPU.Build.0 = Local|Any CPU + {52D789C2-5B3C-4225-9F84-C54B3AB4F1B5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {52D789C2-5B3C-4225-9F84-C54B3AB4F1B5}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -653,6 +769,28 @@ Global {1B5C5FB2-3B22-4371-9AA5-3EDF3B4D62DE} = {D2638AC8-28B2-4667-A47B-3FAB9F900E6F} {5D1E0B0D-56A7-4E13-B9A9-8633E02B8F17} = {D2638AC8-28B2-4667-A47B-3FAB9F900E6F} {36377858-D696-4567-AB05-637F4EC841F5} = {D2638AC8-28B2-4667-A47B-3FAB9F900E6F} + {95AD741F-44B5-4E01-AF9C-FF9256E26D4B} = {42826721-9A18-4762-8BA9-F1429DD5C5B1} + {AE58C92C-DBF3-4248-8614-8F283B8CB5F8} = {95AD741F-44B5-4E01-AF9C-FF9256E26D4B} + {46D4410B-009A-43BD-AA32-BDB8B00D9E93} = {95AD741F-44B5-4E01-AF9C-FF9256E26D4B} + {CE4D238F-66C2-46B1-BD25-9AC22D7CCB1A} = {AE58C92C-DBF3-4248-8614-8F283B8CB5F8} + {62813838-52F7-43CB-9062-BB2611C00C79} = {46D4410B-009A-43BD-AA32-BDB8B00D9E93} + {23830613-87F8-4655-B523-72189A597962} = {46D4410B-009A-43BD-AA32-BDB8B00D9E93} + {EAFCD59F-3650-497C-94ED-AEEFC3131B18} = {95AD741F-44B5-4E01-AF9C-FF9256E26D4B} + {B6985672-4704-4F86-A3E0-2310BF8E6D73} = {EAFCD59F-3650-497C-94ED-AEEFC3131B18} + {56680EA7-3599-4D88-83A5-B43BA93AC046} = {EAFCD59F-3650-497C-94ED-AEEFC3131B18} + {78DE77B0-7954-41FF-B374-ABE705881CEC} = {95AD741F-44B5-4E01-AF9C-FF9256E26D4B} + {6101B44D-3805-4AA1-B8D0-E06C461ED202} = {78DE77B0-7954-41FF-B374-ABE705881CEC} + {19F15419-F493-4D53-83EA-F90869D97D6E} = {95AD741F-44B5-4E01-AF9C-FF9256E26D4B} + {A675E34C-667E-4069-A8FA-92F2C2DB8A27} = {19F15419-F493-4D53-83EA-F90869D97D6E} + {91DCAFB0-283B-4B07-9F6F-7335DECEEB08} = {95AD741F-44B5-4E01-AF9C-FF9256E26D4B} + {57AFB8CB-B310-49E4-9C53-621A614063CF} = {91DCAFB0-283B-4B07-9F6F-7335DECEEB08} + {A88CFA1F-B2D5-4DBE-8496-68D0AFA46F2D} = {95AD741F-44B5-4E01-AF9C-FF9256E26D4B} + {0B5AB325-3791-4A81-B0EF-BCA040381BE2} = {A88CFA1F-B2D5-4DBE-8496-68D0AFA46F2D} + {C635619C-2938-4E6F-9E25-56CE1632A7EC} = {78DE77B0-7954-41FF-B374-ABE705881CEC} + {04FC86A3-2E25-41A1-98C5-10898616CD78} = {19F15419-F493-4D53-83EA-F90869D97D6E} + {FD44E1F0-D20A-49B6-ADC9-482D911A74FB} = {91DCAFB0-283B-4B07-9F6F-7335DECEEB08} + {7791806E-7531-41D8-9C9D-4A1249D9F99C} = {A88CFA1F-B2D5-4DBE-8496-68D0AFA46F2D} + {52D789C2-5B3C-4225-9F84-C54B3AB4F1B5} = {AE58C92C-DBF3-4248-8614-8F283B8CB5F8} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {EE253116-7070-4E9A-BCE8-2911C251B8C8} @@ -660,12 +798,17 @@ Global GlobalSection(SharedMSBuildProjectFiles) = preSolution Connectors\Revit\Speckle.Connectors.RevitShared.Cef\Speckle.Connectors.RevitShared.Cef.projitems*{01f98733-7352-47ad-a594-537d979de3de}*SharedItemsImports = 5 Connectors\Revit\Speckle.Connectors.RevitShared\Speckle.Connectors.RevitShared.projitems*{01f98733-7352-47ad-a594-537d979de3de}*SharedItemsImports = 5 + Connectors\Navisworks\Speckle.Connectors.NavisworksShared\Speckle.Connectors.NavisworksShared.projitems*{04fc86a3-2e25-41a1-98c5-10898616cd78}*SharedItemsImports = 5 + Converters\Navisworks\Speckle.Converters.NavisworksShared\Speckle.Converters.NavisworksShared.projitems*{0b5ab325-3791-4a81-b0ef-bca040381be2}*SharedItemsImports = 5 Connectors\CSi\Speckle.Connectors.CSiShared\Speckle.Connectors.CSiShared.projitems*{1696f113-7f6b-49d6-a4ef-15751c7600f9}*SharedItemsImports = 5 + Connectors\CSi\Speckle.Connectors.ETABSShared\Speckle.Connectors.ETABSShared.projitems*{1696f113-7f6b-49d6-a4ef-15751c7600f9}*SharedItemsImports = 5 Converters\Revit\Speckle.Converters.RevitShared\Speckle.Converters.RevitShared.projitems*{19424b55-058c-4e9c-b86f-700aef9eaec3}*SharedItemsImports = 5 Connectors\Autocad\Speckle.Connectors.AutocadShared\Speckle.Connectors.AutocadShared.projitems*{1b1f674c-cfd5-4eac-adfd-f29a70b9d229}*SharedItemsImports = 5 + Converters\CSi\Speckle.Converters.CSiShared\Speckle.Converters.CSiShared.projitems*{1b5c5fb2-3b22-4371-9aa5-3edf3b4d62de}*SharedItemsImports = 13 Connectors\Rhino\Speckle.Connectors.RhinoShared\Speckle.Connectors.RhinoShared.projitems*{1e2644a9-6b31-4350-8772-ceaad6ee0b21}*SharedItemsImports = 5 Converters\Autocad\Speckle.Converters.AutocadShared\Speckle.Converters.AutocadShared.projitems*{1f93164a-42ee-4d72-b7cd-9ca831f60e09}*SharedItemsImports = 5 Converters\Civil3d\Speckle.Converters.Civil3dShared\Speckle.Converters.Civil3dShared.projitems*{1f93164a-42ee-4d72-b7cd-9ca831f60e09}*SharedItemsImports = 5 + Converters\Navisworks\Speckle.Converters.NavisworksShared\Speckle.Converters.NavisworksShared.projitems*{23830613-87f8-4655-b523-72189a597962}*SharedItemsImports = 13 Converters\Autocad\Speckle.Converters.AutocadShared\Speckle.Converters.AutocadShared.projitems*{25172c49-7aa4-4739-bb07-69785094c379}*SharedItemsImports = 5 Converters\Civil3d\Speckle.Converters.Civil3dShared\Speckle.Converters.Civil3dShared.projitems*{25172c49-7aa4-4739-bb07-69785094c379}*SharedItemsImports = 5 Converters\Revit\Speckle.Converters.RevitShared\Speckle.Converters.RevitShared.projitems*{26391930-f86f-47e0-a5f6-b89919e38ce1}*SharedItemsImports = 5 @@ -673,14 +816,25 @@ Global Connectors\Tekla\Speckle.Connector.TeklaShared\Speckle.Connectors.TeklaShared.projitems*{2cbc9a3d-8ac6-4127-ada5-c6d7f07a35e3}*SharedItemsImports = 5 Converters\Autocad\Speckle.Converters.AutocadShared\Speckle.Converters.AutocadShared.projitems*{2f04e109-2b13-4dfc-961d-b7eea94299bd}*SharedItemsImports = 5 Converters\Civil3d\Speckle.Converters.Civil3dShared\Speckle.Converters.Civil3dShared.projitems*{35175682-da83-4c0a-a49d-b191f5885d8e}*SharedItemsImports = 13 + Converters\CSi\Speckle.Converters.ETABSShared\Speckle.Converters.ETABSShared.projitems*{36377858-d696-4567-ab05-637f4ec841f5}*SharedItemsImports = 13 Connectors\Tekla\Speckle.Connector.TeklaShared\Speckle.Connectors.TeklaShared.projitems*{3ab9028b-b2d2-464b-9ba3-39c192441e50}*SharedItemsImports = 13 + Converters\CSi\Speckle.Converters.CSiShared\Speckle.Converters.CSiShared.projitems*{3b81b220-92e3-43fc-86c6-1e6dbeeb1917}*SharedItemsImports = 5 + Converters\CSi\Speckle.Converters.ETABSShared\Speckle.Converters.ETABSShared.projitems*{3b81b220-92e3-43fc-86c6-1e6dbeeb1917}*SharedItemsImports = 5 Connectors\Autocad\Speckle.Connectors.AutocadShared\Speckle.Connectors.AutocadShared.projitems*{41bc679f-887f-44cf-971d-a5502ee87db0}*SharedItemsImports = 13 Converters\Tekla\Speckle.Converters.TeklaShared\Speckle.Converters.TeklaShared.projitems*{4c373fd0-e3f3-478b-ad32-cdbf340d21a9}*SharedItemsImports = 5 Converters\Revit\Speckle.Converters.RevitShared\Speckle.Converters.RevitShared.projitems*{4d40a101-07e6-4ff2-8934-83434932591d}*SharedItemsImports = 5 Converters\Tekla\Speckle.Converters.TeklaShared\Speckle.Converters.TeklaShared.projitems*{52666479-5401-47d6-b7ba-d554784439ea}*SharedItemsImports = 13 + Converters\Navisworks\Speckle.Converters.NavisworksShared\Speckle.Converters.NavisworksShared.projitems*{52d789c2-5b3c-4225-9f84-c54b3ab4f1b5}*SharedItemsImports = 5 + Converters\Navisworks\Speckle.Converters.NavisworksShared\Speckle.Converters.NavisworksShared.projitems*{56680ea7-3599-4d88-83a5-b43ba93ac046}*SharedItemsImports = 5 + Converters\Navisworks\Speckle.Converters.NavisworksShared\Speckle.Converters.NavisworksShared.projitems*{57afb8cb-b310-49e4-9c53-621a614063cf}*SharedItemsImports = 5 Converters\Rhino\Speckle.Converters.RhinoShared\Speckle.Converters.RhinoShared.projitems*{57c1aa51-5be2-40f3-8cb2-8b7d2af0ff5c}*SharedItemsImports = 5 + Connectors\CSi\Speckle.Connectors.ETABSShared\Speckle.Connectors.ETABSShared.projitems*{5d1e0b0d-56a7-4e13-b9a9-8633e02b8f17}*SharedItemsImports = 13 + Converters\CSi\Speckle.Converters.CSiShared\Speckle.Converters.CSiShared.projitems*{5e924b13-b3e8-4724-9ba7-ce82e39866eb}*SharedItemsImports = 5 + Converters\CSi\Speckle.Converters.ETABSShared\Speckle.Converters.ETABSShared.projitems*{5e924b13-b3e8-4724-9ba7-ce82e39866eb}*SharedItemsImports = 5 + Converters\Navisworks\Speckle.Converters.NavisworksShared\Speckle.Converters.NavisworksShared.projitems*{6101b44d-3805-4aa1-b8d0-e06c461ed202}*SharedItemsImports = 5 Connectors\Revit\Speckle.Connectors.RevitShared.Cef\Speckle.Connectors.RevitShared.Cef.projitems*{617bd3c7-87d9-4d28-8ac9-4910945bb9fc}*SharedItemsImports = 5 Connectors\Revit\Speckle.Connectors.RevitShared\Speckle.Connectors.RevitShared.projitems*{617bd3c7-87d9-4d28-8ac9-4910945bb9fc}*SharedItemsImports = 5 + Connectors\Navisworks\Speckle.Connectors.NavisworksShared\Speckle.Connectors.NavisworksShared.projitems*{62813838-52f7-43cb-9062-bb2611c00c79}*SharedItemsImports = 13 Converters\Autocad\Speckle.Converters.AutocadShared\Speckle.Converters.AutocadShared.projitems*{62f50a22-8bbf-497a-b599-f858dff1d31c}*SharedItemsImports = 5 Converters\Autocad\Speckle.Converters.AutocadShared\Speckle.Converters.AutocadShared.projitems*{631c295a-7ccf-4b42-8686-7034e31469e7}*SharedItemsImports = 5 Converters\Rhino\Speckle.Converters.RhinoShared\Speckle.Converters.RhinoShared.projitems*{65a2f556-f14a-49f3-8a92-7f2e1e7ed3b5}*SharedItemsImports = 5 @@ -689,11 +843,13 @@ Global Converters\Revit\Speckle.Converters.RevitShared\Speckle.Converters.RevitShared.projitems*{68cf9bdf-94ac-4d2d-a7bd-d1c064f97051}*SharedItemsImports = 5 Connectors\Revit\Speckle.Connectors.RevitShared.Cef\Speckle.Connectors.RevitShared.Cef.projitems*{6a40cbe4-ecab-4ced-9917-5c64cbf75da6}*SharedItemsImports = 13 Connectors\Rhino\Speckle.Connectors.RhinoShared\Speckle.Connectors.RhinoShared.projitems*{6f3fd892-6315-4f75-bfbd-843a489f8b94}*SharedItemsImports = 5 + Connectors\Navisworks\Speckle.Connectors.NavisworksShared\Speckle.Connectors.NavisworksShared.projitems*{7791806e-7531-41d8-9c9d-4a1249d9f99c}*SharedItemsImports = 5 Connectors\Revit\Speckle.Connectors.RevitShared.Cef\Speckle.Connectors.RevitShared.Cef.projitems*{7f1fdcf2-0ce8-4119-b3c1-f2cc6d7e1c36}*SharedItemsImports = 5 Connectors\Revit\Speckle.Connectors.RevitShared\Speckle.Connectors.RevitShared.projitems*{7f1fdcf2-0ce8-4119-b3c1-f2cc6d7e1c36}*SharedItemsImports = 5 Connectors\Autocad\Speckle.Connectors.AutocadShared\Speckle.Connectors.AutocadShared.projitems*{89c4cbc7-1606-40de-b6da-fbe3aac98395}*SharedItemsImports = 5 Converters\Autocad\Speckle.Converters.AutocadShared\Speckle.Converters.AutocadShared.projitems*{9add1b7a-6401-4202-8613-f668e2fbc0a4}*SharedItemsImports = 13 Connectors\Tekla\Speckle.Connector.TeklaShared\Speckle.Connectors.TeklaShared.projitems*{a277cdf6-7c8f-4870-8d15-af35f4749caa}*SharedItemsImports = 5 + Converters\Navisworks\Speckle.Converters.NavisworksShared\Speckle.Converters.NavisworksShared.projitems*{a675e34c-667e-4069-a8fa-92f2c2db8a27}*SharedItemsImports = 5 Connectors\Revit\Speckle.Connectors.RevitShared.Cef\Speckle.Connectors.RevitShared.Cef.projitems*{a6de3da0-b242-4f49-aef0-4e26af92d16c}*SharedItemsImports = 5 Connectors\Revit\Speckle.Connectors.RevitShared\Speckle.Connectors.RevitShared.projitems*{a6de3da0-b242-4f49-aef0-4e26af92d16c}*SharedItemsImports = 5 Connectors\CSi\Speckle.Connectors.CSiShared\Speckle.Connectors.CSiShared.projitems*{a8e949b8-aa55-4909-99f0-8b551791a1f8}*SharedItemsImports = 13 @@ -701,8 +857,10 @@ Global Converters\Autocad\Speckle.Converters.AutocadShared\Speckle.Converters.AutocadShared.projitems*{ae75b68f-3594-403b-9719-9c36da0e3f8a}*SharedItemsImports = 5 Converters\Civil3d\Speckle.Converters.Civil3dShared\Speckle.Converters.Civil3dShared.projitems*{ae75b68f-3594-403b-9719-9c36da0e3f8a}*SharedItemsImports = 5 Connectors\CSi\Speckle.Connectors.CSiShared\Speckle.Connectors.CSiShared.projitems*{afb47b71-4185-4135-98bb-eedffa8aa194}*SharedItemsImports = 5 + Connectors\CSi\Speckle.Connectors.ETABSShared\Speckle.Connectors.ETABSShared.projitems*{afb47b71-4185-4135-98bb-eedffa8aa194}*SharedItemsImports = 5 Converters\Tekla\Speckle.Converters.TeklaShared\Speckle.Converters.TeklaShared.projitems*{b236750b-cfe5-4640-9073-77a27a7257f6}*SharedItemsImports = 5 Connectors\Rhino\Speckle.Connectors.RhinoShared\Speckle.Connectors.RhinoShared.projitems*{b37d4b9a-8d3f-4fa5-b9c8-e6c5f8a0c1e2}*SharedItemsImports = 13 + Connectors\Navisworks\Speckle.Connectors.NavisworksShared\Speckle.Connectors.NavisworksShared.projitems*{b6985672-4704-4f86-a3e0-2310bf8e6d73}*SharedItemsImports = 5 Converters\Autocad\Speckle.Converters.AutocadShared\Speckle.Converters.AutocadShared.projitems*{b6c04ec4-ed81-4e61-b4b2-4902015808d7}*SharedItemsImports = 5 Converters\Civil3d\Speckle.Converters.Civil3dShared\Speckle.Converters.Civil3dShared.projitems*{b6c04ec4-ed81-4e61-b4b2-4902015808d7}*SharedItemsImports = 5 Converters\Autocad\Speckle.Converters.AutocadShared\Speckle.Converters.AutocadShared.projitems*{c2de264a-aa87-4012-b954-17e3f403a237}*SharedItemsImports = 5 @@ -712,8 +870,10 @@ Global Converters\Revit\Speckle.Converters.RevitShared\Speckle.Converters.RevitShared.projitems*{c34d0246-6c16-4e81-ae57-2ce70f81484b}*SharedItemsImports = 5 Connectors\Autocad\Speckle.Connectors.AutocadShared\Speckle.Connectors.AutocadShared.projitems*{c3879337-cd00-4011-89c5-585dd2cc3ed5}*SharedItemsImports = 5 Connectors\Autocad\Speckle.Connectors.Civil3dShared\Speckle.Connectors.Civil3dShared.projitems*{c3879337-cd00-4011-89c5-585dd2cc3ed5}*SharedItemsImports = 5 + Connectors\Navisworks\Speckle.Connectors.NavisworksShared\Speckle.Connectors.NavisworksShared.projitems*{c635619c-2938-4e6f-9e25-56ce1632a7ec}*SharedItemsImports = 5 Connectors\Autocad\Speckle.Connectors.AutocadShared\Speckle.Connectors.AutocadShared.projitems*{ca8eae01-ab9f-4ec1-b6f3-73721487e9e1}*SharedItemsImports = 5 Connectors\Autocad\Speckle.Connectors.Civil3dShared\Speckle.Connectors.Civil3dShared.projitems*{ca8eae01-ab9f-4ec1-b6f3-73721487e9e1}*SharedItemsImports = 5 + Connectors\Navisworks\Speckle.Connectors.NavisworksShared\Speckle.Connectors.NavisworksShared.projitems*{ce4d238f-66c2-46b1-bd25-9ac22d7ccb1a}*SharedItemsImports = 5 Connectors\Autocad\Speckle.Connectors.AutocadShared\Speckle.Connectors.AutocadShared.projitems*{d4566bf1-56cf-477a-8769-63299a9f45a3}*SharedItemsImports = 5 Connectors\Autocad\Speckle.Connectors.Civil3dShared\Speckle.Connectors.Civil3dShared.projitems*{d4566bf1-56cf-477a-8769-63299a9f45a3}*SharedItemsImports = 5 Connectors\Revit\Speckle.Connectors.RevitShared\Speckle.Connectors.RevitShared.projitems*{dc570fff-6fe5-47bd-8bc1-b471a6067786}*SharedItemsImports = 13 @@ -722,6 +882,7 @@ Global Converters\Revit\Speckle.Converters.RevitShared.Tests\Speckle.Converters.RevitShared.Tests.projitems*{e1c43415-3202-45f4-8bf9-a4dd7d7f2ed6}*SharedItemsImports = 13 Connectors\Autocad\Speckle.Connectors.AutocadShared\Speckle.Connectors.AutocadShared.projitems*{eaad080d-49af-49bf-b8bd-a18ceb210734}*SharedItemsImports = 5 Connectors\Autocad\Speckle.Connectors.Civil3dShared\Speckle.Connectors.Civil3dShared.projitems*{efd01520-93e8-4cca-8e03-9cdc635f55f4}*SharedItemsImports = 13 + Connectors\Navisworks\Speckle.Connectors.NavisworksShared\Speckle.Connectors.NavisworksShared.projitems*{fd44e1f0-d20a-49b6-adc9-482d911a74fb}*SharedItemsImports = 5 Connectors\Autocad\Speckle.Connectors.AutocadShared\Speckle.Connectors.AutocadShared.projitems*{fe4cb79d-4e59-4070-871c-108545537e6c}*SharedItemsImports = 5 Connectors\Autocad\Speckle.Connectors.Civil3dShared\Speckle.Connectors.Civil3dShared.projitems*{fe4cb79d-4e59-4070-871c-108545537e6c}*SharedItemsImports = 5 EndGlobalSection diff --git a/Speckle.Connectors.sln b/Speckle.Connectors.sln index 090aa29d7..a28a14618 100644 --- a/Speckle.Connectors.sln +++ b/Speckle.Connectors.sln @@ -209,6 +209,54 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Speckle.Converters.ETABS22" EndProject Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Speckle.Converters.CSiShared", "Converters\CSi\Speckle.Converters.CSiShared\Speckle.Converters.CSiShared.shproj", "{1B5C5FB2-3B22-4371-9AA5-3EDF3B4D62DE}" EndProject +Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Speckle.Connectors.ETABSShared", "Connectors\CSi\Speckle.Connectors.ETABSShared\Speckle.Connectors.ETABSShared.shproj", "{5D1E0B0D-56A7-4E13-B9A9-8633E02B8F17}" +EndProject +Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Speckle.Converters.ETABSShared", "Converters\CSi\Speckle.Converters.ETABSShared\Speckle.Converters.ETABSShared.shproj", "{36377858-D696-4567-AB05-637F4EC841F5}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Navisworks", "Navisworks", "{7B95C512-C1CD-4110-A9A9-CECCD9630353}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Shared", "Shared", "{3C54FE49-F14E-43A2-B1DF-85D5C7638117}" +EndProject +Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Speckle.Connectors.NavisworksShared", "Connectors\Navisworks\Speckle.Connectors.NavisworksShared\Speckle.Connectors.NavisworksShared.shproj", "{62813838-52F7-43CB-9062-BB2611C00C79}" +EndProject +Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Speckle.Converters.NavisworksShared", "Converters\Navisworks\Speckle.Converters.NavisworksShared\Speckle.Converters.NavisworksShared.shproj", "{23830613-87F8-4655-B523-72189A597962}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "2024", "2024", "{96FA29FE-766A-4500-853A-0A4D1BD0A78F}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Connectors.Navisworks2024", "Connectors\Navisworks\Speckle.Connectors.Navisworks2024\Speckle.Connectors.Navisworks2024.csproj", "{8C14D930-03D2-4E2F-9D8D-A6B57F57A659}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Converters.Navisworks2024", "Converters\Navisworks\Speckle.Converters.Navisworks2024\Speckle.Converters.Navisworks2024.csproj", "{B12D6A2E-51FD-4197-B442-46C7D8F5E4E4}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "2020", "2020", "{EAFCD59F-3650-497C-94ED-AEEFC3131B18}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Connectors.Navisworks2020", "Connectors\Navisworks\Speckle.Connectors.Navisworks2020\Speckle.Connectors.Navisworks2020.csproj", "{B6985672-4704-4F86-A3E0-2310BF8E6D73}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Converters.Navisworks2020", "Converters\Navisworks\Speckle.Converters.Navisworks2020\Speckle.Converters.Navisworks2020.csproj", "{56680EA7-3599-4D88-83A5-B43BA93AC046}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "2021", "2021", "{78DE77B0-7954-41FF-B374-ABE705881CEC}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Converters.Navisworks2021", "Converters\Navisworks\Speckle.Converters.Navisworks2021\Speckle.Converters.Navisworks2021.csproj", "{6101B44D-3805-4AA1-B8D0-E06C461ED202}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "2022", "2022", "{19F15419-F493-4D53-83EA-F90869D97D6E}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Converters.Navisworks2022", "Converters\Navisworks\Speckle.Converters.Navisworks2022\Speckle.Converters.Navisworks2022.csproj", "{A675E34C-667E-4069-A8FA-92F2C2DB8A27}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "2023", "2023", "{91DCAFB0-283B-4B07-9F6F-7335DECEEB08}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Converters.Navisworks2023", "Converters\Navisworks\Speckle.Converters.Navisworks2023\Speckle.Converters.Navisworks2023.csproj", "{57AFB8CB-B310-49E4-9C53-621A614063CF}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "2025", "2025", "{A88CFA1F-B2D5-4DBE-8496-68D0AFA46F2D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Converters.Navisworks2025", "Converters\Navisworks\Speckle.Converters.Navisworks2025\Speckle.Converters.Navisworks2025.csproj", "{0B5AB325-3791-4A81-B0EF-BCA040381BE2}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Connectors.Navisworks2021", "Connectors\Navisworks\Speckle.Connectors.Navisworks2021\Speckle.Connectors.Navisworks2021.csproj", "{C635619C-2938-4E6F-9E25-56CE1632A7EC}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Connectors.Navisworks2022", "Connectors\Navisworks\Speckle.Connectors.Navisworks2022\Speckle.Connectors.Navisworks2022.csproj", "{04FC86A3-2E25-41A1-98C5-10898616CD78}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Connectors.Navisworks2023", "Connectors\Navisworks\Speckle.Connectors.Navisworks2023\Speckle.Connectors.Navisworks2023.csproj", "{FD44E1F0-D20A-49B6-ADC9-482D911A74FB}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Connectors.Navisworks2025", "Connectors\Navisworks\Speckle.Connectors.Navisworks2025\Speckle.Connectors.Navisworks2025.csproj", "{7791806E-7531-41D8-9C9D-4A1249D9F99C}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -528,6 +576,78 @@ Global {D61ECD90-3D17-4AF0-8B1A-0E0AD302DFF9}.Local|Any CPU.Build.0 = Debug|Any CPU {D61ECD90-3D17-4AF0-8B1A-0E0AD302DFF9}.Release|Any CPU.ActiveCfg = Release|Any CPU {D61ECD90-3D17-4AF0-8B1A-0E0AD302DFF9}.Release|Any CPU.Build.0 = Release|Any CPU + {8C14D930-03D2-4E2F-9D8D-A6B57F57A659}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8C14D930-03D2-4E2F-9D8D-A6B57F57A659}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8C14D930-03D2-4E2F-9D8D-A6B57F57A659}.Local|Any CPU.ActiveCfg = Debug|Any CPU + {8C14D930-03D2-4E2F-9D8D-A6B57F57A659}.Local|Any CPU.Build.0 = Debug|Any CPU + {8C14D930-03D2-4E2F-9D8D-A6B57F57A659}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8C14D930-03D2-4E2F-9D8D-A6B57F57A659}.Release|Any CPU.Build.0 = Release|Any CPU + {B12D6A2E-51FD-4197-B442-46C7D8F5E4E4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B12D6A2E-51FD-4197-B442-46C7D8F5E4E4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B12D6A2E-51FD-4197-B442-46C7D8F5E4E4}.Local|Any CPU.ActiveCfg = Local|Any CPU + {B12D6A2E-51FD-4197-B442-46C7D8F5E4E4}.Local|Any CPU.Build.0 = Local|Any CPU + {B12D6A2E-51FD-4197-B442-46C7D8F5E4E4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B12D6A2E-51FD-4197-B442-46C7D8F5E4E4}.Release|Any CPU.Build.0 = Release|Any CPU + {B6985672-4704-4F86-A3E0-2310BF8E6D73}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B6985672-4704-4F86-A3E0-2310BF8E6D73}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B6985672-4704-4F86-A3E0-2310BF8E6D73}.Local|Any CPU.ActiveCfg = Debug|Any CPU + {B6985672-4704-4F86-A3E0-2310BF8E6D73}.Local|Any CPU.Build.0 = Debug|Any CPU + {B6985672-4704-4F86-A3E0-2310BF8E6D73}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B6985672-4704-4F86-A3E0-2310BF8E6D73}.Release|Any CPU.Build.0 = Release|Any CPU + {56680EA7-3599-4D88-83A5-B43BA93AC046}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {56680EA7-3599-4D88-83A5-B43BA93AC046}.Debug|Any CPU.Build.0 = Debug|Any CPU + {56680EA7-3599-4D88-83A5-B43BA93AC046}.Local|Any CPU.ActiveCfg = Local|Any CPU + {56680EA7-3599-4D88-83A5-B43BA93AC046}.Local|Any CPU.Build.0 = Local|Any CPU + {56680EA7-3599-4D88-83A5-B43BA93AC046}.Release|Any CPU.ActiveCfg = Release|Any CPU + {56680EA7-3599-4D88-83A5-B43BA93AC046}.Release|Any CPU.Build.0 = Release|Any CPU + {6101B44D-3805-4AA1-B8D0-E06C461ED202}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6101B44D-3805-4AA1-B8D0-E06C461ED202}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6101B44D-3805-4AA1-B8D0-E06C461ED202}.Local|Any CPU.ActiveCfg = Local|Any CPU + {6101B44D-3805-4AA1-B8D0-E06C461ED202}.Local|Any CPU.Build.0 = Local|Any CPU + {6101B44D-3805-4AA1-B8D0-E06C461ED202}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6101B44D-3805-4AA1-B8D0-E06C461ED202}.Release|Any CPU.Build.0 = Release|Any CPU + {A675E34C-667E-4069-A8FA-92F2C2DB8A27}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A675E34C-667E-4069-A8FA-92F2C2DB8A27}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A675E34C-667E-4069-A8FA-92F2C2DB8A27}.Local|Any CPU.ActiveCfg = Local|Any CPU + {A675E34C-667E-4069-A8FA-92F2C2DB8A27}.Local|Any CPU.Build.0 = Local|Any CPU + {A675E34C-667E-4069-A8FA-92F2C2DB8A27}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A675E34C-667E-4069-A8FA-92F2C2DB8A27}.Release|Any CPU.Build.0 = Release|Any CPU + {57AFB8CB-B310-49E4-9C53-621A614063CF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {57AFB8CB-B310-49E4-9C53-621A614063CF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {57AFB8CB-B310-49E4-9C53-621A614063CF}.Local|Any CPU.ActiveCfg = Local|Any CPU + {57AFB8CB-B310-49E4-9C53-621A614063CF}.Local|Any CPU.Build.0 = Local|Any CPU + {57AFB8CB-B310-49E4-9C53-621A614063CF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {57AFB8CB-B310-49E4-9C53-621A614063CF}.Release|Any CPU.Build.0 = Release|Any CPU + {0B5AB325-3791-4A81-B0EF-BCA040381BE2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0B5AB325-3791-4A81-B0EF-BCA040381BE2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0B5AB325-3791-4A81-B0EF-BCA040381BE2}.Local|Any CPU.ActiveCfg = Local|Any CPU + {0B5AB325-3791-4A81-B0EF-BCA040381BE2}.Local|Any CPU.Build.0 = Local|Any CPU + {0B5AB325-3791-4A81-B0EF-BCA040381BE2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0B5AB325-3791-4A81-B0EF-BCA040381BE2}.Release|Any CPU.Build.0 = Release|Any CPU + {C635619C-2938-4E6F-9E25-56CE1632A7EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C635619C-2938-4E6F-9E25-56CE1632A7EC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C635619C-2938-4E6F-9E25-56CE1632A7EC}.Local|Any CPU.ActiveCfg = Debug|Any CPU + {C635619C-2938-4E6F-9E25-56CE1632A7EC}.Local|Any CPU.Build.0 = Debug|Any CPU + {C635619C-2938-4E6F-9E25-56CE1632A7EC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C635619C-2938-4E6F-9E25-56CE1632A7EC}.Release|Any CPU.Build.0 = Release|Any CPU + {04FC86A3-2E25-41A1-98C5-10898616CD78}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {04FC86A3-2E25-41A1-98C5-10898616CD78}.Debug|Any CPU.Build.0 = Debug|Any CPU + {04FC86A3-2E25-41A1-98C5-10898616CD78}.Local|Any CPU.ActiveCfg = Debug|Any CPU + {04FC86A3-2E25-41A1-98C5-10898616CD78}.Local|Any CPU.Build.0 = Debug|Any CPU + {04FC86A3-2E25-41A1-98C5-10898616CD78}.Release|Any CPU.ActiveCfg = Release|Any CPU + {04FC86A3-2E25-41A1-98C5-10898616CD78}.Release|Any CPU.Build.0 = Release|Any CPU + {FD44E1F0-D20A-49B6-ADC9-482D911A74FB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FD44E1F0-D20A-49B6-ADC9-482D911A74FB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FD44E1F0-D20A-49B6-ADC9-482D911A74FB}.Local|Any CPU.ActiveCfg = Debug|Any CPU + {FD44E1F0-D20A-49B6-ADC9-482D911A74FB}.Local|Any CPU.Build.0 = Debug|Any CPU + {FD44E1F0-D20A-49B6-ADC9-482D911A74FB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FD44E1F0-D20A-49B6-ADC9-482D911A74FB}.Release|Any CPU.Build.0 = Release|Any CPU + {7791806E-7531-41D8-9C9D-4A1249D9F99C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7791806E-7531-41D8-9C9D-4A1249D9F99C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7791806E-7531-41D8-9C9D-4A1249D9F99C}.Local|Any CPU.ActiveCfg = Debug|Any CPU + {7791806E-7531-41D8-9C9D-4A1249D9F99C}.Local|Any CPU.Build.0 = Debug|Any CPU + {7791806E-7531-41D8-9C9D-4A1249D9F99C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7791806E-7531-41D8-9C9D-4A1249D9F99C}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -624,6 +744,30 @@ Global {791E3288-8001-4D54-8EAB-03D1D7F51044} = {DA6A607B-C267-4B2E-9C8A-F50B2F1BBFE0} {D61ECD90-3D17-4AF0-8B1A-0E0AD302DFF9} = {C6CD9332-874A-49DA-BEB6-3FAA5A700793} {1B5C5FB2-3B22-4371-9AA5-3EDF3B4D62DE} = {181F0468-B7A7-4CD7-ABD1-7F32B3ABB991} + {5D1E0B0D-56A7-4E13-B9A9-8633E02B8F17} = {181F0468-B7A7-4CD7-ABD1-7F32B3ABB991} + {36377858-D696-4567-AB05-637F4EC841F5} = {181F0468-B7A7-4CD7-ABD1-7F32B3ABB991} + {7B95C512-C1CD-4110-A9A9-CECCD9630353} = {42826721-9A18-4762-8BA9-F1429DD5C5B1} + {3C54FE49-F14E-43A2-B1DF-85D5C7638117} = {7B95C512-C1CD-4110-A9A9-CECCD9630353} + {62813838-52F7-43CB-9062-BB2611C00C79} = {3C54FE49-F14E-43A2-B1DF-85D5C7638117} + {23830613-87F8-4655-B523-72189A597962} = {3C54FE49-F14E-43A2-B1DF-85D5C7638117} + {96FA29FE-766A-4500-853A-0A4D1BD0A78F} = {7B95C512-C1CD-4110-A9A9-CECCD9630353} + {8C14D930-03D2-4E2F-9D8D-A6B57F57A659} = {96FA29FE-766A-4500-853A-0A4D1BD0A78F} + {B12D6A2E-51FD-4197-B442-46C7D8F5E4E4} = {96FA29FE-766A-4500-853A-0A4D1BD0A78F} + {EAFCD59F-3650-497C-94ED-AEEFC3131B18} = {7B95C512-C1CD-4110-A9A9-CECCD9630353} + {B6985672-4704-4F86-A3E0-2310BF8E6D73} = {EAFCD59F-3650-497C-94ED-AEEFC3131B18} + {56680EA7-3599-4D88-83A5-B43BA93AC046} = {EAFCD59F-3650-497C-94ED-AEEFC3131B18} + {78DE77B0-7954-41FF-B374-ABE705881CEC} = {7B95C512-C1CD-4110-A9A9-CECCD9630353} + {6101B44D-3805-4AA1-B8D0-E06C461ED202} = {78DE77B0-7954-41FF-B374-ABE705881CEC} + {19F15419-F493-4D53-83EA-F90869D97D6E} = {7B95C512-C1CD-4110-A9A9-CECCD9630353} + {A675E34C-667E-4069-A8FA-92F2C2DB8A27} = {19F15419-F493-4D53-83EA-F90869D97D6E} + {91DCAFB0-283B-4B07-9F6F-7335DECEEB08} = {7B95C512-C1CD-4110-A9A9-CECCD9630353} + {57AFB8CB-B310-49E4-9C53-621A614063CF} = {91DCAFB0-283B-4B07-9F6F-7335DECEEB08} + {A88CFA1F-B2D5-4DBE-8496-68D0AFA46F2D} = {7B95C512-C1CD-4110-A9A9-CECCD9630353} + {0B5AB325-3791-4A81-B0EF-BCA040381BE2} = {A88CFA1F-B2D5-4DBE-8496-68D0AFA46F2D} + {C635619C-2938-4E6F-9E25-56CE1632A7EC} = {78DE77B0-7954-41FF-B374-ABE705881CEC} + {04FC86A3-2E25-41A1-98C5-10898616CD78} = {19F15419-F493-4D53-83EA-F90869D97D6E} + {FD44E1F0-D20A-49B6-ADC9-482D911A74FB} = {91DCAFB0-283B-4B07-9F6F-7335DECEEB08} + {7791806E-7531-41D8-9C9D-4A1249D9F99C} = {A88CFA1F-B2D5-4DBE-8496-68D0AFA46F2D} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {EE253116-7070-4E9A-BCE8-2911C251B8C8} @@ -632,12 +776,15 @@ Global Connectors\Revit\Speckle.Connectors.RevitShared.Cef\Speckle.Connectors.RevitShared.Cef.projitems*{01f98733-7352-47ad-a594-537d979de3de}*SharedItemsImports = 5 Connectors\Revit\Speckle.Connectors.RevitShared\Speckle.Connectors.RevitShared.projitems*{01f98733-7352-47ad-a594-537d979de3de}*SharedItemsImports = 5 Connectors\Tekla\Speckle.Connector.TeklaShared\Speckle.Connectors.TeklaShared.projitems*{025c85f8-f741-4600-bc46-5fead754b65d}*SharedItemsImports = 5 + Connectors\Navisworks\Speckle.Connectors.NavisworksShared\Speckle.Connectors.NavisworksShared.projitems*{04fc86a3-2e25-41a1-98c5-10898616cd78}*SharedItemsImports = 5 + Converters\Navisworks\Speckle.Converters.NavisworksShared\Speckle.Converters.NavisworksShared.projitems*{0b5ab325-3791-4a81-b0ef-bca040381be2}*SharedItemsImports = 5 Connectors\CSi\Speckle.Connectors.CsiShared\Speckle.Connectors.CsiShared.projitems*{115d6106-1801-484a-b4e5-bcc94b6e5c7f}*SharedItemsImports = 5 Connectors\CSi\Speckle.Connectors.ETABSShared\Speckle.Connectors.ETABSShared.projitems*{115d6106-1801-484a-b4e5-bcc94b6e5c7f}*SharedItemsImports = 5 Converters\Revit\Speckle.Converters.RevitShared\Speckle.Converters.RevitShared.projitems*{19424b55-058c-4e9c-b86f-700aef9eaec3}*SharedItemsImports = 5 Converters\CSi\Speckle.Converters.CSiShared\Speckle.Converters.CSiShared.projitems*{1b5c5fb2-3b22-4371-9aa5-3edf3b4d62de}*SharedItemsImports = 13 Connectors\Rhino\Speckle.Connectors.RhinoShared\Speckle.Connectors.RhinoShared.projitems*{1e2644a9-6b31-4350-8772-ceaad6ee0b21}*SharedItemsImports = 5 Connectors\Tekla\Speckle.Connector.TeklaShared\Speckle.Connectors.TeklaShared.projitems*{2319c00f-b268-4e4c-9f88-6b379e2bbd22}*SharedItemsImports = 5 + Converters\Navisworks\Speckle.Converters.NavisworksShared\Speckle.Converters.NavisworksShared.projitems*{23830613-87f8-4655-b523-72189a597962}*SharedItemsImports = 13 Converters\Autocad\Speckle.Converters.AutocadShared\Speckle.Converters.AutocadShared.projitems*{25172c49-7aa4-4739-bb07-69785094c379}*SharedItemsImports = 5 Converters\Civil3d\Speckle.Converters.Civil3dShared\Speckle.Converters.Civil3dShared.projitems*{25172c49-7aa4-4739-bb07-69785094c379}*SharedItemsImports = 5 Converters\Revit\Speckle.Converters.RevitShared\Speckle.Converters.RevitShared.projitems*{26391930-f86f-47e0-a5f6-b89919e38ce1}*SharedItemsImports = 5 @@ -649,17 +796,23 @@ Global Converters\Revit\Speckle.Converters.RevitShared\Speckle.Converters.RevitShared.projitems*{4d40a101-07e6-4ff2-8934-83434932591d}*SharedItemsImports = 5 Converters\Tekla\Speckle.Converters.TeklaShared\Speckle.Converters.TeklaShared.projitems*{52666479-5401-47d6-b7ba-d554784439ea}*SharedItemsImports = 13 Converters\Autocad\Speckle.Converters.AutocadShared\Speckle.Converters.AutocadShared.projitems*{5505b953-d434-49ce-8ebd-efd7b3c378f7}*SharedItemsImports = 5 + Converters\Navisworks\Speckle.Converters.NavisworksShared\Speckle.Converters.NavisworksShared.projitems*{56680ea7-3599-4d88-83a5-b43ba93ac046}*SharedItemsImports = 5 Converters\Rhino\Speckle.Converters.RhinoShared\Speckle.Converters.RhinoShared.projitems*{56a909ae-6e99-4d4d-a22e-38bdc5528b8e}*SharedItemsImports = 5 + Converters\Navisworks\Speckle.Converters.NavisworksShared\Speckle.Converters.NavisworksShared.projitems*{57afb8cb-b310-49e4-9c53-621a614063cf}*SharedItemsImports = 5 Converters\Autocad\Speckle.Converters.AutocadShared\Speckle.Converters.AutocadShared.projitems*{5cdec958-708e-4d19-a79e-0c1db23a6039}*SharedItemsImports = 5 Converters\Civil3d\Speckle.Converters.Civil3dShared\Speckle.Converters.Civil3dShared.projitems*{5cdec958-708e-4d19-a79e-0c1db23a6039}*SharedItemsImports = 5 + Connectors\CSi\Speckle.Connectors.ETABSShared\Speckle.Connectors.ETABSShared.projitems*{5d1e0b0d-56a7-4e13-b9a9-8633e02b8f17}*SharedItemsImports = 13 + Converters\Navisworks\Speckle.Converters.NavisworksShared\Speckle.Converters.NavisworksShared.projitems*{6101b44d-3805-4aa1-b8d0-e06c461ed202}*SharedItemsImports = 5 Connectors\Revit\Speckle.Connectors.RevitShared.Cef\Speckle.Connectors.RevitShared.Cef.projitems*{617bd3c7-87d9-4d28-8ac9-4910945bb9fc}*SharedItemsImports = 5 Connectors\Revit\Speckle.Connectors.RevitShared\Speckle.Connectors.RevitShared.projitems*{617bd3c7-87d9-4d28-8ac9-4910945bb9fc}*SharedItemsImports = 5 + Connectors\Navisworks\Speckle.Connectors.NavisworksShared\Speckle.Connectors.NavisworksShared.projitems*{62813838-52f7-43cb-9062-bb2611c00c79}*SharedItemsImports = 13 Converters\Autocad\Speckle.Converters.AutocadShared\Speckle.Converters.AutocadShared.projitems*{631c295a-7ccf-4b42-8686-7034e31469e7}*SharedItemsImports = 5 Converters\Rhino\Speckle.Converters.RhinoShared\Speckle.Converters.RhinoShared.projitems*{65a2f556-f14a-49f3-8a92-7f2e1e7ed3b5}*SharedItemsImports = 5 Converters\Revit\Speckle.Converters.RevitShared\Speckle.Converters.RevitShared.projitems*{67b888d9-c6c4-49f1-883c-5b964151d889}*SharedItemsImports = 5 Converters\Revit\Speckle.Converters.RevitShared.Tests\Speckle.Converters.RevitShared.Tests.projitems*{68cf9bdf-94ac-4d2d-a7bd-d1c064f97051}*SharedItemsImports = 5 Converters\Revit\Speckle.Converters.RevitShared\Speckle.Converters.RevitShared.projitems*{68cf9bdf-94ac-4d2d-a7bd-d1c064f97051}*SharedItemsImports = 5 Connectors\Revit\Speckle.Connectors.RevitShared.Cef\Speckle.Connectors.RevitShared.Cef.projitems*{6a40cbe4-ecab-4ced-9917-5c64cbf75da6}*SharedItemsImports = 13 + Connectors\Navisworks\Speckle.Connectors.NavisworksShared\Speckle.Connectors.NavisworksShared.projitems*{7791806e-7531-41d8-9c9d-4a1249d9f99c}*SharedItemsImports = 5 Converters\CSi\Speckle.Converters.CSiShared\Speckle.Converters.CSiShared.projitems*{791e3288-8001-4d54-8eab-03d1d7f51044}*SharedItemsImports = 5 Converters\CSi\Speckle.Converters.ETABSShared\Speckle.Converters.ETABSShared.projitems*{791e3288-8001-4d54-8eab-03d1d7f51044}*SharedItemsImports = 5 Connectors\CSi\Speckle.Connectors.CsiShared\Speckle.Connectors.CsiShared.projitems*{7c49337a-6f7b-47ab-b549-42e799e89cf2}*SharedItemsImports = 5 @@ -671,11 +824,13 @@ Global Converters\Autocad\Speckle.Converters.AutocadShared\Speckle.Converters.AutocadShared.projitems*{842f4bfd-3997-485d-bab5-9419c1d982f2}*SharedItemsImports = 5 Converters\Civil3d\Speckle.Converters.Civil3dShared\Speckle.Converters.Civil3dShared.projitems*{842f4bfd-3997-485d-bab5-9419c1d982f2}*SharedItemsImports = 5 Connectors\Autocad\Speckle.Connectors.AutocadShared\Speckle.Connectors.AutocadShared.projitems*{89c4cbc7-1606-40de-b6da-fbe3aac98395}*SharedItemsImports = 5 + Connectors\Navisworks\Speckle.Connectors.NavisworksShared\Speckle.Connectors.NavisworksShared.projitems*{8c14d930-03d2-4e2f-9d8d-a6b57f57a659}*SharedItemsImports = 5 Converters\Tekla\Speckle.Converters.TeklaShared\Speckle.Converters.TeklaShared.projitems*{8f9181c2-1808-44c0-a33a-5bae40c49e63}*SharedItemsImports = 5 Connectors\Autocad\Speckle.Connectors.AutocadShared\Speckle.Connectors.AutocadShared.projitems*{9166cc10-12e1-4a0f-916b-61f6f2004f5a}*SharedItemsImports = 5 Converters\Autocad\Speckle.Converters.AutocadShared\Speckle.Converters.AutocadShared.projitems*{9add1b7a-6401-4202-8613-f668e2fbc0a4}*SharedItemsImports = 13 Converters\Autocad\Speckle.Converters.AutocadShared\Speckle.Converters.AutocadShared.projitems*{9d66ede4-afc2-4f00-b40c-a7e878a2972f}*SharedItemsImports = 5 Connectors\Autocad\Speckle.Connectors.Civil3dShared\Speckle.Connectors.Civil3dShared.projitems*{a1b72ec1-5bc4-41fd-850f-5da87df49616}*SharedItemsImports = 13 + Converters\Navisworks\Speckle.Converters.NavisworksShared\Speckle.Converters.NavisworksShared.projitems*{a675e34c-667e-4069-a8fa-92f2c2db8a27}*SharedItemsImports = 5 Connectors\Revit\Speckle.Connectors.RevitShared.Cef\Speckle.Connectors.RevitShared.Cef.projitems*{a6de3da0-b242-4f49-aef0-4e26af92d16c}*SharedItemsImports = 5 Connectors\Revit\Speckle.Connectors.RevitShared\Speckle.Connectors.RevitShared.projitems*{a6de3da0-b242-4f49-aef0-4e26af92d16c}*SharedItemsImports = 5 Connectors\Rhino\Speckle.Connectors.RhinoShared\Speckle.Connectors.RhinoShared.projitems*{a6e3a82f-4696-4d92-aba1-38aa80752067}*SharedItemsImports = 5 @@ -684,11 +839,14 @@ Global Converters\Tekla\Speckle.Converters.TeklaShared\Speckle.Converters.TeklaShared.projitems*{acf75860-7fce-4ae9-8c45-68ad1043550b}*SharedItemsImports = 5 Connectors\Autocad\Speckle.Connectors.AutocadShared\Speckle.Connectors.AutocadShared.projitems*{afab80bd-a4dd-4cad-9937-acbfed668a48}*SharedItemsImports = 5 Connectors\Autocad\Speckle.Connectors.Civil3dShared\Speckle.Connectors.Civil3dShared.projitems*{afab80bd-a4dd-4cad-9937-acbfed668a48}*SharedItemsImports = 5 + Converters\Navisworks\Speckle.Converters.NavisworksShared\Speckle.Converters.NavisworksShared.projitems*{b12d6a2e-51fd-4197-b442-46c7d8f5e4e4}*SharedItemsImports = 5 Connectors\Rhino\Speckle.Connectors.RhinoShared\Speckle.Connectors.RhinoShared.projitems*{b37d4b9a-8d3f-4fa5-b9c8-e6c5f8a0c1e2}*SharedItemsImports = 13 + Connectors\Navisworks\Speckle.Connectors.NavisworksShared\Speckle.Connectors.NavisworksShared.projitems*{b6985672-4704-4f86-a3e0-2310bf8e6d73}*SharedItemsImports = 5 Connectors\Autocad\Speckle.Connectors.AutocadShared\Speckle.Connectors.AutocadShared.projitems*{bbf2c19e-221e-4aa0-8521-fe75d8f4a2b0}*SharedItemsImports = 5 Converters\Autocad\Speckle.Converters.AutocadShared\Speckle.Converters.AutocadShared.projitems*{c2de264a-aa87-4012-b954-17e3f403a237}*SharedItemsImports = 5 Converters\Revit\Speckle.Converters.RevitShared.Tests\Speckle.Converters.RevitShared.Tests.projitems*{c32274d9-1b66-4d5c-82f9-eb3f10f46752}*SharedItemsImports = 5 Converters\Revit\Speckle.Converters.RevitShared\Speckle.Converters.RevitShared.projitems*{c32274d9-1b66-4d5c-82f9-eb3f10f46752}*SharedItemsImports = 5 + Connectors\Navisworks\Speckle.Connectors.NavisworksShared\Speckle.Connectors.NavisworksShared.projitems*{c635619c-2938-4e6f-9e25-56ce1632a7ec}*SharedItemsImports = 5 Connectors\Autocad\Speckle.Connectors.AutocadShared\Speckle.Connectors.AutocadShared.projitems*{c70ebb84-ba5b-4f2f-819e-25e0985ba13c}*SharedItemsImports = 5 Connectors\Autocad\Speckle.Connectors.AutocadShared\Speckle.Connectors.AutocadShared.projitems*{ca8eae01-ab9f-4ec1-b6f3-73721487e9e1}*SharedItemsImports = 5 Connectors\Autocad\Speckle.Connectors.Civil3dShared\Speckle.Connectors.Civil3dShared.projitems*{ca8eae01-ab9f-4ec1-b6f3-73721487e9e1}*SharedItemsImports = 5 @@ -702,5 +860,6 @@ Global Converters\Revit\Speckle.Converters.RevitShared\Speckle.Converters.RevitShared.projitems*{e1c43415-3200-45f4-8bf9-a4dd7d7f2ed6}*SharedItemsImports = 13 Converters\Rhino\Speckle.Converters.RhinoShared\Speckle.Converters.RhinoShared.projitems*{e1c43415-3200-45f4-8bf9-a4dd7d7f2ed9}*SharedItemsImports = 13 Converters\Revit\Speckle.Converters.RevitShared.Tests\Speckle.Converters.RevitShared.Tests.projitems*{e1c43415-3202-45f4-8bf9-a4dd7d7f2ed6}*SharedItemsImports = 13 + Connectors\Navisworks\Speckle.Connectors.NavisworksShared\Speckle.Connectors.NavisworksShared.projitems*{fd44e1f0-d20a-49b6-adc9-482d911a74fb}*SharedItemsImports = 5 EndGlobalSection EndGlobal