diff --git a/Connectors/Autocad/Speckle.Connectors.Autocad2022/packages.lock.json b/Connectors/Autocad/Speckle.Connectors.Autocad2022/packages.lock.json index ef5a4df56..1f5498abb 100644 --- a/Connectors/Autocad/Speckle.Connectors.Autocad2022/packages.lock.json +++ b/Connectors/Autocad/Speckle.Connectors.Autocad2022/packages.lock.json @@ -259,9 +259,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.0, )", - "Speckle.Sdk": "[3.5.0, )", - "Speckle.Sdk.Dependencies": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )", + "Speckle.Sdk": "[3.5.1, )", + "Speckle.Sdk.Dependencies": "[3.5.1, )" } }, "speckle.connectors.dui": { @@ -292,7 +292,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -336,18 +336,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -357,14 +357,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" } } } diff --git a/Connectors/Autocad/Speckle.Connectors.Autocad2023/packages.lock.json b/Connectors/Autocad/Speckle.Connectors.Autocad2023/packages.lock.json index 522715e48..98ecde002 100644 --- a/Connectors/Autocad/Speckle.Connectors.Autocad2023/packages.lock.json +++ b/Connectors/Autocad/Speckle.Connectors.Autocad2023/packages.lock.json @@ -259,9 +259,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.0, )", - "Speckle.Sdk": "[3.5.0, )", - "Speckle.Sdk.Dependencies": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )", + "Speckle.Sdk": "[3.5.1, )", + "Speckle.Sdk.Dependencies": "[3.5.1, )" } }, "speckle.connectors.dui": { @@ -292,7 +292,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -336,18 +336,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -357,14 +357,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" } } } diff --git a/Connectors/Autocad/Speckle.Connectors.Autocad2024/packages.lock.json b/Connectors/Autocad/Speckle.Connectors.Autocad2024/packages.lock.json index 772a0ee13..8343bb0db 100644 --- a/Connectors/Autocad/Speckle.Connectors.Autocad2024/packages.lock.json +++ b/Connectors/Autocad/Speckle.Connectors.Autocad2024/packages.lock.json @@ -259,9 +259,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.0, )", - "Speckle.Sdk": "[3.5.0, )", - "Speckle.Sdk.Dependencies": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )", + "Speckle.Sdk": "[3.5.1, )", + "Speckle.Sdk.Dependencies": "[3.5.1, )" } }, "speckle.connectors.dui": { @@ -293,7 +293,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -337,18 +337,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -358,14 +358,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" } } } diff --git a/Connectors/Autocad/Speckle.Connectors.Autocad2025/packages.lock.json b/Connectors/Autocad/Speckle.Connectors.Autocad2025/packages.lock.json index 51655d26e..bfa79cfb0 100644 --- a/Connectors/Autocad/Speckle.Connectors.Autocad2025/packages.lock.json +++ b/Connectors/Autocad/Speckle.Connectors.Autocad2025/packages.lock.json @@ -210,9 +210,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.0, )", - "Speckle.Sdk": "[3.5.0, )", - "Speckle.Sdk.Dependencies": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )", + "Speckle.Sdk": "[3.5.1, )", + "Speckle.Sdk.Dependencies": "[3.5.1, )" } }, "speckle.connectors.dui": { @@ -244,7 +244,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -288,18 +288,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Data.Sqlite": "7.0.5", @@ -307,14 +307,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" } }, "net8.0-windows7.0/win-x64": { diff --git a/Connectors/Autocad/Speckle.Connectors.Autocad2026/packages.lock.json b/Connectors/Autocad/Speckle.Connectors.Autocad2026/packages.lock.json index 6923864e9..1ee2d2f04 100644 --- a/Connectors/Autocad/Speckle.Connectors.Autocad2026/packages.lock.json +++ b/Connectors/Autocad/Speckle.Connectors.Autocad2026/packages.lock.json @@ -210,9 +210,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.0, )", - "Speckle.Sdk": "[3.5.0, )", - "Speckle.Sdk.Dependencies": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )", + "Speckle.Sdk": "[3.5.1, )", + "Speckle.Sdk.Dependencies": "[3.5.1, )" } }, "speckle.connectors.dui": { @@ -244,7 +244,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -288,18 +288,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Data.Sqlite": "7.0.5", @@ -307,14 +307,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" } }, "net8.0-windows7.0/win-x64": { diff --git a/Connectors/Autocad/Speckle.Connectors.AutocadShared/Speckle.Connectors.AutocadShared.shproj b/Connectors/Autocad/Speckle.Connectors.AutocadShared/Speckle.Connectors.AutocadShared.shproj index afec409d7..152cf3693 100644 --- a/Connectors/Autocad/Speckle.Connectors.AutocadShared/Speckle.Connectors.AutocadShared.shproj +++ b/Connectors/Autocad/Speckle.Connectors.AutocadShared/Speckle.Connectors.AutocadShared.shproj @@ -3,6 +3,15 @@ {41BC679F-887F-44CF-971D-A5502EE87DB0} + + bin\Debug\ + + + bin\Local\ + + + bin\Release\ + diff --git a/Connectors/Autocad/Speckle.Connectors.Civil3d2022/packages.lock.json b/Connectors/Autocad/Speckle.Connectors.Civil3d2022/packages.lock.json index 969fd7c42..1748c301d 100644 --- a/Connectors/Autocad/Speckle.Connectors.Civil3d2022/packages.lock.json +++ b/Connectors/Autocad/Speckle.Connectors.Civil3d2022/packages.lock.json @@ -268,9 +268,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.0, )", - "Speckle.Sdk": "[3.5.0, )", - "Speckle.Sdk.Dependencies": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )", + "Speckle.Sdk": "[3.5.1, )", + "Speckle.Sdk.Dependencies": "[3.5.1, )" } }, "speckle.connectors.dui": { @@ -302,7 +302,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -346,18 +346,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -367,14 +367,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" } } } diff --git a/Connectors/Autocad/Speckle.Connectors.Civil3d2023/packages.lock.json b/Connectors/Autocad/Speckle.Connectors.Civil3d2023/packages.lock.json index b31a7c4ca..b5d6b1477 100644 --- a/Connectors/Autocad/Speckle.Connectors.Civil3d2023/packages.lock.json +++ b/Connectors/Autocad/Speckle.Connectors.Civil3d2023/packages.lock.json @@ -268,9 +268,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.0, )", - "Speckle.Sdk": "[3.5.0, )", - "Speckle.Sdk.Dependencies": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )", + "Speckle.Sdk": "[3.5.1, )", + "Speckle.Sdk.Dependencies": "[3.5.1, )" } }, "speckle.connectors.dui": { @@ -302,7 +302,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -346,18 +346,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -367,14 +367,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" } } } diff --git a/Connectors/Autocad/Speckle.Connectors.Civil3d2024/packages.lock.json b/Connectors/Autocad/Speckle.Connectors.Civil3d2024/packages.lock.json index 83635cc1b..3845cc1ef 100644 --- a/Connectors/Autocad/Speckle.Connectors.Civil3d2024/packages.lock.json +++ b/Connectors/Autocad/Speckle.Connectors.Civil3d2024/packages.lock.json @@ -268,9 +268,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.0, )", - "Speckle.Sdk": "[3.5.0, )", - "Speckle.Sdk.Dependencies": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )", + "Speckle.Sdk": "[3.5.1, )", + "Speckle.Sdk.Dependencies": "[3.5.1, )" } }, "speckle.connectors.dui": { @@ -302,7 +302,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -346,18 +346,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -367,14 +367,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" } } } diff --git a/Connectors/Autocad/Speckle.Connectors.Civil3d2025/packages.lock.json b/Connectors/Autocad/Speckle.Connectors.Civil3d2025/packages.lock.json index 7fe309a2b..c59c43308 100644 --- a/Connectors/Autocad/Speckle.Connectors.Civil3d2025/packages.lock.json +++ b/Connectors/Autocad/Speckle.Connectors.Civil3d2025/packages.lock.json @@ -219,9 +219,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.0, )", - "Speckle.Sdk": "[3.5.0, )", - "Speckle.Sdk.Dependencies": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )", + "Speckle.Sdk": "[3.5.1, )", + "Speckle.Sdk.Dependencies": "[3.5.1, )" } }, "speckle.connectors.dui": { @@ -254,7 +254,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -298,18 +298,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Data.Sqlite": "7.0.5", @@ -317,14 +317,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" } }, "net8.0-windows7.0/win-x64": { diff --git a/Connectors/Autocad/Speckle.Connectors.Civil3d2026/packages.lock.json b/Connectors/Autocad/Speckle.Connectors.Civil3d2026/packages.lock.json index 27a39cd0d..c322e3717 100644 --- a/Connectors/Autocad/Speckle.Connectors.Civil3d2026/packages.lock.json +++ b/Connectors/Autocad/Speckle.Connectors.Civil3d2026/packages.lock.json @@ -219,9 +219,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.0, )", - "Speckle.Sdk": "[3.5.0, )", - "Speckle.Sdk.Dependencies": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )", + "Speckle.Sdk": "[3.5.1, )", + "Speckle.Sdk.Dependencies": "[3.5.1, )" } }, "speckle.connectors.dui": { @@ -254,7 +254,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -298,18 +298,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Data.Sqlite": "7.0.5", @@ -317,14 +317,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" } }, "net8.0-windows7.0/win-x64": { diff --git a/Connectors/CSi/Speckle.Connectors.ETABS21/packages.lock.json b/Connectors/CSi/Speckle.Connectors.ETABS21/packages.lock.json index 94a115013..8ef15cc15 100644 --- a/Connectors/CSi/Speckle.Connectors.ETABS21/packages.lock.json +++ b/Connectors/CSi/Speckle.Connectors.ETABS21/packages.lock.json @@ -259,9 +259,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.0, )", - "Speckle.Sdk": "[3.5.0, )", - "Speckle.Sdk.Dependencies": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )", + "Speckle.Sdk": "[3.5.1, )", + "Speckle.Sdk.Dependencies": "[3.5.1, )" } }, "speckle.connectors.dui": { @@ -285,7 +285,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )" } }, "speckle.converters.etabs21": { @@ -335,18 +335,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -356,14 +356,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" } } } diff --git a/Connectors/CSi/Speckle.Connectors.ETABS22/packages.lock.json b/Connectors/CSi/Speckle.Connectors.ETABS22/packages.lock.json index 329631181..110b991f3 100644 --- a/Connectors/CSi/Speckle.Connectors.ETABS22/packages.lock.json +++ b/Connectors/CSi/Speckle.Connectors.ETABS22/packages.lock.json @@ -210,9 +210,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.0, )", - "Speckle.Sdk": "[3.5.0, )", - "Speckle.Sdk.Dependencies": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )", + "Speckle.Sdk": "[3.5.1, )", + "Speckle.Sdk.Dependencies": "[3.5.1, )" } }, "speckle.connectors.dui": { @@ -236,7 +236,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )" } }, "speckle.converters.etabs22": { @@ -286,18 +286,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Data.Sqlite": "7.0.5", @@ -305,14 +305,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" } } } diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2020/packages.lock.json b/Connectors/Navisworks/Speckle.Connectors.Navisworks2020/packages.lock.json index 10f66ea73..1e5aa0fdd 100644 --- a/Connectors/Navisworks/Speckle.Connectors.Navisworks2020/packages.lock.json +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2020/packages.lock.json @@ -259,9 +259,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.0, )", - "Speckle.Sdk": "[3.5.0, )", - "Speckle.Sdk.Dependencies": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )", + "Speckle.Sdk": "[3.5.1, )", + "Speckle.Sdk.Dependencies": "[3.5.1, )" } }, "speckle.connectors.dui": { @@ -285,7 +285,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )" } }, "speckle.converters.navisworks2020": { @@ -337,18 +337,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -358,14 +358,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" } }, ".NETFramework,Version=v4.8/win-x64": { diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2021/packages.lock.json b/Connectors/Navisworks/Speckle.Connectors.Navisworks2021/packages.lock.json index 4f28df53f..35249759a 100644 --- a/Connectors/Navisworks/Speckle.Connectors.Navisworks2021/packages.lock.json +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2021/packages.lock.json @@ -259,9 +259,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.0, )", - "Speckle.Sdk": "[3.5.0, )", - "Speckle.Sdk.Dependencies": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )", + "Speckle.Sdk": "[3.5.1, )", + "Speckle.Sdk.Dependencies": "[3.5.1, )" } }, "speckle.connectors.dui": { @@ -285,7 +285,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )" } }, "speckle.converters.navisworks2021": { @@ -337,18 +337,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -358,14 +358,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" } }, ".NETFramework,Version=v4.8/win-x64": { diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2022/packages.lock.json b/Connectors/Navisworks/Speckle.Connectors.Navisworks2022/packages.lock.json index e3d3a2438..81d8f1ed5 100644 --- a/Connectors/Navisworks/Speckle.Connectors.Navisworks2022/packages.lock.json +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2022/packages.lock.json @@ -259,9 +259,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.0, )", - "Speckle.Sdk": "[3.5.0, )", - "Speckle.Sdk.Dependencies": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )", + "Speckle.Sdk": "[3.5.1, )", + "Speckle.Sdk.Dependencies": "[3.5.1, )" } }, "speckle.connectors.dui": { @@ -285,7 +285,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )" } }, "speckle.converters.navisworks2022": { @@ -337,18 +337,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -358,14 +358,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" } }, ".NETFramework,Version=v4.8/win-x64": { diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2023/packages.lock.json b/Connectors/Navisworks/Speckle.Connectors.Navisworks2023/packages.lock.json index 5d27f5009..331efd2b7 100644 --- a/Connectors/Navisworks/Speckle.Connectors.Navisworks2023/packages.lock.json +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2023/packages.lock.json @@ -259,9 +259,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.0, )", - "Speckle.Sdk": "[3.5.0, )", - "Speckle.Sdk.Dependencies": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )", + "Speckle.Sdk": "[3.5.1, )", + "Speckle.Sdk.Dependencies": "[3.5.1, )" } }, "speckle.connectors.dui": { @@ -285,7 +285,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )" } }, "speckle.converters.navisworks2023": { @@ -337,18 +337,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -358,14 +358,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" } }, ".NETFramework,Version=v4.8/win-x64": { diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2024/packages.lock.json b/Connectors/Navisworks/Speckle.Connectors.Navisworks2024/packages.lock.json index 3c7fd9795..360cd2ec3 100644 --- a/Connectors/Navisworks/Speckle.Connectors.Navisworks2024/packages.lock.json +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2024/packages.lock.json @@ -259,9 +259,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.0, )", - "Speckle.Sdk": "[3.5.0, )", - "Speckle.Sdk.Dependencies": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )", + "Speckle.Sdk": "[3.5.1, )", + "Speckle.Sdk.Dependencies": "[3.5.1, )" } }, "speckle.connectors.dui": { @@ -285,7 +285,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )" } }, "speckle.converters.navisworks2024": { @@ -337,18 +337,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -358,14 +358,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" } }, ".NETFramework,Version=v4.8/win-x64": { diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2025/packages.lock.json b/Connectors/Navisworks/Speckle.Connectors.Navisworks2025/packages.lock.json index 76bf0f2a3..1195980e3 100644 --- a/Connectors/Navisworks/Speckle.Connectors.Navisworks2025/packages.lock.json +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2025/packages.lock.json @@ -265,9 +265,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.0, )", - "Speckle.Sdk": "[3.5.0, )", - "Speckle.Sdk.Dependencies": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )", + "Speckle.Sdk": "[3.5.1, )", + "Speckle.Sdk.Dependencies": "[3.5.1, )" } }, "speckle.connectors.dui": { @@ -291,7 +291,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )" } }, "speckle.converters.navisworks2025": { @@ -337,18 +337,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -358,14 +358,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" } }, ".NETFramework,Version=v4.8/win-x64": { diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2026/packages.lock.json b/Connectors/Navisworks/Speckle.Connectors.Navisworks2026/packages.lock.json index 9e8f8fd6c..6c657dc3f 100644 --- a/Connectors/Navisworks/Speckle.Connectors.Navisworks2026/packages.lock.json +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2026/packages.lock.json @@ -266,9 +266,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.0, )", - "Speckle.Sdk": "[3.5.0, )", - "Speckle.Sdk.Dependencies": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )", + "Speckle.Sdk": "[3.5.1, )", + "Speckle.Sdk.Dependencies": "[3.5.1, )" } }, "speckle.connectors.dui": { @@ -292,7 +292,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )" } }, "speckle.converters.navisworks2026": { @@ -339,18 +339,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -360,14 +360,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" } }, ".NETFramework,Version=v4.8/win-x64": { diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Bindings/NavisworksSendBinding.cs b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Bindings/NavisworksSendBinding.cs index cdab0dc93..2dbf1352b 100644 --- a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Bindings/NavisworksSendBinding.cs +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Bindings/NavisworksSendBinding.cs @@ -73,6 +73,7 @@ public class NavisworksSendBinding : ISendBinding new IncludeInternalPropertiesSetting(false), new ConvertHiddenElementsSetting(false), new PreserveModelHierarchySetting(false), + new RevitCategoryMappingSetting(false) ]; public async Task Send(string modelCardId) => @@ -93,7 +94,8 @@ public class NavisworksSendBinding : ISendBinding visualRepresentationMode: _toSpeckleSettingsManagerNavisworks.GetVisualRepresentationMode(modelCard), convertHiddenElements: _toSpeckleSettingsManagerNavisworks.GetConvertHiddenElements(modelCard), includeInternalProperties: _toSpeckleSettingsManagerNavisworks.GetIncludeInternalProperties(modelCard), - preserveModelHierarchy: _toSpeckleSettingsManagerNavisworks.GetPreserveModelHierarchy(modelCard) + preserveModelHierarchy: _toSpeckleSettingsManagerNavisworks.GetPreserveModelHierarchy(modelCard), + mappingToRevitCategories: _toSpeckleSettingsManagerNavisworks.GetMappingToRevitCategories(modelCard) ) ); diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/Settings/ConvertHiddenEleementsSetting.cs b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/Settings/ConvertHiddenElementsSetting.cs similarity index 100% rename from Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/Settings/ConvertHiddenEleementsSetting.cs rename to Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/Settings/ConvertHiddenElementsSetting.cs diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/Settings/RevitCategoryMapping.cs b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/Settings/RevitCategoryMapping.cs new file mode 100644 index 000000000..48c514f7e --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/Settings/RevitCategoryMapping.cs @@ -0,0 +1,12 @@ +using Speckle.Connectors.DUI.Settings; + +namespace Speckle.Connector.Navisworks.Operations.Send.Settings; + +public class RevitCategoryMappingSetting(bool value) : ICardSetting +{ + public string? Id { get; set; } = "mappingToRevitCategories"; + public string? Title { get; set; } = "Map to Revit Categories"; + 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/ToSpeckleSettingsManagerNavisworks.cs b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/Settings/ToSpeckleSettingsManagerNavisworks.cs index d9be2010f..fedfc5b0a 100644 --- a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/Settings/ToSpeckleSettingsManagerNavisworks.cs +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/Settings/ToSpeckleSettingsManagerNavisworks.cs @@ -18,6 +18,7 @@ public class ToSpeckleSettingsManagerNavisworks : IToSpeckleSettingsManagerNavis private readonly Dictionary _convertHiddenElementsCache = []; private readonly Dictionary _includeInternalPropertiesCache = []; private readonly Dictionary _preserveModelHierarchyCache = []; + private readonly Dictionary _revitCategoryMappingCache = []; public ToSpeckleSettingsManagerNavisworks(ISendConversionCache sendConversionCache) { @@ -78,6 +79,28 @@ public class ToSpeckleSettingsManagerNavisworks : IToSpeckleSettingsManagerNavis return origin; } + public bool GetMappingToRevitCategories(SenderModelCard modelCard) + { + if (modelCard == null) + { + throw new ArgumentNullException(nameof(modelCard)); + } + + var value = modelCard.Settings?.FirstOrDefault(s => s.Id == "mappingToRevitCategories")?.Value as bool?; + + var returnValue = value != null && value.NotNull(); + if (_revitCategoryMappingCache.TryGetValue(modelCard.ModelCardId.NotNull(), out var previousValue)) + { + if (previousValue != returnValue) + { + EvictCacheForModelCard(modelCard); + } + } + + _revitCategoryMappingCache[modelCard.ModelCardId] = returnValue; + return returnValue; + } + public bool GetConvertHiddenElements(SenderModelCard modelCard) { if (modelCard == null) diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Speckle.Connectors.NavisworksShared.projitems b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Speckle.Connectors.NavisworksShared.projitems index 53aa9d3dd..9e2fd10e7 100644 --- a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Speckle.Connectors.NavisworksShared.projitems +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Speckle.Connectors.NavisworksShared.projitems @@ -25,10 +25,11 @@ - + + diff --git a/Connectors/Revit/Speckle.Connectors.Revit2022/packages.lock.json b/Connectors/Revit/Speckle.Connectors.Revit2022/packages.lock.json index 273a8e94a..102304bad 100644 --- a/Connectors/Revit/Speckle.Connectors.Revit2022/packages.lock.json +++ b/Connectors/Revit/Speckle.Connectors.Revit2022/packages.lock.json @@ -281,9 +281,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.0, )", - "Speckle.Sdk": "[3.5.0, )", - "Speckle.Sdk.Dependencies": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )", + "Speckle.Sdk": "[3.5.1, )", + "Speckle.Sdk.Dependencies": "[3.5.1, )" } }, "speckle.connectors.dui": { @@ -306,7 +306,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )" } }, "speckle.converters.revit2022": { @@ -351,11 +351,11 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Revit.API": { @@ -366,9 +366,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -378,14 +378,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" } } } diff --git a/Connectors/Revit/Speckle.Connectors.Revit2023/packages.lock.json b/Connectors/Revit/Speckle.Connectors.Revit2023/packages.lock.json index 37f8041d6..b04ef393b 100644 --- a/Connectors/Revit/Speckle.Connectors.Revit2023/packages.lock.json +++ b/Connectors/Revit/Speckle.Connectors.Revit2023/packages.lock.json @@ -281,9 +281,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.0, )", - "Speckle.Sdk": "[3.5.0, )", - "Speckle.Sdk.Dependencies": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )", + "Speckle.Sdk": "[3.5.1, )", + "Speckle.Sdk.Dependencies": "[3.5.1, )" } }, "speckle.connectors.dui": { @@ -306,7 +306,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )" } }, "speckle.converters.revit2023": { @@ -351,11 +351,11 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Revit.API": { @@ -366,9 +366,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -378,14 +378,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" } } } diff --git a/Connectors/Revit/Speckle.Connectors.Revit2024/packages.lock.json b/Connectors/Revit/Speckle.Connectors.Revit2024/packages.lock.json index 8538d2823..7b8f6d1df 100644 --- a/Connectors/Revit/Speckle.Connectors.Revit2024/packages.lock.json +++ b/Connectors/Revit/Speckle.Connectors.Revit2024/packages.lock.json @@ -281,9 +281,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.0, )", - "Speckle.Sdk": "[3.5.0, )", - "Speckle.Sdk.Dependencies": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )", + "Speckle.Sdk": "[3.5.1, )", + "Speckle.Sdk.Dependencies": "[3.5.1, )" } }, "speckle.connectors.dui": { @@ -306,7 +306,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )" } }, "speckle.converters.revit2024": { @@ -351,11 +351,11 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Revit.API": { @@ -366,9 +366,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -378,14 +378,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" } } } diff --git a/Connectors/Revit/Speckle.Connectors.Revit2025/packages.lock.json b/Connectors/Revit/Speckle.Connectors.Revit2025/packages.lock.json index bb864460a..63bca162c 100644 --- a/Connectors/Revit/Speckle.Connectors.Revit2025/packages.lock.json +++ b/Connectors/Revit/Speckle.Connectors.Revit2025/packages.lock.json @@ -226,9 +226,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.0, )", - "Speckle.Sdk": "[3.5.0, )", - "Speckle.Sdk.Dependencies": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )", + "Speckle.Sdk": "[3.5.1, )", + "Speckle.Sdk.Dependencies": "[3.5.1, )" } }, "speckle.connectors.dui": { @@ -251,7 +251,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )" } }, "speckle.converters.revit2025": { @@ -296,11 +296,11 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Revit.API": { @@ -311,9 +311,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Data.Sqlite": "7.0.5", @@ -321,14 +321,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" } }, "net8.0-windows7.0/win-x64": { diff --git a/Connectors/Revit/Speckle.Connectors.Revit2026/packages.lock.json b/Connectors/Revit/Speckle.Connectors.Revit2026/packages.lock.json index ad5e1f8fc..5763da37e 100644 --- a/Connectors/Revit/Speckle.Connectors.Revit2026/packages.lock.json +++ b/Connectors/Revit/Speckle.Connectors.Revit2026/packages.lock.json @@ -219,9 +219,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.0, )", - "Speckle.Sdk": "[3.5.0, )", - "Speckle.Sdk.Dependencies": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )", + "Speckle.Sdk": "[3.5.1, )", + "Speckle.Sdk.Dependencies": "[3.5.1, )" } }, "speckle.connectors.dui": { @@ -244,7 +244,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )" } }, "speckle.converters.revit2026": { @@ -280,11 +280,11 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Revit.API": { @@ -295,9 +295,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Data.Sqlite": "7.0.5", @@ -305,14 +305,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" } }, "net8.0-windows7.0/win-x64": { diff --git a/Connectors/Rhino/Speckle.Connectors.Grasshopper7/packages.lock.json b/Connectors/Rhino/Speckle.Connectors.Grasshopper7/packages.lock.json index 8ce2c26c7..acdbbc29b 100644 --- a/Connectors/Rhino/Speckle.Connectors.Grasshopper7/packages.lock.json +++ b/Connectors/Rhino/Speckle.Connectors.Grasshopper7/packages.lock.json @@ -325,9 +325,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.0, )", - "Speckle.Sdk": "[3.5.0, )", - "Speckle.Sdk.Dependencies": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )", + "Speckle.Sdk": "[3.5.1, )", + "Speckle.Sdk.Dependencies": "[3.5.1, )" } }, "speckle.connectors.logging": { @@ -337,7 +337,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )" } }, "speckle.converters.rhino7": { @@ -382,18 +382,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -403,14 +403,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" } } } diff --git a/Connectors/Rhino/Speckle.Connectors.Grasshopper8/packages.lock.json b/Connectors/Rhino/Speckle.Connectors.Grasshopper8/packages.lock.json index 3ded2f46e..ebfa8c5bf 100644 --- a/Connectors/Rhino/Speckle.Connectors.Grasshopper8/packages.lock.json +++ b/Connectors/Rhino/Speckle.Connectors.Grasshopper8/packages.lock.json @@ -325,9 +325,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.0, )", - "Speckle.Sdk": "[3.5.0, )", - "Speckle.Sdk.Dependencies": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )", + "Speckle.Sdk": "[3.5.1, )", + "Speckle.Sdk.Dependencies": "[3.5.1, )" } }, "speckle.connectors.logging": { @@ -337,13 +337,12 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )" } }, "speckle.converters.rhino8": { "type": "Project", "dependencies": { - "RhinoCommon": "[8.9.24194.18121, )", "Speckle.Converters.Common": "[1.0.0, )" } }, @@ -382,18 +381,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -403,14 +402,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" } } } diff --git a/Connectors/Rhino/Speckle.Connectors.GrasshopperShared/Parameters/SpecklePropertyGroupGoo.ModelObjects.cs b/Connectors/Rhino/Speckle.Connectors.GrasshopperShared/Parameters/SpecklePropertyGroupGoo.ModelObjects.cs index eeff7fc47..cbd901ef1 100644 --- a/Connectors/Rhino/Speckle.Connectors.GrasshopperShared/Parameters/SpecklePropertyGroupGoo.ModelObjects.cs +++ b/Connectors/Rhino/Speckle.Connectors.GrasshopperShared/Parameters/SpecklePropertyGroupGoo.ModelObjects.cs @@ -22,21 +22,51 @@ public partial class SpecklePropertyGroupGoo : GH_Goo dictionary = new(); - foreach (KeyValuePair entry in userText) - { - SpecklePropertyGoo value = new() { Value = entry.Value }; - dictionary.Add(entry.Key, value); - } - - Value = dictionary; - return true; + var processedDictionary = ConvertToNested(userText.ToDictionary(o => o.Key, o => (object)o.Value)); + return CastFrom(processedDictionary); default: return false; } } + // Property keys may already be concatenated with the `.` char, eg if baked from grasshopper. + public Dictionary ConvertToNested(Dictionary flatDict) + { + var nestedDict = new Dictionary(); + + foreach (string keyPath in flatDict.Keys) + { + var keys = keyPath.Split('.'); + var current = nestedDict; + + for (int i = 0; i < keys.Length; i++) + { + var key = keys[i]; + + if (i == keys.Length - 1) + { + current[key] = flatDict[keyPath]; + } + else + { + if (!current.TryGetValue(key, out var next)) + { + var newDict = new Dictionary(); + current[key] = newDict; + current = newDict; + } + else + { + current = (Dictionary)next; + } + } + } + } + + return nestedDict; + } + private bool CastToModelObject(ref T target) { var type = typeof(T); diff --git a/Connectors/Rhino/Speckle.Connectors.GrasshopperShared/Parameters/Wrappers/SpeckleGeometryWrapperGoo.ModelObjects.cs b/Connectors/Rhino/Speckle.Connectors.GrasshopperShared/Parameters/Wrappers/SpeckleGeometryWrapperGoo.ModelObjects.cs index 481f25b2c..43d54a838 100644 --- a/Connectors/Rhino/Speckle.Connectors.GrasshopperShared/Parameters/Wrappers/SpeckleGeometryWrapperGoo.ModelObjects.cs +++ b/Connectors/Rhino/Speckle.Connectors.GrasshopperShared/Parameters/Wrappers/SpeckleGeometryWrapperGoo.ModelObjects.cs @@ -35,19 +35,20 @@ public partial class SpeckleGeometryWrapperGoo : GH_Goo, private bool HandleModelObject(ModelObject modelObject) { - modelObject.CastTo(out GeometryBase? geometryBase); - if (geometryBase is null) + modelObject.CastTo(out IGH_GeometricGoo? geometryGoo); + if (geometryGoo is null) { throw new InvalidOperationException($"Could not retrieve geometry from model object."); } + GeometryBase geometryBase = geometryGoo.ToGeometryBase(); Base converted = SpeckleConversionContext.Current.ConvertToSpeckle(geometryBase); // get layer, props, color, and mat SpeckleCollectionWrapper? collection = GetLayerCollectionFromModelObject(modelObject); SpecklePropertyGroupGoo? props = GetPropsFromModelObjectAndAssignToBase(modelObject, converted); - Color? color = GetColorFromModelObject(modelObject); SpeckleMaterialWrapper? material = GetMaterialFromModelObject(modelObject); + Color? color = GetColorFromModelObject(modelObject, material); // get the definition if this is an instance SpeckleBlockDefinitionWrapper? definition = GetBlockDefinition(geometryBase); @@ -189,6 +190,7 @@ public partial class SpeckleGeometryWrapperGoo : GH_Goo, Transform = instance.Xform, Definition = definition, // May be null in pure Grasshopper workflows Parent = parent, + Path = parent?.Path ?? new(), Name = name, Color = color, Material = mat, @@ -200,6 +202,7 @@ public partial class SpeckleGeometryWrapperGoo : GH_Goo, GeometryBase = geometryBase, Base = @base, Parent = parent, + Path = parent?.Path ?? new(), Name = name, Color = color, Material = mat, @@ -268,7 +271,7 @@ public partial class SpeckleGeometryWrapperGoo : GH_Goo, return null; } - private Color? GetColorFromModelObject(ModelObject modelObject) + private Color? GetColorFromModelObject(ModelObject modelObject, SpeckleMaterialWrapper? material) { // we need to retrieve the actual color by the color source (otherwise will return default color for anything other than by object) int? argb = null; @@ -281,8 +284,10 @@ public partial class SpeckleGeometryWrapperGoo : GH_Goo, argb = modelObject.Display.Color?.Color.ToArgb(); break; case ObjectColorSource.ColorFromMaterial: - Rhino.Render.RenderMaterial? mat = GetRenderMaterial(modelObject); - argb = mat?.ToMaterial(Rhino.Render.RenderTexture.TextureGeneration.Skip)?.DiffuseColor.ToArgb(); + if (material is not null) + { + argb = material.Material.diffuse; + } break; default: break; diff --git a/Connectors/Rhino/Speckle.Connectors.GrasshopperShared/Registration/PriorityLoader.cs b/Connectors/Rhino/Speckle.Connectors.GrasshopperShared/Registration/PriorityLoader.cs index 51ef699f7..c774f8c17 100644 --- a/Connectors/Rhino/Speckle.Connectors.GrasshopperShared/Registration/PriorityLoader.cs +++ b/Connectors/Rhino/Speckle.Connectors.GrasshopperShared/Registration/PriorityLoader.cs @@ -33,11 +33,12 @@ public class PriorityLoader : GH_AssemblyPriority public static IServiceScope CreateScopeForActiveDocument() { + // NOTE: introduction of AddVisualizationProperties setting not accounted for in GH, hence hardcoded as true (i.e. "as before") var scope = Container.CreateScope(); var rhinoConversionSettingsFactory = scope.ServiceProvider.GetRequiredService(); scope .ServiceProvider.GetRequiredService>() - .Initialize(rhinoConversionSettingsFactory.Create(RhinoDoc.ActiveDoc)); + .Initialize(rhinoConversionSettingsFactory.Create(RhinoDoc.ActiveDoc, true)); return scope; } diff --git a/Connectors/Rhino/Speckle.Connectors.Rhino7/packages.lock.json b/Connectors/Rhino/Speckle.Connectors.Rhino7/packages.lock.json index 42c893162..9780e996a 100644 --- a/Connectors/Rhino/Speckle.Connectors.Rhino7/packages.lock.json +++ b/Connectors/Rhino/Speckle.Connectors.Rhino7/packages.lock.json @@ -306,9 +306,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.0, )", - "Speckle.Sdk": "[3.5.0, )", - "Speckle.Sdk.Dependencies": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )", + "Speckle.Sdk": "[3.5.1, )", + "Speckle.Sdk.Dependencies": "[3.5.1, )" } }, "speckle.connectors.dui": { @@ -341,7 +341,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )" } }, "speckle.converters.rhino7": { @@ -401,18 +401,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -422,14 +422,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" }, "System.Resources.Extensions": { "type": "CentralTransitive", diff --git a/Connectors/Rhino/Speckle.Connectors.Rhino8/packages.lock.json b/Connectors/Rhino/Speckle.Connectors.Rhino8/packages.lock.json index e302ced6a..cbcf73df8 100644 --- a/Connectors/Rhino/Speckle.Connectors.Rhino8/packages.lock.json +++ b/Connectors/Rhino/Speckle.Connectors.Rhino8/packages.lock.json @@ -306,9 +306,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.0, )", - "Speckle.Sdk": "[3.5.0, )", - "Speckle.Sdk.Dependencies": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )", + "Speckle.Sdk": "[3.5.1, )", + "Speckle.Sdk.Dependencies": "[3.5.1, )" } }, "speckle.connectors.dui": { @@ -341,13 +341,12 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )" } }, "speckle.converters.rhino8": { "type": "Project", "dependencies": { - "RhinoCommon": "[8.9.24194.18121, )", "Speckle.Converters.Common": "[1.0.0, )" } }, @@ -401,18 +400,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -422,14 +421,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" }, "System.Resources.Extensions": { "type": "CentralTransitive", diff --git a/Connectors/Rhino/Speckle.Connectors.RhinoImporter/EmbeddedResources/plugin-utility.ico b/Connectors/Rhino/Speckle.Connectors.RhinoImporter/EmbeddedResources/plugin-utility.ico new file mode 100644 index 000000000..022d1f788 Binary files /dev/null and b/Connectors/Rhino/Speckle.Connectors.RhinoImporter/EmbeddedResources/plugin-utility.ico differ diff --git a/Connectors/Rhino/Speckle.Connectors.RhinoImporter/Speckle.Connectors.RhinoImporter.csproj b/Connectors/Rhino/Speckle.Connectors.RhinoImporter/Speckle.Connectors.RhinoImporter.csproj new file mode 100644 index 000000000..e7c0406a3 --- /dev/null +++ b/Connectors/Rhino/Speckle.Connectors.RhinoImporter/Speckle.Connectors.RhinoImporter.csproj @@ -0,0 +1,42 @@ + + + + + + net8.0-windows + Debug;Release;Local + 8 + $(DefineConstants);RHINO8;RHINO7_OR_GREATER;RHINO8_OR_GREATER + .dll + true + true + true + true + + + win-x64 + true + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Connectors/Rhino/Speckle.Connectors.RhinoImporter/packages.lock.json b/Connectors/Rhino/Speckle.Connectors.RhinoImporter/packages.lock.json new file mode 100644 index 000000000..268b26fd9 --- /dev/null +++ b/Connectors/Rhino/Speckle.Connectors.RhinoImporter/packages.lock.json @@ -0,0 +1,370 @@ +{ + "version": 2, + "dependencies": { + "net8.0-windows7.0": { + "Microsoft.NETFramework.ReferenceAssemblies": { + "type": "Direct", + "requested": "[1.0.3, )", + "resolved": "1.0.3", + "contentHash": "vUc9Npcs14QsyOD01tnv/m8sQUnGTGOw1BCmKcv77LBJY7OxhJ+zJF7UD/sCL3lYNFuqmQEVlkfS4Quif6FyYg==", + "dependencies": { + "Microsoft.NETFramework.ReferenceAssemblies.net461": "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==" + }, + "RhinoCommon": { + "type": "Direct", + "requested": "[8.21.25188.17001, )", + "resolved": "8.21.25188.17001", + "contentHash": "Wo6JXheyDBvilyIwDY6xZCQJC4170jzAlTSlMgh8yokUY+vYyCl4KJVXZofIOynNt/xx5wLqb2On5gZZekXR6w==", + "dependencies": { + "System.Drawing.Common": "7.0.0" + } + }, + "RhinoWindows": { + "type": "Direct", + "requested": "[8.21.25188.17001, )", + "resolved": "8.21.25188.17001", + "contentHash": "9zqCorcLRBeiW/j1RTwUS4E7bnZetAdA9WDdtd/AQccjOpxdtw76wdN+ciyQ6qslseWkwZ9qSBeh7QaM800Ntw==", + "dependencies": { + "RhinoCommon": "[8.21.25188.17001]" + } + }, + "Speckle.InterfaceGenerator": { + "type": "Direct", + "requested": "[0.9.6, )", + "resolved": "0.9.6", + "contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w==" + }, + "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.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.Build.Tasks.Git": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ==" + }, + "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.net461": { + "type": "Transitive", + "resolved": "1.0.3", + "contentHash": "AmOJZwCqnOCNp6PPcf9joyogScWLtwy0M1WkqfEQ0M9nYwyDD7EX9ZjscKS5iYnyvteX7kzSKFCKt9I9dXA6mA==" + }, + "Microsoft.SourceLink.Common": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw==" + }, + "Microsoft.Win32.SystemEvents": { + "type": "Transitive", + "resolved": "7.0.0", + "contentHash": "2nXPrhdAyAzir0gLl8Yy8S5Mnm/uBSQQA7jEsILOS1MTyS7DbmV1NgViMtvV1sfCD1ebITpNwb1NIinKeJgUVQ==" + }, + "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.e_sqlite3": "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.e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "CSlb5dUp1FMIkez9Iv5EXzpeq7rHryVNqwJMWnpq87j9zWZexaEMdisDktMsnnrzKM6ahNrsTkjqNodTBPBxtQ==", + "dependencies": { + "SQLitePCLRaw.core": "2.1.4" + } + }, + "System.ComponentModel.Annotations": { + "type": "Transitive", + "resolved": "4.5.0", + "contentHash": "UxYQ3FGUOtzJ7LfSdnYSFd7+oEv6M8NgUatatIN2HxNtDdlcvFAf+VIq4Of9cDMJEJC0aSRv/x898RYhB4Yppg==" + }, + "System.Drawing.Common": { + "type": "Transitive", + "resolved": "7.0.0", + "contentHash": "KIX+oBU38pxkKPxvLcLfIkOV5Ien8ReN78wro7OF5/erwcmortzeFx+iBswlh2Vz6gVne0khocQudGwaO1Ey6A==", + "dependencies": { + "Microsoft.Win32.SystemEvents": "7.0.0" + } + }, + "System.Memory": { + "type": "Transitive", + "resolved": "4.5.3", + "contentHash": "3oDzvc/zzetpTKWMShs1AADwZjQ/36HnsufHRPcOjyRAAMLDlu2iD33MBI2opxnezcVUtXyqDXXjoFMOU9c7SA==" + }, + "System.Reactive": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ==" + }, + "System.Runtime.CompilerServices.Unsafe": { + "type": "Transitive", + "resolved": "4.5.1", + "contentHash": "Zh8t8oqolRaFa9vmOZfdQm/qKejdqz0J9kr7o2Fu0vPeoH3BL1EOXipKWwkWtLT1JPzjByrF19fGuFlNbmPpiw==" + }, + "speckle.connectors.common": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", + "Speckle.Connectors.Logging": "[1.0.0, )", + "Speckle.Objects": "[3.5.1, )", + "Speckle.Sdk": "[3.5.1, )", + "Speckle.Sdk.Dependencies": "[3.5.1, )" + } + }, + "speckle.connectors.dui": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", + "Speckle.Connectors.Common": "[1.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.5.1, )" + } + }, + "speckle.converters.rhino8": { + "type": "Project", + "dependencies": { + "Speckle.Converters.Common": "[1.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.DoubleNumerics": { + "type": "CentralTransitive", + "requested": "[4.1.0, )", + "resolved": "4.1.0", + "contentHash": "20DtS+FsDRsOD9+AU3TwNFZ0qrKo5f6f7B5ZR9wStsIHHHC9k7DpjbCvuNtmnSjx54MD+TJC7wV2f5iyGVPj1A==" + }, + "Speckle.Objects": { + "type": "CentralTransitive", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "dependencies": { + "Speckle.Sdk": "3.5.1" + } + }, + "Speckle.Sdk": { + "type": "CentralTransitive", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "dependencies": { + "GraphQL.Client": "6.0.0", + "Microsoft.Data.Sqlite": "7.0.5", + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging": "2.2.0", + "Speckle.DoubleNumerics": "4.1.0", + "Speckle.Newtonsoft.Json": "13.0.2", + "Speckle.Sdk.Dependencies": "3.5.1" + } + }, + "Speckle.Sdk.Dependencies": { + "type": "CentralTransitive", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + } + }, + "net8.0-windows7.0/win-x64": { + "Microsoft.Win32.SystemEvents": { + "type": "Transitive", + "resolved": "7.0.0", + "contentHash": "2nXPrhdAyAzir0gLl8Yy8S5Mnm/uBSQQA7jEsILOS1MTyS7DbmV1NgViMtvV1sfCD1ebITpNwb1NIinKeJgUVQ==" + }, + "SQLitePCLRaw.lib.e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "2C9Q9eX7CPLveJA0rIhf9RXAvu+7nWZu1A2MdG6SD/NOu26TakGgL1nsbc0JAspGijFOo3HoN79xrx8a368fBg==" + }, + "System.Drawing.Common": { + "type": "Transitive", + "resolved": "7.0.0", + "contentHash": "KIX+oBU38pxkKPxvLcLfIkOV5Ien8ReN78wro7OF5/erwcmortzeFx+iBswlh2Vz6gVne0khocQudGwaO1Ey6A==", + "dependencies": { + "Microsoft.Win32.SystemEvents": "7.0.0" + } + }, + "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/Rhino/Speckle.Connectors.RhinoShared/Bindings/RhinoMapperBinding.cs b/Connectors/Rhino/Speckle.Connectors.RhinoShared/Bindings/RhinoMapperBinding.cs new file mode 100644 index 000000000..be63a6f1f --- /dev/null +++ b/Connectors/Rhino/Speckle.Connectors.RhinoShared/Bindings/RhinoMapperBinding.cs @@ -0,0 +1,394 @@ +using Rhino; +using Rhino.DocObjects; +using Rhino.DocObjects.Tables; +using Speckle.Connectors.DUI.Bindings; +using Speckle.Connectors.DUI.Bridge; +using Speckle.Connectors.DUI.Models; +using Speckle.Connectors.Rhino.HostApp; +using Speckle.Connectors.Rhino.Mapper.Revit; + +namespace Speckle.Connectors.Rhino.Bindings; + +/// +/// Binding for managing Rhino object mappings to Revit categories. +/// +public class RhinoMapperBinding : IBinding +{ + private const string MAPPINGS_CHANGED_EVENT = "mappingsChanged"; + private const string LAYERS_CHANGED_EVENT = "layersChanged"; + private readonly DocumentModelStore _store; + private readonly IAppIdleManager _idleManager; + private readonly IBasicConnectorBinding _basicConnectorBinding; + private readonly ITopLevelExceptionHandler _topLevelExceptionHandler; + private readonly RevitMappingResolver _revitMappingResolver; + private readonly RhinoLayerHelper _rhinoLayerHelper; + private readonly RhinoObjectHelper _rhinoObjectHelper; + public string Name => "revitMapperBinding"; + public IBrowserBridge Parent { get; } + + public RhinoMapperBinding( + DocumentModelStore store, + IAppIdleManager idleManager, + IBrowserBridge parent, + IBasicConnectorBinding basicConnectorBinding, + ITopLevelExceptionHandler topLevelExceptionHandler, + RevitMappingResolver revitMappingResolver, + RhinoLayerHelper rhinoLayerHelper, + RhinoObjectHelper rhinoObjectHelper + ) + { + _store = store; + _idleManager = idleManager; + Parent = parent; + _basicConnectorBinding = basicConnectorBinding; + _topLevelExceptionHandler = topLevelExceptionHandler; + _revitMappingResolver = revitMappingResolver; + _rhinoLayerHelper = rhinoLayerHelper; + _rhinoObjectHelper = rhinoObjectHelper; + + // Subscribe to Rhino events so we know about changes + // Events fire on delete, undo delete, add and modify objects + RhinoDoc.DeleteRhinoObject += OnObjectChanged; + RhinoDoc.UndeleteRhinoObject += OnObjectChanged; + RhinoDoc.AddRhinoObject += OnObjectChanged; + RhinoDoc.ModifyObjectAttributes += OnObjectAttributesChanged; + + // Subscribe to layer events so we know about layer changes + RhinoDoc.LayerTableEvent += OnLayerTableEvent; + + // Subscribe to document changes to refresh mappings when switching documents + _store.DocumentChanged += OnDocumentChanged; + } + + #region UI Methods - General + + /// + /// Gets list of available layers for the UI dropdown. + /// + public LayerOption[] GetAvailableLayers() + { + var doc = RhinoDoc.ActiveDoc; + if (doc == null) + { + return []; + } + + return doc + .Layers.Where(layer => !layer.IsDeleted) + .Select(layer => new LayerOption(layer.Id.ToString(), _rhinoLayerHelper.GetFullLayerPath(layer))) + .OrderBy(layer => layer.Name) + .ToArray(); + } + + /// + /// Selects/highlights specific objects in Rhino. + /// + public async Task HighlightObjects(string[] objectIds) => await _basicConnectorBinding.HighlightObjects(objectIds); + + #endregion + + #region UI Methods - Object Mapping Methods + + /// + /// Assigns selected objects to a specific Revit category. + /// + public void AssignObjectsToCategory(string[] objectIds, string categoryValue) + { + foreach (var objectIdString in objectIds) + { + // NOTE: should we be checking if key already exists? + // For POC, straightforward set on object + var rhinoObject = _rhinoObjectHelper.GetRhinoObject(objectIdString); + var attrs = rhinoObject?.Attributes.Duplicate(); + attrs?.SetUserString(RevitMappingConstants.CATEGORY_USER_STRING_KEY, categoryValue); + RhinoDoc.ActiveDoc.Objects.ModifyAttributes(rhinoObject, attrs, true); + } + + // Trigger single update after all changes + _idleManager.SubscribeToIdle(nameof(NotifyMappingsChanged), NotifyMappingsChanged); + } + + /// + /// Removes category assignments from specific objects. + /// + public void ClearObjectsCategoryAssignment(string[] objectIds) + { + foreach (var objectIdString in objectIds) + { + var rhinoObject = _rhinoObjectHelper.GetRhinoObject(objectIdString); + var attrs = rhinoObject?.Attributes.Duplicate(); + attrs?.DeleteUserString(RevitMappingConstants.CATEGORY_USER_STRING_KEY); + RhinoDoc.ActiveDoc.Objects.ModifyAttributes(rhinoObject, attrs, true); + } + + // Trigger single update after all changes + _idleManager.SubscribeToIdle(nameof(NotifyMappingsChanged), NotifyMappingsChanged); + } + + /// + /// Removes all category assignments in the doc. + /// + public void ClearAllObjectsCategoryAssignments() + { + foreach (var rhinoObject in RhinoDoc.ActiveDoc.Objects) + { + if (!string.IsNullOrEmpty(rhinoObject.Attributes.GetUserString(RevitMappingConstants.CATEGORY_USER_STRING_KEY))) + { + var attrs = rhinoObject.Attributes.Duplicate(); + attrs.DeleteUserString(RevitMappingConstants.CATEGORY_USER_STRING_KEY); + RhinoDoc.ActiveDoc.Objects.ModifyAttributes(rhinoObject, attrs, true); + } + } + + // Trigger single update + _idleManager.SubscribeToIdle(nameof(NotifyMappingsChanged), NotifyMappingsChanged); + } + + /// + /// Gets all current mappings to show in the UI table. + /// + /// + public CategoryMapping[] GetCurrentObjectsMappings() + { + var mappedObjects = RhinoDoc + .ActiveDoc.Objects.Where(obj => + !string.IsNullOrEmpty(obj.Attributes.GetUserString(RevitMappingConstants.CATEGORY_USER_STRING_KEY)) + ) + .GroupBy(obj => obj.Attributes.GetUserString(RevitMappingConstants.CATEGORY_USER_STRING_KEY)) + .Select(group => new CategoryMapping( + group.Key, + group.Key, + group.Select(obj => obj.Id.ToString()).ToArray(), + group.Count() + )) + .ToArray(); + + return mappedObjects; + } + + /// + /// Gets category mappings for specific object IDs. + /// + public string[] GetCategoryMappingsForObjects(string[] objectIds) => + objectIds + .Select(id => + _rhinoObjectHelper.GetRhinoObject(id)?.Attributes.GetUserString(RevitMappingConstants.CATEGORY_USER_STRING_KEY) + ) + .Where(category => category != null) + .Cast() + .Distinct() + .ToArray(); + + #endregion + + #region UI Methods - Layer Mapping Methods + + /// + /// Assigns selected layers to a specific Revit category. + /// + public void AssignLayerToCategory(string[] layerIds, string categoryValue) + { + foreach (var layerId in layerIds) + { + var layer = _rhinoLayerHelper.GetLayer(layerId); + layer?.SetUserString(RevitMappingConstants.CATEGORY_USER_STRING_KEY, categoryValue); + } + + // Trigger single update + _idleManager.SubscribeToIdle(nameof(NotifyMappingsChanged), NotifyMappingsChanged); + } + + /// + /// Removes category assignments from specific layer(s). + /// + public void ClearLayerCategoryAssignment(string[] layerIds) + { + foreach (var layerId in layerIds) + { + // NOTE: clear user string by setting to null. Layer has not DeleteUserString() method 🙄 + var layer = _rhinoLayerHelper.GetLayer(layerId); + layer?.SetUserString(RevitMappingConstants.CATEGORY_USER_STRING_KEY, null); + } + + // Trigger single update + _idleManager.SubscribeToIdle(nameof(NotifyMappingsChanged), NotifyMappingsChanged); + } + + /// + /// Removes all layer category assignments in the doc. + /// + public void ClearAllLayerCategoryAssignments() + { + foreach (var layer in RhinoDoc.ActiveDoc.Layers) + { + if (!string.IsNullOrEmpty(layer.GetUserString(RevitMappingConstants.CATEGORY_USER_STRING_KEY))) + { + // NOTE: clear user string by setting to null. Layer has not DeleteUserString() method 🙄 + layer.SetUserString(RevitMappingConstants.CATEGORY_USER_STRING_KEY, null); + } + } + + // Trigger single update + _idleManager.SubscribeToIdle(nameof(NotifyMappingsChanged), NotifyMappingsChanged); + } + + /// + /// Gets all current layer mappings to show in the UI table. + /// Layers with the same category mapping are grouped together. + /// + public LayerCategoryMapping[] GetCurrentLayerMappings() + { + var mappedLayers = RhinoDoc + .ActiveDoc.Layers.Where(layer => + !layer.IsDeleted && !string.IsNullOrEmpty(layer.GetUserString(RevitMappingConstants.CATEGORY_USER_STRING_KEY)) + ) + .GroupBy(layer => layer.GetUserString(RevitMappingConstants.CATEGORY_USER_STRING_KEY)) + .Select(group => new LayerCategoryMapping( + group.Key, + group.Key, + group.Select(layer => layer.Id.ToString()).ToArray(), + group.Select(layer => _rhinoLayerHelper.GetFullLayerPath(layer)).ToArray(), + group.Count() + )) + .ToArray(); + + return mappedLayers; + } + + /// + /// Gets category mappings for specific layer IDs. + /// + public string[] GetCategoryMappingsForLayers(string[] layerIds) => + layerIds + .Select(id => _rhinoLayerHelper.GetLayer(id)?.GetUserString(RevitMappingConstants.CATEGORY_USER_STRING_KEY)) + .Where(category => !string.IsNullOrEmpty(category)) + .Cast() + .Distinct() + .ToArray(); + + public string[] GetEffectiveObjectsForLayerMapping(string[] layerIds, string categoryValue) => + _revitMappingResolver.GetEffectiveObjectsForLayerMapping(layerIds, categoryValue); + + #endregion + + #region Event Handling + + /// + /// Called when objects are added, deleted, or undeleted in Rhino. + /// + private void OnObjectChanged(object? sender, RhinoObjectEventArgs e) + { + if (!_store.IsDocumentInit) + { + return; + } + + var rhinoObject = e.TheObject; + if (!string.IsNullOrEmpty(rhinoObject.Attributes.GetUserString(RevitMappingConstants.CATEGORY_USER_STRING_KEY))) + { + _idleManager.SubscribeToIdle(nameof(NotifyMappingsChanged), NotifyMappingsChanged); + } + } + + /// + /// Called when object attributes are modified in Rhino. + /// + /// + /// Includes detection for when objects move between layers with mappings. + /// + private void OnObjectAttributesChanged(object? sender, RhinoModifyObjectAttributesEventArgs e) + { + if (!_store.IsDocumentInit) + { + return; + } + + var rhinoObject = e.RhinoObject; + + // check if mapping user string changed (added, removed, or modified) + var oldMapping = e.OldAttributes.GetUserString(RevitMappingConstants.CATEGORY_USER_STRING_KEY); + var newMapping = rhinoObject.Attributes.GetUserString(RevitMappingConstants.CATEGORY_USER_STRING_KEY); + bool mappingChanged = !string.Equals(oldMapping, newMapping, StringComparison.Ordinal); + + // check if layer change affects mappings + bool hasOldLayerMapping = _rhinoLayerHelper.HasLayerMapping(e.OldAttributes.LayerIndex); + bool hasNewLayerMapping = _rhinoLayerHelper.HasLayerMapping(rhinoObject.Attributes.LayerIndex); + + // refresh if mapping changed OR layer change affects mapped layers + if (mappingChanged || hasOldLayerMapping || hasNewLayerMapping) + { + _idleManager.SubscribeToIdle(nameof(NotifyMappingsChanged), NotifyMappingsChanged); + } + } + + /// + /// Called when the document changes (e.g., switching to a different Rhino model). + /// Refreshes the mappings table and defined layers to reflect the new document's state. + /// + private void OnDocumentChanged(object? sender, EventArgs e) + { + if (!_store.IsDocumentInit) + { + return; + } + + // Refresh mappings for the new document + _idleManager.SubscribeToIdle(nameof(NotifyMappingsChanged), NotifyMappingsChanged); + + // Refresh layer list for the new document + _idleManager.SubscribeToIdle(nameof(NotifyLayersChanged), NotifyLayersChanged); + } + + /// + /// Called when layer table events occur in Rhino. + /// Refreshes layer list when layer structure changes. + /// + /// + /// Layer mapping changes are handled by OnObjectAttributesChanged + /// + private void OnLayerTableEvent(object? sender, LayerTableEventArgs e) => + _topLevelExceptionHandler.CatchUnhandled(() => + { + if (!_store.IsDocumentInit) + { + return; + } + + // Refresh layer list for structural changes + if ( + e.EventType == LayerTableEventType.Added + || e.EventType == LayerTableEventType.Deleted + || e.EventType == LayerTableEventType.Modified + ) + { + _idleManager.SubscribeToIdle(nameof(NotifyLayersChanged), NotifyLayersChanged); + } + + // Refresh mappings when layers are deleted or modified + // This ensures that mappings table updates when mapped layers are removed + if (e.EventType == LayerTableEventType.Deleted || e.EventType == LayerTableEventType.Modified) + { + _idleManager.SubscribeToIdle(nameof(NotifyMappingsChanged), NotifyMappingsChanged); + } + }); + + /// + /// Sends updated mappings to the frontend. + /// + private void NotifyMappingsChanged() + { + var currentMappings = GetCurrentObjectsMappings(); + Parent.Send(MAPPINGS_CHANGED_EVENT, currentMappings); + } + + /// + /// Sends updated layer list to the frontend. + /// + private void NotifyLayersChanged() + { + var availableLayers = GetAvailableLayers(); + Parent.Send(LAYERS_CHANGED_EVENT, availableLayers); + } + + #endregion +} diff --git a/Connectors/Rhino/Speckle.Connectors.RhinoShared/Bindings/RhinoReceiveBinding.cs b/Connectors/Rhino/Speckle.Connectors.RhinoShared/Bindings/RhinoReceiveBinding.cs index 959d43afc..b5e36a8b0 100644 --- a/Connectors/Rhino/Speckle.Connectors.RhinoShared/Bindings/RhinoReceiveBinding.cs +++ b/Connectors/Rhino/Speckle.Connectors.RhinoShared/Bindings/RhinoReceiveBinding.cs @@ -24,6 +24,7 @@ public class RhinoReceiveBinding( public async Task Receive(string modelCardId) { + // NOTE: introduction of AddVisualizationProperties setting not accounted for in receive pipeline, hence hardcoded as true (i.e. "as before") using var manager = receiveOperationManagerFactory.Create(); await manager.Process( Commands, @@ -31,7 +32,7 @@ public class RhinoReceiveBinding( (sp, card) => { sp.GetRequiredService>() - .Initialize(rhinoConversionSettingsFactory.Create(RhinoDoc.ActiveDoc)); + .Initialize(rhinoConversionSettingsFactory.Create(RhinoDoc.ActiveDoc, true)); }, async (modelName, processor) => { diff --git a/Connectors/Rhino/Speckle.Connectors.RhinoShared/Bindings/RhinoSendBinding.cs b/Connectors/Rhino/Speckle.Connectors.RhinoShared/Bindings/RhinoSendBinding.cs index cd5c332f3..12b9198de 100644 --- a/Connectors/Rhino/Speckle.Connectors.RhinoShared/Bindings/RhinoSendBinding.cs +++ b/Connectors/Rhino/Speckle.Connectors.RhinoShared/Bindings/RhinoSendBinding.cs @@ -13,7 +13,9 @@ 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.Connectors.Rhino.HostApp; using Speckle.Connectors.Rhino.Operations.Send.Filters; +using Speckle.Connectors.Rhino.Operations.Send.Settings; using Speckle.Converters.Common; using Speckle.Converters.Rhino; using Speckle.Sdk.Common; @@ -29,11 +31,13 @@ public sealed class RhinoSendBinding : ISendBinding private readonly DocumentModelStore _store; private readonly ICancellationManager _cancellationManager; private readonly ISendConversionCache _sendConversionCache; + private readonly ToSpeckleSettingsManager _toSpeckleSettingsManager; private readonly ILogger _logger; private readonly IRhinoConversionSettingsFactory _rhinoConversionSettingsFactory; private readonly ITopLevelExceptionHandler _topLevelExceptionHandler; private readonly IAppIdleManager _idleManager; private readonly ISendOperationManagerFactory _sendOperationManagerFactory; + private readonly RhinoLayerHelper _rhinoLayerHelper; /// /// Used internally to aggregate the changed objects' id. Objects in this list will be reconverted. @@ -59,21 +63,25 @@ public sealed class RhinoSendBinding : ISendBinding IBrowserBridge parent, ICancellationManager cancellationManager, ISendConversionCache sendConversionCache, + ToSpeckleSettingsManager toSpeckleSettingsManager, ILogger logger, IRhinoConversionSettingsFactory rhinoConversionSettingsFactory, ITopLevelExceptionHandler topLevelExceptionHandler, - ISendOperationManagerFactory sendOperationManagerFactory + ISendOperationManagerFactory sendOperationManagerFactory, + RhinoLayerHelper rhinoLayerHelper ) { _store = store; _idleManager = idleManager; _cancellationManager = cancellationManager; _sendConversionCache = sendConversionCache; + _toSpeckleSettingsManager = toSpeckleSettingsManager; _logger = logger; _rhinoConversionSettingsFactory = rhinoConversionSettingsFactory; Parent = parent; _topLevelExceptionHandler = topLevelExceptionHandler; _sendOperationManagerFactory = sendOperationManagerFactory; + _rhinoLayerHelper = rhinoLayerHelper; Commands = new SendBindingUICommands(parent); // POC: Commands are tightly coupled with their bindings, at least for now, saves us injecting a factory. PreviousUnitSystem = RhinoDoc.ActiveDoc.ModelUnitSystem; SubscribeToRhinoEvents(); @@ -271,9 +279,9 @@ public sealed class RhinoSendBinding : ISendBinding } public List GetSendFilters() => - [new RhinoSelectionFilter() { IsDefault = true }, new RhinoLayersFilter()]; + [new RhinoSelectionFilter() { IsDefault = true }, new RhinoLayersFilter(_rhinoLayerHelper)]; - public List GetSendSettings() => []; + public List GetSendSettings() => [new AddVisualizationProperties(false)]; public async Task Send(string modelCardId) { @@ -282,9 +290,14 @@ public sealed class RhinoSendBinding : ISendBinding await manager.Process( Commands, modelCardId, - (sp, _) => + (sp, card) => sp.GetRequiredService>() - .Initialize(_rhinoConversionSettingsFactory.Create(RhinoDoc.ActiveDoc)), + .Initialize( + _rhinoConversionSettingsFactory.Create( + RhinoDoc.ActiveDoc, + _toSpeckleSettingsManager.GetAddVisualizationPropertiesSetting(card) + ) + ), card => { return Task.FromResult>( diff --git a/Connectors/Rhino/Speckle.Connectors.RhinoShared/HostApp/Properties/PropertiesExtractor.cs b/Connectors/Rhino/Speckle.Connectors.RhinoShared/HostApp/Properties/PropertiesExtractor.cs index 15c85089e..e5d07080a 100644 --- a/Connectors/Rhino/Speckle.Connectors.RhinoShared/HostApp/Properties/PropertiesExtractor.cs +++ b/Connectors/Rhino/Speckle.Connectors.RhinoShared/HostApp/Properties/PropertiesExtractor.cs @@ -1,5 +1,6 @@ using Rhino; using Rhino.DocObjects; +using Speckle.Connectors.Rhino.Mapper.Revit; using Speckle.Sdk; namespace Speckle.Connectors.Rhino.HostApp.Properties; @@ -9,12 +10,24 @@ namespace Speckle.Connectors.Rhino.HostApp.Properties; /// public class PropertiesExtractor { + private readonly RevitMappingResolver _revitMappingResolver; + + public PropertiesExtractor(RevitMappingResolver revitMappingResolver) + { + _revitMappingResolver = revitMappingResolver; + } + public Dictionary GetProperties(RhinoObject rhObject) { Dictionary properties = new(); var userStrings = rhObject.Attributes.GetUserStrings(); - foreach (var key in userStrings.AllKeys) + foreach (string? key in userStrings.AllKeys) { + if (key == null) + { + continue; + } + try { if (key == "$block-instance-original-object-id$") // skip: this seems to be an invisible user string that shows up on block instances @@ -22,7 +35,7 @@ public class PropertiesExtractor continue; } - if (userStrings[key].StartsWith("%<")) + if (userStrings[key]?.StartsWith("%<") ?? false) { var value = RhinoApp.ParseTextField(userStrings[key], rhObject, null); properties[key] = value; @@ -37,6 +50,16 @@ public class PropertiesExtractor properties[key] = userStrings[key]; } + // NOTE: if no mapping was found on the object, check layer(s) recursively + if (!properties.ContainsKey(RevitMappingConstants.CATEGORY_USER_STRING_KEY)) + { + var layerMapping = _revitMappingResolver.SearchLayerHierarchyForMapping(rhObject); + if (!string.IsNullOrEmpty(layerMapping)) + { + properties[RevitMappingConstants.CATEGORY_USER_STRING_KEY] = layerMapping; + } + } + return properties; } } diff --git a/Connectors/Rhino/Speckle.Connectors.RhinoShared/HostApp/RhinoGroupBaker.cs b/Connectors/Rhino/Speckle.Connectors.RhinoShared/HostApp/RhinoGroupBaker.cs index bf719ccb2..dea94abe5 100644 --- a/Connectors/Rhino/Speckle.Connectors.RhinoShared/HostApp/RhinoGroupBaker.cs +++ b/Connectors/Rhino/Speckle.Connectors.RhinoShared/HostApp/RhinoGroupBaker.cs @@ -54,7 +54,7 @@ public class RhinoGroupBaker Dictionary> applicationIdMap ) { - if (applicationIdMap.TryGetValue(oldObjId, out IReadOnlyCollection value)) + if (applicationIdMap.TryGetValue(oldObjId, out IReadOnlyCollection? value)) { return value; } diff --git a/Connectors/Rhino/Speckle.Connectors.RhinoShared/HostApp/RhinoLayerHelper.cs b/Connectors/Rhino/Speckle.Connectors.RhinoShared/HostApp/RhinoLayerHelper.cs new file mode 100644 index 000000000..b3ebcedfd --- /dev/null +++ b/Connectors/Rhino/Speckle.Connectors.RhinoShared/HostApp/RhinoLayerHelper.cs @@ -0,0 +1,134 @@ +using Rhino; +using Rhino.DocObjects; +using Speckle.Connectors.Rhino.Mapper.Revit; + +namespace Speckle.Connectors.Rhino.HostApp; + +/// +/// Helper class for common Rhino layer and object operations. +/// Consolidates layer utilities to eliminate duplication across the codebase. +/// +public class RhinoLayerHelper +{ + /// + /// Gets list of available layers for UI dropdowns. + /// + public LayerOption[] GetAvailableLayers() + { + var doc = RhinoDoc.ActiveDoc; + if (doc == null) + { + return []; + } + + return doc + .Layers.Where(layer => !layer.IsDeleted) + .Select(layer => new LayerOption(layer.Id.ToString(), GetFullLayerPath(layer))) + .OrderBy(layer => layer.Name) + .ToArray(); + } + + /// + /// Gets the full layer path with / delimiter + /// + public string GetFullLayerPath(Layer layer) + { + string fullPath = layer.Name; + Guid parentIndex = layer.ParentLayerId; + while (parentIndex != Guid.Empty) + { + Layer? parentLayer = RhinoDoc.ActiveDoc.Layers.FindId(parentIndex); + if (parentLayer == null) + { + break; + } + + fullPath = parentLayer.Name + "/" + fullPath; // use "/" delimiter + parentIndex = parentLayer.ParentLayerId; + } + return fullPath; + } + + /// + /// Converts a string layer ID to a Layer. + /// + /// Layer if found and valid, null otherwise + public Layer? GetLayer(string layerIdString) => + Guid.TryParse(layerIdString, out var layerId) ? RhinoDoc.ActiveDoc.Layers.FindId(layerId) : null; + + /// + /// Helper to check if a layer (by index) has a category mapping. + /// + /// + /// This is arguably a very specific method pertaining to mapper and maybe shouldn't be in this class? + /// + public bool HasLayerMapping(int layerIndex) + { + if (layerIndex < 0 || layerIndex >= RhinoDoc.ActiveDoc.Layers.Count) + { + return false; + } + + var layer = RhinoDoc.ActiveDoc.Layers[layerIndex]; + return !string.IsNullOrEmpty(layer.GetUserString(RevitMappingConstants.CATEGORY_USER_STRING_KEY)); + } + + /// + /// Gets all RhinoObjects in the specified layer and all its child layers recursively. + /// + public IEnumerable GetObjectsInLayerHierarchy(Layer rootLayer) + { + var allObjects = new List(); + var layersToSearch = GetLayerAndAllChildren(rootLayer); + + foreach (var layer in layersToSearch) + { + var objectsOnLayer = RhinoDoc.ActiveDoc.Objects.FindByLayer(layer); + allObjects.AddRange(objectsOnLayer); + } + + return allObjects; + } + + /// + /// Gets the specified layer and all its child layers recursively. + /// + public IEnumerable GetLayerAndAllChildren(Layer rootLayer) + { + // Return the root layer itself + yield return rootLayer; + + // Get all child layers recursively + foreach (var childLayer in GetAllChildLayers(rootLayer)) + { + yield return childLayer; + } + } + + /// + /// Recursively gets all child layers of the specified parent layer. + /// + public IEnumerable GetAllChildLayers(Layer parentLayer) + { + var doc = RhinoDoc.ActiveDoc; + if (doc?.Layers == null) + { + yield break; + } + + // Find all direct child layers + var directChildren = doc.Layers.Where(layer => layer.ParentLayerId == parentLayer.Id); + + foreach (var childLayer in directChildren) + { + // Return the direct child + yield return childLayer; + + // Recursively get grandchildren + foreach (var grandChild in GetAllChildLayers(childLayer)) + { + yield return grandChild; + } + } + } +} diff --git a/Connectors/Rhino/Speckle.Connectors.RhinoShared/HostApp/RhinoLayerUnpacker.cs b/Connectors/Rhino/Speckle.Connectors.RhinoShared/HostApp/RhinoLayerUnpacker.cs index ea465669d..3a921eea9 100644 --- a/Connectors/Rhino/Speckle.Connectors.RhinoShared/HostApp/RhinoLayerUnpacker.cs +++ b/Connectors/Rhino/Speckle.Connectors.RhinoShared/HostApp/RhinoLayerUnpacker.cs @@ -14,6 +14,7 @@ namespace Speckle.Connectors.Rhino.HostApp; /// public class RhinoLayerUnpacker { + private readonly RhinoLayerHelper _rhinoLayerHelper; private readonly Dictionary _layerCollectionCache = new(); private static readonly string s_pathSeparator = @@ -24,6 +25,11 @@ public class RhinoLayerUnpacker #endif private static readonly string[] s_pathSeparatorSplit = [s_pathSeparator]; + public RhinoLayerUnpacker(RhinoLayerHelper rhinoLayerHelper) + { + _rhinoLayerHelper = rhinoLayerHelper; + } + /// /// Use this method to get all of the layers that correspond to collection created in the root collection. /// @@ -31,20 +37,16 @@ public class RhinoLayerUnpacker /// Throws when a layer could not be retrieved from a stored collection application id public IEnumerable GetUsedLayers() { - var currentDoc = RhinoDoc.ActiveDoc; // POC: too much right now to interface around - foreach (string layerId in _layerCollectionCache.Values.Select(o => o.applicationId ?? string.Empty).ToList()) { - if (Guid.TryParse(layerId, out Guid layerGuid)) + var layer = _rhinoLayerHelper.GetLayer(layerId); + if (layer != null) { - if (currentDoc.Layers.FindId(layerGuid) is Layer layer) - { - yield return layer; - } - else - { - throw new SpeckleException($"Could not retrieve layer with guid: {layerId}."); - } + yield return layer; + } + else if (Guid.TryParse(layerId, out _)) + { + throw new SpeckleException($"Could not retrieve layer with guid: {layerId}."); } else { diff --git a/Connectors/Rhino/Speckle.Connectors.RhinoShared/HostApp/RhinoObjectHelper.cs b/Connectors/Rhino/Speckle.Connectors.RhinoShared/HostApp/RhinoObjectHelper.cs new file mode 100644 index 000000000..15437556a --- /dev/null +++ b/Connectors/Rhino/Speckle.Connectors.RhinoShared/HostApp/RhinoObjectHelper.cs @@ -0,0 +1,17 @@ +using Rhino; +using Rhino.DocObjects; + +namespace Speckle.Connectors.Rhino.HostApp; + +/// +/// Helper class for common Rhino object operations. +/// +public class RhinoObjectHelper +{ + /// + /// Converts a string object ID to a RhinoObject. + /// + /// RhinoObject if found and valid, null otherwise + public RhinoObject? GetRhinoObject(string objectIdString) => + Guid.TryParse(objectIdString, out var objectId) ? RhinoDoc.ActiveDoc.Objects.FindId(objectId) : null; +} diff --git a/Connectors/Rhino/Speckle.Connectors.RhinoShared/Mapper/Revit/CategoryMapping.cs b/Connectors/Rhino/Speckle.Connectors.RhinoShared/Mapper/Revit/CategoryMapping.cs new file mode 100644 index 000000000..f71b5e667 --- /dev/null +++ b/Connectors/Rhino/Speckle.Connectors.RhinoShared/Mapper/Revit/CategoryMapping.cs @@ -0,0 +1,11 @@ +namespace Speckle.Connectors.Rhino.Mapper.Revit; + +/// +/// Represents a group of objects that are all assigned to the same category. +/// +public record CategoryMapping( + string CategoryValue, + string CategoryLabel, + IReadOnlyList ObjectIds, + int ObjectCount +); diff --git a/Connectors/Rhino/Speckle.Connectors.RhinoShared/Mapper/Revit/LayerCategoryMapping.cs b/Connectors/Rhino/Speckle.Connectors.RhinoShared/Mapper/Revit/LayerCategoryMapping.cs new file mode 100644 index 000000000..c2dae609b --- /dev/null +++ b/Connectors/Rhino/Speckle.Connectors.RhinoShared/Mapper/Revit/LayerCategoryMapping.cs @@ -0,0 +1,12 @@ +namespace Speckle.Connectors.Rhino.Mapper.Revit; + +/// +/// Represents layers that are all assigned to the same category. +/// +public record LayerCategoryMapping( + string CategoryValue, + string CategoryLabel, + IReadOnlyList LayerIds, + IReadOnlyList LayerNames, + int LayerCount +); diff --git a/Connectors/Rhino/Speckle.Connectors.RhinoShared/Mapper/Revit/LayerOption.cs b/Connectors/Rhino/Speckle.Connectors.RhinoShared/Mapper/Revit/LayerOption.cs new file mode 100644 index 000000000..e7463985f --- /dev/null +++ b/Connectors/Rhino/Speckle.Connectors.RhinoShared/Mapper/Revit/LayerOption.cs @@ -0,0 +1,6 @@ +namespace Speckle.Connectors.Rhino.Mapper.Revit; + +/// +/// Represents a layer option for the UI dropdown. +/// +public record LayerOption(string Id, string Name); diff --git a/Connectors/Rhino/Speckle.Connectors.RhinoShared/Mapper/Revit/RevitMappingConstants.cs b/Connectors/Rhino/Speckle.Connectors.RhinoShared/Mapper/Revit/RevitMappingConstants.cs new file mode 100644 index 000000000..909abcc43 --- /dev/null +++ b/Connectors/Rhino/Speckle.Connectors.RhinoShared/Mapper/Revit/RevitMappingConstants.cs @@ -0,0 +1,10 @@ +namespace Speckle.Connectors.Rhino.Mapper.Revit; + +/// +/// Shared constants for the Rhino-to-Revit mapping system. +/// Centralizes string constant(s) to avoid duplication across three using classes. +/// +public static class RevitMappingConstants +{ + public const string CATEGORY_USER_STRING_KEY = "builtInCategory"; +} diff --git a/Connectors/Rhino/Speckle.Connectors.RhinoShared/Mapper/Revit/RevitMappingResolver.cs b/Connectors/Rhino/Speckle.Connectors.RhinoShared/Mapper/Revit/RevitMappingResolver.cs new file mode 100644 index 000000000..a036d0c80 --- /dev/null +++ b/Connectors/Rhino/Speckle.Connectors.RhinoShared/Mapper/Revit/RevitMappingResolver.cs @@ -0,0 +1,113 @@ +using Rhino; +using Rhino.DocObjects; +using Speckle.Connectors.Rhino.HostApp; + +namespace Speckle.Connectors.Rhino.Mapper.Revit; + +/// +/// Responsible for resolving category mappings from layer hierarchy. +/// Used by the send pipeline to resolve mappings during property extraction. +/// +/// +/// This gets called when no mapping found on the object level. +/// +public class RevitMappingResolver +{ + private readonly RhinoLayerHelper _rhinoLayerHelper; + + public RevitMappingResolver(RhinoLayerHelper rhinoLayerHelper) + { + _rhinoLayerHelper = rhinoLayerHelper; + } + + /// + /// Gets all objects that would effectively receive the specified layer mapping during send. + /// Takes into account hierarchical resolution - only returns objects that would actually + /// resolve to this specific category value through the layer hierarchy. + /// + public string[] GetEffectiveObjectsForLayerMapping(string[] layerIds, string categoryValue) + { + var effectiveObjects = new List(); + + foreach (var layerId in layerIds) + { + var layer = _rhinoLayerHelper.GetLayer(layerId); + if (layer == null) + { + continue; + } + + // Get all objects in this layer and its child layers + var allObjectsInHierarchy = _rhinoLayerHelper.GetObjectsInLayerHierarchy(layer); + + foreach (var obj in allObjectsInHierarchy) + { + // Since we're in Layer mode, objects don't have direct mappings + // Check what category this object would actually resolve to through layer hierarchy + var resolvedCategory = SearchLayerHierarchyForMapping(obj); + + // Only include if it resolves to THIS specific category + if (resolvedCategory == categoryValue) + { + effectiveObjects.Add(obj.Id.ToString()); + } + } + } + + return effectiveObjects.ToArray(); + } + + /// + /// Traverses layer hierarchy, returns first mapping found or null + /// + public string? SearchLayerHierarchyForMapping(RhinoObject rhinoObject) + { + // NOTE: we agreed on a hierarchical resolution strategy: + // - Object-level mappings have highest precedence + // - Layer-level mappings are fallback when no object mapping exists + // - Traverses layer hierarchy and stops at first mapping found + + var layer = GetLayerByIndex(rhinoObject.Attributes.LayerIndex); + while (layer != null) + { + var layerMapping = layer.GetUserString(RevitMappingConstants.CATEGORY_USER_STRING_KEY); + if (!string.IsNullOrEmpty(layerMapping)) + { + return layerMapping; // returns first mapping found + } + + // move to parent layer + layer = GetParentLayer(layer); + } + + return null; + } + + /// + /// Gets a layer by its index from the active doc. + /// + private Layer? GetLayerByIndex(int layerIndex) + { + var doc = RhinoDoc.ActiveDoc; + if (doc?.Layers == null || layerIndex < 0 || layerIndex >= doc.Layers.Count) + { + return null; + } + + return doc.Layers[layerIndex]; + } + + /// + /// Gets the parent layer of the given layer. + /// + private Layer? GetParentLayer(Layer layer) + { + if (layer.ParentLayerId == Guid.Empty) + { + return null; // no parent layer + } + + var doc = RhinoDoc.ActiveDoc; + return doc?.Layers?.FindId(layer.ParentLayerId); + } +} diff --git a/Connectors/Rhino/Speckle.Connectors.RhinoShared/Operations/Send/Filters/RhinoLayersFilter.cs b/Connectors/Rhino/Speckle.Connectors.RhinoShared/Operations/Send/Filters/RhinoLayersFilter.cs index 3a2109153..1ed954c42 100644 --- a/Connectors/Rhino/Speckle.Connectors.RhinoShared/Operations/Send/Filters/RhinoLayersFilter.cs +++ b/Connectors/Rhino/Speckle.Connectors.RhinoShared/Operations/Send/Filters/RhinoLayersFilter.cs @@ -2,11 +2,14 @@ using Rhino; using Rhino.DocObjects; using Speckle.Connectors.DUI.Models.Card.SendFilter; using Speckle.Connectors.DUI.Utils; +using Speckle.Connectors.Rhino.HostApp; namespace Speckle.Connectors.Rhino.Operations.Send.Filters; public class RhinoLayersFilter : DiscriminatedObject, ISendFilter { + private readonly RhinoLayerHelper _rhinoLayerHelper; + public string Id { get; set; } = "rhinoLayers"; public string Name { get; set; } = "Layers"; public string Type { get; set; } = "Select"; @@ -19,7 +22,10 @@ public class RhinoLayersFilter : DiscriminatedObject, ISendFilter public List SelectedItems { get; set; } public List Items => GetFilterItems(); - public RhinoLayersFilter() { } + public RhinoLayersFilter(RhinoLayerHelper rhinoLayerHelper) + { + _rhinoLayerHelper = rhinoLayerHelper; + } public List RefreshObjectIds() { @@ -32,14 +38,11 @@ public class RhinoLayersFilter : DiscriminatedObject, ISendFilter foreach (var item in SelectedItems) { - if (Guid.TryParse(item.Id, out Guid layerId)) + Layer? layer = _rhinoLayerHelper.GetLayer(item.Id); + if (layer != null) { - Layer layer = doc.Layers.FindId(layerId); - if (layer != null) - { - var objectIds = doc.Objects.FindByLayer(layer).Select(obj => obj.Id.ToString()); - SelectedObjectIds.AddRange(objectIds); - } + var objectIds = doc.Objects.FindByLayer(layer).Select(obj => obj.Id.ToString()); + SelectedObjectIds.AddRange(objectIds); } } @@ -59,28 +62,10 @@ public class RhinoLayersFilter : DiscriminatedObject, ISendFilter { if (!layer.IsDeleted) { - filterItems.Add(new SendFilterSelectItem(layer.Id.ToString(), GetFullLayerPath(layer))); + filterItems.Add(new SendFilterSelectItem(layer.Id.ToString(), _rhinoLayerHelper.GetFullLayerPath(layer))); } } return filterItems; } - - private string GetFullLayerPath(Layer layer) - { - string fullPath = layer.Name; - Guid parentIndex = layer.ParentLayerId; - while (parentIndex != Guid.Empty) - { - Layer parentLayer = RhinoDoc.ActiveDoc.Layers.FindId(parentIndex); - if (parentLayer == null) - { - break; - } - - fullPath = parentLayer.Name + "/" + fullPath; - parentIndex = parentLayer.ParentLayerId; - } - return fullPath; - } } diff --git a/Connectors/Rhino/Speckle.Connectors.RhinoShared/Operations/Send/Settings/AddVisualizationProperties.cs b/Connectors/Rhino/Speckle.Connectors.RhinoShared/Operations/Send/Settings/AddVisualizationProperties.cs new file mode 100644 index 000000000..47f325090 --- /dev/null +++ b/Connectors/Rhino/Speckle.Connectors.RhinoShared/Operations/Send/Settings/AddVisualizationProperties.cs @@ -0,0 +1,12 @@ +using Speckle.Connectors.DUI.Settings; + +namespace Speckle.Connectors.Rhino.Operations.Send.Settings; + +public class AddVisualizationProperties(bool value) : ICardSetting +{ + public string? Id { get; set; } = "addVisualizationProperties"; + public string? Title { get; set; } = "Add visualization properties for meshes (will increase model size)"; + public string? Type { get; set; } = "boolean"; + public object? Value { get; set; } = value; + public List? Enum { get; set; } +} diff --git a/Connectors/Rhino/Speckle.Connectors.RhinoShared/Operations/Send/Settings/ToSpeckleSettingsManager.cs b/Connectors/Rhino/Speckle.Connectors.RhinoShared/Operations/Send/Settings/ToSpeckleSettingsManager.cs new file mode 100644 index 000000000..0c91bf3e3 --- /dev/null +++ b/Connectors/Rhino/Speckle.Connectors.RhinoShared/Operations/Send/Settings/ToSpeckleSettingsManager.cs @@ -0,0 +1,38 @@ +using Speckle.Connectors.Common.Caching; +using Speckle.Connectors.DUI.Models.Card; +using Speckle.Sdk.Common; + +namespace Speckle.Connectors.Rhino.Operations.Send.Settings; + +public class ToSpeckleSettingsManager +{ + private readonly ISendConversionCache _sendConversionCache; + private readonly Dictionary _addVisualizationPropertiesCache = []; + + public ToSpeckleSettingsManager(ISendConversionCache sendConversionCache) + { + _sendConversionCache = sendConversionCache; + } + + public bool GetAddVisualizationPropertiesSetting(SenderModelCard modelCard) + { + var value = modelCard.Settings?.First(s => s.Id == "addVisualizationProperties").Value as bool?; + var returnValue = value != null && value.NotNull(); + if (_addVisualizationPropertiesCache.TryGetValue(modelCard.ModelCardId.NotNull(), out bool? previousValue)) + { + if (previousValue != returnValue) + { + EvictCacheForModelCard(modelCard); + } + } + + _addVisualizationPropertiesCache[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/Rhino/Speckle.Connectors.RhinoShared/Registration/ServiceRegistration.cs b/Connectors/Rhino/Speckle.Connectors.RhinoShared/Registration/ServiceRegistration.cs index 6a8a96ea4..9d2d86a6f 100644 --- a/Connectors/Rhino/Speckle.Connectors.RhinoShared/Registration/ServiceRegistration.cs +++ b/Connectors/Rhino/Speckle.Connectors.RhinoShared/Registration/ServiceRegistration.cs @@ -17,8 +17,10 @@ using Speckle.Connectors.Rhino.Bindings; using Speckle.Connectors.Rhino.Filters; using Speckle.Connectors.Rhino.HostApp; using Speckle.Connectors.Rhino.HostApp.Properties; +using Speckle.Connectors.Rhino.Mapper.Revit; using Speckle.Connectors.Rhino.Operations.Receive; using Speckle.Connectors.Rhino.Operations.Send; +using Speckle.Connectors.Rhino.Operations.Send.Settings; using Speckle.Connectors.Rhino.Plugin; using Speckle.Sdk.Models.GraphTraversal; @@ -34,10 +36,10 @@ public static class ServiceRegistration serviceCollection.AddSingleton(SpeckleConnectorsRhinoPlugin.Instance); serviceCollection.AddSingleton(SpeckleConnectorsRhinoCommand.Instance); serviceCollection.AddDUI(); + serviceCollection.AddDUIView(); } serviceCollection.AddConnectors(); - serviceCollection.AddDUIView(); // Register bindings serviceCollection.AddSingleton(); @@ -50,11 +52,15 @@ public static class ServiceRegistration serviceCollection.AddSingleton(); serviceCollection.AddSingleton(); serviceCollection.AddSingleton(); + serviceCollection.AddSingleton(); // register send filters serviceCollection.AddScoped(); serviceCollection.AddScoped(); + // register send settings + serviceCollection.AddScoped(); + // register send conversion cache serviceCollection.AddSingleton(); serviceCollection.AddSingleton(); @@ -86,6 +92,11 @@ public static class ServiceRegistration serviceCollection.AddScoped(); serviceCollection.AddScoped(); + serviceCollection.AddScoped(); + + // register helpers + serviceCollection.AddScoped(); + serviceCollection.AddScoped(); // operation progress manager serviceCollection.AddSingleton(); diff --git a/Connectors/Rhino/Speckle.Connectors.RhinoShared/Speckle.Connectors.RhinoShared.projitems b/Connectors/Rhino/Speckle.Connectors.RhinoShared/Speckle.Connectors.RhinoShared.projitems index f04b4fd1d..0bbaa2ab9 100644 --- a/Connectors/Rhino/Speckle.Connectors.RhinoShared/Speckle.Connectors.RhinoShared.projitems +++ b/Connectors/Rhino/Speckle.Connectors.RhinoShared/Speckle.Connectors.RhinoShared.projitems @@ -18,15 +18,25 @@ + + + + + + + + + + diff --git a/Connectors/Tekla/Speckle.Connector.Tekla2023/packages.lock.json b/Connectors/Tekla/Speckle.Connector.Tekla2023/packages.lock.json index 19507f437..574d5e4a3 100644 --- a/Connectors/Tekla/Speckle.Connector.Tekla2023/packages.lock.json +++ b/Connectors/Tekla/Speckle.Connector.Tekla2023/packages.lock.json @@ -325,9 +325,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.0, )", - "Speckle.Sdk": "[3.5.0, )", - "Speckle.Sdk.Dependencies": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )", + "Speckle.Sdk": "[3.5.1, )", + "Speckle.Sdk.Dependencies": "[3.5.1, )" } }, "speckle.connectors.dui": { @@ -360,7 +360,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )" } }, "LibTessDotNet": { @@ -410,18 +410,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -431,14 +431,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" } } } diff --git a/Connectors/Tekla/Speckle.Connector.Tekla2024/packages.lock.json b/Connectors/Tekla/Speckle.Connector.Tekla2024/packages.lock.json index b43c4806d..32731ea6b 100644 --- a/Connectors/Tekla/Speckle.Connector.Tekla2024/packages.lock.json +++ b/Connectors/Tekla/Speckle.Connector.Tekla2024/packages.lock.json @@ -406,9 +406,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.0, )", - "Speckle.Sdk": "[3.5.0, )", - "Speckle.Sdk.Dependencies": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )", + "Speckle.Sdk": "[3.5.1, )", + "Speckle.Sdk.Dependencies": "[3.5.1, )" } }, "speckle.connectors.dui": { @@ -441,7 +441,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )" } }, "LibTessDotNet": { @@ -491,18 +491,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -512,14 +512,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" } } } diff --git a/Connectors/Tekla/Speckle.Connector.Tekla2025/packages.lock.json b/Connectors/Tekla/Speckle.Connector.Tekla2025/packages.lock.json index ba2483b4c..649cce6f1 100644 --- a/Connectors/Tekla/Speckle.Connector.Tekla2025/packages.lock.json +++ b/Connectors/Tekla/Speckle.Connector.Tekla2025/packages.lock.json @@ -406,9 +406,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.0, )", - "Speckle.Sdk": "[3.5.0, )", - "Speckle.Sdk.Dependencies": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )", + "Speckle.Sdk": "[3.5.1, )", + "Speckle.Sdk.Dependencies": "[3.5.1, )" } }, "speckle.connectors.dui": { @@ -441,7 +441,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )" } }, "LibTessDotNet": { @@ -491,18 +491,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -512,14 +512,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" } } } diff --git a/Converters/Autocad/Speckle.Converters.Autocad2022/packages.lock.json b/Converters/Autocad/Speckle.Converters.Autocad2022/packages.lock.json index 5492cf7a4..7256cd387 100644 --- a/Converters/Autocad/Speckle.Converters.Autocad2022/packages.lock.json +++ b/Converters/Autocad/Speckle.Converters.Autocad2022/packages.lock.json @@ -258,7 +258,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )" } }, "Microsoft.Extensions.Logging": { @@ -287,18 +287,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -308,14 +308,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" } } } diff --git a/Converters/Autocad/Speckle.Converters.Autocad2023/packages.lock.json b/Converters/Autocad/Speckle.Converters.Autocad2023/packages.lock.json index 85e96735a..bfd02d940 100644 --- a/Converters/Autocad/Speckle.Converters.Autocad2023/packages.lock.json +++ b/Converters/Autocad/Speckle.Converters.Autocad2023/packages.lock.json @@ -258,7 +258,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )" } }, "Microsoft.Extensions.Logging": { @@ -287,18 +287,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -308,14 +308,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" } } } diff --git a/Converters/Autocad/Speckle.Converters.Autocad2024/packages.lock.json b/Converters/Autocad/Speckle.Converters.Autocad2024/packages.lock.json index 8a0ef7da3..e17305e22 100644 --- a/Converters/Autocad/Speckle.Converters.Autocad2024/packages.lock.json +++ b/Converters/Autocad/Speckle.Converters.Autocad2024/packages.lock.json @@ -259,9 +259,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.0, )", - "Speckle.Sdk": "[3.5.0, )", - "Speckle.Sdk.Dependencies": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )", + "Speckle.Sdk": "[3.5.1, )", + "Speckle.Sdk.Dependencies": "[3.5.1, )" } }, "speckle.connectors.dui": { @@ -285,7 +285,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -329,18 +329,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -350,14 +350,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" } } } diff --git a/Converters/Autocad/Speckle.Converters.Autocad2025/packages.lock.json b/Converters/Autocad/Speckle.Converters.Autocad2025/packages.lock.json index 46573bb41..88e025109 100644 --- a/Converters/Autocad/Speckle.Converters.Autocad2025/packages.lock.json +++ b/Converters/Autocad/Speckle.Converters.Autocad2025/packages.lock.json @@ -210,9 +210,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.0, )", - "Speckle.Sdk": "[3.5.0, )", - "Speckle.Sdk.Dependencies": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )", + "Speckle.Sdk": "[3.5.1, )", + "Speckle.Sdk.Dependencies": "[3.5.1, )" } }, "speckle.connectors.dui": { @@ -236,7 +236,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -280,18 +280,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Data.Sqlite": "7.0.5", @@ -299,14 +299,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" } } } diff --git a/Converters/Autocad/Speckle.Converters.Autocad2026/packages.lock.json b/Converters/Autocad/Speckle.Converters.Autocad2026/packages.lock.json index 9bf4b990a..2be562c8a 100644 --- a/Converters/Autocad/Speckle.Converters.Autocad2026/packages.lock.json +++ b/Converters/Autocad/Speckle.Converters.Autocad2026/packages.lock.json @@ -210,9 +210,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.0, )", - "Speckle.Sdk": "[3.5.0, )", - "Speckle.Sdk.Dependencies": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )", + "Speckle.Sdk": "[3.5.1, )", + "Speckle.Sdk.Dependencies": "[3.5.1, )" } }, "speckle.connectors.dui": { @@ -236,7 +236,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -280,18 +280,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Data.Sqlite": "7.0.5", @@ -299,14 +299,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" } } } diff --git a/Converters/CSi/Speckle.Converters.ETABS21/packages.lock.json b/Converters/CSi/Speckle.Converters.ETABS21/packages.lock.json index 2f643899d..3c8d2afef 100644 --- a/Converters/CSi/Speckle.Converters.ETABS21/packages.lock.json +++ b/Converters/CSi/Speckle.Converters.ETABS21/packages.lock.json @@ -258,7 +258,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )" } }, "Microsoft.Extensions.Logging": { @@ -287,18 +287,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -308,14 +308,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" } } } diff --git a/Converters/CSi/Speckle.Converters.ETABS22/packages.lock.json b/Converters/CSi/Speckle.Converters.ETABS22/packages.lock.json index 764994c50..6bf6b18f2 100644 --- a/Converters/CSi/Speckle.Converters.ETABS22/packages.lock.json +++ b/Converters/CSi/Speckle.Converters.ETABS22/packages.lock.json @@ -209,7 +209,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )" } }, "Microsoft.Extensions.Logging": { @@ -238,18 +238,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Data.Sqlite": "7.0.5", @@ -257,14 +257,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" } } } diff --git a/Converters/Civil3d/Speckle.Converters.Civil3d2022/packages.lock.json b/Converters/Civil3d/Speckle.Converters.Civil3d2022/packages.lock.json index 349f56d84..58ca88601 100644 --- a/Converters/Civil3d/Speckle.Converters.Civil3d2022/packages.lock.json +++ b/Converters/Civil3d/Speckle.Converters.Civil3d2022/packages.lock.json @@ -267,7 +267,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )" } }, "Microsoft.Extensions.Logging": { @@ -296,18 +296,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -317,14 +317,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" } } } diff --git a/Converters/Civil3d/Speckle.Converters.Civil3d2023/packages.lock.json b/Converters/Civil3d/Speckle.Converters.Civil3d2023/packages.lock.json index 2ea9ed457..38885e6a5 100644 --- a/Converters/Civil3d/Speckle.Converters.Civil3d2023/packages.lock.json +++ b/Converters/Civil3d/Speckle.Converters.Civil3d2023/packages.lock.json @@ -267,7 +267,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )" } }, "Microsoft.Extensions.Logging": { @@ -296,18 +296,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -317,14 +317,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" } } } diff --git a/Converters/Civil3d/Speckle.Converters.Civil3d2024/packages.lock.json b/Converters/Civil3d/Speckle.Converters.Civil3d2024/packages.lock.json index ed005e456..ef5f3f3f4 100644 --- a/Converters/Civil3d/Speckle.Converters.Civil3d2024/packages.lock.json +++ b/Converters/Civil3d/Speckle.Converters.Civil3d2024/packages.lock.json @@ -267,7 +267,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )" } }, "Microsoft.Extensions.Logging": { @@ -296,18 +296,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -317,14 +317,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" } } } diff --git a/Converters/Civil3d/Speckle.Converters.Civil3d2025/packages.lock.json b/Converters/Civil3d/Speckle.Converters.Civil3d2025/packages.lock.json index 6e2440c41..c5cc045af 100644 --- a/Converters/Civil3d/Speckle.Converters.Civil3d2025/packages.lock.json +++ b/Converters/Civil3d/Speckle.Converters.Civil3d2025/packages.lock.json @@ -219,9 +219,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.0, )", - "Speckle.Sdk": "[3.5.0, )", - "Speckle.Sdk.Dependencies": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )", + "Speckle.Sdk": "[3.5.1, )", + "Speckle.Sdk.Dependencies": "[3.5.1, )" } }, "speckle.connectors.dui": { @@ -245,7 +245,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -289,18 +289,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Data.Sqlite": "7.0.5", @@ -308,14 +308,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" } } } diff --git a/Converters/Civil3d/Speckle.Converters.Civil3d2026/packages.lock.json b/Converters/Civil3d/Speckle.Converters.Civil3d2026/packages.lock.json index 6793a37fe..1818337ad 100644 --- a/Converters/Civil3d/Speckle.Converters.Civil3d2026/packages.lock.json +++ b/Converters/Civil3d/Speckle.Converters.Civil3d2026/packages.lock.json @@ -219,9 +219,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.0, )", - "Speckle.Sdk": "[3.5.0, )", - "Speckle.Sdk.Dependencies": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )", + "Speckle.Sdk": "[3.5.1, )", + "Speckle.Sdk.Dependencies": "[3.5.1, )" } }, "speckle.connectors.dui": { @@ -245,7 +245,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -289,18 +289,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Data.Sqlite": "7.0.5", @@ -308,14 +308,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" } } } diff --git a/Converters/Navisworks/Speckle.Converters.Navisworks2020/packages.lock.json b/Converters/Navisworks/Speckle.Converters.Navisworks2020/packages.lock.json index db15010d2..3c9735c81 100644 --- a/Converters/Navisworks/Speckle.Converters.Navisworks2020/packages.lock.json +++ b/Converters/Navisworks/Speckle.Converters.Navisworks2020/packages.lock.json @@ -259,9 +259,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.0, )", - "Speckle.Sdk": "[3.5.0, )", - "Speckle.Sdk.Dependencies": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )", + "Speckle.Sdk": "[3.5.1, )", + "Speckle.Sdk.Dependencies": "[3.5.1, )" } }, "speckle.connectors.dui": { @@ -278,7 +278,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -316,18 +316,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -337,14 +337,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" } } } diff --git a/Converters/Navisworks/Speckle.Converters.Navisworks2021/packages.lock.json b/Converters/Navisworks/Speckle.Converters.Navisworks2021/packages.lock.json index f45017354..41ba46882 100644 --- a/Converters/Navisworks/Speckle.Converters.Navisworks2021/packages.lock.json +++ b/Converters/Navisworks/Speckle.Converters.Navisworks2021/packages.lock.json @@ -259,9 +259,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.0, )", - "Speckle.Sdk": "[3.5.0, )", - "Speckle.Sdk.Dependencies": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )", + "Speckle.Sdk": "[3.5.1, )", + "Speckle.Sdk.Dependencies": "[3.5.1, )" } }, "speckle.connectors.dui": { @@ -278,7 +278,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -316,18 +316,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -337,14 +337,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" } } } diff --git a/Converters/Navisworks/Speckle.Converters.Navisworks2022/packages.lock.json b/Converters/Navisworks/Speckle.Converters.Navisworks2022/packages.lock.json index c8efdd5ee..684f98847 100644 --- a/Converters/Navisworks/Speckle.Converters.Navisworks2022/packages.lock.json +++ b/Converters/Navisworks/Speckle.Converters.Navisworks2022/packages.lock.json @@ -259,9 +259,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.0, )", - "Speckle.Sdk": "[3.5.0, )", - "Speckle.Sdk.Dependencies": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )", + "Speckle.Sdk": "[3.5.1, )", + "Speckle.Sdk.Dependencies": "[3.5.1, )" } }, "speckle.connectors.dui": { @@ -278,7 +278,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -316,18 +316,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -337,14 +337,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" } } } diff --git a/Converters/Navisworks/Speckle.Converters.Navisworks2023/packages.lock.json b/Converters/Navisworks/Speckle.Converters.Navisworks2023/packages.lock.json index b0b0423ca..cb017a588 100644 --- a/Converters/Navisworks/Speckle.Converters.Navisworks2023/packages.lock.json +++ b/Converters/Navisworks/Speckle.Converters.Navisworks2023/packages.lock.json @@ -259,9 +259,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.0, )", - "Speckle.Sdk": "[3.5.0, )", - "Speckle.Sdk.Dependencies": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )", + "Speckle.Sdk": "[3.5.1, )", + "Speckle.Sdk.Dependencies": "[3.5.1, )" } }, "speckle.connectors.dui": { @@ -278,7 +278,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -316,18 +316,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -337,14 +337,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" } } } diff --git a/Converters/Navisworks/Speckle.Converters.Navisworks2024/packages.lock.json b/Converters/Navisworks/Speckle.Converters.Navisworks2024/packages.lock.json index 9f3c036f1..d05e07af0 100644 --- a/Converters/Navisworks/Speckle.Converters.Navisworks2024/packages.lock.json +++ b/Converters/Navisworks/Speckle.Converters.Navisworks2024/packages.lock.json @@ -259,9 +259,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.0, )", - "Speckle.Sdk": "[3.5.0, )", - "Speckle.Sdk.Dependencies": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )", + "Speckle.Sdk": "[3.5.1, )", + "Speckle.Sdk.Dependencies": "[3.5.1, )" } }, "speckle.connectors.dui": { @@ -278,7 +278,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -316,18 +316,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -337,14 +337,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" } } } diff --git a/Converters/Navisworks/Speckle.Converters.Navisworks2025/packages.lock.json b/Converters/Navisworks/Speckle.Converters.Navisworks2025/packages.lock.json index 6dddb069b..bb3dfcf54 100644 --- a/Converters/Navisworks/Speckle.Converters.Navisworks2025/packages.lock.json +++ b/Converters/Navisworks/Speckle.Converters.Navisworks2025/packages.lock.json @@ -259,9 +259,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.0, )", - "Speckle.Sdk": "[3.5.0, )", - "Speckle.Sdk.Dependencies": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )", + "Speckle.Sdk": "[3.5.1, )", + "Speckle.Sdk.Dependencies": "[3.5.1, )" } }, "speckle.connectors.dui": { @@ -278,7 +278,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -316,18 +316,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -337,14 +337,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" } } } diff --git a/Converters/Navisworks/Speckle.Converters.Navisworks2026/packages.lock.json b/Converters/Navisworks/Speckle.Converters.Navisworks2026/packages.lock.json index 5787cdd70..d4399aa06 100644 --- a/Converters/Navisworks/Speckle.Converters.Navisworks2026/packages.lock.json +++ b/Converters/Navisworks/Speckle.Converters.Navisworks2026/packages.lock.json @@ -260,9 +260,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.0, )", - "Speckle.Sdk": "[3.5.0, )", - "Speckle.Sdk.Dependencies": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )", + "Speckle.Sdk": "[3.5.1, )", + "Speckle.Sdk.Dependencies": "[3.5.1, )" } }, "speckle.connectors.dui": { @@ -279,7 +279,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -317,18 +317,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -338,14 +338,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" } } } diff --git a/Converters/Navisworks/Speckle.Converters.NavisworksShared/DataExtractors/RevitBuiltInCategoryExtractor.cs b/Converters/Navisworks/Speckle.Converters.NavisworksShared/DataExtractors/RevitBuiltInCategoryExtractor.cs new file mode 100644 index 000000000..5b50dd4e6 --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.NavisworksShared/DataExtractors/RevitBuiltInCategoryExtractor.cs @@ -0,0 +1,182 @@ +using static Speckle.Converter.Navisworks.Helpers.PropertyHelpers; + +namespace Speckle.Converter.Navisworks.ToSpeckle; + +public sealed class RevitBuiltInCategoryExtractor +{ + private const int ANCESTOR_AND_SELF_COUNT = 4; // It seems like this is the maximum depth found needed in practice + private const string REVIT_CAT_GROUP = "LcRevitData_Element"; + private const string REVIT_CAT_NAME = "LcRevitPropertyElementCategory"; + internal const string DEFAULT_DICT_KEY = "builtInCategory"; + + /// + /// Attempts to map a Navisworks/Revit display category from the given model item or its ancestors + /// to a known Revit built-in category constant (e.g., "OST_Walls"). + /// + internal static bool TryGetBuiltInCategory( + NAV.ModelItem item, + out string mapped, + int maxDepth = ANCESTOR_AND_SELF_COUNT + ) + { + mapped = string.Empty; + + // Look up the category value, starting at this item and walking up to maxDepth ancestors + var v = FindRevitCategoryInHierarchy(item, maxDepth); + if (v == null) + { + return false; + } + + var name = ConvertPropertyValue(v, "")?.ToString(); + if (string.IsNullOrWhiteSpace(name)) + { + return false; + } + + name = name?.Trim(); + + // Map display name to OST_* built-in category constant + var builtInCategory = DisplayNameToRevitBuiltInCategory(name); + if (string.Equals(builtInCategory, name, StringComparison.OrdinalIgnoreCase)) + { + return false; // no mapping + } + + mapped = builtInCategory; + return true; + } + + /// + /// Walks up the model item hierarchy to find the first Revit element category property. + /// + private static NAV.VariantData? FindRevitCategoryInHierarchy(NAV.ModelItem modelItem, int maxDepth) + { + var current = modelItem; + + // Walk up the model item hierarchy to find the first matching Revit category property + for (int i = 0; i < maxDepth && current != null; i++, current = current.Parent) + { + var val = current.PropertyCategories.FindPropertyByName(REVIT_CAT_GROUP, REVIT_CAT_NAME)?.Value; + + if (val != null) + { + return val; + } + } + + // No category property found in self or ancestors + return null; + } + + // Mapping of Navisworks/Revit display category names (from the importer) + // to Revit BuiltInCategory constants. Case-insensitive. + // Note: Some mapped categories are not assignable via Revit DirectShape; + // the receiver will ignore them and apply its own fallback. + private static readonly Dictionary s_revitCatMap = + new(StringComparer.OrdinalIgnoreCase) + { + // Architectural + ["Walls"] = "OST_Walls", + ["Floors"] = "OST_Floors", + ["Roofs"] = "OST_Roofs", + ["Ceilings"] = "OST_Ceilings", + ["Doors"] = "OST_Doors", + ["Windows"] = "OST_Windows", + ["Curtain Panels"] = "OST_CurtainWallPanels", + ["Curtain Wall Mullions"] = "OST_CurtainWallMullions", + ["Wall Sweeps"] = "OST_Cornices", + ["Hardscape"] = "OST_Hardscape", + ["Site"] = "OST_Site", + ["Parking"] = "OST_Parking", + ["Toposolid"] = "OST_Toposolid", + ["Levels"] = "OST_Levels", + ["Lines"] = "OST_Lines", + ["Center line"] = "OST_CenterLines", + ["Center Line"] = "OST_CenterLines", + + // Stairs & Railings + ["Stairs"] = "OST_Stairs", + ["Supports"] = "OST_Stairs", + ["Runs"] = "OST_Stairs", + ["Railings"] = "OST_StairsRailing", + ["Handrails"] = "OST_RailingHandRail", + ["Landings"] = "OST_StairsLandings", + ["Vertical Circulation"] = "OST_VerticalCirculation", + + // Structural + ["Structural Connections"] = "OST_StructConnections", + ["Structural Foundations"] = "OST_StructuralFoundation", + ["Structural Columns"] = "OST_StructuralColumns", + ["Structural Framing"] = "OST_StructuralFraming", + ["Structural Loads"] = "OST_Loads", + ["Structural Rebar"] = "OST_Rebar", + ["Structural Fabric Areas"] = "OST_FabricAreas", + ["Structural Fabric Reinforcement"] = "OST_FabricReinforcement", + ["Boundary Conditions"] = "OST_BoundaryConditions", + ["Slab Edges"] = "OST_EdgeSlab", + ["Fascias"] = "OST_Fascia", + ["Roof Soffits"] = "OST_RoofSoffit", + + // MEP - HVAC + ["Air Terminals"] = "OST_DuctTerminal", + ["Duct Fittings"] = "OST_DuctFitting", + ["Ducts"] = "OST_DuctCurves", + ["Flex Ducts"] = "OST_FlexDuctCurves", + ["Duct Accessories"] = "OST_DuctAccessory", + ["Mechanical Equipment"] = "OST_MechanicalEquipment", + + // MEP - Plumbing + ["Plumbing Fixtures"] = "OST_PlumbingFixtures", + ["Plumbing Equipment"] = "OST_PlumbingEquipment", + ["Pipe Accessories"] = "OST_PipeAccessory", + ["Pipe Fittings"] = "OST_PipeFitting", + ["Pipes"] = "OST_PipeCurves", + ["Flex Pipes"] = "OST_FlexPipeCurves", + ["Pipe Insulations"] = "OST_PipeInsulations", + + // MEP - Electrical + ["Electrical Equipment"] = "OST_ElectricalEquipment", + ["Electrical Fixtures"] = "OST_ElectricalFixtures", + ["Lighting Fixtures"] = "OST_LightingFixtures", + ["Lighting Devices"] = "OST_LightingDevices", + ["Data Devices"] = "OST_DataDevices", + ["Communication Devices"] = "OST_CommunicationDevices", + + // MEP - Conduits & Cable Trays + ["Conduit Fittings"] = "OST_ConduitFitting", + ["Conduits"] = "OST_Conduit", + ["Conduit Accessories"] = "OST_ConduitAccessory", + ["Cable Tray Fittings"] = "OST_CableTrayFitting", + ["Cable Trays"] = "OST_CableTray", + + // Equipment & Furniture + ["Casework"] = "OST_Casework", + ["Specialty Equipment"] = "OST_SpecialityEquipment", + ["Food Service Equipment"] = "OST_FoodServiceEquipment", + ["Furniture"] = "OST_Furniture", + ["Generic Models"] = "OST_GenericModel", + ["Planting"] = "OST_Planting", + ["Entourage"] = "OST_Entourage", + + // Separations & Rooms + [""] = "OST_MEPSpaceSeparationLines", + [""] = "OST_RoomSeparationLines", + ["Rooms"] = "OST_Rooms", + + // Misc + ["Ramps"] = "OST_Ramps" + }; + + /// + /// Maps a Navisworks/Revit display category name to a Revit BuiltInCategory. + /// Assumes importer emits canonical names. Case-insensitive lookup. + /// Returns the original name when no mapping exists. + /// + private static string DisplayNameToRevitBuiltInCategory(string displayName) => + string.IsNullOrEmpty(displayName) + ? displayName + : s_revitCatMap.TryGetValue(displayName, out var builtInCategory) + ? builtInCategory + : displayName; +} diff --git a/Converters/Navisworks/Speckle.Converters.NavisworksShared/DataHandlers/HierarchicalPropertyHandler.cs b/Converters/Navisworks/Speckle.Converters.NavisworksShared/DataHandlers/HierarchicalPropertyHandler.cs index 68d583bd3..e882cd5f9 100644 --- a/Converters/Navisworks/Speckle.Converters.NavisworksShared/DataHandlers/HierarchicalPropertyHandler.cs +++ b/Converters/Navisworks/Speckle.Converters.NavisworksShared/DataHandlers/HierarchicalPropertyHandler.cs @@ -1,4 +1,8 @@ -namespace Speckle.Converter.Navisworks.ToSpeckle.PropertyHandlers; +using Speckle.Converter.Navisworks.Helpers; +using Speckle.Converter.Navisworks.Settings; +using Speckle.Converters.Common; + +namespace Speckle.Converter.Navisworks.ToSpeckle.PropertyHandlers; /// /// Handles property assignment with hierarchy merging for objects that require ancestor properties. @@ -6,14 +10,26 @@ public class HierarchicalPropertyHandler( PropertySetsExtractor propertySetsExtractor, ModelPropertiesExtractor modelPropertiesExtractor, - ClassPropertiesExtractor classPropertiesExtractor + ClassPropertiesExtractor classPropertiesExtractor, + IConverterSettingsStore settingsStore ) : BasePropertyHandler(propertySetsExtractor, modelPropertiesExtractor) { - private string PseudoClassPropertiesKey => "_pseudoClassProperties"; + private static string PseudoClassPropertiesKey => "_pseudoClassProperties"; + private readonly bool _mapRevit = settingsStore.Current.User.RevitCategoryMapping; public override Dictionary GetProperties(NAV.ModelItem modelItem) { - var propertyDict = classPropertiesExtractor.GetClassProperties(modelItem) ?? new Dictionary(); + var propertyDict = classPropertiesExtractor.GetClassProperties(modelItem) ?? []; + + // Interop-lite mapping for Revit built-in categories + if (_mapRevit && RevitBuiltInCategoryExtractor.TryGetBuiltInCategory(modelItem, out var builtInCategory)) + { + PropertyHelpers.AddPropertyIfNotNullOrEmpty( + propertyDict, + RevitBuiltInCategoryExtractor.DEFAULT_DICT_KEY, + builtInCategory + ); + } var hierarchy = GetObjectHierarchy(modelItem); var propertyCollection = new Dictionary>>(); diff --git a/Converters/Navisworks/Speckle.Converters.NavisworksShared/Helpers/PropertyHelpers.cs b/Converters/Navisworks/Speckle.Converters.NavisworksShared/Helpers/PropertyHelpers.cs index a9e771d64..9ede12e6a 100644 --- a/Converters/Navisworks/Speckle.Converters.NavisworksShared/Helpers/PropertyHelpers.cs +++ b/Converters/Navisworks/Speckle.Converters.NavisworksShared/Helpers/PropertyHelpers.cs @@ -35,8 +35,13 @@ public static class PropertyHelpers } }; - internal static dynamic? ConvertPropertyValue(NAV.VariantData value, string units) + internal static dynamic? ConvertPropertyValue(NAV.VariantData? value, string units) { + if (value == null) + { + return null; + } + if (s_typeHandlers.TryGetValue(value.DataType, out var handler)) { return handler(value, units); @@ -54,10 +59,12 @@ public static class PropertyHelpers /// 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) + internal static void AddPropertyIfNotNullOrEmpty(object baseObject, string propertyName, object? value) { switch (value) { + case null: + break; // Do not add null values case string stringValue: { if (!string.IsNullOrEmpty(stringValue)) diff --git a/Converters/Navisworks/Speckle.Converters.NavisworksShared/Settings/NavisworksConversionSettings.cs b/Converters/Navisworks/Speckle.Converters.NavisworksShared/Settings/NavisworksConversionSettings.cs index 6705a12ef..8c07eff69 100644 --- a/Converters/Navisworks/Speckle.Converters.NavisworksShared/Settings/NavisworksConversionSettings.cs +++ b/Converters/Navisworks/Speckle.Converters.NavisworksShared/Settings/NavisworksConversionSettings.cs @@ -24,5 +24,6 @@ public record User( 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. - bool PreserveModelHierarchy // Whether to maintain the full model hierarchy during conversion. + bool PreserveModelHierarchy, // Whether to maintain the full model hierarchy during conversion. + bool RevitCategoryMapping // Optional mapping to Revit categories (if applicable). ); diff --git a/Converters/Navisworks/Speckle.Converters.NavisworksShared/Settings/NavisworksConversionSettingsFactory.cs b/Converters/Navisworks/Speckle.Converters.NavisworksShared/Settings/NavisworksConversionSettingsFactory.cs index e71b16d38..ddc3bbe58 100644 --- a/Converters/Navisworks/Speckle.Converters.NavisworksShared/Settings/NavisworksConversionSettingsFactory.cs +++ b/Converters/Navisworks/Speckle.Converters.NavisworksShared/Settings/NavisworksConversionSettingsFactory.cs @@ -45,7 +45,8 @@ public class NavisworksConversionSettingsFactory : INavisworksConversionSettings RepresentationMode visualRepresentationMode, bool convertHiddenElements, bool includeInternalProperties, - bool preserveModelHierarchy + bool preserveModelHierarchy, + bool mappingToRevitCategories ) { _convertHiddenElements = convertHiddenElements; @@ -86,7 +87,8 @@ public class NavisworksConversionSettingsFactory : INavisworksConversionSettings VisualRepresentationMode: visualRepresentationMode, CoalescePropertiesFromFirstObjectAncestor: false, // Not yet exposed in the UI ExcludeProperties: false, // Not yet exposed in the UI - PreserveModelHierarchy: preserveModelHierarchy + PreserveModelHierarchy: preserveModelHierarchy, + RevitCategoryMapping: mappingToRevitCategories ) ); } diff --git a/Converters/Navisworks/Speckle.Converters.NavisworksShared/Speckle.Converters.NavisworksShared.projitems b/Converters/Navisworks/Speckle.Converters.NavisworksShared/Speckle.Converters.NavisworksShared.projitems index d791e58b9..5500fe7e5 100644 --- a/Converters/Navisworks/Speckle.Converters.NavisworksShared/Speckle.Converters.NavisworksShared.projitems +++ b/Converters/Navisworks/Speckle.Converters.NavisworksShared/Speckle.Converters.NavisworksShared.projitems @@ -13,6 +13,7 @@ + diff --git a/Converters/Revit/Speckle.Converters.Revit2022/packages.lock.json b/Converters/Revit/Speckle.Converters.Revit2022/packages.lock.json index 2b71f6bbb..bf099a8da 100644 --- a/Converters/Revit/Speckle.Converters.Revit2022/packages.lock.json +++ b/Converters/Revit/Speckle.Converters.Revit2022/packages.lock.json @@ -258,7 +258,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )" } }, "Microsoft.Extensions.Logging": { @@ -287,18 +287,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -308,14 +308,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" } } } diff --git a/Converters/Revit/Speckle.Converters.Revit2023/packages.lock.json b/Converters/Revit/Speckle.Converters.Revit2023/packages.lock.json index 3a7ee3e2a..1e9e1cdfe 100644 --- a/Converters/Revit/Speckle.Converters.Revit2023/packages.lock.json +++ b/Converters/Revit/Speckle.Converters.Revit2023/packages.lock.json @@ -258,7 +258,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )" } }, "Microsoft.Extensions.Logging": { @@ -287,18 +287,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -308,14 +308,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" } } } diff --git a/Converters/Revit/Speckle.Converters.Revit2024/packages.lock.json b/Converters/Revit/Speckle.Converters.Revit2024/packages.lock.json index c71980343..1855b6d3f 100644 --- a/Converters/Revit/Speckle.Converters.Revit2024/packages.lock.json +++ b/Converters/Revit/Speckle.Converters.Revit2024/packages.lock.json @@ -258,7 +258,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )" } }, "Microsoft.Extensions.Logging": { @@ -287,18 +287,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -308,14 +308,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" } } } diff --git a/Converters/Revit/Speckle.Converters.Revit2025/packages.lock.json b/Converters/Revit/Speckle.Converters.Revit2025/packages.lock.json index 1a3362e35..e9b9bcee3 100644 --- a/Converters/Revit/Speckle.Converters.Revit2025/packages.lock.json +++ b/Converters/Revit/Speckle.Converters.Revit2025/packages.lock.json @@ -209,7 +209,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )" } }, "Microsoft.Extensions.Logging": { @@ -238,18 +238,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Data.Sqlite": "7.0.5", @@ -257,14 +257,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" } } } diff --git a/Converters/Revit/Speckle.Converters.Revit2026/packages.lock.json b/Converters/Revit/Speckle.Converters.Revit2026/packages.lock.json index 539588374..534cd6e8f 100644 --- a/Converters/Revit/Speckle.Converters.Revit2026/packages.lock.json +++ b/Converters/Revit/Speckle.Converters.Revit2026/packages.lock.json @@ -209,7 +209,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )" } }, "Microsoft.Extensions.Logging": { @@ -238,18 +238,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Data.Sqlite": "7.0.5", @@ -257,14 +257,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" } } } diff --git a/Converters/Revit/Speckle.Converters.RevitShared/ToHost/Raw/LocalToGlobalToDirectShapeConverter.cs b/Converters/Revit/Speckle.Converters.RevitShared/ToHost/Raw/LocalToGlobalToDirectShapeConverter.cs index 1c3962ed3..cc424f8f0 100644 --- a/Converters/Revit/Speckle.Converters.RevitShared/ToHost/Raw/LocalToGlobalToDirectShapeConverter.cs +++ b/Converters/Revit/Speckle.Converters.RevitShared/ToHost/Raw/LocalToGlobalToDirectShapeConverter.cs @@ -2,7 +2,6 @@ using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; using Speckle.Converters.RevitShared.Settings; using Speckle.DoubleNumerics; -using Speckle.Objects.Data; using Speckle.Sdk.Common; using Speckle.Sdk.Models; using Speckle.Sdk.Models.Extensions; @@ -35,12 +34,15 @@ public class LocalToGlobalToDirectShapeConverter // NOTE: previously, builtInCategory was on the atomicObject level. this was subsequently moved to properties string? category = null; - if (target.atomicObject is DataObject dataObject) + // NOTE: no longer limited to DataObject since the introduction of mapper + // The change from `if (target.atomicObject is DataObject dataObject)` is very hacky, but nothing else to do for now + // TODO: better define prop interfaces for different applications + if ( + target.atomicObject["properties"] is Dictionary properties + && properties.TryGetValue("builtInCategory", out var builtInCategory) + ) { - if (dataObject.properties.TryGetValue("builtInCategory", out var builtInCategory)) - { - category = builtInCategory?.ToString(); - } + category = builtInCategory?.ToString(); } var dsCategory = DB.BuiltInCategory.OST_GenericModel; diff --git a/Converters/Rhino/Speckle.Converters.Rhino7/packages.lock.json b/Converters/Rhino/Speckle.Converters.Rhino7/packages.lock.json index 4055ccb2f..afdd2a2b6 100644 --- a/Converters/Rhino/Speckle.Converters.Rhino7/packages.lock.json +++ b/Converters/Rhino/Speckle.Converters.Rhino7/packages.lock.json @@ -258,7 +258,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )" } }, "Microsoft.Extensions.Logging": { @@ -287,18 +287,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -308,14 +308,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" } } } diff --git a/Converters/Rhino/Speckle.Converters.Rhino8/Speckle.Converters.Rhino8.csproj b/Converters/Rhino/Speckle.Converters.Rhino8/Speckle.Converters.Rhino8.csproj index 22ea3ed42..b4cf6b84a 100644 --- a/Converters/Rhino/Speckle.Converters.Rhino8/Speckle.Converters.Rhino8.csproj +++ b/Converters/Rhino/Speckle.Converters.Rhino8/Speckle.Converters.Rhino8.csproj @@ -1,14 +1,19 @@ - net48 + net48;net8.0 Debug;Release;Local $(DefineConstants);RHINO8;RHINO7_OR_GREATER;RHINO8_OR_GREATER - - + + + + + + + diff --git a/Converters/Rhino/Speckle.Converters.Rhino8/packages.lock.json b/Converters/Rhino/Speckle.Converters.Rhino8/packages.lock.json index a936bd2aa..49ba02c01 100644 --- a/Converters/Rhino/Speckle.Converters.Rhino8/packages.lock.json +++ b/Converters/Rhino/Speckle.Converters.Rhino8/packages.lock.json @@ -258,7 +258,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )" } }, "Microsoft.Extensions.Logging": { @@ -287,18 +287,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -308,14 +308,296 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + } + }, + "net8.0": { + "Microsoft.NETFramework.ReferenceAssemblies": { + "type": "Direct", + "requested": "[1.0.3, )", + "resolved": "1.0.3", + "contentHash": "vUc9Npcs14QsyOD01tnv/m8sQUnGTGOw1BCmKcv77LBJY7OxhJ+zJF7UD/sCL3lYNFuqmQEVlkfS4Quif6FyYg==", + "dependencies": { + "Microsoft.NETFramework.ReferenceAssemblies.net461": "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==" + }, + "RhinoCommon": { + "type": "Direct", + "requested": "[8.21.25188.17001, )", + "resolved": "8.21.25188.17001", + "contentHash": "Wo6JXheyDBvilyIwDY6xZCQJC4170jzAlTSlMgh8yokUY+vYyCl4KJVXZofIOynNt/xx5wLqb2On5gZZekXR6w==", + "dependencies": { + "System.Drawing.Common": "7.0.0" + } + }, + "Speckle.InterfaceGenerator": { + "type": "Direct", + "requested": "[0.9.6, )", + "resolved": "0.9.6", + "contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w==" + }, + "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.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.Build.Tasks.Git": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ==" + }, + "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.net461": { + "type": "Transitive", + "resolved": "1.0.3", + "contentHash": "AmOJZwCqnOCNp6PPcf9joyogScWLtwy0M1WkqfEQ0M9nYwyDD7EX9ZjscKS5iYnyvteX7kzSKFCKt9I9dXA6mA==" + }, + "Microsoft.SourceLink.Common": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw==" + }, + "Microsoft.Win32.SystemEvents": { + "type": "Transitive", + "resolved": "7.0.0", + "contentHash": "2nXPrhdAyAzir0gLl8Yy8S5Mnm/uBSQQA7jEsILOS1MTyS7DbmV1NgViMtvV1sfCD1ebITpNwb1NIinKeJgUVQ==" + }, + "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.e_sqlite3": "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.e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "CSlb5dUp1FMIkez9Iv5EXzpeq7rHryVNqwJMWnpq87j9zWZexaEMdisDktMsnnrzKM6ahNrsTkjqNodTBPBxtQ==", + "dependencies": { + "SQLitePCLRaw.core": "2.1.4" + } + }, + "System.ComponentModel.Annotations": { + "type": "Transitive", + "resolved": "4.5.0", + "contentHash": "UxYQ3FGUOtzJ7LfSdnYSFd7+oEv6M8NgUatatIN2HxNtDdlcvFAf+VIq4Of9cDMJEJC0aSRv/x898RYhB4Yppg==" + }, + "System.Drawing.Common": { + "type": "Transitive", + "resolved": "7.0.0", + "contentHash": "KIX+oBU38pxkKPxvLcLfIkOV5Ien8ReN78wro7OF5/erwcmortzeFx+iBswlh2Vz6gVne0khocQudGwaO1Ey6A==", + "dependencies": { + "Microsoft.Win32.SystemEvents": "7.0.0" + } + }, + "System.Memory": { + "type": "Transitive", + "resolved": "4.5.3", + "contentHash": "3oDzvc/zzetpTKWMShs1AADwZjQ/36HnsufHRPcOjyRAAMLDlu2iD33MBI2opxnezcVUtXyqDXXjoFMOU9c7SA==" + }, + "System.Reactive": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ==" + }, + "System.Runtime.CompilerServices.Unsafe": { + "type": "Transitive", + "resolved": "4.5.1", + "contentHash": "Zh8t8oqolRaFa9vmOZfdQm/qKejdqz0J9kr7o2Fu0vPeoH3BL1EOXipKWwkWtLT1JPzjByrF19fGuFlNbmPpiw==" + }, + "speckle.converters.common": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", + "Speckle.Objects": "[3.5.1, )" + } + }, + "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.DoubleNumerics": { + "type": "CentralTransitive", + "requested": "[4.1.0, )", + "resolved": "4.1.0", + "contentHash": "20DtS+FsDRsOD9+AU3TwNFZ0qrKo5f6f7B5ZR9wStsIHHHC9k7DpjbCvuNtmnSjx54MD+TJC7wV2f5iyGVPj1A==" + }, + "Speckle.Objects": { + "type": "CentralTransitive", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "dependencies": { + "Speckle.Sdk": "3.5.1" + } + }, + "Speckle.Sdk": { + "type": "CentralTransitive", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "dependencies": { + "GraphQL.Client": "6.0.0", + "Microsoft.Data.Sqlite": "7.0.5", + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging": "2.2.0", + "Speckle.DoubleNumerics": "4.1.0", + "Speckle.Newtonsoft.Json": "13.0.2", + "Speckle.Sdk.Dependencies": "3.5.1" + } + }, + "Speckle.Sdk.Dependencies": { + "type": "CentralTransitive", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" } } } diff --git a/Converters/Rhino/Speckle.Converters.RhinoShared/RhinoConversionSettings.cs b/Converters/Rhino/Speckle.Converters.RhinoShared/RhinoConversionSettings.cs index 6255f6009..455555cb4 100644 --- a/Converters/Rhino/Speckle.Converters.RhinoShared/RhinoConversionSettings.cs +++ b/Converters/Rhino/Speckle.Converters.RhinoShared/RhinoConversionSettings.cs @@ -5,4 +5,9 @@ namespace Speckle.Converters.Rhino; /// /// Represents the settings used for Rhino and Grasshopper conversions. /// -public record RhinoConversionSettings(RhinoDoc Document, string SpeckleUnits, bool ModelFarFromOrigin); +public record RhinoConversionSettings( + RhinoDoc Document, + string SpeckleUnits, + bool ModelFarFromOrigin, + bool AddVisualizationProperties +); diff --git a/Converters/Rhino/Speckle.Converters.RhinoShared/RhinoConversionSettingsFactory.cs b/Converters/Rhino/Speckle.Converters.RhinoShared/RhinoConversionSettingsFactory.cs index 91e68540f..8b46a7091 100644 --- a/Converters/Rhino/Speckle.Converters.RhinoShared/RhinoConversionSettingsFactory.cs +++ b/Converters/Rhino/Speckle.Converters.RhinoShared/RhinoConversionSettingsFactory.cs @@ -12,8 +12,13 @@ public class RhinoConversionSettingsFactory( { public RhinoConversionSettings Current => settingsStore.Current; - public RhinoConversionSettings Create(RhinoDoc document) => - new(document, unitsConverter.ConvertOrThrow(RhinoDoc.ActiveDoc.ModelUnitSystem), ModelFarFromOrigin()); + public RhinoConversionSettings Create(RhinoDoc document, bool addVisualizationProperties) => + new( + document, + unitsConverter.ConvertOrThrow(RhinoDoc.ActiveDoc.ModelUnitSystem), + ModelFarFromOrigin(), + addVisualizationProperties + ); /// /// Quick check whether any of the objects in the scene might be located too far from origin and cause precision issues during meshing. diff --git a/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/Raw/MeshToSpeckleConverter.cs b/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/Raw/MeshToSpeckleConverter.cs index 078a830e0..2bbe4f676 100644 --- a/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/Raw/MeshToSpeckleConverter.cs +++ b/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/Raw/MeshToSpeckleConverter.cs @@ -80,14 +80,6 @@ public class MeshToSpeckleConverter : ITypedConverter } } - var textureCoordinates = new double[target.TextureCoordinates.Count * 2]; - x = 0; - foreach (var textureCoord in target.TextureCoordinates) - { - textureCoordinates[x++] = textureCoord.X; - textureCoordinates[x++] = textureCoord.Y; - } - var colors = new int[target.VertexColors.Count]; x = 0; foreach (var c in target.VertexColors) @@ -95,13 +87,27 @@ public class MeshToSpeckleConverter : ITypedConverter colors[x++] = c.ToArgb(); } - var vertexNormals = new double[target.Normals.Count * 3]; - x = 0; - foreach (var n in target.Normals) + // NOTE: textureCoordinates and vertexNormals will be empty array when setting is false + double[] textureCoordinates = []; + double[] vertexNormals = []; + if (_settingsStore.Current.AddVisualizationProperties) { - vertexNormals[x++] = n.X; - vertexNormals[x++] = n.Y; - vertexNormals[x++] = n.Z; + textureCoordinates = new double[target.TextureCoordinates.Count * 2]; + x = 0; + foreach (var textureCoord in target.TextureCoordinates) + { + textureCoordinates[x++] = textureCoord.X; + textureCoordinates[x++] = textureCoord.Y; + } + + vertexNormals = new double[target.Normals.Count * 3]; + x = 0; + foreach (var n in target.Normals) + { + vertexNormals[x++] = n.X; + vertexNormals[x++] = n.Y; + vertexNormals[x++] = n.Z; + } } double volume = target.IsClosed ? target.Volume() : 0; @@ -112,8 +118,8 @@ public class MeshToSpeckleConverter : ITypedConverter vertices = [.. vertexCoordinates], faces = faces, colors = [.. colors], - textureCoordinates = [.. textureCoordinates], - vertexNormals = [.. vertexNormals], + textureCoordinates = [.. textureCoordinates], // this will be empty array when setting is false + vertexNormals = [.. vertexNormals], // this will be empty array when setting is false units = _settingsStore.Current.SpeckleUnits, volume = volume, bbox = bbox diff --git a/Converters/Tekla/Speckle.Converter.Tekla2023/packages.lock.json b/Converters/Tekla/Speckle.Converter.Tekla2023/packages.lock.json index 03f50083e..13fef4f06 100644 --- a/Converters/Tekla/Speckle.Converter.Tekla2023/packages.lock.json +++ b/Converters/Tekla/Speckle.Converter.Tekla2023/packages.lock.json @@ -302,7 +302,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )" } }, "LibTessDotNet": { @@ -337,18 +337,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -358,14 +358,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" }, "Tekla.Structures.Dialog": { "type": "CentralTransitive", diff --git a/Converters/Tekla/Speckle.Converter.Tekla2024/packages.lock.json b/Converters/Tekla/Speckle.Converter.Tekla2024/packages.lock.json index d7c798e9b..48b345568 100644 --- a/Converters/Tekla/Speckle.Converter.Tekla2024/packages.lock.json +++ b/Converters/Tekla/Speckle.Converter.Tekla2024/packages.lock.json @@ -343,7 +343,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )" } }, "LibTessDotNet": { @@ -378,18 +378,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -399,14 +399,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" }, "Tekla.Structures.Plugins": { "type": "CentralTransitive", diff --git a/Converters/Tekla/Speckle.Converter.Tekla2025/packages.lock.json b/Converters/Tekla/Speckle.Converter.Tekla2025/packages.lock.json index d7c798e9b..48b345568 100644 --- a/Converters/Tekla/Speckle.Converter.Tekla2025/packages.lock.json +++ b/Converters/Tekla/Speckle.Converter.Tekla2025/packages.lock.json @@ -343,7 +343,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )" } }, "LibTessDotNet": { @@ -378,18 +378,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -399,14 +399,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" }, "Tekla.Structures.Plugins": { "type": "CentralTransitive", diff --git a/DUI3/Speckle.Connectors.DUI.Tests/packages.lock.json b/DUI3/Speckle.Connectors.DUI.Tests/packages.lock.json index 95b78154b..14bf8aa57 100644 --- a/DUI3/Speckle.Connectors.DUI.Tests/packages.lock.json +++ b/DUI3/Speckle.Connectors.DUI.Tests/packages.lock.json @@ -314,9 +314,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.0, )", - "Speckle.Sdk": "[3.5.0, )", - "Speckle.Sdk.Dependencies": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )", + "Speckle.Sdk": "[3.5.1, )", + "Speckle.Sdk.Dependencies": "[3.5.1, )" } }, "speckle.connectors.dui": { @@ -335,7 +335,7 @@ "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Moq": "[4.20.70, )", "NUnit": "[4.1.0, )", - "Speckle.Sdk": "[3.5.0, )" + "Speckle.Sdk": "[3.5.1, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -373,18 +373,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Data.Sqlite": "7.0.5", @@ -392,14 +392,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" } } } diff --git a/DUI3/Speckle.Connectors.DUI.WebView/packages.lock.json b/DUI3/Speckle.Connectors.DUI.WebView/packages.lock.json index 1f6fe89ee..c193ec8a1 100644 --- a/DUI3/Speckle.Connectors.DUI.WebView/packages.lock.json +++ b/DUI3/Speckle.Connectors.DUI.WebView/packages.lock.json @@ -259,9 +259,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.0, )", - "Speckle.Sdk": "[3.5.0, )", - "Speckle.Sdk.Dependencies": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )", + "Speckle.Sdk": "[3.5.1, )", + "Speckle.Sdk.Dependencies": "[3.5.1, )" } }, "speckle.connectors.dui": { @@ -309,18 +309,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -330,14 +330,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" } }, "net8.0-windows7.0": { @@ -549,9 +549,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.0, )", - "Speckle.Sdk": "[3.5.0, )", - "Speckle.Sdk.Dependencies": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )", + "Speckle.Sdk": "[3.5.1, )", + "Speckle.Sdk.Dependencies": "[3.5.1, )" } }, "speckle.connectors.dui": { @@ -599,18 +599,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Data.Sqlite": "7.0.5", @@ -618,14 +618,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" } } } diff --git a/DUI3/Speckle.Connectors.DUI/packages.lock.json b/DUI3/Speckle.Connectors.DUI/packages.lock.json index 482e3e661..740cdf0f1 100644 --- a/DUI3/Speckle.Connectors.DUI/packages.lock.json +++ b/DUI3/Speckle.Connectors.DUI/packages.lock.json @@ -259,9 +259,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.0, )", - "Speckle.Sdk": "[3.5.0, )", - "Speckle.Sdk.Dependencies": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )", + "Speckle.Sdk": "[3.5.1, )", + "Speckle.Sdk.Dependencies": "[3.5.1, )" } }, "speckle.connectors.logging": { @@ -296,18 +296,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -317,14 +317,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" } }, "net8.0": { @@ -536,9 +536,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.0, )", - "Speckle.Sdk": "[3.5.0, )", - "Speckle.Sdk.Dependencies": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )", + "Speckle.Sdk": "[3.5.1, )", + "Speckle.Sdk.Dependencies": "[3.5.1, )" } }, "speckle.connectors.logging": { @@ -573,18 +573,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Data.Sqlite": "7.0.5", @@ -592,14 +592,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" } } } diff --git a/Directory.Packages.props b/Directory.Packages.props index 1189776ac..8f56531f5 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -6,6 +6,7 @@ + @@ -17,6 +18,7 @@ + @@ -26,6 +28,7 @@ + @@ -50,9 +53,9 @@ - - - + + + diff --git a/Importers/Ifc/Speckle.Importers.Ifc.Tester/packages.lock.json b/Importers/Ifc/Speckle.Importers.Ifc.Tester/packages.lock.json index ea5161cf2..cb22516d3 100644 --- a/Importers/Ifc/Speckle.Importers.Ifc.Tester/packages.lock.json +++ b/Importers/Ifc/Speckle.Importers.Ifc.Tester/packages.lock.json @@ -204,9 +204,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.0, )", - "Speckle.Sdk": "[3.5.0, )", - "Speckle.Sdk.Dependencies": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )", + "Speckle.Sdk": "[3.5.1, )", + "Speckle.Sdk.Dependencies": "[3.5.1, )" } }, "speckle.connectors.logging": { @@ -220,8 +220,8 @@ "Ara3D.Utils": "[1.4.5, )", "Microsoft.Extensions.DependencyInjection": "[8.0.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Objects": "[3.5.0, )", - "Speckle.Sdk": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )", + "Speckle.Sdk": "[3.5.1, )" } }, "Ara3D.Buffers": { @@ -283,18 +283,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Data.Sqlite": "7.0.5", @@ -302,14 +302,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" } } } diff --git a/Importers/Ifc/Speckle.Importers.Ifc.Tester2/packages.lock.json b/Importers/Ifc/Speckle.Importers.Ifc.Tester2/packages.lock.json index ea5161cf2..cb22516d3 100644 --- a/Importers/Ifc/Speckle.Importers.Ifc.Tester2/packages.lock.json +++ b/Importers/Ifc/Speckle.Importers.Ifc.Tester2/packages.lock.json @@ -204,9 +204,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.0, )", - "Speckle.Sdk": "[3.5.0, )", - "Speckle.Sdk.Dependencies": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )", + "Speckle.Sdk": "[3.5.1, )", + "Speckle.Sdk.Dependencies": "[3.5.1, )" } }, "speckle.connectors.logging": { @@ -220,8 +220,8 @@ "Ara3D.Utils": "[1.4.5, )", "Microsoft.Extensions.DependencyInjection": "[8.0.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Objects": "[3.5.0, )", - "Speckle.Sdk": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )", + "Speckle.Sdk": "[3.5.1, )" } }, "Ara3D.Buffers": { @@ -283,18 +283,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Data.Sqlite": "7.0.5", @@ -302,14 +302,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" } } } diff --git a/Importers/Ifc/Speckle.Importers.Ifc/packages.lock.json b/Importers/Ifc/Speckle.Importers.Ifc/packages.lock.json index 522732d41..ae31606b2 100644 --- a/Importers/Ifc/Speckle.Importers.Ifc/packages.lock.json +++ b/Importers/Ifc/Speckle.Importers.Ifc/packages.lock.json @@ -68,18 +68,18 @@ }, "Speckle.Objects": { "type": "Direct", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Sdk": { "type": "Direct", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Data.Sqlite": "7.0.5", @@ -87,7 +87,7 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "GraphQL.Client": { @@ -261,9 +261,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.0, )", - "Speckle.Sdk": "[3.5.0, )", - "Speckle.Sdk.Dependencies": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )", + "Speckle.Sdk": "[3.5.1, )", + "Speckle.Sdk.Dependencies": "[3.5.1, )" } }, "speckle.connectors.logging": { @@ -295,9 +295,9 @@ }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" } } } diff --git a/Importers/Rhino/Speckle.Importers.JobProcessor/Domain/FileimportJob.cs b/Importers/Rhino/Speckle.Importers.JobProcessor/Domain/FileimportJob.cs new file mode 100644 index 000000000..6a52696de --- /dev/null +++ b/Importers/Rhino/Speckle.Importers.JobProcessor/Domain/FileimportJob.cs @@ -0,0 +1,16 @@ +namespace Speckle.Importers.JobProcessor.Domain; + +/// +/// DB model for the fileimport job. +/// +internal sealed class FileimportJob +{ + public required string Id { get; init; } + public required string JobType { get; init; } + public required FileimportPayload Payload { get; init; } + public required JobStatus Status { get; init; } + public required int Attempt { get; init; } + public required int MaxAttempt { get; init; } + public required DateTime CreatedAt { get; init; } + public required DateTime UpdatedAt { get; init; } +} diff --git a/Importers/Rhino/Speckle.Importers.JobProcessor/Domain/FileimportPayload.cs b/Importers/Rhino/Speckle.Importers.JobProcessor/Domain/FileimportPayload.cs new file mode 100644 index 000000000..05536617e --- /dev/null +++ b/Importers/Rhino/Speckle.Importers.JobProcessor/Domain/FileimportPayload.cs @@ -0,0 +1,19 @@ +namespace Speckle.Importers.JobProcessor.Domain; + +/// +/// Payload for the fileimport job +/// +internal sealed class FileimportPayload +{ + public required string JobId { get; init; } + public required string Token { get; init; } + public required string BlobId { get; init; } + public required string JobType { get; init; } + public required string ModelId { get; init; } + public required string FileName { get; init; } + public required string FileType { get; init; } + public required string ProjectId { get; init; } + public required Uri ServerUrl { get; init; } + public required int PayloadVersion { get; init; } + public required int TimeOutSeconds { get; init; } +} diff --git a/Importers/Rhino/Speckle.Importers.JobProcessor/Domain/JobStatus.cs b/Importers/Rhino/Speckle.Importers.JobProcessor/Domain/JobStatus.cs new file mode 100644 index 000000000..03105fafc --- /dev/null +++ b/Importers/Rhino/Speckle.Importers.JobProcessor/Domain/JobStatus.cs @@ -0,0 +1,12 @@ +namespace Speckle.Importers.JobProcessor.Domain; + +/// +/// Status enumeration for the job. +/// +internal enum JobStatus +{ + QUEUED, + PROCESSING, + SUCCEEDED, + FAILED, +} diff --git a/Importers/Rhino/Speckle.Importers.JobProcessor/JobHandlers/Exceptions.cs b/Importers/Rhino/Speckle.Importers.JobProcessor/JobHandlers/Exceptions.cs new file mode 100644 index 000000000..158e71d63 --- /dev/null +++ b/Importers/Rhino/Speckle.Importers.JobProcessor/JobHandlers/Exceptions.cs @@ -0,0 +1,23 @@ +namespace Speckle.Importers.JobProcessor.JobHandlers; + +public sealed class MaxAttemptsExceededException : Exception +{ + public MaxAttemptsExceededException() { } + + public MaxAttemptsExceededException(string? message) + : base(message) { } + + public MaxAttemptsExceededException(string? message, Exception? innerException) + : base(message, innerException) { } +} + +public sealed class JobTimeoutException : Exception +{ + public JobTimeoutException() { } + + public JobTimeoutException(string? message) + : base(message) { } + + public JobTimeoutException(string? message, Exception? innerException) + : base(message, innerException) { } +} diff --git a/Importers/Rhino/Speckle.Importers.JobProcessor/JobHandlers/IJobHandler.cs b/Importers/Rhino/Speckle.Importers.JobProcessor/JobHandlers/IJobHandler.cs new file mode 100644 index 000000000..6a812bbdb --- /dev/null +++ b/Importers/Rhino/Speckle.Importers.JobProcessor/JobHandlers/IJobHandler.cs @@ -0,0 +1,10 @@ +using Speckle.Importers.JobProcessor.Domain; +using Speckle.Sdk.Api; +using Version = Speckle.Sdk.Api.GraphQL.Models.Version; + +namespace Speckle.Importers.JobProcessor.JobHandlers; + +internal interface IJobHandler +{ + public Task ProcessJob(FileimportJob job, IClient client, CancellationToken cancellationToken); +} diff --git a/Importers/Rhino/Speckle.Importers.JobProcessor/JobHandlers/RhinoJobHandler.cs b/Importers/Rhino/Speckle.Importers.JobProcessor/JobHandlers/RhinoJobHandler.cs new file mode 100644 index 000000000..6384323fc --- /dev/null +++ b/Importers/Rhino/Speckle.Importers.JobProcessor/JobHandlers/RhinoJobHandler.cs @@ -0,0 +1,37 @@ +using Speckle.Importers.JobProcessor.Domain; +using Speckle.Importers.Rhino; +using Speckle.Sdk.Api; +using Version = Speckle.Sdk.Api.GraphQL.Models.Version; + +namespace Speckle.Importers.JobProcessor.JobHandlers; + +internal sealed class RhinoJobHandler : IJobHandler +{ + public async Task ProcessJob(FileimportJob job, IClient client, CancellationToken cancellationToken) + { + var directory = Directory.CreateTempSubdirectory("speckle-file-import"); + try + { + string targetFilePath = $"{directory.FullName}/{job.Payload.JobId}.{job.Payload.FileType}"; + await client.FileImport.DownloadFile( + job.Payload.ProjectId, + job.Payload.BlobId, + targetFilePath, + null, + cancellationToken + ); + + return await Importer.Import( + targetFilePath, + job.Payload.ProjectId, + job.Payload.ModelId, + client.Account, + cancellationToken + ); + } + finally + { + Directory.Delete(directory.FullName, true); + } + } +} diff --git a/Importers/Rhino/Speckle.Importers.JobProcessor/JobProcessor.cs b/Importers/Rhino/Speckle.Importers.JobProcessor/JobProcessor.cs new file mode 100644 index 000000000..cd2c638f7 --- /dev/null +++ b/Importers/Rhino/Speckle.Importers.JobProcessor/JobProcessor.cs @@ -0,0 +1,204 @@ +using System.Diagnostics.CodeAnalysis; +using Microsoft.Extensions.Logging; +using Speckle.Connectors.Common.Extensions; +using Speckle.Connectors.Logging; +using Speckle.Importers.JobProcessor.Domain; +using Speckle.Importers.JobProcessor.JobHandlers; +using Speckle.Importers.JobProcessor.JobQueue; +using Speckle.Sdk.Api; +using Speckle.Sdk.Api.GraphQL.Inputs; +using Speckle.Sdk.Credentials; +using Speckle.Sdk.Logging; +using Version = Speckle.Sdk.Api.GraphQL.Models.Version; + +namespace Speckle.Importers.JobProcessor; + +internal sealed class JobProcessorInstance( + Repository repository, + ILogger logger, + IJobHandler jobHandler, + IAccountFactory accountFactory, + IClientFactory clientFactory, + ISdkActivityFactory activityFactory +) +{ + private static readonly TimeSpan s_idleTimeout = TimeSpan.FromSeconds(1); + + public async Task StartProcessing(CancellationToken cancellationToken = default) + { + await using var connection = await repository.SetupConnection(cancellationToken).ConfigureAwait(false); + + while (true) + { + logger.LogInformation("Listening for jobs..."); + + FileimportJob? job = await repository.GetNextJob(connection, cancellationToken); + if (job == null) + { + logger.LogDebug("No job found, sleeping for {timeout}", s_idleTimeout); + await Task.Delay(s_idleTimeout, cancellationToken); + continue; + } + logger.LogInformation("Starting {jobId}", job.Id); + + using var activity = activityFactory.Start(); + ActivityScope.SetTag("jobId", job.Id); + ActivityScope.SetTag("jobType", job.Payload.JobType); + ActivityScope.SetTag("job.attempt", job.Attempt.ToString()); + ActivityScope.SetTag("serverUrl", job.Payload.ServerUrl.ToString()); + ActivityScope.SetTag("projectId", job.Payload.ProjectId); + ActivityScope.SetTag("modelId", job.Payload.ModelId); + ActivityScope.SetTag("blobId", job.Payload.BlobId); + + try + { + JobStatus jobStatus = await AttemptJob(job, cancellationToken); + await repository.SetJobStatus(connection, job.Id, jobStatus, cancellationToken); + activity?.SetStatus(SdkActivityStatusCode.Ok); + } + catch (Exception ex) + { + activity?.RecordException(ex); + activity?.SetStatus(SdkActivityStatusCode.Error); + throw; + } + } + } + + private static async Task ReportSuccess( + FileimportJob job, + Version version, + IClient client, + CancellationToken cancellationToken + ) + { + var input = new FileImportSuccessInput + { + projectId = job.Payload.ProjectId, + jobId = job.Payload.BlobId, + warnings = [], + result = new FileImportResult(0, 0, 0, "Rhino Importer", versionId: version.id) + }; + await client.FileImport.FinishFileImportJob(input, cancellationToken); + } + + private static async Task ReportFailed( + FileimportJob job, + IClient client, + Exception ex, + CancellationToken cancellationToken + ) + { + var input = new FileImportErrorInput() + { + projectId = job.Payload.ProjectId, + jobId = job.Payload.BlobId, + warnings = [], + reason = ex.ToString(), + result = new FileImportResult(0, 0, 0, "Rhino Importer", versionId: null) + }; + await client.FileImport.FinishFileImportJob(input, cancellationToken); + } + + private async Task SetupClient(FileimportJob job, CancellationToken cancellationToken) + { + var account = await accountFactory.CreateAccount( + job.Payload.ServerUrl, + job.Payload.Token, + cancellationToken: cancellationToken + ); + + return clientFactory.Create(account); + } + + [SuppressMessage("Design", "CA1031:Do not catch general exception types")] + private async Task AttemptJob(FileimportJob job, CancellationToken cancellationToken) + { + using var activity = activityFactory.Start(); + + IClient? speckleClient = null; + try + { + speckleClient = await SetupClient(job, cancellationToken); + UserActivityScope.AddUserScope(speckleClient.Account); + + if (job.Attempt > job.MaxAttempt) + { + //something went wrong, it should have been marked as failed + throw new MaxAttemptsExceededException("Unhandled error silently failed the job multiple times"); + } + + try + { + Version version = await ExecuteJobWithTimeout(job, speckleClient, cancellationToken); + await ReportSuccess(job, version, speckleClient, cancellationToken); + logger.LogInformation("Job {jobId} has succeeded creating {versionId}", job.Id, version.id); + + activity?.SetStatus(SdkActivityStatusCode.Ok); + return JobStatus.SUCCEEDED; + } + catch (JobTimeoutException ex) + { + logger.LogInformation(ex, "Executing job timed out"); + + if (job.Attempt >= job.MaxAttempt) + { + throw new MaxAttemptsExceededException("The final attempt to process the job failed", ex); + } + + activity?.RecordException(ex); + activity?.SetStatus(SdkActivityStatusCode.Error); + return JobStatus.QUEUED; + } + } + catch (Exception ex) + { + logger.LogError(ex, "Attempt {attempt} to process {jobId} failed", job.Attempt, job.Id); + + if (speckleClient is not null) + { + await ReportFailed(job, speckleClient, ex, cancellationToken); + } + + activity?.RecordException(ex); + activity?.SetStatus(SdkActivityStatusCode.Error); + return JobStatus.FAILED; + } + finally + { + speckleClient?.Dispose(); + } + } + + /// + /// + /// + /// + /// + /// if attempt was successful, if job timedout, but can be re-attempted without exceeding + /// Timeout was reached AND MaxAttempt was reached + private async Task ExecuteJobWithTimeout( + FileimportJob job, + IClient client, + CancellationToken cancellationToken + ) + { + using CancellationTokenSource timeout = new(); + timeout.CancelAfter(TimeSpan.FromSeconds(job.Payload.TimeOutSeconds)); + using CancellationTokenSource linkedSource = CancellationTokenSource.CreateLinkedTokenSource( + timeout.Token, + cancellationToken + ); + try + { + return await jobHandler.ProcessJob(job, client, linkedSource.Token); + } + catch (OperationCanceledException ex) when (timeout.IsCancellationRequested) + { + throw new JobTimeoutException( + $"Job was cancelled due to reaching the {job.Payload.TimeOutSeconds} second timeout", + ex + ); + } + } +} diff --git a/Importers/Rhino/Speckle.Importers.JobProcessor/JobQueue/JsonHandler.cs b/Importers/Rhino/Speckle.Importers.JobProcessor/JobQueue/JsonHandler.cs new file mode 100644 index 000000000..bc42fdc71 --- /dev/null +++ b/Importers/Rhino/Speckle.Importers.JobProcessor/JobQueue/JsonHandler.cs @@ -0,0 +1,25 @@ +using System.Data; +using System.Text.Json; +using Dapper; + +namespace Speckle.Importers.JobProcessor.JobQueue; + +internal sealed class JsonHandler : SqlMapper.TypeHandler +{ + private readonly JsonSerializerOptions _options = new() { PropertyNamingPolicy = JsonNamingPolicy.CamelCase, }; + + public override void SetValue(IDbDataParameter parameter, T? value) + { + parameter.Value = JsonSerializer.Serialize(value); + } + + public override T? Parse(object value) + { + if (value is string json) + { + return JsonSerializer.Deserialize(json, _options); + } + + throw new DataException($"Cannot convert {value.GetType()} to {typeof(T)}"); + } +} diff --git a/Importers/Rhino/Speckle.Importers.JobProcessor/JobQueue/Repository.cs b/Importers/Rhino/Speckle.Importers.JobProcessor/JobQueue/Repository.cs new file mode 100644 index 000000000..ef32fe7d6 --- /dev/null +++ b/Importers/Rhino/Speckle.Importers.JobProcessor/JobQueue/Repository.cs @@ -0,0 +1,114 @@ +using System.Data; +using Dapper; +using Microsoft.Extensions.Logging; +using Npgsql; +using Speckle.Importers.JobProcessor.Domain; + +namespace Speckle.Importers.JobProcessor.JobQueue; + +internal sealed class Repository(ILogger logger) +{ + public async Task SetupConnection(CancellationToken cancellationToken) + { + string fileImportQueuePostgresUrl = + Environment.GetEnvironmentVariable("FILEIMPORT_QUEUE_POSTGRES_URL") + ?? throw new ArgumentException("Expected FILEIMPORT_QUEUE_POSTGRES_URL environment variable to be set"); + + string connectionString = ParseConnectionString(new(fileImportQueuePostgresUrl)); + var connection = new NpgsqlConnection(connectionString); + await connection.OpenAsync(cancellationToken).ConfigureAwait(false); + return connection; + } + + private static string ParseConnectionString(Uri connectionUrl) + { + if (connectionUrl.Scheme is not "postgres" and not "postgresql") + { + throw new ArgumentException("Invalid URI scheme. Expected 'postgres' or 'postgresql'.", nameof(connectionUrl)); + } + var userInfo = connectionUrl.UserInfo.Split(':'); + if (userInfo.Length != 2) + { + throw new ArgumentException("Invalid URI format: missing username or password."); + } + + var builder = new NpgsqlConnectionStringBuilder + { + Host = connectionUrl.Host, + Port = connectionUrl.Port > 0 ? connectionUrl.Port : 5432, // Default to 5432 if not specified + Username = userInfo[0], + Password = userInfo[1], + Database = connectionUrl.AbsolutePath.TrimStart('/') + }; + return builder.ConnectionString; + } + + public async Task GetNextJob(IDbConnection connection, CancellationToken cancellationToken) + { + //lang=postgresql + const string COMMAND_TEXT = """ + WITH next_job AS ( + UPDATE background_jobs + SET + "attempt" = "attempt" + 1, + "status" = @Status1, + "updatedAt" = NOW() + WHERE id = ( + SELECT id FROM background_jobs + WHERE ( --queued job + (payload ->> 'fileType') = ANY(@FileTypes) + AND status = @Status2 + ) + OR ( --timed job left on processing state + (payload ->> 'fileType') = ANY(@FileTypes) + AND status = @Status1 + AND "updatedAt" < NOW() - ("timeoutMs" * interval '1 millisecond') + ) + ORDER BY "createdAt" + FOR UPDATE SKIP LOCKED + LIMIT 1 + ) + RETURNING * + ) + SELECT * FROM next_job; + """; + + var command = new CommandDefinition( + commandText: COMMAND_TEXT, + parameters: new + { + Status1 = nameof(JobStatus.PROCESSING).ToLowerInvariant(), + Status2 = nameof(JobStatus.QUEUED).ToLowerInvariant(), + FileTypes = SupportedFileTypes.FileTypes, + }, + cancellationToken: cancellationToken + ); + + return await connection.QueryFirstOrDefaultAsync(command); + } + + public async Task SetJobStatus( + IDbConnection connection, + string jobId, + JobStatus jobStatus, + CancellationToken cancellationToken + ) + { + logger.LogInformation("Updating job: {jobId}'s status to {jobStatus}", jobId, jobStatus); + + //lang=postgresql + const string COMMAND_TEXT = """ + UPDATE background_jobs + SET status = @status, "updatedAt" = NOW() + WHERE id = @jobId + """; + + var command = new CommandDefinition( + commandText: COMMAND_TEXT, + parameters: new { status = jobStatus.ToString().ToLowerInvariant(), jobId, }, + cancellationToken: cancellationToken + ); + + await connection.ExecuteAsync(command); + } +} diff --git a/Importers/Rhino/Speckle.Importers.JobProcessor/Program.cs b/Importers/Rhino/Speckle.Importers.JobProcessor/Program.cs new file mode 100644 index 000000000..0bcc2ea83 --- /dev/null +++ b/Importers/Rhino/Speckle.Importers.JobProcessor/Program.cs @@ -0,0 +1,78 @@ +// See https://aka.ms/new-console-template for more information + +using Dapper; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; +using Rhino.Runtime.InProcess; +using RhinoInside; +using Speckle.Importers.JobProcessor.Domain; +using Speckle.Importers.JobProcessor.JobHandlers; +using Speckle.Importers.JobProcessor.JobQueue; + +namespace Speckle.Importers.JobProcessor; + +public static class Program +{ + static Program() + { + Resolver.Initialize(); + } + + [STAThread] + public static async Task Main() + { + ILogger? logger = null; + try + { + // Dapper doesn't understand how to handle JSON deserialization, so we need to tell it what types can be deserialzied + SqlMapper.AddTypeHandler(new JsonHandler()); + + // DI setup + var serviceCollection = new ServiceCollection(); + serviceCollection.AddJobProcessor(); + + serviceCollection.AddTransient(); + + var serviceProvider = serviceCollection.BuildServiceProvider(); + + var processor = serviceProvider.GetRequiredService(); + logger = serviceProvider.GetRequiredService>(); + + TaskScheduler.UnobservedTaskException += (sender, args) => + logger.LogCritical(args.Exception, "Unobserved Task Exception"); + + using (new RhinoCore(["/netcore-8"], WindowStyle.NoWindow)) + { + //What ever thread RhinoCore is created on it will grab as soon as it's available, and it will hog it forever. + //Right now, we're giving it the main STA thread (not 100% if it needs STA or if it could work on any thread) + await Task.Run(async () => + { + logger.LogInformation("Job processor has started!"); + try + { + await processor.StartProcessing(); + } + catch (Exception ex) + { + logger.LogCritical(ex, "Unhandled exception in Main"); + throw; + } + }) + .ConfigureAwait(false); + } + } + catch (Exception ex) + { + if (logger is not null) + { + logger.LogCritical(ex, "Unhandled exception reached entry point"); + } + else + { + Console.WriteLine($"Unhandled exception reached entry point: {ex}"); + } + + throw; + } + } +} diff --git a/Importers/Rhino/Speckle.Importers.JobProcessor/Properties/launchSettings.json b/Importers/Rhino/Speckle.Importers.JobProcessor/Properties/launchSettings.json new file mode 100644 index 000000000..6dcb9cfd1 --- /dev/null +++ b/Importers/Rhino/Speckle.Importers.JobProcessor/Properties/launchSettings.json @@ -0,0 +1,11 @@ +{ + "$schema": "http://json.schemastore.org/launchsettings.json", + "profiles": { + "Local Docker DB": { + "commandName": "Project", + "environmentVariables": { + "FILEIMPORT_QUEUE_POSTGRES_URL": "postgresql://speckle:speckle@127.0.0.1:5432/speckle" + } + } + } +} diff --git a/Importers/Rhino/Speckle.Importers.JobProcessor/ServiceRegistration.cs b/Importers/Rhino/Speckle.Importers.JobProcessor/ServiceRegistration.cs new file mode 100644 index 000000000..7536e483a --- /dev/null +++ b/Importers/Rhino/Speckle.Importers.JobProcessor/ServiceRegistration.cs @@ -0,0 +1,26 @@ +using Microsoft.Extensions.DependencyInjection; +using Speckle.Connectors.Common; +using Speckle.Importers.JobProcessor.JobQueue; +using Speckle.Sdk; + +namespace Speckle.Importers.JobProcessor; + +internal static class ServiceRegistration +{ + private static readonly Application s_application = new(".NET File Import Job Processor", "jobprocessor"); + + public static IServiceCollection AddJobProcessor(this IServiceCollection serviceCollection) + { + serviceCollection.AddLoggingConfig(); + serviceCollection.AddTransient(); + serviceCollection.AddTransient(); + return serviceCollection; + } + + private static IServiceCollection AddLoggingConfig(this IServiceCollection serviceCollection) + { + serviceCollection.Initialize(s_application, HostAppVersion.v3); + + return serviceCollection; + } +} diff --git a/Importers/Rhino/Speckle.Importers.JobProcessor/Speckle.Importers.JobProcessor.csproj b/Importers/Rhino/Speckle.Importers.JobProcessor/Speckle.Importers.JobProcessor.csproj new file mode 100644 index 000000000..6e4e7653e --- /dev/null +++ b/Importers/Rhino/Speckle.Importers.JobProcessor/Speckle.Importers.JobProcessor.csproj @@ -0,0 +1,23 @@ + + + + net8.0-windows + x64 + Exe + Debug;Release;Local + + + + + + + + + + + + + + + + diff --git a/Importers/Rhino/Speckle.Importers.JobProcessor/SupportedFileTypes.cs b/Importers/Rhino/Speckle.Importers.JobProcessor/SupportedFileTypes.cs new file mode 100644 index 000000000..0476c3527 --- /dev/null +++ b/Importers/Rhino/Speckle.Importers.JobProcessor/SupportedFileTypes.cs @@ -0,0 +1,65 @@ +namespace Speckle.Importers.JobProcessor; + +public static class SupportedFileTypes +{ + /// + /// This is the full list of file extensions that this job processor will look for jobs with that extension + /// This also happens to be the full list of file types that Rhino 8 supports., + /// + public static readonly string[] FileTypes = + [ + "3dm", // Rhino 3D Model (except ver 1.x save) + "3dmbak", // Rhino 3D Model Backup + "rws", // Rhino Worksession + "3mf", // 3MF + "3ds", // 3D Studio + "amf", // AMF + "ai", // Adobe Illustrator + "dwg", // AutoCAD Drawing + "dxf", // AutoCAD Drawing Exchange + "x", // DirectX + "e57", // E57 + "dst", // Embroidery + "exp", + "dst", // Encapsulated PostScript + "exp", + "off", // Geomview OFF + "gf", // GHS Geometry + "gft", + "gltf", // GL Transmission Format + "glb", + "gts", // GTS (GNU Triangulated Surface) + "igs", // IGES + "iges", + "lwo", // Lightwave + "dgn", // Microstation + "fbx", // MotionBuilder + "scn", // NextEngine Scan + "obj", // OBJ (Wavefront) + "pdf", // PDF + "ply", // PLY + "asc", // Points + "csv", + "xyz", + "pts", + "cgo_ascii", // Points + "cgo_asci", + "txt", // Points + "raw", // Raw Triangles + "m", // Recon M + "svg", // Scalable Vector Graphics + "skp", // SketchUp + "slc", // Slice + "sldprt", // SOLIDWORKS + "sldasm", + "stp", // STEP + "step", + "stl", // STL (Stereolithography) + "vda", // VDA + "wrl", // VRML/Open Inventor + "vrml", + "iv", + "gdf", // WAMIT + "zpr", // Zcorp (3D Systems) + ]; +} diff --git a/Importers/Rhino/Speckle.Importers.JobProcessor/packages.lock.json b/Importers/Rhino/Speckle.Importers.JobProcessor/packages.lock.json new file mode 100644 index 000000000..9958aee9d --- /dev/null +++ b/Importers/Rhino/Speckle.Importers.JobProcessor/packages.lock.json @@ -0,0 +1,382 @@ +{ + "version": 2, + "dependencies": { + "net8.0-windows7.0": { + "Dapper": { + "type": "Direct", + "requested": "[2.1.66, )", + "resolved": "2.1.66", + "contentHash": "/q77jUgDOS+bzkmk3Vy9SiWMaetTw+NOoPAV0xPBsGVAyljd5S6P+4RUW7R3ZUGGr9lDRyPKgAMj2UAOwvqZYw==" + }, + "Microsoft.NETFramework.ReferenceAssemblies": { + "type": "Direct", + "requested": "[1.0.3, )", + "resolved": "1.0.3", + "contentHash": "vUc9Npcs14QsyOD01tnv/m8sQUnGTGOw1BCmKcv77LBJY7OxhJ+zJF7UD/sCL3lYNFuqmQEVlkfS4Quif6FyYg==", + "dependencies": { + "Microsoft.NETFramework.ReferenceAssemblies.net461": "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" + } + }, + "Npgsql": { + "type": "Direct", + "requested": "[9.0.3, )", + "resolved": "9.0.3", + "contentHash": "tPvY61CxOAWxNsKLEBg+oR646X4Bc8UmyQ/tJszL/7mEmIXQnnBhVJZrZEEUv0Bstu0mEsHZD5At3EO8zQRAYw==", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "8.0.2" + } + }, + "PolySharp": { + "type": "Direct", + "requested": "[1.14.1, )", + "resolved": "1.14.1", + "contentHash": "mOOmFYwad3MIOL14VCjj02LljyF1GNw1wP0YVlxtcPvqdxjGGMNdNJJxHptlry3MOd8b40Flm8RPOM8JOlN2sQ==" + }, + "RhinoCommon": { + "type": "Direct", + "requested": "[8.21.25188.17001, )", + "resolved": "8.21.25188.17001", + "contentHash": "Wo6JXheyDBvilyIwDY6xZCQJC4170jzAlTSlMgh8yokUY+vYyCl4KJVXZofIOynNt/xx5wLqb2On5gZZekXR6w==", + "dependencies": { + "System.Drawing.Common": "7.0.0" + } + }, + "RhinoWindows": { + "type": "Direct", + "requested": "[8.21.25188.17001, )", + "resolved": "8.21.25188.17001", + "contentHash": "9zqCorcLRBeiW/j1RTwUS4E7bnZetAdA9WDdtd/AQccjOpxdtw76wdN+ciyQ6qslseWkwZ9qSBeh7QaM800Ntw==", + "dependencies": { + "RhinoCommon": "[8.21.25188.17001]" + } + }, + "Serilog.Extensions.Logging": { + "type": "Direct", + "requested": "[8.0.0, )", + "resolved": "8.0.0", + "contentHash": "YEAMWu1UnWgf1c1KP85l1SgXGfiVo0Rz6x08pCiPOIBt2Qe18tcZLvdBUuV5o1QHvrs8FAry9wTIhgBRtjIlEg==", + "dependencies": { + "Microsoft.Extensions.Logging": "8.0.0", + "Serilog": "3.1.1" + } + }, + "Serilog.Formatting.Compact": { + "type": "Direct", + "requested": "[3.0.0, )", + "resolved": "3.0.0", + "contentHash": "wQsv14w9cqlfB5FX2MZpNsTawckN4a8dryuNGbebB/3Nh1pXnROHZov3swtu3Nj5oNG7Ba+xdu7Et/ulAUPanQ==", + "dependencies": { + "Serilog": "4.0.0" + } + }, + "Serilog.Sinks.Console": { + "type": "Direct", + "requested": "[6.0.0, )", + "resolved": "6.0.0", + "contentHash": "fQGWqVMClCP2yEyTXPIinSr5c+CBGUvBybPxjAGcf7ctDhadFhrQw03Mv8rJ07/wR5PDfFjewf2LimvXCDzpbA==", + "dependencies": { + "Serilog": "4.0.0" + } + }, + "Speckle.InterfaceGenerator": { + "type": "Direct", + "requested": "[0.9.6, )", + "resolved": "0.9.6", + "contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w==" + }, + "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.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.Build.Tasks.Git": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ==" + }, + "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.DependencyInjection.Abstractions": { + "type": "Transitive", + "resolved": "8.0.2", + "contentHash": "3iE7UF7MQkCv1cxzCahz+Y/guQbTqieyxyaWKhrRO91itI9cOKO76OHeQDahqG4MmW5umr3CcCvGmK92lWNlbg==" + }, + "Microsoft.Extensions.Options": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "JOVOfqpnqlVLUzINQ2fox8evY2SKLYJ3BV8QDe/Jyp21u1T7r45x/R/5QdteURMR5r01GxeJSBBUOCOyaNXA3g==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Primitives": "8.0.0" + } + }, + "Microsoft.Extensions.Primitives": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g==" + }, + "Microsoft.NETFramework.ReferenceAssemblies.net461": { + "type": "Transitive", + "resolved": "1.0.3", + "contentHash": "AmOJZwCqnOCNp6PPcf9joyogScWLtwy0M1WkqfEQ0M9nYwyDD7EX9ZjscKS5iYnyvteX7kzSKFCKt9I9dXA6mA==" + }, + "Microsoft.SourceLink.Common": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw==" + }, + "Microsoft.Win32.SystemEvents": { + "type": "Transitive", + "resolved": "7.0.0", + "contentHash": "2nXPrhdAyAzir0gLl8Yy8S5Mnm/uBSQQA7jEsILOS1MTyS7DbmV1NgViMtvV1sfCD1ebITpNwb1NIinKeJgUVQ==" + }, + "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.e_sqlite3": "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.e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "CSlb5dUp1FMIkez9Iv5EXzpeq7rHryVNqwJMWnpq87j9zWZexaEMdisDktMsnnrzKM6ahNrsTkjqNodTBPBxtQ==", + "dependencies": { + "SQLitePCLRaw.core": "2.1.4" + } + }, + "System.Drawing.Common": { + "type": "Transitive", + "resolved": "7.0.0", + "contentHash": "KIX+oBU38pxkKPxvLcLfIkOV5Ien8ReN78wro7OF5/erwcmortzeFx+iBswlh2Vz6gVne0khocQudGwaO1Ey6A==", + "dependencies": { + "Microsoft.Win32.SystemEvents": "7.0.0" + } + }, + "System.Memory": { + "type": "Transitive", + "resolved": "4.5.3", + "contentHash": "3oDzvc/zzetpTKWMShs1AADwZjQ/36HnsufHRPcOjyRAAMLDlu2iD33MBI2opxnezcVUtXyqDXXjoFMOU9c7SA==" + }, + "System.Reactive": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ==" + }, + "speckle.connectors.common": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", + "Speckle.Connectors.Logging": "[1.0.0, )", + "Speckle.Objects": "[3.5.1, )", + "Speckle.Sdk": "[3.5.1, )", + "Speckle.Sdk.Dependencies": "[3.5.1, )" + } + }, + "speckle.connectors.dui": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", + "Speckle.Connectors.Common": "[1.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.connectors.rhinoimporter": { + "type": "Project", + "dependencies": { + "Speckle.Connectors.Common": "[1.0.0, )", + "Speckle.Connectors.DUI.WebView": "[1.0.0, )", + "Speckle.Converters.Rhino8": "[1.0.0, )" + } + }, + "speckle.converters.common": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", + "Speckle.Objects": "[3.5.1, )" + } + }, + "speckle.converters.rhino8": { + "type": "Project", + "dependencies": { + "Speckle.Converters.Common": "[1.0.0, )" + } + }, + "speckle.importers.rhino": { + "type": "Project", + "dependencies": { + "Rhino.Inside": "[8.0.7-beta, )", + "Speckle.Connectors.RhinoImporter": "[1.0.0, )", + "Speckle.Converters.Rhino8": "[1.0.0, )" + } + }, + "Microsoft.Extensions.DependencyInjection": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "8.0.0", + "contentHash": "V8S3bsm50ig6JSyrbcJJ8bW2b9QLGouz+G1miK3UTaOWmMtFwNNNzUf4AleyDWUmTrWMLNnFSLEQtxmxgNQnNQ==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0" + } + }, + "Microsoft.Extensions.Logging": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "8.0.0", + "contentHash": "tvRkov9tAJ3xP51LCv3FJ2zINmv1P8Hi8lhhtcKGqM+ImiTCC84uOPEI4z8Cdq2C3o9e+Aa0Gw0rmrsJD77W+w==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection": "8.0.0", + "Microsoft.Extensions.Logging.Abstractions": "8.0.0", + "Microsoft.Extensions.Options": "8.0.0" + } + }, + "Microsoft.Extensions.Logging.Abstractions": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "8.0.2", + "contentHash": "nroMDjS7hNBPtkZqVBbSiQaQjWRDxITI8Y7XnDs97rqG3EbzVTNLZQf7bIeUJcaHOV8bca47s1Uxq94+2oGdxA==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2" + } + }, + "Microsoft.Web.WebView2": { + "type": "CentralTransitive", + "requested": "[1.0.1938.49, )", + "resolved": "1.0.1938.49", + "contentHash": "z8KnFnaTYzhA/ZnyRX0qGfS1NU5ZBJeClAH64F0fVDvdDJTvME7xl6zTJ0Jlfe1BtL3C0NH9xTy64shg2baKdw==" + }, + "Rhino.Inside": { + "type": "CentralTransitive", + "requested": "[8.0.7-beta, )", + "resolved": "8.0.7-beta", + "contentHash": "PNZdWysS2zI9vaxJ8HQig3iZA3Xg1yG1hnq09VPStQpceoj94iJ6xk0Ubddaw5oswkYYUIJRmQ8xr+bLTROs/g==", + "dependencies": { + "Grasshopper": "8.0.23304.9001", + "RhinoCommon": "8.0.23304.9001" + } + }, + "Serilog": { + "type": "CentralTransitive", + "requested": "[4.0.1, )", + "resolved": "4.0.0", + "contentHash": "2jDkUrSh5EofOp7Lx5Zgy0EB+7hXjjxE2ktTb1WVQmU00lDACR2TdROGKU0K1pDTBSJBN1PqgYpgOZF8mL7NJw==" + }, + "Speckle.DoubleNumerics": { + "type": "CentralTransitive", + "requested": "[4.1.0, )", + "resolved": "4.1.0", + "contentHash": "20DtS+FsDRsOD9+AU3TwNFZ0qrKo5f6f7B5ZR9wStsIHHHC9k7DpjbCvuNtmnSjx54MD+TJC7wV2f5iyGVPj1A==" + }, + "Speckle.Objects": { + "type": "CentralTransitive", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "dependencies": { + "Speckle.Sdk": "3.5.1" + } + }, + "Speckle.Sdk": { + "type": "CentralTransitive", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "dependencies": { + "GraphQL.Client": "6.0.0", + "Microsoft.Data.Sqlite": "7.0.5", + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging": "2.2.0", + "Speckle.DoubleNumerics": "4.1.0", + "Speckle.Newtonsoft.Json": "13.0.2", + "Speckle.Sdk.Dependencies": "3.5.1" + } + }, + "Speckle.Sdk.Dependencies": { + "type": "CentralTransitive", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + } + } + } +} \ No newline at end of file diff --git a/Importers/Rhino/Speckle.Importers.Rhino/Importer.cs b/Importers/Rhino/Speckle.Importers.Rhino/Importer.cs new file mode 100644 index 000000000..b60ff23d7 --- /dev/null +++ b/Importers/Rhino/Speckle.Importers.Rhino/Importer.cs @@ -0,0 +1,31 @@ +using Microsoft.Extensions.DependencyInjection; +using Speckle.Importers.Rhino.Internal; +using Speckle.Sdk.Credentials; +using Version = Speckle.Sdk.Api.GraphQL.Models.Version; + +namespace Speckle.Importers.Rhino; + +/// +/// Entry point for the rhino import. +/// Is a wrapper around an internal DI container. +/// It's very important that the state of services doesn't bleed between job, +/// So every import creates a new container for its processing +/// I don't trust the current services to not hold on to caches or state that could influence the next run +/// +public static class Importer +{ + public static async Task Import( + string filePath, + string projectId, + string modelId, + Account account, + CancellationToken cancellationToken + ) + { + var serviceCollection = new ServiceCollection(); + serviceCollection.AddRhinoImporter(); + using var serviceProvider = serviceCollection.BuildServiceProvider(); + var instance = serviceProvider.GetRequiredService(); + return await instance.RunRhinoImport(filePath, projectId, modelId, account, cancellationToken); + } +} diff --git a/Importers/Rhino/Speckle.Importers.Rhino/Internal/FileTypeConfig/DefaultConfig.cs b/Importers/Rhino/Speckle.Importers.Rhino/Internal/FileTypeConfig/DefaultConfig.cs new file mode 100644 index 000000000..882de073a --- /dev/null +++ b/Importers/Rhino/Speckle.Importers.Rhino/Internal/FileTypeConfig/DefaultConfig.cs @@ -0,0 +1,11 @@ +using Rhino; +using Rhino.Collections; + +namespace Speckle.Importers.Rhino.Internal.FileTypeConfig; + +public sealed class DefaultConfig : IFileTypeConfig +{ + public ArchivableDictionary? ImportOptions => null; + + public void PreProcessDocument(RhinoDoc doc) { } +} diff --git a/Importers/Rhino/Speckle.Importers.Rhino/Internal/FileTypeConfig/IFileTypeConfig.cs b/Importers/Rhino/Speckle.Importers.Rhino/Internal/FileTypeConfig/IFileTypeConfig.cs new file mode 100644 index 000000000..a8742bfc0 --- /dev/null +++ b/Importers/Rhino/Speckle.Importers.Rhino/Internal/FileTypeConfig/IFileTypeConfig.cs @@ -0,0 +1,24 @@ +using Rhino; +using Rhino.Collections; + +namespace Speckle.Importers.Rhino.Internal.FileTypeConfig; + +/// +/// Represents configuration for a specific file type (e.g. .skp) to customise the import behaviour +/// +internal interface IFileTypeConfig +{ + /// + /// Options to pass to the command + /// + public ArchivableDictionary? ImportOptions { get; } + + /// + /// Run any operations on objects in the rhino document to clean up the export before converting to speckle + /// + /// + /// Ran on the document after importing, but before any Speckle conversion + /// + /// + public void PreProcessDocument(RhinoDoc doc); +} diff --git a/Importers/Rhino/Speckle.Importers.Rhino/Internal/FileTypeConfig/SketchupConfig.cs b/Importers/Rhino/Speckle.Importers.Rhino/Internal/FileTypeConfig/SketchupConfig.cs new file mode 100644 index 000000000..289fbe458 --- /dev/null +++ b/Importers/Rhino/Speckle.Importers.Rhino/Internal/FileTypeConfig/SketchupConfig.cs @@ -0,0 +1,46 @@ +using Rhino; +using Rhino.Collections; +using Rhino.DocObjects; +using Rhino.Geometry; + +namespace Speckle.Importers.Rhino.Internal.FileTypeConfig; + +public sealed class SketchupConfig : IFileTypeConfig +{ + public ArchivableDictionary? ImportOptions => null; + + /// + /// Clean up step to strip imported meshes of their NGon data, leaving only the triangle/quad data behind. + /// This works around a bug in the sketchup importer creating invalid ngons. + /// + /// + /// Without this cleanup step, skp imports send incorrect meshes to speckle + /// I believe there is a bug in Rhino's skp file importing logic + /// The function documents that it will return ccw faces, + /// and this holds true for native modeled rhino meshes, but not meshes from sketchup imports. + /// Since Speckle's conversions rely on this function returning how it's documented, the resulting speckle geometry + /// would be invalid without this step + /// + /// + public void PreProcessDocument(RhinoDoc doc) + { + // Process regular meshes in the document + foreach (var obj in doc.Objects.GetObjectList(ObjectType.Mesh)) + { + if (obj.Geometry is not Mesh mesh) + { + continue; + } + + if (mesh.Ngons.Count <= 0) + { + continue; + } + + mesh.Ngons.Clear(); + _ = doc.Objects.Replace(obj.Id, mesh); + } + + //TODO: same for meshes inside blocks + } +} diff --git a/Importers/Rhino/Speckle.Importers.Rhino/Internal/ImporterInstance.cs b/Importers/Rhino/Speckle.Importers.Rhino/Internal/ImporterInstance.cs new file mode 100644 index 000000000..3ec008add --- /dev/null +++ b/Importers/Rhino/Speckle.Importers.Rhino/Internal/ImporterInstance.cs @@ -0,0 +1,50 @@ +using Rhino; +using Speckle.Importers.Rhino.Internal.FileTypeConfig; +using Speckle.Sdk; +using Speckle.Sdk.Credentials; +using Version = Speckle.Sdk.Api.GraphQL.Models.Version; + +namespace Speckle.Importers.Rhino.Internal; + +internal sealed class ImporterInstance(Sender sender) +{ + public async Task RunRhinoImport( + string filePath, + string projectId, + string modelId, + Account account, + CancellationToken cancellationToken + ) + { + using RhinoDoc open = RhinoDoc.CreateHeadless(null); + try + { + var config = GetConfig(Path.GetExtension(filePath)); + + RhinoDoc.ActiveDoc = open; + if (!open.Import(filePath, config.ImportOptions)) + { + throw new SpeckleException("Rhino could not import this file"); + } + + config.PreProcessDocument(open); + + var version = await sender.Send(projectId, modelId, account, cancellationToken); + return version; + } + finally + { + //Being a bit extra defensive that we're cleaning up the old doc + RhinoDoc.ActiveDoc?.Dispose(); + RhinoDoc.ActiveDoc = null; + GC.Collect(); + } + } + + private static IFileTypeConfig GetConfig(string extension) => + extension.ToLowerInvariant() switch + { + ".skp" => new SketchupConfig(), + _ => new DefaultConfig(), + }; +} diff --git a/Importers/Rhino/Speckle.Importers.Rhino/ImporterThreadContext.cs b/Importers/Rhino/Speckle.Importers.Rhino/Internal/ImporterThreadContext.cs similarity index 80% rename from Importers/Rhino/Speckle.Importers.Rhino/ImporterThreadContext.cs rename to Importers/Rhino/Speckle.Importers.Rhino/Internal/ImporterThreadContext.cs index 97f842c43..2516a2d4c 100644 --- a/Importers/Rhino/Speckle.Importers.Rhino/ImporterThreadContext.cs +++ b/Importers/Rhino/Speckle.Importers.Rhino/Internal/ImporterThreadContext.cs @@ -1,8 +1,11 @@ using Speckle.Connectors.Common.Threading; -namespace Speckle.Importers.Rhino; +namespace Speckle.Importers.Rhino.Internal; -public class ImporterThreadContext : ThreadContext +/// +/// A custom implementation of the ThreadContext to behave correctly with windowless rhino +/// +internal sealed class ImporterThreadContext : ThreadContext { protected override Task WorkerToMainAsync(Func> action) { diff --git a/Importers/Rhino/Speckle.Importers.Rhino/Progress.cs b/Importers/Rhino/Speckle.Importers.Rhino/Internal/Progress.cs similarity index 77% rename from Importers/Rhino/Speckle.Importers.Rhino/Progress.cs rename to Importers/Rhino/Speckle.Importers.Rhino/Internal/Progress.cs index fc49354a2..e99f8a54a 100644 --- a/Importers/Rhino/Speckle.Importers.Rhino/Progress.cs +++ b/Importers/Rhino/Speckle.Importers.Rhino/Internal/Progress.cs @@ -1,9 +1,9 @@ using Microsoft.Extensions.Logging; using Speckle.Connectors.Common.Operations; -namespace Speckle.Importers.Rhino; +namespace Speckle.Importers.Rhino.Internal; -public class Progress(ILogger logger) : IProgress +internal sealed class Progress(ILogger logger) : IProgress { private readonly TimeSpan _debounce = TimeSpan.FromMilliseconds(1000); private DateTime _lastTime = DateTime.UtcNow; diff --git a/Importers/Rhino/Speckle.Importers.Rhino/Internal/Sender.cs b/Importers/Rhino/Speckle.Importers.Rhino/Internal/Sender.cs new file mode 100644 index 000000000..f666fe76a --- /dev/null +++ b/Importers/Rhino/Speckle.Importers.Rhino/Internal/Sender.cs @@ -0,0 +1,64 @@ +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; +using Rhino; +using Rhino.DocObjects; +using Speckle.Connectors.Common.Operations; +using Speckle.Converters.Common; +using Speckle.Converters.Rhino; +using Speckle.Sdk; +using Speckle.Sdk.Credentials; +using Speckle.Sdk.Logging; +using Version = Speckle.Sdk.Api.GraphQL.Models.Version; + +namespace Speckle.Importers.Rhino.Internal; + +internal sealed class Sender( + ISdkActivityFactory activityFactory, + IServiceProvider serviceProvider, + IRhinoConversionSettingsFactory rhinoConversionSettingsFactory, + Progress progress, + ILogger logger +) +{ + public async Task Send( + string projectId, + string modelId, + Account account, + CancellationToken cancellationToken + ) + { + // NOTE: introduction of AddVisualizationProperties setting not accounted for, hence hardcoded as true (i.e. "as before") + using var activity = activityFactory.Start(); + using var scope = serviceProvider.CreateScope(); + scope + .ServiceProvider.GetRequiredService>() + .Initialize(rhinoConversionSettingsFactory.Create(RhinoDoc.ActiveDoc, true)); + + List rhinoObjects = RhinoDoc + .ActiveDoc.Objects.GetObjectList(ObjectType.AnyObject) + .Where(obj => obj != null) + .ToList(); + + if (rhinoObjects.Count == 0) + { + throw new SpeckleException("There are no objects found in the file"); + } + + var operation = scope.ServiceProvider.GetRequiredService>(); + var buildResults = await operation.Build(rhinoObjects, projectId, progress, cancellationToken); + var (results, version) = await operation.Send( + buildResults.RootObject, + projectId, + modelId, + "Rhino File Importer", + null, + account, + progress, + cancellationToken + ); + + logger.LogInformation($"Root: {results.RootId}"); + + return version; + } +} diff --git a/Importers/Rhino/Speckle.Importers.Rhino/Internal/ServiceRegistration.cs b/Importers/Rhino/Speckle.Importers.Rhino/Internal/ServiceRegistration.cs new file mode 100644 index 000000000..8d8bfd75f --- /dev/null +++ b/Importers/Rhino/Speckle.Importers.Rhino/Internal/ServiceRegistration.cs @@ -0,0 +1,26 @@ +using Microsoft.Extensions.DependencyInjection; +using Speckle.Connectors.Common; +using Speckle.Connectors.Common.Threading; +using Speckle.Connectors.Rhino.DependencyInjection; +using Speckle.Converters.Rhino; + +namespace Speckle.Importers.Rhino.Internal; + +internal static class ServiceRegistration +{ + public static IServiceCollection AddRhinoImporter(this IServiceCollection services) + { + services.Initialize(HostApplications.RhinoImporter, HostAppVersion.v8); + + services.AddRhino(false); + services.AddRhinoConverters(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + + // override default thread context + services.AddSingleton(new ImporterThreadContext()); + + return services; + } +} diff --git a/Importers/Rhino/Speckle.Importers.Rhino/Program.cs b/Importers/Rhino/Speckle.Importers.Rhino/Program.cs deleted file mode 100644 index b57767a74..000000000 --- a/Importers/Rhino/Speckle.Importers.Rhino/Program.cs +++ /dev/null @@ -1,124 +0,0 @@ -using System.CommandLine; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Logging; -using Rhino; -using Rhino.Runtime.InProcess; -using Serilog; -using Serilog.Formatting.Compact; -using Speckle.Connectors.Common; -using Speckle.Connectors.Common.Threading; -using Speckle.Connectors.Rhino.DependencyInjection; -using Speckle.Converters.Rhino; -using Speckle.Newtonsoft.Json; -using Speckle.Sdk.Logging; - -namespace Speckle.Importers.Rhino; - -public static class Program -{ - static Program() - { - Resolver.Initialize(); - } - - [STAThread] - public static async Task Main(string[] args) - { - try - { - RootCommand rootCommand = new(); - - Argument pathArg = new(name: "Source File Path", description: "Path to file to load and parse"); - Argument resultsPathArg = - new(name: "Results File Path", description: "Path to file to write results information (like version id)"); - Argument projectIdArg = new(name: "Project Id", description: "The project id to publish to"); - Argument modelIdArg = new(name: "Model Id", description: "The model id to publish to"); - Argument serverUrlArg = new(name: "Server Url", description: "The url of the server to publish to."); - Argument tokenArg = new(name: "Token", description: "The speckle token to use for publish"); - - rootCommand.AddArgument(pathArg); - rootCommand.AddArgument(resultsPathArg); - rootCommand.AddArgument(projectIdArg); - rootCommand.AddArgument(modelIdArg); - rootCommand.AddArgument(serverUrlArg); - rootCommand.AddArgument(tokenArg); - - rootCommand.SetHandler(Handle, pathArg, resultsPathArg, projectIdArg, modelIdArg, serverUrlArg, tokenArg); - - await rootCommand.InvokeAsync(args).ConfigureAwait(false); - - return 0; - } -#pragma warning disable CA1031 - catch (Exception e) -#pragma warning restore CA1031 - { - Console.WriteLine(e); - return -1; - } - } - -#pragma warning disable CA1506 - private static async Task Handle( - string filePath, - string resultsPath, - string projectId, - string modelId, -#pragma warning restore CA1506 - string serverUrl, - string token - ) - { - // Create file with account info here - var accountsDir = SpecklePathProvider.AccountsFolderPath; - if (!Directory.Exists(accountsDir)) - { - Directory.CreateDirectory(accountsDir); - } - - using (new RhinoCore([], WindowStyle.NoWindow)) - { - //doc is often null so dispose the active doc too - using var doc = RhinoDoc.Open(filePath, out _); - using var __ = RhinoDoc.ActiveDoc; - var services = new ServiceCollection(); - services.Initialize(HostApplications.RhinoImporter, HostAppVersion.v8); - services.AddRhino(false); - services.AddRhinoConverters(); - // override default - services.AddSingleton(new ImporterThreadContext()); - services.AddTransient(); - Log.Logger = new LoggerConfiguration() - .Enrich.FromLogContext() - .WriteTo.Console(new RenderedCompactJsonFormatter()) - .CreateLogger(); - services.AddLogging(loggingBuilder => - { - loggingBuilder.ClearProviders(); - loggingBuilder.AddSerilog(dispose: true); - }); - - // but the Rhino connector has `.rhp` as it is extension. - var container = services.BuildServiceProvider(); - try - { - var sender = ActivatorUtilities.CreateInstance(container); - var versionId = await sender.Send(projectId, modelId, new Uri(serverUrl), token); - - var result = - versionId == null - ? new RhinoImportResult() { Success = false, ErrorMessage = "Failed to create version!" } - : new RhinoImportResult() { Success = true, CommitId = versionId }; - - File.WriteAllText(resultsPath, JsonConvert.SerializeObject(result)); - } - catch (Exception ex) - { - container.GetRequiredService>().LogError(ex, "Fatal error for import"); - var results = new RhinoImportResult() { Success = false, ErrorMessage = ex.Message, }; - File.WriteAllText(resultsPath, JsonConvert.SerializeObject(results)); - throw; - } - } - } -} diff --git a/Importers/Rhino/Speckle.Importers.Rhino/Resolver.cs b/Importers/Rhino/Speckle.Importers.Rhino/Resolver.cs deleted file mode 100644 index 2e7194f7f..000000000 --- a/Importers/Rhino/Speckle.Importers.Rhino/Resolver.cs +++ /dev/null @@ -1,124 +0,0 @@ -using System.Reflection; -using Speckle.Sdk.Common; - -namespace Speckle.Importers.Rhino; - -//from https://github.com/mcneel/rhino.inside/blob/master/LICENSE -// https://github.com/mcneel/rhino.inside/commit/19b4d571ab3b02f5b29f1e0cf9112845e3323697 -// https://github.com/mcneel/rhino.inside/blob/master/DotNet/RhinoInside/Resolver.cs -// -public static class Resolver -{ - /// - /// Set up an assembly resolver to load RhinoCommon and other Rhino - /// assemblies from where Rhino is installed - /// - public static void Initialize() - { - if (System.IntPtr.Size != 8) - { - throw new InvalidOperationException("Only 64 bit applications can use RhinoInside"); - } - - AppDomain.CurrentDomain.AssemblyResolve += ResolveForRhinoAssemblies; - } - - private static string? s_rhinoSystemDirectory; - - /// - /// Directory used by assembly resolver to attempt load core Rhino assemblies. If not manually set, - /// this will be determined by inspecting the registry - /// - public static string? RhinoSystemDirectory - { - get - { - if (string.IsNullOrWhiteSpace(s_rhinoSystemDirectory)) - { - s_rhinoSystemDirectory = FindRhinoSystemDirectory(); - } - - return s_rhinoSystemDirectory; - } - set => s_rhinoSystemDirectory = value; - } - - /// - /// Whether or not to use the newest installation of Rhino on the system. By default the resolver will only use an - /// installation with a matching major version. - /// - public static bool UseLatest { get; set; } - - private static Assembly? ResolveForRhinoAssemblies(object? sender, ResolveEventArgs args) - { - string? assemblyName = new AssemblyName(args.Name).Name; - if (RhinoSystemDirectory is null) - { - return null; - } - - string path = System.IO.Path.Combine(RhinoSystemDirectory, assemblyName + ".dll"); - if (assemblyName != null && assemblyName.StartsWith("Speckle.Connectors.Rhino")) - { - path = Path.Combine( - Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location).NotNull(), - assemblyName + ".rhp" - ); - } - - if (System.IO.File.Exists(path)) - { - return Assembly.LoadFrom(path); - } - - return null; - } - - private static string? FindRhinoSystemDirectory() - { - var major = 8; - string baseName = @"SOFTWARE\McNeel\Rhinoceros"; - using var baseKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(baseName); - if (baseKey == null) - { - return null; - } - string[] children = baseKey.GetSubKeyNames(); - Array.Sort(children); - string versionName = ""; - for (int i = children.Length - 1; i >= 0; i--) - { - // 20 Jan 2020 S. Baer (https://github.com/mcneel/rhino.inside/issues/248) - // A generic double.TryParse is failing when run under certain locales. - if ( - double.TryParse( - children[i], - System.Globalization.NumberStyles.Any, - System.Globalization.CultureInfo.InvariantCulture, - out double d - ) - ) - { - versionName = children[i]; - - if (!UseLatest && (int)Math.Floor(d) != major) - { - continue; - } - - using var installKey = baseKey.OpenSubKey($"{versionName}\\Install"); - if (installKey is null) - { - return null; - } - string? corePath = (string?)installKey.GetValue("CoreDllPath"); - if (System.IO.File.Exists(corePath)) - { - return System.IO.Path.GetDirectoryName(corePath); - } - } - } - - return null; - } -} diff --git a/Importers/Rhino/Speckle.Importers.Rhino/RhinoImportResult.cs b/Importers/Rhino/Speckle.Importers.Rhino/RhinoImportResult.cs deleted file mode 100644 index 7ec42f8c3..000000000 --- a/Importers/Rhino/Speckle.Importers.Rhino/RhinoImportResult.cs +++ /dev/null @@ -1,15 +0,0 @@ -using Speckle.Newtonsoft.Json; - -namespace Speckle.Importers.Rhino; - -public class RhinoImportResult -{ - [JsonProperty("success")] - public bool Success { get; set; } - - [JsonProperty("commitId")] - public string CommitId { get; set; } - - [JsonProperty("errorMessage")] - public string ErrorMessage { get; set; } -} diff --git a/Importers/Rhino/Speckle.Importers.Rhino/Sender.cs b/Importers/Rhino/Speckle.Importers.Rhino/Sender.cs index 1343c9051..5f282702b 100644 --- a/Importers/Rhino/Speckle.Importers.Rhino/Sender.cs +++ b/Importers/Rhino/Speckle.Importers.Rhino/Sender.cs @@ -1,68 +1 @@ -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Logging; -using Rhino; -using Rhino.DocObjects; -using Speckle.Connectors.Common.Operations; -using Speckle.Converters.Common; -using Speckle.Converters.Rhino; -using Speckle.Sdk.Credentials; -using Speckle.Sdk.Logging; - -namespace Speckle.Importers.Rhino; - -public class Sender( - ISdkActivityFactory activityFactory, - IServiceProvider serviceProvider, - IRhinoConversionSettingsFactory rhinoConversionSettingsFactory, - IAccountFactory accountFactory, - Progress progress, - ILogger logger -) -{ - public async Task Send(string projectId, string modelId, Uri serverUrl, string token) - { - using var activity = activityFactory.Start(); - using var scope = serviceProvider.CreateScope(); - scope - .ServiceProvider.GetRequiredService>() - .Initialize(rhinoConversionSettingsFactory.Create(RhinoDoc.ActiveDoc)); - try - { - List rhinoObjects = RhinoDoc - .ActiveDoc.Objects.GetObjectList(ObjectType.AnyObject) - .Where(obj => obj != null) - .ToList(); - - if (rhinoObjects.Count == 0) - { - return null; - } - - var account = await accountFactory.CreateAccount(serverUrl, token); - var operation = scope.ServiceProvider.GetRequiredService>(); - var buildResults = await operation.Build(rhinoObjects, projectId, progress, CancellationToken.None); - var (results, versionId) = await operation.Send( - buildResults.RootObject, - projectId, - modelId, - token, - null, - account, - progress, - CancellationToken.None - ); - - logger.LogInformation($"Root: {results.RootId}"); - - return versionId; - } -#pragma warning disable CA1031 - catch (Exception ex) -#pragma warning restore CA1031 - { - logger.LogError(ex, "Error while sending"); - } - - return null; - } -} + \ No newline at end of file diff --git a/Importers/Rhino/Speckle.Importers.Rhino/Speckle.Importers.Rhino.csproj b/Importers/Rhino/Speckle.Importers.Rhino/Speckle.Importers.Rhino.csproj index 02d4b5f16..6d40326ab 100644 --- a/Importers/Rhino/Speckle.Importers.Rhino/Speckle.Importers.Rhino.csproj +++ b/Importers/Rhino/Speckle.Importers.Rhino/Speckle.Importers.Rhino.csproj @@ -1,23 +1,20 @@  - - net48 - x64 - Debug;Release;Local - Exe - + + net8.0-windows + x64 + Debug;Release;Local + - - - - - - + + + + - + diff --git a/Importers/Rhino/Speckle.Importers.Rhino/packages.lock.json b/Importers/Rhino/Speckle.Importers.Rhino/packages.lock.json index 9abd25fb0..81c813358 100644 --- a/Importers/Rhino/Speckle.Importers.Rhino/packages.lock.json +++ b/Importers/Rhino/Speckle.Importers.Rhino/packages.lock.json @@ -1,14 +1,23 @@ { "version": 2, "dependencies": { - ".NETFramework,Version=v4.8": { + "net8.0-windows7.0": { + "Grasshopper": { + "type": "Direct", + "requested": "[8.21.25188.17001, )", + "resolved": "8.21.25188.17001", + "contentHash": "qpt9XQWuKLFfzn2cnYf5akfHRwYuffthK5AXsSY1UhjD0eG6bYSTtmAkNVH+Wdg130MZkGqJmPd012Om1kJPBA==", + "dependencies": { + "RhinoCommon": "[8.21.25188.17001]" + } + }, "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.NETFramework.ReferenceAssemblies.net461": "1.0.3" } }, "Microsoft.SourceLink.GitHub": { @@ -27,47 +36,32 @@ "resolved": "1.14.1", "contentHash": "mOOmFYwad3MIOL14VCjj02LljyF1GNw1wP0YVlxtcPvqdxjGGMNdNJJxHptlry3MOd8b40Flm8RPOM8JOlN2sQ==" }, + "Rhino.Inside": { + "type": "Direct", + "requested": "[8.0.7-beta, )", + "resolved": "8.0.7-beta", + "contentHash": "PNZdWysS2zI9vaxJ8HQig3iZA3Xg1yG1hnq09VPStQpceoj94iJ6xk0Ubddaw5oswkYYUIJRmQ8xr+bLTROs/g==", + "dependencies": { + "Grasshopper": "8.0.23304.9001", + "RhinoCommon": "8.0.23304.9001" + } + }, "RhinoCommon": { "type": "Direct", - "requested": "[8.9.24194.18121, )", - "resolved": "8.9.24194.18121", - "contentHash": "XRMnm38sBFeMT5AAtRTJdSaql/YNtT02AGi8TEVP1VZ4fkm8VJ1q2nNioWN3tW/+H8Tdi4nV+DuhB/5uE41MCg==" + "requested": "[8.21.25188.17001, )", + "resolved": "8.21.25188.17001", + "contentHash": "Wo6JXheyDBvilyIwDY6xZCQJC4170jzAlTSlMgh8yokUY+vYyCl4KJVXZofIOynNt/xx5wLqb2On5gZZekXR6w==", + "dependencies": { + "System.Drawing.Common": "7.0.0" + } }, "RhinoWindows": { "type": "Direct", - "requested": "[8.9.24194.18121, )", - "resolved": "8.9.24194.18121", - "contentHash": "E+MMgC1ITYiPjcHTd+N2vLlg6pNDnRpNL1yGalfPp1eqHJiXkzsGpM1D8oz865D6ybnJAHOOeEVaKqUzFUSUag==", + "requested": "[8.21.25188.17001, )", + "resolved": "8.21.25188.17001", + "contentHash": "9zqCorcLRBeiW/j1RTwUS4E7bnZetAdA9WDdtd/AQccjOpxdtw76wdN+ciyQ6qslseWkwZ9qSBeh7QaM800Ntw==", "dependencies": { - "RhinoCommon": "[8.9.24194.18121]" - } - }, - "Serilog.Extensions.Logging": { - "type": "Direct", - "requested": "[8.0.0, )", - "resolved": "8.0.0", - "contentHash": "YEAMWu1UnWgf1c1KP85l1SgXGfiVo0Rz6x08pCiPOIBt2Qe18tcZLvdBUuV5o1QHvrs8FAry9wTIhgBRtjIlEg==", - "dependencies": { - "Microsoft.Extensions.Logging": "8.0.0", - "Serilog": "3.1.1" - } - }, - "Serilog.Formatting.Compact": { - "type": "Direct", - "requested": "[3.0.0, )", - "resolved": "3.0.0", - "contentHash": "wQsv14w9cqlfB5FX2MZpNsTawckN4a8dryuNGbebB/3Nh1pXnROHZov3swtu3Nj5oNG7Ba+xdu7Et/ulAUPanQ==", - "dependencies": { - "Serilog": "4.0.0" - } - }, - "Serilog.Sinks.Console": { - "type": "Direct", - "requested": "[6.0.0, )", - "resolved": "6.0.0", - "contentHash": "fQGWqVMClCP2yEyTXPIinSr5c+CBGUvBybPxjAGcf7ctDhadFhrQw03Mv8rJ07/wR5PDfFjewf2LimvXCDzpbA==", - "dependencies": { - "Serilog": "4.0.0" + "RhinoCommon": "[8.21.25188.17001]" } }, "Speckle.InterfaceGenerator": { @@ -76,15 +70,6 @@ "resolved": "0.9.6", "contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w==" }, - "System.CommandLine": { - "type": "Direct", - "requested": "[2.0.0-beta4.22272.1, )", - "resolved": "2.0.0-beta4.22272.1", - "contentHash": "1uqED/q2H0kKoLJ4+hI2iPSBSEdTuhfCYADeJrAqERmiGQ2NNacYKRNEQ+gFbU4glgVyK8rxI+ZOe1onEtr/Pg==", - "dependencies": { - "System.Memory": "4.5.4" - } - }, "GraphQL.Client": { "type": "Transitive", "resolved": "6.0.0", @@ -92,7 +77,6 @@ "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" } }, @@ -117,29 +101,11 @@ "resolved": "6.0.0", "contentHash": "yg72rrYDapfsIUrul7aF6wwNnTJBOFvuA9VdDTQpPa8AlAriHbufeXYLBcodKjfUdkCnaiggX1U/nEP08Zb5GA==" }, - "Microsoft.Bcl.AsyncInterfaces": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "3WA9q9yVqJp222P3x1wYIGDAkpjAku0TMUaaQV22g6L67AI0LdOIrVS7Ht2vJfLHGSPVuqN94vIr15qn+HEkHw==", - "dependencies": { - "System.Threading.Tasks.Extensions": "4.5.4" - } - }, - "Microsoft.Bcl.HashCode": { - "type": "Transitive", - "resolved": "1.1.1", - "contentHash": "MalY0Y/uM/LjXtHfX/26l2VtN4LDNZ2OE3aumNOHDLsT4fNYy2hiHXI4CXCqKpNUNm7iJ2brrc4J89UdaL56FA==" - }, "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", @@ -157,44 +123,69 @@ "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": "8.0.0", - "contentHash": "cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg==", - "dependencies": { - "Microsoft.Bcl.AsyncInterfaces": "8.0.0", - "System.Threading.Tasks.Extensions": "4.5.4" - } + "resolved": "2.2.0", + "contentHash": "f9hstgjVmr6rmrfGSpfsVOl2irKAgr1QjrSi3FgnS7kulxband50f2brRLwySAQTADPZeTdow0mpSMcoAdadCw==" }, "Microsoft.Extensions.Options": { "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "JOVOfqpnqlVLUzINQ2fox8evY2SKLYJ3BV8QDe/Jyp21u1T7r45x/R/5QdteURMR5r01GxeJSBBUOCOyaNXA3g==", + "resolved": "2.2.0", + "contentHash": "UpZLNLBpIZ0GTebShui7xXYh6DmBHjWM8NxGxZbdQh/bPZ5e6YswqI+bru6BnEL5eWiOdodsXtEz3FROcgi/qg==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", - "Microsoft.Extensions.Primitives": "8.0.0", - "System.ValueTuple": "4.5.0" + "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": "8.0.0", - "contentHash": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g==", + "resolved": "2.2.0", + "contentHash": "azyQtqbm4fSaDzZHD/J+V6oWMFaf2tWP4WEGIYePLCMw3+b2RQdj9ybgbQyjCshcitQKQ4lEDOZjmSlTTrHxUg==", "dependencies": { - "System.Memory": "4.5.5", - "System.Runtime.CompilerServices.Unsafe": "6.0.0" + "System.Memory": "4.5.1", + "System.Runtime.CompilerServices.Unsafe": "4.5.1" } }, - "Microsoft.NETFramework.ReferenceAssemblies.net48": { + "Microsoft.NETFramework.ReferenceAssemblies.net461": { "type": "Transitive", "resolved": "1.0.3", - "contentHash": "zMk4D+9zyiEWByyQ7oPImPN/Jhpj166Ky0Nlla4eXlNL8hI/BtSJsgR8Inldd4NNpIAH3oh8yym0W2DrhXdSLQ==" + "contentHash": "AmOJZwCqnOCNp6PPcf9joyogScWLtwy0M1WkqfEQ0M9nYwyDD7EX9ZjscKS5iYnyvteX7kzSKFCKt9I9dXA6mA==" }, "Microsoft.SourceLink.Common": { "type": "Transitive", "resolved": "8.0.0", "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw==" }, + "Microsoft.Win32.SystemEvents": { + "type": "Transitive", + "resolved": "7.0.0", + "contentHash": "2nXPrhdAyAzir0gLl8Yy8S5Mnm/uBSQQA7jEsILOS1MTyS7DbmV1NgViMtvV1sfCD1ebITpNwb1NIinKeJgUVQ==" + }, "Speckle.Newtonsoft.Json": { "type": "Transitive", "resolved": "13.0.2", @@ -206,7 +197,7 @@ "contentHash": "EWI1olKDjFEBMJu0+3wuxwziIAdWDVMYLhuZ3Qs84rrz+DHwD00RzWPZCa+bLnHCf3oJwuFZIRsHT5p236QXww==", "dependencies": { "SQLitePCLRaw.lib.e_sqlite3": "2.1.4", - "SQLitePCLRaw.provider.dynamic_cdecl": "2.1.4" + "SQLitePCLRaw.provider.e_sqlite3": "2.1.4" } }, "SQLitePCLRaw.core": { @@ -222,122 +213,50 @@ "resolved": "2.1.4", "contentHash": "2C9Q9eX7CPLveJA0rIhf9RXAvu+7nWZu1A2MdG6SD/NOu26TakGgL1nsbc0JAspGijFOo3HoN79xrx8a368fBg==" }, - "SQLitePCLRaw.provider.dynamic_cdecl": { + "SQLitePCLRaw.provider.e_sqlite3": { "type": "Transitive", "resolved": "2.1.4", - "contentHash": "ZsaKKhgYF9B1fvcnOGKl3EycNAwd9CRWX7v0rEfuPWhQQ5Jjpvf2VEHahiLIGHio3hxi3EIKFJw9KvyowWOUAw==", + "contentHash": "CSlb5dUp1FMIkez9Iv5EXzpeq7rHryVNqwJMWnpq87j9zWZexaEMdisDktMsnnrzKM6ahNrsTkjqNodTBPBxtQ==", "dependencies": { "SQLitePCLRaw.core": "2.1.4" } }, - "System.Buffers": { + "System.ComponentModel.Annotations": { "type": "Transitive", - "resolved": "4.5.1", - "contentHash": "Rw7ijyl1qqRS0YQD/WycNst8hUUMgrMH4FCn1nNm27M4VxchZ1js3fVjQaANHO5f3sN4isvP4a+Met9Y4YomAg==" + "resolved": "4.5.0", + "contentHash": "UxYQ3FGUOtzJ7LfSdnYSFd7+oEv6M8NgUatatIN2HxNtDdlcvFAf+VIq4Of9cDMJEJC0aSRv/x898RYhB4Yppg==" }, - "System.Collections.Immutable": { + "System.Drawing.Common": { "type": "Transitive", - "resolved": "9.0.4", - "contentHash": "wfm2NgK22MmBe5qJjp52qzpkeDZKb4l9LbdubhZSehY1z4LS+lld6R+B+UQNb2AZRHu/QJlHxEUcRst5hIEejg==", + "resolved": "7.0.0", + "contentHash": "KIX+oBU38pxkKPxvLcLfIkOV5Ien8ReN78wro7OF5/erwcmortzeFx+iBswlh2Vz6gVne0khocQudGwaO1Ey6A==", "dependencies": { - "System.Memory": "4.5.5", - "System.Runtime.CompilerServices.Unsafe": "6.0.0" - } - }, - "System.Diagnostics.DiagnosticSource": { - "type": "Transitive", - "resolved": "8.0.1", - "contentHash": "vaoWjvkG1aenR2XdjaVivlCV9fADfgyhW5bZtXT23qaEea0lWiUljdQuze4E31vKM7ZWJaSUsbYIKE3rnzfZUg==", - "dependencies": { - "System.Memory": "4.5.5", - "System.Runtime.CompilerServices.Unsafe": "6.0.0" - } - }, - "System.Formats.Nrbf": { - "type": "Transitive", - "resolved": "9.0.4", - "contentHash": "HuDjUInoaQvnX+3bRg2lX+KLD2raiDJA0v3c4hmukAHSQT8rpa6+2NKRoz+1W8Jmbu5ocvc+xPPKgHMVjeJpOg==", - "dependencies": { - "Microsoft.Bcl.HashCode": "1.1.1", - "System.Reflection.Metadata": "9.0.4", - "System.ValueTuple": "4.5.0" + "Microsoft.Win32.SystemEvents": "7.0.0" } }, "System.Memory": { "type": "Transitive", - "resolved": "4.5.5", - "contentHash": "XIWiDvKPXaTveaB7HVganDlOCRoj03l+jrwNvcge/t8vhGYKvqV+dMv6G4SAX2NoNmN0wZfVPTAlFwZcZvVOUw==", - "dependencies": { - "System.Buffers": "4.5.1", - "System.Numerics.Vectors": "4.5.0", - "System.Runtime.CompilerServices.Unsafe": "4.5.3" - } - }, - "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.5.0", - "contentHash": "QQTlPTl06J/iiDbJCiepZ4H//BVraReU4O4EoRw1U02H5TLUIT7xn3GnDp9AXPSlJUDyFs4uWjWafNX6WrAojQ==" + "resolved": "4.5.3", + "contentHash": "3oDzvc/zzetpTKWMShs1AADwZjQ/36HnsufHRPcOjyRAAMLDlu2iD33MBI2opxnezcVUtXyqDXXjoFMOU9c7SA==" }, "System.Reactive": { "type": "Transitive", "resolved": "5.0.0", - "contentHash": "erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ==", - "dependencies": { - "System.Threading.Tasks.Extensions": "4.5.4" - } - }, - "System.Reflection.Metadata": { - "type": "Transitive", - "resolved": "9.0.4", - "contentHash": "qeJNsMmZPc/Lieg0Md+D4F6LoLcxV3b9QsUNmBRXc2ZVOkMbAcwuO9l2jbQFv3n+fLiHJilN8v6i5aJNivjrCQ==", - "dependencies": { - "System.Collections.Immutable": "9.0.4", - "System.Memory": "4.5.5" - } + "contentHash": "erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ==" }, "System.Runtime.CompilerServices.Unsafe": { "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg==" - }, - "System.Threading.Channels": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "CMaFr7v+57RW7uZfZkPExsPB6ljwzhjACWW1gfU35Y56rk72B/Wu+sTqxVmGSk4SFUlPc3cjeKND0zktziyjBA==", - "dependencies": { - "System.Threading.Tasks.Extensions": "4.5.4" - } - }, - "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" - } - }, - "System.ValueTuple": { - "type": "Transitive", - "resolved": "4.5.0", - "contentHash": "okurQJO6NRE/apDIP23ajJ0hpiNmJ+f0BwOlB/cSqTLQlw5upkf+5+96+iG2Jw40G1fCVCyPz/FhIABUjMR+RQ==" + "resolved": "4.5.1", + "contentHash": "Zh8t8oqolRaFa9vmOZfdQm/qKejdqz0J9kr7o2Fu0vPeoH3BL1EOXipKWwkWtLT1JPzjByrF19fGuFlNbmPpiw==" }, "speckle.connectors.common": { "type": "Project", "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.0, )", - "Speckle.Sdk": "[3.5.0, )", - "Speckle.Sdk.Dependencies": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )", + "Speckle.Sdk": "[3.5.1, )", + "Speckle.Sdk.Dependencies": "[3.5.1, )" } }, "speckle.connectors.dui": { @@ -354,83 +273,56 @@ "Speckle.Connectors.DUI": "[1.0.0, )" } }, - "speckle.connectors.grasshopper8": { - "type": "Project", - "dependencies": { - "GrasshopperAsyncComponent": "[2.0.3, )", - "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Converters.Rhino8": "[1.0.0, )", - "System.Resources.Extensions": "[9.0.4, )" - } - }, "speckle.connectors.logging": { "type": "Project" }, - "speckle.connectors.rhino8": { + "speckle.connectors.rhinoimporter": { "type": "Project", "dependencies": { + "Speckle.Connectors.Common": "[1.0.0, )", "Speckle.Connectors.DUI.WebView": "[1.0.0, )", - "Speckle.Connectors.Grasshopper8": "[1.0.0, )" + "Speckle.Converters.Rhino8": "[1.0.0, )" } }, "speckle.converters.common": { "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )" } }, "speckle.converters.rhino8": { "type": "Project", "dependencies": { - "RhinoCommon": "[8.9.24194.18121, )", "Speckle.Converters.Common": "[1.0.0, )" } }, - "GrasshopperAsyncComponent": { - "type": "CentralTransitive", - "requested": "[2.0.3, )", - "resolved": "2.0.3", - "contentHash": "AZvHP96WhYZWftVi7J3J65LiZmXO3hGS6W4AntMMb099gkrLqeiBKC2DOYD6YM9cOyQqly3S5knbUL2yr0jc4Q==", - "dependencies": { - "PolySharp": "1.14.1" - } - }, "Microsoft.Extensions.DependencyInjection": { "type": "CentralTransitive", "requested": "[2.2.0, )", - "resolved": "8.0.0", - "contentHash": "V8S3bsm50ig6JSyrbcJJ8bW2b9QLGouz+G1miK3UTaOWmMtFwNNNzUf4AleyDWUmTrWMLNnFSLEQtxmxgNQnNQ==", + "resolved": "2.2.0", + "contentHash": "MZtBIwfDFork5vfjpJdG5g8wuJFt7d/y3LOSVVtDK/76wlbtz6cjltfKHqLx2TKVqTj5/c41t77m1+h20zqtPA==", "dependencies": { - "Microsoft.Bcl.AsyncInterfaces": "8.0.0", - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", - "System.Threading.Tasks.Extensions": "4.5.4" + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0" } }, "Microsoft.Extensions.Logging": { "type": "CentralTransitive", "requested": "[2.2.0, )", - "resolved": "8.0.0", - "contentHash": "tvRkov9tAJ3xP51LCv3FJ2zINmv1P8Hi8lhhtcKGqM+ImiTCC84uOPEI4z8Cdq2C3o9e+Aa0Gw0rmrsJD77W+w==", + "resolved": "2.2.0", + "contentHash": "Nxqhadc9FCmFHzU+fz3oc8sFlE6IadViYg8dfUdGzJZ2JUxnCsRghBhhOWdM4B2zSZqEc+0BjliBh/oNdRZuig==", "dependencies": { - "Microsoft.Bcl.AsyncInterfaces": "8.0.0", - "Microsoft.Extensions.DependencyInjection": "8.0.0", - "Microsoft.Extensions.Logging.Abstractions": "8.0.0", - "Microsoft.Extensions.Options": "8.0.0", - "System.Diagnostics.DiagnosticSource": "8.0.0", - "System.ValueTuple": "4.5.0" + "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": "8.0.0", - "contentHash": "arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", - "System.Buffers": "4.5.1", - "System.Memory": "4.5.5" - } + "resolved": "2.2.0", + "contentHash": "B2WqEox8o+4KUOpL7rZPyh6qYjik8tHi2tN8Z9jZkHzED8ElYgZa/h6K+xliB435SqUcWT290Fr2aa8BtZjn8A==" }, "Microsoft.Web.WebView2": { "type": "CentralTransitive", @@ -438,16 +330,6 @@ "resolved": "1.0.1938.49", "contentHash": "z8KnFnaTYzhA/ZnyRX0qGfS1NU5ZBJeClAH64F0fVDvdDJTvME7xl6zTJ0Jlfe1BtL3C0NH9xTy64shg2baKdw==" }, - "Serilog": { - "type": "CentralTransitive", - "requested": "[4.0.1, )", - "resolved": "4.0.0", - "contentHash": "2jDkUrSh5EofOp7Lx5Zgy0EB+7hXjjxE2ktTb1WVQmU00lDACR2TdROGKU0K1pDTBSJBN1PqgYpgOZF8mL7NJw==", - "dependencies": { - "System.Diagnostics.DiagnosticSource": "8.0.1", - "System.Threading.Channels": "8.0.0" - } - }, "Speckle.DoubleNumerics": { "type": "CentralTransitive", "requested": "[4.1.0, )", @@ -456,58 +338,33 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "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.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" - }, - "System.Resources.Extensions": { - "type": "CentralTransitive", - "requested": "[9.0.4, )", - "resolved": "9.0.4", - "contentHash": "X1oj5i1gy6O4TDU8Z48djqbDJJz4qkT+LgvD0Z2pbCsXieJNms9H5yBbvahXdEJad07Ntai5bST4J5XWoNmMsg==", - "dependencies": { - "System.Formats.Nrbf": "9.0.4", - "System.Memory": "4.5.5" - } - } - }, - ".NETFramework,Version=v4.8/win7-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==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" } } } diff --git a/Local.sln b/Local.sln index 194548af1..b8d765457 100644 --- a/Local.sln +++ b/Local.sln @@ -230,6 +230,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Connectors.Grasshop EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Connectors.Rhino8", "Connectors\Rhino\Speckle.Connectors.Rhino8\Speckle.Connectors.Rhino8.csproj", "{5807B4F7-5CCB-E01D-A024-0E8BEFE0D7F0}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Connectors.RhinoImporter", "Connectors\Rhino\Speckle.Connectors.RhinoImporter\Speckle.Connectors.RhinoImporter.csproj", "{90EFBF9F-FED4-BD4B-DD87-F3F184C1D073}" +EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Converters.Rhino8", "Converters\Rhino\Speckle.Converters.Rhino8\Speckle.Converters.Rhino8.csproj", "{0D2A2F22-EAB0-802A-7ECE-AB012CE69B8D}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Shared", "Shared", "{515D0695-DED8-6A19-72D5-7E987736EE52}" @@ -281,6 +283,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Importers.Ifc", "Im EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Rhino", "Rhino", "{8F2BAB74-BA0A-005A-0FF9-9498950E3ADC}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Importers.JobProcessor", "Importers\Rhino\Speckle.Importers.JobProcessor\Speckle.Importers.JobProcessor.csproj", "{391676A9-0E05-9346-FDB9-4F5296F00509}" +EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Importers.Rhino", "Importers\Rhino\Speckle.Importers.Rhino\Speckle.Importers.Rhino.csproj", "{A9B240B9-4F3D-DB41-CB33-BD2019BBCCF2}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Sdk", "Sdk", "{FF13A09E-0E72-1904-124B-A4E979EF28D3}" @@ -307,11 +311,11 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Performance", "Sdk\ EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Testing", "Sdk\Speckle.Testing\Speckle.Testing.csproj", "{02E79865-6261-CDE0-77EA-3DD2E01DACBD}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "..\speckle-sharp-sdk\src\Speckle.Objects\Speckle.Objects", "..\speckle-sharp-sdk\src\Speckle.Objects\Speckle.Objects.csproj", "{FBD58ABD-9704-C232-7CF3-D96EC5CFCBE6}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Objects", "..\speckle-sharp-sdk\src\Speckle.Objects\Speckle.Objects.csproj", "{FBD58ABD-9704-C232-7CF3-D96EC5CFCBE6}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "..\speckle-sharp-sdk\src\Speckle.Sdk\Speckle.Sdk", "..\speckle-sharp-sdk\src\Speckle.Sdk\Speckle.Sdk.csproj", "{0201A282-BEFA-8897-C535-03EBAC94870B}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Sdk", "..\speckle-sharp-sdk\src\Speckle.Sdk\Speckle.Sdk.csproj", "{0201A282-BEFA-8897-C535-03EBAC94870B}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "..\speckle-sharp-sdk\src\Speckle.Sdk.Dependencies\Speckle.Sdk.Dependencies", "..\speckle-sharp-sdk\src\Speckle.Sdk.Dependencies\Speckle.Sdk.Dependencies.csproj", "{0677CA87-027F-D526-4463-3517F75B76EC}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Sdk.Dependencies", "..\speckle-sharp-sdk\src\Speckle.Sdk.Dependencies\Speckle.Sdk.Dependencies.csproj", "{0677CA87-027F-D526-4463-3517F75B76EC}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -650,6 +654,12 @@ Global {5807B4F7-5CCB-E01D-A024-0E8BEFE0D7F0}.Local|Any CPU.Build.0 = Local|Any CPU {5807B4F7-5CCB-E01D-A024-0E8BEFE0D7F0}.Release|Any CPU.ActiveCfg = Release|Any CPU {5807B4F7-5CCB-E01D-A024-0E8BEFE0D7F0}.Release|Any CPU.Build.0 = Release|Any CPU + {90EFBF9F-FED4-BD4B-DD87-F3F184C1D073}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {90EFBF9F-FED4-BD4B-DD87-F3F184C1D073}.Debug|Any CPU.Build.0 = Debug|Any CPU + {90EFBF9F-FED4-BD4B-DD87-F3F184C1D073}.Local|Any CPU.ActiveCfg = Local|Any CPU + {90EFBF9F-FED4-BD4B-DD87-F3F184C1D073}.Local|Any CPU.Build.0 = Local|Any CPU + {90EFBF9F-FED4-BD4B-DD87-F3F184C1D073}.Release|Any CPU.ActiveCfg = Release|Any CPU + {90EFBF9F-FED4-BD4B-DD87-F3F184C1D073}.Release|Any CPU.Build.0 = Release|Any CPU {0D2A2F22-EAB0-802A-7ECE-AB012CE69B8D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {0D2A2F22-EAB0-802A-7ECE-AB012CE69B8D}.Debug|Any CPU.Build.0 = Debug|Any CPU {0D2A2F22-EAB0-802A-7ECE-AB012CE69B8D}.Local|Any CPU.ActiveCfg = Local|Any CPU @@ -710,6 +720,12 @@ Global {9F11639F-3AB6-867F-7968-FFF8BFD8C410}.Local|Any CPU.Build.0 = Local|Any CPU {9F11639F-3AB6-867F-7968-FFF8BFD8C410}.Release|Any CPU.ActiveCfg = Release|Any CPU {9F11639F-3AB6-867F-7968-FFF8BFD8C410}.Release|Any CPU.Build.0 = Release|Any CPU + {391676A9-0E05-9346-FDB9-4F5296F00509}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {391676A9-0E05-9346-FDB9-4F5296F00509}.Debug|Any CPU.Build.0 = Debug|Any CPU + {391676A9-0E05-9346-FDB9-4F5296F00509}.Local|Any CPU.ActiveCfg = Local|Any CPU + {391676A9-0E05-9346-FDB9-4F5296F00509}.Local|Any CPU.Build.0 = Local|Any CPU + {391676A9-0E05-9346-FDB9-4F5296F00509}.Release|Any CPU.ActiveCfg = Release|Any CPU + {391676A9-0E05-9346-FDB9-4F5296F00509}.Release|Any CPU.Build.0 = Release|Any CPU {A9B240B9-4F3D-DB41-CB33-BD2019BBCCF2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A9B240B9-4F3D-DB41-CB33-BD2019BBCCF2}.Debug|Any CPU.Build.0 = Debug|Any CPU {A9B240B9-4F3D-DB41-CB33-BD2019BBCCF2}.Local|Any CPU.ActiveCfg = Local|Any CPU @@ -904,6 +920,7 @@ Global {DB77E488-CD1B-681C-687F-AFA935E8E6A8} = {1FE9B3A2-9228-8E78-261C-2221B28F0E7B} {2DF824DD-0A2F-0B15-F225-B054C92BC4EA} = {DB77E488-CD1B-681C-687F-AFA935E8E6A8} {5807B4F7-5CCB-E01D-A024-0E8BEFE0D7F0} = {DB77E488-CD1B-681C-687F-AFA935E8E6A8} + {90EFBF9F-FED4-BD4B-DD87-F3F184C1D073} = {DB77E488-CD1B-681C-687F-AFA935E8E6A8} {0D2A2F22-EAB0-802A-7ECE-AB012CE69B8D} = {DB77E488-CD1B-681C-687F-AFA935E8E6A8} {515D0695-DED8-6A19-72D5-7E987736EE52} = {1FE9B3A2-9228-8E78-261C-2221B28F0E7B} {66FDCF46-2365-F12E-9F40-92E86543B5A2} = {515D0695-DED8-6A19-72D5-7E987736EE52} @@ -927,6 +944,7 @@ Global {9DC47E2F-957F-CECC-82C0-1BAD872F8E13} = {88E31408-0177-4235-0BE8-6C9C8103E392} {9F11639F-3AB6-867F-7968-FFF8BFD8C410} = {88E31408-0177-4235-0BE8-6C9C8103E392} {8F2BAB74-BA0A-005A-0FF9-9498950E3ADC} = {0B7587C3-F447-44C0-7126-E1085C8A32F4} + {391676A9-0E05-9346-FDB9-4F5296F00509} = {8F2BAB74-BA0A-005A-0FF9-9498950E3ADC} {A9B240B9-4F3D-DB41-CB33-BD2019BBCCF2} = {8F2BAB74-BA0A-005A-0FF9-9498950E3ADC} {9AA81E7A-C9BC-C56B-BE8F-55BC1D85EEBF} = {FF13A09E-0E72-1904-124B-A4E979EF28D3} {1BD0E5FD-D4B8-8018-08FE-E7DD4ABA741F} = {FF13A09E-0E72-1904-124B-A4E979EF28D3} diff --git a/Local.slnx b/Local.slnx index b63c77754..a2252b5d5 100644 --- a/Local.slnx +++ b/Local.slnx @@ -151,6 +151,7 @@ + @@ -184,6 +185,9 @@ + + + @@ -199,7 +203,7 @@ - - - + + + \ No newline at end of file diff --git a/Sdk/Speckle.Connectors.Common.Tests/Operations/SendOperationTests.cs b/Sdk/Speckle.Connectors.Common.Tests/Operations/SendOperationTests.cs index eddea617b..9685a7589 100644 --- a/Sdk/Speckle.Connectors.Common.Tests/Operations/SendOperationTests.cs +++ b/Sdk/Speckle.Connectors.Common.Tests/Operations/SendOperationTests.cs @@ -17,6 +17,7 @@ using Speckle.Sdk.Models; using Speckle.Sdk.Serialisation; using Speckle.Sdk.Serialisation.V2.Send; using Speckle.Testing; +using Version = Speckle.Sdk.Api.GraphQL.Models.Version; namespace Speckle.Connectors.Common.Tests.Operations; @@ -56,8 +57,8 @@ public class SendOperationTests : MoqTest var refs = new Dictionary(); var serializeProcessResults = new SerializeProcessResults(rootId, refs); threadContext - .Setup(x => x.RunOnThreadAsync(It.IsAny>>(), false)) - .ReturnsAsync((serializeProcessResults, versionId)); + .Setup(x => x.RunOnThreadAsync(It.IsAny>>(), false)) + .ReturnsAsync((serializeProcessResults, new Version() { id = versionId })); var sp = services.BuildServiceProvider(); @@ -124,10 +125,10 @@ public class SendOperationTests : MoqTest sendConversionCache.Setup(x => x.StoreSendResult(projectId, refs)); sendProgress.Setup(x => x.Begin()); - + const string EXPECTED_ID = "version123"; sendOperationVersionRecorder .Setup(x => x.RecordVersion(rootId, modelId, projectId, sourceApplication, null, account, ct)) - .ReturnsAsync("version"); + .ReturnsAsync(new Version() { id = EXPECTED_ID }); var sp = services.BuildServiceProvider(); @@ -152,6 +153,6 @@ public class SendOperationTests : MoqTest ct ); result.Should().Be(serializeProcessResults); - version.Should().Be("version"); + version.id.Should().Be(EXPECTED_ID); } } diff --git a/Sdk/Speckle.Connectors.Common.Tests/packages.lock.json b/Sdk/Speckle.Connectors.Common.Tests/packages.lock.json index cbb368c64..c03dfaf22 100644 --- a/Sdk/Speckle.Connectors.Common.Tests/packages.lock.json +++ b/Sdk/Speckle.Connectors.Common.Tests/packages.lock.json @@ -308,9 +308,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.0, )", - "Speckle.Sdk": "[3.5.0, )", - "Speckle.Sdk.Dependencies": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )", + "Speckle.Sdk": "[3.5.1, )", + "Speckle.Sdk.Dependencies": "[3.5.1, )" } }, "speckle.connectors.logging": { @@ -322,7 +322,7 @@ "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Moq": "[4.20.70, )", "NUnit": "[4.1.0, )", - "Speckle.Sdk": "[3.5.0, )" + "Speckle.Sdk": "[3.5.1, )" } }, "Microsoft.Extensions.Logging": { @@ -366,18 +366,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Data.Sqlite": "7.0.5", @@ -385,14 +385,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" } } } diff --git a/Sdk/Speckle.Connectors.Common/Connector.cs b/Sdk/Speckle.Connectors.Common/Connector.cs index e5e784da6..8e56dab2d 100644 --- a/Sdk/Speckle.Connectors.Common/Connector.cs +++ b/Sdk/Speckle.Connectors.Common/Connector.cs @@ -50,7 +50,7 @@ public static class Connector Headers: new() { { "X-Seq-ApiKey", "y5YnBp12ZE1Czh4tzZWn" } } ) ], - MinimumLevel: SpeckleLogLevel.Warning + MinimumLevel: SpeckleLogLevel.Information ), new SpeckleTracing( Console: false, diff --git a/Sdk/Speckle.Connectors.Common/Operations/SendOperation.cs b/Sdk/Speckle.Connectors.Common/Operations/SendOperation.cs index 1ba1667ed..d33461aaa 100644 --- a/Sdk/Speckle.Connectors.Common/Operations/SendOperation.cs +++ b/Sdk/Speckle.Connectors.Common/Operations/SendOperation.cs @@ -10,6 +10,7 @@ using Speckle.Sdk.Logging; using Speckle.Sdk.Models; using Speckle.Sdk.Serialisation; using Speckle.Sdk.Serialisation.V2.Send; +using Version = Speckle.Sdk.Api.GraphQL.Models.Version; namespace Speckle.Connectors.Common.Operations; @@ -36,7 +37,7 @@ public sealed class SendOperation( var buildResult = await Build(objects, sendInfo.ProjectId, onOperationProgressed, ct); // base object handler is separated, so we can do some testing on non-production databases // exact interface may want to be tweaked when we implement this - var (results, versionId) = await threadContext.RunOnWorkerAsync( + var (results, version) = await threadContext.RunOnWorkerAsync( () => Send( buildResult.RootObject, @@ -50,7 +51,7 @@ public sealed class SendOperation( ) ); ct.ThrowIfCancellationRequested(); - return new(results.RootId, versionId, results.ConvertedReferences, buildResult.ConversionResults); + return new(results.RootId, version.id, results.ConvertedReferences, buildResult.ConversionResults); } public async Task Build( @@ -68,7 +69,7 @@ public sealed class SendOperation( return buildResult; } - public async Task<(SerializeProcessResults, string)> Send( + public async Task<(SerializeProcessResults, Version)> Send( Base commitObject, string projectId, string modelId, @@ -103,7 +104,7 @@ public sealed class SendOperation( onOperationProgressed.Report(new("Linking version to model...", null)); // 8 - Create the version (commit) - var versionId = await sendOperationVersionRecorder.RecordVersion( + var version = await sendOperationVersionRecorder.RecordVersion( sendResult.RootId, modelId, projectId, @@ -113,7 +114,7 @@ public sealed class SendOperation( ct ); - return (sendResult, versionId); + return (sendResult, version); } } diff --git a/Sdk/Speckle.Connectors.Common/Operations/SendOperationVersionRecorder.cs b/Sdk/Speckle.Connectors.Common/Operations/SendOperationVersionRecorder.cs index d4155b52f..854b10d5d 100644 --- a/Sdk/Speckle.Connectors.Common/Operations/SendOperationVersionRecorder.cs +++ b/Sdk/Speckle.Connectors.Common/Operations/SendOperationVersionRecorder.cs @@ -2,13 +2,14 @@ using Speckle.Sdk.Api; using Speckle.Sdk.Api.GraphQL.Inputs; using Speckle.Sdk.Credentials; +using Version = Speckle.Sdk.Api.GraphQL.Models.Version; namespace Speckle.Connectors.Common.Operations; [GenerateAutoInterface] public class SendOperationVersionRecorder(IClientFactory clientFactory) : ISendOperationVersionRecorder { - public async Task RecordVersion( + public async Task RecordVersion( string rootId, string modelId, string projectId, @@ -31,6 +32,6 @@ public class SendOperationVersionRecorder(IClientFactory clientFactory) : ISendO ct ) .ConfigureAwait(true); - return x.id; + return x; } } diff --git a/Sdk/Speckle.Connectors.Common/packages.lock.json b/Sdk/Speckle.Connectors.Common/packages.lock.json index 21dae5bd8..c0f4567b3 100644 --- a/Sdk/Speckle.Connectors.Common/packages.lock.json +++ b/Sdk/Speckle.Connectors.Common/packages.lock.json @@ -44,18 +44,18 @@ }, "Speckle.Objects": { "type": "Direct", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Sdk": { "type": "Direct", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -65,14 +65,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "Direct", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" }, "GraphQL.Client": { "type": "Transitive", @@ -360,18 +360,18 @@ }, "Speckle.Objects": { "type": "Direct", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Sdk": { "type": "Direct", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Data.Sqlite": "7.0.5", @@ -379,14 +379,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "Direct", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" }, "GraphQL.Client": { "type": "Transitive", diff --git a/Sdk/Speckle.Converters.Common.Tests/packages.lock.json b/Sdk/Speckle.Converters.Common.Tests/packages.lock.json index c92a56c09..f99385928 100644 --- a/Sdk/Speckle.Converters.Common.Tests/packages.lock.json +++ b/Sdk/Speckle.Converters.Common.Tests/packages.lock.json @@ -322,7 +322,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.0, )" + "Speckle.Objects": "[3.5.1, )" } }, "speckle.testing": { @@ -331,7 +331,7 @@ "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Moq": "[4.20.70, )", "NUnit": "[4.1.0, )", - "Speckle.Sdk": "[3.5.0, )" + "Speckle.Sdk": "[3.5.1, )" } }, "Microsoft.Extensions.Logging": { @@ -360,18 +360,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Data.Sqlite": "7.0.5", @@ -379,14 +379,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" } } } diff --git a/Sdk/Speckle.Converters.Common/packages.lock.json b/Sdk/Speckle.Converters.Common/packages.lock.json index 12f9d9fc2..bff12e21c 100644 --- a/Sdk/Speckle.Converters.Common/packages.lock.json +++ b/Sdk/Speckle.Converters.Common/packages.lock.json @@ -41,11 +41,11 @@ }, "Speckle.Objects": { "type": "Direct", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "GraphQL.Client": { @@ -283,9 +283,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -295,14 +295,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" } }, "net8.0": { @@ -345,11 +345,11 @@ }, "Speckle.Objects": { "type": "Direct", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "k76bpvFvArisd0DbdtpLQbonkl57CYG3szD0sDw0fWZolh8nogw2hRrNL6U2KcrJqCvYVc+zGYSXTJfv9xgntA==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", "dependencies": { - "Speckle.Sdk": "3.5.0" + "Speckle.Sdk": "3.5.1" } }, "GraphQL.Client": { @@ -538,9 +538,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Data.Sqlite": "7.0.5", @@ -548,14 +548,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" } } } diff --git a/Sdk/Speckle.Testing/packages.lock.json b/Sdk/Speckle.Testing/packages.lock.json index 53a049d5a..200dad5f3 100644 --- a/Sdk/Speckle.Testing/packages.lock.json +++ b/Sdk/Speckle.Testing/packages.lock.json @@ -59,9 +59,9 @@ }, "Speckle.Sdk": { "type": "Direct", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "mOLFubk+co9rDtRLsB1wobvmkYaiEMvDV+3hRPlhnqe8WhV+vbBSjzj58EpKEprWXLwjyc0kVzsrvlM++PnL0g==", + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Data.Sqlite": "7.0.5", @@ -69,7 +69,7 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.0" + "Speckle.Sdk.Dependencies": "3.5.1" } }, "Castle.Core": { @@ -277,9 +277,9 @@ }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.0, )", - "resolved": "3.5.0", - "contentHash": "lPYk1E97tWJ5qO6B8F30VZ+vgOxMYQ5cspyUOALwWoyFloM1KZkvwyeBlm8FiQDx0su5KbTS4S10LQvnS2AqKg==" + "requested": "[3.5.1, )", + "resolved": "3.5.1", + "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" } } } diff --git a/Speckle.Autocad.slnx b/Speckle.Autocad.slnx index 83190546d..46cab5257 100644 --- a/Speckle.Autocad.slnx +++ b/Speckle.Autocad.slnx @@ -67,6 +67,9 @@ + + + diff --git a/Speckle.Civil3d.slnx b/Speckle.Civil3d.slnx index 83190546d..46cab5257 100644 --- a/Speckle.Civil3d.slnx +++ b/Speckle.Civil3d.slnx @@ -67,6 +67,9 @@ + + + diff --git a/Speckle.Connectors.sln b/Speckle.Connectors.sln index cd2ddecfe..56d1e3337 100644 --- a/Speckle.Connectors.sln +++ b/Speckle.Connectors.sln @@ -310,6 +310,10 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Rhino", "Rhino", "{CD0C216A EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Importers.Rhino", "Importers\Rhino\Speckle.Importers.Rhino\Speckle.Importers.Rhino.csproj", "{92F065BE-97E2-4192-B561-88A6A8CFA53F}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Importers.JobProcessor", "Importers\Rhino\Speckle.Importers.JobProcessor\Speckle.Importers.JobProcessor.csproj", "{1953F875-B271-484B-B589-3D4AC1288C2B}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Connectors.RhinoImporter", "Connectors\Rhino\Speckle.Connectors.RhinoImporter\Speckle.Connectors.RhinoImporter.csproj", "{5422F2C8-1E00-4DAE-BB01-65A17BE8CD68}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -779,6 +783,18 @@ Global {92F065BE-97E2-4192-B561-88A6A8CFA53F}.Local|Any CPU.Build.0 = Local|Any CPU {92F065BE-97E2-4192-B561-88A6A8CFA53F}.Release|Any CPU.ActiveCfg = Release|Any CPU {92F065BE-97E2-4192-B561-88A6A8CFA53F}.Release|Any CPU.Build.0 = Release|Any CPU + {1953F875-B271-484B-B589-3D4AC1288C2B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1953F875-B271-484B-B589-3D4AC1288C2B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1953F875-B271-484B-B589-3D4AC1288C2B}.Local|Any CPU.ActiveCfg = Debug|Any CPU + {1953F875-B271-484B-B589-3D4AC1288C2B}.Local|Any CPU.Build.0 = Debug|Any CPU + {1953F875-B271-484B-B589-3D4AC1288C2B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1953F875-B271-484B-B589-3D4AC1288C2B}.Release|Any CPU.Build.0 = Release|Any CPU + {5422F2C8-1E00-4DAE-BB01-65A17BE8CD68}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5422F2C8-1E00-4DAE-BB01-65A17BE8CD68}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5422F2C8-1E00-4DAE-BB01-65A17BE8CD68}.Local|Any CPU.ActiveCfg = Local|Any CPU + {5422F2C8-1E00-4DAE-BB01-65A17BE8CD68}.Local|Any CPU.Build.0 = Local|Any CPU + {5422F2C8-1E00-4DAE-BB01-65A17BE8CD68}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5422F2C8-1E00-4DAE-BB01-65A17BE8CD68}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -918,6 +934,8 @@ Global {60445031-CCEE-4421-83C0-BB10BEF7B7F2} = {FC224610-32D3-454E-9BC1-1219FE8ACD5F} {CD0C216A-2A96-4423-956E-3DDFCAEA510C} = {336F0341-5C39-40F7-9377-122FED4E4549} {92F065BE-97E2-4192-B561-88A6A8CFA53F} = {CD0C216A-2A96-4423-956E-3DDFCAEA510C} + {1953F875-B271-484B-B589-3D4AC1288C2B} = {CD0C216A-2A96-4423-956E-3DDFCAEA510C} + {5422F2C8-1E00-4DAE-BB01-65A17BE8CD68} = {5929C9C7-F971-449E-BC5B-4486016BD11F} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {EE253116-7070-4E9A-BCE8-2911C251B8C8} diff --git a/Speckle.Connectors.slnx b/Speckle.Connectors.slnx index 8fb52b854..5372f2120 100644 --- a/Speckle.Connectors.slnx +++ b/Speckle.Connectors.slnx @@ -151,6 +151,7 @@ + @@ -184,6 +185,9 @@ + + + diff --git a/Speckle.Etabs.slnx b/Speckle.Etabs.slnx index fca70cba5..3aa933461 100644 --- a/Speckle.Etabs.slnx +++ b/Speckle.Etabs.slnx @@ -43,6 +43,9 @@ + + + diff --git a/Speckle.Navisworks.slnx b/Speckle.Navisworks.slnx index 99a832308..784ef2c93 100644 --- a/Speckle.Navisworks.slnx +++ b/Speckle.Navisworks.slnx @@ -63,6 +63,9 @@ + + + diff --git a/Speckle.Revit.Local.slnx b/Speckle.Revit.Local.slnx index b4755f4e1..055eadf0b 100644 --- a/Speckle.Revit.Local.slnx +++ b/Speckle.Revit.Local.slnx @@ -58,6 +58,9 @@ + + + @@ -73,7 +76,7 @@ - - - + + + \ No newline at end of file diff --git a/Speckle.Revit.slnx b/Speckle.Revit.slnx index 4c2ab58f6..528b29cb9 100644 --- a/Speckle.Revit.slnx +++ b/Speckle.Revit.slnx @@ -58,6 +58,9 @@ + + + diff --git a/Speckle.Rhino-importer.slnx b/Speckle.Rhino-importer.slnx new file mode 100644 index 000000000..5adab161d --- /dev/null +++ b/Speckle.Rhino-importer.slnx @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Speckle.Rhino.slnx b/Speckle.Rhino.slnx index 12ab34290..006d9755b 100644 --- a/Speckle.Rhino.slnx +++ b/Speckle.Rhino.slnx @@ -32,6 +32,7 @@ + @@ -46,6 +47,9 @@ + + + diff --git a/Speckle.Teklastructures.slnx b/Speckle.Teklastructures.slnx index 962516712..58b2094c4 100644 --- a/Speckle.Teklastructures.slnx +++ b/Speckle.Teklastructures.slnx @@ -47,6 +47,9 @@ + + +