diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index a375a63a3a..9444fbb667 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -12,7 +12,7 @@ on:
jobs:
build:
- runs-on: ubuntu-latest
+ runs-on: windows-latest
outputs:
version: ${{ steps.set-version.outputs.version }}
steps:
@@ -25,11 +25,20 @@ jobs:
uses: actions/setup-dotnet@v4
with:
dotnet-version: 8.0.2xx # Align with global.json (including roll forward rules)
+
+ - name: Cache Nuget
+ uses: actions/cache@v4
+ with:
+ path: ~/.nuget/packages
+ key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json') }}
+ restore-keys: |
+ ${{ runner.os }}-nuget-
+
- name: ⚒️ Run GitVersion
- run: ./build.sh build-server-version
+ run: ./build.ps1 build-server-version
- name: ⚒️ Run build
- run: ./build.sh
+ run: ./build.ps1
- name: ⬆️ Upload artifacts
uses: actions/upload-artifact@v4
diff --git a/All.sln b/All.sln
index ff3a26c713..9d104a8de5 100644
--- a/All.sln
+++ b/All.sln
@@ -555,7 +555,15 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ConverterCivil2025", "Objec
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{B1324D25-C601-40F2-8AE2-6131F492B911}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Converters.Revit2023.Tests", "DUI3-DX\Converters\Revit\Speckle.Converters.Revit2023.Tests\Speckle.Converters.Revit2023.Tests.csproj", "{AEC26A0B-25F3-4544-A9D6-A427BFF79250}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Speckle.Converters.Revit2023.Tests", "DUI3-DX\Converters\Revit\Speckle.Converters.Revit2023.Tests\Speckle.Converters.Revit2023.Tests.csproj", "{AEC26A0B-25F3-4544-A9D6-A427BFF79250}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Speckle.Converters.Common.Tests", "DUI3-DX\Sdk\Speckle.Converters.Common.Tests\Speckle.Converters.Common.Tests.csproj", "{95E23A97-E5EA-4506-A52C-D3DA9012DA02}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Speckle.Connectors.Civil3d2024", "DUI3-DX\Connectors\Autocad\Speckle.Connectors.Civil3d2024\Speckle.Connectors.Civil3d2024.csproj", "{DDBBA313-69A6-40DE-AB3A-79EE5BF32A7E}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Speckle.Converters.Autocad2024", "DUI3-DX\Converters\Autocad\Speckle.Converters.Autocad2024\Speckle.Converters.Autocad2024.csproj", "{C9C28F31-1367-438C-83B0-049C3B3A3E3B}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Converters.Autocad2024.DependencyInjection", "DUI3-DX\Converters\Autocad\Speckle.Converters.Autocad2024.DependencyInjection\Speckle.Converters.Autocad2024.DependencyInjection.csproj", "{06082BAA-98E8-49B1-9D33-252B126A0561}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -2807,6 +2815,70 @@ Global
{AEC26A0B-25F3-4544-A9D6-A427BFF79250}.Release|Any CPU.Build.0 = Release|Any CPU
{AEC26A0B-25F3-4544-A9D6-A427BFF79250}.Release|x64.ActiveCfg = Release|Any CPU
{AEC26A0B-25F3-4544-A9D6-A427BFF79250}.Release|x64.Build.0 = Release|Any CPU
+ {95E23A97-E5EA-4506-A52C-D3DA9012DA02}.Debug Mac|Any CPU.ActiveCfg = Debug|Any CPU
+ {95E23A97-E5EA-4506-A52C-D3DA9012DA02}.Debug Mac|Any CPU.Build.0 = Debug|Any CPU
+ {95E23A97-E5EA-4506-A52C-D3DA9012DA02}.Debug Mac|x64.ActiveCfg = Debug|Any CPU
+ {95E23A97-E5EA-4506-A52C-D3DA9012DA02}.Debug Mac|x64.Build.0 = Debug|Any CPU
+ {95E23A97-E5EA-4506-A52C-D3DA9012DA02}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {95E23A97-E5EA-4506-A52C-D3DA9012DA02}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {95E23A97-E5EA-4506-A52C-D3DA9012DA02}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {95E23A97-E5EA-4506-A52C-D3DA9012DA02}.Debug|x64.Build.0 = Debug|Any CPU
+ {95E23A97-E5EA-4506-A52C-D3DA9012DA02}.Release Mac|Any CPU.ActiveCfg = Debug|Any CPU
+ {95E23A97-E5EA-4506-A52C-D3DA9012DA02}.Release Mac|Any CPU.Build.0 = Debug|Any CPU
+ {95E23A97-E5EA-4506-A52C-D3DA9012DA02}.Release Mac|x64.ActiveCfg = Debug|Any CPU
+ {95E23A97-E5EA-4506-A52C-D3DA9012DA02}.Release Mac|x64.Build.0 = Debug|Any CPU
+ {95E23A97-E5EA-4506-A52C-D3DA9012DA02}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {95E23A97-E5EA-4506-A52C-D3DA9012DA02}.Release|Any CPU.Build.0 = Release|Any CPU
+ {95E23A97-E5EA-4506-A52C-D3DA9012DA02}.Release|x64.ActiveCfg = Release|Any CPU
+ {95E23A97-E5EA-4506-A52C-D3DA9012DA02}.Release|x64.Build.0 = Release|Any CPU
+ {DDBBA313-69A6-40DE-AB3A-79EE5BF32A7E}.Debug Mac|Any CPU.ActiveCfg = Debug|Any CPU
+ {DDBBA313-69A6-40DE-AB3A-79EE5BF32A7E}.Debug Mac|Any CPU.Build.0 = Debug|Any CPU
+ {DDBBA313-69A6-40DE-AB3A-79EE5BF32A7E}.Debug Mac|x64.ActiveCfg = Debug|Any CPU
+ {DDBBA313-69A6-40DE-AB3A-79EE5BF32A7E}.Debug Mac|x64.Build.0 = Debug|Any CPU
+ {DDBBA313-69A6-40DE-AB3A-79EE5BF32A7E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {DDBBA313-69A6-40DE-AB3A-79EE5BF32A7E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {DDBBA313-69A6-40DE-AB3A-79EE5BF32A7E}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {DDBBA313-69A6-40DE-AB3A-79EE5BF32A7E}.Debug|x64.Build.0 = Debug|Any CPU
+ {DDBBA313-69A6-40DE-AB3A-79EE5BF32A7E}.Release Mac|Any CPU.ActiveCfg = Release|Any CPU
+ {DDBBA313-69A6-40DE-AB3A-79EE5BF32A7E}.Release Mac|Any CPU.Build.0 = Release|Any CPU
+ {DDBBA313-69A6-40DE-AB3A-79EE5BF32A7E}.Release Mac|x64.ActiveCfg = Release|Any CPU
+ {DDBBA313-69A6-40DE-AB3A-79EE5BF32A7E}.Release Mac|x64.Build.0 = Release|Any CPU
+ {DDBBA313-69A6-40DE-AB3A-79EE5BF32A7E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {DDBBA313-69A6-40DE-AB3A-79EE5BF32A7E}.Release|Any CPU.Build.0 = Release|Any CPU
+ {DDBBA313-69A6-40DE-AB3A-79EE5BF32A7E}.Release|x64.ActiveCfg = Release|Any CPU
+ {DDBBA313-69A6-40DE-AB3A-79EE5BF32A7E}.Release|x64.Build.0 = Release|Any CPU
+ {C9C28F31-1367-438C-83B0-049C3B3A3E3B}.Debug Mac|Any CPU.ActiveCfg = Debug|Any CPU
+ {C9C28F31-1367-438C-83B0-049C3B3A3E3B}.Debug Mac|Any CPU.Build.0 = Debug|Any CPU
+ {C9C28F31-1367-438C-83B0-049C3B3A3E3B}.Debug Mac|x64.ActiveCfg = Debug|Any CPU
+ {C9C28F31-1367-438C-83B0-049C3B3A3E3B}.Debug Mac|x64.Build.0 = Debug|Any CPU
+ {C9C28F31-1367-438C-83B0-049C3B3A3E3B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C9C28F31-1367-438C-83B0-049C3B3A3E3B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C9C28F31-1367-438C-83B0-049C3B3A3E3B}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {C9C28F31-1367-438C-83B0-049C3B3A3E3B}.Debug|x64.Build.0 = Debug|Any CPU
+ {C9C28F31-1367-438C-83B0-049C3B3A3E3B}.Release Mac|Any CPU.ActiveCfg = Release|Any CPU
+ {C9C28F31-1367-438C-83B0-049C3B3A3E3B}.Release Mac|Any CPU.Build.0 = Release|Any CPU
+ {C9C28F31-1367-438C-83B0-049C3B3A3E3B}.Release Mac|x64.ActiveCfg = Release|Any CPU
+ {C9C28F31-1367-438C-83B0-049C3B3A3E3B}.Release Mac|x64.Build.0 = Release|Any CPU
+ {C9C28F31-1367-438C-83B0-049C3B3A3E3B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {C9C28F31-1367-438C-83B0-049C3B3A3E3B}.Release|Any CPU.Build.0 = Release|Any CPU
+ {C9C28F31-1367-438C-83B0-049C3B3A3E3B}.Release|x64.ActiveCfg = Release|Any CPU
+ {C9C28F31-1367-438C-83B0-049C3B3A3E3B}.Release|x64.Build.0 = Release|Any CPU
+ {06082BAA-98E8-49B1-9D33-252B126A0561}.Debug Mac|Any CPU.ActiveCfg = Debug|Any CPU
+ {06082BAA-98E8-49B1-9D33-252B126A0561}.Debug Mac|Any CPU.Build.0 = Debug|Any CPU
+ {06082BAA-98E8-49B1-9D33-252B126A0561}.Debug Mac|x64.ActiveCfg = Debug|Any CPU
+ {06082BAA-98E8-49B1-9D33-252B126A0561}.Debug Mac|x64.Build.0 = Debug|Any CPU
+ {06082BAA-98E8-49B1-9D33-252B126A0561}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {06082BAA-98E8-49B1-9D33-252B126A0561}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {06082BAA-98E8-49B1-9D33-252B126A0561}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {06082BAA-98E8-49B1-9D33-252B126A0561}.Debug|x64.Build.0 = Debug|Any CPU
+ {06082BAA-98E8-49B1-9D33-252B126A0561}.Release Mac|Any CPU.ActiveCfg = Release|Any CPU
+ {06082BAA-98E8-49B1-9D33-252B126A0561}.Release Mac|Any CPU.Build.0 = Release|Any CPU
+ {06082BAA-98E8-49B1-9D33-252B126A0561}.Release Mac|x64.ActiveCfg = Release|Any CPU
+ {06082BAA-98E8-49B1-9D33-252B126A0561}.Release Mac|x64.Build.0 = Release|Any CPU
+ {06082BAA-98E8-49B1-9D33-252B126A0561}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {06082BAA-98E8-49B1-9D33-252B126A0561}.Release|Any CPU.Build.0 = Release|Any CPU
+ {06082BAA-98E8-49B1-9D33-252B126A0561}.Release|x64.ActiveCfg = Release|Any CPU
+ {06082BAA-98E8-49B1-9D33-252B126A0561}.Release|x64.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -2984,6 +3056,7 @@ Global
{2E00592E-558D-492D-88F9-3ECEE4C0C7DA} = {9DB74760-01DE-4AC1-A81B-BC7784351D22}
{01F98733-7352-47AD-A594-537D979DE3DE} = {4838C66E-8677-4FBD-9609-25376042E981}
{DC570FFF-6FE5-47BD-8BC1-B471A6067786} = {4838C66E-8677-4FBD-9609-25376042E981}
+ {E1C43415-3200-45F4-8BF9-A4DD7D7F2ED6} = {D92751C8-1039-4005-90B2-913E55E0B8BD}
{83EAD6F0-3CB3-456A-AD81-072127D0DE0E} = {D92751C8-1039-4005-90B2-913E55E0B8BD}
{26391930-F86F-47E0-A5F6-B89919E38CE1} = {D92751C8-1039-4005-90B2-913E55E0B8BD}
{D81C0B87-F0C1-4297-A147-02F001FB7E1E} = {FD4D6594-D81E-456F-8F2E-35B09E04A755}
@@ -3017,8 +3090,11 @@ Global
{829688CD-CECE-4F6C-A5A0-032BB39CD9E0} = {BE521908-7944-46F3-98BF-B47D34509934}
{70DEAA13-6DC8-44A0-B287-9E806A8054F1} = {890F3257-FCC2-4ED8-9180-22B3641B494C}
{F06E4C37-4076-4272-9CA6-FB505E02CD31} = {BE521908-7944-46F3-98BF-B47D34509934}
- {E1C43415-3200-45F4-8BF9-A4DD7D7F2ED6} = {D92751C8-1039-4005-90B2-913E55E0B8BD}
{AEC26A0B-25F3-4544-A9D6-A427BFF79250} = {D92751C8-1039-4005-90B2-913E55E0B8BD}
+ {95E23A97-E5EA-4506-A52C-D3DA9012DA02} = {2E00592E-558D-492D-88F9-3ECEE4C0C7DA}
+ {DDBBA313-69A6-40DE-AB3A-79EE5BF32A7E} = {743489BF-1941-43D5-8AF9-35C56D0DCC34}
+ {C9C28F31-1367-438C-83B0-049C3B3A3E3B} = {804E065F-914C-414A-AF84-009312C3CFF6}
+ {06082BAA-98E8-49B1-9D33-252B126A0561} = {804E065F-914C-414A-AF84-009312C3CFF6}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {1D43D91B-4F01-4A78-8250-CC6F9BD93A14}
@@ -3126,6 +3202,7 @@ Global
Objects\Converters\ConverterRevit\ConverterRevitShared\ConverterRevitShared.projitems*{c21a6553-b4ec-4ec3-b82a-c7a83cffb809}*SharedItemsImports = 5
ConnectorRevit\RevitSharedResources\RevitSharedResources.projitems*{c2ba8b6b-72bd-4dab-865f-90c66083bdb2}*SharedItemsImports = 5
Objects\Converters\ConverterNavisworks\ConverterNavisworks\ConverterNavisworksShared.projitems*{c3232ef3-2000-44c6-a330-b94531c9cc83}*SharedItemsImports = 13
+ DUI3-DX\Converters\Autocad\Speckle.Converters.AutocadShared\Speckle.Converters.AutocadShared.projitems*{c9c28f31-1367-438c-83b0-049c3b3a3e3b}*SharedItemsImports = 5
Objects\Converters\ConverterNavisworks\ConverterNavisworks\ConverterNavisworksShared.projitems*{cafd4eac-75a8-4fc8-94e5-91cadc39f5b3}*SharedItemsImports = 5
Objects\Converters\ConverterRevit\ConverterRevitShared\ConverterRevitShared.projitems*{cc790553-8088-41a9-83cd-b29f7141f408}*SharedItemsImports = 5
Objects\Converters\ConverterNavisworks\ConverterNavisworks\ConverterNavisworksShared.projitems*{cd334556-ba2b-4272-a1eb-628e8152204a}*SharedItemsImports = 5
@@ -3137,6 +3214,7 @@ Global
ConnectorRhino\ConnectorRhino\ConnectorRhinoShared\ConnectorRhinoShared.projitems*{d648bb69-b992-4d34-906e-7a547374b86c}*SharedItemsImports = 5
Objects\Converters\ConverterAutocadCivil\ConverterAutocadCivilShared\ConverterAutocadCivilShared.projitems*{d9f443b5-c55b-4ad8-9c70-bc3d2be781be}*SharedItemsImports = 5
DUI3-DX\Connectors\Revit\Speckle.Connectors.RevitShared\Speckle.Connectors.RevitShared.projitems*{dc570fff-6fe5-47bd-8bc1-b471a6067786}*SharedItemsImports = 13
+ DUI3-DX\Connectors\Autocad\Speckle.Connectors.AutocadShared\Speckle.Connectors.AutocadShared.projitems*{ddbba313-69a6-40de-ab3a-79ee5bf32a7e}*SharedItemsImports = 5
ConnectorNavisworks\ConnectorNavisworks\ConnectorNavisworks.Shared.projitems*{debc2174-5e31-4b6e-8680-690d75e50e2d}*SharedItemsImports = 5
ConnectorRevit\ConnectorRevit\ConnectorRevit.projitems*{dfdfdbb8-018b-4dcb-a012-54227abf53a7}*SharedItemsImports = 5
DUI3-DX\Converters\Revit\Speckle.Converters.RevitShared\Speckle.Converters.RevitShared.projitems*{e1c43415-3200-45f4-8bf9-a4dd7d7f2ed6}*SharedItemsImports = 13
diff --git a/All.sln.DotSettings b/All.sln.DotSettings
index a68eee20a7..c5930b608d 100644
--- a/All.sln.DotSettings
+++ b/All.sln.DotSettings
@@ -625,6 +625,7 @@
QL
SQ
UI
+ URI
True
ExternalToolData|CSharpier|csharpier||csharpier|$FILE$
CamelCase
diff --git a/Build/Consts.cs b/Build/Consts.cs
index 48a14139b0..2fa9d8deaa 100644
--- a/Build/Consts.cs
+++ b/Build/Consts.cs
@@ -5,7 +5,11 @@ namespace Build;
public static class Consts
{
public static readonly string[] Solutions = { "DUI3-DX.slnf" };
- public static readonly string[] TestProjects = { "Speckle.Converters.Revit2023.Tests" };
+ public static readonly string[] TestProjects =
+ {
+ "Speckle.Converters.Revit2023.Tests",
+ "Speckle.Converters.Common.Tests"
+ };
public static readonly InstallerProject[] InstallerManifests =
{
diff --git a/Build/Program.cs b/Build/Program.cs
index 815a086a70..610115c621 100644
--- a/Build/Program.cs
+++ b/Build/Program.cs
@@ -85,7 +85,7 @@ void RemoveDirectory(string d)
Consts.Solutions,
s =>
{
- Run("dotnet", $"restore {s}");
+ Run("dotnet", $"restore {s} --locked-mode");
}
);
@@ -127,7 +127,7 @@ IEnumerable GetFiles(string d)
foreach (var file in GetFiles($"**/{t}.csproj"))
{
- Run("dotnet", $"test {file} -c Release --no-restore --verbosity=normal");
+ Run("dotnet", $"test {file} -c Release --no-build --no-restore --verbosity=normal");
}
}
);
diff --git a/Core/Core/Kits/Applications.cs b/Core/Core/Kits/Applications.cs
index ea3ccb0179..d80b63479e 100644
--- a/Core/Core/Kits/Applications.cs
+++ b/Core/Core/Kits/Applications.cs
@@ -64,6 +64,7 @@ public static class HostApplications
Unity = new("Unity", "unity"),
GSA = new("GSA", "gsa"),
Civil = new("Civil 3D", "civil3d"),
+ Civil3D = new("Civil 3D", "civil3d"),
AutoCAD = new("AutoCAD", "autocad"),
MicroStation = new("MicroStation", "microstation"),
OpenRoads = new("OpenRoads", "openroads"),
@@ -119,6 +120,11 @@ public static HostApplication GetHostAppFromString(string? appname)
return AutoCAD;
}
+ if (appname.Contains("civil3d"))
+ {
+ return Civil3D;
+ }
+
if (appname.Contains("civil"))
{
return Civil;
diff --git a/DUI3-DX.slnf b/DUI3-DX.slnf
index 80e74b0b65..4bfa3426df 100644
--- a/DUI3-DX.slnf
+++ b/DUI3-DX.slnf
@@ -11,6 +11,7 @@
"DUI3-DX\\Connectors\\ArcGIS\\Speckle.Connectors.ArcGIS3\\Speckle.Connectors.ArcGIS3.csproj",
"DUI3-DX\\Connectors\\Autocad\\Speckle.Connectors.Autocad2023\\Speckle.Connectors.Autocad2023.csproj",
"DUI3-DX\\Connectors\\Autocad\\Speckle.Connectors.AutocadShared\\Speckle.Connectors.AutocadShared.shproj",
+ "DUI3-DX\\Connectors\\Autocad\\Speckle.Connectors.Civil3d2024\\Speckle.Connectors.Civil3d2024.csproj",
"DUI3-DX\\Connectors\\Revit\\Speckle.Connectors.Revit2023\\Speckle.Connectors.Revit2023.csproj",
"DUI3-DX\\Connectors\\Revit\\Speckle.Connectors.RevitShared\\Speckle.Connectors.RevitShared.shproj",
"DUI3-DX\\Connectors\\Rhino\\Speckle.Connectors.Rhino7\\Speckle.Connectors.Rhino7.csproj",
@@ -18,6 +19,8 @@
"DUI3-DX\\Converters\\ArcGIS\\Speckle.Converters.ArcGIS3\\Speckle.Converters.ArcGIS3.csproj",
"DUI3-DX\\Converters\\Autocad\\Speckle.Converters.Autocad2023.DependencyInjection\\Speckle.Converters.Autocad2023.DependencyInjection.csproj",
"DUI3-DX\\Converters\\Autocad\\Speckle.Converters.Autocad2023\\Speckle.Converters.Autocad2023.csproj",
+ "DUI3-DX\\Converters\\Autocad\\Speckle.Converters.Autocad2024.DependencyInjection\\Speckle.Converters.Autocad2024.DependencyInjection.csproj",
+ "DUI3-DX\\Converters\\Autocad\\Speckle.Converters.Autocad2024\\Speckle.Converters.Autocad2024.csproj",
"DUI3-DX\\Converters\\Autocad\\Speckle.Converters.AutocadShared\\Speckle.Converters.AutocadShared.shproj",
"DUI3-DX\\Converters\\Revit\\Speckle.Converters.Revit2023.DependencyInjection\\Speckle.Converters.Revit2023.DependencyInjection.csproj",
"DUI3-DX\\Converters\\Revit\\Speckle.Converters.Revit2023.Tests\\Speckle.Converters.Revit2023.Tests.csproj",
@@ -30,6 +33,7 @@
"DUI3-DX\\Sdk\\Speckle.Autofac\\Speckle.Autofac.csproj",
"DUI3-DX\\Sdk\\Speckle.Connectors.Utils\\Speckle.Connectors.Utils.csproj",
"DUI3-DX\\Sdk\\Speckle.Converters.Common.DependencyInjection\\Speckle.Converters.Common.DependencyInjection.csproj",
+ "DUI3-DX\\Sdk\\Speckle.Converters.Common.Tests\\Speckle.Converters.Common.Tests.csproj",
"DUI3-DX\\Sdk\\Speckle.Converters.Common\\Speckle.Converters.Common.csproj",
"Objects\\Objects\\Objects.csproj",
"Objects\\Tests\\Objects.Tests.Unit\\Objects.Tests.Unit.csproj"
diff --git a/DUI3-DX/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Bindings/ArcGISSelectionBinding.cs b/DUI3-DX/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Bindings/ArcGISSelectionBinding.cs
index 157bad2797..a9c84e14f5 100644
--- a/DUI3-DX/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Bindings/ArcGISSelectionBinding.cs
+++ b/DUI3-DX/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Bindings/ArcGISSelectionBinding.cs
@@ -10,16 +10,16 @@ public class ArcGISSelectionBinding : ISelectionBinding
public string Name => "selectionBinding";
public IBridge Parent { get; }
- public ArcGISSelectionBinding(IBridge parent)
+ public ArcGISSelectionBinding(IBridge parent, ITopLevelExceptionHandler topLevelHandler)
{
Parent = parent;
// example: https://github.com/Esri/arcgis-pro-sdk-community-samples/blob/master/Map-Authoring/QueryBuilderControl/DefinitionQueryDockPaneViewModel.cs
// MapViewEventArgs args = new(MapView.Active);
- TOCSelectionChangedEvent.Subscribe(OnSelectionChanged, true);
+ TOCSelectionChangedEvent.Subscribe(_ => topLevelHandler.CatchUnhandled(OnSelectionChanged), true);
}
- private void OnSelectionChanged(MapViewEventArgs args)
+ private void OnSelectionChanged()
{
SelectionInfo selInfo = GetSelection();
Parent.Send(SelectionBindingEvents.SET_SELECTION, selInfo);
diff --git a/DUI3-DX/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Bindings/ArcGISSendBinding.cs b/DUI3-DX/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Bindings/ArcGISSendBinding.cs
index 3773833114..4c0215694b 100644
--- a/DUI3-DX/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Bindings/ArcGISSendBinding.cs
+++ b/DUI3-DX/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Bindings/ArcGISSendBinding.cs
@@ -31,6 +31,7 @@ public sealed class ArcGISSendBinding : ISendBinding
private readonly List _sendFilters;
private readonly CancellationManager _cancellationManager;
private readonly ISendConversionCache _sendConversionCache;
+ private readonly ITopLevelExceptionHandler _topLevelExceptionHandler;
///
/// Used internally to aggregate the changed objects' id.
@@ -45,7 +46,8 @@ public ArcGISSendBinding(
IEnumerable sendFilters,
IUnitOfWorkFactory unitOfWorkFactory,
CancellationManager cancellationManager,
- ISendConversionCache sendConversionCache
+ ISendConversionCache sendConversionCache,
+ ITopLevelExceptionHandler topLevelExceptionHandler
)
{
_store = store;
@@ -53,6 +55,7 @@ ISendConversionCache sendConversionCache
_sendFilters = sendFilters.ToList();
_cancellationManager = cancellationManager;
_sendConversionCache = sendConversionCache;
+ _topLevelExceptionHandler = topLevelExceptionHandler;
Parent = parent;
Commands = new SendBindingUICommands(parent);
SubscribeToArcGISEvents();
@@ -60,17 +63,40 @@ ISendConversionCache sendConversionCache
private void SubscribeToArcGISEvents()
{
- LayersRemovedEvent.Subscribe(GetIdsForLayersRemovedEvent, true);
- StandaloneTablesRemovedEvent.Subscribe(GetIdsForStandaloneTablesRemovedEvent, true);
- MapPropertyChangedEvent.Subscribe(GetIdsForMapPropertyChangedEvent, true); // Map units, CRS etc.
- MapMemberPropertiesChangedEvent.Subscribe(GetIdsForMapMemberPropertiesChangedEvent, true); // e.g. Layer name
-
- ActiveMapViewChangedEvent.Subscribe(SubscribeToMapMembersDataSourceChange, true);
- LayersAddedEvent.Subscribe(GetIdsForLayersAddedEvent, true);
- StandaloneTablesAddedEvent.Subscribe(GetIdsForStandaloneTablesAddedEvent, true);
+ LayersRemovedEvent.Subscribe(
+ a => _topLevelExceptionHandler.CatchUnhandled(() => GetIdsForLayersRemovedEvent(a)),
+ true
+ );
+
+ StandaloneTablesRemovedEvent.Subscribe(
+ a => _topLevelExceptionHandler.CatchUnhandled(() => GetIdsForStandaloneTablesRemovedEvent(a)),
+ true
+ );
+
+ MapPropertyChangedEvent.Subscribe(
+ a => _topLevelExceptionHandler.CatchUnhandled(() => GetIdsForMapPropertyChangedEvent(a)),
+ true
+ ); // Map units, CRS etc.
+
+ MapMemberPropertiesChangedEvent.Subscribe(
+ a => _topLevelExceptionHandler.CatchUnhandled(() => GetIdsForMapMemberPropertiesChangedEvent(a)),
+ true
+ ); // e.g. Layer name
+
+ ActiveMapViewChangedEvent.Subscribe(
+ _ => _topLevelExceptionHandler.CatchUnhandled(SubscribeToMapMembersDataSourceChange),
+ true
+ );
+
+ LayersAddedEvent.Subscribe(a => _topLevelExceptionHandler.CatchUnhandled(() => GetIdsForLayersAddedEvent(a)), true);
+
+ StandaloneTablesAddedEvent.Subscribe(
+ a => _topLevelExceptionHandler.CatchUnhandled(() => GetIdsForStandaloneTablesAddedEvent(a)),
+ true
+ );
}
- private void SubscribeToMapMembersDataSourceChange(ActiveMapViewChangedEventArgs args)
+ private void SubscribeToMapMembersDataSourceChange()
{
var task = QueuedTask.Run(() =>
{
@@ -228,11 +254,34 @@ private void GetIdsForStandaloneTablesAddedEvent(StandaloneTableEventArgs args)
private void GetIdsForMapMemberPropertiesChangedEvent(MapMemberPropertiesChangedEventArgs args)
{
- foreach (MapMember member in args.MapMembers)
+ // don't subscribe to all events (e.g. expanding group, changing visibility etc.)
+ bool validEvent = false;
+ foreach (var hint in args.EventHints)
{
- ChangedObjectIds.Add(member.URI);
+ if (
+ hint == MapMemberEventHint.DataSource
+ || hint == MapMemberEventHint.DefinitionQuery
+ || hint == MapMemberEventHint.LabelClasses
+ || hint == MapMemberEventHint.LabelVisibility
+ || hint == MapMemberEventHint.Name
+ || hint == MapMemberEventHint.Renderer
+ || hint == MapMemberEventHint.SceneLayerType
+ || hint == MapMemberEventHint.URL
+ )
+ {
+ validEvent = true;
+ break;
+ }
+ }
+
+ if (validEvent)
+ {
+ foreach (MapMember member in args.MapMembers)
+ {
+ ChangedObjectIds.Add(member.URI);
+ }
+ RunExpirationChecks(false);
}
- RunExpirationChecks(false);
}
public List GetSendFilters() => _sendFilters;
diff --git a/DUI3-DX/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Operations/Receive/HostObjectBuilder.cs b/DUI3-DX/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Operations/Receive/HostObjectBuilder.cs
index e3a3b6300e..3e22f2d85d 100644
--- a/DUI3-DX/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Operations/Receive/HostObjectBuilder.cs
+++ b/DUI3-DX/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Operations/Receive/HostObjectBuilder.cs
@@ -135,6 +135,9 @@ CancellationToken cancellationToken
// add layer URI to bakedIds
bakedObjectIds.Add(trackerItem.MappedLayerURI == null ? "" : trackerItem.MappedLayerURI);
+ // mark dataset as already created
+ bakedMapMembers[trackerItem.DatasetId] = mapMember;
+
// add report item
AddResultsFromTracker(trackerItem, results);
}
diff --git a/DUI3-DX/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Utils/ArcGisDocumentStore.cs b/DUI3-DX/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Utils/ArcGisDocumentStore.cs
index d8ca75f959..db0df3550f 100644
--- a/DUI3-DX/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Utils/ArcGisDocumentStore.cs
+++ b/DUI3-DX/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Utils/ArcGisDocumentStore.cs
@@ -3,6 +3,7 @@
using ArcGIS.Desktop.Framework.Threading.Tasks;
using ArcGIS.Desktop.Mapping;
using ArcGIS.Desktop.Mapping.Events;
+using Speckle.Connectors.DUI.Bridge;
using Speckle.Connectors.DUI.Models;
using Speckle.Connectors.Utils;
using Speckle.Newtonsoft.Json;
@@ -11,34 +12,41 @@ namespace Speckle.Connectors.ArcGIS.Utils;
public class ArcGISDocumentStore : DocumentModelStore
{
- public ArcGISDocumentStore(JsonSerializerSettings serializerOption)
+ public ArcGISDocumentStore(
+ JsonSerializerSettings serializerOption,
+ ITopLevelExceptionHandler topLevelExceptionHandler
+ )
: base(serializerOption, true)
{
- ActiveMapViewChangedEvent.Subscribe(OnMapViewChanged);
- ProjectSavingEvent.Subscribe(OnProjectSaving);
- ProjectClosingEvent.Subscribe(OnProjectClosing);
+ ActiveMapViewChangedEvent.Subscribe(a => topLevelExceptionHandler.CatchUnhandled(() => OnMapViewChanged(a)));
+ ProjectSavingEvent.Subscribe(_ =>
+ {
+ topLevelExceptionHandler.CatchUnhandled(OnProjectSaving);
+ return Task.CompletedTask;
+ });
+ ProjectClosingEvent.Subscribe(_ =>
+ {
+ topLevelExceptionHandler.CatchUnhandled(OnProjectClosing);
+ return Task.CompletedTask;
+ });
}
- private Task OnProjectClosing(ProjectClosingEventArgs arg)
+ private void OnProjectClosing()
{
if (MapView.Active is null)
{
- return Task.CompletedTask;
+ return;
}
WriteToFile();
- return Task.CompletedTask;
}
- private Task OnProjectSaving(ProjectEventArgs arg)
+ private void OnProjectSaving()
{
- if (MapView.Active is null)
+ if (MapView.Active is not null)
{
- return Task.CompletedTask;
+ WriteToFile();
}
-
- WriteToFile();
- return Task.CompletedTask;
}
///
diff --git a/DUI3-DX/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/packages.lock.json b/DUI3-DX/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/packages.lock.json
new file mode 100644
index 0000000000..5306011fc3
--- /dev/null
+++ b/DUI3-DX/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/packages.lock.json
@@ -0,0 +1,480 @@
+{
+ "version": 1,
+ "dependencies": {
+ "net6.0-windows7.0": {
+ "Esri.ArcGISPro.Extensions30": {
+ "type": "Direct",
+ "requested": "[3.2.0.49743, )",
+ "resolved": "3.2.0.49743",
+ "contentHash": "fmnYm+mD14Cz0Uqh1ij37SfLJerkyFHK5581y5tXT/l3H2ZvUmVuuxjYquXzyzj9p7IexQzMW4xCpxe+mD922g=="
+ },
+ "Microsoft.Extensions.Logging.Abstractions": {
+ "type": "Direct",
+ "requested": "[7.0.0, )",
+ "resolved": "7.0.0",
+ "contentHash": "kmn78+LPVMOWeITUjIlfxUPDsI0R6G0RkeAMBmQxAJ7vBJn4q2dTva7pWi65ceN5vPGjJ9q/Uae2WKgvfktJAw=="
+ },
+ "PolySharp": {
+ "type": "Direct",
+ "requested": "[1.14.1, )",
+ "resolved": "1.14.1",
+ "contentHash": "mOOmFYwad3MIOL14VCjj02LljyF1GNw1wP0YVlxtcPvqdxjGGMNdNJJxHptlry3MOd8b40Flm8RPOM8JOlN2sQ=="
+ },
+ "Speckle.InterfaceGenerator": {
+ "type": "Direct",
+ "requested": "[0.9.5, )",
+ "resolved": "0.9.5",
+ "contentHash": "oU/L7pN1R7q8KkbrpQ3WJnHirPHqn+9DEA7asOcUiggV5dzVg1A/VYs7GOSusD24njxXh03tE3a2oTLOjt3cVg=="
+ },
+ "Autofac": {
+ "type": "Transitive",
+ "resolved": "5.2.0",
+ "contentHash": "V8dBH0dsv75uDzl7Sw+HkhKDPUw2eXnlMjcSVMH+tLo2s67MpTKGyDj1pDcpR+IF2u4YRs0s3/x7R88YJzIWvg=="
+ },
+ "GraphQL.Client": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "8yPNBbuVBpTptivyAlak4GZvbwbUcjeQTL4vN1HKHRuOykZ4r7l5fcLS6vpyPyLn0x8FsL31xbOIKyxbmR9rbA==",
+ "dependencies": {
+ "GraphQL.Client.Abstractions": "6.0.0",
+ "GraphQL.Client.Abstractions.Websocket": "6.0.0",
+ "System.Reactive": "5.0.0"
+ }
+ },
+ "GraphQL.Client.Abstractions": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "h7uzWFORHZ+CCjwr/ThAyXMr0DPpzEANDa4Uo54wqCQ+j7qUKwqYTgOrb1W40sqbvNaZm9v/X7It31SUw0maHA==",
+ "dependencies": {
+ "GraphQL.Primitives": "6.0.0"
+ }
+ },
+ "GraphQL.Client.Abstractions.Websocket": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "Nr9bPf8gIOvLuXpqEpqr9z9jslYFJOvd0feHth3/kPqeR3uMbjF5pjiwh4jxyMcxHdr8Pb6QiXkV3hsSyt0v7A==",
+ "dependencies": {
+ "GraphQL.Client.Abstractions": "6.0.0"
+ }
+ },
+ "GraphQL.Primitives": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "yg72rrYDapfsIUrul7aF6wwNnTJBOFvuA9VdDTQpPa8AlAriHbufeXYLBcodKjfUdkCnaiggX1U/nEP08Zb5GA=="
+ },
+ "Microsoft.AspNetCore.Http": {
+ "type": "Transitive",
+ "resolved": "2.2.2",
+ "contentHash": "BAibpoItxI5puk7YJbIGj95arZueM8B8M5xT1fXBn3hb3L2G3ucrZcYXv1gXdaroLbntUs8qeV8iuBrpjQsrKw==",
+ "dependencies": {
+ "Microsoft.AspNetCore.Http.Abstractions": "2.2.0",
+ "Microsoft.AspNetCore.WebUtilities": "2.2.0",
+ "Microsoft.Extensions.ObjectPool": "2.2.0",
+ "Microsoft.Extensions.Options": "2.2.0",
+ "Microsoft.Net.Http.Headers": "2.2.0"
+ }
+ },
+ "Microsoft.AspNetCore.Http.Abstractions": {
+ "type": "Transitive",
+ "resolved": "2.2.0",
+ "contentHash": "Nxs7Z1q3f1STfLYKJSVXCs1iBl+Ya6E8o4Oy1bCxJ/rNI44E/0f6tbsrVqAWfB7jlnJfyaAtIalBVxPKUPQb4Q==",
+ "dependencies": {
+ "Microsoft.AspNetCore.Http.Features": "2.2.0",
+ "System.Text.Encodings.Web": "4.5.0"
+ }
+ },
+ "Microsoft.AspNetCore.Http.Features": {
+ "type": "Transitive",
+ "resolved": "2.2.0",
+ "contentHash": "ziFz5zH8f33En4dX81LW84I6XrYXKf9jg6aM39cM+LffN9KJahViKZ61dGMSO2gd3e+qe5yBRwsesvyqlZaSMg==",
+ "dependencies": {
+ "Microsoft.Extensions.Primitives": "2.2.0"
+ }
+ },
+ "Microsoft.AspNetCore.WebUtilities": {
+ "type": "Transitive",
+ "resolved": "2.2.0",
+ "contentHash": "9ErxAAKaDzxXASB/b5uLEkLgUWv1QbeVxyJYEHQwMaxXOeFFVkQxiq8RyfVcifLU7NR0QY0p3acqx4ZpYfhHDg==",
+ "dependencies": {
+ "Microsoft.Net.Http.Headers": "2.2.0",
+ "System.Text.Encodings.Web": "4.5.0"
+ }
+ },
+ "Microsoft.CSharp": {
+ "type": "Transitive",
+ "resolved": "4.7.0",
+ "contentHash": "pTj+D3uJWyN3My70i2Hqo+OXixq3Os2D1nJ2x92FFo6sk8fYS1m1WLNTs0Dc1uPaViH0YvEEwvzddQ7y4rhXmA=="
+ },
+ "Microsoft.Data.Sqlite": {
+ "type": "Transitive",
+ "resolved": "7.0.5",
+ "contentHash": "KGxbPeWsQMnmQy43DSBxAFtHz3l2JX8EWBSGUCvT3CuZ8KsuzbkqMIJMDOxWtG8eZSoCDI04aiVQjWuuV8HmSw==",
+ "dependencies": {
+ "Microsoft.Data.Sqlite.Core": "7.0.5",
+ "SQLitePCLRaw.bundle_e_sqlite3": "2.1.4"
+ }
+ },
+ "Microsoft.Data.Sqlite.Core": {
+ "type": "Transitive",
+ "resolved": "7.0.5",
+ "contentHash": "FTerRmQPqHrCrnoUzhBu+E+1DNGwyrAMLqHkAqOOOu5pGfyMOj8qQUBxI/gDtWtG11p49UxSfWmBzRNlwZqfUg==",
+ "dependencies": {
+ "SQLitePCLRaw.core": "2.1.4"
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "elNeOmkeX3eDVG6pYVeV82p29hr+UKDaBhrZyWvWLw/EVZSYEkZlQdkp0V39k/Xehs2Qa0mvoCvkVj3eQxNQ1Q==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection.Abstractions": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "h3j/QfmFN4S0w4C2A6X7arXij/M/OVw3uQHSOFxnND4DyAzO1F9eMX7Eti7lU/OkSthEE0WzRsfT/Dmx86jzCw=="
+ },
+ "Microsoft.Extensions.Logging": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "Nw2muoNrOG5U5qa2ZekXwudUn2BJcD41e65zwmDHb1fQegTX66UokLWZkJRpqSSHXDOWZ5V0iqhbxOEky91atA==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection": "7.0.0",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Options": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.ObjectPool": {
+ "type": "Transitive",
+ "resolved": "2.2.0",
+ "contentHash": "gA8H7uQOnM5gb+L0uTNjViHYr+hRDqCdfugheGo/MxQnuHzmhhzCBTIPm19qL1z1Xe0NEMabfcOBGv9QghlZ8g=="
+ },
+ "Microsoft.Extensions.Options": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "lP1yBnTTU42cKpMozuafbvNtQ7QcBjr/CcK3bYOGEMH55Fjt+iecXjT6chR7vbgCMqy3PG3aNQSZgo/EuY/9qQ==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Primitives": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.Primitives": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "um1KU5kxcRp3CNuI8o/GrZtD4AIOXDk+RLsytjZ9QPok3ttLUelLKpilVPuaFT3TFjOhSibUAso0odbOaCDj3Q==",
+ "dependencies": {
+ "System.Runtime.CompilerServices.Unsafe": "6.0.0"
+ }
+ },
+ "Microsoft.Net.Http.Headers": {
+ "type": "Transitive",
+ "resolved": "2.2.0",
+ "contentHash": "iZNkjYqlo8sIOI0bQfpsSoMTmB/kyvmV2h225ihyZT33aTp48ZpF6qYnXxzSXmHt8DpBAwBTX+1s1UFLbYfZKg==",
+ "dependencies": {
+ "Microsoft.Extensions.Primitives": "2.2.0",
+ "System.Buffers": "4.5.0"
+ }
+ },
+ "Microsoft.Web.WebView2": {
+ "type": "Transitive",
+ "resolved": "1.0.1823.32",
+ "contentHash": "ppRcWBUNggFIqyJp7PfgS4Oe8/7yli/mHcTNDOaqo3ZzJWnv9AOr0WE9ceEP5SPs1M7CQ3QvdGMR7KNz0v09EA=="
+ },
+ "Polly": {
+ "type": "Transitive",
+ "resolved": "7.2.3",
+ "contentHash": "DeCY0OFbNdNxsjntr1gTXHJ5pKUwYzp04Er2LLeN3g6pWhffsGuKVfMBLe1lw7x76HrPkLxKEFxBlpRxS2nDEQ=="
+ },
+ "Polly.Contrib.WaitAndRetry": {
+ "type": "Transitive",
+ "resolved": "1.1.1",
+ "contentHash": "1MUQLiSo4KDkQe6nzQRhIU05lm9jlexX5BVsbuw0SL82ynZ+GzAHQxJVDPVBboxV37Po3SG077aX8DuSy8TkaA=="
+ },
+ "Polly.Extensions.Http": {
+ "type": "Transitive",
+ "resolved": "3.0.0",
+ "contentHash": "drrG+hB3pYFY7w1c3BD+lSGYvH2oIclH8GRSehgfyP5kjnFnHKQuuBhuHLv+PWyFuaTDyk/vfRpnxOzd11+J8g==",
+ "dependencies": {
+ "Polly": "7.1.0"
+ }
+ },
+ "Sentry": {
+ "type": "Transitive",
+ "resolved": "3.33.0",
+ "contentHash": "8vbD2o6IR2wrRrkSiRbnodWGWUOqIlwYtzpjvPNOb5raJdOf+zxMwfS8f6nx9bmrTTfDj7KrCB8C/5OuicAc8A=="
+ },
+ "Sentry.Serilog": {
+ "type": "Transitive",
+ "resolved": "3.33.0",
+ "contentHash": "V8BU7QGWg2qLYfNPqtuTBhC1opysny5l+Ifp6J6PhOeAxU0FssR7nYfbJVetrnLIoh2rd3DlJ6hHYYQosQYcUQ==",
+ "dependencies": {
+ "Sentry": "3.33.0",
+ "Serilog": "2.10.0"
+ }
+ },
+ "Serilog": {
+ "type": "Transitive",
+ "resolved": "2.12.0",
+ "contentHash": "xaiJLIdu6rYMKfQMYUZgTy8YK7SMZjB4Yk50C/u//Z4OsvxkUfSPJy4nknfvwAC34yr13q7kcyh4grbwhSxyZg=="
+ },
+ "Serilog.Enrichers.ClientInfo": {
+ "type": "Transitive",
+ "resolved": "1.3.0",
+ "contentHash": "mTc7PM+wC9Hr7LWSwqt5mmnlAr7RJs+eTb3PGPRhwdOackk95MkhUZognuxXEdlW19HAFNmEBTSBY5DfLwM8jQ==",
+ "dependencies": {
+ "Microsoft.AspNetCore.Http": "2.2.2",
+ "Serilog": "2.9.0"
+ }
+ },
+ "Serilog.Exceptions": {
+ "type": "Transitive",
+ "resolved": "8.4.0",
+ "contentHash": "nc/+hUw3lsdo0zCj0KMIybAu7perMx79vu72w0za9Nsi6mWyNkGXxYxakAjWB7nEmYL6zdmhEQRB4oJ2ALUeug==",
+ "dependencies": {
+ "Serilog": "2.8.0",
+ "System.Reflection.TypeExtensions": "4.7.0"
+ }
+ },
+ "Serilog.Extensions.Logging": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "9faU0zNQqU7I6soVhLUMYaGNpgWv6cKlKb2S5AnS8gXxzW/em5Ladm/6FMrWTnX41cdbdGPOWNAo6adi4WaJ6A==",
+ "dependencies": {
+ "Microsoft.Extensions.Logging": "7.0.0",
+ "Serilog": "2.12.0"
+ }
+ },
+ "Serilog.Formatting.Compact": {
+ "type": "Transitive",
+ "resolved": "1.1.0",
+ "contentHash": "pNroKVjo+rDqlxNG5PXkRLpfSCuDOBY0ri6jp9PLe505ljqwhwZz8ospy2vWhQlFu5GkIesh3FcDs4n7sWZODA==",
+ "dependencies": {
+ "Serilog": "2.8.0"
+ }
+ },
+ "Serilog.Sinks.Console": {
+ "type": "Transitive",
+ "resolved": "4.1.0",
+ "contentHash": "K6N5q+5fetjnJPvCmkWOpJ/V8IEIoMIB1s86OzBrbxwTyHxdx3pmz4H+8+O/Dc/ftUX12DM1aynx/dDowkwzqg==",
+ "dependencies": {
+ "Serilog": "2.10.0"
+ }
+ },
+ "Serilog.Sinks.File": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "uwV5hdhWPwUH1szhO8PJpFiahqXmzPzJT/sOijH/kFgUx+cyoDTMM8MHD0adw9+Iem6itoibbUXHYslzXsLEAg==",
+ "dependencies": {
+ "Serilog": "2.10.0"
+ }
+ },
+ "Serilog.Sinks.PeriodicBatching": {
+ "type": "Transitive",
+ "resolved": "3.1.0",
+ "contentHash": "NDWR7m3PalVlGEq3rzoktrXikjFMLmpwF0HI4sowo8YDdU+gqPlTHlDQiOGxHfB0sTfjPA9JjA7ctKG9zqjGkw==",
+ "dependencies": {
+ "Serilog": "2.0.0"
+ }
+ },
+ "Serilog.Sinks.Seq": {
+ "type": "Transitive",
+ "resolved": "5.2.2",
+ "contentHash": "1Csmo5ua7NKUe0yXUx+zsRefjAniPWcXFhUXxXG8pwo0iMiw2gjn9SOkgYnnxbgWqmlGv236w0N/dHc2v5XwMg==",
+ "dependencies": {
+ "Serilog": "2.12.0",
+ "Serilog.Formatting.Compact": "1.1.0",
+ "Serilog.Sinks.File": "5.0.0",
+ "Serilog.Sinks.PeriodicBatching": "3.1.0"
+ }
+ },
+ "SerilogTimings": {
+ "type": "Transitive",
+ "resolved": "3.0.1",
+ "contentHash": "Zs28eTgszAMwpIrbBnWHBI50yuxL50p/dmAUWmy75+axdZYK/Sjm5/5m1N/CisR8acJUhTVcjPZrsB1P5iv0Uw==",
+ "dependencies": {
+ "Serilog": "2.10.0"
+ }
+ },
+ "Speckle.Newtonsoft.Json": {
+ "type": "Transitive",
+ "resolved": "13.0.2",
+ "contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA=="
+ },
+ "SQLitePCLRaw.bundle_e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.4",
+ "contentHash": "EWI1olKDjFEBMJu0+3wuxwziIAdWDVMYLhuZ3Qs84rrz+DHwD00RzWPZCa+bLnHCf3oJwuFZIRsHT5p236QXww==",
+ "dependencies": {
+ "SQLitePCLRaw.lib.e_sqlite3": "2.1.4",
+ "SQLitePCLRaw.provider.e_sqlite3": "2.1.4"
+ }
+ },
+ "SQLitePCLRaw.core": {
+ "type": "Transitive",
+ "resolved": "2.1.4",
+ "contentHash": "inBjvSHo9UDKneGNzfUfDjK08JzlcIhn1+SP5Y3m6cgXpCxXKCJDy6Mka7LpgSV+UZmKSnC8rTwB0SQ0xKu5pA==",
+ "dependencies": {
+ "System.Memory": "4.5.3"
+ }
+ },
+ "SQLitePCLRaw.lib.e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.4",
+ "contentHash": "2C9Q9eX7CPLveJA0rIhf9RXAvu+7nWZu1A2MdG6SD/NOu26TakGgL1nsbc0JAspGijFOo3HoN79xrx8a368fBg=="
+ },
+ "SQLitePCLRaw.provider.e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.4",
+ "contentHash": "CSlb5dUp1FMIkez9Iv5EXzpeq7rHryVNqwJMWnpq87j9zWZexaEMdisDktMsnnrzKM6ahNrsTkjqNodTBPBxtQ==",
+ "dependencies": {
+ "SQLitePCLRaw.core": "2.1.4"
+ }
+ },
+ "System.Buffers": {
+ "type": "Transitive",
+ "resolved": "4.5.0",
+ "contentHash": "pL2ChpaRRWI/p4LXyy4RgeWlYF2sgfj/pnVMvBqwNFr5cXg7CXNnWZWxrOONLg8VGdFB8oB+EG2Qw4MLgTOe+A=="
+ },
+ "System.DoubleNumerics": {
+ "type": "Transitive",
+ "resolved": "3.1.3",
+ "contentHash": "KRKEM/L3KBodjA9VOg3EifFVWUY6EOqaMB05UvPEDm7Zeby/kZW+4kdWUEPzW6xtkwf46p661L9NrbeeQhtLzw==",
+ "dependencies": {
+ "NETStandard.Library": "1.6.1"
+ }
+ },
+ "System.Memory": {
+ "type": "Transitive",
+ "resolved": "4.5.3",
+ "contentHash": "3oDzvc/zzetpTKWMShs1AADwZjQ/36HnsufHRPcOjyRAAMLDlu2iD33MBI2opxnezcVUtXyqDXXjoFMOU9c7SA=="
+ },
+ "System.Reactive": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ=="
+ },
+ "System.Reflection.TypeExtensions": {
+ "type": "Transitive",
+ "resolved": "4.7.0",
+ "contentHash": "VybpaOQQhqE6siHppMktjfGBw1GCwvCqiufqmP8F1nj7fTUNtW35LOEt3UZTEsECfo+ELAl/9o9nJx3U91i7vA=="
+ },
+ "System.Runtime.CompilerServices.Unsafe": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg=="
+ },
+ "System.Text.Encodings.Web": {
+ "type": "Transitive",
+ "resolved": "4.5.0",
+ "contentHash": "Xg4G4Indi4dqP1iuAiMSwpiWS54ZghzR644OtsRCm/m/lBMG8dUBhLVN7hLm8NNrNTR+iGbshCPTwrvxZPlm4g=="
+ },
+ "System.Threading.Tasks.Dataflow": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "+tyDCU3/B1lDdOOAJywHQoFwyXIUghIaP2BxG79uvhfTnO+D9qIgjVlL/JV2NTliYbMHpd6eKDmHp2VHpij7MA=="
+ },
+ "speckle.autofac": {
+ "type": "Project",
+ "dependencies": {
+ "Microsoft.Extensions.Logging.Abstractions": "[7.0.0, )",
+ "Speckle.Core": "[2.0.999-local, )"
+ }
+ },
+ "speckle.connectors.dui": {
+ "type": "Project",
+ "dependencies": {
+ "Microsoft.Extensions.Logging.Abstractions": "[7.0.0, )",
+ "Speckle.Autofac": "[2.0.999-local, )",
+ "Speckle.Connectors.Utils": "[2.0.999-local, )",
+ "Speckle.Core": "[2.0.999-local, )",
+ "System.Threading.Tasks.Dataflow": "[6.0.0, )"
+ }
+ },
+ "speckle.connectors.dui.webview": {
+ "type": "Project",
+ "dependencies": {
+ "Microsoft.Web.WebView2": "[1.0.1823.32, )",
+ "Speckle.Connectors.DUI": "[2.0.999-local, )"
+ }
+ },
+ "speckle.connectors.utils": {
+ "type": "Project",
+ "dependencies": {
+ "Serilog.Extensions.Logging": "[7.0.0, )",
+ "Speckle.Autofac": "[2.0.999-local, )",
+ "Speckle.Core": "[2.0.999-local, )"
+ }
+ },
+ "speckle.converters.arcgis3": {
+ "type": "Project",
+ "dependencies": {
+ "Esri.ArcGISPro.Extensions30": "[3.2.0.49743, )",
+ "Speckle.Converters.Common": "[2.0.999-local, )"
+ }
+ },
+ "speckle.converters.arcgis3.dependencyinjection": {
+ "type": "Project",
+ "dependencies": {
+ "Autofac": "[5.2.0, )",
+ "Speckle.Converters.ArcGIS3": "[2.0.999-local, )",
+ "Speckle.Converters.Common.DependencyInjection": "[2.0.999-local, )"
+ }
+ },
+ "speckle.converters.common": {
+ "type": "Project",
+ "dependencies": {
+ "Speckle.Autofac": "[2.0.999-local, )",
+ "Speckle.Objects": "[2.0.999-local, )"
+ }
+ },
+ "speckle.converters.common.dependencyinjection": {
+ "type": "Project",
+ "dependencies": {
+ "Speckle.Autofac": "[2.0.999-local, )",
+ "Speckle.Converters.Common": "[2.0.999-local, )"
+ }
+ },
+ "Speckle.Core": {
+ "type": "Project",
+ "dependencies": {
+ "GraphQL.Client": "[6.0.0, )",
+ "Microsoft.CSharp": "[4.7.0, )",
+ "Microsoft.Data.Sqlite": "[7.0.5, )",
+ "Polly": "[7.2.3, )",
+ "Polly.Contrib.WaitAndRetry": "[1.1.1, )",
+ "Polly.Extensions.Http": "[3.0.0, )",
+ "Sentry": "[3.33.0, )",
+ "Sentry.Serilog": "[3.33.0, )",
+ "Serilog": "[2.12.0, )",
+ "Serilog.Enrichers.ClientInfo": "[1.3.0, )",
+ "Serilog.Exceptions": "[8.4.0, )",
+ "Serilog.Sinks.Console": "[4.1.0, )",
+ "Serilog.Sinks.Seq": "[5.2.2, )",
+ "SerilogTimings": "[3.0.1, )",
+ "Speckle.Newtonsoft.Json": "[13.0.2, )",
+ "System.DoubleNumerics": "[3.1.3, )"
+ }
+ },
+ "Speckle.Objects": {
+ "type": "Project",
+ "dependencies": {
+ "Speckle.Core": "[2.0.999-local, )"
+ }
+ }
+ },
+ "net6.0-windows7.0/win-x64": {
+ "Microsoft.Web.WebView2": {
+ "type": "Transitive",
+ "resolved": "1.0.1823.32",
+ "contentHash": "ppRcWBUNggFIqyJp7PfgS4Oe8/7yli/mHcTNDOaqo3ZzJWnv9AOr0WE9ceEP5SPs1M7CQ3QvdGMR7KNz0v09EA=="
+ },
+ "SQLitePCLRaw.lib.e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.4",
+ "contentHash": "2C9Q9eX7CPLveJA0rIhf9RXAvu+7nWZu1A2MdG6SD/NOu26TakGgL1nsbc0JAspGijFOo3HoN79xrx8a368fBg=="
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/DUI3-DX/Connectors/Autocad/Speckle.Connectors.Autocad2023/Speckle.Connectors.Autocad2023.csproj b/DUI3-DX/Connectors/Autocad/Speckle.Connectors.Autocad2023/Speckle.Connectors.Autocad2023.csproj
index 4ef5a65342..238ec770f6 100644
--- a/DUI3-DX/Connectors/Autocad/Speckle.Connectors.Autocad2023/Speckle.Connectors.Autocad2023.csproj
+++ b/DUI3-DX/Connectors/Autocad/Speckle.Connectors.Autocad2023/Speckle.Connectors.Autocad2023.csproj
@@ -1,4 +1,4 @@
-
+
Speckle.Connectors.Autocad
net48
@@ -6,11 +6,12 @@
true
Program
$(ProgramW6432)\Autodesk\AutoCAD 2023\acad.exe
+ $(DefineConstants);AUTOCAD2023;AUTOCAD
-
+
diff --git a/DUI3-DX/Connectors/Autocad/Speckle.Connectors.Autocad2023/packages.lock.json b/DUI3-DX/Connectors/Autocad/Speckle.Connectors.Autocad2023/packages.lock.json
new file mode 100644
index 0000000000..ecbfc4fb09
--- /dev/null
+++ b/DUI3-DX/Connectors/Autocad/Speckle.Connectors.Autocad2023/packages.lock.json
@@ -0,0 +1,524 @@
+{
+ "version": 1,
+ "dependencies": {
+ ".NETFramework,Version=v4.8": {
+ "Microsoft.Extensions.Logging.Abstractions": {
+ "type": "Direct",
+ "requested": "[7.0.0, )",
+ "resolved": "7.0.0",
+ "contentHash": "kmn78+LPVMOWeITUjIlfxUPDsI0R6G0RkeAMBmQxAJ7vBJn4q2dTva7pWi65ceN5vPGjJ9q/Uae2WKgvfktJAw==",
+ "dependencies": {
+ "System.Buffers": "4.5.1",
+ "System.Memory": "4.5.5"
+ }
+ },
+ "PolySharp": {
+ "type": "Direct",
+ "requested": "[1.14.1, )",
+ "resolved": "1.14.1",
+ "contentHash": "mOOmFYwad3MIOL14VCjj02LljyF1GNw1wP0YVlxtcPvqdxjGGMNdNJJxHptlry3MOd8b40Flm8RPOM8JOlN2sQ=="
+ },
+ "Speckle.AutoCAD.API": {
+ "type": "Direct",
+ "requested": "[2023.0.0, )",
+ "resolved": "2023.0.0",
+ "contentHash": "aNfiNw9zRW8pCl8AAQK7afEJuea4bJ4sFNsGVSDrdq1egaonZrwALU01dSyFNCE8tne86eVjlprpOGG6r0+G/A=="
+ },
+ "Speckle.InterfaceGenerator": {
+ "type": "Direct",
+ "requested": "[0.9.5, )",
+ "resolved": "0.9.5",
+ "contentHash": "oU/L7pN1R7q8KkbrpQ3WJnHirPHqn+9DEA7asOcUiggV5dzVg1A/VYs7GOSusD24njxXh03tE3a2oTLOjt3cVg=="
+ },
+ "Autofac": {
+ "type": "Transitive",
+ "resolved": "5.2.0",
+ "contentHash": "V8dBH0dsv75uDzl7Sw+HkhKDPUw2eXnlMjcSVMH+tLo2s67MpTKGyDj1pDcpR+IF2u4YRs0s3/x7R88YJzIWvg==",
+ "dependencies": {
+ "Microsoft.Bcl.AsyncInterfaces": "1.1.0"
+ }
+ },
+ "GraphQL.Client": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "8yPNBbuVBpTptivyAlak4GZvbwbUcjeQTL4vN1HKHRuOykZ4r7l5fcLS6vpyPyLn0x8FsL31xbOIKyxbmR9rbA==",
+ "dependencies": {
+ "GraphQL.Client.Abstractions": "6.0.0",
+ "GraphQL.Client.Abstractions.Websocket": "6.0.0",
+ "System.Net.WebSockets.Client.Managed": "1.0.22",
+ "System.Reactive": "5.0.0"
+ }
+ },
+ "GraphQL.Client.Abstractions": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "h7uzWFORHZ+CCjwr/ThAyXMr0DPpzEANDa4Uo54wqCQ+j7qUKwqYTgOrb1W40sqbvNaZm9v/X7It31SUw0maHA==",
+ "dependencies": {
+ "GraphQL.Primitives": "6.0.0"
+ }
+ },
+ "GraphQL.Client.Abstractions.Websocket": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "Nr9bPf8gIOvLuXpqEpqr9z9jslYFJOvd0feHth3/kPqeR3uMbjF5pjiwh4jxyMcxHdr8Pb6QiXkV3hsSyt0v7A==",
+ "dependencies": {
+ "GraphQL.Client.Abstractions": "6.0.0"
+ }
+ },
+ "GraphQL.Primitives": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "yg72rrYDapfsIUrul7aF6wwNnTJBOFvuA9VdDTQpPa8AlAriHbufeXYLBcodKjfUdkCnaiggX1U/nEP08Zb5GA=="
+ },
+ "Microsoft.Bcl.AsyncInterfaces": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "3aeMZ1N0lJoSyzqiP03hqemtb1BijhsJADdobn/4nsMJ8V1H+CrpuduUe4hlRdx+ikBQju1VGjMD1GJ3Sk05Eg==",
+ "dependencies": {
+ "System.Threading.Tasks.Extensions": "4.5.4"
+ }
+ },
+ "Microsoft.CSharp": {
+ "type": "Transitive",
+ "resolved": "4.7.0",
+ "contentHash": "pTj+D3uJWyN3My70i2Hqo+OXixq3Os2D1nJ2x92FFo6sk8fYS1m1WLNTs0Dc1uPaViH0YvEEwvzddQ7y4rhXmA=="
+ },
+ "Microsoft.Data.Sqlite": {
+ "type": "Transitive",
+ "resolved": "7.0.5",
+ "contentHash": "KGxbPeWsQMnmQy43DSBxAFtHz3l2JX8EWBSGUCvT3CuZ8KsuzbkqMIJMDOxWtG8eZSoCDI04aiVQjWuuV8HmSw==",
+ "dependencies": {
+ "Microsoft.Data.Sqlite.Core": "7.0.5",
+ "SQLitePCLRaw.bundle_e_sqlite3": "2.1.4"
+ }
+ },
+ "Microsoft.Data.Sqlite.Core": {
+ "type": "Transitive",
+ "resolved": "7.0.5",
+ "contentHash": "FTerRmQPqHrCrnoUzhBu+E+1DNGwyrAMLqHkAqOOOu5pGfyMOj8qQUBxI/gDtWtG11p49UxSfWmBzRNlwZqfUg==",
+ "dependencies": {
+ "SQLitePCLRaw.core": "2.1.4"
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "elNeOmkeX3eDVG6pYVeV82p29hr+UKDaBhrZyWvWLw/EVZSYEkZlQdkp0V39k/Xehs2Qa0mvoCvkVj3eQxNQ1Q==",
+ "dependencies": {
+ "Microsoft.Bcl.AsyncInterfaces": "7.0.0",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
+ "System.Threading.Tasks.Extensions": "4.5.4"
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection.Abstractions": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "h3j/QfmFN4S0w4C2A6X7arXij/M/OVw3uQHSOFxnND4DyAzO1F9eMX7Eti7lU/OkSthEE0WzRsfT/Dmx86jzCw==",
+ "dependencies": {
+ "Microsoft.Bcl.AsyncInterfaces": "7.0.0",
+ "System.Threading.Tasks.Extensions": "4.5.4"
+ }
+ },
+ "Microsoft.Extensions.Logging": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "Nw2muoNrOG5U5qa2ZekXwudUn2BJcD41e65zwmDHb1fQegTX66UokLWZkJRpqSSHXDOWZ5V0iqhbxOEky91atA==",
+ "dependencies": {
+ "Microsoft.Bcl.AsyncInterfaces": "7.0.0",
+ "Microsoft.Extensions.DependencyInjection": "7.0.0",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Options": "7.0.0",
+ "System.Diagnostics.DiagnosticSource": "7.0.0",
+ "System.ValueTuple": "4.5.0"
+ }
+ },
+ "Microsoft.Extensions.Options": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "lP1yBnTTU42cKpMozuafbvNtQ7QcBjr/CcK3bYOGEMH55Fjt+iecXjT6chR7vbgCMqy3PG3aNQSZgo/EuY/9qQ==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Primitives": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.Primitives": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "um1KU5kxcRp3CNuI8o/GrZtD4AIOXDk+RLsytjZ9QPok3ttLUelLKpilVPuaFT3TFjOhSibUAso0odbOaCDj3Q==",
+ "dependencies": {
+ "System.Memory": "4.5.5",
+ "System.Runtime.CompilerServices.Unsafe": "6.0.0"
+ }
+ },
+ "Microsoft.Web.WebView2": {
+ "type": "Transitive",
+ "resolved": "1.0.1823.32",
+ "contentHash": "ppRcWBUNggFIqyJp7PfgS4Oe8/7yli/mHcTNDOaqo3ZzJWnv9AOr0WE9ceEP5SPs1M7CQ3QvdGMR7KNz0v09EA=="
+ },
+ "Polly": {
+ "type": "Transitive",
+ "resolved": "7.2.3",
+ "contentHash": "DeCY0OFbNdNxsjntr1gTXHJ5pKUwYzp04Er2LLeN3g6pWhffsGuKVfMBLe1lw7x76HrPkLxKEFxBlpRxS2nDEQ=="
+ },
+ "Polly.Contrib.WaitAndRetry": {
+ "type": "Transitive",
+ "resolved": "1.1.1",
+ "contentHash": "1MUQLiSo4KDkQe6nzQRhIU05lm9jlexX5BVsbuw0SL82ynZ+GzAHQxJVDPVBboxV37Po3SG077aX8DuSy8TkaA=="
+ },
+ "Polly.Extensions.Http": {
+ "type": "Transitive",
+ "resolved": "3.0.0",
+ "contentHash": "drrG+hB3pYFY7w1c3BD+lSGYvH2oIclH8GRSehgfyP5kjnFnHKQuuBhuHLv+PWyFuaTDyk/vfRpnxOzd11+J8g==",
+ "dependencies": {
+ "Polly": "7.1.0"
+ }
+ },
+ "Sentry": {
+ "type": "Transitive",
+ "resolved": "3.33.0",
+ "contentHash": "8vbD2o6IR2wrRrkSiRbnodWGWUOqIlwYtzpjvPNOb5raJdOf+zxMwfS8f6nx9bmrTTfDj7KrCB8C/5OuicAc8A==",
+ "dependencies": {
+ "System.Reflection.Metadata": "5.0.0",
+ "System.Runtime.InteropServices.RuntimeInformation": "4.3.0",
+ "System.Text.Json": "5.0.2"
+ }
+ },
+ "Sentry.Serilog": {
+ "type": "Transitive",
+ "resolved": "3.33.0",
+ "contentHash": "V8BU7QGWg2qLYfNPqtuTBhC1opysny5l+Ifp6J6PhOeAxU0FssR7nYfbJVetrnLIoh2rd3DlJ6hHYYQosQYcUQ==",
+ "dependencies": {
+ "Sentry": "3.33.0",
+ "Serilog": "2.7.1"
+ }
+ },
+ "Serilog": {
+ "type": "Transitive",
+ "resolved": "2.12.0",
+ "contentHash": "xaiJLIdu6rYMKfQMYUZgTy8YK7SMZjB4Yk50C/u//Z4OsvxkUfSPJy4nknfvwAC34yr13q7kcyh4grbwhSxyZg=="
+ },
+ "Serilog.Enrichers.ClientInfo": {
+ "type": "Transitive",
+ "resolved": "1.3.0",
+ "contentHash": "mTc7PM+wC9Hr7LWSwqt5mmnlAr7RJs+eTb3PGPRhwdOackk95MkhUZognuxXEdlW19HAFNmEBTSBY5DfLwM8jQ==",
+ "dependencies": {
+ "Serilog": "2.4.0"
+ }
+ },
+ "Serilog.Exceptions": {
+ "type": "Transitive",
+ "resolved": "8.4.0",
+ "contentHash": "nc/+hUw3lsdo0zCj0KMIybAu7perMx79vu72w0za9Nsi6mWyNkGXxYxakAjWB7nEmYL6zdmhEQRB4oJ2ALUeug==",
+ "dependencies": {
+ "Serilog": "2.8.0"
+ }
+ },
+ "Serilog.Extensions.Logging": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "9faU0zNQqU7I6soVhLUMYaGNpgWv6cKlKb2S5AnS8gXxzW/em5Ladm/6FMrWTnX41cdbdGPOWNAo6adi4WaJ6A==",
+ "dependencies": {
+ "Microsoft.Extensions.Logging": "7.0.0",
+ "Serilog": "2.12.0"
+ }
+ },
+ "Serilog.Formatting.Compact": {
+ "type": "Transitive",
+ "resolved": "1.1.0",
+ "contentHash": "pNroKVjo+rDqlxNG5PXkRLpfSCuDOBY0ri6jp9PLe505ljqwhwZz8ospy2vWhQlFu5GkIesh3FcDs4n7sWZODA==",
+ "dependencies": {
+ "Serilog": "2.8.0"
+ }
+ },
+ "Serilog.Sinks.Console": {
+ "type": "Transitive",
+ "resolved": "4.1.0",
+ "contentHash": "K6N5q+5fetjnJPvCmkWOpJ/V8IEIoMIB1s86OzBrbxwTyHxdx3pmz4H+8+O/Dc/ftUX12DM1aynx/dDowkwzqg==",
+ "dependencies": {
+ "Serilog": "2.10.0"
+ }
+ },
+ "Serilog.Sinks.File": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "uwV5hdhWPwUH1szhO8PJpFiahqXmzPzJT/sOijH/kFgUx+cyoDTMM8MHD0adw9+Iem6itoibbUXHYslzXsLEAg==",
+ "dependencies": {
+ "Serilog": "2.10.0"
+ }
+ },
+ "Serilog.Sinks.PeriodicBatching": {
+ "type": "Transitive",
+ "resolved": "3.1.0",
+ "contentHash": "NDWR7m3PalVlGEq3rzoktrXikjFMLmpwF0HI4sowo8YDdU+gqPlTHlDQiOGxHfB0sTfjPA9JjA7ctKG9zqjGkw==",
+ "dependencies": {
+ "Serilog": "2.0.0"
+ }
+ },
+ "Serilog.Sinks.Seq": {
+ "type": "Transitive",
+ "resolved": "5.2.2",
+ "contentHash": "1Csmo5ua7NKUe0yXUx+zsRefjAniPWcXFhUXxXG8pwo0iMiw2gjn9SOkgYnnxbgWqmlGv236w0N/dHc2v5XwMg==",
+ "dependencies": {
+ "Serilog": "2.12.0",
+ "Serilog.Formatting.Compact": "1.1.0",
+ "Serilog.Sinks.File": "5.0.0",
+ "Serilog.Sinks.PeriodicBatching": "3.1.0"
+ }
+ },
+ "SerilogTimings": {
+ "type": "Transitive",
+ "resolved": "3.0.1",
+ "contentHash": "Zs28eTgszAMwpIrbBnWHBI50yuxL50p/dmAUWmy75+axdZYK/Sjm5/5m1N/CisR8acJUhTVcjPZrsB1P5iv0Uw==",
+ "dependencies": {
+ "Serilog": "2.10.0"
+ }
+ },
+ "Speckle.Newtonsoft.Json": {
+ "type": "Transitive",
+ "resolved": "13.0.2",
+ "contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA=="
+ },
+ "SQLitePCLRaw.bundle_e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.4",
+ "contentHash": "EWI1olKDjFEBMJu0+3wuxwziIAdWDVMYLhuZ3Qs84rrz+DHwD00RzWPZCa+bLnHCf3oJwuFZIRsHT5p236QXww==",
+ "dependencies": {
+ "SQLitePCLRaw.lib.e_sqlite3": "2.1.4",
+ "SQLitePCLRaw.provider.dynamic_cdecl": "2.1.4"
+ }
+ },
+ "SQLitePCLRaw.core": {
+ "type": "Transitive",
+ "resolved": "2.1.4",
+ "contentHash": "inBjvSHo9UDKneGNzfUfDjK08JzlcIhn1+SP5Y3m6cgXpCxXKCJDy6Mka7LpgSV+UZmKSnC8rTwB0SQ0xKu5pA==",
+ "dependencies": {
+ "System.Memory": "4.5.3"
+ }
+ },
+ "SQLitePCLRaw.lib.e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.4",
+ "contentHash": "2C9Q9eX7CPLveJA0rIhf9RXAvu+7nWZu1A2MdG6SD/NOu26TakGgL1nsbc0JAspGijFOo3HoN79xrx8a368fBg=="
+ },
+ "SQLitePCLRaw.provider.dynamic_cdecl": {
+ "type": "Transitive",
+ "resolved": "2.1.4",
+ "contentHash": "ZsaKKhgYF9B1fvcnOGKl3EycNAwd9CRWX7v0rEfuPWhQQ5Jjpvf2VEHahiLIGHio3hxi3EIKFJw9KvyowWOUAw==",
+ "dependencies": {
+ "SQLitePCLRaw.core": "2.1.4"
+ }
+ },
+ "System.Buffers": {
+ "type": "Transitive",
+ "resolved": "4.5.1",
+ "contentHash": "Rw7ijyl1qqRS0YQD/WycNst8hUUMgrMH4FCn1nNm27M4VxchZ1js3fVjQaANHO5f3sN4isvP4a+Met9Y4YomAg=="
+ },
+ "System.Collections.Immutable": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "FXkLXiK0sVVewcso0imKQoOxjoPAj42R8HtjjbSjVPAzwDfzoyoznWxgA3c38LDbN9SJux1xXoXYAhz98j7r2g==",
+ "dependencies": {
+ "System.Memory": "4.5.4"
+ }
+ },
+ "System.Diagnostics.DiagnosticSource": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "9W0ewWDuAyDqS2PigdTxk6jDKonfgscY/hP8hm7VpxYhNHZHKvZTdRckberlFk3VnCmr3xBUyMBut12Q+T2aOw==",
+ "dependencies": {
+ "System.Memory": "4.5.5",
+ "System.Runtime.CompilerServices.Unsafe": "6.0.0"
+ }
+ },
+ "System.DoubleNumerics": {
+ "type": "Transitive",
+ "resolved": "3.1.3",
+ "contentHash": "KRKEM/L3KBodjA9VOg3EifFVWUY6EOqaMB05UvPEDm7Zeby/kZW+4kdWUEPzW6xtkwf46p661L9NrbeeQhtLzw==",
+ "dependencies": {
+ "NETStandard.Library": "1.6.1"
+ }
+ },
+ "System.Memory": {
+ "type": "Transitive",
+ "resolved": "4.5.5",
+ "contentHash": "XIWiDvKPXaTveaB7HVganDlOCRoj03l+jrwNvcge/t8vhGYKvqV+dMv6G4SAX2NoNmN0wZfVPTAlFwZcZvVOUw==",
+ "dependencies": {
+ "System.Buffers": "4.5.1",
+ "System.Numerics.Vectors": "4.5.0",
+ "System.Runtime.CompilerServices.Unsafe": "4.5.3"
+ }
+ },
+ "System.Net.WebSockets.Client.Managed": {
+ "type": "Transitive",
+ "resolved": "1.0.22",
+ "contentHash": "WqEOxPlXjuZrIjUtXNE9NxEfU/n5E35iV2PtoZdJSUC4tlrqwHnTee+wvMIM4OUaJWmwrymeqcgYrE0IkGAgLA==",
+ "dependencies": {
+ "System.Buffers": "4.4.0",
+ "System.Numerics.Vectors": "4.4.0"
+ }
+ },
+ "System.Numerics.Vectors": {
+ "type": "Transitive",
+ "resolved": "4.5.0",
+ "contentHash": "QQTlPTl06J/iiDbJCiepZ4H//BVraReU4O4EoRw1U02H5TLUIT7xn3GnDp9AXPSlJUDyFs4uWjWafNX6WrAojQ=="
+ },
+ "System.Reactive": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ==",
+ "dependencies": {
+ "System.Threading.Tasks.Extensions": "4.5.4"
+ }
+ },
+ "System.Reflection.Metadata": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "5NecZgXktdGg34rh1OenY1rFNDCI8xSjFr+Z4OU4cU06AQHUdRnIIEeWENu3Wl4YowbzkymAIMvi3WyK9U53pQ==",
+ "dependencies": {
+ "System.Collections.Immutable": "5.0.0"
+ }
+ },
+ "System.Runtime.CompilerServices.Unsafe": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg=="
+ },
+ "System.Runtime.InteropServices.RuntimeInformation": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "cbz4YJMqRDR7oLeMRbdYv7mYzc++17lNhScCX0goO2XpGWdvAt60CGN+FHdePUEHCe/Jy9jUlvNAiNdM+7jsOw=="
+ },
+ "System.Text.Encodings.Web": {
+ "type": "Transitive",
+ "resolved": "5.0.1",
+ "contentHash": "KmJ+CJXizDofbq6mpqDoRRLcxgOd2z9X3XoFNULSbvbqVRZkFX3istvr+MUjL6Zw1RT+RNdoI4GYidIINtgvqQ==",
+ "dependencies": {
+ "System.Buffers": "4.5.1",
+ "System.Memory": "4.5.4"
+ }
+ },
+ "System.Text.Json": {
+ "type": "Transitive",
+ "resolved": "5.0.2",
+ "contentHash": "I47dVIGiV6SfAyppphxqupertT/5oZkYLDCX6vC3HpOI4ZLjyoKAreUoem2ie6G0RbRuFrlqz/PcTQjfb2DOfQ==",
+ "dependencies": {
+ "Microsoft.Bcl.AsyncInterfaces": "5.0.0",
+ "System.Buffers": "4.5.1",
+ "System.Memory": "4.5.4",
+ "System.Numerics.Vectors": "4.5.0",
+ "System.Runtime.CompilerServices.Unsafe": "5.0.0",
+ "System.Text.Encodings.Web": "5.0.1",
+ "System.Threading.Tasks.Extensions": "4.5.4",
+ "System.ValueTuple": "4.5.0"
+ }
+ },
+ "System.Threading.Tasks.Dataflow": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "+tyDCU3/B1lDdOOAJywHQoFwyXIUghIaP2BxG79uvhfTnO+D9qIgjVlL/JV2NTliYbMHpd6eKDmHp2VHpij7MA=="
+ },
+ "System.Threading.Tasks.Extensions": {
+ "type": "Transitive",
+ "resolved": "4.5.4",
+ "contentHash": "zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg==",
+ "dependencies": {
+ "System.Runtime.CompilerServices.Unsafe": "4.5.3"
+ }
+ },
+ "System.ValueTuple": {
+ "type": "Transitive",
+ "resolved": "4.5.0",
+ "contentHash": "okurQJO6NRE/apDIP23ajJ0hpiNmJ+f0BwOlB/cSqTLQlw5upkf+5+96+iG2Jw40G1fCVCyPz/FhIABUjMR+RQ=="
+ },
+ "speckle.autofac": {
+ "type": "Project",
+ "dependencies": {
+ "Microsoft.Extensions.Logging.Abstractions": "[7.0.0, )",
+ "Speckle.Core": "[2.0.999-local, )"
+ }
+ },
+ "speckle.connectors.dui": {
+ "type": "Project",
+ "dependencies": {
+ "Microsoft.Extensions.Logging.Abstractions": "[7.0.0, )",
+ "Speckle.Autofac": "[2.0.999-local, )",
+ "Speckle.Connectors.Utils": "[2.0.999-local, )",
+ "Speckle.Core": "[2.0.999-local, )",
+ "System.Threading.Tasks.Dataflow": "[6.0.0, )"
+ }
+ },
+ "speckle.connectors.dui.webview": {
+ "type": "Project",
+ "dependencies": {
+ "Microsoft.Web.WebView2": "[1.0.1823.32, )",
+ "Speckle.Connectors.DUI": "[2.0.999-local, )"
+ }
+ },
+ "speckle.connectors.utils": {
+ "type": "Project",
+ "dependencies": {
+ "Serilog.Extensions.Logging": "[7.0.0, )",
+ "Speckle.Autofac": "[2.0.999-local, )",
+ "Speckle.Core": "[2.0.999-local, )"
+ }
+ },
+ "speckle.converters.autocad2023": {
+ "type": "Project",
+ "dependencies": {
+ "Speckle.AutoCAD.API": "[2023.0.0, )",
+ "Speckle.Converters.Common": "[2.0.999-local, )"
+ }
+ },
+ "speckle.converters.autocad2023.dependencyinjection": {
+ "type": "Project",
+ "dependencies": {
+ "Autofac": "[5.2.0, )",
+ "Speckle.Converters.Autocad2023": "[2.0.999-local, )",
+ "Speckle.Converters.Common.DependencyInjection": "[2.0.999-local, )"
+ }
+ },
+ "speckle.converters.common": {
+ "type": "Project",
+ "dependencies": {
+ "Speckle.Autofac": "[2.0.999-local, )",
+ "Speckle.Objects": "[2.0.999-local, )"
+ }
+ },
+ "speckle.converters.common.dependencyinjection": {
+ "type": "Project",
+ "dependencies": {
+ "Speckle.Autofac": "[2.0.999-local, )",
+ "Speckle.Converters.Common": "[2.0.999-local, )"
+ }
+ },
+ "Speckle.Core": {
+ "type": "Project",
+ "dependencies": {
+ "GraphQL.Client": "[6.0.0, )",
+ "Microsoft.CSharp": "[4.7.0, )",
+ "Microsoft.Data.Sqlite": "[7.0.5, )",
+ "Polly": "[7.2.3, )",
+ "Polly.Contrib.WaitAndRetry": "[1.1.1, )",
+ "Polly.Extensions.Http": "[3.0.0, )",
+ "Sentry": "[3.33.0, )",
+ "Sentry.Serilog": "[3.33.0, )",
+ "Serilog": "[2.12.0, )",
+ "Serilog.Enrichers.ClientInfo": "[1.3.0, )",
+ "Serilog.Exceptions": "[8.4.0, )",
+ "Serilog.Sinks.Console": "[4.1.0, )",
+ "Serilog.Sinks.Seq": "[5.2.2, )",
+ "SerilogTimings": "[3.0.1, )",
+ "Speckle.Newtonsoft.Json": "[13.0.2, )",
+ "System.DoubleNumerics": "[3.1.3, )"
+ }
+ },
+ "Speckle.Objects": {
+ "type": "Project",
+ "dependencies": {
+ "Speckle.Core": "[2.0.999-local, )"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/DUI3-DX/Connectors/Autocad/Speckle.Connectors.AutocadShared/Bindings/AutocadReceiveBinding.cs b/DUI3-DX/Connectors/Autocad/Speckle.Connectors.AutocadShared/Bindings/AutocadReceiveBinding.cs
index da2e5b34c0..2faf89f7ad 100644
--- a/DUI3-DX/Connectors/Autocad/Speckle.Connectors.AutocadShared/Bindings/AutocadReceiveBinding.cs
+++ b/DUI3-DX/Connectors/Autocad/Speckle.Connectors.AutocadShared/Bindings/AutocadReceiveBinding.cs
@@ -51,6 +51,11 @@ public async Task Receive(string modelCardId)
// Init cancellation token source -> Manager also cancel it if exist before
CancellationTokenSource cts = _cancellationManager.InitCancellationTokenSource(modelCardId);
+ // Disable document activation (document creation and document switch)
+ // Not disabling results in DUI model card being out of sync with the active document
+ // The DocumentActivated event isn't usable probably because it is pushed to back of main thread queue
+ Application.DocumentManager.DocumentActivationEnabled = false;
+
// Receive host objects
var operationResults = await unitOfWork.Service
.Execute(
@@ -72,6 +77,11 @@ public async Task Receive(string modelCardId)
// SWALLOW -> UI handles it immediately, so we do not need to handle anything
return;
}
+ finally
+ {
+ // renable document activation
+ Application.DocumentManager.DocumentActivationEnabled = true;
+ }
}
private void OnSendOperationProgress(string modelCardId, string status, double? progress)
diff --git a/DUI3-DX/Connectors/Autocad/Speckle.Connectors.AutocadShared/Bindings/AutocadSelectionBinding.cs b/DUI3-DX/Connectors/Autocad/Speckle.Connectors.AutocadShared/Bindings/AutocadSelectionBinding.cs
index 1da7250ceb..1e13090a9f 100644
--- a/DUI3-DX/Connectors/Autocad/Speckle.Connectors.AutocadShared/Bindings/AutocadSelectionBinding.cs
+++ b/DUI3-DX/Connectors/Autocad/Speckle.Connectors.AutocadShared/Bindings/AutocadSelectionBinding.cs
@@ -8,20 +8,24 @@ namespace Speckle.Connectors.Autocad.Bindings;
public class AutocadSelectionBinding : ISelectionBinding
{
private const string SELECTION_EVENT = "setSelection";
-
+ private readonly ITopLevelExceptionHandler _topLevelExceptionHandler;
private readonly HashSet _visitedDocuments = new();
+
public string Name => "selectionBinding";
+
public IBridge Parent { get; }
- public AutocadSelectionBinding(IBridge parent)
+ public AutocadSelectionBinding(IBridge parent, ITopLevelExceptionHandler topLevelExceptionHandler)
{
+ _topLevelExceptionHandler = topLevelExceptionHandler;
Parent = parent;
// POC: Use here Context for doc. In converters it's OK but we are still lacking to use context into bindings.
// It is with the case of if binding created with already a document
// This is valid when user opens acad file directly double clicking
TryRegisterDocumentForSelection(Application.DocumentManager.MdiActiveDocument);
- Application.DocumentManager.DocumentActivated += (sender, e) => OnDocumentChanged(e.Document);
+ Application.DocumentManager.DocumentActivated += (_, e) =>
+ _topLevelExceptionHandler.CatchUnhandled(() => OnDocumentChanged(e.Document));
}
private void OnDocumentChanged(Document? document) => TryRegisterDocumentForSelection(document);
@@ -36,9 +40,7 @@ private void TryRegisterDocumentForSelection(Document? document)
if (!_visitedDocuments.Contains(document))
{
document.ImpliedSelectionChanged += (_, _) =>
- {
- Parent.RunOnMainThread(OnSelectionChanged);
- };
+ _topLevelExceptionHandler.CatchUnhandled(() => Parent.RunOnMainThread(OnSelectionChanged));
_visitedDocuments.Add(document);
}
diff --git a/DUI3-DX/Connectors/Autocad/Speckle.Connectors.AutocadShared/Bindings/AutocadSendBinding.cs b/DUI3-DX/Connectors/Autocad/Speckle.Connectors.AutocadShared/Bindings/AutocadSendBinding.cs
index 8ebb187279..32cc40fbe7 100644
--- a/DUI3-DX/Connectors/Autocad/Speckle.Connectors.AutocadShared/Bindings/AutocadSendBinding.cs
+++ b/DUI3-DX/Connectors/Autocad/Speckle.Connectors.AutocadShared/Bindings/AutocadSendBinding.cs
@@ -29,6 +29,7 @@ public sealed class AutocadSendBinding : ISendBinding
private readonly IUnitOfWorkFactory _unitOfWorkFactory;
private readonly AutocadSettings _autocadSettings;
private readonly ISendConversionCache _sendConversionCache;
+ private readonly ITopLevelExceptionHandler _topLevelExceptionHandler;
///
/// Used internally to aggregate the changed objects' id.
@@ -43,7 +44,8 @@ public AutocadSendBinding(
CancellationManager cancellationManager,
AutocadSettings autocadSettings,
IUnitOfWorkFactory unitOfWorkFactory,
- ISendConversionCache sendConversionCache
+ ISendConversionCache sendConversionCache,
+ ITopLevelExceptionHandler topLevelExceptionHandler
)
{
_store = store;
@@ -53,10 +55,13 @@ ISendConversionCache sendConversionCache
_cancellationManager = cancellationManager;
_sendFilters = sendFilters.ToList();
_sendConversionCache = sendConversionCache;
+ _topLevelExceptionHandler = topLevelExceptionHandler;
Parent = parent;
Commands = new SendBindingUICommands(parent);
- Application.DocumentManager.DocumentActivated += (sender, args) => SubscribeToObjectChanges(args.Document);
+ Application.DocumentManager.DocumentActivated += (_, args) =>
+ topLevelExceptionHandler.CatchUnhandled(() => SubscribeToObjectChanges(args.Document));
+
if (Application.DocumentManager.CurrentDocument != null)
{
// catches the case when autocad just opens up with a blank new doc
@@ -74,9 +79,14 @@ private void SubscribeToObjectChanges(Document doc)
}
_docSubsTracker.Add(doc.Name);
- doc.Database.ObjectAppended += (_, e) => OnChangeChangedObjectIds(e.DBObject);
- doc.Database.ObjectErased += (_, e) => OnChangeChangedObjectIds(e.DBObject);
- doc.Database.ObjectModified += (_, e) => OnChangeChangedObjectIds(e.DBObject);
+ doc.Database.ObjectAppended += (_, e) => OnObjectChanged(e.DBObject);
+ doc.Database.ObjectErased += (_, e) => OnObjectChanged(e.DBObject);
+ doc.Database.ObjectModified += (_, e) => OnObjectChanged(e.DBObject);
+ }
+
+ void OnObjectChanged(DBObject dbObject)
+ {
+ _topLevelExceptionHandler.CatchUnhandled(() => OnChangeChangedObjectIds(dbObject));
}
private void OnChangeChangedObjectIds(DBObject dBObject)
@@ -130,6 +140,11 @@ private async Task SendInternal(string modelCardId)
// Init cancellation token source -> Manager also cancel it if exist before
CancellationTokenSource cts = _cancellationManager.InitCancellationTokenSource(modelCardId);
+ // Disable document activation (document creation and document switch)
+ // Not disabling results in DUI model card being out of sync with the active document
+ // The DocumentActivated event isn't usable probably because it is pushed to back of main thread queue
+ Application.DocumentManager.DocumentActivationEnabled = false;
+
// Get elements to convert
List autocadObjects = Application.DocumentManager.CurrentDocument.GetObjects(
modelCard.SendFilter.NotNull().GetObjectIds()
@@ -169,6 +184,11 @@ private async Task SendInternal(string modelCardId)
{
Commands.SetModelError(modelCardId, e);
}
+ finally
+ {
+ // renable document activation
+ Application.DocumentManager.DocumentActivationEnabled = true;
+ }
}
private void OnSendOperationProgress(string modelCardId, string status, double? progress)
diff --git a/DUI3-DX/Connectors/Autocad/Speckle.Connectors.AutocadShared/DependencyInjection/AutocadConnectorModule.cs b/DUI3-DX/Connectors/Autocad/Speckle.Connectors.AutocadShared/DependencyInjection/AutocadConnectorModule.cs
index e77f804492..52da8c7d75 100644
--- a/DUI3-DX/Connectors/Autocad/Speckle.Connectors.AutocadShared/DependencyInjection/AutocadConnectorModule.cs
+++ b/DUI3-DX/Connectors/Autocad/Speckle.Connectors.AutocadShared/DependencyInjection/AutocadConnectorModule.cs
@@ -1,3 +1,4 @@
+#if AUTOCAD
using Autodesk.AutoCAD.DatabaseServices;
using Speckle.Autofac;
using Speckle.Autofac.DependencyInjection;
@@ -39,6 +40,9 @@ public void Load(SpeckleContainerBuilder builder)
builder.AddSingleton();
builder.AddSingleton();
+ SharedConnectorModule.LoadShared(builder);
+
+
builder.AddScoped();
// Operations
@@ -50,13 +54,7 @@ public void Load(SpeckleContainerBuilder builder)
builder.AddScoped, AutocadRootObjectBuilder>();
// Register bindings
-
- builder.AddSingleton();
builder.AddSingleton("connectorName", "Autocad"); // POC: Easier like this for now, should be cleaned up later
- builder.AddSingleton();
- builder.AddSingleton();
- builder.AddSingleton();
- builder.AddSingleton();
builder.AddSingleton();
builder.AddSingleton();
@@ -68,3 +66,4 @@ public void Load(SpeckleContainerBuilder builder)
builder.AddScoped>, AutocadInstanceObjectManager>();
}
}
+#endif
diff --git a/DUI3-DX/Connectors/Autocad/Speckle.Connectors.AutocadShared/DependencyInjection/Civil3dConnectorModule.cs b/DUI3-DX/Connectors/Autocad/Speckle.Connectors.AutocadShared/DependencyInjection/Civil3dConnectorModule.cs
new file mode 100644
index 0000000000..e6889843c5
--- /dev/null
+++ b/DUI3-DX/Connectors/Autocad/Speckle.Connectors.AutocadShared/DependencyInjection/Civil3dConnectorModule.cs
@@ -0,0 +1,37 @@
+#if CIVIL3D
+using Speckle.Autofac.DependencyInjection;
+using Speckle.Connectors.Autocad.Bindings;
+using Speckle.Connectors.Autocad.Filters;
+using Speckle.Connectors.Autocad.Operations.Send;
+using Speckle.Connectors.DUI.Bindings;
+using Speckle.Connectors.DUI.Models.Card.SendFilter;
+using Speckle.Connectors.Utils.Builders;
+using Speckle.Connectors.Utils.Caching;
+using Speckle.Connectors.Utils.Operations;
+
+namespace Speckle.Connectors.Autocad.DependencyInjection;
+
+public class Civil3dConnectorModule : ISpeckleModule
+{
+ public void Load(SpeckleContainerBuilder builder)
+ {
+ SharedConnectorModule.LoadShared(builder);
+
+ // Operations
+ builder.AddScoped>();
+
+ // Object Builders
+ builder.AddScoped, AutocadRootObjectBuilder>();
+
+ // Register bindings
+ builder.AddSingleton("connectorName", "Civil3d"); // POC: Easier like this for now, should be cleaned up later
+ builder.AddSingleton();
+
+ // register send filters
+ builder.AddTransient();
+
+ // register send conversion cache
+ builder.AddSingleton();
+ }
+}
+#endif
diff --git a/DUI3-DX/Connectors/Autocad/Speckle.Connectors.AutocadShared/DependencyInjection/SharedConnectorModule.cs b/DUI3-DX/Connectors/Autocad/Speckle.Connectors.AutocadShared/DependencyInjection/SharedConnectorModule.cs
new file mode 100644
index 0000000000..48b71d723e
--- /dev/null
+++ b/DUI3-DX/Connectors/Autocad/Speckle.Connectors.AutocadShared/DependencyInjection/SharedConnectorModule.cs
@@ -0,0 +1,40 @@
+using Speckle.Autofac;
+using Speckle.Autofac.DependencyInjection;
+using Speckle.Connectors.Autocad.Bindings;
+using Speckle.Connectors.Autocad.HostApp;
+using Speckle.Connectors.Autocad.Interfaces;
+using Speckle.Connectors.Autocad.Plugin;
+using Speckle.Connectors.DUI;
+using Speckle.Connectors.DUI.Bindings;
+using Speckle.Connectors.DUI.Models;
+using Speckle.Connectors.DUI.WebView;
+using Speckle.Connectors.Utils;
+
+namespace Speckle.Connectors.Autocad.DependencyInjection;
+
+public static class SharedConnectorModule
+{
+ public static void LoadShared(SpeckleContainerBuilder builder)
+ {
+ builder.AddAutofac();
+ builder.AddConnectorUtils();
+ builder.AddDUI();
+ builder.AddDUIView();
+
+ // Register other connector specific types
+ builder.AddSingleton();
+ builder.AddTransient();
+ builder.AddSingleton(new AutocadDocumentManager()); // TODO: Dependent to TransactionContext, can be moved to AutocadContext
+ builder.AddSingleton();
+ builder.AddSingleton();
+ builder.AddSingleton();
+ builder.AddSingleton();
+
+ // Register bindings
+ builder.AddSingleton();
+ builder.AddSingleton();
+ builder.AddSingleton();
+ builder.AddSingleton();
+ builder.AddSingleton();
+ }
+}
diff --git a/DUI3-DX/Connectors/Autocad/Speckle.Connectors.AutocadShared/HostApp/AutocadDocumentModelStore.cs b/DUI3-DX/Connectors/Autocad/Speckle.Connectors.AutocadShared/HostApp/AutocadDocumentModelStore.cs
index 17ebfccee0..a01b4a0716 100644
--- a/DUI3-DX/Connectors/Autocad/Speckle.Connectors.AutocadShared/HostApp/AutocadDocumentModelStore.cs
+++ b/DUI3-DX/Connectors/Autocad/Speckle.Connectors.AutocadShared/HostApp/AutocadDocumentModelStore.cs
@@ -1,3 +1,4 @@
+using Speckle.Connectors.DUI.Bridge;
using Speckle.Connectors.DUI.Models;
using Speckle.Connectors.Utils;
using Speckle.Newtonsoft.Json;
@@ -12,7 +13,8 @@ public class AutocadDocumentStore : DocumentModelStore
public AutocadDocumentStore(
JsonSerializerSettings jsonSerializerSettings,
- AutocadDocumentManager autocadDocumentManager
+ AutocadDocumentManager autocadDocumentManager,
+ ITopLevelExceptionHandler topLevelExceptionHandler
)
: base(jsonSerializerSettings, true)
{
@@ -29,14 +31,15 @@ AutocadDocumentManager autocadDocumentManager
OnDocChangeInternal(Application.DocumentManager.MdiActiveDocument);
}
- Application.DocumentManager.DocumentActivated += (_, e) => OnDocChangeInternal(e.Document);
+ Application.DocumentManager.DocumentActivated += (_, e) =>
+ topLevelExceptionHandler.CatchUnhandled(() => OnDocChangeInternal(e.Document));
// since below event triggered as secondary, it breaks the logic in OnDocChangeInternal function, leaving it here for now.
// Autodesk.AutoCAD.ApplicationServices.Application.DocumentWindowCollection.DocumentWindowActivated += (_, args) =>
// OnDocChangeInternal((Document)args.DocumentWindow.Document);
}
- private void OnDocChangeInternal(Document doc)
+ private void OnDocChangeInternal(Document? doc)
{
var currentDocName = doc != null ? doc.Name : _nullDocumentName;
if (_previousDocName == currentDocName)
@@ -54,7 +57,7 @@ public override void ReadFromFile()
Models = new();
// POC: Will be addressed to move it into AutocadContext!
- Document doc = Application.DocumentManager.MdiActiveDocument;
+ Document? doc = Application.DocumentManager.MdiActiveDocument;
if (doc == null)
{
diff --git a/DUI3-DX/Connectors/Autocad/Speckle.Connectors.AutocadShared/Plugin/AutocadCommand.cs b/DUI3-DX/Connectors/Autocad/Speckle.Connectors.AutocadShared/Plugin/AutocadCommand.cs
index 6727399792..2a08e16bc9 100644
--- a/DUI3-DX/Connectors/Autocad/Speckle.Connectors.AutocadShared/Plugin/AutocadCommand.cs
+++ b/DUI3-DX/Connectors/Autocad/Speckle.Connectors.AutocadShared/Plugin/AutocadCommand.cs
@@ -35,8 +35,13 @@ public void Command()
var builder = SpeckleContainerBuilder.CreateInstance();
- var autocadSettings = new AutocadSettings(HostApplications.AutoCAD, HostAppVersion.v2023);
-
+#if CIVIL3D2024
+ AutocadSettings autocadSettings = new (HostApplications.Civil3D, HostAppVersion.v2024);
+#elif AUTOCAD2023
+ AutocadSettings autocadSettings = new(HostApplications.AutoCAD, HostAppVersion.v2023);
+#else
+ AutocadSettings autocadSettings = new(HostApplications.AutoCAD, HostAppVersion.v2023);
+#endif
Container = builder
.LoadAutofacModules(Assembly.GetExecutingAssembly(), autocadSettings.Modules)
.AddSingleton(autocadSettings)
diff --git a/DUI3-DX/Connectors/Autocad/Speckle.Connectors.AutocadShared/Speckle.Connectors.AutocadShared.projitems b/DUI3-DX/Connectors/Autocad/Speckle.Connectors.AutocadShared/Speckle.Connectors.AutocadShared.projitems
index c662f321a1..b95639804d 100644
--- a/DUI3-DX/Connectors/Autocad/Speckle.Connectors.AutocadShared/Speckle.Connectors.AutocadShared.projitems
+++ b/DUI3-DX/Connectors/Autocad/Speckle.Connectors.AutocadShared/Speckle.Connectors.AutocadShared.projitems
@@ -13,7 +13,9 @@
+
+
diff --git a/DUI3-DX/Connectors/Autocad/Speckle.Connectors.Civil3d2024/Speckle.Connectors.Civil3d2024.csproj b/DUI3-DX/Connectors/Autocad/Speckle.Connectors.Civil3d2024/Speckle.Connectors.Civil3d2024.csproj
new file mode 100644
index 0000000000..721a34ab7e
--- /dev/null
+++ b/DUI3-DX/Connectors/Autocad/Speckle.Connectors.Civil3d2024/Speckle.Connectors.Civil3d2024.csproj
@@ -0,0 +1,26 @@
+
+
+ Speckle.Connectors.Civil3d
+ net48
+ x64
+ true
+ Program
+ $(ProgramW6432)\Autodesk\AutoCAD 2024\acad.exe
+ $(DefineConstants);CIVIL3D2024;CIVIL3D;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/DUI3-DX/Connectors/Autocad/Speckle.Connectors.Civil3d2024/packages.lock.json b/DUI3-DX/Connectors/Autocad/Speckle.Connectors.Civil3d2024/packages.lock.json
new file mode 100644
index 0000000000..442462d552
--- /dev/null
+++ b/DUI3-DX/Connectors/Autocad/Speckle.Connectors.Civil3d2024/packages.lock.json
@@ -0,0 +1,533 @@
+{
+ "version": 1,
+ "dependencies": {
+ ".NETFramework,Version=v4.8": {
+ "Microsoft.Extensions.Logging.Abstractions": {
+ "type": "Direct",
+ "requested": "[7.0.0, )",
+ "resolved": "7.0.0",
+ "contentHash": "kmn78+LPVMOWeITUjIlfxUPDsI0R6G0RkeAMBmQxAJ7vBJn4q2dTva7pWi65ceN5vPGjJ9q/Uae2WKgvfktJAw==",
+ "dependencies": {
+ "System.Buffers": "4.5.1",
+ "System.Memory": "4.5.5"
+ }
+ },
+ "PolySharp": {
+ "type": "Direct",
+ "requested": "[1.14.1, )",
+ "resolved": "1.14.1",
+ "contentHash": "mOOmFYwad3MIOL14VCjj02LljyF1GNw1wP0YVlxtcPvqdxjGGMNdNJJxHptlry3MOd8b40Flm8RPOM8JOlN2sQ=="
+ },
+ "Speckle.AutoCAD.API": {
+ "type": "Direct",
+ "requested": "[2024.0.0, )",
+ "resolved": "2024.0.0",
+ "contentHash": "pZZ5uI+NXhZaQnsqRkgp/rywqBAjDObDJ9XNFGJvemT5k2OthDpHzlK/mKxz8QDCYie7uImQ8dv3uWj2QUFDPw=="
+ },
+ "Speckle.Civil3D.API": {
+ "type": "Direct",
+ "requested": "[2024.0.0, )",
+ "resolved": "2024.0.0",
+ "contentHash": "9Q7M1k0DotN8w7MkiScQezErRdnZ4dAkxBMcPNhHSWoth/lSaT6UPV1aYEdl90RhehJWG4l3O7U2e3OXvVSFdw==",
+ "dependencies": {
+ "Speckle.AutoCAD.API": "2024.0.0"
+ }
+ },
+ "Speckle.InterfaceGenerator": {
+ "type": "Direct",
+ "requested": "[0.9.5, )",
+ "resolved": "0.9.5",
+ "contentHash": "oU/L7pN1R7q8KkbrpQ3WJnHirPHqn+9DEA7asOcUiggV5dzVg1A/VYs7GOSusD24njxXh03tE3a2oTLOjt3cVg=="
+ },
+ "Autofac": {
+ "type": "Transitive",
+ "resolved": "5.2.0",
+ "contentHash": "V8dBH0dsv75uDzl7Sw+HkhKDPUw2eXnlMjcSVMH+tLo2s67MpTKGyDj1pDcpR+IF2u4YRs0s3/x7R88YJzIWvg==",
+ "dependencies": {
+ "Microsoft.Bcl.AsyncInterfaces": "1.1.0"
+ }
+ },
+ "GraphQL.Client": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "8yPNBbuVBpTptivyAlak4GZvbwbUcjeQTL4vN1HKHRuOykZ4r7l5fcLS6vpyPyLn0x8FsL31xbOIKyxbmR9rbA==",
+ "dependencies": {
+ "GraphQL.Client.Abstractions": "6.0.0",
+ "GraphQL.Client.Abstractions.Websocket": "6.0.0",
+ "System.Net.WebSockets.Client.Managed": "1.0.22",
+ "System.Reactive": "5.0.0"
+ }
+ },
+ "GraphQL.Client.Abstractions": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "h7uzWFORHZ+CCjwr/ThAyXMr0DPpzEANDa4Uo54wqCQ+j7qUKwqYTgOrb1W40sqbvNaZm9v/X7It31SUw0maHA==",
+ "dependencies": {
+ "GraphQL.Primitives": "6.0.0"
+ }
+ },
+ "GraphQL.Client.Abstractions.Websocket": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "Nr9bPf8gIOvLuXpqEpqr9z9jslYFJOvd0feHth3/kPqeR3uMbjF5pjiwh4jxyMcxHdr8Pb6QiXkV3hsSyt0v7A==",
+ "dependencies": {
+ "GraphQL.Client.Abstractions": "6.0.0"
+ }
+ },
+ "GraphQL.Primitives": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "yg72rrYDapfsIUrul7aF6wwNnTJBOFvuA9VdDTQpPa8AlAriHbufeXYLBcodKjfUdkCnaiggX1U/nEP08Zb5GA=="
+ },
+ "Microsoft.Bcl.AsyncInterfaces": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "3aeMZ1N0lJoSyzqiP03hqemtb1BijhsJADdobn/4nsMJ8V1H+CrpuduUe4hlRdx+ikBQju1VGjMD1GJ3Sk05Eg==",
+ "dependencies": {
+ "System.Threading.Tasks.Extensions": "4.5.4"
+ }
+ },
+ "Microsoft.CSharp": {
+ "type": "Transitive",
+ "resolved": "4.7.0",
+ "contentHash": "pTj+D3uJWyN3My70i2Hqo+OXixq3Os2D1nJ2x92FFo6sk8fYS1m1WLNTs0Dc1uPaViH0YvEEwvzddQ7y4rhXmA=="
+ },
+ "Microsoft.Data.Sqlite": {
+ "type": "Transitive",
+ "resolved": "7.0.5",
+ "contentHash": "KGxbPeWsQMnmQy43DSBxAFtHz3l2JX8EWBSGUCvT3CuZ8KsuzbkqMIJMDOxWtG8eZSoCDI04aiVQjWuuV8HmSw==",
+ "dependencies": {
+ "Microsoft.Data.Sqlite.Core": "7.0.5",
+ "SQLitePCLRaw.bundle_e_sqlite3": "2.1.4"
+ }
+ },
+ "Microsoft.Data.Sqlite.Core": {
+ "type": "Transitive",
+ "resolved": "7.0.5",
+ "contentHash": "FTerRmQPqHrCrnoUzhBu+E+1DNGwyrAMLqHkAqOOOu5pGfyMOj8qQUBxI/gDtWtG11p49UxSfWmBzRNlwZqfUg==",
+ "dependencies": {
+ "SQLitePCLRaw.core": "2.1.4"
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "elNeOmkeX3eDVG6pYVeV82p29hr+UKDaBhrZyWvWLw/EVZSYEkZlQdkp0V39k/Xehs2Qa0mvoCvkVj3eQxNQ1Q==",
+ "dependencies": {
+ "Microsoft.Bcl.AsyncInterfaces": "7.0.0",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
+ "System.Threading.Tasks.Extensions": "4.5.4"
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection.Abstractions": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "h3j/QfmFN4S0w4C2A6X7arXij/M/OVw3uQHSOFxnND4DyAzO1F9eMX7Eti7lU/OkSthEE0WzRsfT/Dmx86jzCw==",
+ "dependencies": {
+ "Microsoft.Bcl.AsyncInterfaces": "7.0.0",
+ "System.Threading.Tasks.Extensions": "4.5.4"
+ }
+ },
+ "Microsoft.Extensions.Logging": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "Nw2muoNrOG5U5qa2ZekXwudUn2BJcD41e65zwmDHb1fQegTX66UokLWZkJRpqSSHXDOWZ5V0iqhbxOEky91atA==",
+ "dependencies": {
+ "Microsoft.Bcl.AsyncInterfaces": "7.0.0",
+ "Microsoft.Extensions.DependencyInjection": "7.0.0",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Options": "7.0.0",
+ "System.Diagnostics.DiagnosticSource": "7.0.0",
+ "System.ValueTuple": "4.5.0"
+ }
+ },
+ "Microsoft.Extensions.Options": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "lP1yBnTTU42cKpMozuafbvNtQ7QcBjr/CcK3bYOGEMH55Fjt+iecXjT6chR7vbgCMqy3PG3aNQSZgo/EuY/9qQ==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Primitives": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.Primitives": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "um1KU5kxcRp3CNuI8o/GrZtD4AIOXDk+RLsytjZ9QPok3ttLUelLKpilVPuaFT3TFjOhSibUAso0odbOaCDj3Q==",
+ "dependencies": {
+ "System.Memory": "4.5.5",
+ "System.Runtime.CompilerServices.Unsafe": "6.0.0"
+ }
+ },
+ "Microsoft.Web.WebView2": {
+ "type": "Transitive",
+ "resolved": "1.0.1823.32",
+ "contentHash": "ppRcWBUNggFIqyJp7PfgS4Oe8/7yli/mHcTNDOaqo3ZzJWnv9AOr0WE9ceEP5SPs1M7CQ3QvdGMR7KNz0v09EA=="
+ },
+ "Polly": {
+ "type": "Transitive",
+ "resolved": "7.2.3",
+ "contentHash": "DeCY0OFbNdNxsjntr1gTXHJ5pKUwYzp04Er2LLeN3g6pWhffsGuKVfMBLe1lw7x76HrPkLxKEFxBlpRxS2nDEQ=="
+ },
+ "Polly.Contrib.WaitAndRetry": {
+ "type": "Transitive",
+ "resolved": "1.1.1",
+ "contentHash": "1MUQLiSo4KDkQe6nzQRhIU05lm9jlexX5BVsbuw0SL82ynZ+GzAHQxJVDPVBboxV37Po3SG077aX8DuSy8TkaA=="
+ },
+ "Polly.Extensions.Http": {
+ "type": "Transitive",
+ "resolved": "3.0.0",
+ "contentHash": "drrG+hB3pYFY7w1c3BD+lSGYvH2oIclH8GRSehgfyP5kjnFnHKQuuBhuHLv+PWyFuaTDyk/vfRpnxOzd11+J8g==",
+ "dependencies": {
+ "Polly": "7.1.0"
+ }
+ },
+ "Sentry": {
+ "type": "Transitive",
+ "resolved": "3.33.0",
+ "contentHash": "8vbD2o6IR2wrRrkSiRbnodWGWUOqIlwYtzpjvPNOb5raJdOf+zxMwfS8f6nx9bmrTTfDj7KrCB8C/5OuicAc8A==",
+ "dependencies": {
+ "System.Reflection.Metadata": "5.0.0",
+ "System.Runtime.InteropServices.RuntimeInformation": "4.3.0",
+ "System.Text.Json": "5.0.2"
+ }
+ },
+ "Sentry.Serilog": {
+ "type": "Transitive",
+ "resolved": "3.33.0",
+ "contentHash": "V8BU7QGWg2qLYfNPqtuTBhC1opysny5l+Ifp6J6PhOeAxU0FssR7nYfbJVetrnLIoh2rd3DlJ6hHYYQosQYcUQ==",
+ "dependencies": {
+ "Sentry": "3.33.0",
+ "Serilog": "2.7.1"
+ }
+ },
+ "Serilog": {
+ "type": "Transitive",
+ "resolved": "2.12.0",
+ "contentHash": "xaiJLIdu6rYMKfQMYUZgTy8YK7SMZjB4Yk50C/u//Z4OsvxkUfSPJy4nknfvwAC34yr13q7kcyh4grbwhSxyZg=="
+ },
+ "Serilog.Enrichers.ClientInfo": {
+ "type": "Transitive",
+ "resolved": "1.3.0",
+ "contentHash": "mTc7PM+wC9Hr7LWSwqt5mmnlAr7RJs+eTb3PGPRhwdOackk95MkhUZognuxXEdlW19HAFNmEBTSBY5DfLwM8jQ==",
+ "dependencies": {
+ "Serilog": "2.4.0"
+ }
+ },
+ "Serilog.Exceptions": {
+ "type": "Transitive",
+ "resolved": "8.4.0",
+ "contentHash": "nc/+hUw3lsdo0zCj0KMIybAu7perMx79vu72w0za9Nsi6mWyNkGXxYxakAjWB7nEmYL6zdmhEQRB4oJ2ALUeug==",
+ "dependencies": {
+ "Serilog": "2.8.0"
+ }
+ },
+ "Serilog.Extensions.Logging": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "9faU0zNQqU7I6soVhLUMYaGNpgWv6cKlKb2S5AnS8gXxzW/em5Ladm/6FMrWTnX41cdbdGPOWNAo6adi4WaJ6A==",
+ "dependencies": {
+ "Microsoft.Extensions.Logging": "7.0.0",
+ "Serilog": "2.12.0"
+ }
+ },
+ "Serilog.Formatting.Compact": {
+ "type": "Transitive",
+ "resolved": "1.1.0",
+ "contentHash": "pNroKVjo+rDqlxNG5PXkRLpfSCuDOBY0ri6jp9PLe505ljqwhwZz8ospy2vWhQlFu5GkIesh3FcDs4n7sWZODA==",
+ "dependencies": {
+ "Serilog": "2.8.0"
+ }
+ },
+ "Serilog.Sinks.Console": {
+ "type": "Transitive",
+ "resolved": "4.1.0",
+ "contentHash": "K6N5q+5fetjnJPvCmkWOpJ/V8IEIoMIB1s86OzBrbxwTyHxdx3pmz4H+8+O/Dc/ftUX12DM1aynx/dDowkwzqg==",
+ "dependencies": {
+ "Serilog": "2.10.0"
+ }
+ },
+ "Serilog.Sinks.File": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "uwV5hdhWPwUH1szhO8PJpFiahqXmzPzJT/sOijH/kFgUx+cyoDTMM8MHD0adw9+Iem6itoibbUXHYslzXsLEAg==",
+ "dependencies": {
+ "Serilog": "2.10.0"
+ }
+ },
+ "Serilog.Sinks.PeriodicBatching": {
+ "type": "Transitive",
+ "resolved": "3.1.0",
+ "contentHash": "NDWR7m3PalVlGEq3rzoktrXikjFMLmpwF0HI4sowo8YDdU+gqPlTHlDQiOGxHfB0sTfjPA9JjA7ctKG9zqjGkw==",
+ "dependencies": {
+ "Serilog": "2.0.0"
+ }
+ },
+ "Serilog.Sinks.Seq": {
+ "type": "Transitive",
+ "resolved": "5.2.2",
+ "contentHash": "1Csmo5ua7NKUe0yXUx+zsRefjAniPWcXFhUXxXG8pwo0iMiw2gjn9SOkgYnnxbgWqmlGv236w0N/dHc2v5XwMg==",
+ "dependencies": {
+ "Serilog": "2.12.0",
+ "Serilog.Formatting.Compact": "1.1.0",
+ "Serilog.Sinks.File": "5.0.0",
+ "Serilog.Sinks.PeriodicBatching": "3.1.0"
+ }
+ },
+ "SerilogTimings": {
+ "type": "Transitive",
+ "resolved": "3.0.1",
+ "contentHash": "Zs28eTgszAMwpIrbBnWHBI50yuxL50p/dmAUWmy75+axdZYK/Sjm5/5m1N/CisR8acJUhTVcjPZrsB1P5iv0Uw==",
+ "dependencies": {
+ "Serilog": "2.10.0"
+ }
+ },
+ "Speckle.Newtonsoft.Json": {
+ "type": "Transitive",
+ "resolved": "13.0.2",
+ "contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA=="
+ },
+ "SQLitePCLRaw.bundle_e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.4",
+ "contentHash": "EWI1olKDjFEBMJu0+3wuxwziIAdWDVMYLhuZ3Qs84rrz+DHwD00RzWPZCa+bLnHCf3oJwuFZIRsHT5p236QXww==",
+ "dependencies": {
+ "SQLitePCLRaw.lib.e_sqlite3": "2.1.4",
+ "SQLitePCLRaw.provider.dynamic_cdecl": "2.1.4"
+ }
+ },
+ "SQLitePCLRaw.core": {
+ "type": "Transitive",
+ "resolved": "2.1.4",
+ "contentHash": "inBjvSHo9UDKneGNzfUfDjK08JzlcIhn1+SP5Y3m6cgXpCxXKCJDy6Mka7LpgSV+UZmKSnC8rTwB0SQ0xKu5pA==",
+ "dependencies": {
+ "System.Memory": "4.5.3"
+ }
+ },
+ "SQLitePCLRaw.lib.e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.4",
+ "contentHash": "2C9Q9eX7CPLveJA0rIhf9RXAvu+7nWZu1A2MdG6SD/NOu26TakGgL1nsbc0JAspGijFOo3HoN79xrx8a368fBg=="
+ },
+ "SQLitePCLRaw.provider.dynamic_cdecl": {
+ "type": "Transitive",
+ "resolved": "2.1.4",
+ "contentHash": "ZsaKKhgYF9B1fvcnOGKl3EycNAwd9CRWX7v0rEfuPWhQQ5Jjpvf2VEHahiLIGHio3hxi3EIKFJw9KvyowWOUAw==",
+ "dependencies": {
+ "SQLitePCLRaw.core": "2.1.4"
+ }
+ },
+ "System.Buffers": {
+ "type": "Transitive",
+ "resolved": "4.5.1",
+ "contentHash": "Rw7ijyl1qqRS0YQD/WycNst8hUUMgrMH4FCn1nNm27M4VxchZ1js3fVjQaANHO5f3sN4isvP4a+Met9Y4YomAg=="
+ },
+ "System.Collections.Immutable": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "FXkLXiK0sVVewcso0imKQoOxjoPAj42R8HtjjbSjVPAzwDfzoyoznWxgA3c38LDbN9SJux1xXoXYAhz98j7r2g==",
+ "dependencies": {
+ "System.Memory": "4.5.4"
+ }
+ },
+ "System.Diagnostics.DiagnosticSource": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "9W0ewWDuAyDqS2PigdTxk6jDKonfgscY/hP8hm7VpxYhNHZHKvZTdRckberlFk3VnCmr3xBUyMBut12Q+T2aOw==",
+ "dependencies": {
+ "System.Memory": "4.5.5",
+ "System.Runtime.CompilerServices.Unsafe": "6.0.0"
+ }
+ },
+ "System.DoubleNumerics": {
+ "type": "Transitive",
+ "resolved": "3.1.3",
+ "contentHash": "KRKEM/L3KBodjA9VOg3EifFVWUY6EOqaMB05UvPEDm7Zeby/kZW+4kdWUEPzW6xtkwf46p661L9NrbeeQhtLzw==",
+ "dependencies": {
+ "NETStandard.Library": "1.6.1"
+ }
+ },
+ "System.Memory": {
+ "type": "Transitive",
+ "resolved": "4.5.5",
+ "contentHash": "XIWiDvKPXaTveaB7HVganDlOCRoj03l+jrwNvcge/t8vhGYKvqV+dMv6G4SAX2NoNmN0wZfVPTAlFwZcZvVOUw==",
+ "dependencies": {
+ "System.Buffers": "4.5.1",
+ "System.Numerics.Vectors": "4.5.0",
+ "System.Runtime.CompilerServices.Unsafe": "4.5.3"
+ }
+ },
+ "System.Net.WebSockets.Client.Managed": {
+ "type": "Transitive",
+ "resolved": "1.0.22",
+ "contentHash": "WqEOxPlXjuZrIjUtXNE9NxEfU/n5E35iV2PtoZdJSUC4tlrqwHnTee+wvMIM4OUaJWmwrymeqcgYrE0IkGAgLA==",
+ "dependencies": {
+ "System.Buffers": "4.4.0",
+ "System.Numerics.Vectors": "4.4.0"
+ }
+ },
+ "System.Numerics.Vectors": {
+ "type": "Transitive",
+ "resolved": "4.5.0",
+ "contentHash": "QQTlPTl06J/iiDbJCiepZ4H//BVraReU4O4EoRw1U02H5TLUIT7xn3GnDp9AXPSlJUDyFs4uWjWafNX6WrAojQ=="
+ },
+ "System.Reactive": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ==",
+ "dependencies": {
+ "System.Threading.Tasks.Extensions": "4.5.4"
+ }
+ },
+ "System.Reflection.Metadata": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "5NecZgXktdGg34rh1OenY1rFNDCI8xSjFr+Z4OU4cU06AQHUdRnIIEeWENu3Wl4YowbzkymAIMvi3WyK9U53pQ==",
+ "dependencies": {
+ "System.Collections.Immutable": "5.0.0"
+ }
+ },
+ "System.Runtime.CompilerServices.Unsafe": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg=="
+ },
+ "System.Runtime.InteropServices.RuntimeInformation": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "cbz4YJMqRDR7oLeMRbdYv7mYzc++17lNhScCX0goO2XpGWdvAt60CGN+FHdePUEHCe/Jy9jUlvNAiNdM+7jsOw=="
+ },
+ "System.Text.Encodings.Web": {
+ "type": "Transitive",
+ "resolved": "5.0.1",
+ "contentHash": "KmJ+CJXizDofbq6mpqDoRRLcxgOd2z9X3XoFNULSbvbqVRZkFX3istvr+MUjL6Zw1RT+RNdoI4GYidIINtgvqQ==",
+ "dependencies": {
+ "System.Buffers": "4.5.1",
+ "System.Memory": "4.5.4"
+ }
+ },
+ "System.Text.Json": {
+ "type": "Transitive",
+ "resolved": "5.0.2",
+ "contentHash": "I47dVIGiV6SfAyppphxqupertT/5oZkYLDCX6vC3HpOI4ZLjyoKAreUoem2ie6G0RbRuFrlqz/PcTQjfb2DOfQ==",
+ "dependencies": {
+ "Microsoft.Bcl.AsyncInterfaces": "5.0.0",
+ "System.Buffers": "4.5.1",
+ "System.Memory": "4.5.4",
+ "System.Numerics.Vectors": "4.5.0",
+ "System.Runtime.CompilerServices.Unsafe": "5.0.0",
+ "System.Text.Encodings.Web": "5.0.1",
+ "System.Threading.Tasks.Extensions": "4.5.4",
+ "System.ValueTuple": "4.5.0"
+ }
+ },
+ "System.Threading.Tasks.Dataflow": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "+tyDCU3/B1lDdOOAJywHQoFwyXIUghIaP2BxG79uvhfTnO+D9qIgjVlL/JV2NTliYbMHpd6eKDmHp2VHpij7MA=="
+ },
+ "System.Threading.Tasks.Extensions": {
+ "type": "Transitive",
+ "resolved": "4.5.4",
+ "contentHash": "zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg==",
+ "dependencies": {
+ "System.Runtime.CompilerServices.Unsafe": "4.5.3"
+ }
+ },
+ "System.ValueTuple": {
+ "type": "Transitive",
+ "resolved": "4.5.0",
+ "contentHash": "okurQJO6NRE/apDIP23ajJ0hpiNmJ+f0BwOlB/cSqTLQlw5upkf+5+96+iG2Jw40G1fCVCyPz/FhIABUjMR+RQ=="
+ },
+ "speckle.autofac": {
+ "type": "Project",
+ "dependencies": {
+ "Microsoft.Extensions.Logging.Abstractions": "[7.0.0, )",
+ "Speckle.Core": "[2.0.999-local, )"
+ }
+ },
+ "speckle.connectors.dui": {
+ "type": "Project",
+ "dependencies": {
+ "Microsoft.Extensions.Logging.Abstractions": "[7.0.0, )",
+ "Speckle.Autofac": "[2.0.999-local, )",
+ "Speckle.Connectors.Utils": "[2.0.999-local, )",
+ "Speckle.Core": "[2.0.999-local, )",
+ "System.Threading.Tasks.Dataflow": "[6.0.0, )"
+ }
+ },
+ "speckle.connectors.dui.webview": {
+ "type": "Project",
+ "dependencies": {
+ "Microsoft.Web.WebView2": "[1.0.1823.32, )",
+ "Speckle.Connectors.DUI": "[2.0.999-local, )"
+ }
+ },
+ "speckle.connectors.utils": {
+ "type": "Project",
+ "dependencies": {
+ "Serilog.Extensions.Logging": "[7.0.0, )",
+ "Speckle.Autofac": "[2.0.999-local, )",
+ "Speckle.Core": "[2.0.999-local, )"
+ }
+ },
+ "speckle.converters.autocad2024": {
+ "type": "Project",
+ "dependencies": {
+ "Speckle.AutoCAD.API": "[2024.0.0, )",
+ "Speckle.Converters.Common": "[2.0.999-local, )"
+ }
+ },
+ "speckle.converters.autocad2024.dependencyinjection": {
+ "type": "Project",
+ "dependencies": {
+ "Autofac": "[5.2.0, )",
+ "Speckle.Converters.Autocad2024": "[2.0.999-local, )",
+ "Speckle.Converters.Common.DependencyInjection": "[2.0.999-local, )"
+ }
+ },
+ "speckle.converters.common": {
+ "type": "Project",
+ "dependencies": {
+ "Speckle.Autofac": "[2.0.999-local, )",
+ "Speckle.Objects": "[2.0.999-local, )"
+ }
+ },
+ "speckle.converters.common.dependencyinjection": {
+ "type": "Project",
+ "dependencies": {
+ "Speckle.Autofac": "[2.0.999-local, )",
+ "Speckle.Converters.Common": "[2.0.999-local, )"
+ }
+ },
+ "Speckle.Core": {
+ "type": "Project",
+ "dependencies": {
+ "GraphQL.Client": "[6.0.0, )",
+ "Microsoft.CSharp": "[4.7.0, )",
+ "Microsoft.Data.Sqlite": "[7.0.5, )",
+ "Polly": "[7.2.3, )",
+ "Polly.Contrib.WaitAndRetry": "[1.1.1, )",
+ "Polly.Extensions.Http": "[3.0.0, )",
+ "Sentry": "[3.33.0, )",
+ "Sentry.Serilog": "[3.33.0, )",
+ "Serilog": "[2.12.0, )",
+ "Serilog.Enrichers.ClientInfo": "[1.3.0, )",
+ "Serilog.Exceptions": "[8.4.0, )",
+ "Serilog.Sinks.Console": "[4.1.0, )",
+ "Serilog.Sinks.Seq": "[5.2.2, )",
+ "SerilogTimings": "[3.0.1, )",
+ "Speckle.Newtonsoft.Json": "[13.0.2, )",
+ "System.DoubleNumerics": "[3.1.3, )"
+ }
+ },
+ "Speckle.Objects": {
+ "type": "Project",
+ "dependencies": {
+ "Speckle.Core": "[2.0.999-local, )"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/DUI3-DX/Connectors/Revit/Speckle.Connectors.Revit2023/packages.lock.json b/DUI3-DX/Connectors/Revit/Speckle.Connectors.Revit2023/packages.lock.json
new file mode 100644
index 0000000000..27da03b1ba
--- /dev/null
+++ b/DUI3-DX/Connectors/Revit/Speckle.Connectors.Revit2023/packages.lock.json
@@ -0,0 +1,572 @@
+{
+ "version": 1,
+ "dependencies": {
+ ".NETFramework,Version=v4.8": {
+ "CefSharp.Wpf": {
+ "type": "Direct",
+ "requested": "[92.0.260, )",
+ "resolved": "92.0.260",
+ "contentHash": "b0TW/HpHsvz2x3M1IQa/8fbCIRKShOgpmSqj5gKiibXY0v2cHgnWssfEX+3Q3UCpizkBJBQ+0fVp+fN8JCPcNQ==",
+ "dependencies": {
+ "CefSharp.Common": "[92.0.260]"
+ }
+ },
+ "PolySharp": {
+ "type": "Direct",
+ "requested": "[1.14.1, )",
+ "resolved": "1.14.1",
+ "contentHash": "mOOmFYwad3MIOL14VCjj02LljyF1GNw1wP0YVlxtcPvqdxjGGMNdNJJxHptlry3MOd8b40Flm8RPOM8JOlN2sQ=="
+ },
+ "Revit.Async": {
+ "type": "Direct",
+ "requested": "[2.0.1, )",
+ "resolved": "2.0.1",
+ "contentHash": "B7D5zXznqgxMryBYdGgWob20ALfGSP7hJ6+bh9JdLM/LRkYN5dNf0AaI0+7VID9X7e8MA0koAxv9fIijJnmSnw=="
+ },
+ "Speckle.InterfaceGenerator": {
+ "type": "Direct",
+ "requested": "[0.9.5, )",
+ "resolved": "0.9.5",
+ "contentHash": "oU/L7pN1R7q8KkbrpQ3WJnHirPHqn+9DEA7asOcUiggV5dzVg1A/VYs7GOSusD24njxXh03tE3a2oTLOjt3cVg=="
+ },
+ "cef.redist.x64": {
+ "type": "Transitive",
+ "resolved": "92.0.26",
+ "contentHash": "wwwSGVgO9sdlj5TRnjVdzuCkNuYpTOXT90Z+dasnqGrnihrxKU+1UvulxxJa83O2k+l3kaNlAU9uBhiwGX7YyQ=="
+ },
+ "cef.redist.x86": {
+ "type": "Transitive",
+ "resolved": "92.0.26",
+ "contentHash": "VT93sU6hH7LoUILjfaAxWbLc+m+b9QafeeRkuulnj3twJnb0PQ7nXd8PMUeOmYg96NzZi14G7qBYSY0dkxqztg=="
+ },
+ "CefSharp.Common": {
+ "type": "Transitive",
+ "resolved": "92.0.260",
+ "contentHash": "0KS5z+kqg+mmB1X2KM17w3S7KQI5UTuJv+UOIQauJPvFYfRGWwTqmBbBxL3kCklGx8WSkaeBjPdSFxdzzXCSew==",
+ "dependencies": {
+ "cef.redist.x64": "[92.0.26]",
+ "cef.redist.x86": "[92.0.26]"
+ }
+ },
+ "GraphQL.Client": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "8yPNBbuVBpTptivyAlak4GZvbwbUcjeQTL4vN1HKHRuOykZ4r7l5fcLS6vpyPyLn0x8FsL31xbOIKyxbmR9rbA==",
+ "dependencies": {
+ "GraphQL.Client.Abstractions": "6.0.0",
+ "GraphQL.Client.Abstractions.Websocket": "6.0.0",
+ "System.Net.WebSockets.Client.Managed": "1.0.22",
+ "System.Reactive": "5.0.0"
+ }
+ },
+ "GraphQL.Client.Abstractions": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "h7uzWFORHZ+CCjwr/ThAyXMr0DPpzEANDa4Uo54wqCQ+j7qUKwqYTgOrb1W40sqbvNaZm9v/X7It31SUw0maHA==",
+ "dependencies": {
+ "GraphQL.Primitives": "6.0.0"
+ }
+ },
+ "GraphQL.Client.Abstractions.Websocket": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "Nr9bPf8gIOvLuXpqEpqr9z9jslYFJOvd0feHth3/kPqeR3uMbjF5pjiwh4jxyMcxHdr8Pb6QiXkV3hsSyt0v7A==",
+ "dependencies": {
+ "GraphQL.Client.Abstractions": "6.0.0"
+ }
+ },
+ "GraphQL.Primitives": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "yg72rrYDapfsIUrul7aF6wwNnTJBOFvuA9VdDTQpPa8AlAriHbufeXYLBcodKjfUdkCnaiggX1U/nEP08Zb5GA=="
+ },
+ "Mapster": {
+ "type": "Transitive",
+ "resolved": "7.3.0",
+ "contentHash": "NrCUX/rJa5PTyo6iW4AL5dZLU9PDNlYnrJOVjgdpo5OQM9EtWH2CMHnC5sSuJWC0d0b0SnmeRrIviEem6WxtuQ==",
+ "dependencies": {
+ "Mapster.Core": "1.2.0",
+ "Microsoft.CSharp": "4.3.0",
+ "System.Reflection.Emit": "4.3.0"
+ }
+ },
+ "Mapster.Core": {
+ "type": "Transitive",
+ "resolved": "1.2.0",
+ "contentHash": "TNdqZk2zAuBYfJF88D/3clQTOyOdqr1crU81yZQtlGa+e7FYWhJdK/buBWT+TpM3qQko9UzmzfOT4iq3JCs/ZA=="
+ },
+ "Microsoft.Bcl.AsyncInterfaces": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "3aeMZ1N0lJoSyzqiP03hqemtb1BijhsJADdobn/4nsMJ8V1H+CrpuduUe4hlRdx+ikBQju1VGjMD1GJ3Sk05Eg==",
+ "dependencies": {
+ "System.Threading.Tasks.Extensions": "4.5.4"
+ }
+ },
+ "Microsoft.CSharp": {
+ "type": "Transitive",
+ "resolved": "4.7.0",
+ "contentHash": "pTj+D3uJWyN3My70i2Hqo+OXixq3Os2D1nJ2x92FFo6sk8fYS1m1WLNTs0Dc1uPaViH0YvEEwvzddQ7y4rhXmA=="
+ },
+ "Microsoft.Data.Sqlite": {
+ "type": "Transitive",
+ "resolved": "7.0.5",
+ "contentHash": "KGxbPeWsQMnmQy43DSBxAFtHz3l2JX8EWBSGUCvT3CuZ8KsuzbkqMIJMDOxWtG8eZSoCDI04aiVQjWuuV8HmSw==",
+ "dependencies": {
+ "Microsoft.Data.Sqlite.Core": "7.0.5",
+ "SQLitePCLRaw.bundle_e_sqlite3": "2.1.4"
+ }
+ },
+ "Microsoft.Data.Sqlite.Core": {
+ "type": "Transitive",
+ "resolved": "7.0.5",
+ "contentHash": "FTerRmQPqHrCrnoUzhBu+E+1DNGwyrAMLqHkAqOOOu5pGfyMOj8qQUBxI/gDtWtG11p49UxSfWmBzRNlwZqfUg==",
+ "dependencies": {
+ "SQLitePCLRaw.core": "2.1.4"
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "elNeOmkeX3eDVG6pYVeV82p29hr+UKDaBhrZyWvWLw/EVZSYEkZlQdkp0V39k/Xehs2Qa0mvoCvkVj3eQxNQ1Q==",
+ "dependencies": {
+ "Microsoft.Bcl.AsyncInterfaces": "7.0.0",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
+ "System.Threading.Tasks.Extensions": "4.5.4"
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection.Abstractions": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "h3j/QfmFN4S0w4C2A6X7arXij/M/OVw3uQHSOFxnND4DyAzO1F9eMX7Eti7lU/OkSthEE0WzRsfT/Dmx86jzCw==",
+ "dependencies": {
+ "Microsoft.Bcl.AsyncInterfaces": "7.0.0",
+ "System.Threading.Tasks.Extensions": "4.5.4"
+ }
+ },
+ "Microsoft.Extensions.Logging": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "Nw2muoNrOG5U5qa2ZekXwudUn2BJcD41e65zwmDHb1fQegTX66UokLWZkJRpqSSHXDOWZ5V0iqhbxOEky91atA==",
+ "dependencies": {
+ "Microsoft.Bcl.AsyncInterfaces": "7.0.0",
+ "Microsoft.Extensions.DependencyInjection": "7.0.0",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Options": "7.0.0",
+ "System.Diagnostics.DiagnosticSource": "7.0.0",
+ "System.ValueTuple": "4.5.0"
+ }
+ },
+ "Microsoft.Extensions.Logging.Abstractions": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "kmn78+LPVMOWeITUjIlfxUPDsI0R6G0RkeAMBmQxAJ7vBJn4q2dTva7pWi65ceN5vPGjJ9q/Uae2WKgvfktJAw==",
+ "dependencies": {
+ "System.Buffers": "4.5.1",
+ "System.Memory": "4.5.5"
+ }
+ },
+ "Microsoft.Extensions.Options": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "lP1yBnTTU42cKpMozuafbvNtQ7QcBjr/CcK3bYOGEMH55Fjt+iecXjT6chR7vbgCMqy3PG3aNQSZgo/EuY/9qQ==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Primitives": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.Primitives": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "um1KU5kxcRp3CNuI8o/GrZtD4AIOXDk+RLsytjZ9QPok3ttLUelLKpilVPuaFT3TFjOhSibUAso0odbOaCDj3Q==",
+ "dependencies": {
+ "System.Memory": "4.5.5",
+ "System.Runtime.CompilerServices.Unsafe": "6.0.0"
+ }
+ },
+ "Polly": {
+ "type": "Transitive",
+ "resolved": "7.2.3",
+ "contentHash": "DeCY0OFbNdNxsjntr1gTXHJ5pKUwYzp04Er2LLeN3g6pWhffsGuKVfMBLe1lw7x76HrPkLxKEFxBlpRxS2nDEQ=="
+ },
+ "Polly.Contrib.WaitAndRetry": {
+ "type": "Transitive",
+ "resolved": "1.1.1",
+ "contentHash": "1MUQLiSo4KDkQe6nzQRhIU05lm9jlexX5BVsbuw0SL82ynZ+GzAHQxJVDPVBboxV37Po3SG077aX8DuSy8TkaA=="
+ },
+ "Polly.Extensions.Http": {
+ "type": "Transitive",
+ "resolved": "3.0.0",
+ "contentHash": "drrG+hB3pYFY7w1c3BD+lSGYvH2oIclH8GRSehgfyP5kjnFnHKQuuBhuHLv+PWyFuaTDyk/vfRpnxOzd11+J8g==",
+ "dependencies": {
+ "Polly": "7.1.0"
+ }
+ },
+ "Sentry": {
+ "type": "Transitive",
+ "resolved": "3.33.0",
+ "contentHash": "8vbD2o6IR2wrRrkSiRbnodWGWUOqIlwYtzpjvPNOb5raJdOf+zxMwfS8f6nx9bmrTTfDj7KrCB8C/5OuicAc8A==",
+ "dependencies": {
+ "System.Reflection.Metadata": "5.0.0",
+ "System.Runtime.InteropServices.RuntimeInformation": "4.3.0",
+ "System.Text.Json": "5.0.2"
+ }
+ },
+ "Sentry.Serilog": {
+ "type": "Transitive",
+ "resolved": "3.33.0",
+ "contentHash": "V8BU7QGWg2qLYfNPqtuTBhC1opysny5l+Ifp6J6PhOeAxU0FssR7nYfbJVetrnLIoh2rd3DlJ6hHYYQosQYcUQ==",
+ "dependencies": {
+ "Sentry": "3.33.0",
+ "Serilog": "2.7.1"
+ }
+ },
+ "Serilog": {
+ "type": "Transitive",
+ "resolved": "2.12.0",
+ "contentHash": "xaiJLIdu6rYMKfQMYUZgTy8YK7SMZjB4Yk50C/u//Z4OsvxkUfSPJy4nknfvwAC34yr13q7kcyh4grbwhSxyZg=="
+ },
+ "Serilog.Enrichers.ClientInfo": {
+ "type": "Transitive",
+ "resolved": "1.3.0",
+ "contentHash": "mTc7PM+wC9Hr7LWSwqt5mmnlAr7RJs+eTb3PGPRhwdOackk95MkhUZognuxXEdlW19HAFNmEBTSBY5DfLwM8jQ==",
+ "dependencies": {
+ "Serilog": "2.4.0"
+ }
+ },
+ "Serilog.Exceptions": {
+ "type": "Transitive",
+ "resolved": "8.4.0",
+ "contentHash": "nc/+hUw3lsdo0zCj0KMIybAu7perMx79vu72w0za9Nsi6mWyNkGXxYxakAjWB7nEmYL6zdmhEQRB4oJ2ALUeug==",
+ "dependencies": {
+ "Serilog": "2.8.0"
+ }
+ },
+ "Serilog.Extensions.Logging": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "9faU0zNQqU7I6soVhLUMYaGNpgWv6cKlKb2S5AnS8gXxzW/em5Ladm/6FMrWTnX41cdbdGPOWNAo6adi4WaJ6A==",
+ "dependencies": {
+ "Microsoft.Extensions.Logging": "7.0.0",
+ "Serilog": "2.12.0"
+ }
+ },
+ "Serilog.Formatting.Compact": {
+ "type": "Transitive",
+ "resolved": "1.1.0",
+ "contentHash": "pNroKVjo+rDqlxNG5PXkRLpfSCuDOBY0ri6jp9PLe505ljqwhwZz8ospy2vWhQlFu5GkIesh3FcDs4n7sWZODA==",
+ "dependencies": {
+ "Serilog": "2.8.0"
+ }
+ },
+ "Serilog.Sinks.Console": {
+ "type": "Transitive",
+ "resolved": "4.1.0",
+ "contentHash": "K6N5q+5fetjnJPvCmkWOpJ/V8IEIoMIB1s86OzBrbxwTyHxdx3pmz4H+8+O/Dc/ftUX12DM1aynx/dDowkwzqg==",
+ "dependencies": {
+ "Serilog": "2.10.0"
+ }
+ },
+ "Serilog.Sinks.File": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "uwV5hdhWPwUH1szhO8PJpFiahqXmzPzJT/sOijH/kFgUx+cyoDTMM8MHD0adw9+Iem6itoibbUXHYslzXsLEAg==",
+ "dependencies": {
+ "Serilog": "2.10.0"
+ }
+ },
+ "Serilog.Sinks.PeriodicBatching": {
+ "type": "Transitive",
+ "resolved": "3.1.0",
+ "contentHash": "NDWR7m3PalVlGEq3rzoktrXikjFMLmpwF0HI4sowo8YDdU+gqPlTHlDQiOGxHfB0sTfjPA9JjA7ctKG9zqjGkw==",
+ "dependencies": {
+ "Serilog": "2.0.0"
+ }
+ },
+ "Serilog.Sinks.Seq": {
+ "type": "Transitive",
+ "resolved": "5.2.2",
+ "contentHash": "1Csmo5ua7NKUe0yXUx+zsRefjAniPWcXFhUXxXG8pwo0iMiw2gjn9SOkgYnnxbgWqmlGv236w0N/dHc2v5XwMg==",
+ "dependencies": {
+ "Serilog": "2.12.0",
+ "Serilog.Formatting.Compact": "1.1.0",
+ "Serilog.Sinks.File": "5.0.0",
+ "Serilog.Sinks.PeriodicBatching": "3.1.0"
+ }
+ },
+ "SerilogTimings": {
+ "type": "Transitive",
+ "resolved": "3.0.1",
+ "contentHash": "Zs28eTgszAMwpIrbBnWHBI50yuxL50p/dmAUWmy75+axdZYK/Sjm5/5m1N/CisR8acJUhTVcjPZrsB1P5iv0Uw==",
+ "dependencies": {
+ "Serilog": "2.10.0"
+ }
+ },
+ "Speckle.Newtonsoft.Json": {
+ "type": "Transitive",
+ "resolved": "13.0.2",
+ "contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA=="
+ },
+ "Speckle.Revit.API": {
+ "type": "Transitive",
+ "resolved": "2023.0.0",
+ "contentHash": "tq40eD7psgTbV+epNouYyqfo6+hEi7FmXZqcxEOsAV7zfYyWhL6Rt3vmojkWGNuerGbH6oRI6KIIxrnlCNb8Hw=="
+ },
+ "Speckle.Revit2023.Api": {
+ "type": "Transitive",
+ "resolved": "0.1.1-preview.0.28",
+ "contentHash": "ejwYS/HI8yy0rJE4vgTr5aj8Fkg/E9JnMGjwyVS2fLtI4f7+FmwAY6inTUT2p/RAoRc2nQw+TerDpUtOhddzag==",
+ "dependencies": {
+ "Mapster": "7.3.0",
+ "Speckle.Revit.API": "2023.0.0",
+ "Speckle.Revit2023.Interfaces": "0.1.1-preview.0.28"
+ }
+ },
+ "Speckle.Revit2023.Interfaces": {
+ "type": "Transitive",
+ "resolved": "0.1.1-preview.0.28",
+ "contentHash": "7szXg/vRvP3Wdrn2ZGriVOfsw+bddlpVorBkCIhSHHs5qVTTG8IAIrI1l9dO0/aullaTMF+Xgxm9x3w1aXPiuA=="
+ },
+ "SQLitePCLRaw.bundle_e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.4",
+ "contentHash": "EWI1olKDjFEBMJu0+3wuxwziIAdWDVMYLhuZ3Qs84rrz+DHwD00RzWPZCa+bLnHCf3oJwuFZIRsHT5p236QXww==",
+ "dependencies": {
+ "SQLitePCLRaw.lib.e_sqlite3": "2.1.4",
+ "SQLitePCLRaw.provider.dynamic_cdecl": "2.1.4"
+ }
+ },
+ "SQLitePCLRaw.core": {
+ "type": "Transitive",
+ "resolved": "2.1.4",
+ "contentHash": "inBjvSHo9UDKneGNzfUfDjK08JzlcIhn1+SP5Y3m6cgXpCxXKCJDy6Mka7LpgSV+UZmKSnC8rTwB0SQ0xKu5pA==",
+ "dependencies": {
+ "System.Memory": "4.5.3"
+ }
+ },
+ "SQLitePCLRaw.lib.e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.4",
+ "contentHash": "2C9Q9eX7CPLveJA0rIhf9RXAvu+7nWZu1A2MdG6SD/NOu26TakGgL1nsbc0JAspGijFOo3HoN79xrx8a368fBg=="
+ },
+ "SQLitePCLRaw.provider.dynamic_cdecl": {
+ "type": "Transitive",
+ "resolved": "2.1.4",
+ "contentHash": "ZsaKKhgYF9B1fvcnOGKl3EycNAwd9CRWX7v0rEfuPWhQQ5Jjpvf2VEHahiLIGHio3hxi3EIKFJw9KvyowWOUAw==",
+ "dependencies": {
+ "SQLitePCLRaw.core": "2.1.4"
+ }
+ },
+ "System.Buffers": {
+ "type": "Transitive",
+ "resolved": "4.5.1",
+ "contentHash": "Rw7ijyl1qqRS0YQD/WycNst8hUUMgrMH4FCn1nNm27M4VxchZ1js3fVjQaANHO5f3sN4isvP4a+Met9Y4YomAg=="
+ },
+ "System.Collections.Immutable": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "FXkLXiK0sVVewcso0imKQoOxjoPAj42R8HtjjbSjVPAzwDfzoyoznWxgA3c38LDbN9SJux1xXoXYAhz98j7r2g==",
+ "dependencies": {
+ "System.Memory": "4.5.4"
+ }
+ },
+ "System.Diagnostics.DiagnosticSource": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "9W0ewWDuAyDqS2PigdTxk6jDKonfgscY/hP8hm7VpxYhNHZHKvZTdRckberlFk3VnCmr3xBUyMBut12Q+T2aOw==",
+ "dependencies": {
+ "System.Memory": "4.5.5",
+ "System.Runtime.CompilerServices.Unsafe": "6.0.0"
+ }
+ },
+ "System.DoubleNumerics": {
+ "type": "Transitive",
+ "resolved": "3.1.3",
+ "contentHash": "KRKEM/L3KBodjA9VOg3EifFVWUY6EOqaMB05UvPEDm7Zeby/kZW+4kdWUEPzW6xtkwf46p661L9NrbeeQhtLzw==",
+ "dependencies": {
+ "NETStandard.Library": "1.6.1"
+ }
+ },
+ "System.Memory": {
+ "type": "Transitive",
+ "resolved": "4.5.5",
+ "contentHash": "XIWiDvKPXaTveaB7HVganDlOCRoj03l+jrwNvcge/t8vhGYKvqV+dMv6G4SAX2NoNmN0wZfVPTAlFwZcZvVOUw==",
+ "dependencies": {
+ "System.Buffers": "4.5.1",
+ "System.Numerics.Vectors": "4.5.0",
+ "System.Runtime.CompilerServices.Unsafe": "4.5.3"
+ }
+ },
+ "System.Net.WebSockets.Client.Managed": {
+ "type": "Transitive",
+ "resolved": "1.0.22",
+ "contentHash": "WqEOxPlXjuZrIjUtXNE9NxEfU/n5E35iV2PtoZdJSUC4tlrqwHnTee+wvMIM4OUaJWmwrymeqcgYrE0IkGAgLA==",
+ "dependencies": {
+ "System.Buffers": "4.4.0",
+ "System.Numerics.Vectors": "4.4.0"
+ }
+ },
+ "System.Numerics.Vectors": {
+ "type": "Transitive",
+ "resolved": "4.5.0",
+ "contentHash": "QQTlPTl06J/iiDbJCiepZ4H//BVraReU4O4EoRw1U02H5TLUIT7xn3GnDp9AXPSlJUDyFs4uWjWafNX6WrAojQ=="
+ },
+ "System.Reactive": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ==",
+ "dependencies": {
+ "System.Threading.Tasks.Extensions": "4.5.4"
+ }
+ },
+ "System.Reflection.Emit": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "228FG0jLcIwTVJyz8CLFKueVqQK36ANazUManGaJHkO0icjiIypKW7YLWLIWahyIkdh5M7mV2dJepllLyA1SKg=="
+ },
+ "System.Reflection.Metadata": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "5NecZgXktdGg34rh1OenY1rFNDCI8xSjFr+Z4OU4cU06AQHUdRnIIEeWENu3Wl4YowbzkymAIMvi3WyK9U53pQ==",
+ "dependencies": {
+ "System.Collections.Immutable": "5.0.0"
+ }
+ },
+ "System.Runtime.CompilerServices.Unsafe": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg=="
+ },
+ "System.Runtime.InteropServices.RuntimeInformation": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "cbz4YJMqRDR7oLeMRbdYv7mYzc++17lNhScCX0goO2XpGWdvAt60CGN+FHdePUEHCe/Jy9jUlvNAiNdM+7jsOw=="
+ },
+ "System.Text.Encodings.Web": {
+ "type": "Transitive",
+ "resolved": "5.0.1",
+ "contentHash": "KmJ+CJXizDofbq6mpqDoRRLcxgOd2z9X3XoFNULSbvbqVRZkFX3istvr+MUjL6Zw1RT+RNdoI4GYidIINtgvqQ==",
+ "dependencies": {
+ "System.Buffers": "4.5.1",
+ "System.Memory": "4.5.4"
+ }
+ },
+ "System.Text.Json": {
+ "type": "Transitive",
+ "resolved": "5.0.2",
+ "contentHash": "I47dVIGiV6SfAyppphxqupertT/5oZkYLDCX6vC3HpOI4ZLjyoKAreUoem2ie6G0RbRuFrlqz/PcTQjfb2DOfQ==",
+ "dependencies": {
+ "Microsoft.Bcl.AsyncInterfaces": "5.0.0",
+ "System.Buffers": "4.5.1",
+ "System.Memory": "4.5.4",
+ "System.Numerics.Vectors": "4.5.0",
+ "System.Runtime.CompilerServices.Unsafe": "5.0.0",
+ "System.Text.Encodings.Web": "5.0.1",
+ "System.Threading.Tasks.Extensions": "4.5.4",
+ "System.ValueTuple": "4.5.0"
+ }
+ },
+ "System.Threading.Tasks.Dataflow": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "+tyDCU3/B1lDdOOAJywHQoFwyXIUghIaP2BxG79uvhfTnO+D9qIgjVlL/JV2NTliYbMHpd6eKDmHp2VHpij7MA=="
+ },
+ "System.Threading.Tasks.Extensions": {
+ "type": "Transitive",
+ "resolved": "4.5.4",
+ "contentHash": "zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg==",
+ "dependencies": {
+ "System.Runtime.CompilerServices.Unsafe": "4.5.3"
+ }
+ },
+ "System.ValueTuple": {
+ "type": "Transitive",
+ "resolved": "4.5.0",
+ "contentHash": "okurQJO6NRE/apDIP23ajJ0hpiNmJ+f0BwOlB/cSqTLQlw5upkf+5+96+iG2Jw40G1fCVCyPz/FhIABUjMR+RQ=="
+ },
+ "speckle.autofac": {
+ "type": "Project",
+ "dependencies": {
+ "Microsoft.Extensions.Logging.Abstractions": "[7.0.0, )",
+ "Speckle.Core": "[2.0.999-local, )"
+ }
+ },
+ "speckle.connectors.dui": {
+ "type": "Project",
+ "dependencies": {
+ "Microsoft.Extensions.Logging.Abstractions": "[7.0.0, )",
+ "Speckle.Autofac": "[2.0.999-local, )",
+ "Speckle.Connectors.Utils": "[2.0.999-local, )",
+ "Speckle.Core": "[2.0.999-local, )",
+ "System.Threading.Tasks.Dataflow": "[6.0.0, )"
+ }
+ },
+ "speckle.connectors.utils": {
+ "type": "Project",
+ "dependencies": {
+ "Serilog.Extensions.Logging": "[7.0.0, )",
+ "Speckle.Autofac": "[2.0.999-local, )",
+ "Speckle.Core": "[2.0.999-local, )"
+ }
+ },
+ "speckle.converters.common": {
+ "type": "Project",
+ "dependencies": {
+ "Speckle.Autofac": "[2.0.999-local, )",
+ "Speckle.Objects": "[2.0.999-local, )"
+ }
+ },
+ "speckle.converters.common.dependencyinjection": {
+ "type": "Project",
+ "dependencies": {
+ "Speckle.Autofac": "[2.0.999-local, )",
+ "Speckle.Converters.Common": "[2.0.999-local, )"
+ }
+ },
+ "speckle.converters.revit2023": {
+ "type": "Project",
+ "dependencies": {
+ "Speckle.Converters.Common": "[2.0.999-local, )",
+ "Speckle.Revit2023.Interfaces": "[0.1.1-preview.0.28, )"
+ }
+ },
+ "speckle.converters.revit2023.dependencyinjection": {
+ "type": "Project",
+ "dependencies": {
+ "Speckle.Converters.Common": "[2.0.999-local, )",
+ "Speckle.Converters.Common.DependencyInjection": "[2.0.999-local, )",
+ "Speckle.Converters.Revit2023": "[2.0.999-local, )",
+ "Speckle.Revit2023.Api": "[0.1.1-preview.0.28, )"
+ }
+ },
+ "Speckle.Core": {
+ "type": "Project",
+ "dependencies": {
+ "GraphQL.Client": "[6.0.0, )",
+ "Microsoft.CSharp": "[4.7.0, )",
+ "Microsoft.Data.Sqlite": "[7.0.5, )",
+ "Polly": "[7.2.3, )",
+ "Polly.Contrib.WaitAndRetry": "[1.1.1, )",
+ "Polly.Extensions.Http": "[3.0.0, )",
+ "Sentry": "[3.33.0, )",
+ "Sentry.Serilog": "[3.33.0, )",
+ "Serilog": "[2.12.0, )",
+ "Serilog.Enrichers.ClientInfo": "[1.3.0, )",
+ "Serilog.Exceptions": "[8.4.0, )",
+ "Serilog.Sinks.Console": "[4.1.0, )",
+ "Serilog.Sinks.Seq": "[5.2.2, )",
+ "SerilogTimings": "[3.0.1, )",
+ "Speckle.Newtonsoft.Json": "[13.0.2, )",
+ "System.DoubleNumerics": "[3.1.3, )"
+ }
+ },
+ "Speckle.Objects": {
+ "type": "Project",
+ "dependencies": {
+ "Speckle.Core": "[2.0.999-local, )"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/DUI3-DX/Connectors/Revit/Speckle.Connectors.RevitShared/Bindings/RevitSendBinding.cs b/DUI3-DX/Connectors/Revit/Speckle.Connectors.RevitShared/Bindings/RevitSendBinding.cs
index ab60430881..8bd3033442 100644
--- a/DUI3-DX/Connectors/Revit/Speckle.Connectors.RevitShared/Bindings/RevitSendBinding.cs
+++ b/DUI3-DX/Connectors/Revit/Speckle.Connectors.RevitShared/Bindings/RevitSendBinding.cs
@@ -27,6 +27,7 @@ internal sealed class RevitSendBinding : RevitBaseBinding, ISendBinding
private readonly CancellationManager _cancellationManager;
private readonly IUnitOfWorkFactory _unitOfWorkFactory;
private readonly ISendConversionCache _sendConversionCache;
+ private readonly ITopLevelExceptionHandler _topLevelExceptionHandler;
public RevitSendBinding(
IRevitIdleManager idleManager,
@@ -36,7 +37,8 @@ public RevitSendBinding(
IBridge bridge,
IUnitOfWorkFactory unitOfWorkFactory,
RevitSettings revitSettings,
- ISendConversionCache sendConversionCache
+ ISendConversionCache sendConversionCache,
+ ITopLevelExceptionHandler topLevelExceptionHandler
)
: base("sendBinding", store, bridge, revitContext)
{
@@ -45,12 +47,15 @@ ISendConversionCache sendConversionCache
_unitOfWorkFactory = unitOfWorkFactory;
_revitSettings = revitSettings;
_sendConversionCache = sendConversionCache;
+ _topLevelExceptionHandler = topLevelExceptionHandler;
Commands = new SendBindingUICommands(bridge);
// TODO expiry events
// TODO filters need refresh events
- revitContext.UIApplication.NotNull().Application.DocumentChanged += (_, e) => DocChangeHandler(e);
- Store.DocumentChanged += (_, _) => OnDocumentChanged();
+ revitContext.UIApplication.NotNull().Application.DocumentChanged += (_, e) =>
+ _topLevelExceptionHandler.CatchUnhandled(() => DocChangeHandler(e));
+
+ Store.DocumentChanged += (_, _) => _topLevelExceptionHandler.CatchUnhandled(OnDocumentChanged);
}
public List GetSendFilters()
diff --git a/DUI3-DX/Connectors/Revit/Speckle.Connectors.RevitShared/Bindings/SelectionBinding.cs b/DUI3-DX/Connectors/Revit/Speckle.Connectors.RevitShared/Bindings/SelectionBinding.cs
index 11b7e8e864..d60fe3ef27 100644
--- a/DUI3-DX/Connectors/Revit/Speckle.Connectors.RevitShared/Bindings/SelectionBinding.cs
+++ b/DUI3-DX/Connectors/Revit/Speckle.Connectors.RevitShared/Bindings/SelectionBinding.cs
@@ -11,20 +11,23 @@ namespace Speckle.Connectors.Revit.Bindings;
internal sealed class SelectionBinding : RevitBaseBinding, ISelectionBinding
{
private readonly IRevitIdleManager _revitIdleManager;
+ private readonly ITopLevelExceptionHandler _topLevelExceptionHandler;
public SelectionBinding(
RevitContext revitContext,
DocumentModelStore store,
IRevitIdleManager idleManager,
- IBridge bridge
+ IBridge bridge,
+ ITopLevelExceptionHandler topLevelExceptionHandler
)
: base("selectionBinding", store, bridge, revitContext)
{
_revitIdleManager = idleManager;
+ _topLevelExceptionHandler = topLevelExceptionHandler;
// POC: we can inject the solution here
// TODO: Need to figure it out equivalent of SelectionChanged for Revit2020
RevitContext.UIApplication.NotNull().SelectionChanged += (_, _) =>
- _revitIdleManager.SubscribeToIdle(OnSelectionChanged);
+ topLevelExceptionHandler.CatchUnhandled(() => _revitIdleManager.SubscribeToIdle(OnSelectionChanged));
}
private void OnSelectionChanged()
diff --git a/DUI3-DX/Connectors/Revit/Speckle.Connectors.RevitShared/DependencyInjection/ProxyMapper.cs b/DUI3-DX/Connectors/Revit/Speckle.Connectors.RevitShared/DependencyInjection/ProxyMapper.cs
new file mode 100644
index 0000000000..e4e997c4e2
--- /dev/null
+++ b/DUI3-DX/Connectors/Revit/Speckle.Connectors.RevitShared/DependencyInjection/ProxyMapper.cs
@@ -0,0 +1,17 @@
+using Speckle.Converters.Common;
+using Speckle.ProxyGenerator;
+
+namespace Speckle.Connectors.Revit.DependencyInjection;
+
+public class ProxyMapper : IProxyMapper
+{
+ public Type? GetMappedTypeFromHostType(Type type) => ProxyMap.GetMappedTypeFromHostType(type);
+
+ public Type? GetMappedTypeFromProxyType(Type type) => ProxyMap.GetMappedTypeFromProxyType(type);
+
+ public Type? GetHostTypeFromMappedType(Type type) => ProxyMap.GetHostTypeFromMappedType(type);
+
+ public object CreateProxy(Type type, object toWrap) => ProxyMap.CreateProxy(type, toWrap);
+
+ public T CreateProxy(object toWrap) => ProxyMap.CreateProxy(toWrap);
+}
diff --git a/DUI3-DX/Connectors/Revit/Speckle.Connectors.RevitShared/HostApp/RevitDocumentStore.cs b/DUI3-DX/Connectors/Revit/Speckle.Connectors.RevitShared/HostApp/RevitDocumentStore.cs
index 1278431790..ba9b7d8db3 100644
--- a/DUI3-DX/Connectors/Revit/Speckle.Connectors.RevitShared/HostApp/RevitDocumentStore.cs
+++ b/DUI3-DX/Connectors/Revit/Speckle.Connectors.RevitShared/HostApp/RevitDocumentStore.cs
@@ -4,6 +4,7 @@
using Autodesk.Revit.UI;
using Autodesk.Revit.UI.Events;
using Revit.Async;
+using Speckle.Connectors.DUI.Bridge;
using Speckle.Connectors.DUI.Models;
using Speckle.Connectors.Revit.Plugin;
using Speckle.Connectors.RevitShared.Helpers;
@@ -29,7 +30,8 @@ public RevitDocumentStore(
RevitContext revitContext,
JsonSerializerSettings serializerSettings,
DocumentModelStorageSchema documentModelStorageSchema,
- IdStorageSchema idStorageSchema
+ IdStorageSchema idStorageSchema,
+ ITopLevelExceptionHandler topLevelExceptionHandler
)
: base(serializerSettings, true)
{
@@ -40,12 +42,15 @@ IdStorageSchema idStorageSchema
UIApplication uiApplication = _revitContext.UIApplication.NotNull();
- uiApplication.ViewActivated += OnViewActivated;
+ uiApplication.ViewActivated += (s, e) => topLevelExceptionHandler.CatchUnhandled(() => OnViewActivated(s, e));
- uiApplication.Application.DocumentOpening += (_, _) => IsDocumentInit = false;
- uiApplication.Application.DocumentOpened += (_, _) => IsDocumentInit = false;
+ uiApplication.Application.DocumentOpening += (_, _) =>
+ topLevelExceptionHandler.CatchUnhandled(() => IsDocumentInit = false);
- Models.CollectionChanged += (_, _) => WriteToFile();
+ uiApplication.Application.DocumentOpened += (_, _) =>
+ topLevelExceptionHandler.CatchUnhandled(() => IsDocumentInit = false);
+
+ Models.CollectionChanged += (_, _) => topLevelExceptionHandler.CatchUnhandled(WriteToFile);
// There is no event that we can hook here for double-click file open...
// It is kind of harmless since we create this object as "SingleInstance".
diff --git a/DUI3-DX/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Send/RevitRootObjectBuilder.cs b/DUI3-DX/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Send/RevitRootObjectBuilder.cs
index 6652aad320..417478e952 100644
--- a/DUI3-DX/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Send/RevitRootObjectBuilder.cs
+++ b/DUI3-DX/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Send/RevitRootObjectBuilder.cs
@@ -72,12 +72,14 @@ public RootObjectBuilderResult Build(
var countProgress = 0; // because for(int i = 0; ...) loops are so last year
var cacheHitCount = 0;
List results = new(revitElements.Count);
+ var path = new string[2];
foreach (Element revitElement in revitElements)
{
ct.ThrowIfCancellationRequested();
var cat = revitElement.Category.Name;
- var path = new[] { doc.GetElement(revitElement.LevelId) is not Level level ? "No level" : level.Name, cat };
+ path[0] = doc.GetElement(revitElement.LevelId) is not Level level ? "No level" : level.Name;
+ path[1] = cat;
var collection = GetAndCreateObjectHostCollection(path);
var applicationId = revitElement.Id.ToString();
diff --git a/DUI3-DX/Connectors/Revit/Speckle.Connectors.RevitShared/Plugin/RevitIdleManager.cs b/DUI3-DX/Connectors/Revit/Speckle.Connectors.RevitShared/Plugin/RevitIdleManager.cs
index 8456ded287..6e3d0c4e5e 100644
--- a/DUI3-DX/Connectors/Revit/Speckle.Connectors.RevitShared/Plugin/RevitIdleManager.cs
+++ b/DUI3-DX/Connectors/Revit/Speckle.Connectors.RevitShared/Plugin/RevitIdleManager.cs
@@ -1,6 +1,7 @@
using System.Collections.Concurrent;
using Autodesk.Revit.UI;
using Autodesk.Revit.UI.Events;
+using Speckle.Connectors.DUI.Bridge;
using Speckle.Connectors.RevitShared.Helpers;
namespace Speckle.Connectors.Revit.Plugin;
@@ -9,6 +10,7 @@ namespace Speckle.Connectors.Revit.Plugin;
// is probably misnamed, perhaps OnIdleCallbackManager
internal sealed class RevitIdleManager : IRevitIdleManager
{
+ private readonly ITopLevelExceptionHandler _topLevelExceptionHandler;
private readonly UIApplication _uiApplication;
private readonly ConcurrentDictionary _calls = new();
@@ -16,8 +18,9 @@ internal sealed class RevitIdleManager : IRevitIdleManager
// POC: still not thread safe
private volatile bool _hasSubscribed;
- public RevitIdleManager(RevitContext revitContext)
+ public RevitIdleManager(RevitContext revitContext, ITopLevelExceptionHandler topLevelExceptionHandler)
{
+ _topLevelExceptionHandler = topLevelExceptionHandler;
_uiApplication = revitContext.UIApplication!;
}
@@ -46,15 +49,18 @@ public void SubscribeToIdle(Action action)
private void RevitAppOnIdle(object sender, IdlingEventArgs e)
{
- foreach (KeyValuePair kvp in _calls)
+ _topLevelExceptionHandler.CatchUnhandled(() =>
{
- kvp.Value();
- }
+ foreach (KeyValuePair kvp in _calls)
+ {
+ kvp.Value.Invoke();
+ }
- _calls.Clear();
- _uiApplication.Idling -= RevitAppOnIdle;
+ _calls.Clear();
+ _uiApplication.Idling -= RevitAppOnIdle;
- // setting last will delay ntering re-subscritption
- _hasSubscribed = false;
+ // setting last will delay ntering re-subscritption
+ _hasSubscribed = false;
+ });
}
}
diff --git a/DUI3-DX/Connectors/Rhino/Speckle.Connectors.Rhino7/Bindings/RhinoSelectionBinding.cs b/DUI3-DX/Connectors/Rhino/Speckle.Connectors.Rhino7/Bindings/RhinoSelectionBinding.cs
index 077a4df2fd..dcb7c57fcf 100644
--- a/DUI3-DX/Connectors/Rhino/Speckle.Connectors.Rhino7/Bindings/RhinoSelectionBinding.cs
+++ b/DUI3-DX/Connectors/Rhino/Speckle.Connectors.Rhino7/Bindings/RhinoSelectionBinding.cs
@@ -8,33 +8,37 @@ namespace Speckle.Connectors.Rhino7.Bindings;
public class RhinoSelectionBinding : ISelectionBinding
{
+ private readonly IRhinoIdleManager _idleManager;
+ private readonly ITopLevelExceptionHandler _topLevelExceptionHandler;
private const string SELECTION_EVENT = "setSelection";
- public string Name { get; } = "selectionBinding";
- public IBridge Parent { get; set; }
+ public string Name => "selectionBinding";
+ public IBridge Parent { get; }
- public RhinoSelectionBinding(RhinoIdleManager idleManager, IBridge parent)
+ public RhinoSelectionBinding(
+ IRhinoIdleManager idleManager,
+ IBridge parent,
+ ITopLevelExceptionHandler topLevelExceptionHandler
+ )
{
+ _idleManager = idleManager;
+ _topLevelExceptionHandler = topLevelExceptionHandler;
Parent = parent;
- RhinoDoc.SelectObjects += (_, _) =>
- {
- idleManager.SubscribeToIdle(OnSelectionChanged);
- };
- RhinoDoc.DeselectObjects += (_, _) =>
- {
- idleManager.SubscribeToIdle(OnSelectionChanged);
- };
- RhinoDoc.DeselectAllObjects += (_, _) =>
- {
- idleManager.SubscribeToIdle(OnSelectionChanged);
- };
+ RhinoDoc.SelectObjects += OnSelectionChange;
+ RhinoDoc.DeselectObjects += OnSelectionChange;
+ RhinoDoc.DeselectAllObjects += OnSelectionChange;
}
- private void OnSelectionChanged()
+ void OnSelectionChange(object o, EventArgs eventArgs)
+ {
+ _idleManager.SubscribeToIdle(() => _topLevelExceptionHandler.CatchUnhandled(UpdateSelection));
+ }
+
+ private void UpdateSelection()
{
SelectionInfo selInfo = GetSelection();
- Parent?.Send(SELECTION_EVENT, selInfo);
+ Parent.Send(SELECTION_EVENT, selInfo);
}
public SelectionInfo GetSelection()
diff --git a/DUI3-DX/Connectors/Rhino/Speckle.Connectors.Rhino7/Bindings/RhinoSendBinding.cs b/DUI3-DX/Connectors/Rhino/Speckle.Connectors.Rhino7/Bindings/RhinoSendBinding.cs
index 66794b26ca..7e4e6be8a3 100644
--- a/DUI3-DX/Connectors/Rhino/Speckle.Connectors.Rhino7/Bindings/RhinoSendBinding.cs
+++ b/DUI3-DX/Connectors/Rhino/Speckle.Connectors.Rhino7/Bindings/RhinoSendBinding.cs
@@ -24,10 +24,9 @@ public sealed class RhinoSendBinding : ISendBinding
public IBridge Parent { get; }
private readonly DocumentModelStore _store;
- private readonly RhinoIdleManager _idleManager;
+ private readonly IRhinoIdleManager _idleManager;
private readonly IUnitOfWorkFactory _unitOfWorkFactory;
private readonly List _sendFilters;
- private readonly SendOperation _sendOperation;
private readonly CancellationManager _cancellationManager;
private readonly RhinoSettings _rhinoSettings;
@@ -37,27 +36,28 @@ public sealed class RhinoSendBinding : ISendBinding
private HashSet ChangedObjectIds { get; set; } = new();
private readonly ISendConversionCache _sendConversionCache;
+ private readonly ITopLevelExceptionHandler _topLevelExceptionHandler;
public RhinoSendBinding(
DocumentModelStore store,
- RhinoIdleManager idleManager,
+ IRhinoIdleManager idleManager,
IBridge parent,
IEnumerable sendFilters,
- SendOperation sendOperation,
IUnitOfWorkFactory unitOfWorkFactory,
RhinoSettings rhinoSettings,
CancellationManager cancellationManager,
- ISendConversionCache sendConversionCache
+ ISendConversionCache sendConversionCache,
+ ITopLevelExceptionHandler topLevelExceptionHandler
)
{
_store = store;
_idleManager = idleManager;
_unitOfWorkFactory = unitOfWorkFactory;
- _sendOperation = sendOperation;
_sendFilters = sendFilters.ToList();
_rhinoSettings = rhinoSettings;
_cancellationManager = cancellationManager;
_sendConversionCache = sendConversionCache;
+ _topLevelExceptionHandler = topLevelExceptionHandler;
Parent = parent;
Commands = new SendBindingUICommands(parent); // POC: Commands are tightly coupled with their bindings, at least for now, saves us injecting a factory.
SubscribeToRhinoEvents();
@@ -65,7 +65,6 @@ ISendConversionCache sendConversionCache
private void SubscribeToRhinoEvents()
{
- // POC: It is unclear to me why is the binding keeping track of ChangedObjectIds. Change tracking should be moved to a separate type.
RhinoDoc.LayerTableEvent += (_, _) =>
{
Commands.RefreshSendFilters();
@@ -81,41 +80,44 @@ private void SubscribeToRhinoEvents()
};
RhinoDoc.AddRhinoObject += (_, e) =>
- {
- // NOTE: This does not work if rhino starts and opens a blank doc;
- if (!_store.IsDocumentInit)
+ _topLevelExceptionHandler.CatchUnhandled(() =>
{
- return;
- }
+ // NOTE: This does not work if rhino starts and opens a blank doc;
+ if (!_store.IsDocumentInit)
+ {
+ return;
+ }
- ChangedObjectIds.Add(e.ObjectId.ToString());
- _idleManager.SubscribeToIdle(RunExpirationChecks);
- };
+ ChangedObjectIds.Add(e.ObjectId.ToString());
+ _idleManager.SubscribeToIdle(RunExpirationChecks);
+ });
RhinoDoc.DeleteRhinoObject += (_, e) =>
- {
- // NOTE: This does not work if rhino starts and opens a blank doc;
- if (!_store.IsDocumentInit)
+ _topLevelExceptionHandler.CatchUnhandled(() =>
{
- return;
- }
+ // NOTE: This does not work if rhino starts and opens a blank doc;
+ if (!_store.IsDocumentInit)
+ {
+ return;
+ }
- ChangedObjectIds.Add(e.ObjectId.ToString());
- _idleManager.SubscribeToIdle(RunExpirationChecks);
- };
+ ChangedObjectIds.Add(e.ObjectId.ToString());
+ _idleManager.SubscribeToIdle(RunExpirationChecks);
+ });
RhinoDoc.ReplaceRhinoObject += (_, e) =>
- {
- // NOTE: This does not work if rhino starts and opens a blank doc;
- if (!_store.IsDocumentInit)
+ _topLevelExceptionHandler.CatchUnhandled(() =>
{
- return;
- }
-
- ChangedObjectIds.Add(e.NewRhinoObject.Id.ToString());
- ChangedObjectIds.Add(e.OldRhinoObject.Id.ToString());
- _idleManager.SubscribeToIdle(RunExpirationChecks);
- };
+ // NOTE: This does not work if rhino starts and opens a blank doc;
+ if (!_store.IsDocumentInit)
+ {
+ return;
+ }
+
+ ChangedObjectIds.Add(e.NewRhinoObject.Id.ToString());
+ ChangedObjectIds.Add(e.OldRhinoObject.Id.ToString());
+ _idleManager.SubscribeToIdle(RunExpirationChecks);
+ });
}
public List GetSendFilters() => _sendFilters;
diff --git a/DUI3-DX/Connectors/Rhino/Speckle.Connectors.Rhino7/DependencyInjection/ProxyMapper.cs b/DUI3-DX/Connectors/Rhino/Speckle.Connectors.Rhino7/DependencyInjection/ProxyMapper.cs
new file mode 100644
index 0000000000..dabeb71d95
--- /dev/null
+++ b/DUI3-DX/Connectors/Rhino/Speckle.Connectors.Rhino7/DependencyInjection/ProxyMapper.cs
@@ -0,0 +1,17 @@
+using Speckle.Converters.Common;
+using Speckle.ProxyGenerator;
+
+namespace Speckle.Connectors.Rhino7.DependencyInjection;
+
+public class ProxyMapper : IProxyMapper
+{
+ public Type? GetMappedTypeFromHostType(Type type) => ProxyMap.GetMappedTypeFromHostType(type);
+
+ public Type? GetMappedTypeFromProxyType(Type type) => ProxyMap.GetMappedTypeFromProxyType(type);
+
+ public Type? GetHostTypeFromMappedType(Type type) => ProxyMap.GetHostTypeFromMappedType(type);
+
+ public object CreateProxy(Type type, object toWrap) => ProxyMap.CreateProxy(type, toWrap);
+
+ public T CreateProxy(object toWrap) => ProxyMap.CreateProxy(toWrap);
+}
diff --git a/DUI3-DX/Connectors/Rhino/Speckle.Connectors.Rhino7/DependencyInjection/RhinoConnectorModule.cs b/DUI3-DX/Connectors/Rhino/Speckle.Connectors.Rhino7/DependencyInjection/RhinoConnectorModule.cs
index 1c07027e1d..2c0e220eea 100644
--- a/DUI3-DX/Connectors/Rhino/Speckle.Connectors.Rhino7/DependencyInjection/RhinoConnectorModule.cs
+++ b/DUI3-DX/Connectors/Rhino/Speckle.Connectors.Rhino7/DependencyInjection/RhinoConnectorModule.cs
@@ -10,7 +10,6 @@
using Speckle.Connectors.Rhino7.Bindings;
using Speckle.Connectors.Rhino7.Filters;
using Speckle.Connectors.Rhino7.HostApp;
-using Speckle.Connectors.Rhino7.Interfaces;
using Speckle.Connectors.Rhino7.Operations.Send;
using Speckle.Connectors.Rhino7.Plugin;
using Speckle.Connectors.Utils.Cancellation;
@@ -22,7 +21,9 @@
using Speckle.Connectors.Utils.Caching;
using Speckle.Connectors.Utils.Instances;
using Speckle.Connectors.Utils.Operations;
+using Speckle.Converters.Common;
using Speckle.Core.Models.GraphTraversal;
+using Speckle.Rhino7.Api;
namespace Speckle.Connectors.Rhino7.DependencyInjection;
@@ -38,6 +39,7 @@ public void Load(SpeckleContainerBuilder builder)
builder.AddConnectorUtils();
builder.AddDUI();
builder.AddDUIView();
+ builder.ScanAssemblyOfType();
// POC: Overwriting the SyncToMainThread to SyncToCurrentThread for Rhino!
builder.AddSingletonInstance();
@@ -45,7 +47,8 @@ public void Load(SpeckleContainerBuilder builder)
// Register other connector specific types
builder.AddSingleton();
builder.AddSingleton();
- builder.AddSingleton();
+ builder.AddSingleton();
+ builder.AddSingleton();
// Register bindings
builder.AddSingleton();
diff --git a/DUI3-DX/Connectors/Rhino/Speckle.Connectors.Rhino7/DependencyInjection/RhinoPlugin.cs b/DUI3-DX/Connectors/Rhino/Speckle.Connectors.Rhino7/DependencyInjection/RhinoPlugin.cs
index a295f9f8b6..2262f93f9f 100644
--- a/DUI3-DX/Connectors/Rhino/Speckle.Connectors.Rhino7/DependencyInjection/RhinoPlugin.cs
+++ b/DUI3-DX/Connectors/Rhino/Speckle.Connectors.Rhino7/DependencyInjection/RhinoPlugin.cs
@@ -1,21 +1,17 @@
using Rhino;
-using Speckle.Connectors.DUI.WebView;
using Speckle.Connectors.Rhino7.HostApp;
-using Speckle.Connectors.Rhino7.Interfaces;
using Speckle.Connectors.Rhino7.Plugin;
+using Speckle.InterfaceGenerator;
namespace Speckle.Connectors.Rhino7.DependencyInjection;
+[GenerateAutoInterface]
public class RhinoPlugin : IRhinoPlugin
{
- private readonly RhinoIdleManager _idleManager;
- private readonly DUI3ControlWebView _panel;
- private readonly RhinoSettings _settings;
+ private readonly IRhinoIdleManager _idleManager;
- public RhinoPlugin(DUI3ControlWebView panel, RhinoSettings settings, RhinoIdleManager idleManager)
+ public RhinoPlugin(IRhinoIdleManager idleManager)
{
- _panel = panel;
- _settings = settings;
_idleManager = idleManager;
}
diff --git a/DUI3-DX/Connectors/Rhino/Speckle.Connectors.Rhino7/HostApp/RhinoContext.cs b/DUI3-DX/Connectors/Rhino/Speckle.Connectors.Rhino7/HostApp/RhinoContext.cs
deleted file mode 100644
index 17b532035a..0000000000
--- a/DUI3-DX/Connectors/Rhino/Speckle.Connectors.Rhino7/HostApp/RhinoContext.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-using Rhino;
-
-namespace Speckle.Connectors.Rhino7.HostApp;
-
-public class RhinoContext
-{
- public RhinoDoc Document { get; } = RhinoDoc.ActiveDoc;
-}
diff --git a/DUI3-DX/Connectors/Rhino/Speckle.Connectors.Rhino7/HostApp/RhinoDocumentStore.cs b/DUI3-DX/Connectors/Rhino/Speckle.Connectors.Rhino7/HostApp/RhinoDocumentStore.cs
index 2545b44089..40ac283bce 100644
--- a/DUI3-DX/Connectors/Rhino/Speckle.Connectors.Rhino7/HostApp/RhinoDocumentStore.cs
+++ b/DUI3-DX/Connectors/Rhino/Speckle.Connectors.Rhino7/HostApp/RhinoDocumentStore.cs
@@ -1,4 +1,5 @@
using Rhino;
+using Speckle.Connectors.DUI.Bridge;
using Speckle.Connectors.DUI.Models;
using Speckle.Newtonsoft.Json;
@@ -6,29 +7,35 @@ namespace Speckle.Connectors.Rhino7.HostApp;
public class RhinoDocumentStore : DocumentModelStore
{
+ private readonly ITopLevelExceptionHandler _topLevelExceptionHandler;
private const string SPECKLE_KEY = "Speckle_DUI3";
public override bool IsDocumentInit { get; set; } = true; // Note: because of rhino implementation details regarding expiry checking of sender cards.
- public RhinoDocumentStore(JsonSerializerSettings jsonSerializerSettings)
+ public RhinoDocumentStore(
+ JsonSerializerSettings jsonSerializerSettings,
+ ITopLevelExceptionHandler topLevelExceptionHandler
+ )
: base(jsonSerializerSettings, true)
{
- RhinoDoc.BeginOpenDocument += (_, _) => IsDocumentInit = false;
+ _topLevelExceptionHandler = topLevelExceptionHandler;
+ RhinoDoc.BeginOpenDocument += (_, _) => topLevelExceptionHandler.CatchUnhandled(() => IsDocumentInit = false);
RhinoDoc.EndOpenDocument += (_, e) =>
- {
- if (e.Merge)
+ topLevelExceptionHandler.CatchUnhandled(() =>
{
- return;
- }
+ if (e.Merge)
+ {
+ return;
+ }
- if (e.Document == null)
- {
- return;
- }
+ if (e.Document == null)
+ {
+ return;
+ }
- IsDocumentInit = true;
- ReadFromFile();
- OnDocumentChanged();
- };
+ IsDocumentInit = true;
+ ReadFromFile();
+ OnDocumentChanged();
+ });
}
public override void WriteToFile()
@@ -38,10 +45,10 @@ public override void WriteToFile()
return; // Should throw
}
- RhinoDoc.ActiveDoc?.Strings.Delete(SPECKLE_KEY);
+ RhinoDoc.ActiveDoc.Strings.Delete(SPECKLE_KEY);
string serializedState = Serialize();
- RhinoDoc.ActiveDoc?.Strings.SetString(SPECKLE_KEY, SPECKLE_KEY, serializedState);
+ RhinoDoc.ActiveDoc.Strings.SetString(SPECKLE_KEY, SPECKLE_KEY, serializedState);
}
public override void ReadFromFile()
diff --git a/DUI3-DX/Connectors/Rhino/Speckle.Connectors.Rhino7/HostApp/RhinoIdleManager.cs b/DUI3-DX/Connectors/Rhino/Speckle.Connectors.Rhino7/HostApp/RhinoIdleManager.cs
index 374d979750..5a88ed6c20 100644
--- a/DUI3-DX/Connectors/Rhino/Speckle.Connectors.Rhino7/HostApp/RhinoIdleManager.cs
+++ b/DUI3-DX/Connectors/Rhino/Speckle.Connectors.Rhino7/HostApp/RhinoIdleManager.cs
@@ -1,12 +1,14 @@
using System.Collections.Concurrent;
using Rhino;
+using Speckle.InterfaceGenerator;
namespace Speckle.Connectors.Rhino7.HostApp;
///
/// Rhino Idle Manager is a helper util to manage deferred actions.
///
-public class RhinoIdleManager
+[GenerateAutoInterface]
+public class RhinoIdleManager : IRhinoIdleManager
{
// NOTE: ConcurrentDictionary possibly removing the collection has been modified errors in here
private readonly ConcurrentDictionary _sCalls = new();
diff --git a/DUI3-DX/Connectors/Rhino/Speckle.Connectors.Rhino7/HostApp/RhinoInstanceObjectsManager.cs b/DUI3-DX/Connectors/Rhino/Speckle.Connectors.Rhino7/HostApp/RhinoInstanceObjectsManager.cs
index fbf3db4cf2..67ef531f43 100644
--- a/DUI3-DX/Connectors/Rhino/Speckle.Connectors.Rhino7/HostApp/RhinoInstanceObjectsManager.cs
+++ b/DUI3-DX/Connectors/Rhino/Speckle.Connectors.Rhino7/HostApp/RhinoInstanceObjectsManager.cs
@@ -10,6 +10,7 @@
using Speckle.Core.Logging;
using Speckle.Core.Models;
using Speckle.Core.Models.Instances;
+using Speckle.Rhino7.Interfaces;
namespace Speckle.Connectors.Rhino7.HostApp;
@@ -19,7 +20,7 @@ namespace Speckle.Connectors.Rhino7.HostApp;
///
public class RhinoInstanceObjectsManager : IInstanceObjectsManager>
{
- private readonly IConversionContextStack _contextStack;
+ private readonly IConversionContextStack _contextStack;
private readonly Dictionary _instanceProxies = new();
private readonly Dictionary> _instanceProxiesByDefinitionId = new();
private readonly Dictionary _definitionProxies = new();
@@ -27,7 +28,7 @@ public class RhinoInstanceObjectsManager : IInstanceObjectsManager contextStack,
+ IConversionContextStack contextStack,
RhinoLayerManager layerManager
)
{
@@ -52,6 +53,7 @@ private void UnpackInstance(InstanceObject instance, int depth = 0)
{
var instanceId = instance.Id.ToString();
var instanceDefinitionId = instance.InstanceDefinition.Id.ToString();
+ var currentDoc = RhinoDoc.ActiveDoc; // POC: too much right now to interface around
_instanceProxies[instanceId] = new InstanceProxy()
{
@@ -59,7 +61,7 @@ private void UnpackInstance(InstanceObject instance, int depth = 0)
DefinitionId = instance.InstanceDefinition.Id.ToString(),
Transform = XFormToMatrix(instance.InstanceXform),
MaxDepth = depth,
- Units = _contextStack.Current.Document.ModelUnitSystem.ToSpeckleString()
+ Units = currentDoc.ModelUnitSystem.ToSpeckleString()
};
// For each block instance that has the same definition, we need to keep track of the "maximum depth" at which is found.
@@ -125,7 +127,9 @@ public BakeResult BakeInstances(
Action? onOperationProgressed
)
{
- var doc = _contextStack.Current.Document;
+ // var doc = _contextStack.Current.Document;
+ var doc = RhinoDoc.ActiveDoc; // POC: too much right now to interface around
+
var sortedInstanceComponents = instanceComponents
.OrderByDescending(x => x.obj.MaxDepth) // Sort by max depth, so we start baking from the deepest element first
.ThenBy(x => x.obj is InstanceDefinitionProxy ? 0 : 1) // Ensure we bake the deepest definition first, then any instances that depend on it
@@ -214,11 +218,12 @@ instanceOrDefinition is InstanceProxy instanceProxy
public void PurgeInstances(string namePrefix)
{
- foreach (var definition in _contextStack.Current.Document.InstanceDefinitions)
+ var currentDoc = RhinoDoc.ActiveDoc; // POC: too much right now to interface around
+ foreach (var definition in currentDoc.InstanceDefinitions)
{
if (!definition.IsDeleted && definition.Name.Contains(namePrefix))
{
- _contextStack.Current.Document.InstanceDefinitions.Delete(definition.Index, true, false);
+ currentDoc.InstanceDefinitions.Delete(definition.Index, true, false);
}
}
}
@@ -228,10 +233,8 @@ private Matrix4x4 XFormToMatrix(Transform t) =>
private Transform MatrixToTransform(Matrix4x4 matrix, string units)
{
- var conversionFactor = Units.GetConversionFactor(
- units,
- _contextStack.Current.Document.ModelUnitSystem.ToSpeckleString()
- );
+ var currentDoc = RhinoDoc.ActiveDoc; // POC: too much right now to interface around
+ var conversionFactor = Units.GetConversionFactor(units, currentDoc.ModelUnitSystem.ToSpeckleString());
var t = Transform.Identity;
t.M00 = matrix.M11;
diff --git a/DUI3-DX/Connectors/Rhino/Speckle.Connectors.Rhino7/HostApp/RhinoLayerManager.cs b/DUI3-DX/Connectors/Rhino/Speckle.Connectors.Rhino7/HostApp/RhinoLayerManager.cs
index dd01037582..7b6e7d9dba 100644
--- a/DUI3-DX/Connectors/Rhino/Speckle.Connectors.Rhino7/HostApp/RhinoLayerManager.cs
+++ b/DUI3-DX/Connectors/Rhino/Speckle.Connectors.Rhino7/HostApp/RhinoLayerManager.cs
@@ -4,6 +4,7 @@
using Speckle.Converters.Common;
using Speckle.Core.Models;
using Speckle.Core.Models.GraphTraversal;
+using Speckle.Rhino7.Interfaces;
namespace Speckle.Connectors.Rhino7.HostApp;
@@ -12,11 +13,11 @@ namespace Speckle.Connectors.Rhino7.HostApp;
///
public class RhinoLayerManager
{
- private readonly IConversionContextStack _contextStack;
+ private readonly IConversionContextStack _contextStack;
private readonly Dictionary _hostLayerCache;
private readonly Dictionary _layerCollectionCache;
- public RhinoLayerManager(IConversionContextStack contextStack)
+ public RhinoLayerManager(IConversionContextStack contextStack)
{
_contextStack = contextStack;
_hostLayerCache = new();
@@ -29,7 +30,8 @@ public RhinoLayerManager(IConversionContextStack contextSt
///
public void CreateBaseLayer(string baseLayerName)
{
- var index = _contextStack.Current.Document.Layers.Add(new Layer { Name = baseLayerName });
+ var index = RhinoDoc.ActiveDoc.Layers.Add(new Layer { Name = baseLayerName }); // POC: too much effort right now to wrap around the interfaced layers and doc
+ // var index = _contextStack.Current.Document.Layers.Add(new Layer { Name = baseLayerName });
_hostLayerCache.Add(baseLayerName, index);
}
@@ -48,7 +50,7 @@ public int GetAndCreateLayerFromPath(string[] path, string baseLayerName)
}
var currentLayerName = baseLayerName;
- RhinoDoc currentDocument = _contextStack.Current.Document;
+ var currentDocument = RhinoDoc.ActiveDoc; // POC: too much effort right now to wrap around the interfaced layers
var previousLayer = currentDocument.Layers.FindName(currentLayerName);
foreach (var layerName in path)
@@ -77,7 +79,7 @@ public int GetAndCreateLayerFromPath(string[] path, string baseLayerName)
/// The layer you want the equivalent collection for.
/// The root object that will be sent to Speckle, and will host all collections.
///
- public Collection GetHostObjectCollection(Layer layer, Collection rootObjectCollection)
+ public Collection GetHostObjectCollection(IRhinoLayer layer, Collection rootObjectCollection)
{
if (_layerCollectionCache.TryGetValue(layer.Index, out Collection value))
{
diff --git a/DUI3-DX/Connectors/Rhino/Speckle.Connectors.Rhino7/Interfaces/IRhinoPlugin.cs b/DUI3-DX/Connectors/Rhino/Speckle.Connectors.Rhino7/Interfaces/IRhinoPlugin.cs
deleted file mode 100644
index 487c2968f5..0000000000
--- a/DUI3-DX/Connectors/Rhino/Speckle.Connectors.Rhino7/Interfaces/IRhinoPlugin.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-namespace Speckle.Connectors.Rhino7.Interfaces;
-
-public interface IRhinoPlugin
-{
- void Initialise();
- void Shutdown();
-}
diff --git a/DUI3-DX/Connectors/Rhino/Speckle.Connectors.Rhino7/Operations/Receive/DisableRedrawScope.cs b/DUI3-DX/Connectors/Rhino/Speckle.Connectors.Rhino7/Operations/Receive/DisableRedrawScope.cs
index 1182e5de7a..621bfa45ed 100644
--- a/DUI3-DX/Connectors/Rhino/Speckle.Connectors.Rhino7/Operations/Receive/DisableRedrawScope.cs
+++ b/DUI3-DX/Connectors/Rhino/Speckle.Connectors.Rhino7/Operations/Receive/DisableRedrawScope.cs
@@ -1,16 +1,16 @@
-using Rhino.DocObjects.Tables;
+using Speckle.Rhino7.Interfaces;
namespace Speckle.Connectors.Rhino7.Operations.Receive;
///
-/// Helper class to disable within a scope
+/// Helper class to disable within a scope
///
public sealed class DisableRedrawScope : IDisposable
{
- private readonly ViewTable _viewTable;
+ private readonly IRhinoViewTable _viewTable;
private readonly bool _returnToStatus;
- public DisableRedrawScope(ViewTable viewTable, bool returnToStatus = true)
+ public DisableRedrawScope(IRhinoViewTable viewTable, bool returnToStatus = true)
{
_viewTable = viewTable;
_returnToStatus = returnToStatus;
diff --git a/DUI3-DX/Connectors/Rhino/Speckle.Connectors.Rhino7/Operations/Receive/RhinoHostObjectBuilder.cs b/DUI3-DX/Connectors/Rhino/Speckle.Connectors.Rhino7/Operations/Receive/RhinoHostObjectBuilder.cs
index a3353295d1..44ab25d10b 100644
--- a/DUI3-DX/Connectors/Rhino/Speckle.Connectors.Rhino7/Operations/Receive/RhinoHostObjectBuilder.cs
+++ b/DUI3-DX/Connectors/Rhino/Speckle.Connectors.Rhino7/Operations/Receive/RhinoHostObjectBuilder.cs
@@ -1,6 +1,4 @@
-using Rhino;
using Rhino.DocObjects;
-using Rhino.Geometry;
using Speckle.Connectors.Rhino7.HostApp;
using Speckle.Connectors.Utils.Builders;
using Speckle.Connectors.Utils.Conversion;
@@ -10,6 +8,7 @@
using Speckle.Core.Models;
using Speckle.Core.Models.GraphTraversal;
using Speckle.Core.Models.Instances;
+using Speckle.Rhino7.Interfaces;
namespace Speckle.Connectors.Rhino7.Operations.Receive;
@@ -19,17 +18,20 @@ namespace Speckle.Connectors.Rhino7.Operations.Receive;
public class RhinoHostObjectBuilder : IHostObjectBuilder
{
private readonly IRootToHostConverter _converter;
- private readonly IConversionContextStack _contextStack;
+ private readonly IConversionContextStack _contextStack;
private readonly GraphTraversal _traverseFunction;
+
private readonly IInstanceObjectsManager> _instanceObjectsManager;
private readonly RhinoLayerManager _layerManager;
+ private readonly IRhinoDocFactory _rhinoDocFactory;
public RhinoHostObjectBuilder(
IRootToHostConverter converter,
- IConversionContextStack contextStack,
+ IConversionContextStack contextStack,
GraphTraversal traverseFunction,
RhinoLayerManager layerManager,
- IInstanceObjectsManager> instanceObjectsManager
+ IInstanceObjectsManager> instanceObjectsManager,
+ IRhinoDocFactory rhinoDocFactory
)
{
_converter = converter;
@@ -37,6 +39,7 @@ IInstanceObjectsManager> instanceObjectsManager
_traverseFunction = traverseFunction;
_layerManager = layerManager;
_instanceObjectsManager = instanceObjectsManager;
+ _rhinoDocFactory = rhinoDocFactory;
}
public HostObjectBuilderResult Build(
@@ -77,9 +80,13 @@ private HostObjectBuilderResult BakeObjects(
Action? onOperationProgressed
)
{
- RhinoDoc doc = _contextStack.Current.Document;
+ var doc = _contextStack.Current.Document;
+ var rootLayerIndex = _contextStack.Current.Document.Layers.Find(
+ Guid.Empty,
+ baseLayerName,
+ _rhinoDocFactory.UnsetIntIndex
+ );
- var rootLayerIndex = _contextStack.Current.Document.Layers.Find(Guid.Empty, baseLayerName, RhinoMath.UnsetIntIndex);
PreReceiveDeepClean(baseLayerName, rootLayerIndex);
_layerManager.CreateBaseLayer(baseLayerName);
@@ -165,10 +172,10 @@ private void PreReceiveDeepClean(string baseLayerName, int rootLayerIndex)
var doc = _contextStack.Current.Document;
// Cleans up any previously received objects
- if (rootLayerIndex != RhinoMath.UnsetIntIndex)
+ if (rootLayerIndex != _rhinoDocFactory.UnsetIntIndex)
{
- Layer documentLayer = doc.Layers[rootLayerIndex];
- Layer[]? childLayers = documentLayer.GetChildren();
+ var documentLayer = doc.Layers[rootLayerIndex];
+ var childLayers = documentLayer.GetChildren();
if (childLayers != null)
{
using var layerNoDraw = new DisableRedrawScope(doc.Views);
@@ -190,31 +197,31 @@ private IReadOnlyList HandleConversionResult(object conversionResult, Ba
List newObjectIds = new();
switch (conversionResult)
{
- case IEnumerable list:
+ case IEnumerable list:
{
- Group group = BakeObjectsAsGroup(originalObject.id, list, layerIndex);
+ var group = BakeObjectsAsGroup(originalObject.id, list, layerIndex);
newObjectIds.Add(group.Id.ToString());
break;
}
- case GeometryBase newObject:
+ case IRhinoGeometryBase newObject:
{
- var newObjectGuid = doc.Objects.Add(newObject, new ObjectAttributes { LayerIndex = layerIndex });
+ var newObjectGuid = doc.Objects.Add(newObject, _rhinoDocFactory.CreateAttributes(layerIndex));
newObjectIds.Add(newObjectGuid.ToString());
break;
}
default:
throw new SpeckleConversionException(
- $"Unexpected result from conversion: Expected {nameof(GeometryBase)} but instead got {conversionResult.GetType().Name}"
+ $"Unexpected result from conversion: Expected {nameof(IRhinoGeometryBase)} but instead got {conversionResult.GetType().Name}"
);
}
return newObjectIds;
}
- private Group BakeObjectsAsGroup(string groupName, IEnumerable list, int layerIndex)
+ private IRhinoGroup BakeObjectsAsGroup(string groupName, IEnumerable list, int layerIndex)
{
var doc = _contextStack.Current.Document;
- var objectIds = list.Select(obj => doc.Objects.Add(obj, new ObjectAttributes { LayerIndex = layerIndex }));
+ var objectIds = list.Select(obj => doc.Objects.Add(obj, _rhinoDocFactory.CreateAttributes(layerIndex)));
var groupIndex = _contextStack.Current.Document.Groups.Add(groupName, objectIds);
var group = _contextStack.Current.Document.Groups.FindIndex(groupIndex);
return group;
diff --git a/DUI3-DX/Connectors/Rhino/Speckle.Connectors.Rhino7/Operations/Send/RhinoRootObjectBuilder.cs b/DUI3-DX/Connectors/Rhino/Speckle.Connectors.Rhino7/Operations/Send/RhinoRootObjectBuilder.cs
index 4a1a4e50bd..b2fe1a43ef 100644
--- a/DUI3-DX/Connectors/Rhino/Speckle.Connectors.Rhino7/Operations/Send/RhinoRootObjectBuilder.cs
+++ b/DUI3-DX/Connectors/Rhino/Speckle.Connectors.Rhino7/Operations/Send/RhinoRootObjectBuilder.cs
@@ -1,6 +1,5 @@
using System.Diagnostics;
using Rhino.DocObjects;
-using Rhino;
using Speckle.Core.Models;
using Speckle.Autofac.DependencyInjection;
using Speckle.Converters.Common;
@@ -12,6 +11,7 @@
using Speckle.Connectors.Utils.Instances;
using Speckle.Connectors.Utils.Operations;
using Speckle.Core.Logging;
+using Speckle.Rhino7.Interfaces;
namespace Speckle.Connectors.Rhino7.Operations.Send;
@@ -23,13 +23,13 @@ public class RhinoRootObjectBuilder : IRootObjectBuilder
private readonly IUnitOfWorkFactory _unitOfWorkFactory;
private readonly ISendConversionCache _sendConversionCache;
private readonly IInstanceObjectsManager> _instanceObjectsManager;
- private readonly IConversionContextStack _contextStack;
+ private readonly IConversionContextStack _contextStack;
private readonly RhinoLayerManager _layerManager;
public RhinoRootObjectBuilder(
IUnitOfWorkFactory unitOfWorkFactory,
ISendConversionCache sendConversionCache,
- IConversionContextStack contextStack,
+ IConversionContextStack contextStack,
RhinoLayerManager layerManager,
IInstanceObjectsManager> instanceObjectsManager
)
@@ -78,7 +78,7 @@ private RootObjectBuilderResult ConvertObjects(
foreach (RhinoObject rhinoObject in atomicObjects)
{
cancellationToken.ThrowIfCancellationRequested();
-
+ // RhinoDoc.ActiveDoc.Layers
var layer = _contextStack.Current.Document.Layers[rhinoObject.Attributes.LayerIndex];
var collectionHost = _layerManager.GetHostObjectCollection(layer, rootObjectCollection);
diff --git a/DUI3-DX/Connectors/Rhino/Speckle.Connectors.Rhino7/Plugin/Speckle.Connectors.Rhino7Plugin.cs b/DUI3-DX/Connectors/Rhino/Speckle.Connectors.Rhino7/Plugin/Speckle.Connectors.Rhino7Plugin.cs
index 8dff82b2d5..16e7297e5a 100644
--- a/DUI3-DX/Connectors/Rhino/Speckle.Connectors.Rhino7/Plugin/Speckle.Connectors.Rhino7Plugin.cs
+++ b/DUI3-DX/Connectors/Rhino/Speckle.Connectors.Rhino7/Plugin/Speckle.Connectors.Rhino7Plugin.cs
@@ -2,8 +2,8 @@
using Rhino.PlugIns;
using Speckle.Autofac;
using Speckle.Autofac.DependencyInjection;
+using Speckle.Connectors.Rhino7.DependencyInjection;
using Speckle.Connectors.Rhino7.HostApp;
-using Speckle.Connectors.Rhino7.Interfaces;
using Speckle.Core.Kits;
using Speckle.Core.Logging;
using Speckle.Core.Models.Extensions;
diff --git a/DUI3-DX/Connectors/Rhino/Speckle.Connectors.Rhino7/Speckle.Connectors.Rhino7.csproj b/DUI3-DX/Connectors/Rhino/Speckle.Connectors.Rhino7/Speckle.Connectors.Rhino7.csproj
index cf48f27e61..84ac922724 100644
--- a/DUI3-DX/Connectors/Rhino/Speckle.Connectors.Rhino7/Speckle.Connectors.Rhino7.csproj
+++ b/DUI3-DX/Connectors/Rhino/Speckle.Connectors.Rhino7/Speckle.Connectors.Rhino7.csproj
@@ -15,6 +15,8 @@
+
+
@@ -41,5 +43,4 @@
Resources.Designer.cs
-
diff --git a/DUI3-DX/Connectors/Rhino/Speckle.Connectors.Rhino7/packages.lock.json b/DUI3-DX/Connectors/Rhino/Speckle.Connectors.Rhino7/packages.lock.json
new file mode 100644
index 0000000000..0bd5b597b5
--- /dev/null
+++ b/DUI3-DX/Connectors/Rhino/Speckle.Connectors.Rhino7/packages.lock.json
@@ -0,0 +1,562 @@
+{
+ "version": 1,
+ "dependencies": {
+ ".NETFramework,Version=v4.8": {
+ "PolySharp": {
+ "type": "Direct",
+ "requested": "[1.14.1, )",
+ "resolved": "1.14.1",
+ "contentHash": "mOOmFYwad3MIOL14VCjj02LljyF1GNw1wP0YVlxtcPvqdxjGGMNdNJJxHptlry3MOd8b40Flm8RPOM8JOlN2sQ=="
+ },
+ "RhinoCommon": {
+ "type": "Direct",
+ "requested": "[7.13.21348.13001, )",
+ "resolved": "7.13.21348.13001",
+ "contentHash": "JQdaNw61ddBqIe08E9O4N/grwrN1hjDHcYW7tWylwCZyFR7SepoCD4NS+6LN6+oSQhNbhLi9Bf+hQOFYFdRAEA=="
+ },
+ "RhinoWindows": {
+ "type": "Direct",
+ "requested": "[7.13.21348.13001, )",
+ "resolved": "7.13.21348.13001",
+ "contentHash": "V94T8emmJmFfmbd5cu+uTNS0neZApx1Q5MXvsQGFtt/mEGEbdHE+dFOETNgbOOJXSdNboAnCR3uo0GosOFX+/g==",
+ "dependencies": {
+ "RhinoCommon": "[7.13.21348.13001]"
+ }
+ },
+ "Speckle.InterfaceGenerator": {
+ "type": "Direct",
+ "requested": "[0.9.5, )",
+ "resolved": "0.9.5",
+ "contentHash": "oU/L7pN1R7q8KkbrpQ3WJnHirPHqn+9DEA7asOcUiggV5dzVg1A/VYs7GOSusD24njxXh03tE3a2oTLOjt3cVg=="
+ },
+ "Speckle.Rhino7.Api": {
+ "type": "Direct",
+ "requested": "[0.1.1-preview.0.29, )",
+ "resolved": "0.1.1-preview.0.29",
+ "contentHash": "tmDprI1IAq9/CAes/vFTYiQGHpGWnAe7FZnoteiSA4CWF5aqWCKVQjJG0c746qynRbJq/0mAJ7FQ7ADGDRNP3w==",
+ "dependencies": {
+ "Mapster": "7.3.0",
+ "RhinoCommon": "7.13.21348.13001",
+ "RhinoWindows": "7.13.21348.13001",
+ "Speckle.Rhino7.Interfaces": "0.1.1-preview.0.29"
+ }
+ },
+ "Speckle.Rhino7.Interfaces": {
+ "type": "Direct",
+ "requested": "[0.1.1-preview.0.29, )",
+ "resolved": "0.1.1-preview.0.29",
+ "contentHash": "hDpFhNp3+Jidh+vJQM+nyJXo2pE6Mt9EgLv533xHnQ2u6z5ab2iCVuDlDgwS9G76tSYzl/GEvKmiMJQOiqb2vA=="
+ },
+ "System.Resources.Extensions": {
+ "type": "Direct",
+ "requested": "[7.0.0, )",
+ "resolved": "7.0.0",
+ "contentHash": "65ufm9ABXvxRkQ//hMcUDrQXbGWkC7z0WWZAvHlQ6Qv+JmrIwHH1lmX8aXlNlXpIrT9KxDpuZPqJTVqqwzMD8Q==",
+ "dependencies": {
+ "System.Memory": "4.5.5"
+ }
+ },
+ "GraphQL.Client": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "8yPNBbuVBpTptivyAlak4GZvbwbUcjeQTL4vN1HKHRuOykZ4r7l5fcLS6vpyPyLn0x8FsL31xbOIKyxbmR9rbA==",
+ "dependencies": {
+ "GraphQL.Client.Abstractions": "6.0.0",
+ "GraphQL.Client.Abstractions.Websocket": "6.0.0",
+ "System.Net.WebSockets.Client.Managed": "1.0.22",
+ "System.Reactive": "5.0.0"
+ }
+ },
+ "GraphQL.Client.Abstractions": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "h7uzWFORHZ+CCjwr/ThAyXMr0DPpzEANDa4Uo54wqCQ+j7qUKwqYTgOrb1W40sqbvNaZm9v/X7It31SUw0maHA==",
+ "dependencies": {
+ "GraphQL.Primitives": "6.0.0"
+ }
+ },
+ "GraphQL.Client.Abstractions.Websocket": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "Nr9bPf8gIOvLuXpqEpqr9z9jslYFJOvd0feHth3/kPqeR3uMbjF5pjiwh4jxyMcxHdr8Pb6QiXkV3hsSyt0v7A==",
+ "dependencies": {
+ "GraphQL.Client.Abstractions": "6.0.0"
+ }
+ },
+ "GraphQL.Primitives": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "yg72rrYDapfsIUrul7aF6wwNnTJBOFvuA9VdDTQpPa8AlAriHbufeXYLBcodKjfUdkCnaiggX1U/nEP08Zb5GA=="
+ },
+ "Mapster": {
+ "type": "Transitive",
+ "resolved": "7.3.0",
+ "contentHash": "NrCUX/rJa5PTyo6iW4AL5dZLU9PDNlYnrJOVjgdpo5OQM9EtWH2CMHnC5sSuJWC0d0b0SnmeRrIviEem6WxtuQ==",
+ "dependencies": {
+ "Mapster.Core": "1.2.0",
+ "Microsoft.CSharp": "4.3.0",
+ "System.Reflection.Emit": "4.3.0"
+ }
+ },
+ "Mapster.Core": {
+ "type": "Transitive",
+ "resolved": "1.2.0",
+ "contentHash": "TNdqZk2zAuBYfJF88D/3clQTOyOdqr1crU81yZQtlGa+e7FYWhJdK/buBWT+TpM3qQko9UzmzfOT4iq3JCs/ZA=="
+ },
+ "Microsoft.Bcl.AsyncInterfaces": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "3aeMZ1N0lJoSyzqiP03hqemtb1BijhsJADdobn/4nsMJ8V1H+CrpuduUe4hlRdx+ikBQju1VGjMD1GJ3Sk05Eg==",
+ "dependencies": {
+ "System.Threading.Tasks.Extensions": "4.5.4"
+ }
+ },
+ "Microsoft.CSharp": {
+ "type": "Transitive",
+ "resolved": "4.7.0",
+ "contentHash": "pTj+D3uJWyN3My70i2Hqo+OXixq3Os2D1nJ2x92FFo6sk8fYS1m1WLNTs0Dc1uPaViH0YvEEwvzddQ7y4rhXmA=="
+ },
+ "Microsoft.Data.Sqlite": {
+ "type": "Transitive",
+ "resolved": "7.0.5",
+ "contentHash": "KGxbPeWsQMnmQy43DSBxAFtHz3l2JX8EWBSGUCvT3CuZ8KsuzbkqMIJMDOxWtG8eZSoCDI04aiVQjWuuV8HmSw==",
+ "dependencies": {
+ "Microsoft.Data.Sqlite.Core": "7.0.5",
+ "SQLitePCLRaw.bundle_e_sqlite3": "2.1.4"
+ }
+ },
+ "Microsoft.Data.Sqlite.Core": {
+ "type": "Transitive",
+ "resolved": "7.0.5",
+ "contentHash": "FTerRmQPqHrCrnoUzhBu+E+1DNGwyrAMLqHkAqOOOu5pGfyMOj8qQUBxI/gDtWtG11p49UxSfWmBzRNlwZqfUg==",
+ "dependencies": {
+ "SQLitePCLRaw.core": "2.1.4"
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "elNeOmkeX3eDVG6pYVeV82p29hr+UKDaBhrZyWvWLw/EVZSYEkZlQdkp0V39k/Xehs2Qa0mvoCvkVj3eQxNQ1Q==",
+ "dependencies": {
+ "Microsoft.Bcl.AsyncInterfaces": "7.0.0",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
+ "System.Threading.Tasks.Extensions": "4.5.4"
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection.Abstractions": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "h3j/QfmFN4S0w4C2A6X7arXij/M/OVw3uQHSOFxnND4DyAzO1F9eMX7Eti7lU/OkSthEE0WzRsfT/Dmx86jzCw==",
+ "dependencies": {
+ "Microsoft.Bcl.AsyncInterfaces": "7.0.0",
+ "System.Threading.Tasks.Extensions": "4.5.4"
+ }
+ },
+ "Microsoft.Extensions.Logging": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "Nw2muoNrOG5U5qa2ZekXwudUn2BJcD41e65zwmDHb1fQegTX66UokLWZkJRpqSSHXDOWZ5V0iqhbxOEky91atA==",
+ "dependencies": {
+ "Microsoft.Bcl.AsyncInterfaces": "7.0.0",
+ "Microsoft.Extensions.DependencyInjection": "7.0.0",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Options": "7.0.0",
+ "System.Diagnostics.DiagnosticSource": "7.0.0",
+ "System.ValueTuple": "4.5.0"
+ }
+ },
+ "Microsoft.Extensions.Logging.Abstractions": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "kmn78+LPVMOWeITUjIlfxUPDsI0R6G0RkeAMBmQxAJ7vBJn4q2dTva7pWi65ceN5vPGjJ9q/Uae2WKgvfktJAw==",
+ "dependencies": {
+ "System.Buffers": "4.5.1",
+ "System.Memory": "4.5.5"
+ }
+ },
+ "Microsoft.Extensions.Options": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "lP1yBnTTU42cKpMozuafbvNtQ7QcBjr/CcK3bYOGEMH55Fjt+iecXjT6chR7vbgCMqy3PG3aNQSZgo/EuY/9qQ==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Primitives": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.Primitives": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "um1KU5kxcRp3CNuI8o/GrZtD4AIOXDk+RLsytjZ9QPok3ttLUelLKpilVPuaFT3TFjOhSibUAso0odbOaCDj3Q==",
+ "dependencies": {
+ "System.Memory": "4.5.5",
+ "System.Runtime.CompilerServices.Unsafe": "6.0.0"
+ }
+ },
+ "Microsoft.Web.WebView2": {
+ "type": "Transitive",
+ "resolved": "1.0.1823.32",
+ "contentHash": "ppRcWBUNggFIqyJp7PfgS4Oe8/7yli/mHcTNDOaqo3ZzJWnv9AOr0WE9ceEP5SPs1M7CQ3QvdGMR7KNz0v09EA=="
+ },
+ "Polly": {
+ "type": "Transitive",
+ "resolved": "7.2.3",
+ "contentHash": "DeCY0OFbNdNxsjntr1gTXHJ5pKUwYzp04Er2LLeN3g6pWhffsGuKVfMBLe1lw7x76HrPkLxKEFxBlpRxS2nDEQ=="
+ },
+ "Polly.Contrib.WaitAndRetry": {
+ "type": "Transitive",
+ "resolved": "1.1.1",
+ "contentHash": "1MUQLiSo4KDkQe6nzQRhIU05lm9jlexX5BVsbuw0SL82ynZ+GzAHQxJVDPVBboxV37Po3SG077aX8DuSy8TkaA=="
+ },
+ "Polly.Extensions.Http": {
+ "type": "Transitive",
+ "resolved": "3.0.0",
+ "contentHash": "drrG+hB3pYFY7w1c3BD+lSGYvH2oIclH8GRSehgfyP5kjnFnHKQuuBhuHLv+PWyFuaTDyk/vfRpnxOzd11+J8g==",
+ "dependencies": {
+ "Polly": "7.1.0"
+ }
+ },
+ "Sentry": {
+ "type": "Transitive",
+ "resolved": "3.33.0",
+ "contentHash": "8vbD2o6IR2wrRrkSiRbnodWGWUOqIlwYtzpjvPNOb5raJdOf+zxMwfS8f6nx9bmrTTfDj7KrCB8C/5OuicAc8A==",
+ "dependencies": {
+ "System.Reflection.Metadata": "5.0.0",
+ "System.Runtime.InteropServices.RuntimeInformation": "4.3.0",
+ "System.Text.Json": "5.0.2"
+ }
+ },
+ "Sentry.Serilog": {
+ "type": "Transitive",
+ "resolved": "3.33.0",
+ "contentHash": "V8BU7QGWg2qLYfNPqtuTBhC1opysny5l+Ifp6J6PhOeAxU0FssR7nYfbJVetrnLIoh2rd3DlJ6hHYYQosQYcUQ==",
+ "dependencies": {
+ "Sentry": "3.33.0",
+ "Serilog": "2.7.1"
+ }
+ },
+ "Serilog": {
+ "type": "Transitive",
+ "resolved": "2.12.0",
+ "contentHash": "xaiJLIdu6rYMKfQMYUZgTy8YK7SMZjB4Yk50C/u//Z4OsvxkUfSPJy4nknfvwAC34yr13q7kcyh4grbwhSxyZg=="
+ },
+ "Serilog.Enrichers.ClientInfo": {
+ "type": "Transitive",
+ "resolved": "1.3.0",
+ "contentHash": "mTc7PM+wC9Hr7LWSwqt5mmnlAr7RJs+eTb3PGPRhwdOackk95MkhUZognuxXEdlW19HAFNmEBTSBY5DfLwM8jQ==",
+ "dependencies": {
+ "Serilog": "2.4.0"
+ }
+ },
+ "Serilog.Exceptions": {
+ "type": "Transitive",
+ "resolved": "8.4.0",
+ "contentHash": "nc/+hUw3lsdo0zCj0KMIybAu7perMx79vu72w0za9Nsi6mWyNkGXxYxakAjWB7nEmYL6zdmhEQRB4oJ2ALUeug==",
+ "dependencies": {
+ "Serilog": "2.8.0"
+ }
+ },
+ "Serilog.Extensions.Logging": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "9faU0zNQqU7I6soVhLUMYaGNpgWv6cKlKb2S5AnS8gXxzW/em5Ladm/6FMrWTnX41cdbdGPOWNAo6adi4WaJ6A==",
+ "dependencies": {
+ "Microsoft.Extensions.Logging": "7.0.0",
+ "Serilog": "2.12.0"
+ }
+ },
+ "Serilog.Formatting.Compact": {
+ "type": "Transitive",
+ "resolved": "1.1.0",
+ "contentHash": "pNroKVjo+rDqlxNG5PXkRLpfSCuDOBY0ri6jp9PLe505ljqwhwZz8ospy2vWhQlFu5GkIesh3FcDs4n7sWZODA==",
+ "dependencies": {
+ "Serilog": "2.8.0"
+ }
+ },
+ "Serilog.Sinks.Console": {
+ "type": "Transitive",
+ "resolved": "4.1.0",
+ "contentHash": "K6N5q+5fetjnJPvCmkWOpJ/V8IEIoMIB1s86OzBrbxwTyHxdx3pmz4H+8+O/Dc/ftUX12DM1aynx/dDowkwzqg==",
+ "dependencies": {
+ "Serilog": "2.10.0"
+ }
+ },
+ "Serilog.Sinks.File": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "uwV5hdhWPwUH1szhO8PJpFiahqXmzPzJT/sOijH/kFgUx+cyoDTMM8MHD0adw9+Iem6itoibbUXHYslzXsLEAg==",
+ "dependencies": {
+ "Serilog": "2.10.0"
+ }
+ },
+ "Serilog.Sinks.PeriodicBatching": {
+ "type": "Transitive",
+ "resolved": "3.1.0",
+ "contentHash": "NDWR7m3PalVlGEq3rzoktrXikjFMLmpwF0HI4sowo8YDdU+gqPlTHlDQiOGxHfB0sTfjPA9JjA7ctKG9zqjGkw==",
+ "dependencies": {
+ "Serilog": "2.0.0"
+ }
+ },
+ "Serilog.Sinks.Seq": {
+ "type": "Transitive",
+ "resolved": "5.2.2",
+ "contentHash": "1Csmo5ua7NKUe0yXUx+zsRefjAniPWcXFhUXxXG8pwo0iMiw2gjn9SOkgYnnxbgWqmlGv236w0N/dHc2v5XwMg==",
+ "dependencies": {
+ "Serilog": "2.12.0",
+ "Serilog.Formatting.Compact": "1.1.0",
+ "Serilog.Sinks.File": "5.0.0",
+ "Serilog.Sinks.PeriodicBatching": "3.1.0"
+ }
+ },
+ "SerilogTimings": {
+ "type": "Transitive",
+ "resolved": "3.0.1",
+ "contentHash": "Zs28eTgszAMwpIrbBnWHBI50yuxL50p/dmAUWmy75+axdZYK/Sjm5/5m1N/CisR8acJUhTVcjPZrsB1P5iv0Uw==",
+ "dependencies": {
+ "Serilog": "2.10.0"
+ }
+ },
+ "Speckle.Newtonsoft.Json": {
+ "type": "Transitive",
+ "resolved": "13.0.2",
+ "contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA=="
+ },
+ "SQLitePCLRaw.bundle_e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.4",
+ "contentHash": "EWI1olKDjFEBMJu0+3wuxwziIAdWDVMYLhuZ3Qs84rrz+DHwD00RzWPZCa+bLnHCf3oJwuFZIRsHT5p236QXww==",
+ "dependencies": {
+ "SQLitePCLRaw.lib.e_sqlite3": "2.1.4",
+ "SQLitePCLRaw.provider.dynamic_cdecl": "2.1.4"
+ }
+ },
+ "SQLitePCLRaw.core": {
+ "type": "Transitive",
+ "resolved": "2.1.4",
+ "contentHash": "inBjvSHo9UDKneGNzfUfDjK08JzlcIhn1+SP5Y3m6cgXpCxXKCJDy6Mka7LpgSV+UZmKSnC8rTwB0SQ0xKu5pA==",
+ "dependencies": {
+ "System.Memory": "4.5.3"
+ }
+ },
+ "SQLitePCLRaw.lib.e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.4",
+ "contentHash": "2C9Q9eX7CPLveJA0rIhf9RXAvu+7nWZu1A2MdG6SD/NOu26TakGgL1nsbc0JAspGijFOo3HoN79xrx8a368fBg=="
+ },
+ "SQLitePCLRaw.provider.dynamic_cdecl": {
+ "type": "Transitive",
+ "resolved": "2.1.4",
+ "contentHash": "ZsaKKhgYF9B1fvcnOGKl3EycNAwd9CRWX7v0rEfuPWhQQ5Jjpvf2VEHahiLIGHio3hxi3EIKFJw9KvyowWOUAw==",
+ "dependencies": {
+ "SQLitePCLRaw.core": "2.1.4"
+ }
+ },
+ "System.Buffers": {
+ "type": "Transitive",
+ "resolved": "4.5.1",
+ "contentHash": "Rw7ijyl1qqRS0YQD/WycNst8hUUMgrMH4FCn1nNm27M4VxchZ1js3fVjQaANHO5f3sN4isvP4a+Met9Y4YomAg=="
+ },
+ "System.Collections.Immutable": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "FXkLXiK0sVVewcso0imKQoOxjoPAj42R8HtjjbSjVPAzwDfzoyoznWxgA3c38LDbN9SJux1xXoXYAhz98j7r2g==",
+ "dependencies": {
+ "System.Memory": "4.5.4"
+ }
+ },
+ "System.Diagnostics.DiagnosticSource": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "9W0ewWDuAyDqS2PigdTxk6jDKonfgscY/hP8hm7VpxYhNHZHKvZTdRckberlFk3VnCmr3xBUyMBut12Q+T2aOw==",
+ "dependencies": {
+ "System.Memory": "4.5.5",
+ "System.Runtime.CompilerServices.Unsafe": "6.0.0"
+ }
+ },
+ "System.DoubleNumerics": {
+ "type": "Transitive",
+ "resolved": "3.1.3",
+ "contentHash": "KRKEM/L3KBodjA9VOg3EifFVWUY6EOqaMB05UvPEDm7Zeby/kZW+4kdWUEPzW6xtkwf46p661L9NrbeeQhtLzw==",
+ "dependencies": {
+ "NETStandard.Library": "1.6.1"
+ }
+ },
+ "System.Memory": {
+ "type": "Transitive",
+ "resolved": "4.5.5",
+ "contentHash": "XIWiDvKPXaTveaB7HVganDlOCRoj03l+jrwNvcge/t8vhGYKvqV+dMv6G4SAX2NoNmN0wZfVPTAlFwZcZvVOUw==",
+ "dependencies": {
+ "System.Buffers": "4.5.1",
+ "System.Numerics.Vectors": "4.5.0",
+ "System.Runtime.CompilerServices.Unsafe": "4.5.3"
+ }
+ },
+ "System.Net.WebSockets.Client.Managed": {
+ "type": "Transitive",
+ "resolved": "1.0.22",
+ "contentHash": "WqEOxPlXjuZrIjUtXNE9NxEfU/n5E35iV2PtoZdJSUC4tlrqwHnTee+wvMIM4OUaJWmwrymeqcgYrE0IkGAgLA==",
+ "dependencies": {
+ "System.Buffers": "4.4.0",
+ "System.Numerics.Vectors": "4.4.0"
+ }
+ },
+ "System.Numerics.Vectors": {
+ "type": "Transitive",
+ "resolved": "4.5.0",
+ "contentHash": "QQTlPTl06J/iiDbJCiepZ4H//BVraReU4O4EoRw1U02H5TLUIT7xn3GnDp9AXPSlJUDyFs4uWjWafNX6WrAojQ=="
+ },
+ "System.Reactive": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ==",
+ "dependencies": {
+ "System.Threading.Tasks.Extensions": "4.5.4"
+ }
+ },
+ "System.Reflection.Emit": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "228FG0jLcIwTVJyz8CLFKueVqQK36ANazUManGaJHkO0icjiIypKW7YLWLIWahyIkdh5M7mV2dJepllLyA1SKg=="
+ },
+ "System.Reflection.Metadata": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "5NecZgXktdGg34rh1OenY1rFNDCI8xSjFr+Z4OU4cU06AQHUdRnIIEeWENu3Wl4YowbzkymAIMvi3WyK9U53pQ==",
+ "dependencies": {
+ "System.Collections.Immutable": "5.0.0"
+ }
+ },
+ "System.Runtime.CompilerServices.Unsafe": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg=="
+ },
+ "System.Runtime.InteropServices.RuntimeInformation": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "cbz4YJMqRDR7oLeMRbdYv7mYzc++17lNhScCX0goO2XpGWdvAt60CGN+FHdePUEHCe/Jy9jUlvNAiNdM+7jsOw=="
+ },
+ "System.Text.Encodings.Web": {
+ "type": "Transitive",
+ "resolved": "5.0.1",
+ "contentHash": "KmJ+CJXizDofbq6mpqDoRRLcxgOd2z9X3XoFNULSbvbqVRZkFX3istvr+MUjL6Zw1RT+RNdoI4GYidIINtgvqQ==",
+ "dependencies": {
+ "System.Buffers": "4.5.1",
+ "System.Memory": "4.5.4"
+ }
+ },
+ "System.Text.Json": {
+ "type": "Transitive",
+ "resolved": "5.0.2",
+ "contentHash": "I47dVIGiV6SfAyppphxqupertT/5oZkYLDCX6vC3HpOI4ZLjyoKAreUoem2ie6G0RbRuFrlqz/PcTQjfb2DOfQ==",
+ "dependencies": {
+ "Microsoft.Bcl.AsyncInterfaces": "5.0.0",
+ "System.Buffers": "4.5.1",
+ "System.Memory": "4.5.4",
+ "System.Numerics.Vectors": "4.5.0",
+ "System.Runtime.CompilerServices.Unsafe": "5.0.0",
+ "System.Text.Encodings.Web": "5.0.1",
+ "System.Threading.Tasks.Extensions": "4.5.4",
+ "System.ValueTuple": "4.5.0"
+ }
+ },
+ "System.Threading.Tasks.Dataflow": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "+tyDCU3/B1lDdOOAJywHQoFwyXIUghIaP2BxG79uvhfTnO+D9qIgjVlL/JV2NTliYbMHpd6eKDmHp2VHpij7MA=="
+ },
+ "System.Threading.Tasks.Extensions": {
+ "type": "Transitive",
+ "resolved": "4.5.4",
+ "contentHash": "zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg==",
+ "dependencies": {
+ "System.Runtime.CompilerServices.Unsafe": "4.5.3"
+ }
+ },
+ "System.ValueTuple": {
+ "type": "Transitive",
+ "resolved": "4.5.0",
+ "contentHash": "okurQJO6NRE/apDIP23ajJ0hpiNmJ+f0BwOlB/cSqTLQlw5upkf+5+96+iG2Jw40G1fCVCyPz/FhIABUjMR+RQ=="
+ },
+ "speckle.autofac": {
+ "type": "Project",
+ "dependencies": {
+ "Microsoft.Extensions.Logging.Abstractions": "[7.0.0, )",
+ "Speckle.Core": "[2.0.999-local, )"
+ }
+ },
+ "speckle.connectors.dui": {
+ "type": "Project",
+ "dependencies": {
+ "Microsoft.Extensions.Logging.Abstractions": "[7.0.0, )",
+ "Speckle.Autofac": "[2.0.999-local, )",
+ "Speckle.Connectors.Utils": "[2.0.999-local, )",
+ "Speckle.Core": "[2.0.999-local, )",
+ "System.Threading.Tasks.Dataflow": "[6.0.0, )"
+ }
+ },
+ "speckle.connectors.dui.webview": {
+ "type": "Project",
+ "dependencies": {
+ "Microsoft.Web.WebView2": "[1.0.1823.32, )",
+ "Speckle.Connectors.DUI": "[2.0.999-local, )"
+ }
+ },
+ "speckle.connectors.utils": {
+ "type": "Project",
+ "dependencies": {
+ "Serilog.Extensions.Logging": "[7.0.0, )",
+ "Speckle.Autofac": "[2.0.999-local, )",
+ "Speckle.Core": "[2.0.999-local, )"
+ }
+ },
+ "speckle.converters.common": {
+ "type": "Project",
+ "dependencies": {
+ "Speckle.Autofac": "[2.0.999-local, )",
+ "Speckle.Objects": "[2.0.999-local, )"
+ }
+ },
+ "speckle.converters.common.dependencyinjection": {
+ "type": "Project",
+ "dependencies": {
+ "Speckle.Autofac": "[2.0.999-local, )",
+ "Speckle.Converters.Common": "[2.0.999-local, )"
+ }
+ },
+ "speckle.converters.rhino7.dependencyinjection": {
+ "type": "Project",
+ "dependencies": {
+ "Speckle.Rhino7.Interfaces": "[0.1.1-preview.0.29, )"
+ }
+ },
+ "Speckle.Core": {
+ "type": "Project",
+ "dependencies": {
+ "GraphQL.Client": "[6.0.0, )",
+ "Microsoft.CSharp": "[4.7.0, )",
+ "Microsoft.Data.Sqlite": "[7.0.5, )",
+ "Polly": "[7.2.3, )",
+ "Polly.Contrib.WaitAndRetry": "[1.1.1, )",
+ "Polly.Extensions.Http": "[3.0.0, )",
+ "Sentry": "[3.33.0, )",
+ "Sentry.Serilog": "[3.33.0, )",
+ "Serilog": "[2.12.0, )",
+ "Serilog.Enrichers.ClientInfo": "[1.3.0, )",
+ "Serilog.Exceptions": "[8.4.0, )",
+ "Serilog.Sinks.Console": "[4.1.0, )",
+ "Serilog.Sinks.Seq": "[5.2.2, )",
+ "SerilogTimings": "[3.0.1, )",
+ "Speckle.Newtonsoft.Json": "[13.0.2, )",
+ "System.DoubleNumerics": "[3.1.3, )"
+ }
+ },
+ "Speckle.Objects": {
+ "type": "Project",
+ "dependencies": {
+ "Speckle.Core": "[2.0.999-local, )"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/DUI3-DX/Converters/ArcGIS/Speckle.Converters.ArcGIS3.DependencyInjection/packages.lock.json b/DUI3-DX/Converters/ArcGIS/Speckle.Converters.ArcGIS3.DependencyInjection/packages.lock.json
new file mode 100644
index 0000000000..acad1bb553
--- /dev/null
+++ b/DUI3-DX/Converters/ArcGIS/Speckle.Converters.ArcGIS3.DependencyInjection/packages.lock.json
@@ -0,0 +1,403 @@
+{
+ "version": 1,
+ "dependencies": {
+ "net6.0-windows7.0": {
+ "Autofac": {
+ "type": "Direct",
+ "requested": "[5.2.0, )",
+ "resolved": "5.2.0",
+ "contentHash": "V8dBH0dsv75uDzl7Sw+HkhKDPUw2eXnlMjcSVMH+tLo2s67MpTKGyDj1pDcpR+IF2u4YRs0s3/x7R88YJzIWvg=="
+ },
+ "PolySharp": {
+ "type": "Direct",
+ "requested": "[1.14.1, )",
+ "resolved": "1.14.1",
+ "contentHash": "mOOmFYwad3MIOL14VCjj02LljyF1GNw1wP0YVlxtcPvqdxjGGMNdNJJxHptlry3MOd8b40Flm8RPOM8JOlN2sQ=="
+ },
+ "Speckle.InterfaceGenerator": {
+ "type": "Direct",
+ "requested": "[0.9.5, )",
+ "resolved": "0.9.5",
+ "contentHash": "oU/L7pN1R7q8KkbrpQ3WJnHirPHqn+9DEA7asOcUiggV5dzVg1A/VYs7GOSusD24njxXh03tE3a2oTLOjt3cVg=="
+ },
+ "Esri.ArcGISPro.Extensions30": {
+ "type": "Transitive",
+ "resolved": "3.2.0.49743",
+ "contentHash": "fmnYm+mD14Cz0Uqh1ij37SfLJerkyFHK5581y5tXT/l3H2ZvUmVuuxjYquXzyzj9p7IexQzMW4xCpxe+mD922g=="
+ },
+ "GraphQL.Client": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "8yPNBbuVBpTptivyAlak4GZvbwbUcjeQTL4vN1HKHRuOykZ4r7l5fcLS6vpyPyLn0x8FsL31xbOIKyxbmR9rbA==",
+ "dependencies": {
+ "GraphQL.Client.Abstractions": "6.0.0",
+ "GraphQL.Client.Abstractions.Websocket": "6.0.0",
+ "System.Reactive": "5.0.0"
+ }
+ },
+ "GraphQL.Client.Abstractions": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "h7uzWFORHZ+CCjwr/ThAyXMr0DPpzEANDa4Uo54wqCQ+j7qUKwqYTgOrb1W40sqbvNaZm9v/X7It31SUw0maHA==",
+ "dependencies": {
+ "GraphQL.Primitives": "6.0.0"
+ }
+ },
+ "GraphQL.Client.Abstractions.Websocket": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "Nr9bPf8gIOvLuXpqEpqr9z9jslYFJOvd0feHth3/kPqeR3uMbjF5pjiwh4jxyMcxHdr8Pb6QiXkV3hsSyt0v7A==",
+ "dependencies": {
+ "GraphQL.Client.Abstractions": "6.0.0"
+ }
+ },
+ "GraphQL.Primitives": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "yg72rrYDapfsIUrul7aF6wwNnTJBOFvuA9VdDTQpPa8AlAriHbufeXYLBcodKjfUdkCnaiggX1U/nEP08Zb5GA=="
+ },
+ "Microsoft.AspNetCore.Http": {
+ "type": "Transitive",
+ "resolved": "2.2.2",
+ "contentHash": "BAibpoItxI5puk7YJbIGj95arZueM8B8M5xT1fXBn3hb3L2G3ucrZcYXv1gXdaroLbntUs8qeV8iuBrpjQsrKw==",
+ "dependencies": {
+ "Microsoft.AspNetCore.Http.Abstractions": "2.2.0",
+ "Microsoft.AspNetCore.WebUtilities": "2.2.0",
+ "Microsoft.Extensions.ObjectPool": "2.2.0",
+ "Microsoft.Extensions.Options": "2.2.0",
+ "Microsoft.Net.Http.Headers": "2.2.0"
+ }
+ },
+ "Microsoft.AspNetCore.Http.Abstractions": {
+ "type": "Transitive",
+ "resolved": "2.2.0",
+ "contentHash": "Nxs7Z1q3f1STfLYKJSVXCs1iBl+Ya6E8o4Oy1bCxJ/rNI44E/0f6tbsrVqAWfB7jlnJfyaAtIalBVxPKUPQb4Q==",
+ "dependencies": {
+ "Microsoft.AspNetCore.Http.Features": "2.2.0",
+ "System.Text.Encodings.Web": "4.5.0"
+ }
+ },
+ "Microsoft.AspNetCore.Http.Features": {
+ "type": "Transitive",
+ "resolved": "2.2.0",
+ "contentHash": "ziFz5zH8f33En4dX81LW84I6XrYXKf9jg6aM39cM+LffN9KJahViKZ61dGMSO2gd3e+qe5yBRwsesvyqlZaSMg==",
+ "dependencies": {
+ "Microsoft.Extensions.Primitives": "2.2.0"
+ }
+ },
+ "Microsoft.AspNetCore.WebUtilities": {
+ "type": "Transitive",
+ "resolved": "2.2.0",
+ "contentHash": "9ErxAAKaDzxXASB/b5uLEkLgUWv1QbeVxyJYEHQwMaxXOeFFVkQxiq8RyfVcifLU7NR0QY0p3acqx4ZpYfhHDg==",
+ "dependencies": {
+ "Microsoft.Net.Http.Headers": "2.2.0",
+ "System.Text.Encodings.Web": "4.5.0"
+ }
+ },
+ "Microsoft.CSharp": {
+ "type": "Transitive",
+ "resolved": "4.7.0",
+ "contentHash": "pTj+D3uJWyN3My70i2Hqo+OXixq3Os2D1nJ2x92FFo6sk8fYS1m1WLNTs0Dc1uPaViH0YvEEwvzddQ7y4rhXmA=="
+ },
+ "Microsoft.Data.Sqlite": {
+ "type": "Transitive",
+ "resolved": "7.0.5",
+ "contentHash": "KGxbPeWsQMnmQy43DSBxAFtHz3l2JX8EWBSGUCvT3CuZ8KsuzbkqMIJMDOxWtG8eZSoCDI04aiVQjWuuV8HmSw==",
+ "dependencies": {
+ "Microsoft.Data.Sqlite.Core": "7.0.5",
+ "SQLitePCLRaw.bundle_e_sqlite3": "2.1.4"
+ }
+ },
+ "Microsoft.Data.Sqlite.Core": {
+ "type": "Transitive",
+ "resolved": "7.0.5",
+ "contentHash": "FTerRmQPqHrCrnoUzhBu+E+1DNGwyrAMLqHkAqOOOu5pGfyMOj8qQUBxI/gDtWtG11p49UxSfWmBzRNlwZqfUg==",
+ "dependencies": {
+ "SQLitePCLRaw.core": "2.1.4"
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection.Abstractions": {
+ "type": "Transitive",
+ "resolved": "2.2.0",
+ "contentHash": "f9hstgjVmr6rmrfGSpfsVOl2irKAgr1QjrSi3FgnS7kulxband50f2brRLwySAQTADPZeTdow0mpSMcoAdadCw=="
+ },
+ "Microsoft.Extensions.Logging.Abstractions": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "kmn78+LPVMOWeITUjIlfxUPDsI0R6G0RkeAMBmQxAJ7vBJn4q2dTva7pWi65ceN5vPGjJ9q/Uae2WKgvfktJAw=="
+ },
+ "Microsoft.Extensions.ObjectPool": {
+ "type": "Transitive",
+ "resolved": "2.2.0",
+ "contentHash": "gA8H7uQOnM5gb+L0uTNjViHYr+hRDqCdfugheGo/MxQnuHzmhhzCBTIPm19qL1z1Xe0NEMabfcOBGv9QghlZ8g=="
+ },
+ "Microsoft.Extensions.Options": {
+ "type": "Transitive",
+ "resolved": "2.2.0",
+ "contentHash": "UpZLNLBpIZ0GTebShui7xXYh6DmBHjWM8NxGxZbdQh/bPZ5e6YswqI+bru6BnEL5eWiOdodsXtEz3FROcgi/qg==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0",
+ "Microsoft.Extensions.Primitives": "2.2.0",
+ "System.ComponentModel.Annotations": "4.5.0"
+ }
+ },
+ "Microsoft.Extensions.Primitives": {
+ "type": "Transitive",
+ "resolved": "2.2.0",
+ "contentHash": "azyQtqbm4fSaDzZHD/J+V6oWMFaf2tWP4WEGIYePLCMw3+b2RQdj9ybgbQyjCshcitQKQ4lEDOZjmSlTTrHxUg==",
+ "dependencies": {
+ "System.Memory": "4.5.1",
+ "System.Runtime.CompilerServices.Unsafe": "4.5.1"
+ }
+ },
+ "Microsoft.Net.Http.Headers": {
+ "type": "Transitive",
+ "resolved": "2.2.0",
+ "contentHash": "iZNkjYqlo8sIOI0bQfpsSoMTmB/kyvmV2h225ihyZT33aTp48ZpF6qYnXxzSXmHt8DpBAwBTX+1s1UFLbYfZKg==",
+ "dependencies": {
+ "Microsoft.Extensions.Primitives": "2.2.0",
+ "System.Buffers": "4.5.0"
+ }
+ },
+ "Polly": {
+ "type": "Transitive",
+ "resolved": "7.2.3",
+ "contentHash": "DeCY0OFbNdNxsjntr1gTXHJ5pKUwYzp04Er2LLeN3g6pWhffsGuKVfMBLe1lw7x76HrPkLxKEFxBlpRxS2nDEQ=="
+ },
+ "Polly.Contrib.WaitAndRetry": {
+ "type": "Transitive",
+ "resolved": "1.1.1",
+ "contentHash": "1MUQLiSo4KDkQe6nzQRhIU05lm9jlexX5BVsbuw0SL82ynZ+GzAHQxJVDPVBboxV37Po3SG077aX8DuSy8TkaA=="
+ },
+ "Polly.Extensions.Http": {
+ "type": "Transitive",
+ "resolved": "3.0.0",
+ "contentHash": "drrG+hB3pYFY7w1c3BD+lSGYvH2oIclH8GRSehgfyP5kjnFnHKQuuBhuHLv+PWyFuaTDyk/vfRpnxOzd11+J8g==",
+ "dependencies": {
+ "Polly": "7.1.0"
+ }
+ },
+ "Sentry": {
+ "type": "Transitive",
+ "resolved": "3.33.0",
+ "contentHash": "8vbD2o6IR2wrRrkSiRbnodWGWUOqIlwYtzpjvPNOb5raJdOf+zxMwfS8f6nx9bmrTTfDj7KrCB8C/5OuicAc8A=="
+ },
+ "Sentry.Serilog": {
+ "type": "Transitive",
+ "resolved": "3.33.0",
+ "contentHash": "V8BU7QGWg2qLYfNPqtuTBhC1opysny5l+Ifp6J6PhOeAxU0FssR7nYfbJVetrnLIoh2rd3DlJ6hHYYQosQYcUQ==",
+ "dependencies": {
+ "Sentry": "3.33.0",
+ "Serilog": "2.10.0"
+ }
+ },
+ "Serilog": {
+ "type": "Transitive",
+ "resolved": "2.12.0",
+ "contentHash": "xaiJLIdu6rYMKfQMYUZgTy8YK7SMZjB4Yk50C/u//Z4OsvxkUfSPJy4nknfvwAC34yr13q7kcyh4grbwhSxyZg=="
+ },
+ "Serilog.Enrichers.ClientInfo": {
+ "type": "Transitive",
+ "resolved": "1.3.0",
+ "contentHash": "mTc7PM+wC9Hr7LWSwqt5mmnlAr7RJs+eTb3PGPRhwdOackk95MkhUZognuxXEdlW19HAFNmEBTSBY5DfLwM8jQ==",
+ "dependencies": {
+ "Microsoft.AspNetCore.Http": "2.2.2",
+ "Serilog": "2.9.0"
+ }
+ },
+ "Serilog.Exceptions": {
+ "type": "Transitive",
+ "resolved": "8.4.0",
+ "contentHash": "nc/+hUw3lsdo0zCj0KMIybAu7perMx79vu72w0za9Nsi6mWyNkGXxYxakAjWB7nEmYL6zdmhEQRB4oJ2ALUeug==",
+ "dependencies": {
+ "Serilog": "2.8.0",
+ "System.Reflection.TypeExtensions": "4.7.0"
+ }
+ },
+ "Serilog.Formatting.Compact": {
+ "type": "Transitive",
+ "resolved": "1.1.0",
+ "contentHash": "pNroKVjo+rDqlxNG5PXkRLpfSCuDOBY0ri6jp9PLe505ljqwhwZz8ospy2vWhQlFu5GkIesh3FcDs4n7sWZODA==",
+ "dependencies": {
+ "Serilog": "2.8.0"
+ }
+ },
+ "Serilog.Sinks.Console": {
+ "type": "Transitive",
+ "resolved": "4.1.0",
+ "contentHash": "K6N5q+5fetjnJPvCmkWOpJ/V8IEIoMIB1s86OzBrbxwTyHxdx3pmz4H+8+O/Dc/ftUX12DM1aynx/dDowkwzqg==",
+ "dependencies": {
+ "Serilog": "2.10.0"
+ }
+ },
+ "Serilog.Sinks.File": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "uwV5hdhWPwUH1szhO8PJpFiahqXmzPzJT/sOijH/kFgUx+cyoDTMM8MHD0adw9+Iem6itoibbUXHYslzXsLEAg==",
+ "dependencies": {
+ "Serilog": "2.10.0"
+ }
+ },
+ "Serilog.Sinks.PeriodicBatching": {
+ "type": "Transitive",
+ "resolved": "3.1.0",
+ "contentHash": "NDWR7m3PalVlGEq3rzoktrXikjFMLmpwF0HI4sowo8YDdU+gqPlTHlDQiOGxHfB0sTfjPA9JjA7ctKG9zqjGkw==",
+ "dependencies": {
+ "Serilog": "2.0.0"
+ }
+ },
+ "Serilog.Sinks.Seq": {
+ "type": "Transitive",
+ "resolved": "5.2.2",
+ "contentHash": "1Csmo5ua7NKUe0yXUx+zsRefjAniPWcXFhUXxXG8pwo0iMiw2gjn9SOkgYnnxbgWqmlGv236w0N/dHc2v5XwMg==",
+ "dependencies": {
+ "Serilog": "2.12.0",
+ "Serilog.Formatting.Compact": "1.1.0",
+ "Serilog.Sinks.File": "5.0.0",
+ "Serilog.Sinks.PeriodicBatching": "3.1.0"
+ }
+ },
+ "SerilogTimings": {
+ "type": "Transitive",
+ "resolved": "3.0.1",
+ "contentHash": "Zs28eTgszAMwpIrbBnWHBI50yuxL50p/dmAUWmy75+axdZYK/Sjm5/5m1N/CisR8acJUhTVcjPZrsB1P5iv0Uw==",
+ "dependencies": {
+ "Serilog": "2.10.0"
+ }
+ },
+ "Speckle.Newtonsoft.Json": {
+ "type": "Transitive",
+ "resolved": "13.0.2",
+ "contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA=="
+ },
+ "SQLitePCLRaw.bundle_e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.4",
+ "contentHash": "EWI1olKDjFEBMJu0+3wuxwziIAdWDVMYLhuZ3Qs84rrz+DHwD00RzWPZCa+bLnHCf3oJwuFZIRsHT5p236QXww==",
+ "dependencies": {
+ "SQLitePCLRaw.lib.e_sqlite3": "2.1.4",
+ "SQLitePCLRaw.provider.e_sqlite3": "2.1.4"
+ }
+ },
+ "SQLitePCLRaw.core": {
+ "type": "Transitive",
+ "resolved": "2.1.4",
+ "contentHash": "inBjvSHo9UDKneGNzfUfDjK08JzlcIhn1+SP5Y3m6cgXpCxXKCJDy6Mka7LpgSV+UZmKSnC8rTwB0SQ0xKu5pA==",
+ "dependencies": {
+ "System.Memory": "4.5.3"
+ }
+ },
+ "SQLitePCLRaw.lib.e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.4",
+ "contentHash": "2C9Q9eX7CPLveJA0rIhf9RXAvu+7nWZu1A2MdG6SD/NOu26TakGgL1nsbc0JAspGijFOo3HoN79xrx8a368fBg=="
+ },
+ "SQLitePCLRaw.provider.e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.4",
+ "contentHash": "CSlb5dUp1FMIkez9Iv5EXzpeq7rHryVNqwJMWnpq87j9zWZexaEMdisDktMsnnrzKM6ahNrsTkjqNodTBPBxtQ==",
+ "dependencies": {
+ "SQLitePCLRaw.core": "2.1.4"
+ }
+ },
+ "System.Buffers": {
+ "type": "Transitive",
+ "resolved": "4.5.0",
+ "contentHash": "pL2ChpaRRWI/p4LXyy4RgeWlYF2sgfj/pnVMvBqwNFr5cXg7CXNnWZWxrOONLg8VGdFB8oB+EG2Qw4MLgTOe+A=="
+ },
+ "System.ComponentModel.Annotations": {
+ "type": "Transitive",
+ "resolved": "4.5.0",
+ "contentHash": "UxYQ3FGUOtzJ7LfSdnYSFd7+oEv6M8NgUatatIN2HxNtDdlcvFAf+VIq4Of9cDMJEJC0aSRv/x898RYhB4Yppg=="
+ },
+ "System.DoubleNumerics": {
+ "type": "Transitive",
+ "resolved": "3.1.3",
+ "contentHash": "KRKEM/L3KBodjA9VOg3EifFVWUY6EOqaMB05UvPEDm7Zeby/kZW+4kdWUEPzW6xtkwf46p661L9NrbeeQhtLzw==",
+ "dependencies": {
+ "NETStandard.Library": "1.6.1"
+ }
+ },
+ "System.Memory": {
+ "type": "Transitive",
+ "resolved": "4.5.3",
+ "contentHash": "3oDzvc/zzetpTKWMShs1AADwZjQ/36HnsufHRPcOjyRAAMLDlu2iD33MBI2opxnezcVUtXyqDXXjoFMOU9c7SA=="
+ },
+ "System.Reactive": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ=="
+ },
+ "System.Reflection.TypeExtensions": {
+ "type": "Transitive",
+ "resolved": "4.7.0",
+ "contentHash": "VybpaOQQhqE6siHppMktjfGBw1GCwvCqiufqmP8F1nj7fTUNtW35LOEt3UZTEsECfo+ELAl/9o9nJx3U91i7vA=="
+ },
+ "System.Runtime.CompilerServices.Unsafe": {
+ "type": "Transitive",
+ "resolved": "4.5.1",
+ "contentHash": "Zh8t8oqolRaFa9vmOZfdQm/qKejdqz0J9kr7o2Fu0vPeoH3BL1EOXipKWwkWtLT1JPzjByrF19fGuFlNbmPpiw=="
+ },
+ "System.Text.Encodings.Web": {
+ "type": "Transitive",
+ "resolved": "4.5.0",
+ "contentHash": "Xg4G4Indi4dqP1iuAiMSwpiWS54ZghzR644OtsRCm/m/lBMG8dUBhLVN7hLm8NNrNTR+iGbshCPTwrvxZPlm4g=="
+ },
+ "speckle.autofac": {
+ "type": "Project",
+ "dependencies": {
+ "Microsoft.Extensions.Logging.Abstractions": "[7.0.0, )",
+ "Speckle.Core": "[2.0.999-local, )"
+ }
+ },
+ "speckle.converters.arcgis3": {
+ "type": "Project",
+ "dependencies": {
+ "Esri.ArcGISPro.Extensions30": "[3.2.0.49743, )",
+ "Speckle.Converters.Common": "[2.0.999-local, )"
+ }
+ },
+ "speckle.converters.common": {
+ "type": "Project",
+ "dependencies": {
+ "Speckle.Autofac": "[2.0.999-local, )",
+ "Speckle.Objects": "[2.0.999-local, )"
+ }
+ },
+ "speckle.converters.common.dependencyinjection": {
+ "type": "Project",
+ "dependencies": {
+ "Speckle.Autofac": "[2.0.999-local, )",
+ "Speckle.Converters.Common": "[2.0.999-local, )"
+ }
+ },
+ "Speckle.Core": {
+ "type": "Project",
+ "dependencies": {
+ "GraphQL.Client": "[6.0.0, )",
+ "Microsoft.CSharp": "[4.7.0, )",
+ "Microsoft.Data.Sqlite": "[7.0.5, )",
+ "Polly": "[7.2.3, )",
+ "Polly.Contrib.WaitAndRetry": "[1.1.1, )",
+ "Polly.Extensions.Http": "[3.0.0, )",
+ "Sentry": "[3.33.0, )",
+ "Sentry.Serilog": "[3.33.0, )",
+ "Serilog": "[2.12.0, )",
+ "Serilog.Enrichers.ClientInfo": "[1.3.0, )",
+ "Serilog.Exceptions": "[8.4.0, )",
+ "Serilog.Sinks.Console": "[4.1.0, )",
+ "Serilog.Sinks.Seq": "[5.2.2, )",
+ "SerilogTimings": "[3.0.1, )",
+ "Speckle.Newtonsoft.Json": "[13.0.2, )",
+ "System.DoubleNumerics": "[3.1.3, )"
+ }
+ },
+ "Speckle.Objects": {
+ "type": "Project",
+ "dependencies": {
+ "Speckle.Core": "[2.0.999-local, )"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/DUI3-DX/Converters/ArcGIS/Speckle.Converters.ArcGIS3/Utils/ArcGISFieldUtils.cs b/DUI3-DX/Converters/ArcGIS/Speckle.Converters.ArcGIS3/Utils/ArcGISFieldUtils.cs
index 1f98758611..aff09a3d2c 100644
--- a/DUI3-DX/Converters/ArcGIS/Speckle.Converters.ArcGIS3/Utils/ArcGISFieldUtils.cs
+++ b/DUI3-DX/Converters/ArcGIS/Speckle.Converters.ArcGIS3/Utils/ArcGISFieldUtils.cs
@@ -1,6 +1,8 @@
+using System.Collections;
using ArcGIS.Core.Data;
using ArcGIS.Core.Data.Exceptions;
using Objects.GIS;
+using Speckle.Core.Logging;
using Speckle.Core.Models;
using FieldDescription = ArcGIS.Core.Data.DDL.FieldDescription;
@@ -16,38 +18,39 @@ public ArcGISFieldUtils(ICharacterCleaner characterCleaner)
_characterCleaner = characterCleaner;
}
- public RowBuffer AssignFieldValuesToRow(RowBuffer rowBuffer, List fields, GisFeature feat)
+ public RowBuffer AssignFieldValuesToRow(
+ RowBuffer rowBuffer,
+ List fields,
+ Dictionary attributes
+ )
{
foreach (FieldDescription field in fields)
{
// try to assign values to writeable fields
- if (feat.attributes is not null)
+ if (attributes is not null)
{
string key = field.AliasName; // use Alias, as Name is simplified to alphanumeric
FieldType fieldType = field.FieldType;
- var value = feat.attributes[key];
- if (value is not null)
+ var value = attributes[key];
+
+ try
{
- // POC: get all values in a correct format
- try
- {
- rowBuffer[key] = GISAttributeFieldType.SpeckleValueToNativeFieldType(fieldType, value);
- }
- catch (GeodatabaseFeatureException)
- {
- //'The value type is incompatible.'
- // log error!
- rowBuffer[key] = null;
- }
- catch (GeodatabaseFieldException)
- {
- // non-editable Field, do nothing
- }
+ rowBuffer[key] = GISAttributeFieldType.SpeckleValueToNativeFieldType(fieldType, value);
}
- else
+ catch (GeodatabaseFeatureException)
{
+ //'The value type is incompatible.'
+ // log error!
rowBuffer[key] = null;
}
+ catch (GeodatabaseFieldException)
+ {
+ // non-editable Field, do nothing
+ }
+ catch (GeodatabaseGeneralException)
+ {
+ // The index passed was not within the valid range. // unclear reason of the error
+ }
}
}
return rowBuffer;
@@ -88,4 +91,186 @@ public List GetFieldsFromSpeckleLayer(VectorLayer target)
}
return fields;
}
+
+ public List<(FieldDescription, Func)> CreateFieldsFromListOfBase(List target)
+ {
+ List<(FieldDescription, Func)> fieldsAndFunctions = new();
+ List fieldAdded = new();
+
+ foreach (var baseObj in target)
+ {
+ // get all members by default, but only Dynamic ones from the basic geometry
+ Dictionary members = new();
+
+ // leave out until we decide which properties to support on Receive
+ /*
+ if (baseObj.speckle_type.StartsWith("Objects.Geometry"))
+ {
+ members = baseObj.GetMembers(DynamicBaseMemberType.Dynamic);
+ }
+ else
+ {
+ members = baseObj.GetMembers(DynamicBaseMemberType.All);
+ }
+ */
+
+ foreach (KeyValuePair field in members)
+ {
+ // POC: TODO check for the forbidden characters/combinations: https://support.esri.com/en-us/knowledge-base/what-characters-should-not-be-used-in-arcgis-for-field--000005588
+ Func function = x => x[field.Key];
+ TraverseAttributes(field, function, fieldsAndFunctions, fieldAdded);
+ }
+ }
+
+ // change all FieldType.Blob to String
+ // "Blob" will never be used on receive, so it is a placeholder for non-properly identified fields
+ for (int i = 0; i < fieldsAndFunctions.Count; i++)
+ {
+ (FieldDescription description, Func function) = fieldsAndFunctions[i];
+ if (description.FieldType is FieldType.Blob)
+ {
+ fieldsAndFunctions[i] = new(
+ new FieldDescription(description.Name, FieldType.String) { AliasName = description.AliasName },
+ function
+ );
+ }
+ }
+
+ return fieldsAndFunctions;
+ }
+
+ private void TraverseAttributes(
+ KeyValuePair field,
+ Func function,
+ List<(FieldDescription, Func)> fieldsAndFunctions,
+ List fieldAdded
+ )
+ {
+ if (field.Value is Base attributeBase)
+ {
+ // only traverse Base if it's Rhino userStrings, or Revit parameter, or Base containing Revit parameters
+ if (field.Key == "parameters")
+ {
+ foreach (KeyValuePair attributField in attributeBase.GetMembers(DynamicBaseMemberType.Dynamic))
+ {
+ // only iterate through elements if they are actually Revit Parameters or parameter IDs
+ if (
+ attributField.Value is Objects.BuiltElements.Revit.Parameter
+ || attributField.Key == "applicationId"
+ || attributField.Key == "id"
+ )
+ {
+ KeyValuePair newAttributField =
+ new($"{field.Key}.{attributField.Key}", attributField.Value);
+ Func functionAdded = x => (function(x) as Base)?[attributField.Key];
+ TraverseAttributes(newAttributField, functionAdded, fieldsAndFunctions, fieldAdded);
+ }
+ }
+ }
+ else if (field.Key == "userStrings")
+ {
+ foreach (KeyValuePair attributField in attributeBase.GetMembers(DynamicBaseMemberType.Dynamic))
+ {
+ KeyValuePair newAttributField = new($"{field.Key}.{attributField.Key}", attributField.Value);
+ Func functionAdded = x => (function(x) as Base)?[attributField.Key];
+ TraverseAttributes(newAttributField, functionAdded, fieldsAndFunctions, fieldAdded);
+ }
+ }
+ else if (field.Value is Objects.BuiltElements.Revit.Parameter)
+ {
+ foreach (
+ KeyValuePair attributField in attributeBase.GetMembers(DynamicBaseMemberType.Instance)
+ )
+ {
+ KeyValuePair newAttributField = new($"{field.Key}.{attributField.Key}", attributField.Value);
+ Func functionAdded = x => (function(x) as Base)?[attributField.Key];
+ TraverseAttributes(newAttributField, functionAdded, fieldsAndFunctions, fieldAdded);
+ }
+ }
+ else
+ {
+ // for now, ignore all other properties of Base type
+ }
+ }
+ else if (field.Value is IList attributeList)
+ {
+ int count = 0;
+ foreach (var attributField in attributeList)
+ {
+ KeyValuePair newAttributField = new($"{field.Key}[{count}]", attributField);
+ Func functionAdded = x => (function(x) as List