Compare commits
71 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 66c73e17bf | |||
| f03c4c00a3 | |||
| 607c5dc58d | |||
| dc94724800 | |||
| 62835613e6 | |||
| 6f88da92bb | |||
| 083548b33c | |||
| 20bc675ad2 | |||
| fe3d4e5544 | |||
| ff5cdf47df | |||
| c04cdacef9 | |||
| ee32f320ee | |||
| 57ede4cabd | |||
| dc575a9f78 | |||
| 41e1faf655 | |||
| e4b26c92fd | |||
| 12ea8a4597 | |||
| 0023ab1622 | |||
| c5a6208f7e | |||
| 35a185c65f | |||
| 1796cacee6 | |||
| 9f99cb593f | |||
| df4c065dfe | |||
| edb022f7c5 | |||
| 27a7d72de3 | |||
| 678f113d05 | |||
| 92da66bbbb | |||
| 79a5228899 | |||
| 4d9411de42 | |||
| 3780747992 | |||
| 4514b1b831 | |||
| 2bbbbf6204 | |||
| e1b5dea3f7 | |||
| 2d2c274030 | |||
| 81dd72a281 | |||
| b82349478c | |||
| 7d0690f7a0 | |||
| 62a0cb895d | |||
| f28ce73d33 | |||
| 15425c5328 | |||
| 7c645e3c51 | |||
| 795d068175 | |||
| 90c2bd2873 | |||
| bd7a3c7c43 | |||
| ea976309bc | |||
| 1b5787274a | |||
| 7e595deabc | |||
| 66091b2b73 | |||
| 4f8d8d4f07 | |||
| 4fba12f966 | |||
| 348975c33d | |||
| cd6888868e | |||
| f2d4e64005 | |||
| a92b88f6d3 | |||
| abfdbdeffa | |||
| efe66e7e98 | |||
| c3fa1bb0dc | |||
| e487981e5b | |||
| 9a6dda629b | |||
| 46e7d6e432 | |||
| b9f4845fa7 | |||
| 36863efc5a | |||
| a0ce883a3f | |||
| bc0fe17d08 | |||
| 2e52409db6 | |||
| f434cde7b3 | |||
| 3e596cac29 | |||
| 876d5c1bfe | |||
| 7f3b23e71e | |||
| 9b0a6c3202 | |||
| de662e4a2b |
@@ -7,7 +7,7 @@ jobs:
|
||||
runs-on: windows-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
@@ -28,7 +28,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@ jobs:
|
||||
file_version: ${{ steps.set-version.outputs.file_version }}
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
@@ -83,7 +83,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
|
||||
@@ -259,9 +259,9 @@
|
||||
"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.Objects": "[3.5.2, )",
|
||||
"Speckle.Sdk": "[3.5.2, )",
|
||||
"Speckle.Sdk.Dependencies": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"speckle.connectors.dui": {
|
||||
@@ -292,7 +292,7 @@
|
||||
"type": "Project",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )",
|
||||
"Speckle.Objects": "[3.5.1, )"
|
||||
"Speckle.Objects": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.DependencyInjection": {
|
||||
@@ -336,18 +336,18 @@
|
||||
},
|
||||
"Speckle.Objects": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==",
|
||||
"dependencies": {
|
||||
"Speckle.Sdk": "3.5.1"
|
||||
"Speckle.Sdk": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==",
|
||||
"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.1"
|
||||
"Speckle.Sdk.Dependencies": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk.Dependencies": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA=="
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw=="
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -259,9 +259,9 @@
|
||||
"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.Objects": "[3.5.2, )",
|
||||
"Speckle.Sdk": "[3.5.2, )",
|
||||
"Speckle.Sdk.Dependencies": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"speckle.connectors.dui": {
|
||||
@@ -292,7 +292,7 @@
|
||||
"type": "Project",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )",
|
||||
"Speckle.Objects": "[3.5.1, )"
|
||||
"Speckle.Objects": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.DependencyInjection": {
|
||||
@@ -336,18 +336,18 @@
|
||||
},
|
||||
"Speckle.Objects": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==",
|
||||
"dependencies": {
|
||||
"Speckle.Sdk": "3.5.1"
|
||||
"Speckle.Sdk": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==",
|
||||
"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.1"
|
||||
"Speckle.Sdk.Dependencies": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk.Dependencies": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA=="
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw=="
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -259,9 +259,9 @@
|
||||
"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.Objects": "[3.5.2, )",
|
||||
"Speckle.Sdk": "[3.5.2, )",
|
||||
"Speckle.Sdk.Dependencies": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"speckle.connectors.dui": {
|
||||
@@ -293,7 +293,7 @@
|
||||
"type": "Project",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )",
|
||||
"Speckle.Objects": "[3.5.1, )"
|
||||
"Speckle.Objects": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.DependencyInjection": {
|
||||
@@ -337,18 +337,18 @@
|
||||
},
|
||||
"Speckle.Objects": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==",
|
||||
"dependencies": {
|
||||
"Speckle.Sdk": "3.5.1"
|
||||
"Speckle.Sdk": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==",
|
||||
"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.1"
|
||||
"Speckle.Sdk.Dependencies": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk.Dependencies": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA=="
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw=="
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -210,9 +210,9 @@
|
||||
"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.Objects": "[3.5.2, )",
|
||||
"Speckle.Sdk": "[3.5.2, )",
|
||||
"Speckle.Sdk.Dependencies": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"speckle.connectors.dui": {
|
||||
@@ -244,7 +244,7 @@
|
||||
"type": "Project",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )",
|
||||
"Speckle.Objects": "[3.5.1, )"
|
||||
"Speckle.Objects": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.DependencyInjection": {
|
||||
@@ -288,18 +288,18 @@
|
||||
},
|
||||
"Speckle.Objects": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==",
|
||||
"dependencies": {
|
||||
"Speckle.Sdk": "3.5.1"
|
||||
"Speckle.Sdk": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==",
|
||||
"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.1"
|
||||
"Speckle.Sdk.Dependencies": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk.Dependencies": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA=="
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw=="
|
||||
}
|
||||
},
|
||||
"net8.0-windows7.0/win-x64": {
|
||||
|
||||
@@ -210,9 +210,9 @@
|
||||
"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.Objects": "[3.5.2, )",
|
||||
"Speckle.Sdk": "[3.5.2, )",
|
||||
"Speckle.Sdk.Dependencies": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"speckle.connectors.dui": {
|
||||
@@ -244,7 +244,7 @@
|
||||
"type": "Project",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )",
|
||||
"Speckle.Objects": "[3.5.1, )"
|
||||
"Speckle.Objects": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.DependencyInjection": {
|
||||
@@ -288,18 +288,18 @@
|
||||
},
|
||||
"Speckle.Objects": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==",
|
||||
"dependencies": {
|
||||
"Speckle.Sdk": "3.5.1"
|
||||
"Speckle.Sdk": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==",
|
||||
"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.1"
|
||||
"Speckle.Sdk.Dependencies": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk.Dependencies": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA=="
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw=="
|
||||
}
|
||||
},
|
||||
"net8.0-windows7.0/win-x64": {
|
||||
|
||||
@@ -268,9 +268,9 @@
|
||||
"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.Objects": "[3.5.2, )",
|
||||
"Speckle.Sdk": "[3.5.2, )",
|
||||
"Speckle.Sdk.Dependencies": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"speckle.connectors.dui": {
|
||||
@@ -302,7 +302,7 @@
|
||||
"type": "Project",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )",
|
||||
"Speckle.Objects": "[3.5.1, )"
|
||||
"Speckle.Objects": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.DependencyInjection": {
|
||||
@@ -346,18 +346,18 @@
|
||||
},
|
||||
"Speckle.Objects": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==",
|
||||
"dependencies": {
|
||||
"Speckle.Sdk": "3.5.1"
|
||||
"Speckle.Sdk": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==",
|
||||
"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.1"
|
||||
"Speckle.Sdk.Dependencies": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk.Dependencies": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA=="
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw=="
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -268,9 +268,9 @@
|
||||
"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.Objects": "[3.5.2, )",
|
||||
"Speckle.Sdk": "[3.5.2, )",
|
||||
"Speckle.Sdk.Dependencies": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"speckle.connectors.dui": {
|
||||
@@ -302,7 +302,7 @@
|
||||
"type": "Project",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )",
|
||||
"Speckle.Objects": "[3.5.1, )"
|
||||
"Speckle.Objects": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.DependencyInjection": {
|
||||
@@ -346,18 +346,18 @@
|
||||
},
|
||||
"Speckle.Objects": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==",
|
||||
"dependencies": {
|
||||
"Speckle.Sdk": "3.5.1"
|
||||
"Speckle.Sdk": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==",
|
||||
"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.1"
|
||||
"Speckle.Sdk.Dependencies": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk.Dependencies": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA=="
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw=="
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -268,9 +268,9 @@
|
||||
"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.Objects": "[3.5.2, )",
|
||||
"Speckle.Sdk": "[3.5.2, )",
|
||||
"Speckle.Sdk.Dependencies": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"speckle.connectors.dui": {
|
||||
@@ -302,7 +302,7 @@
|
||||
"type": "Project",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )",
|
||||
"Speckle.Objects": "[3.5.1, )"
|
||||
"Speckle.Objects": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.DependencyInjection": {
|
||||
@@ -346,18 +346,18 @@
|
||||
},
|
||||
"Speckle.Objects": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==",
|
||||
"dependencies": {
|
||||
"Speckle.Sdk": "3.5.1"
|
||||
"Speckle.Sdk": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==",
|
||||
"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.1"
|
||||
"Speckle.Sdk.Dependencies": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk.Dependencies": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA=="
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw=="
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -219,9 +219,9 @@
|
||||
"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.Objects": "[3.5.2, )",
|
||||
"Speckle.Sdk": "[3.5.2, )",
|
||||
"Speckle.Sdk.Dependencies": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"speckle.connectors.dui": {
|
||||
@@ -254,7 +254,7 @@
|
||||
"type": "Project",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )",
|
||||
"Speckle.Objects": "[3.5.1, )"
|
||||
"Speckle.Objects": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.DependencyInjection": {
|
||||
@@ -298,18 +298,18 @@
|
||||
},
|
||||
"Speckle.Objects": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==",
|
||||
"dependencies": {
|
||||
"Speckle.Sdk": "3.5.1"
|
||||
"Speckle.Sdk": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==",
|
||||
"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.1"
|
||||
"Speckle.Sdk.Dependencies": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk.Dependencies": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA=="
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw=="
|
||||
}
|
||||
},
|
||||
"net8.0-windows7.0/win-x64": {
|
||||
|
||||
@@ -219,9 +219,9 @@
|
||||
"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.Objects": "[3.5.2, )",
|
||||
"Speckle.Sdk": "[3.5.2, )",
|
||||
"Speckle.Sdk.Dependencies": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"speckle.connectors.dui": {
|
||||
@@ -254,7 +254,7 @@
|
||||
"type": "Project",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )",
|
||||
"Speckle.Objects": "[3.5.1, )"
|
||||
"Speckle.Objects": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.DependencyInjection": {
|
||||
@@ -298,18 +298,18 @@
|
||||
},
|
||||
"Speckle.Objects": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==",
|
||||
"dependencies": {
|
||||
"Speckle.Sdk": "3.5.1"
|
||||
"Speckle.Sdk": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==",
|
||||
"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.1"
|
||||
"Speckle.Sdk.Dependencies": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk.Dependencies": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA=="
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw=="
|
||||
}
|
||||
},
|
||||
"net8.0-windows7.0/win-x64": {
|
||||
|
||||
@@ -96,7 +96,7 @@ public class CsiSharedSelectionBinding : ISelectionBinding, IDisposable
|
||||
var typeKey = (ModelObjectType)objectType[i];
|
||||
var typeName = typeKey.ToString();
|
||||
encodedIds.Add(ObjectIdentifier.Encode(objectType[i], objectName[i]));
|
||||
typeCounts[typeName] = (typeCounts.TryGetValue(typeName, out var count) ? count : 0) + 1; // NOTE: Cross-framework compatibility (net 48 and net8)
|
||||
typeCounts[typeName] = (typeCounts.TryGetValue(typeName, out var count) ? count : 0) + 1;
|
||||
}
|
||||
var summary =
|
||||
encodedIds.Count == 0
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Speckle.Connectors.Common.Cancellation;
|
||||
using Speckle.Connectors.CSiShared.HostApp;
|
||||
using Speckle.Connectors.CSiShared.Operations.Send.Settings;
|
||||
using Speckle.Connectors.CSiShared.Settings;
|
||||
using Speckle.Connectors.CSiShared.Utils;
|
||||
using Speckle.Connectors.DUI.Bindings;
|
||||
using Speckle.Connectors.DUI.Bridge;
|
||||
@@ -23,6 +25,7 @@ public sealed class CsiSharedSendBinding : ISendBinding
|
||||
private readonly ICsiApplicationService _csiApplicationService;
|
||||
private readonly ICsiConversionSettingsFactory _csiConversionSettingsFactory;
|
||||
private readonly ISendOperationManagerFactory _sendOperationManagerFactory;
|
||||
private readonly ToSpeckleSettingsManager _toSpeckleSettingsManager;
|
||||
|
||||
public CsiSharedSendBinding(
|
||||
IBrowserBridge parent,
|
||||
@@ -30,7 +33,8 @@ public sealed class CsiSharedSendBinding : ISendBinding
|
||||
ICancellationManager cancellationManager,
|
||||
ICsiConversionSettingsFactory csiConversionSettingsFactory,
|
||||
ICsiApplicationService csiApplicationService,
|
||||
ISendOperationManagerFactory sendOperationManagerFactory
|
||||
ISendOperationManagerFactory sendOperationManagerFactory,
|
||||
ToSpeckleSettingsManager toSpeckleSettingsManager
|
||||
)
|
||||
{
|
||||
_sendFilters = sendFilters.ToList();
|
||||
@@ -40,11 +44,13 @@ public sealed class CsiSharedSendBinding : ISendBinding
|
||||
_csiConversionSettingsFactory = csiConversionSettingsFactory;
|
||||
_csiApplicationService = csiApplicationService;
|
||||
_sendOperationManagerFactory = sendOperationManagerFactory;
|
||||
_toSpeckleSettingsManager = toSpeckleSettingsManager;
|
||||
}
|
||||
|
||||
public List<ISendFilter> GetSendFilters() => _sendFilters;
|
||||
|
||||
public List<ICardSetting> GetSendSettings() => [];
|
||||
public List<ICardSetting> GetSendSettings() =>
|
||||
[new LoadCaseCombinationSetting([], _csiApplicationService.SapModel), new ResultTypeSetting([])];
|
||||
|
||||
public async Task Send(string modelCardId)
|
||||
{
|
||||
@@ -52,9 +58,17 @@ public sealed class CsiSharedSendBinding : ISendBinding
|
||||
await manager.Process(
|
||||
Commands,
|
||||
modelCardId,
|
||||
(sp, _) =>
|
||||
(sp, card) =>
|
||||
{
|
||||
sp.GetRequiredService<IConverterSettingsStore<CsiConversionSettings>>()
|
||||
.Initialize(_csiConversionSettingsFactory.Create(_csiApplicationService.SapModel)),
|
||||
.Initialize(
|
||||
_csiConversionSettingsFactory.Create(
|
||||
_csiApplicationService.SapModel,
|
||||
_toSpeckleSettingsManager.GetLoadCasesAndCombinations(card),
|
||||
_toSpeckleSettingsManager.GetResultTypes(card)
|
||||
)
|
||||
);
|
||||
},
|
||||
card => card.SendFilter.NotNull().RefreshObjectIds().Select(DecodeObjectIdentifier).ToList()
|
||||
);
|
||||
}
|
||||
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Speckle.Converters.CSiShared.ToSpeckle.Helpers;
|
||||
using Speckle.Converters.CSiShared.Utils;
|
||||
|
||||
namespace Speckle.Connectors.CSiShared.HostApp.Helpers;
|
||||
|
||||
public class CsiResultsExtractorFactory
|
||||
{
|
||||
private readonly IServiceProvider _serviceProvider;
|
||||
|
||||
public CsiResultsExtractorFactory(IServiceProvider serviceProvider)
|
||||
{
|
||||
_serviceProvider = serviceProvider;
|
||||
}
|
||||
|
||||
public IApplicationResultsExtractor GetExtractor(string resultsKey) =>
|
||||
resultsKey switch
|
||||
{
|
||||
ResultsKey.BASE_REACT => _serviceProvider.GetRequiredService<CsiBaseReactResultsExtractor>(),
|
||||
ResultsKey.FRAME_FORCES => _serviceProvider.GetRequiredService<CsiFrameForceResultsExtractor>(),
|
||||
ResultsKey.JOINT_REACT => _serviceProvider.GetRequiredService<CsiJointReactResultsExtractor>(),
|
||||
ResultsKey.PIER_FORCES => _serviceProvider.GetRequiredService<CsiPierForceResultsExtractor>(),
|
||||
ResultsKey.SPANDREL_FORCES => _serviceProvider.GetRequiredService<CsiSpandrelForceResultsExtractor>(),
|
||||
ResultsKey.STORY_DRIFTS => _serviceProvider.GetRequiredService<CsiStoryDriftsResultsExtractor>(),
|
||||
_ => throw new InvalidOperationException($"{resultsKey} not accounted for in CsiResultsExtractorFactory")
|
||||
};
|
||||
}
|
||||
+52
-1
@@ -4,9 +4,11 @@ using Speckle.Connectors.Common.Conversion;
|
||||
using Speckle.Connectors.Common.Operations;
|
||||
using Speckle.Connectors.CSiShared.HostApp;
|
||||
using Speckle.Connectors.CSiShared.HostApp.Helpers;
|
||||
using Speckle.Connectors.CSiShared.Utils;
|
||||
using Speckle.Converters.Common;
|
||||
using Speckle.Converters.CSiShared;
|
||||
using Speckle.Converters.CSiShared.Extensions;
|
||||
using Speckle.Converters.CSiShared.Utils;
|
||||
using Speckle.Sdk;
|
||||
using Speckle.Sdk.Logging;
|
||||
using Speckle.Sdk.Models;
|
||||
@@ -37,6 +39,7 @@ public class CsiRootObjectBuilder : IRootObjectBuilder<ICsiWrapper>
|
||||
private readonly ILogger<CsiRootObjectBuilder> _logger;
|
||||
private readonly ISdkActivityFactory _activityFactory;
|
||||
private readonly ICsiApplicationService _csiApplicationService;
|
||||
private readonly AnalysisResultsExtractor _analysisResultsExtractor;
|
||||
|
||||
public CsiRootObjectBuilder(
|
||||
IRootToSpeckleConverter rootToSpeckleConverter,
|
||||
@@ -46,7 +49,8 @@ public class CsiRootObjectBuilder : IRootObjectBuilder<ICsiWrapper>
|
||||
ISectionUnpacker sectionUnpacker,
|
||||
ILogger<CsiRootObjectBuilder> logger,
|
||||
ISdkActivityFactory activityFactory,
|
||||
ICsiApplicationService csiApplicationService
|
||||
ICsiApplicationService csiApplicationService,
|
||||
AnalysisResultsExtractor analysisResultsExtractor
|
||||
)
|
||||
{
|
||||
_converterSettings = converterSettings;
|
||||
@@ -57,6 +61,7 @@ public class CsiRootObjectBuilder : IRootObjectBuilder<ICsiWrapper>
|
||||
_logger = logger;
|
||||
_activityFactory = activityFactory;
|
||||
_csiApplicationService = csiApplicationService;
|
||||
_analysisResultsExtractor = analysisResultsExtractor;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -112,6 +117,34 @@ public class CsiRootObjectBuilder : IRootObjectBuilder<ICsiWrapper>
|
||||
rootObjectCollection[ProxyKeys.SECTION] = _sectionUnpacker.UnpackSections().ToList();
|
||||
}
|
||||
|
||||
// Extract analysis results (if applicable)
|
||||
// NOTE: objectSelectionSummary used to extract results for objects being published ONLY
|
||||
// NOTE: etabs is complicated and we can't get specifics from original selection
|
||||
var objectSelectionSummary = GetObjectSummary(csiObjects);
|
||||
var selectedCasesAndCombinations = _converterSettings.Current.SelectedLoadCasesAndCombinations;
|
||||
var requestedResultTypes = _converterSettings.Current.SelectedResultTypes;
|
||||
|
||||
if (selectedCasesAndCombinations?.Count > 0)
|
||||
{
|
||||
if (requestedResultTypes == null || requestedResultTypes.Count == 0)
|
||||
{
|
||||
throw new SpeckleException(
|
||||
"No result type input for the requested load cases and combinations. Adjust publish settings."
|
||||
);
|
||||
}
|
||||
|
||||
if (!_csiApplicationService.SapModel.GetModelIsLocked())
|
||||
{
|
||||
throw new SpeckleException("Model unlocked. No access to analysis results.");
|
||||
}
|
||||
|
||||
var analysisResults = _analysisResultsExtractor.ExtractAnalysisResults(
|
||||
selectedCasesAndCombinations,
|
||||
requestedResultTypes,
|
||||
objectSelectionSummary
|
||||
);
|
||||
rootObjectCollection["analysisResults"] = analysisResults;
|
||||
}
|
||||
return new RootObjectBuilderResult(rootObjectCollection, results);
|
||||
}
|
||||
|
||||
@@ -158,4 +191,22 @@ public class CsiRootObjectBuilder : IRootObjectBuilder<ICsiWrapper>
|
||||
return new(Status.ERROR, applicationId, sourceType, null, ex);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Generates a summary of object types and their associated names from the collection of CSI wrappers.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// A summary of object names for each object type is needed for getting analysis results of the selected objects only.
|
||||
/// During object conversion, however, we lose the selection (like a clear selection)(presumably because of other api calls).
|
||||
/// This has to be recreated since GetSelection() return type is bound by the interface.
|
||||
/// The LINQ-based implementation is computationally inexpensive as it operates on an already-loaded collection without additional API calls.
|
||||
/// Also, we don't want to rely on user selection remaining active, what if someone re-publishes using model card cache?
|
||||
/// </remarks>
|
||||
private Dictionary<ModelObjectType, List<string>> GetObjectSummary(IReadOnlyList<ICsiWrapper> csiObjects) =>
|
||||
csiObjects
|
||||
.GroupBy(csiObject => csiObject.ObjectType)
|
||||
.ToDictionary(
|
||||
group => group.Key, // ModelObjectType (FRAME, JOINT, etc.)
|
||||
group => group.Select(obj => obj.Name).ToList() // Extract Name from each ICsiWrapper and convert to List<string>
|
||||
);
|
||||
}
|
||||
|
||||
+73
@@ -0,0 +1,73 @@
|
||||
using Speckle.Connectors.Common.Caching;
|
||||
using Speckle.Connectors.DUI.Models.Card;
|
||||
using Speckle.InterfaceGenerator;
|
||||
using Speckle.Newtonsoft.Json.Linq;
|
||||
using Speckle.Sdk.Common;
|
||||
|
||||
namespace Speckle.Connectors.CSiShared.Operations.Send.Settings;
|
||||
|
||||
[GenerateAutoInterface]
|
||||
public class ToSpeckleSettingsManager : IToSpeckleSettingsManager
|
||||
{
|
||||
private readonly ISendConversionCache _sendConversionCache;
|
||||
private readonly Dictionary<string, List<string>?> _loadCaseCombinationCache = new();
|
||||
private readonly Dictionary<string, List<string>?> _resultTypeCache = new();
|
||||
|
||||
public ToSpeckleSettingsManager(ISendConversionCache sendConversionCache)
|
||||
{
|
||||
_sendConversionCache = sendConversionCache;
|
||||
}
|
||||
|
||||
public List<string> GetLoadCasesAndCombinations(SenderModelCard modelCard)
|
||||
{
|
||||
var setting = modelCard.Settings?.FirstOrDefault(s => s.Id == "loadCasesAndCombinations");
|
||||
var returnValue = (setting?.Value as JArray)?.Select(x => x.ToString()).ToList() ?? [];
|
||||
|
||||
if (_loadCaseCombinationCache.TryGetValue(modelCard.ModelCardId.NotNull(), out List<string>? previousValue))
|
||||
{
|
||||
if (!AreListsEqual(previousValue, returnValue))
|
||||
{
|
||||
EvictCacheForModelCard(modelCard);
|
||||
}
|
||||
}
|
||||
_loadCaseCombinationCache[modelCard.ModelCardId] = returnValue;
|
||||
return returnValue;
|
||||
}
|
||||
|
||||
public List<string> GetResultTypes(SenderModelCard modelCard)
|
||||
{
|
||||
var setting = modelCard.Settings?.FirstOrDefault(s => s.Id == "resultTypes");
|
||||
var returnValue = (setting?.Value as JArray)?.Select(x => x.ToString()).ToList() ?? [];
|
||||
|
||||
if (_resultTypeCache.TryGetValue(modelCard.ModelCardId.NotNull(), out List<string>? previousValue))
|
||||
{
|
||||
if (!AreListsEqual(previousValue, returnValue))
|
||||
{
|
||||
EvictCacheForModelCard(modelCard);
|
||||
}
|
||||
}
|
||||
_resultTypeCache[modelCard.ModelCardId] = returnValue;
|
||||
return returnValue;
|
||||
}
|
||||
|
||||
private static bool AreListsEqual(List<string>? list1, List<string>? list2)
|
||||
{
|
||||
if (list1 == null && list2 == null)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
if (list1 == null || list2 == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return list1.Count == list2.Count && list1.OrderBy(x => x).SequenceEqual(list2.OrderBy(x => x));
|
||||
}
|
||||
|
||||
private void EvictCacheForModelCard(SenderModelCard modelCard)
|
||||
{
|
||||
var objectIds = modelCard.SendFilter != null ? modelCard.SendFilter.NotNull().RefreshObjectIds() : [];
|
||||
_sendConversionCache.EvictObjects(objectIds);
|
||||
}
|
||||
}
|
||||
@@ -8,6 +8,8 @@ using Speckle.Connectors.CSiShared.Builders;
|
||||
using Speckle.Connectors.CSiShared.Filters;
|
||||
using Speckle.Connectors.CSiShared.HostApp;
|
||||
using Speckle.Connectors.CSiShared.HostApp.Helpers;
|
||||
using Speckle.Connectors.CSiShared.Operations.Send.Settings;
|
||||
using Speckle.Connectors.CSiShared.Utils;
|
||||
using Speckle.Connectors.DUI;
|
||||
using Speckle.Connectors.DUI.Bindings;
|
||||
using Speckle.Connectors.DUI.Bridge;
|
||||
@@ -44,13 +46,18 @@ public static class ServiceRegistration
|
||||
services.AddScoped<SendOperation<ICsiWrapper>>();
|
||||
|
||||
services.AddScoped<CsiMaterialPropertyExtractor>();
|
||||
services.AddScoped<CsiResultsExtractorFactory>();
|
||||
services.AddScoped<MaterialUnpacker>();
|
||||
services.AddScoped<IFrameSectionPropertyExtractor, CsiFrameSectionPropertyExtractor>();
|
||||
services.AddScoped<IShellSectionPropertyExtractor, CsiShellSectionPropertyExtractor>();
|
||||
services.AddScoped<AnalysisResultsExtractor>();
|
||||
|
||||
// add converter caches
|
||||
services.AddScoped<CsiToSpeckleCacheSingleton>();
|
||||
|
||||
// add settings manager
|
||||
services.AddScoped<ToSpeckleSettingsManager>();
|
||||
|
||||
return services;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
using Speckle.Connectors.CSiShared.Utils;
|
||||
using Speckle.Connectors.DUI.Settings;
|
||||
|
||||
namespace Speckle.Connectors.CSiShared.Settings;
|
||||
|
||||
public class LoadCaseCombinationSetting(List<string> values, cSapModel sapModel) : ICardSetting
|
||||
{
|
||||
public string? Id { get; set; } = "loadCasesAndCombinations";
|
||||
public string? Title { get; set; } = "Load Cases & Combinations";
|
||||
public string? Type { get; set; } = "array";
|
||||
public object? Value { get; set; } = values;
|
||||
public List<string>? Enum { get; set; } = LoadCaseHelper.GetLoadCasesAndCombinations(sapModel);
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
using Speckle.Connectors.DUI.Settings;
|
||||
using Speckle.Converters.CSiShared.Utils;
|
||||
|
||||
namespace Speckle.Connectors.CSiShared.Settings;
|
||||
|
||||
public class ResultTypeSetting(List<string> values) : ICardSetting
|
||||
{
|
||||
public string? Id { get; set; } = "resultTypes";
|
||||
public string? Title { get; set; } = "Result Type";
|
||||
public string? Type { get; set; } = "array";
|
||||
public object? Value { get; set; } = values;
|
||||
public List<string>? Enum { get; set; } = ResultsKey.All.OrderBy(x => x).ToList();
|
||||
}
|
||||
@@ -18,6 +18,7 @@
|
||||
<Compile Include="$(MSBuildThisFileDirectory)Bindings\CsiSharedSelectionBinding.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)Bindings\CsiSharedSendBinding.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)Filters\CsiSharedSelectionFilter.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)HostApp\Helpers\CsiResultsExtractorFactory.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)HostApp\MaterialUnpacker.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)HostApp\CsiSendCollectionManager.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)HostApp\Helpers\CsiFrameSectionPropertyExtractor.cs" />
|
||||
@@ -27,12 +28,17 @@
|
||||
<Compile Include="$(MSBuildThisFileDirectory)HostApp\Helpers\ISectionPropertyExtractor.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)HostApp\Helpers\ISectionUnpacker.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)Operations\Send\CsiRootObjectBuilder.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)Operations\Send\Settings\ToSpeckleSettingsManager.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)Plugin\CsiPluginBase.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)Plugin\SpeckleFormBase.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)GlobalUsing.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)HostApp\CsiApplicationService.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)HostApp\CsiDocumentModelStore.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)ServiceRegistration.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)Settings\LoadCaseCombinationSetting.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)Settings\ResultTypeSetting.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)Utils\LoadCaseHelper.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)Utils\AnalysisResultsExtractor.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)Utils\ObjectIdentifiers.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
|
||||
@@ -0,0 +1,184 @@
|
||||
using Speckle.Connectors.CSiShared.HostApp.Helpers;
|
||||
using Speckle.Converters.Common;
|
||||
using Speckle.Converters.CSiShared;
|
||||
using Speckle.Converters.CSiShared.Utils;
|
||||
using Speckle.Sdk;
|
||||
using Speckle.Sdk.Models;
|
||||
|
||||
namespace Speckle.Connectors.CSiShared.Utils;
|
||||
|
||||
public class AnalysisResultsExtractor
|
||||
{
|
||||
private readonly IConverterSettingsStore<CsiConversionSettings> _converterSettingsStore;
|
||||
private readonly CsiResultsExtractorFactory _resultsExtractorFactory;
|
||||
|
||||
public AnalysisResultsExtractor(
|
||||
IConverterSettingsStore<CsiConversionSettings> converterSettingsStore,
|
||||
CsiResultsExtractorFactory resultsExtractorFactory
|
||||
)
|
||||
{
|
||||
_converterSettingsStore = converterSettingsStore;
|
||||
_resultsExtractorFactory = resultsExtractorFactory;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Extracts complete analysis results including units retrieval, load case configuration, and results extraction.
|
||||
/// Assumes inputs have been validated by caller.
|
||||
/// </summary>
|
||||
public Base ExtractAnalysisResults(
|
||||
List<string> selectedCasesAndCombinations,
|
||||
List<string> requestedResultTypes,
|
||||
Dictionary<ModelObjectType, List<string>> objectSelectionSummary
|
||||
)
|
||||
{
|
||||
// Step 1: get analysis units
|
||||
var analysisResults = CreateAnalysisResultsWithUnits();
|
||||
|
||||
// Step 2: configure and validate load cases
|
||||
ConfigureAndValidateSelectedLoadCases(selectedCasesAndCombinations);
|
||||
|
||||
// Step 3: extract results using clean factory pattern
|
||||
ExtractResults(requestedResultTypes, objectSelectionSummary, analysisResults);
|
||||
|
||||
return analysisResults;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Instantiates a Base object and pre-populates it with the models defined force units.
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
/// <exception cref="SpeckleException"></exception>
|
||||
private Base CreateAnalysisResultsWithUnits()
|
||||
{
|
||||
var forceUnit = eForce.NotApplicable;
|
||||
var lengthUnit = eLength.NotApplicable;
|
||||
var temperatureUnit = eTemperature.NotApplicable;
|
||||
|
||||
int success = _converterSettingsStore.Current.SapModel.GetDatabaseUnits_2(
|
||||
ref forceUnit,
|
||||
ref lengthUnit,
|
||||
ref temperatureUnit
|
||||
);
|
||||
|
||||
if (success != 0)
|
||||
{
|
||||
throw new SpeckleException("Failed to retrieve units for analysis results");
|
||||
}
|
||||
|
||||
return new Base
|
||||
{
|
||||
["forceUnit"] = forceUnit.ToString(),
|
||||
["lengthUnit"] = lengthUnit.ToString(),
|
||||
["temperatureUnit"] = temperatureUnit.ToString()
|
||||
};
|
||||
}
|
||||
|
||||
private void ExtractResults(
|
||||
List<string> requestedResultTypes,
|
||||
Dictionary<ModelObjectType, List<string>> objectSelectionSummary,
|
||||
Base analysisResults
|
||||
)
|
||||
{
|
||||
foreach (var resultType in requestedResultTypes)
|
||||
{
|
||||
var extractor = _resultsExtractorFactory.GetExtractor(resultType);
|
||||
objectSelectionSummary.TryGetValue(extractor.TargetObjectType, out var objectNames);
|
||||
analysisResults[extractor.ResultsKey] = extractor.GetResults(objectNames);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Responsible for two things. Firstly, we need to setup the results so that only the requested cases and combinations
|
||||
/// are published. Secondly, we need to ensure that the requested cases and combinations are actually run.
|
||||
/// </summary>
|
||||
private void ConfigureAndValidateSelectedLoadCases(List<string> selectedLoadCases)
|
||||
{
|
||||
// step 1: configure load cases for output
|
||||
ConfigureSelectedLoadCases(selectedLoadCases);
|
||||
|
||||
// step 2: validate they are complete (throws on failure)
|
||||
ValidateSelectedCasesAreComplete(selectedLoadCases);
|
||||
}
|
||||
|
||||
private void ConfigureSelectedLoadCases(List<string> selectedLoadCases)
|
||||
{
|
||||
// deselect all load cases and combos
|
||||
_converterSettingsStore.Current.SapModel.Results.Setup.DeselectAllCasesAndCombosForOutput();
|
||||
|
||||
// ui presents cases and combinations as a flat list. we need to distinguish if the string is a case or combo
|
||||
// do this by seeing if the string is within the list of defined cases
|
||||
// typically defined load cases << defined load combinations, so this approach should be more efficient
|
||||
int numberOfLoadCases = 0;
|
||||
string[] loadCaseNames = [];
|
||||
_converterSettingsStore.Current.SapModel.LoadCases.GetNameList(ref numberOfLoadCases, ref loadCaseNames);
|
||||
|
||||
// set user selected combos to true (i.e. to export)
|
||||
foreach (var selectedLoadCase in selectedLoadCases)
|
||||
{
|
||||
int success = loadCaseNames.Contains(selectedLoadCase)
|
||||
? _converterSettingsStore.Current.SapModel.Results.Setup.SetCaseSelectedForOutput(selectedLoadCase)
|
||||
: _converterSettingsStore.Current.SapModel.Results.Setup.SetComboSelectedForOutput(selectedLoadCase);
|
||||
|
||||
// ui should only present valid options
|
||||
// `AnalysisResultsExtractor` only fetches load cases and load combinations (not patterns), so this should never throw
|
||||
if (success != 0)
|
||||
{
|
||||
throw new InvalidOperationException($"Failed to set {selectedLoadCase} for output.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void ValidateSelectedCasesAreComplete(List<string> selectedCasesAndCombinations)
|
||||
{
|
||||
// get status for all load cases (combinations not included in this API call)
|
||||
int numberItems = 0;
|
||||
string[] caseNames = [];
|
||||
int[] statuses = [];
|
||||
|
||||
int result = _converterSettingsStore.Current.SapModel.Analyze.GetCaseStatus(
|
||||
ref numberItems,
|
||||
ref caseNames,
|
||||
ref statuses
|
||||
);
|
||||
|
||||
if (result != 0)
|
||||
{
|
||||
throw new SpeckleException("Failed to retrieve load case status from model.");
|
||||
}
|
||||
|
||||
// build lookup dictionary for load cases only
|
||||
var caseStatusLookup = caseNames
|
||||
.Zip(statuses, (name, status) => new { name, status })
|
||||
.ToDictionary(x => x.name, x => x.status);
|
||||
|
||||
// separate selected items into cases and combinations
|
||||
var selectedCases = selectedCasesAndCombinations.Where(item => caseStatusLookup.ContainsKey(item)).ToList();
|
||||
var selectedCombinations = selectedCasesAndCombinations.Except(selectedCases).ToList();
|
||||
|
||||
// validate load cases status
|
||||
var notFinishedCases = new List<string>();
|
||||
foreach (var caseName in selectedCases)
|
||||
{
|
||||
int status = caseStatusLookup[caseName];
|
||||
if (status != 4) // 1 = Not run, 2 = Could not start, 3 = Not finished, 4 = Finished
|
||||
{
|
||||
notFinishedCases.Add($"{caseName}");
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: Validate load combinations status
|
||||
// for now, assume combinations are valid if we can't validate them
|
||||
if (selectedCombinations.Count != 0)
|
||||
{
|
||||
// combinations validation not implemented - assuming they're valid for now
|
||||
// it'll get complicated, we can't get the status of a combination, so we need to check the constituent cases
|
||||
}
|
||||
|
||||
if (notFinishedCases.Count != 0)
|
||||
{
|
||||
string errorMessage =
|
||||
$"Analysis not complete for load cases: {string.Join(", ", notFinishedCases)}. Run analysis first.";
|
||||
throw new SpeckleException(errorMessage);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
namespace Speckle.Connectors.CSiShared.Utils;
|
||||
|
||||
public static class LoadCaseHelper
|
||||
{
|
||||
public static List<string> GetLoadCasesAndCombinations(cSapModel sapModel)
|
||||
{
|
||||
var loadCasesAndCombos = new List<string>();
|
||||
|
||||
try
|
||||
{
|
||||
// Check if model is loaded to prevent crashes
|
||||
var modelFilename = sapModel.GetModelFilename();
|
||||
if (string.IsNullOrEmpty(modelFilename))
|
||||
{
|
||||
return loadCasesAndCombos; // Return empty list if no model
|
||||
}
|
||||
|
||||
// Get Load Cases
|
||||
int numberItems = 0;
|
||||
string[]? names = null;
|
||||
|
||||
int ret = sapModel.LoadCases.GetNameList(ref numberItems, ref names);
|
||||
if (ret == 0 && names != null)
|
||||
{
|
||||
for (int i = 0; i < numberItems; i++)
|
||||
{
|
||||
loadCasesAndCombos.Add(names[i]);
|
||||
}
|
||||
}
|
||||
|
||||
// Get Load Combinations
|
||||
numberItems = 0;
|
||||
names = null;
|
||||
ret = sapModel.RespCombo.GetNameList(ref numberItems, ref names);
|
||||
if (ret == 0 && names != null)
|
||||
{
|
||||
for (int i = 0; i < numberItems; i++)
|
||||
{
|
||||
loadCasesAndCombos.Add(names[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (System.Runtime.InteropServices.COMException)
|
||||
{
|
||||
// Return empty list on COM errors to prevent crashes
|
||||
return new List<string>();
|
||||
}
|
||||
catch (System.InvalidOperationException)
|
||||
{
|
||||
// Return empty list on invalid operations to prevent crashes
|
||||
return new List<string>();
|
||||
}
|
||||
|
||||
return loadCasesAndCombos.Distinct().OrderBy(x => x).ToList();
|
||||
}
|
||||
}
|
||||
@@ -259,9 +259,9 @@
|
||||
"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.Objects": "[3.5.2, )",
|
||||
"Speckle.Sdk": "[3.5.2, )",
|
||||
"Speckle.Sdk.Dependencies": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"speckle.connectors.dui": {
|
||||
@@ -285,7 +285,7 @@
|
||||
"type": "Project",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )",
|
||||
"Speckle.Objects": "[3.5.1, )"
|
||||
"Speckle.Objects": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"speckle.converters.etabs21": {
|
||||
@@ -335,18 +335,18 @@
|
||||
},
|
||||
"Speckle.Objects": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==",
|
||||
"dependencies": {
|
||||
"Speckle.Sdk": "3.5.1"
|
||||
"Speckle.Sdk": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==",
|
||||
"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.1"
|
||||
"Speckle.Sdk.Dependencies": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk.Dependencies": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA=="
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw=="
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -210,9 +210,9 @@
|
||||
"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.Objects": "[3.5.2, )",
|
||||
"Speckle.Sdk": "[3.5.2, )",
|
||||
"Speckle.Sdk.Dependencies": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"speckle.connectors.dui": {
|
||||
@@ -236,7 +236,7 @@
|
||||
"type": "Project",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )",
|
||||
"Speckle.Objects": "[3.5.1, )"
|
||||
"Speckle.Objects": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"speckle.converters.etabs22": {
|
||||
@@ -286,18 +286,18 @@
|
||||
},
|
||||
"Speckle.Objects": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==",
|
||||
"dependencies": {
|
||||
"Speckle.Sdk": "3.5.1"
|
||||
"Speckle.Sdk": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==",
|
||||
"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.1"
|
||||
"Speckle.Sdk.Dependencies": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk.Dependencies": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA=="
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw=="
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -259,9 +259,9 @@
|
||||
"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.Objects": "[3.5.2, )",
|
||||
"Speckle.Sdk": "[3.5.2, )",
|
||||
"Speckle.Sdk.Dependencies": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"speckle.connectors.dui": {
|
||||
@@ -285,7 +285,7 @@
|
||||
"type": "Project",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )",
|
||||
"Speckle.Objects": "[3.5.1, )"
|
||||
"Speckle.Objects": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"speckle.converters.navisworks2020": {
|
||||
@@ -337,18 +337,18 @@
|
||||
},
|
||||
"Speckle.Objects": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==",
|
||||
"dependencies": {
|
||||
"Speckle.Sdk": "3.5.1"
|
||||
"Speckle.Sdk": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==",
|
||||
"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.1"
|
||||
"Speckle.Sdk.Dependencies": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk.Dependencies": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA=="
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw=="
|
||||
}
|
||||
},
|
||||
".NETFramework,Version=v4.8/win-x64": {
|
||||
|
||||
@@ -259,9 +259,9 @@
|
||||
"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.Objects": "[3.5.2, )",
|
||||
"Speckle.Sdk": "[3.5.2, )",
|
||||
"Speckle.Sdk.Dependencies": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"speckle.connectors.dui": {
|
||||
@@ -285,7 +285,7 @@
|
||||
"type": "Project",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )",
|
||||
"Speckle.Objects": "[3.5.1, )"
|
||||
"Speckle.Objects": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"speckle.converters.navisworks2021": {
|
||||
@@ -337,18 +337,18 @@
|
||||
},
|
||||
"Speckle.Objects": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==",
|
||||
"dependencies": {
|
||||
"Speckle.Sdk": "3.5.1"
|
||||
"Speckle.Sdk": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==",
|
||||
"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.1"
|
||||
"Speckle.Sdk.Dependencies": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk.Dependencies": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA=="
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw=="
|
||||
}
|
||||
},
|
||||
".NETFramework,Version=v4.8/win-x64": {
|
||||
|
||||
@@ -259,9 +259,9 @@
|
||||
"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.Objects": "[3.5.2, )",
|
||||
"Speckle.Sdk": "[3.5.2, )",
|
||||
"Speckle.Sdk.Dependencies": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"speckle.connectors.dui": {
|
||||
@@ -285,7 +285,7 @@
|
||||
"type": "Project",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )",
|
||||
"Speckle.Objects": "[3.5.1, )"
|
||||
"Speckle.Objects": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"speckle.converters.navisworks2022": {
|
||||
@@ -337,18 +337,18 @@
|
||||
},
|
||||
"Speckle.Objects": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==",
|
||||
"dependencies": {
|
||||
"Speckle.Sdk": "3.5.1"
|
||||
"Speckle.Sdk": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==",
|
||||
"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.1"
|
||||
"Speckle.Sdk.Dependencies": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk.Dependencies": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA=="
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw=="
|
||||
}
|
||||
},
|
||||
".NETFramework,Version=v4.8/win-x64": {
|
||||
|
||||
@@ -259,9 +259,9 @@
|
||||
"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.Objects": "[3.5.2, )",
|
||||
"Speckle.Sdk": "[3.5.2, )",
|
||||
"Speckle.Sdk.Dependencies": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"speckle.connectors.dui": {
|
||||
@@ -285,7 +285,7 @@
|
||||
"type": "Project",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )",
|
||||
"Speckle.Objects": "[3.5.1, )"
|
||||
"Speckle.Objects": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"speckle.converters.navisworks2023": {
|
||||
@@ -337,18 +337,18 @@
|
||||
},
|
||||
"Speckle.Objects": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==",
|
||||
"dependencies": {
|
||||
"Speckle.Sdk": "3.5.1"
|
||||
"Speckle.Sdk": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==",
|
||||
"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.1"
|
||||
"Speckle.Sdk.Dependencies": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk.Dependencies": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA=="
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw=="
|
||||
}
|
||||
},
|
||||
".NETFramework,Version=v4.8/win-x64": {
|
||||
|
||||
@@ -259,9 +259,9 @@
|
||||
"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.Objects": "[3.5.2, )",
|
||||
"Speckle.Sdk": "[3.5.2, )",
|
||||
"Speckle.Sdk.Dependencies": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"speckle.connectors.dui": {
|
||||
@@ -285,7 +285,7 @@
|
||||
"type": "Project",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )",
|
||||
"Speckle.Objects": "[3.5.1, )"
|
||||
"Speckle.Objects": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"speckle.converters.navisworks2024": {
|
||||
@@ -337,18 +337,18 @@
|
||||
},
|
||||
"Speckle.Objects": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==",
|
||||
"dependencies": {
|
||||
"Speckle.Sdk": "3.5.1"
|
||||
"Speckle.Sdk": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==",
|
||||
"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.1"
|
||||
"Speckle.Sdk.Dependencies": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk.Dependencies": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA=="
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw=="
|
||||
}
|
||||
},
|
||||
".NETFramework,Version=v4.8/win-x64": {
|
||||
|
||||
@@ -265,9 +265,9 @@
|
||||
"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.Objects": "[3.5.2, )",
|
||||
"Speckle.Sdk": "[3.5.2, )",
|
||||
"Speckle.Sdk.Dependencies": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"speckle.connectors.dui": {
|
||||
@@ -291,7 +291,7 @@
|
||||
"type": "Project",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )",
|
||||
"Speckle.Objects": "[3.5.1, )"
|
||||
"Speckle.Objects": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"speckle.converters.navisworks2025": {
|
||||
@@ -337,18 +337,18 @@
|
||||
},
|
||||
"Speckle.Objects": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==",
|
||||
"dependencies": {
|
||||
"Speckle.Sdk": "3.5.1"
|
||||
"Speckle.Sdk": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==",
|
||||
"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.1"
|
||||
"Speckle.Sdk.Dependencies": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk.Dependencies": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA=="
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw=="
|
||||
}
|
||||
},
|
||||
".NETFramework,Version=v4.8/win-x64": {
|
||||
|
||||
@@ -266,9 +266,9 @@
|
||||
"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.Objects": "[3.5.2, )",
|
||||
"Speckle.Sdk": "[3.5.2, )",
|
||||
"Speckle.Sdk.Dependencies": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"speckle.connectors.dui": {
|
||||
@@ -292,7 +292,7 @@
|
||||
"type": "Project",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )",
|
||||
"Speckle.Objects": "[3.5.1, )"
|
||||
"Speckle.Objects": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"speckle.converters.navisworks2026": {
|
||||
@@ -339,18 +339,18 @@
|
||||
},
|
||||
"Speckle.Objects": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==",
|
||||
"dependencies": {
|
||||
"Speckle.Sdk": "3.5.1"
|
||||
"Speckle.Sdk": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==",
|
||||
"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.1"
|
||||
"Speckle.Sdk.Dependencies": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk.Dependencies": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA=="
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw=="
|
||||
}
|
||||
},
|
||||
".NETFramework,Version=v4.8/win-x64": {
|
||||
|
||||
@@ -281,9 +281,9 @@
|
||||
"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.Objects": "[3.5.2, )",
|
||||
"Speckle.Sdk": "[3.5.2, )",
|
||||
"Speckle.Sdk.Dependencies": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"speckle.connectors.dui": {
|
||||
@@ -306,7 +306,7 @@
|
||||
"type": "Project",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )",
|
||||
"Speckle.Objects": "[3.5.1, )"
|
||||
"Speckle.Objects": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"speckle.converters.revit2022": {
|
||||
@@ -351,11 +351,11 @@
|
||||
},
|
||||
"Speckle.Objects": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==",
|
||||
"dependencies": {
|
||||
"Speckle.Sdk": "3.5.1"
|
||||
"Speckle.Sdk": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Revit.API": {
|
||||
@@ -366,9 +366,9 @@
|
||||
},
|
||||
"Speckle.Sdk": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==",
|
||||
"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.1"
|
||||
"Speckle.Sdk.Dependencies": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk.Dependencies": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA=="
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw=="
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -281,9 +281,9 @@
|
||||
"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.Objects": "[3.5.2, )",
|
||||
"Speckle.Sdk": "[3.5.2, )",
|
||||
"Speckle.Sdk.Dependencies": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"speckle.connectors.dui": {
|
||||
@@ -306,7 +306,7 @@
|
||||
"type": "Project",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )",
|
||||
"Speckle.Objects": "[3.5.1, )"
|
||||
"Speckle.Objects": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"speckle.converters.revit2023": {
|
||||
@@ -351,11 +351,11 @@
|
||||
},
|
||||
"Speckle.Objects": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==",
|
||||
"dependencies": {
|
||||
"Speckle.Sdk": "3.5.1"
|
||||
"Speckle.Sdk": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Revit.API": {
|
||||
@@ -366,9 +366,9 @@
|
||||
},
|
||||
"Speckle.Sdk": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==",
|
||||
"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.1"
|
||||
"Speckle.Sdk.Dependencies": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk.Dependencies": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA=="
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw=="
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -281,9 +281,9 @@
|
||||
"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.Objects": "[3.5.2, )",
|
||||
"Speckle.Sdk": "[3.5.2, )",
|
||||
"Speckle.Sdk.Dependencies": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"speckle.connectors.dui": {
|
||||
@@ -306,7 +306,7 @@
|
||||
"type": "Project",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )",
|
||||
"Speckle.Objects": "[3.5.1, )"
|
||||
"Speckle.Objects": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"speckle.converters.revit2024": {
|
||||
@@ -351,11 +351,11 @@
|
||||
},
|
||||
"Speckle.Objects": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==",
|
||||
"dependencies": {
|
||||
"Speckle.Sdk": "3.5.1"
|
||||
"Speckle.Sdk": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Revit.API": {
|
||||
@@ -366,9 +366,9 @@
|
||||
},
|
||||
"Speckle.Sdk": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==",
|
||||
"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.1"
|
||||
"Speckle.Sdk.Dependencies": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk.Dependencies": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA=="
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw=="
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -226,9 +226,9 @@
|
||||
"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.Objects": "[3.5.2, )",
|
||||
"Speckle.Sdk": "[3.5.2, )",
|
||||
"Speckle.Sdk.Dependencies": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"speckle.connectors.dui": {
|
||||
@@ -251,7 +251,7 @@
|
||||
"type": "Project",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )",
|
||||
"Speckle.Objects": "[3.5.1, )"
|
||||
"Speckle.Objects": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"speckle.converters.revit2025": {
|
||||
@@ -296,11 +296,11 @@
|
||||
},
|
||||
"Speckle.Objects": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==",
|
||||
"dependencies": {
|
||||
"Speckle.Sdk": "3.5.1"
|
||||
"Speckle.Sdk": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Revit.API": {
|
||||
@@ -311,9 +311,9 @@
|
||||
},
|
||||
"Speckle.Sdk": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==",
|
||||
"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.1"
|
||||
"Speckle.Sdk.Dependencies": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk.Dependencies": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA=="
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw=="
|
||||
}
|
||||
},
|
||||
"net8.0-windows7.0/win-x64": {
|
||||
|
||||
@@ -219,9 +219,9 @@
|
||||
"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.Objects": "[3.5.2, )",
|
||||
"Speckle.Sdk": "[3.5.2, )",
|
||||
"Speckle.Sdk.Dependencies": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"speckle.connectors.dui": {
|
||||
@@ -244,7 +244,7 @@
|
||||
"type": "Project",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )",
|
||||
"Speckle.Objects": "[3.5.1, )"
|
||||
"Speckle.Objects": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"speckle.converters.revit2026": {
|
||||
@@ -280,11 +280,11 @@
|
||||
},
|
||||
"Speckle.Objects": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==",
|
||||
"dependencies": {
|
||||
"Speckle.Sdk": "3.5.1"
|
||||
"Speckle.Sdk": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Revit.API": {
|
||||
@@ -295,9 +295,9 @@
|
||||
},
|
||||
"Speckle.Sdk": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==",
|
||||
"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.1"
|
||||
"Speckle.Sdk.Dependencies": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk.Dependencies": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA=="
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw=="
|
||||
}
|
||||
},
|
||||
"net8.0-windows7.0/win-x64": {
|
||||
|
||||
@@ -72,6 +72,7 @@ internal sealed class BasicConnectorBindingRevit : IBasicConnectorBinding
|
||||
return new DocumentInfo("", "", "") { Message = "Family environment files not supported by Speckle." };
|
||||
}
|
||||
|
||||
//should this use the Hashcode of the document instead of something like CreationGUID?
|
||||
var info = new DocumentInfo(doc.PathName, doc.Title, doc.GetHashCode().ToString());
|
||||
|
||||
return info;
|
||||
|
||||
@@ -216,12 +216,13 @@ internal sealed class RevitSendBinding : RevitBaseBinding, ISendBinding
|
||||
newSelectedObjectIds.Add(element.UniqueId);
|
||||
}
|
||||
|
||||
// We update the state on the UI SenderModelCard to prevent potential inconsistencies between hostApp IdMap in sendfilters.
|
||||
await Commands.SetFilterObjectIds(
|
||||
modelCard.ModelCardId.NotNull(),
|
||||
modelCard.SendFilter.IdMap,
|
||||
newSelectedObjectIds
|
||||
);
|
||||
// NOTE: preserve & persist original user selection for selection filter implemented during
|
||||
// [CNX-2400](https://linear.app/speckle/issue/CNX-2400/object-dont-update-on-publish)
|
||||
// NOTE: update with current document for views and categories filter since these represent dynamic queries
|
||||
// View & categories filters self-update their SelectedObjectIds in RefreshObjectIds(), maintaining consistency
|
||||
var objectIds =
|
||||
modelCard.SendFilter is RevitSelectionFilter ? modelCard.SendFilter.SelectedObjectIds : newSelectedObjectIds;
|
||||
await Commands.SetFilterObjectIds(modelCard.ModelCardId.NotNull(), modelCard.SendFilter.IdMap, objectIds);
|
||||
}
|
||||
|
||||
return documentElementContexts;
|
||||
|
||||
@@ -3,48 +3,45 @@ using Autodesk.Revit.DB.ExtensibleStorage;
|
||||
using Autodesk.Revit.UI;
|
||||
using Autodesk.Revit.UI.Events;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Speckle.Connectors.Common.Threading;
|
||||
using Speckle.Connectors.DUI.Bridge;
|
||||
using Speckle.Connectors.DUI.Models;
|
||||
using Speckle.Connectors.DUI.Utils;
|
||||
using Speckle.Connectors.Revit.Plugin;
|
||||
using Speckle.Converters.RevitShared.Helpers;
|
||||
using Speckle.Sdk;
|
||||
using Speckle.Sdk.Common;
|
||||
using Speckle.Sdk.SQLite;
|
||||
|
||||
namespace Speckle.Connectors.Revit.HostApp;
|
||||
|
||||
// POC: should be interfaced out
|
||||
internal sealed class RevitDocumentStore : DocumentModelStore
|
||||
{
|
||||
// POC: move to somewhere central?
|
||||
private static readonly Guid s_revitDocumentStoreId = new("D35B3695-EDC9-4E15-B62A-D3FC2CB83FA3");
|
||||
|
||||
private readonly ILogger<RevitDocumentStore> _logger;
|
||||
private readonly IAppIdleManager _idleManager;
|
||||
private readonly RevitContext _revitContext;
|
||||
private readonly DocumentModelStorageSchema _documentModelStorageSchema;
|
||||
private readonly IdStorageSchema _idStorageSchema;
|
||||
private readonly ITopLevelExceptionHandler _topLevelExceptionHandler;
|
||||
private readonly IThreadContext _threadContext;
|
||||
private readonly ISqLiteJsonCacheManager _jsonCacheManager;
|
||||
|
||||
public RevitDocumentStore(
|
||||
ILogger<DocumentModelStore> logger,
|
||||
IAppIdleManager idleManager,
|
||||
RevitContext revitContext,
|
||||
IJsonSerializer jsonSerializer,
|
||||
DocumentModelStorageSchema documentModelStorageSchema,
|
||||
IdStorageSchema idStorageSchema,
|
||||
ITopLevelExceptionHandler topLevelExceptionHandler,
|
||||
IThreadContext threadContext,
|
||||
IRevitTask revitTask
|
||||
IRevitTask revitTask,
|
||||
ISqLiteJsonCacheManagerFactory jsonCacheManagerFactory,
|
||||
ILogger<RevitDocumentStore> logger
|
||||
)
|
||||
: base(logger, jsonSerializer)
|
||||
{
|
||||
_jsonCacheManager = jsonCacheManagerFactory.CreateForUser("ConnectorsFileData");
|
||||
_idleManager = idleManager;
|
||||
_revitContext = revitContext;
|
||||
_documentModelStorageSchema = documentModelStorageSchema;
|
||||
_idStorageSchema = idStorageSchema;
|
||||
_topLevelExceptionHandler = topLevelExceptionHandler;
|
||||
_threadContext = threadContext;
|
||||
_logger = logger;
|
||||
|
||||
UIApplication uiApplication = _revitContext.UIApplication.NotNull();
|
||||
|
||||
@@ -101,80 +98,52 @@ internal sealed class RevitDocumentStore : DocumentModelStore
|
||||
return;
|
||||
}
|
||||
|
||||
_threadContext
|
||||
.RunOnMain(() =>
|
||||
try
|
||||
{
|
||||
var key = GetKeyForDocument(document);
|
||||
if (key != null)
|
||||
{
|
||||
//if not the same active document then don't save the current cards to a bad document!
|
||||
if (!EnsureActiveDocumentIsSame(document))
|
||||
{
|
||||
return;
|
||||
}
|
||||
using Transaction t = new(document, "Speckle Write State");
|
||||
t.Start();
|
||||
using DataStorage ds = GetSettingsDataStorage(document) ?? DataStorage.Create(document);
|
||||
|
||||
using Entity stateEntity = new(_documentModelStorageSchema.GetSchema());
|
||||
string serializedModels = Serialize();
|
||||
stateEntity.Set("contents", serializedModels);
|
||||
|
||||
using Entity idEntity = new(_idStorageSchema.GetSchema());
|
||||
idEntity.Set("Id", s_revitDocumentStoreId);
|
||||
|
||||
ds.SetEntity(idEntity);
|
||||
ds.SetEntity(stateEntity);
|
||||
t.Commit();
|
||||
})
|
||||
.FireAndForget();
|
||||
_jsonCacheManager.UpdateObject(key, modelCardState);
|
||||
}
|
||||
}
|
||||
catch (Exception ex) when (!ex.IsFatal())
|
||||
{
|
||||
var key = GetKeyForDocument(document);
|
||||
_logger.LogError(ex, "Failed to save model card state for document {DocumentId}", key);
|
||||
}
|
||||
}
|
||||
|
||||
private bool EnsureActiveDocumentIsSame(Document document)
|
||||
private string? GetKeyForDocument(Document doc)
|
||||
{
|
||||
var localDoc = _revitContext.UIApplication?.ActiveUIDocument?.Document;
|
||||
if (localDoc == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return localDoc.Equals(document);
|
||||
string? id = doc?.ProjectInformation?.UniqueId; //ProjectInformation Should only be null for family docs
|
||||
#if REVIT_2024_OR_GREATER
|
||||
id ??= doc.CreationGUID.ToString(); //fallback for family docs
|
||||
#endif
|
||||
return id;
|
||||
}
|
||||
|
||||
protected override void LoadState()
|
||||
{
|
||||
var stateEntity = GetSpeckleEntity(_revitContext.UIApplication?.ActiveUIDocument?.Document);
|
||||
var document = _revitContext.UIApplication?.ActiveUIDocument?.Document;
|
||||
// POC: this can happen? A: Not really, imho (dim) (Adam seyz yes it can if loading also triggers a save)
|
||||
if (document == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var stateEntity = GetSpeckleEntity(document);
|
||||
if (stateEntity == null || !stateEntity.IsValid())
|
||||
{
|
||||
ClearAndSave();
|
||||
return;
|
||||
}
|
||||
|
||||
string modelsString = stateEntity.Get<string>("contents");
|
||||
LoadFromString(modelsString);
|
||||
}
|
||||
|
||||
private DataStorage? GetSettingsDataStorage(Document doc)
|
||||
{
|
||||
using FilteredElementCollector collector = new(doc);
|
||||
FilteredElementCollector dataStorages = collector.OfClass(typeof(DataStorage));
|
||||
|
||||
foreach (Element element in dataStorages)
|
||||
var key = GetKeyForDocument(document);
|
||||
if (key != null)
|
||||
{
|
||||
DataStorage dataStorage = (DataStorage)element;
|
||||
Entity settingIdEntity = dataStorage.GetEntity(_idStorageSchema.GetSchema());
|
||||
if (!settingIdEntity.IsValid())
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
Guid id = settingIdEntity.Get<Guid>("Id");
|
||||
if (!id.Equals(s_revitDocumentStoreId))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
return dataStorage;
|
||||
var state = _jsonCacheManager.GetObject(key);
|
||||
LoadFromString(state);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private Entity? GetSpeckleEntity(Document? doc)
|
||||
|
||||
+1
-1
@@ -19,7 +19,7 @@ public class ToHostSettingsManager : IToHostSettingsManager
|
||||
|
||||
public Transform? GetReferencePointSetting(ModelCard modelCard)
|
||||
{
|
||||
var referencePointString = modelCard.Settings?.First(s => s.Id == "referencePoint").Value as string;
|
||||
var referencePointString = modelCard.Settings?.FirstOrDefault(s => s.Id == "referencePoint")?.Value as string;
|
||||
if (
|
||||
referencePointString is not null
|
||||
&& ReferencePointSetting.ReferencePointMap.TryGetValue(
|
||||
|
||||
+52
-2
@@ -2,7 +2,9 @@ using Autodesk.Revit.DB;
|
||||
using Speckle.Connectors.DUI.Exceptions;
|
||||
using Speckle.Connectors.DUI.Models.Card.SendFilter;
|
||||
using Speckle.Connectors.DUI.Utils;
|
||||
using Speckle.Converters.RevitShared.Extensions;
|
||||
using Speckle.Converters.RevitShared.Helpers;
|
||||
using Speckle.Sdk;
|
||||
|
||||
namespace Speckle.Connectors.RevitShared.Operations.Send.Filters;
|
||||
|
||||
@@ -75,8 +77,8 @@ public class RevitViewsFilter : DiscriminatedObject, ISendFilter, IRevitSendFilt
|
||||
//this used to throw an exception, but we don't want to fail loudly if the view is not found
|
||||
return [];
|
||||
}
|
||||
using var viewCollector = new FilteredElementCollector(_doc, view.Id);
|
||||
var elementsInView = viewCollector.ToElements();
|
||||
|
||||
IEnumerable<Element> elementsInView = GetFilteredElementsForView(view);
|
||||
|
||||
// NOTE: FilteredElementCollector() includes sweeps and reveals from a wall family's definition and includes them as additional objects
|
||||
// on this return. displayValue for Wall already includes these, therefore we end up with duplicate elements on wall sweeps
|
||||
@@ -125,4 +127,52 @@ public class RevitViewsFilter : DiscriminatedObject, ISendFilter, IRevitSendFilt
|
||||
_revitContext = revitContext;
|
||||
_doc = _revitContext.UIApplication?.ActiveUIDocument.Document;
|
||||
}
|
||||
|
||||
// NOTE: Element collector returns parts and source elements even when Parts Visibility is set as "Show Parts" only.
|
||||
// Below function collects list of ids to exclude from final list.
|
||||
private HashSet<ElementId> GetSourceElementIdsToExclude(IEnumerable<Element> elements)
|
||||
{
|
||||
var elementsToExclude = new HashSet<ElementId>();
|
||||
|
||||
foreach (var element in elements)
|
||||
{
|
||||
// check if element is a part
|
||||
if (element.Category?.GetBuiltInCategory() == BuiltInCategory.OST_Parts && element is Part part)
|
||||
{
|
||||
try
|
||||
{
|
||||
// get source element ids from the part
|
||||
var sourceIds = part.GetSourceElementIds();
|
||||
if (sourceIds != null)
|
||||
{
|
||||
foreach (var sourceId in sourceIds)
|
||||
{
|
||||
elementsToExclude.Add(sourceId.HostElementId);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception e) when (!e.IsFatal())
|
||||
{
|
||||
// silently continue processing other Parts if one fails
|
||||
// this follows the pattern used elsewhere in the codebase
|
||||
}
|
||||
}
|
||||
}
|
||||
return elementsToExclude;
|
||||
}
|
||||
|
||||
private IEnumerable<Element> GetFilteredElementsForView(View view)
|
||||
{
|
||||
using var viewCollector = new FilteredElementCollector(_doc, view.Id);
|
||||
var allElements = viewCollector.ToElements();
|
||||
|
||||
// parts filtering when view is set to show Parts only (and overwrites allElements)
|
||||
if (view.PartsVisibility == PartsVisibility.ShowPartsOnly)
|
||||
{
|
||||
var idsToExclude = GetSourceElementIdsToExclude(allElements);
|
||||
return allElements.Where(e => !idsToExclude.Contains(e.Id));
|
||||
}
|
||||
|
||||
return allElements;
|
||||
}
|
||||
}
|
||||
|
||||
+10
-1
@@ -225,7 +225,16 @@ public class RevitRootObjectBuilder(
|
||||
}
|
||||
}
|
||||
|
||||
if (results.All(x => x.Status == Status.ERROR) || skippedObjectCount == atomicObjectCount)
|
||||
// if we ended up skipping everything, there is a reason for this, that users can diagnose themselves
|
||||
// this can occur if a published view contains only unsupported objects or if user trying to ONLY send linked model
|
||||
// docs but the setting is disabled
|
||||
if (skippedObjectCount == atomicObjectCount)
|
||||
{
|
||||
throw new SpeckleException("No supported objects visible. Update publish filter or check publish settings.");
|
||||
}
|
||||
|
||||
// this is, I suppose, fully on us?
|
||||
if (results.All(x => x.Status == Status.ERROR))
|
||||
{
|
||||
throw new SpeckleException("Failed to convert all objects.");
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@ using Speckle.Sdk.Common;
|
||||
namespace Speckle.Connectors.Revit.Plugin;
|
||||
|
||||
#pragma warning disable CA1032
|
||||
public class SpeckleRevitTaskException(Exception exception) : SpeckleException("Revit operation failed", exception)
|
||||
public class SpeckleRevitTaskException(Exception exception) : SpeckleException(exception.Message, exception)
|
||||
#pragma warning restore CA1032
|
||||
{
|
||||
public static async Task ProcessException<T>(
|
||||
|
||||
@@ -325,9 +325,9 @@
|
||||
"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.Objects": "[3.5.2, )",
|
||||
"Speckle.Sdk": "[3.5.2, )",
|
||||
"Speckle.Sdk.Dependencies": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"speckle.connectors.logging": {
|
||||
@@ -337,7 +337,7 @@
|
||||
"type": "Project",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )",
|
||||
"Speckle.Objects": "[3.5.1, )"
|
||||
"Speckle.Objects": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"speckle.converters.rhino7": {
|
||||
@@ -382,18 +382,18 @@
|
||||
},
|
||||
"Speckle.Objects": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==",
|
||||
"dependencies": {
|
||||
"Speckle.Sdk": "3.5.1"
|
||||
"Speckle.Sdk": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==",
|
||||
"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.1"
|
||||
"Speckle.Sdk.Dependencies": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk.Dependencies": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA=="
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw=="
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -325,9 +325,9 @@
|
||||
"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.Objects": "[3.5.2, )",
|
||||
"Speckle.Sdk": "[3.5.2, )",
|
||||
"Speckle.Sdk.Dependencies": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"speckle.connectors.logging": {
|
||||
@@ -337,7 +337,7 @@
|
||||
"type": "Project",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )",
|
||||
"Speckle.Objects": "[3.5.1, )"
|
||||
"Speckle.Objects": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"speckle.converters.rhino8": {
|
||||
@@ -381,18 +381,18 @@
|
||||
},
|
||||
"Speckle.Objects": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==",
|
||||
"dependencies": {
|
||||
"Speckle.Sdk": "3.5.1"
|
||||
"Speckle.Sdk": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==",
|
||||
"dependencies": {
|
||||
"GraphQL.Client": "6.0.0",
|
||||
"Microsoft.Bcl.AsyncInterfaces": "5.0.0",
|
||||
@@ -402,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.1"
|
||||
"Speckle.Sdk.Dependencies": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk.Dependencies": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA=="
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw=="
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+282
-178
@@ -37,91 +37,173 @@ public class DeconstructSpeckleParam : GH_Component, IGH_VariableParameterCompon
|
||||
|
||||
protected override void SolveInstance(IGH_DataAccess da)
|
||||
{
|
||||
object data = new();
|
||||
da.GetData(0, ref data);
|
||||
|
||||
List<OutputParamWrapper> outputParams = new();
|
||||
|
||||
switch (data)
|
||||
// on first iteration, discover all fields from all objects to create stable output structure
|
||||
if (da.Iteration == 0)
|
||||
{
|
||||
case SpeckleCollectionWrapperGoo collectionGoo when collectionGoo.Value != null:
|
||||
// get children elements from the wrapper to override the elements prop while parsing
|
||||
List<IGH_Goo> children = collectionGoo.Value.Elements.Select(o => ((SpeckleWrapper)o).CreateGoo()).ToList();
|
||||
outputParams = ParseSpeckleWrapper(collectionGoo.Value, children);
|
||||
break;
|
||||
case SpeckleDataObjectWrapperGoo dataObjectGoo when dataObjectGoo.Value != null:
|
||||
// get geometries from the wrapper to override the displayvalue prop while parsing
|
||||
List<IGH_Goo> display = dataObjectGoo.Value.Geometries.Select(o => o.CreateGoo()).ToList();
|
||||
outputParams = ParseSpeckleWrapper(dataObjectGoo.Value, null, display);
|
||||
break;
|
||||
case SpeckleGeometryWrapperGoo objectGoo when objectGoo.Value != null:
|
||||
outputParams = ParseSpeckleWrapper(objectGoo.Value);
|
||||
break;
|
||||
case SpeckleBlockInstanceWrapperGoo blockInstanceGoo when blockInstanceGoo.Value != null:
|
||||
outputParams = ParseSpeckleWrapper(blockInstanceGoo.Value);
|
||||
break;
|
||||
case SpeckleBlockDefinitionWrapperGoo blockDef:
|
||||
outputParams = ParseSpeckleWrapper(blockDef.Value);
|
||||
break;
|
||||
case SpeckleMaterialWrapperGoo materialGoo when materialGoo.Value != null:
|
||||
outputParams = ParseSpeckleWrapper(materialGoo.Value);
|
||||
break;
|
||||
HashSet<string> allFields = DiscoverAllFieldsFromInput();
|
||||
|
||||
case SpecklePropertyGroupGoo propGoo:
|
||||
Name = $"properties ({propGoo.Value.Count})";
|
||||
outputParams = new();
|
||||
foreach (var key in propGoo.Value.Keys)
|
||||
if (allFields.Count > 0)
|
||||
{
|
||||
var requiredOutputs = CreateOutputParamsFromFieldNames(allFields);
|
||||
|
||||
if (OutputMismatch(requiredOutputs))
|
||||
{
|
||||
ISpecklePropertyGoo value = propGoo.Value[key];
|
||||
object? outputValue = value is SpecklePropertyGoo prop
|
||||
? prop.Value
|
||||
: value is SpecklePropertyGroupGoo propGroup
|
||||
? propGroup
|
||||
: value;
|
||||
|
||||
OutputParamWrapper output =
|
||||
outputValue is IList
|
||||
? CreateOutputParamByKeyValue(key, outputValue, GH_ParamAccess.list)
|
||||
: CreateOutputParamByKeyValue(key, outputValue, GH_ParamAccess.item);
|
||||
outputParams.Add(output);
|
||||
OnPingDocument()?.ScheduleSolution(5, _ => CreateOutputs(requiredOutputs));
|
||||
return;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
AddRuntimeMessage(GH_RuntimeMessageLevel.Error, $"Type cannot be deconstructed: {data.GetType().Name}");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// process current object normally
|
||||
object data = new();
|
||||
if (!da.GetData(0, ref data))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var outputParams = DeconstructObject(data);
|
||||
if (outputParams == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// set component name based on the current object
|
||||
NickName = Name;
|
||||
|
||||
if (da.Iteration == 0 && OutputMismatch(outputParams))
|
||||
// set output data - fill missing fields with nulls for objects that don't have all fields
|
||||
SetOutputData(da, outputParams);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Discovers all unique field names from all input objects by looking at volatile data directly.
|
||||
/// </summary>
|
||||
private HashSet<string> DiscoverAllFieldsFromInput()
|
||||
{
|
||||
HashSet<string> allFields = new();
|
||||
|
||||
foreach (var item in Params.Input[0].VolatileData.AllData(true))
|
||||
{
|
||||
OnPingDocument()
|
||||
.ScheduleSolution(
|
||||
5,
|
||||
_ =>
|
||||
{
|
||||
CreateOutputs(outputParams);
|
||||
}
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int i = 0; i < outputParams.Count; i++)
|
||||
var objectOutputs = DeconstructObject(item);
|
||||
if (objectOutputs != null)
|
||||
{
|
||||
var outParam = Params.Output[i];
|
||||
var outParamWrapper = outputParams[i];
|
||||
switch (outParam.Access)
|
||||
foreach (var output in objectOutputs)
|
||||
{
|
||||
case GH_ParamAccess.item:
|
||||
da.SetData(i, outParamWrapper.Value);
|
||||
break;
|
||||
case GH_ParamAccess.list:
|
||||
da.SetDataList(i, outParamWrapper.Value as IList);
|
||||
break;
|
||||
allFields.Add(output.Param.Name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return allFields;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates output parameter wrappers from a set of field names, all with item access.
|
||||
/// </summary>
|
||||
private List<OutputParamWrapper> CreateOutputParamsFromFieldNames(HashSet<string> fieldNames) =>
|
||||
fieldNames
|
||||
.OrderBy(name => name)
|
||||
.Select(fieldName => CreateOutputParamByKeyValue(fieldName, null, GH_ParamAccess.item))
|
||||
.ToList();
|
||||
|
||||
/// <summary>
|
||||
/// Deconstructs a single object into its constituent fields/properties.
|
||||
/// </summary>
|
||||
private List<OutputParamWrapper>? DeconstructObject(object data) =>
|
||||
data switch
|
||||
{
|
||||
// get children elements from wrapper to override elements prop while parsing
|
||||
SpeckleCollectionWrapperGoo collectionGoo when collectionGoo.Value != null
|
||||
=> ParseSpeckleWrapper(
|
||||
collectionGoo.Value,
|
||||
collectionGoo.Value.Elements.Select(o => ((SpeckleWrapper)o).CreateGoo()).ToList()
|
||||
),
|
||||
|
||||
// get geometries from wrapper to override displayValue prop while parsing
|
||||
SpeckleDataObjectWrapperGoo dataObjectGoo when dataObjectGoo.Value != null
|
||||
=> ParseSpeckleWrapper(
|
||||
dataObjectGoo.Value,
|
||||
null,
|
||||
dataObjectGoo.Value.Geometries.Select(o => o.CreateGoo()).ToList()
|
||||
),
|
||||
|
||||
SpeckleGeometryWrapperGoo objectGoo when objectGoo.Value != null => ParseSpeckleWrapper(objectGoo.Value),
|
||||
|
||||
SpeckleBlockInstanceWrapperGoo blockInstanceGoo when blockInstanceGoo.Value != null
|
||||
=> ParseSpeckleWrapper(blockInstanceGoo.Value),
|
||||
|
||||
SpeckleBlockDefinitionWrapperGoo blockDef when blockDef.Value != null => ParseSpeckleWrapper(blockDef.Value),
|
||||
|
||||
SpeckleMaterialWrapperGoo materialGoo when materialGoo.Value != null => ParseSpeckleWrapper(materialGoo.Value),
|
||||
|
||||
SpecklePropertyGroupGoo propGoo when propGoo.Value != null => ParsePropertyGroup(propGoo),
|
||||
|
||||
_ => HandleUnsupportedType(data)
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
/// Handles SpecklePropertyGroupGoo objects by extracting their key-value pairs.
|
||||
/// </summary>
|
||||
private List<OutputParamWrapper> ParsePropertyGroup(SpecklePropertyGroupGoo propGoo)
|
||||
{
|
||||
Name = $"properties ({propGoo.Value.Count})";
|
||||
List<OutputParamWrapper> objectOutputs = new();
|
||||
|
||||
foreach (var key in propGoo.Value.Keys)
|
||||
{
|
||||
ISpecklePropertyGoo value = propGoo.Value[key];
|
||||
object? outputValue = value switch
|
||||
{
|
||||
SpecklePropertyGoo prop => prop.Value,
|
||||
SpecklePropertyGroupGoo propGroup => propGroup,
|
||||
_ => value
|
||||
};
|
||||
objectOutputs.Add(CreateOutputParamByKeyValue(key, outputValue, GH_ParamAccess.item));
|
||||
}
|
||||
|
||||
return objectOutputs;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Handles unsupported object types by logging an error and returning null.
|
||||
/// </summary>
|
||||
private List<OutputParamWrapper>? HandleUnsupportedType(object data)
|
||||
{
|
||||
AddRuntimeMessage(GH_RuntimeMessageLevel.Error, $"Type cannot be deconstructed: {data.GetType().Name}");
|
||||
return null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sets output data for the current iteration, filling missing fields with null values.
|
||||
/// Uses a lookup dictionary for efficient field matching.
|
||||
/// </summary>
|
||||
private void SetOutputData(IGH_DataAccess da, List<OutputParamWrapper> currentOutputs)
|
||||
{
|
||||
if (Params.Output.Count == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// create a lookup for current outputs by field name
|
||||
var outputLookup = currentOutputs.ToDictionary(o => o.Param.Name, o => o.Value);
|
||||
|
||||
// set data for each output parameter
|
||||
for (int i = 0; i < Params.Output.Count; i++)
|
||||
{
|
||||
var outputParam = Params.Output[i];
|
||||
|
||||
// set the value if it exists, otherwise set null
|
||||
object? value = outputLookup.TryGetValue(outputParam.Name, out var fieldValue) ? fieldValue : null;
|
||||
|
||||
switch (outputParam.Access)
|
||||
{
|
||||
case GH_ParamAccess.item:
|
||||
da.SetData(i, value);
|
||||
break;
|
||||
case GH_ParamAccess.list:
|
||||
da.SetDataList(i, value as IList ?? new List<object?>());
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private List<OutputParamWrapper> ParseSpeckleWrapper(
|
||||
@@ -146,125 +228,146 @@ public class DeconstructSpeckleParam : GH_Component, IGH_VariableParameterCompon
|
||||
return result;
|
||||
}
|
||||
|
||||
// cycle through base props
|
||||
// process each property of the Base object
|
||||
foreach (var prop in @base.GetMembers(DynamicBaseMemberType.Instance | DynamicBaseMemberType.Dynamic))
|
||||
{
|
||||
// Convert and add to corresponding output structure
|
||||
var value = prop.Value;
|
||||
switch (value)
|
||||
// skip internal dynamic property keys
|
||||
if (prop.Key == nameof(Base.DynamicPropertyKeys))
|
||||
{
|
||||
case null:
|
||||
result.Add(CreateOutputParamByKeyValue(prop.Key, null, GH_ParamAccess.item));
|
||||
break;
|
||||
continue;
|
||||
}
|
||||
|
||||
case IList list:
|
||||
List<object> nativeObjects = new();
|
||||
|
||||
// override list value if base is a collection and this is the elements prop, since this is empty if coming from a collectionwrapper
|
||||
if (@base is Collection && prop.Key == "elements" && elements != null)
|
||||
{
|
||||
list = elements;
|
||||
}
|
||||
|
||||
// override list value if base is a dataobject and this is the displayvalue prop, since this is empty if coming from a dataobject wrapper
|
||||
if (@base is Speckle.Objects.Data.DataObject && prop.Key == "displayValue" && displayValue != null)
|
||||
{
|
||||
list = displayValue;
|
||||
}
|
||||
|
||||
foreach (var x in list)
|
||||
{
|
||||
switch (x)
|
||||
{
|
||||
case SpeckleWrapper wrapper:
|
||||
nativeObjects.Add(wrapper.CreateGoo());
|
||||
break;
|
||||
|
||||
case Base xBase:
|
||||
nativeObjects.AddRange(ConvertOrCreateWrapper(xBase));
|
||||
break;
|
||||
|
||||
default:
|
||||
nativeObjects.Add(x);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
result.Add(CreateOutputParamByKeyValue(prop.Key, nativeObjects, GH_ParamAccess.list));
|
||||
break;
|
||||
|
||||
case Dictionary<string, object?> dict: // this should be treated a properties dict
|
||||
SpecklePropertyGroupGoo propertyGoo = new();
|
||||
propertyGoo.CastFrom(dict);
|
||||
result.Add(CreateOutputParamByKeyValue(prop.Key, propertyGoo, GH_ParamAccess.item));
|
||||
break;
|
||||
|
||||
case SpeckleWrapper wrapper:
|
||||
result.Add(CreateOutputParamByKeyValue(prop.Key, wrapper.CreateGoo(), GH_ParamAccess.item));
|
||||
break;
|
||||
|
||||
case Base baseValue:
|
||||
result.Add(CreateOutputParamByKeyValue(prop.Key, ConvertOrCreateWrapper(baseValue), GH_ParamAccess.list));
|
||||
break;
|
||||
|
||||
default:
|
||||
// we don't want to output dynamic property keys
|
||||
if (prop.Key == nameof(Base.DynamicPropertyKeys))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
result.Add(CreateOutputParamByKeyValue(prop.Key, prop.Value, GH_ParamAccess.item));
|
||||
break;
|
||||
var outputParam = CreateOutputParamForProperty(prop, @base, elements, displayValue);
|
||||
if (outputParam != null)
|
||||
{
|
||||
result.Add(outputParam);
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates an output parameter for a single property, handling different value types appropriately.
|
||||
/// </summary>
|
||||
private OutputParamWrapper CreateOutputParamForProperty(
|
||||
KeyValuePair<string, object?> prop,
|
||||
Base @base,
|
||||
List<IGH_Goo>? elements,
|
||||
List<IGH_Goo>? displayValue
|
||||
) =>
|
||||
prop.Value switch
|
||||
{
|
||||
null => CreateOutputParamByKeyValue(prop.Key, null, GH_ParamAccess.item),
|
||||
IList list => CreateListOutputParam(prop.Key, list, @base, elements, displayValue),
|
||||
Dictionary<string, object?> dict => CreateDictionaryOutputParam(prop.Key, dict),
|
||||
SpeckleWrapper wrapper => CreateOutputParamByKeyValue(prop.Key, wrapper.CreateGoo(), GH_ParamAccess.item),
|
||||
Base baseValue => CreateOutputParamByKeyValue(prop.Key, ConvertOrCreateWrapper(baseValue), GH_ParamAccess.list),
|
||||
_ => CreateOutputParamByKeyValue(prop.Key, prop.Value, GH_ParamAccess.item)
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
/// Creates an output parameter for list properties, with special handling for collection elements and display values.
|
||||
/// </summary>
|
||||
private OutputParamWrapper CreateListOutputParam(
|
||||
string key,
|
||||
IList list,
|
||||
Base @base,
|
||||
List<IGH_Goo>? elements,
|
||||
List<IGH_Goo>? displayValue
|
||||
)
|
||||
{
|
||||
// override list value for special cases
|
||||
IList actualList = key switch
|
||||
{
|
||||
"elements" when @base is Collection && elements != null => elements,
|
||||
"displayValue" when @base is Speckle.Objects.Data.DataObject && displayValue != null => displayValue,
|
||||
_ => list
|
||||
};
|
||||
|
||||
List<object> nativeObjects = new();
|
||||
foreach (var item in actualList)
|
||||
{
|
||||
switch (item)
|
||||
{
|
||||
case SpeckleWrapper wrapper:
|
||||
nativeObjects.Add(wrapper.CreateGoo());
|
||||
break;
|
||||
case Base baseItem:
|
||||
nativeObjects.AddRange(ConvertOrCreateWrapper(baseItem));
|
||||
break;
|
||||
default:
|
||||
nativeObjects.Add(item);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return CreateOutputParamByKeyValue(key, nativeObjects, GH_ParamAccess.list);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates an output parameter for dictionary properties, converting them to SpecklePropertyGroupGoo.
|
||||
/// </summary>
|
||||
private OutputParamWrapper CreateDictionaryOutputParam(string key, Dictionary<string, object?> dict)
|
||||
{
|
||||
SpecklePropertyGroupGoo propertyGoo = new();
|
||||
propertyGoo.CastFrom(dict);
|
||||
return CreateOutputParamByKeyValue(key, propertyGoo, GH_ParamAccess.item);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Converts a Speckle Base object to host geometry or creates a wrapper if conversion fails.
|
||||
/// Returns a list of SpeckleGeometryWrapperGoo objects.
|
||||
/// </summary>
|
||||
private List<SpeckleGeometryWrapperGoo> ConvertOrCreateWrapper(Base @base)
|
||||
{
|
||||
try
|
||||
{
|
||||
// convert the base and create a wrapper for each result
|
||||
// attempt conversion to host geometry
|
||||
List<(object, Base)> convertedBase = SpeckleConversionContext.Current.ConvertToHost(@base);
|
||||
List<SpeckleGeometryWrapperGoo> convertedWrappers = new();
|
||||
foreach ((object o, Base b) in convertedBase)
|
||||
{
|
||||
GeometryBase? g = o as GeometryBase;
|
||||
SpeckleGeometryWrapper convertedWrapper =
|
||||
new()
|
||||
{
|
||||
Base = b,
|
||||
GeometryBase = g,
|
||||
Name = b["name"] as string ?? "",
|
||||
Color = null,
|
||||
Material = null
|
||||
};
|
||||
|
||||
convertedWrappers.Add(new(convertedWrapper));
|
||||
}
|
||||
|
||||
return convertedWrappers;
|
||||
return convertedBase.Select(CreateGeometryWrapper).ToList();
|
||||
}
|
||||
catch (ConversionException)
|
||||
{
|
||||
// some classes, like RawEncoding, have no direct conversion or fallback value.
|
||||
// when this is the case, wrap it to allow users to further expand the object.
|
||||
SpeckleGeometryWrapper convertedWrapper =
|
||||
new()
|
||||
{
|
||||
Base = @base,
|
||||
GeometryBase = null,
|
||||
Name = @base[Constants.NAME_PROP] as string ?? "",
|
||||
Color = null,
|
||||
Material = null
|
||||
};
|
||||
|
||||
return new() { new SpeckleGeometryWrapperGoo(convertedWrapper) };
|
||||
// fallback: create wrapper without conversion for objects that can't be converted
|
||||
return new List<SpeckleGeometryWrapperGoo> { CreateFallbackWrapper(@base) };
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates a SpeckleGeometryWrapperGoo from a converted geometry and base object pair.
|
||||
/// </summary>
|
||||
private SpeckleGeometryWrapperGoo CreateGeometryWrapper((object geometry, Base @base) converted)
|
||||
{
|
||||
SpeckleGeometryWrapper wrapper =
|
||||
new()
|
||||
{
|
||||
Base = converted.@base,
|
||||
GeometryBase = converted.geometry as GeometryBase,
|
||||
Name = converted.@base["name"] as string ?? "",
|
||||
Color = null,
|
||||
Material = null
|
||||
};
|
||||
return new SpeckleGeometryWrapperGoo(wrapper);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates a fallback wrapper for Base objects that cannot be converted to host geometry.
|
||||
/// </summary>
|
||||
private SpeckleGeometryWrapperGoo CreateFallbackWrapper(Base @base)
|
||||
{
|
||||
SpeckleGeometryWrapper wrapper =
|
||||
new()
|
||||
{
|
||||
Base = @base,
|
||||
GeometryBase = null,
|
||||
Name = @base[Constants.NAME_PROP] as string ?? "",
|
||||
Color = null,
|
||||
Material = null
|
||||
};
|
||||
return new SpeckleGeometryWrapperGoo(wrapper);
|
||||
}
|
||||
|
||||
private OutputParamWrapper CreateOutputParamByKeyValue(string key, object? value, GH_ParamAccess access)
|
||||
{
|
||||
Param_GenericObject param =
|
||||
@@ -297,19 +400,17 @@ public class DeconstructSpeckleParam : GH_Component, IGH_VariableParameterCompon
|
||||
return myParam;
|
||||
}
|
||||
|
||||
public bool DestroyParameter(GH_ParameterSide side, int index)
|
||||
{
|
||||
return side == GH_ParameterSide.Output;
|
||||
}
|
||||
public bool DestroyParameter(GH_ParameterSide side, int index) => side == GH_ParameterSide.Output;
|
||||
|
||||
private void CreateOutputs(List<OutputParamWrapper> outputParams)
|
||||
{
|
||||
// TODO: better, nicer handling of creation/removal
|
||||
// remove all existing output parameters
|
||||
while (Params.Output.Count > 0)
|
||||
{
|
||||
Params.UnregisterOutputParameter(Params.Output[^1]);
|
||||
}
|
||||
|
||||
// add new output parameters
|
||||
foreach (var newParam in outputParams)
|
||||
{
|
||||
var param = new Param_GenericObject
|
||||
@@ -322,11 +423,15 @@ public class DeconstructSpeckleParam : GH_Component, IGH_VariableParameterCompon
|
||||
Params.RegisterOutputParam(param);
|
||||
}
|
||||
|
||||
// notify Grasshopper of parameter changes
|
||||
Params.OnParametersChanged();
|
||||
VariableParameterMaintenance();
|
||||
ExpireSolution(false);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Determines if the current output parameter structure differs from the required structure.
|
||||
/// </summary>
|
||||
private bool OutputMismatch(List<OutputParamWrapper> outputParams)
|
||||
{
|
||||
if (Params.Output.Count != outputParams.Count)
|
||||
@@ -334,10 +439,10 @@ public class DeconstructSpeckleParam : GH_Component, IGH_VariableParameterCompon
|
||||
return true;
|
||||
}
|
||||
|
||||
var count = 0;
|
||||
foreach (var newParam in outputParams)
|
||||
for (int i = 0; i < outputParams.Count; i++)
|
||||
{
|
||||
var oldParam = Params.Output[count];
|
||||
var newParam = outputParams[i];
|
||||
var oldParam = Params.Output[i];
|
||||
if (
|
||||
oldParam.NickName != newParam.Param.NickName
|
||||
|| oldParam.Name != newParam.Param.Name
|
||||
@@ -346,7 +451,6 @@ public class DeconstructSpeckleParam : GH_Component, IGH_VariableParameterCompon
|
||||
{
|
||||
return true;
|
||||
}
|
||||
count++;
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
@@ -306,9 +306,9 @@
|
||||
"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.Objects": "[3.5.2, )",
|
||||
"Speckle.Sdk": "[3.5.2, )",
|
||||
"Speckle.Sdk.Dependencies": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"speckle.connectors.dui": {
|
||||
@@ -341,7 +341,7 @@
|
||||
"type": "Project",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )",
|
||||
"Speckle.Objects": "[3.5.1, )"
|
||||
"Speckle.Objects": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"speckle.converters.rhino7": {
|
||||
@@ -401,18 +401,18 @@
|
||||
},
|
||||
"Speckle.Objects": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==",
|
||||
"dependencies": {
|
||||
"Speckle.Sdk": "3.5.1"
|
||||
"Speckle.Sdk": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==",
|
||||
"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.1"
|
||||
"Speckle.Sdk.Dependencies": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk.Dependencies": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA=="
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw=="
|
||||
},
|
||||
"System.Resources.Extensions": {
|
||||
"type": "CentralTransitive",
|
||||
|
||||
@@ -306,9 +306,9 @@
|
||||
"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.Objects": "[3.5.2, )",
|
||||
"Speckle.Sdk": "[3.5.2, )",
|
||||
"Speckle.Sdk.Dependencies": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"speckle.connectors.dui": {
|
||||
@@ -341,7 +341,7 @@
|
||||
"type": "Project",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )",
|
||||
"Speckle.Objects": "[3.5.1, )"
|
||||
"Speckle.Objects": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"speckle.converters.rhino8": {
|
||||
@@ -400,18 +400,18 @@
|
||||
},
|
||||
"Speckle.Objects": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==",
|
||||
"dependencies": {
|
||||
"Speckle.Sdk": "3.5.1"
|
||||
"Speckle.Sdk": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==",
|
||||
"dependencies": {
|
||||
"GraphQL.Client": "6.0.0",
|
||||
"Microsoft.Bcl.AsyncInterfaces": "5.0.0",
|
||||
@@ -421,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.1"
|
||||
"Speckle.Sdk.Dependencies": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk.Dependencies": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA=="
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw=="
|
||||
},
|
||||
"System.Resources.Extensions": {
|
||||
"type": "CentralTransitive",
|
||||
|
||||
@@ -235,9 +235,9 @@
|
||||
"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.Objects": "[3.5.2, )",
|
||||
"Speckle.Sdk": "[3.5.2, )",
|
||||
"Speckle.Sdk.Dependencies": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"speckle.connectors.dui": {
|
||||
@@ -261,7 +261,7 @@
|
||||
"type": "Project",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )",
|
||||
"Speckle.Objects": "[3.5.1, )"
|
||||
"Speckle.Objects": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"speckle.converters.rhino8": {
|
||||
@@ -311,18 +311,18 @@
|
||||
},
|
||||
"Speckle.Objects": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==",
|
||||
"dependencies": {
|
||||
"Speckle.Sdk": "3.5.1"
|
||||
"Speckle.Sdk": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==",
|
||||
"dependencies": {
|
||||
"GraphQL.Client": "6.0.0",
|
||||
"Microsoft.Data.Sqlite": "7.0.5",
|
||||
@@ -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.1"
|
||||
"Speckle.Sdk.Dependencies": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk.Dependencies": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA=="
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw=="
|
||||
}
|
||||
},
|
||||
"net8.0-windows7.0/win-x64": {
|
||||
|
||||
+67
-6
@@ -1,4 +1,5 @@
|
||||
using Rhino;
|
||||
using Rhino.Collections;
|
||||
using Rhino.DocObjects;
|
||||
using Speckle.Connectors.Rhino.Mapper.Revit;
|
||||
using Speckle.Sdk;
|
||||
@@ -19,7 +20,67 @@ public class PropertiesExtractor
|
||||
|
||||
public Dictionary<string, object?> GetProperties(RhinoObject rhObject)
|
||||
{
|
||||
Dictionary<string, object?> properties = new();
|
||||
Dictionary<string, object?> properties = GetUserStrings(rhObject);
|
||||
|
||||
Dictionary<string, object?> userDict = GetUserDict(rhObject);
|
||||
if (userDict.Count > 0)
|
||||
{
|
||||
properties["User Dictionary"] = userDict;
|
||||
}
|
||||
|
||||
return properties;
|
||||
}
|
||||
|
||||
private Dictionary<string, object?> GetUserDict(RhinoObject rhObject)
|
||||
{
|
||||
Dictionary<string, object?> userDict = new();
|
||||
if (rhObject.Attributes.UserDictionary != null && rhObject.Attributes.UserDictionary.Count > 0)
|
||||
{
|
||||
ParseArchivableToDictionary(userDict, rhObject.Attributes.UserDictionary);
|
||||
}
|
||||
|
||||
return userDict;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Copies an ArchivableDictionary to a Dictionary
|
||||
/// </summary>
|
||||
/// <param name="target"></param>
|
||||
/// <param name="dict"></param>
|
||||
private void ParseArchivableToDictionary(Dictionary<string, object?> target, ArchivableDictionary dict)
|
||||
{
|
||||
foreach (var key in dict.Keys)
|
||||
{
|
||||
var obj = dict[key];
|
||||
switch (obj)
|
||||
{
|
||||
case ArchivableDictionary o:
|
||||
Dictionary<string, object?> nested = new();
|
||||
ParseArchivableToDictionary(nested, o);
|
||||
target[key] = nested;
|
||||
continue;
|
||||
|
||||
case double:
|
||||
case bool:
|
||||
case int:
|
||||
case string:
|
||||
case IEnumerable<double>:
|
||||
case IEnumerable<bool>:
|
||||
case IEnumerable<int>:
|
||||
case IEnumerable<string>:
|
||||
target[key] = obj;
|
||||
continue;
|
||||
|
||||
default:
|
||||
target[key] = obj.ToString();
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private Dictionary<string, object?> GetUserStrings(RhinoObject rhObject)
|
||||
{
|
||||
Dictionary<string, object?> userStringDict = new();
|
||||
var userStrings = rhObject.Attributes.GetUserStrings();
|
||||
foreach (string? key in userStrings.AllKeys)
|
||||
{
|
||||
@@ -38,7 +99,7 @@ public class PropertiesExtractor
|
||||
if (userStrings[key]?.StartsWith("%<") ?? false)
|
||||
{
|
||||
var value = RhinoApp.ParseTextField(userStrings[key], rhObject, null);
|
||||
properties[key] = value;
|
||||
userStringDict[key] = value;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
@@ -47,19 +108,19 @@ public class PropertiesExtractor
|
||||
// Shh. We can fail silently here - it's not even worth logging. I expect users will complain properties are missing.
|
||||
}
|
||||
|
||||
properties[key] = userStrings[key];
|
||||
userStringDict[key] = userStrings[key];
|
||||
}
|
||||
|
||||
// NOTE: if no mapping was found on the object, check layer(s) recursively
|
||||
if (!properties.ContainsKey(RevitMappingConstants.CATEGORY_USER_STRING_KEY))
|
||||
if (!userStringDict.ContainsKey(RevitMappingConstants.CATEGORY_USER_STRING_KEY))
|
||||
{
|
||||
var layerMapping = _revitMappingResolver.SearchLayerHierarchyForMapping(rhObject);
|
||||
if (!string.IsNullOrEmpty(layerMapping))
|
||||
{
|
||||
properties[RevitMappingConstants.CATEGORY_USER_STRING_KEY] = layerMapping;
|
||||
userStringDict[RevitMappingConstants.CATEGORY_USER_STRING_KEY] = layerMapping;
|
||||
}
|
||||
}
|
||||
|
||||
return properties;
|
||||
return userStringDict;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,14 +13,17 @@ namespace Speckle.Connectors.Rhino.HostApp;
|
||||
public class RhinoInstanceUnpacker : IInstanceUnpacker<RhinoObject>
|
||||
{
|
||||
private readonly IInstanceObjectsManager<RhinoObject, List<string>> _instanceObjectsManager;
|
||||
private readonly RhinoLayerHelper _rhinoLayerHelper;
|
||||
private readonly ILogger<RhinoInstanceUnpacker> _logger;
|
||||
|
||||
public RhinoInstanceUnpacker(
|
||||
IInstanceObjectsManager<RhinoObject, List<string>> instanceObjectsManager,
|
||||
RhinoLayerHelper rhinoLayerHelper,
|
||||
ILogger<RhinoInstanceUnpacker> logger
|
||||
)
|
||||
{
|
||||
_instanceObjectsManager = instanceObjectsManager;
|
||||
_rhinoLayerHelper = rhinoLayerHelper;
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
@@ -109,7 +112,12 @@ public class RhinoInstanceUnpacker : IInstanceUnpacker<RhinoObject>
|
||||
|
||||
_instanceObjectsManager.AddDefinitionProxy(instance.InstanceDefinition.Id.ToString(), definition);
|
||||
|
||||
foreach (var obj in instance.InstanceDefinition.GetObjects())
|
||||
// NOTE: InstanceDefinition.GetObjects() returns all constituent objects of a block, but those constituent
|
||||
// objects can be on layers, that are not visible. The publish should respect that.
|
||||
// See request: [CNX-2254](https://linear.app/speckle/issue/CNX-2254/rhino-publish-blocks-with-hidden-objects)
|
||||
var allDefinitionObjects = instance.InstanceDefinition.GetObjects();
|
||||
var visibleDefinitionObjects = _rhinoLayerHelper.FilterByLayerVisibility(allDefinitionObjects);
|
||||
foreach (var obj in visibleDefinitionObjects)
|
||||
{
|
||||
definition.objects.Add(obj.Id.ToString());
|
||||
if (obj is InstanceObject localInstance)
|
||||
|
||||
@@ -131,4 +131,24 @@ public class RhinoLayerHelper
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Checks if a layer is visible by its index.
|
||||
/// </summary>
|
||||
public bool IsLayerVisible(int layerIndex)
|
||||
{
|
||||
if (layerIndex < 0 || layerIndex >= RhinoDoc.ActiveDoc.Layers.Count)
|
||||
{
|
||||
return true; // default to visible for invalid indices (safe fallback)
|
||||
}
|
||||
|
||||
var layer = RhinoDoc.ActiveDoc.Layers[layerIndex];
|
||||
return layer != null && !layer.IsDeleted && layer.IsVisible;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Filters a collection of objects to only include those on visible layers.
|
||||
/// </summary>
|
||||
public IEnumerable<T> FilterByLayerVisibility<T>(IEnumerable<T> objects)
|
||||
where T : RhinoObject => objects.Where(obj => IsLayerVisible(obj.Attributes.LayerIndex));
|
||||
}
|
||||
|
||||
@@ -177,7 +177,7 @@ public class RhinoMaterialUnpacker
|
||||
}
|
||||
|
||||
// converts a rhino material to a rhino render material
|
||||
private RenderMaterial? ConvertMaterialToRenderMaterial(Material material)
|
||||
private static RenderMaterial? ConvertMaterialToRenderMaterial(Material material)
|
||||
{
|
||||
// get physically based render material
|
||||
Material pbMaterial = material;
|
||||
@@ -188,7 +188,18 @@ public class RhinoMaterialUnpacker
|
||||
pbMaterial.ToPhysicallyBased();
|
||||
}
|
||||
|
||||
return RenderMaterial.FromMaterial(pbMaterial, null);
|
||||
var result = RenderMaterial.FromMaterial(pbMaterial, null);
|
||||
|
||||
if (result is null)
|
||||
{
|
||||
// We're seeing some weird behaviour running in the File Importer
|
||||
// where RenderMaterial.FromMaterial returns null.
|
||||
// Could be related to headless RhinoDoc or windowless RhinoCore (unsure the cause)
|
||||
// CreateBasicMaterial appears to work, so we'll use it as fall back
|
||||
result = RenderMaterial.CreateBasicMaterial(pbMaterial, null);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private SpeckleRenderMaterial ConvertRenderMaterialToSpeckle(RenderMaterial renderMaterial)
|
||||
|
||||
@@ -325,9 +325,9 @@
|
||||
"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.Objects": "[3.5.2, )",
|
||||
"Speckle.Sdk": "[3.5.2, )",
|
||||
"Speckle.Sdk.Dependencies": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"speckle.connectors.dui": {
|
||||
@@ -360,7 +360,7 @@
|
||||
"type": "Project",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )",
|
||||
"Speckle.Objects": "[3.5.1, )"
|
||||
"Speckle.Objects": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"LibTessDotNet": {
|
||||
@@ -410,18 +410,18 @@
|
||||
},
|
||||
"Speckle.Objects": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==",
|
||||
"dependencies": {
|
||||
"Speckle.Sdk": "3.5.1"
|
||||
"Speckle.Sdk": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==",
|
||||
"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.1"
|
||||
"Speckle.Sdk.Dependencies": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk.Dependencies": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA=="
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw=="
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -406,9 +406,9 @@
|
||||
"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.Objects": "[3.5.2, )",
|
||||
"Speckle.Sdk": "[3.5.2, )",
|
||||
"Speckle.Sdk.Dependencies": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"speckle.connectors.dui": {
|
||||
@@ -441,7 +441,7 @@
|
||||
"type": "Project",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )",
|
||||
"Speckle.Objects": "[3.5.1, )"
|
||||
"Speckle.Objects": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"LibTessDotNet": {
|
||||
@@ -491,18 +491,18 @@
|
||||
},
|
||||
"Speckle.Objects": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==",
|
||||
"dependencies": {
|
||||
"Speckle.Sdk": "3.5.1"
|
||||
"Speckle.Sdk": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==",
|
||||
"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.1"
|
||||
"Speckle.Sdk.Dependencies": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk.Dependencies": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA=="
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw=="
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -406,9 +406,9 @@
|
||||
"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.Objects": "[3.5.2, )",
|
||||
"Speckle.Sdk": "[3.5.2, )",
|
||||
"Speckle.Sdk.Dependencies": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"speckle.connectors.dui": {
|
||||
@@ -441,7 +441,7 @@
|
||||
"type": "Project",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )",
|
||||
"Speckle.Objects": "[3.5.1, )"
|
||||
"Speckle.Objects": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"LibTessDotNet": {
|
||||
@@ -491,18 +491,18 @@
|
||||
},
|
||||
"Speckle.Objects": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==",
|
||||
"dependencies": {
|
||||
"Speckle.Sdk": "3.5.1"
|
||||
"Speckle.Sdk": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==",
|
||||
"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.1"
|
||||
"Speckle.Sdk.Dependencies": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk.Dependencies": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA=="
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw=="
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -258,7 +258,7 @@
|
||||
"type": "Project",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )",
|
||||
"Speckle.Objects": "[3.5.1, )"
|
||||
"Speckle.Objects": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Logging": {
|
||||
@@ -287,18 +287,18 @@
|
||||
},
|
||||
"Speckle.Objects": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==",
|
||||
"dependencies": {
|
||||
"Speckle.Sdk": "3.5.1"
|
||||
"Speckle.Sdk": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==",
|
||||
"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.1"
|
||||
"Speckle.Sdk.Dependencies": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk.Dependencies": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA=="
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw=="
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -258,7 +258,7 @@
|
||||
"type": "Project",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )",
|
||||
"Speckle.Objects": "[3.5.1, )"
|
||||
"Speckle.Objects": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Logging": {
|
||||
@@ -287,18 +287,18 @@
|
||||
},
|
||||
"Speckle.Objects": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==",
|
||||
"dependencies": {
|
||||
"Speckle.Sdk": "3.5.1"
|
||||
"Speckle.Sdk": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==",
|
||||
"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.1"
|
||||
"Speckle.Sdk.Dependencies": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk.Dependencies": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA=="
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw=="
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -259,9 +259,9 @@
|
||||
"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.Objects": "[3.5.2, )",
|
||||
"Speckle.Sdk": "[3.5.2, )",
|
||||
"Speckle.Sdk.Dependencies": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"speckle.connectors.dui": {
|
||||
@@ -285,7 +285,7 @@
|
||||
"type": "Project",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )",
|
||||
"Speckle.Objects": "[3.5.1, )"
|
||||
"Speckle.Objects": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.DependencyInjection": {
|
||||
@@ -329,18 +329,18 @@
|
||||
},
|
||||
"Speckle.Objects": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==",
|
||||
"dependencies": {
|
||||
"Speckle.Sdk": "3.5.1"
|
||||
"Speckle.Sdk": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==",
|
||||
"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.1"
|
||||
"Speckle.Sdk.Dependencies": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk.Dependencies": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA=="
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw=="
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -210,9 +210,9 @@
|
||||
"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.Objects": "[3.5.2, )",
|
||||
"Speckle.Sdk": "[3.5.2, )",
|
||||
"Speckle.Sdk.Dependencies": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"speckle.connectors.dui": {
|
||||
@@ -236,7 +236,7 @@
|
||||
"type": "Project",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )",
|
||||
"Speckle.Objects": "[3.5.1, )"
|
||||
"Speckle.Objects": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.DependencyInjection": {
|
||||
@@ -280,18 +280,18 @@
|
||||
},
|
||||
"Speckle.Objects": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==",
|
||||
"dependencies": {
|
||||
"Speckle.Sdk": "3.5.1"
|
||||
"Speckle.Sdk": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==",
|
||||
"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.1"
|
||||
"Speckle.Sdk.Dependencies": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk.Dependencies": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA=="
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw=="
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -210,9 +210,9 @@
|
||||
"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.Objects": "[3.5.2, )",
|
||||
"Speckle.Sdk": "[3.5.2, )",
|
||||
"Speckle.Sdk.Dependencies": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"speckle.connectors.dui": {
|
||||
@@ -236,7 +236,7 @@
|
||||
"type": "Project",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )",
|
||||
"Speckle.Objects": "[3.5.1, )"
|
||||
"Speckle.Objects": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.DependencyInjection": {
|
||||
@@ -280,18 +280,18 @@
|
||||
},
|
||||
"Speckle.Objects": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==",
|
||||
"dependencies": {
|
||||
"Speckle.Sdk": "3.5.1"
|
||||
"Speckle.Sdk": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==",
|
||||
"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.1"
|
||||
"Speckle.Sdk.Dependencies": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk.Dependencies": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA=="
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw=="
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,3 +1,8 @@
|
||||
namespace Speckle.Converters.CSiShared;
|
||||
|
||||
public record CsiConversionSettings(cSapModel SapModel, string SpeckleUnits);
|
||||
public record CsiConversionSettings(
|
||||
cSapModel SapModel,
|
||||
string SpeckleUnits,
|
||||
List<string>? SelectedLoadCasesAndCombinations = null,
|
||||
List<string>? SelectedResultTypes = null
|
||||
);
|
||||
|
||||
@@ -11,6 +11,15 @@ public class CsiConversionSettingsFactory(
|
||||
{
|
||||
public CsiConversionSettings Current => settingsStore.Current;
|
||||
|
||||
public CsiConversionSettings Create(cSapModel document) =>
|
||||
new(document, unitsConverter.ConvertOrThrow(document.GetPresentUnits()));
|
||||
public CsiConversionSettings Create(
|
||||
cSapModel document,
|
||||
List<string>? selectedLoadCasesAndCombinations = null,
|
||||
List<string>? selectedResultTypes = null
|
||||
) =>
|
||||
new(
|
||||
document,
|
||||
unitsConverter.ConvertOrThrow(document.GetPresentUnits()),
|
||||
selectedLoadCasesAndCombinations ?? [],
|
||||
selectedResultTypes ?? []
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Speckle.Converters.Common;
|
||||
using Speckle.Converters.Common.Objects;
|
||||
using Speckle.Converters.Common.Registration;
|
||||
@@ -10,18 +9,10 @@ namespace Speckle.Converters.CSiShared;
|
||||
public class CsiRootToSpeckleConverter : IRootToSpeckleConverter
|
||||
{
|
||||
private readonly IConverterManager<IToSpeckleTopLevelConverter> _toSpeckle;
|
||||
private readonly IConverterSettingsStore<CsiConversionSettings> _settingsStore;
|
||||
private readonly ILogger<CsiRootToSpeckleConverter> _logger;
|
||||
|
||||
public CsiRootToSpeckleConverter(
|
||||
IConverterManager<IToSpeckleTopLevelConverter> toSpeckle,
|
||||
IConverterSettingsStore<CsiConversionSettings> settingsStore,
|
||||
ILogger<CsiRootToSpeckleConverter> logger
|
||||
)
|
||||
public CsiRootToSpeckleConverter(IConverterManager<IToSpeckleTopLevelConverter> toSpeckle)
|
||||
{
|
||||
_toSpeckle = toSpeckle;
|
||||
_settingsStore = settingsStore;
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
public Base Convert(object target)
|
||||
|
||||
@@ -22,23 +22,39 @@ namespace Speckle.Converters.CSiShared.Extensions;
|
||||
public record TableData
|
||||
{
|
||||
private readonly string[] _columnNames; // "fieldKeys" in api docs
|
||||
private readonly string[] _rawTableData; // indicating raw, one-dimensional array of table data (before processing)
|
||||
private readonly int _rowCount; // Number of rows
|
||||
private IReadOnlyDictionary<string, IReadOnlyDictionary<string, string>>? _processedRows; // Cached data structure
|
||||
private readonly string[] _rawTableData; // raw, one-dimensional array of table data (before processing)
|
||||
private readonly int _rowCount; // number of rows
|
||||
private readonly string _indexColumn; // column used to index/identify rows (typically, "UniqueName")
|
||||
private readonly string[]? _additionalKeyColumns; // optional additional columns for compound keys (e.g. repeating "UniqueName")
|
||||
|
||||
public TableData(string[] columnNames, string[] rawTableData, int rowCount, string indexColumn)
|
||||
private IReadOnlyDictionary<string, IReadOnlyDictionary<string, string>>? _processedRows; // cached data structure
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new TableData instance for processing CSI database table data.
|
||||
/// </summary>
|
||||
/// <param name="columnNames">Array of column names in the table</param>
|
||||
/// <param name="rawTableData">Raw 1D array of table data from CSI API</param>
|
||||
/// <param name="rowCount">Number of rows in the table</param>
|
||||
/// <param name="indexColumn">Primary column to use as row identifier</param>
|
||||
/// <param name="additionalKeyColumns">Optional additional columns to form compound keys for tables with non-unique primary keys</param>
|
||||
public TableData(
|
||||
string[] columnNames,
|
||||
string[] rawTableData,
|
||||
int rowCount,
|
||||
string indexColumn,
|
||||
string[]? additionalKeyColumns = null
|
||||
)
|
||||
{
|
||||
_columnNames = columnNames;
|
||||
_rawTableData = rawTableData;
|
||||
_rowCount = rowCount;
|
||||
_indexColumn = indexColumn;
|
||||
_additionalKeyColumns = additionalKeyColumns;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets table data as a dictionary mapping indexColumn (typically "UniqueName" to _processedRows).
|
||||
/// Each row is itself a dictionary mapping column names to their values.
|
||||
/// Computed once on first access and cached.
|
||||
/// Each row is itself a dictionary mapping column names to their values. Computed once on first access and cached.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Motivation:
|
||||
@@ -47,6 +63,11 @@ public record TableData
|
||||
/// <item><description>Each row keyed by its "UniqueName" value</description></item>
|
||||
/// <item><description>Each row value is itself a dictionary of field keys to values</description></item>
|
||||
/// </list>
|
||||
/// When additionalKeyColumns are provided, keys are formed by combining values from all key columns
|
||||
/// using a pipe separator (|).
|
||||
///
|
||||
/// If additionalKeyColumns are not provided and the table has multiple rows with the same primary key,
|
||||
/// only the last row for each key will be preserved, and a warning will be logged.
|
||||
/// </remarks>
|
||||
public IReadOnlyDictionary<string, IReadOnlyDictionary<string, string>> Rows
|
||||
{
|
||||
@@ -67,8 +88,26 @@ public record TableData
|
||||
);
|
||||
}
|
||||
|
||||
// Get indices for additional key columns if provided
|
||||
int[] additionalKeyIndices = [];
|
||||
if (_additionalKeyColumns != null && _additionalKeyColumns.Length > 0)
|
||||
{
|
||||
additionalKeyIndices = new int[_additionalKeyColumns.Length];
|
||||
for (int i = 0; i < _additionalKeyColumns.Length; i++)
|
||||
{
|
||||
additionalKeyIndices[i] = Array.IndexOf(_columnNames, _additionalKeyColumns[i]);
|
||||
if (additionalKeyIndices[i] == -1)
|
||||
{
|
||||
throw new InvalidOperationException(
|
||||
$"Additional key column '{_additionalKeyColumns[i]}' not found in the database."
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Pre-size dictionary with known capacity
|
||||
var rows = new Dictionary<string, IReadOnlyDictionary<string, string>>(_rowCount);
|
||||
var keysSeen = new HashSet<string>(); // Track keys to detect duplicates
|
||||
|
||||
// Create a field index lookup to avoid repeated Array.IndexOf calls
|
||||
var fieldIndexLookup = new Dictionary<string, int>(columnsPerRow);
|
||||
@@ -78,20 +117,56 @@ public record TableData
|
||||
}
|
||||
|
||||
// Process each row
|
||||
bool hasMultipleRowsPerKey = false;
|
||||
for (int rowStart = 0; rowStart < _rawTableData.Length; rowStart += columnsPerRow)
|
||||
{
|
||||
var keyValue = _rawTableData[rowStart + indexColumnIndex];
|
||||
// Get the primary key value
|
||||
var primaryKeyValue = _rawTableData[rowStart + indexColumnIndex];
|
||||
|
||||
// Pre-size the row dictionary
|
||||
// Construct the full key (either just primary key or compound key)
|
||||
string fullKey;
|
||||
if (additionalKeyIndices.Length > 0)
|
||||
{
|
||||
// Build compound key with additional columns
|
||||
var keyParts = new string[1 + additionalKeyIndices.Length];
|
||||
keyParts[0] = primaryKeyValue;
|
||||
|
||||
for (int i = 0; i < additionalKeyIndices.Length; i++)
|
||||
{
|
||||
keyParts[i + 1] = _rawTableData[rowStart + additionalKeyIndices[i]];
|
||||
}
|
||||
|
||||
fullKey = string.Join("|", keyParts);
|
||||
}
|
||||
else
|
||||
{
|
||||
fullKey = primaryKeyValue;
|
||||
}
|
||||
|
||||
// Check if this key has been seen before (only matters if no additionalKeyColumns)
|
||||
if (additionalKeyIndices.Length == 0 && keysSeen.Contains(primaryKeyValue))
|
||||
{
|
||||
hasMultipleRowsPerKey = true;
|
||||
}
|
||||
keysSeen.Add(primaryKeyValue);
|
||||
|
||||
// Create row dictionary
|
||||
var row = new Dictionary<string, string>(columnsPerRow, StringComparer.Ordinal);
|
||||
|
||||
// Use index lookup instead of repeated string comparisons
|
||||
foreach (var kvp in fieldIndexLookup)
|
||||
{
|
||||
row[kvp.Key] = _rawTableData[rowStart + kvp.Value];
|
||||
}
|
||||
|
||||
rows[keyValue] = row;
|
||||
rows[fullKey] = row;
|
||||
}
|
||||
|
||||
if (hasMultipleRowsPerKey && additionalKeyIndices.Length == 0)
|
||||
{
|
||||
System.Diagnostics.Debug.WriteLine(
|
||||
$"WARNING: Table has multiple rows with the same primary key '{_indexColumn}'. "
|
||||
+ "Only the last row for each key is preserved. Consider specifying additionalKeyColumns "
|
||||
+ "when calling GetTableData to create compound keys."
|
||||
);
|
||||
}
|
||||
|
||||
_processedRows = rows;
|
||||
@@ -126,4 +201,9 @@ public record TableData
|
||||
value = string.Empty;
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Indicates whether this TableData was created with compound keys (additionalKeyColumns).
|
||||
/// </summary>
|
||||
public bool HasCompoundKeys => _additionalKeyColumns != null && _additionalKeyColumns.Length > 0;
|
||||
}
|
||||
|
||||
@@ -24,6 +24,15 @@ public static class ServiceRegistration
|
||||
serviceCollection.AddScoped<DisplayValueExtractor>();
|
||||
serviceCollection.AddScoped<SharedPropertiesExtractor>();
|
||||
|
||||
// Register results extractors
|
||||
serviceCollection.AddScoped<CsiBaseReactResultsExtractor>();
|
||||
serviceCollection.AddScoped<CsiFrameForceResultsExtractor>();
|
||||
serviceCollection.AddScoped<CsiJointReactResultsExtractor>();
|
||||
serviceCollection.AddScoped<CsiPierForceResultsExtractor>();
|
||||
serviceCollection.AddScoped<CsiSpandrelForceResultsExtractor>();
|
||||
serviceCollection.AddScoped<CsiStoryDriftsResultsExtractor>();
|
||||
serviceCollection.AddScoped<ResultsArrayProcessor>();
|
||||
|
||||
// Register connector caches
|
||||
serviceCollection.AddScoped<CsiToSpeckleCacheSingleton>();
|
||||
|
||||
|
||||
@@ -18,11 +18,19 @@
|
||||
<Compile Include="$(MSBuildThisFileDirectory)Extensions\SpeckleApplicationIdExtensions.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)GlobalUsing.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)ServiceRegistration.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)ToSpeckle\Helpers\CsiBaseReactResultsExtractor.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)ToSpeckle\Helpers\CsiFrameForceResultsExtractor.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)ToSpeckle\Helpers\CsiFramePropertiesExtractor.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)ToSpeckle\Helpers\CsiJointPropertiesExtractor.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)ToSpeckle\Helpers\CsiJointReactResultsExtractor.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)ToSpeckle\Helpers\CsiPierForceResultsExtractor.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)ToSpeckle\Helpers\CsiShellPropertiesExtractor.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)ToSpeckle\Helpers\CsiSpandrelForceResultsExtractor.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)ToSpeckle\Helpers\CsiStoryDriftsResultsExtractor.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)ToSpeckle\Helpers\CsiToSpeckleCacheSingleton.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)ToSpeckle\Helpers\DatabaseTableExtractor.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)ToSpeckle\Helpers\IApplicationResultsExtractor.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)ToSpeckle\Helpers\ResultsArrayProcessor.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)ToSpeckle\Raw\LineToSpeckleConverter.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)ToSpeckle\Raw\MeshToSpeckleConverter.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)ToSpeckle\Raw\PointToSpeckleConverter.cs" />
|
||||
@@ -33,5 +41,6 @@
|
||||
<Compile Include="$(MSBuildThisFileDirectory)Utils\Constants.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)Utils\DictionaryExtensions.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)Utils\Enums.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)Utils\ResultsConfiguration.cs" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
+89
@@ -0,0 +1,89 @@
|
||||
using Speckle.Converters.Common;
|
||||
using Speckle.Converters.CSiShared.Utils;
|
||||
|
||||
namespace Speckle.Converters.CSiShared.ToSpeckle.Helpers;
|
||||
|
||||
public class CsiBaseReactResultsExtractor : IApplicationResultsExtractor
|
||||
{
|
||||
private readonly IConverterSettingsStore<CsiConversionSettings> _settingsStore;
|
||||
private readonly ResultsArrayProcessor _resultsArrayProcessor;
|
||||
|
||||
public string ResultsKey => "baseReact";
|
||||
public ModelObjectType TargetObjectType => ModelObjectType.JOINT;
|
||||
public ResultsConfiguration Configuration { get; } =
|
||||
new(["LoadCase", "Wrap:StepNum"], ["FX", "FY", "FZ", "MX", "ParamMy", "MZ"]);
|
||||
|
||||
public CsiBaseReactResultsExtractor(
|
||||
IConverterSettingsStore<CsiConversionSettings> settingsStore,
|
||||
ResultsArrayProcessor resultsArrayProcessor
|
||||
)
|
||||
{
|
||||
_settingsStore = settingsStore;
|
||||
_resultsArrayProcessor = resultsArrayProcessor;
|
||||
}
|
||||
|
||||
// NOTE: since these are global reactions, they're independent of the user selection, therefore discarded
|
||||
public Dictionary<string, object> GetResults(IEnumerable<string>? _)
|
||||
{
|
||||
// Step 1: define api variables
|
||||
int numberResults = 0;
|
||||
string[] loadCase = [],
|
||||
stepType = [];
|
||||
double[] stepNum = [],
|
||||
fx = [],
|
||||
fy = [],
|
||||
fz = [],
|
||||
mx = [],
|
||||
paramMy = [],
|
||||
mz = [];
|
||||
double gx = 0,
|
||||
gy = 0,
|
||||
gz = 0;
|
||||
|
||||
// Step 2: api call
|
||||
int success = _settingsStore.Current.SapModel.Results.BaseReact(
|
||||
ref numberResults,
|
||||
ref loadCase,
|
||||
ref stepType,
|
||||
ref stepNum,
|
||||
ref fx,
|
||||
ref fy,
|
||||
ref fz,
|
||||
ref mx,
|
||||
ref paramMy,
|
||||
ref mz,
|
||||
ref gx,
|
||||
ref gy,
|
||||
ref gz
|
||||
);
|
||||
|
||||
if (success != 0 || numberResults == 0)
|
||||
{
|
||||
throw new InvalidOperationException("Base reaction extraction failed."); // shouldn't fail silently
|
||||
}
|
||||
|
||||
// Step 3: organise arrays for dictionary processor
|
||||
var rawArrays = new Dictionary<string, object>
|
||||
{
|
||||
["LoadCase"] = loadCase,
|
||||
["StepNum"] = stepNum,
|
||||
["FX"] = fx,
|
||||
["FY"] = fy,
|
||||
["FZ"] = fz,
|
||||
["MX"] = mx,
|
||||
["ParamMy"] = paramMy,
|
||||
["MZ"] = mz
|
||||
};
|
||||
|
||||
// Step 4: return sorted and processed dictionary
|
||||
var resultsDictionary = _resultsArrayProcessor.ProcessArrays(rawArrays, Configuration);
|
||||
|
||||
// Step 5: add the extra centroid information
|
||||
resultsDictionary["GX"] = gx;
|
||||
resultsDictionary["GY"] = gy;
|
||||
resultsDictionary["GZ"] = gz;
|
||||
|
||||
// Step 6: return
|
||||
return resultsDictionary;
|
||||
}
|
||||
}
|
||||
+112
@@ -0,0 +1,112 @@
|
||||
using Speckle.Converters.Common;
|
||||
using Speckle.Converters.CSiShared.Utils;
|
||||
|
||||
namespace Speckle.Converters.CSiShared.ToSpeckle.Helpers;
|
||||
|
||||
public sealed class CsiFrameForceResultsExtractor : IApplicationResultsExtractor
|
||||
{
|
||||
private readonly IConverterSettingsStore<CsiConversionSettings> _settingsStore;
|
||||
private readonly ResultsArrayProcessor _resultsArrayProcessor;
|
||||
|
||||
public string ResultsKey => "frameForces";
|
||||
public ModelObjectType TargetObjectType => ModelObjectType.FRAME;
|
||||
|
||||
public ResultsConfiguration Configuration { get; } =
|
||||
new(["Elm", "LoadCase", "Wrap:ElmSta", "Wrap:StepNum"], ["P", "V2", "V3", "T", "M2", "M3"]);
|
||||
|
||||
public CsiFrameForceResultsExtractor(
|
||||
IConverterSettingsStore<CsiConversionSettings> settingsStore,
|
||||
ResultsArrayProcessor resultsArrayProcessor
|
||||
)
|
||||
{
|
||||
_settingsStore = settingsStore;
|
||||
_resultsArrayProcessor = resultsArrayProcessor;
|
||||
}
|
||||
|
||||
public Dictionary<string, object> GetResults(IEnumerable<string>? objectNames = null)
|
||||
{
|
||||
// Step 1: validate input
|
||||
var frameNames = objectNames?.ToList();
|
||||
if (frameNames is null || frameNames.Count == 0)
|
||||
{
|
||||
throw new InvalidOperationException("Frame(s) are required in the selection for results extraction");
|
||||
}
|
||||
|
||||
// Step 2: single dictionary to accumulate all results
|
||||
var allArrays = new Dictionary<string, List<object>>
|
||||
{
|
||||
["Elm"] = [],
|
||||
["ElmSta"] = [],
|
||||
["LoadCase"] = [],
|
||||
["StepNum"] = [],
|
||||
["P"] = [],
|
||||
["V2"] = [],
|
||||
["V3"] = [],
|
||||
["T"] = [],
|
||||
["M2"] = [],
|
||||
["M3"] = []
|
||||
};
|
||||
|
||||
// Step 3: define api variables
|
||||
int numberResults = 0;
|
||||
string[] obj = [],
|
||||
elm = [],
|
||||
loadCase = [],
|
||||
stepType = [];
|
||||
double[] objSta = [],
|
||||
elmSta = [],
|
||||
stepNum = [],
|
||||
p = [],
|
||||
v2 = [],
|
||||
v3 = [],
|
||||
t = [],
|
||||
m2 = [],
|
||||
m3 = [];
|
||||
|
||||
// Step 4: iterate through objectNames and get frame results for those
|
||||
foreach (string frameName in frameNames)
|
||||
{
|
||||
int success = _settingsStore.Current.SapModel.Results.FrameForce(
|
||||
frameName,
|
||||
eItemTypeElm.ObjectElm,
|
||||
ref numberResults,
|
||||
ref obj,
|
||||
ref objSta,
|
||||
ref elm,
|
||||
ref elmSta,
|
||||
ref loadCase,
|
||||
ref stepType,
|
||||
ref stepNum,
|
||||
ref p,
|
||||
ref v2,
|
||||
ref v3,
|
||||
ref t,
|
||||
ref m2,
|
||||
ref m3
|
||||
);
|
||||
|
||||
if (success != 0)
|
||||
{
|
||||
throw new InvalidOperationException($"Frame force extraction failed for frame {frameName}."); // shouldn't fail silently
|
||||
}
|
||||
|
||||
// accumulate results
|
||||
allArrays["Elm"].AddRange(elm.Cast<object>());
|
||||
allArrays["ElmSta"].AddRange(elmSta.Cast<object>());
|
||||
allArrays["LoadCase"].AddRange(loadCase.Cast<object>());
|
||||
allArrays["StepNum"].AddRange(stepNum.Cast<object>());
|
||||
allArrays["P"].AddRange(p.Cast<object>());
|
||||
allArrays["V2"].AddRange(v2.Cast<object>());
|
||||
allArrays["V3"].AddRange(v3.Cast<object>());
|
||||
allArrays["T"].AddRange(t.Cast<object>());
|
||||
allArrays["M2"].AddRange(m2.Cast<object>());
|
||||
allArrays["M3"].AddRange(m3.Cast<object>());
|
||||
}
|
||||
|
||||
// Step 5: organise arrays for dictionary processor
|
||||
var rawArrays = allArrays.ToDictionary(kvp => kvp.Key, kvp => (object)kvp.Value.ToArray());
|
||||
|
||||
// Step 6: return sorted and processed dictionary
|
||||
return _resultsArrayProcessor.ProcessArrays(rawArrays, Configuration);
|
||||
}
|
||||
}
|
||||
-1
@@ -26,7 +26,6 @@ namespace Speckle.Converters.CSiShared.ToSpeckle.Helpers;
|
||||
public sealed class CsiFramePropertiesExtractor
|
||||
{
|
||||
private readonly IConverterSettingsStore<CsiConversionSettings> _settingsStore;
|
||||
|
||||
private readonly CsiToSpeckleCacheSingleton _csiToSpeckleCacheSingleton;
|
||||
|
||||
private static readonly string[] s_releaseKeys =
|
||||
|
||||
+115
@@ -0,0 +1,115 @@
|
||||
using Speckle.Converters.Common;
|
||||
using Speckle.Converters.CSiShared.Utils;
|
||||
|
||||
namespace Speckle.Converters.CSiShared.ToSpeckle.Helpers;
|
||||
|
||||
public class CsiJointReactResultsExtractor : IApplicationResultsExtractor
|
||||
{
|
||||
private readonly IConverterSettingsStore<CsiConversionSettings> _settingsStore;
|
||||
private readonly ResultsArrayProcessor _resultsArrayProcessor;
|
||||
|
||||
public string ResultsKey => "jointReact";
|
||||
public ModelObjectType TargetObjectType => ModelObjectType.JOINT;
|
||||
public ResultsConfiguration Configuration { get; } =
|
||||
new(["Elm", "LoadCase", "Wrap:StepNum"], ["F1", "F2", "F3", "M1", "M2", "M3"]);
|
||||
|
||||
public CsiJointReactResultsExtractor(
|
||||
IConverterSettingsStore<CsiConversionSettings> settingsStore,
|
||||
ResultsArrayProcessor resultsArrayProcessor
|
||||
)
|
||||
{
|
||||
_settingsStore = settingsStore;
|
||||
_resultsArrayProcessor = resultsArrayProcessor;
|
||||
}
|
||||
|
||||
public Dictionary<string, object> GetResults(IEnumerable<string>? objectNames = null)
|
||||
{
|
||||
// Step 1: validate input
|
||||
var jointNames = objectNames?.ToList();
|
||||
if (jointNames is null || jointNames.Count == 0)
|
||||
{
|
||||
throw new InvalidOperationException("Joint(s) are required in the selection for results extraction");
|
||||
}
|
||||
|
||||
// Step 2: single dictionary to accumulate all results
|
||||
var allArrays = new Dictionary<string, List<object>>
|
||||
{
|
||||
["Elm"] = [],
|
||||
["LoadCase"] = [],
|
||||
["StepNum"] = [],
|
||||
["F1"] = [],
|
||||
["F2"] = [],
|
||||
["F3"] = [],
|
||||
["M1"] = [],
|
||||
["M2"] = [],
|
||||
["M3"] = []
|
||||
};
|
||||
|
||||
// Step 3: define api variables
|
||||
int numberResults = 0;
|
||||
string[] obj = [],
|
||||
elm = [],
|
||||
loadCase = [],
|
||||
stepType = [];
|
||||
double[] stepNum = [],
|
||||
f1 = [],
|
||||
f2 = [],
|
||||
f3 = [],
|
||||
m1 = [],
|
||||
m2 = [],
|
||||
m3 = [];
|
||||
|
||||
// Step 4: iterate through objectNames and get joint reaction results for those that are assigned restraints / springs and grounded
|
||||
foreach (string jointName in jointNames)
|
||||
{
|
||||
// this only works if the joint has restraints or springs assignments, so check if it's a valid query first
|
||||
bool[] restraints = [];
|
||||
string springAssignment = string.Empty;
|
||||
_settingsStore.Current.SapModel.PointObj.GetRestraint(jointName, ref restraints);
|
||||
_settingsStore.Current.SapModel.PointObj.GetSpringAssignment(jointName, ref springAssignment);
|
||||
if (restraints.All(r => !r) && string.IsNullOrEmpty(springAssignment))
|
||||
{
|
||||
continue; // skip this joint - it has neither restraints nor springs
|
||||
}
|
||||
|
||||
int success = _settingsStore.Current.SapModel.Results.JointReact(
|
||||
jointName,
|
||||
eItemTypeElm.ObjectElm,
|
||||
ref numberResults,
|
||||
ref obj,
|
||||
ref elm,
|
||||
ref loadCase,
|
||||
ref stepType,
|
||||
ref stepNum,
|
||||
ref f1,
|
||||
ref f2,
|
||||
ref f3,
|
||||
ref m1,
|
||||
ref m2,
|
||||
ref m3
|
||||
);
|
||||
|
||||
if (success != 0)
|
||||
{
|
||||
throw new InvalidOperationException($"Joint force extraction failed for frame {jointName}."); // shouldn't fail silently
|
||||
}
|
||||
|
||||
// accumulate results
|
||||
allArrays["Elm"].AddRange(elm.Cast<object>());
|
||||
allArrays["LoadCase"].AddRange(loadCase.Cast<object>());
|
||||
allArrays["StepNum"].AddRange(stepNum.Cast<object>());
|
||||
allArrays["F1"].AddRange(f1.Cast<object>());
|
||||
allArrays["F2"].AddRange(f2.Cast<object>());
|
||||
allArrays["F3"].AddRange(f3.Cast<object>());
|
||||
allArrays["M1"].AddRange(m1.Cast<object>());
|
||||
allArrays["M2"].AddRange(m2.Cast<object>());
|
||||
allArrays["M3"].AddRange(m3.Cast<object>());
|
||||
}
|
||||
|
||||
// Step 5: organise arrays for dictionary processor
|
||||
var rawArrays = allArrays.ToDictionary(kvp => kvp.Key, kvp => (object)kvp.Value.ToArray());
|
||||
|
||||
// Step 6: return sorted and processed dictionary
|
||||
return _resultsArrayProcessor.ProcessArrays(rawArrays, Configuration);
|
||||
}
|
||||
}
|
||||
+78
@@ -0,0 +1,78 @@
|
||||
using Speckle.Converters.Common;
|
||||
using Speckle.Converters.CSiShared.Utils;
|
||||
|
||||
namespace Speckle.Converters.CSiShared.ToSpeckle.Helpers;
|
||||
|
||||
public class CsiPierForceResultsExtractor : IApplicationResultsExtractor
|
||||
{
|
||||
private readonly IConverterSettingsStore<CsiConversionSettings> _settingsStore;
|
||||
private readonly ResultsArrayProcessor _resultsArrayProcessor;
|
||||
public string ResultsKey => "pierForces";
|
||||
public ModelObjectType TargetObjectType => ModelObjectType.NONE;
|
||||
public ResultsConfiguration Configuration { get; } =
|
||||
new(["PierName", "StoryName", "LoadCase", "Wrap:Location"], ["P", "V2", "V3", "T", "M2", "M3"]);
|
||||
|
||||
public CsiPierForceResultsExtractor(
|
||||
IConverterSettingsStore<CsiConversionSettings> settingsStore,
|
||||
ResultsArrayProcessor resultsArrayProcessor
|
||||
)
|
||||
{
|
||||
_settingsStore = settingsStore;
|
||||
_resultsArrayProcessor = resultsArrayProcessor;
|
||||
}
|
||||
|
||||
// NOTE: since these pier assignments aren't object specific, they're independent of the user selection, therefore discarded
|
||||
public Dictionary<string, object> GetResults(IEnumerable<string>? _)
|
||||
{
|
||||
// Step 1: define api variables
|
||||
int numberResults = 0;
|
||||
string[] storyName = [],
|
||||
pierName = [],
|
||||
loadCase = [],
|
||||
location = [];
|
||||
double[] p = [],
|
||||
v2 = [],
|
||||
v3 = [],
|
||||
t = [],
|
||||
m2 = [],
|
||||
m3 = [];
|
||||
|
||||
// Step 2: api call
|
||||
int success = _settingsStore.Current.SapModel.Results.PierForce(
|
||||
ref numberResults,
|
||||
ref storyName,
|
||||
ref pierName,
|
||||
ref loadCase,
|
||||
ref location,
|
||||
ref p,
|
||||
ref v2,
|
||||
ref v3,
|
||||
ref t,
|
||||
ref m2,
|
||||
ref m3
|
||||
);
|
||||
|
||||
if (success != 0 || numberResults == 0)
|
||||
{
|
||||
throw new InvalidOperationException("Pier force extraction failed.");
|
||||
}
|
||||
|
||||
// Step 3: organise arrays for dictionary processor
|
||||
var rawArrays = new Dictionary<string, object>
|
||||
{
|
||||
["StoryName"] = storyName,
|
||||
["PierName"] = pierName,
|
||||
["LoadCase"] = loadCase,
|
||||
["Location"] = location,
|
||||
["P"] = p,
|
||||
["V2"] = v2,
|
||||
["V3"] = v3,
|
||||
["T"] = t,
|
||||
["M2"] = m2,
|
||||
["M3"] = m3
|
||||
};
|
||||
|
||||
// Step 4: return sorted and processed dictionary
|
||||
return _resultsArrayProcessor.ProcessArrays(rawArrays, Configuration);
|
||||
}
|
||||
}
|
||||
+79
@@ -0,0 +1,79 @@
|
||||
using Speckle.Converters.Common;
|
||||
using Speckle.Converters.CSiShared.Utils;
|
||||
|
||||
namespace Speckle.Converters.CSiShared.ToSpeckle.Helpers;
|
||||
|
||||
public class CsiSpandrelForceResultsExtractor : IApplicationResultsExtractor
|
||||
{
|
||||
private readonly IConverterSettingsStore<CsiConversionSettings> _settingsStore;
|
||||
private readonly ResultsArrayProcessor _resultsArrayProcessor;
|
||||
public string ResultsKey => "spandrelForces";
|
||||
public ModelObjectType TargetObjectType => ModelObjectType.NONE;
|
||||
|
||||
public ResultsConfiguration Configuration { get; } =
|
||||
new(["SpandrelName", "StoryName", "LoadCase", "Wrap:Location"], ["P", "V2", "V3", "T", "M2", "M3"]);
|
||||
|
||||
public CsiSpandrelForceResultsExtractor(
|
||||
IConverterSettingsStore<CsiConversionSettings> settingsStore,
|
||||
ResultsArrayProcessor resultsArrayProcessor
|
||||
)
|
||||
{
|
||||
_settingsStore = settingsStore;
|
||||
_resultsArrayProcessor = resultsArrayProcessor;
|
||||
}
|
||||
|
||||
// NOTE: since these spandrel assignments aren't object specific, they're independent of the user selection, therefore discarded
|
||||
public Dictionary<string, object> GetResults(IEnumerable<string>? _)
|
||||
{
|
||||
// Step 1: define api variables
|
||||
int numberResults = 0;
|
||||
string[] storyName = [],
|
||||
spandrelName = [],
|
||||
loadCase = [],
|
||||
location = [];
|
||||
double[] p = [],
|
||||
v2 = [],
|
||||
v3 = [],
|
||||
t = [],
|
||||
m2 = [],
|
||||
m3 = [];
|
||||
|
||||
// Step 2: api call
|
||||
int success = _settingsStore.Current.SapModel.Results.SpandrelForce(
|
||||
ref numberResults,
|
||||
ref storyName,
|
||||
ref spandrelName,
|
||||
ref loadCase,
|
||||
ref location,
|
||||
ref p,
|
||||
ref v2,
|
||||
ref v3,
|
||||
ref t,
|
||||
ref m2,
|
||||
ref m3
|
||||
);
|
||||
|
||||
if (success != 0 || numberResults == 0)
|
||||
{
|
||||
throw new InvalidOperationException("Spandrel force extraction failed."); // shouldn't fail silently
|
||||
}
|
||||
|
||||
// Step 3: organise arrays for dictionary processor
|
||||
var rawArrays = new Dictionary<string, object>
|
||||
{
|
||||
["StoryName"] = storyName,
|
||||
["SpandrelName"] = spandrelName,
|
||||
["LoadCase"] = loadCase,
|
||||
["Location"] = location,
|
||||
["P"] = p,
|
||||
["V2"] = v2,
|
||||
["V3"] = v3,
|
||||
["T"] = t,
|
||||
["M2"] = m2,
|
||||
["M3"] = m3
|
||||
};
|
||||
|
||||
// Step 4: return sorted and processed dictionary
|
||||
return _resultsArrayProcessor.ProcessArrays(rawArrays, Configuration);
|
||||
}
|
||||
}
|
||||
+78
@@ -0,0 +1,78 @@
|
||||
using Speckle.Converters.Common;
|
||||
using Speckle.Converters.CSiShared.Utils;
|
||||
|
||||
namespace Speckle.Converters.CSiShared.ToSpeckle.Helpers;
|
||||
|
||||
public class CsiStoryDriftsResultsExtractor : IApplicationResultsExtractor
|
||||
{
|
||||
private readonly IConverterSettingsStore<CsiConversionSettings> _settingsStore;
|
||||
private readonly ResultsArrayProcessor _resultsArrayProcessor;
|
||||
public string ResultsKey => "storyDrifts";
|
||||
public ModelObjectType TargetObjectType => ModelObjectType.NONE;
|
||||
|
||||
public ResultsConfiguration Configuration { get; } =
|
||||
new(["Story", "LoadCase", "Wrap:StepNum"], ["Direction", "Drift", "Label", "X", "Y", "Z"]);
|
||||
|
||||
public CsiStoryDriftsResultsExtractor(
|
||||
IConverterSettingsStore<CsiConversionSettings> settingsStore,
|
||||
ResultsArrayProcessor resultsArrayProcessor
|
||||
)
|
||||
{
|
||||
_settingsStore = settingsStore;
|
||||
_resultsArrayProcessor = resultsArrayProcessor;
|
||||
}
|
||||
|
||||
// NOTE: these aren't object specific, they're independent of the user selection, therefore discarded
|
||||
public Dictionary<string, object> GetResults(IEnumerable<string>? objectNames = null)
|
||||
{
|
||||
// Step 1: define api variables
|
||||
int numberResults = 0;
|
||||
string[] story = [],
|
||||
loadCase = [],
|
||||
stepType = [],
|
||||
direction = [],
|
||||
label = [];
|
||||
double[] stepNum = [],
|
||||
drift = [],
|
||||
x = [],
|
||||
y = [],
|
||||
z = [];
|
||||
|
||||
// Step 2: api call
|
||||
int success = _settingsStore.Current.SapModel.Results.StoryDrifts(
|
||||
ref numberResults,
|
||||
ref story,
|
||||
ref loadCase,
|
||||
ref stepType,
|
||||
ref stepNum,
|
||||
ref direction,
|
||||
ref drift,
|
||||
ref label,
|
||||
ref x,
|
||||
ref y,
|
||||
ref z
|
||||
);
|
||||
|
||||
if (success != 0 || numberResults == 0)
|
||||
{
|
||||
throw new InvalidOperationException("Story drifts extraction failed."); // shouldn't fail silently
|
||||
}
|
||||
|
||||
// Step 3: organise arrays for dictionary processor
|
||||
var rawArrays = new Dictionary<string, object>
|
||||
{
|
||||
["Story"] = story,
|
||||
["LoadCase"] = loadCase,
|
||||
["StepNum"] = stepNum,
|
||||
["Direction"] = direction,
|
||||
["Drift"] = drift,
|
||||
["Label"] = label,
|
||||
["X"] = x,
|
||||
["Y"] = y,
|
||||
["Z"] = z
|
||||
};
|
||||
|
||||
// Step 4: return sorted and processed dictionary
|
||||
return _resultsArrayProcessor.ProcessArrays(rawArrays, Configuration);
|
||||
}
|
||||
}
|
||||
+26
-20
@@ -24,42 +24,48 @@ public class DatabaseTableExtractor
|
||||
|
||||
/// <summary>
|
||||
/// Uses the cDatabaseTables.GetTableForDisplayArray() to request data for a specified table name.
|
||||
/// Processes the one-dimensional array return with the <see cref="Speckle.Converters.CSiShared.Extensions.TableData"/>
|
||||
/// extension for improved workability/reliability.
|
||||
/// </summary>
|
||||
/// <param name="tableName">String identifying the table to fetch. This typically matches the UI.</param>
|
||||
/// <param name="indexingColumn">Key used to organize and (later) lookup specific rows of data. Optional argument, default is "UniqueName"</param>
|
||||
/// <param name="requestedColumns">Optional list of specific fields to fetch. If null or empty, all fields will be returned. Ask Björn about how to determine these strings.</param>
|
||||
/// <param name="tableName">String identifying the table to fetch</param>
|
||||
/// <param name="indexingColumn">Primary column to use as row identifier (default "UniqueName")</param>
|
||||
/// <param name="requestedColumns">Optional specific fields to fetch</param>
|
||||
/// <param name="additionalKeyColumns">Optional additional columns to form compound keys for tables with non-unique primary keys</param>
|
||||
/// <returns>TableData containing the requested fields and records</returns>
|
||||
public TableData GetTableData(string tableName, string? indexingColumn = null, string[]? requestedColumns = null)
|
||||
public TableData GetTableData(
|
||||
string tableName,
|
||||
string? indexingColumn = null,
|
||||
string[]? requestedColumns = null,
|
||||
string[]? additionalKeyColumns = null
|
||||
)
|
||||
{
|
||||
// Create a cache key that includes additionalKeyColumns if provided
|
||||
string tableKeyField = indexingColumn ?? DEFAULT_KEY_FIELD; // most queries will use "UniqueName"
|
||||
string cacheKey = $"{tableName}_{tableKeyField}";
|
||||
string additionalKeysString = additionalKeyColumns != null ? string.Join(",", additionalKeyColumns) : "";
|
||||
string cacheKey = $"{tableName}_{tableKeyField}_{additionalKeysString}";
|
||||
|
||||
if (_tableCache.TryGetValue(cacheKey, out var cachedData))
|
||||
{
|
||||
return cachedData;
|
||||
}
|
||||
|
||||
var tableData = FetchTableData(tableName, tableKeyField, requestedColumns);
|
||||
var tableData = FetchTableData(tableName, tableKeyField, requestedColumns, additionalKeyColumns);
|
||||
_tableCache[cacheKey] = tableData;
|
||||
return tableData;
|
||||
}
|
||||
|
||||
public void RefreshTable(string tableKey, string? keyField = null) =>
|
||||
_tableCache.Remove($"{tableKey}_{keyField ?? DEFAULT_KEY_FIELD}");
|
||||
|
||||
public void ClearCache() => _tableCache.Clear();
|
||||
|
||||
private TableData FetchTableData(string tableName, string indexingColumn, string[]? requestedColumns = null)
|
||||
private TableData FetchTableData(
|
||||
string tableName,
|
||||
string indexingColumn,
|
||||
string[]? requestedColumns = null,
|
||||
string[]? additionalKeyColumns = null
|
||||
)
|
||||
{
|
||||
string[] requestedFields = requestedColumns ?? []; // only fetch the keys needed (memory reduction potential)
|
||||
string[] requestedFields = requestedColumns ?? []; // only fetch the keys needed
|
||||
string[] fieldsKeysIncluded = [];
|
||||
string[] tableData = []; // one-dimensional gross mess
|
||||
string[] tableData = []; // one-dimensional array
|
||||
int tableVersion = 0;
|
||||
int numberOfRecords = 0;
|
||||
|
||||
// ensure indexingColumn is included in the requested fields
|
||||
// if user forgets to include indexingColumn in requestedColumns => problem when it comes to creating dictionaries!
|
||||
// Ensure indexingColumn is included
|
||||
if (requestedFields != Array.Empty<string>() && !requestedFields.Contains(indexingColumn))
|
||||
{
|
||||
requestedFields = [.. requestedFields, indexingColumn];
|
||||
@@ -68,7 +74,7 @@ public class DatabaseTableExtractor
|
||||
var result = _settingsStore.Current.SapModel.DatabaseTables.GetTableForDisplayArray(
|
||||
tableName,
|
||||
ref requestedFields,
|
||||
string.Empty, // empty means all objects (not group-specific)
|
||||
string.Empty, // empty means all objects
|
||||
ref tableVersion,
|
||||
ref fieldsKeysIncluded,
|
||||
ref numberOfRecords,
|
||||
@@ -82,6 +88,6 @@ public class DatabaseTableExtractor
|
||||
);
|
||||
}
|
||||
|
||||
return new TableData(fieldsKeysIncluded, tableData, numberOfRecords, indexingColumn);
|
||||
return new TableData(fieldsKeysIncluded, tableData, numberOfRecords, indexingColumn, additionalKeyColumns);
|
||||
}
|
||||
}
|
||||
|
||||
+36
@@ -0,0 +1,36 @@
|
||||
using Speckle.Converters.CSiShared.Utils;
|
||||
|
||||
namespace Speckle.Converters.CSiShared.ToSpeckle.Helpers;
|
||||
|
||||
/// <summary>
|
||||
/// Implementations handle specific result types (frame forces, joint reactions, etc.) and
|
||||
/// transform raw API data into hierarchical dictionary structures.
|
||||
/// </summary>
|
||||
public interface IApplicationResultsExtractor
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets the key name used to store these results in the root commit object.
|
||||
/// </summary>
|
||||
/// <example>"FrameForces", "JointReactions", "BaseReactions"</example>
|
||||
string ResultsKey { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the type of CSI model objects that this extractor operates on.
|
||||
/// Used to automatically resolve the correct object names from the selection summary.
|
||||
/// </summary>
|
||||
ModelObjectType TargetObjectType { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the configuration defining how to process raw API arrays into hierarchical structure.
|
||||
/// Specifies grouping hierarchy and result value keys.
|
||||
/// </summary>
|
||||
ResultsConfiguration Configuration { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Extracts analysis results for the specified objects and processes them into hierarchical format.
|
||||
/// </summary>
|
||||
/// <param name="objectNames">
|
||||
/// Names of objects to extract results for. Some extractors don't extract object specific results, hence null.
|
||||
/// </param>
|
||||
Dictionary<string, object> GetResults(IEnumerable<string>? objectNames = null);
|
||||
}
|
||||
+98
@@ -0,0 +1,98 @@
|
||||
using Speckle.Converters.CSiShared.Utils;
|
||||
|
||||
namespace Speckle.Converters.CSiShared.ToSpeckle.Helpers;
|
||||
|
||||
/// <summary>
|
||||
/// Processes parallel arrays from analysis results into hierarchical dictionary structures.
|
||||
/// Uses configuration to determine grouping hierarchy and result values.
|
||||
/// </summary>
|
||||
public class ResultsArrayProcessor
|
||||
{
|
||||
/// <summary>
|
||||
/// Transforms parallel arrays into nested dictionary hierarchy based on configuration.
|
||||
/// </summary>
|
||||
/// <param name="rawArrays">Dictionary of array names to their values (all arrays must have same length)</param>
|
||||
/// <param name="config">Configuration defining grouping keys and result keys</param>
|
||||
/// <returns>Nested dictionary following GroupingKeys hierarchy with ResultKeys as leaf values</returns>
|
||||
public Dictionary<string, object> ProcessArrays(Dictionary<string, object> rawArrays, ResultsConfiguration config)
|
||||
{
|
||||
// get array length from first array (all should be same length)
|
||||
var firstArray = rawArrays.Values.FirstOrDefault();
|
||||
if (firstArray is not Array array || array.Length == 0)
|
||||
{
|
||||
return new Dictionary<string, object>();
|
||||
}
|
||||
|
||||
int arrayLength = array.Length;
|
||||
|
||||
// create indices for all rows
|
||||
var indices = Enumerable.Range(0, arrayLength);
|
||||
|
||||
// build the hierarchy recursively
|
||||
return BuildHierarchy(indices, rawArrays, config.GroupingKeys, config.ResultKeys, 0);
|
||||
}
|
||||
|
||||
private Dictionary<string, object> BuildHierarchy(
|
||||
IEnumerable<int> indices,
|
||||
Dictionary<string, object> rawArrays,
|
||||
IReadOnlyList<string> groupingKeys,
|
||||
IReadOnlyList<string> resultKeys,
|
||||
int level
|
||||
)
|
||||
{
|
||||
// Base case: we've processed all grouping levels, create result values
|
||||
if (level >= groupingKeys.Count)
|
||||
{
|
||||
var results = new Dictionary<string, object>();
|
||||
var firstIndex = indices.First();
|
||||
|
||||
foreach (var resultKey in resultKeys)
|
||||
{
|
||||
if (rawArrays.TryGetValue(resultKey, out var array) && array is Array resultArray)
|
||||
{
|
||||
var value = resultArray.GetValue(firstIndex);
|
||||
if (value != null)
|
||||
{
|
||||
results[resultKey] = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return results;
|
||||
}
|
||||
|
||||
// Get current grouping key
|
||||
var currentKey = groupingKeys[level];
|
||||
string actualKey;
|
||||
string? wrapperName = null;
|
||||
|
||||
// Check for "Wrap:" prefix
|
||||
if (currentKey.StartsWith("Wrap:"))
|
||||
{
|
||||
actualKey = currentKey["Wrap:".Length..];
|
||||
wrapperName = actualKey; // Use the actual key name as wrapper
|
||||
}
|
||||
else
|
||||
{
|
||||
actualKey = currentKey;
|
||||
}
|
||||
|
||||
if (!rawArrays.TryGetValue(actualKey, out var groupingArray) || groupingArray is not Array currentArray)
|
||||
{
|
||||
throw new ArgumentException($"Grouping key '{actualKey}' not found in raw arrays");
|
||||
}
|
||||
|
||||
// Group indices by the current key's values
|
||||
var grouped = indices
|
||||
.GroupBy(i => currentArray.GetValue(i)?.ToString() ?? string.Empty)
|
||||
.ToDictionary(g => g.Key, g => (object)BuildHierarchy(g, rawArrays, groupingKeys, resultKeys, level + 1));
|
||||
|
||||
// Wrap if needed
|
||||
if (wrapperName != null)
|
||||
{
|
||||
return new Dictionary<string, object> { [wrapperName] = grouped };
|
||||
}
|
||||
|
||||
return grouped;
|
||||
}
|
||||
}
|
||||
@@ -52,3 +52,27 @@ public static class CommonObjectProperty
|
||||
public const string ADVANCED = "Advanced";
|
||||
public const string DESIGN_ORIENTATION = "Design Orientation";
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// These strings are repeated when defining UI dropdown list `ResultTypeSetting.cs` as well as `CsiResultsExtractorFactory.cs`/>
|
||||
/// </summary>
|
||||
public static class ResultsKey
|
||||
{
|
||||
public const string BASE_REACT = "Base Reactions";
|
||||
public const string FRAME_FORCES = "Frame Forces";
|
||||
public const string JOINT_REACT = "Joint Reactions";
|
||||
public const string PIER_FORCES = "Pier Forces";
|
||||
public const string SPANDREL_FORCES = "Spandrel Forces";
|
||||
public const string STORY_DRIFTS = "Story Drifts";
|
||||
|
||||
// Used by ResultTypeSetting to get all defined result keys
|
||||
public static readonly string[] All =
|
||||
[
|
||||
BASE_REACT,
|
||||
FRAME_FORCES,
|
||||
JOINT_REACT,
|
||||
PIER_FORCES,
|
||||
SPANDREL_FORCES,
|
||||
STORY_DRIFTS
|
||||
];
|
||||
}
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
namespace Speckle.Converters.CSiShared.Utils;
|
||||
|
||||
/// <summary>
|
||||
/// Configuration used by all IResultsExtractor to sort results arrays into a hierarchical structure.
|
||||
/// </summary>
|
||||
/// <param name="GroupingKeys">Keys defining the hierarchy levels for grouping results, in order from top-level to bottom-level</param>
|
||||
/// <param name="ResultKeys">Keys for the final result values stored at the leaf level of the hierarchy</param>
|
||||
public record ResultsConfiguration(IReadOnlyList<string> GroupingKeys, IReadOnlyList<string> ResultKeys);
|
||||
@@ -258,7 +258,7 @@
|
||||
"type": "Project",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )",
|
||||
"Speckle.Objects": "[3.5.1, )"
|
||||
"Speckle.Objects": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Logging": {
|
||||
@@ -287,18 +287,18 @@
|
||||
},
|
||||
"Speckle.Objects": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==",
|
||||
"dependencies": {
|
||||
"Speckle.Sdk": "3.5.1"
|
||||
"Speckle.Sdk": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==",
|
||||
"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.1"
|
||||
"Speckle.Sdk.Dependencies": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk.Dependencies": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA=="
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw=="
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -209,7 +209,7 @@
|
||||
"type": "Project",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )",
|
||||
"Speckle.Objects": "[3.5.1, )"
|
||||
"Speckle.Objects": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Logging": {
|
||||
@@ -238,18 +238,18 @@
|
||||
},
|
||||
"Speckle.Objects": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==",
|
||||
"dependencies": {
|
||||
"Speckle.Sdk": "3.5.1"
|
||||
"Speckle.Sdk": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==",
|
||||
"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.1"
|
||||
"Speckle.Sdk.Dependencies": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk.Dependencies": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA=="
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw=="
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -267,7 +267,7 @@
|
||||
"type": "Project",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )",
|
||||
"Speckle.Objects": "[3.5.1, )"
|
||||
"Speckle.Objects": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Logging": {
|
||||
@@ -296,18 +296,18 @@
|
||||
},
|
||||
"Speckle.Objects": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==",
|
||||
"dependencies": {
|
||||
"Speckle.Sdk": "3.5.1"
|
||||
"Speckle.Sdk": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==",
|
||||
"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.1"
|
||||
"Speckle.Sdk.Dependencies": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk.Dependencies": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA=="
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw=="
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -267,7 +267,7 @@
|
||||
"type": "Project",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )",
|
||||
"Speckle.Objects": "[3.5.1, )"
|
||||
"Speckle.Objects": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Logging": {
|
||||
@@ -296,18 +296,18 @@
|
||||
},
|
||||
"Speckle.Objects": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==",
|
||||
"dependencies": {
|
||||
"Speckle.Sdk": "3.5.1"
|
||||
"Speckle.Sdk": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==",
|
||||
"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.1"
|
||||
"Speckle.Sdk.Dependencies": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk.Dependencies": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA=="
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw=="
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -267,7 +267,7 @@
|
||||
"type": "Project",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )",
|
||||
"Speckle.Objects": "[3.5.1, )"
|
||||
"Speckle.Objects": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Logging": {
|
||||
@@ -296,18 +296,18 @@
|
||||
},
|
||||
"Speckle.Objects": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==",
|
||||
"dependencies": {
|
||||
"Speckle.Sdk": "3.5.1"
|
||||
"Speckle.Sdk": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==",
|
||||
"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.1"
|
||||
"Speckle.Sdk.Dependencies": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk.Dependencies": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA=="
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw=="
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -219,9 +219,9 @@
|
||||
"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.Objects": "[3.5.2, )",
|
||||
"Speckle.Sdk": "[3.5.2, )",
|
||||
"Speckle.Sdk.Dependencies": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"speckle.connectors.dui": {
|
||||
@@ -245,7 +245,7 @@
|
||||
"type": "Project",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )",
|
||||
"Speckle.Objects": "[3.5.1, )"
|
||||
"Speckle.Objects": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.DependencyInjection": {
|
||||
@@ -289,18 +289,18 @@
|
||||
},
|
||||
"Speckle.Objects": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==",
|
||||
"dependencies": {
|
||||
"Speckle.Sdk": "3.5.1"
|
||||
"Speckle.Sdk": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==",
|
||||
"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.1"
|
||||
"Speckle.Sdk.Dependencies": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk.Dependencies": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA=="
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw=="
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -219,9 +219,9 @@
|
||||
"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.Objects": "[3.5.2, )",
|
||||
"Speckle.Sdk": "[3.5.2, )",
|
||||
"Speckle.Sdk.Dependencies": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"speckle.connectors.dui": {
|
||||
@@ -245,7 +245,7 @@
|
||||
"type": "Project",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )",
|
||||
"Speckle.Objects": "[3.5.1, )"
|
||||
"Speckle.Objects": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.DependencyInjection": {
|
||||
@@ -289,18 +289,18 @@
|
||||
},
|
||||
"Speckle.Objects": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==",
|
||||
"dependencies": {
|
||||
"Speckle.Sdk": "3.5.1"
|
||||
"Speckle.Sdk": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==",
|
||||
"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.1"
|
||||
"Speckle.Sdk.Dependencies": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk.Dependencies": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA=="
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw=="
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -259,9 +259,9 @@
|
||||
"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.Objects": "[3.5.2, )",
|
||||
"Speckle.Sdk": "[3.5.2, )",
|
||||
"Speckle.Sdk.Dependencies": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"speckle.connectors.dui": {
|
||||
@@ -278,7 +278,7 @@
|
||||
"type": "Project",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )",
|
||||
"Speckle.Objects": "[3.5.1, )"
|
||||
"Speckle.Objects": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.DependencyInjection": {
|
||||
@@ -316,18 +316,18 @@
|
||||
},
|
||||
"Speckle.Objects": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==",
|
||||
"dependencies": {
|
||||
"Speckle.Sdk": "3.5.1"
|
||||
"Speckle.Sdk": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==",
|
||||
"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.1"
|
||||
"Speckle.Sdk.Dependencies": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk.Dependencies": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA=="
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw=="
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -259,9 +259,9 @@
|
||||
"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.Objects": "[3.5.2, )",
|
||||
"Speckle.Sdk": "[3.5.2, )",
|
||||
"Speckle.Sdk.Dependencies": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"speckle.connectors.dui": {
|
||||
@@ -278,7 +278,7 @@
|
||||
"type": "Project",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )",
|
||||
"Speckle.Objects": "[3.5.1, )"
|
||||
"Speckle.Objects": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.DependencyInjection": {
|
||||
@@ -316,18 +316,18 @@
|
||||
},
|
||||
"Speckle.Objects": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==",
|
||||
"dependencies": {
|
||||
"Speckle.Sdk": "3.5.1"
|
||||
"Speckle.Sdk": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==",
|
||||
"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.1"
|
||||
"Speckle.Sdk.Dependencies": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk.Dependencies": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA=="
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw=="
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -259,9 +259,9 @@
|
||||
"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.Objects": "[3.5.2, )",
|
||||
"Speckle.Sdk": "[3.5.2, )",
|
||||
"Speckle.Sdk.Dependencies": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"speckle.connectors.dui": {
|
||||
@@ -278,7 +278,7 @@
|
||||
"type": "Project",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )",
|
||||
"Speckle.Objects": "[3.5.1, )"
|
||||
"Speckle.Objects": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.DependencyInjection": {
|
||||
@@ -316,18 +316,18 @@
|
||||
},
|
||||
"Speckle.Objects": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==",
|
||||
"dependencies": {
|
||||
"Speckle.Sdk": "3.5.1"
|
||||
"Speckle.Sdk": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==",
|
||||
"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.1"
|
||||
"Speckle.Sdk.Dependencies": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk.Dependencies": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA=="
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw=="
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -259,9 +259,9 @@
|
||||
"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.Objects": "[3.5.2, )",
|
||||
"Speckle.Sdk": "[3.5.2, )",
|
||||
"Speckle.Sdk.Dependencies": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"speckle.connectors.dui": {
|
||||
@@ -278,7 +278,7 @@
|
||||
"type": "Project",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )",
|
||||
"Speckle.Objects": "[3.5.1, )"
|
||||
"Speckle.Objects": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.DependencyInjection": {
|
||||
@@ -316,18 +316,18 @@
|
||||
},
|
||||
"Speckle.Objects": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==",
|
||||
"dependencies": {
|
||||
"Speckle.Sdk": "3.5.1"
|
||||
"Speckle.Sdk": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==",
|
||||
"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.1"
|
||||
"Speckle.Sdk.Dependencies": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk.Dependencies": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA=="
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw=="
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -259,9 +259,9 @@
|
||||
"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.Objects": "[3.5.2, )",
|
||||
"Speckle.Sdk": "[3.5.2, )",
|
||||
"Speckle.Sdk.Dependencies": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"speckle.connectors.dui": {
|
||||
@@ -278,7 +278,7 @@
|
||||
"type": "Project",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )",
|
||||
"Speckle.Objects": "[3.5.1, )"
|
||||
"Speckle.Objects": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.DependencyInjection": {
|
||||
@@ -316,18 +316,18 @@
|
||||
},
|
||||
"Speckle.Objects": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==",
|
||||
"dependencies": {
|
||||
"Speckle.Sdk": "3.5.1"
|
||||
"Speckle.Sdk": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==",
|
||||
"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.1"
|
||||
"Speckle.Sdk.Dependencies": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk.Dependencies": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA=="
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw=="
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -259,9 +259,9 @@
|
||||
"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.Objects": "[3.5.2, )",
|
||||
"Speckle.Sdk": "[3.5.2, )",
|
||||
"Speckle.Sdk.Dependencies": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"speckle.connectors.dui": {
|
||||
@@ -278,7 +278,7 @@
|
||||
"type": "Project",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )",
|
||||
"Speckle.Objects": "[3.5.1, )"
|
||||
"Speckle.Objects": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.DependencyInjection": {
|
||||
@@ -316,18 +316,18 @@
|
||||
},
|
||||
"Speckle.Objects": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==",
|
||||
"dependencies": {
|
||||
"Speckle.Sdk": "3.5.1"
|
||||
"Speckle.Sdk": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==",
|
||||
"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.1"
|
||||
"Speckle.Sdk.Dependencies": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk.Dependencies": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA=="
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw=="
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -260,9 +260,9 @@
|
||||
"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.Objects": "[3.5.2, )",
|
||||
"Speckle.Sdk": "[3.5.2, )",
|
||||
"Speckle.Sdk.Dependencies": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"speckle.connectors.dui": {
|
||||
@@ -279,7 +279,7 @@
|
||||
"type": "Project",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )",
|
||||
"Speckle.Objects": "[3.5.1, )"
|
||||
"Speckle.Objects": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.DependencyInjection": {
|
||||
@@ -317,18 +317,18 @@
|
||||
},
|
||||
"Speckle.Objects": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==",
|
||||
"dependencies": {
|
||||
"Speckle.Sdk": "3.5.1"
|
||||
"Speckle.Sdk": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==",
|
||||
"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.1"
|
||||
"Speckle.Sdk.Dependencies": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk.Dependencies": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA=="
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw=="
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -258,7 +258,7 @@
|
||||
"type": "Project",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )",
|
||||
"Speckle.Objects": "[3.5.1, )"
|
||||
"Speckle.Objects": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Logging": {
|
||||
@@ -287,18 +287,18 @@
|
||||
},
|
||||
"Speckle.Objects": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==",
|
||||
"dependencies": {
|
||||
"Speckle.Sdk": "3.5.1"
|
||||
"Speckle.Sdk": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==",
|
||||
"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.1"
|
||||
"Speckle.Sdk.Dependencies": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk.Dependencies": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA=="
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw=="
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -258,7 +258,7 @@
|
||||
"type": "Project",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )",
|
||||
"Speckle.Objects": "[3.5.1, )"
|
||||
"Speckle.Objects": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Logging": {
|
||||
@@ -287,18 +287,18 @@
|
||||
},
|
||||
"Speckle.Objects": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==",
|
||||
"dependencies": {
|
||||
"Speckle.Sdk": "3.5.1"
|
||||
"Speckle.Sdk": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==",
|
||||
"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.1"
|
||||
"Speckle.Sdk.Dependencies": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk.Dependencies": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA=="
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw=="
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -258,7 +258,7 @@
|
||||
"type": "Project",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )",
|
||||
"Speckle.Objects": "[3.5.1, )"
|
||||
"Speckle.Objects": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Logging": {
|
||||
@@ -287,18 +287,18 @@
|
||||
},
|
||||
"Speckle.Objects": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==",
|
||||
"dependencies": {
|
||||
"Speckle.Sdk": "3.5.1"
|
||||
"Speckle.Sdk": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==",
|
||||
"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.1"
|
||||
"Speckle.Sdk.Dependencies": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk.Dependencies": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA=="
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw=="
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -209,7 +209,7 @@
|
||||
"type": "Project",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )",
|
||||
"Speckle.Objects": "[3.5.1, )"
|
||||
"Speckle.Objects": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Logging": {
|
||||
@@ -238,18 +238,18 @@
|
||||
},
|
||||
"Speckle.Objects": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==",
|
||||
"dependencies": {
|
||||
"Speckle.Sdk": "3.5.1"
|
||||
"Speckle.Sdk": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==",
|
||||
"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.1"
|
||||
"Speckle.Sdk.Dependencies": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk.Dependencies": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA=="
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw=="
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -209,7 +209,7 @@
|
||||
"type": "Project",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )",
|
||||
"Speckle.Objects": "[3.5.1, )"
|
||||
"Speckle.Objects": "[3.5.2, )"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Logging": {
|
||||
@@ -238,18 +238,18 @@
|
||||
},
|
||||
"Speckle.Objects": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==",
|
||||
"dependencies": {
|
||||
"Speckle.Sdk": "3.5.1"
|
||||
"Speckle.Sdk": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==",
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==",
|
||||
"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.1"
|
||||
"Speckle.Sdk.Dependencies": "3.5.2"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk.Dependencies": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.5.1, )",
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA=="
|
||||
"requested": "[3.5.2, )",
|
||||
"resolved": "3.5.2",
|
||||
"contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw=="
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+18
@@ -78,6 +78,24 @@ public class LocalToGlobalToDirectShapeConverter
|
||||
.DirectShapeLibrary.GetDirectShapeLibrary(_converterSettings.Current.Document)
|
||||
.FindDefinition(target.atomicObject.applicationId ?? target.atomicObject.id.NotNull());
|
||||
result.SetShape(def);
|
||||
|
||||
// add snapping references for meshes and curves
|
||||
foreach (var shape in def)
|
||||
{
|
||||
switch (shape)
|
||||
{
|
||||
case DB.Mesh m:
|
||||
foreach (var v in m.Vertices)
|
||||
{
|
||||
result.AddReferencePoint(v);
|
||||
}
|
||||
break;
|
||||
case DB.Curve c:
|
||||
result.AddReferenceCurve(c);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return result; // note fast exit here
|
||||
}
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user