diff --git a/All.sln b/All.sln
index 5e80640bb0..4cca95fc50 100644
--- a/All.sln
+++ b/All.sln
@@ -524,10 +524,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Autocad", "Autocad", "{804E
EndProject
Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Speckle.Converters.AutocadShared", "DUI3-DX\Converters\Autocad\Speckle.Converters.AutocadShared\Speckle.Converters.AutocadShared.shproj", "{9ADD1B7A-6401-4202-8613-F668E2FBC0A4}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Speckle.Converters.Autocad2023", "DUI3-DX\Converters\Autocad\2023\Speckle.Converters.Autocad2023\Speckle.Converters.Autocad2023.csproj", "{631C295A-7CCF-4B42-8686-7034E31469E7}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Speckle.Converters.Autocad2023.DependencyInjection", "DUI3-DX\Converters\Autocad\2023\Speckle.Converters.Autocad2023.DependencyInjection\Speckle.Converters.Autocad2023.DependencyInjection.csproj", "{D940853C-003A-482C-BDB0-665367F274A0}"
-EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Speckle.Connectors.DUI.WebView", "DUI3-DX\DUI3\Speckle.Connectors.DUI.WebView\Speckle.Connectors.DUI.WebView.csproj", "{7420652C-3046-4F38-BE64-9B9E69D76FA2}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Build", "Build", "{326ECEE0-D009-4A65-B24C-00FA343D8B99}"
@@ -558,9 +554,21 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{B1324D25
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\2024\Speckle.Converters.Autocad2024\Speckle.Converters.Autocad2024.csproj", "{C9C28F31-1367-438C-83B0-049C3B3A3E3B}"
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Civil3d", "Civil3d", "{34A6BB15-A030-4C5B-94B2-1A1DFE49334A}"
+EndProject
+Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Speckle.Converters.Civil3dShared", "DUI3-DX\Converters\Civil3d\Speckle.Converters.Civil3dShared\Speckle.Converters.Civil3dShared.shproj", "{35175682-DA83-4C0A-A49D-B191F5885D8E}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Speckle.Converters.Civil3d2024", "DUI3-DX\Converters\Civil3d\Speckle.Converters.Civil3d2024\Speckle.Converters.Civil3d2024.csproj", "{E7FA6A25-A224-4207-846B-75CE8236228D}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Speckle.Converters.Civil3d2024.DependencyInjection", "DUI3-DX\Converters\Civil3d\Speckle.Converters.Civil3d2024.DependencyInjection\Speckle.Converters.Civil3d2024.DependencyInjection.csproj", "{9BCE88BA-1E01-44EE-BF9D-2CB906E63E34}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Speckle.Converters.Autocad2024.DependencyInjection", "DUI3-DX\Converters\Autocad\Speckle.Converters.Autocad2024.DependencyInjection\Speckle.Converters.Autocad2024.DependencyInjection.csproj", "{2C587020-5F9F-40E1-8AF8-772FE3FC256A}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Speckle.Converters.Autocad2023", "DUI3-DX\Converters\Autocad\Speckle.Converters.Autocad2023\Speckle.Converters.Autocad2023.csproj", "{C9F084AF-FB70-4F5F-ACEB-DB6818BBECAF}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Speckle.Converters.Autocad2023.DependencyInjection", "DUI3-DX\Converters\Autocad\Speckle.Converters.Autocad2023.DependencyInjection\Speckle.Converters.Autocad2023.DependencyInjection.csproj", "{4E83BA93-4EC4-4A6E-AD27-8CD9A409FD23}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Converters.Autocad2024.DependencyInjection", "DUI3-DX\Converters\Autocad\2024\Speckle.Converters.Autocad2024.DependencyInjection\Speckle.Converters.Autocad2024.DependencyInjection.csproj", "{06082BAA-98E8-49B1-9D33-252B126A0561}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Speckle.Converters.Autocad2024", "DUI3-DX\Converters\Autocad\Speckle.Converters.Autocad2024\Speckle.Converters.Autocad2024.csproj", "{A6BAA749-0DBE-49A9-9A9D-FCA0F06EE096}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -2620,38 +2628,6 @@ Global
{11F7D41B-AFCA-4D29-BC08-285A14BF3A3B}.Release|Any CPU.Build.0 = Release|Any CPU
{11F7D41B-AFCA-4D29-BC08-285A14BF3A3B}.Release|x64.ActiveCfg = Release|Any CPU
{11F7D41B-AFCA-4D29-BC08-285A14BF3A3B}.Release|x64.Build.0 = Release|Any CPU
- {631C295A-7CCF-4B42-8686-7034E31469E7}.Debug Mac|Any CPU.ActiveCfg = Debug|Any CPU
- {631C295A-7CCF-4B42-8686-7034E31469E7}.Debug Mac|Any CPU.Build.0 = Debug|Any CPU
- {631C295A-7CCF-4B42-8686-7034E31469E7}.Debug Mac|x64.ActiveCfg = Debug|Any CPU
- {631C295A-7CCF-4B42-8686-7034E31469E7}.Debug Mac|x64.Build.0 = Debug|Any CPU
- {631C295A-7CCF-4B42-8686-7034E31469E7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {631C295A-7CCF-4B42-8686-7034E31469E7}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {631C295A-7CCF-4B42-8686-7034E31469E7}.Debug|x64.ActiveCfg = Debug|Any CPU
- {631C295A-7CCF-4B42-8686-7034E31469E7}.Debug|x64.Build.0 = Debug|Any CPU
- {631C295A-7CCF-4B42-8686-7034E31469E7}.Release Mac|Any CPU.ActiveCfg = Release|Any CPU
- {631C295A-7CCF-4B42-8686-7034E31469E7}.Release Mac|Any CPU.Build.0 = Release|Any CPU
- {631C295A-7CCF-4B42-8686-7034E31469E7}.Release Mac|x64.ActiveCfg = Release|Any CPU
- {631C295A-7CCF-4B42-8686-7034E31469E7}.Release Mac|x64.Build.0 = Release|Any CPU
- {631C295A-7CCF-4B42-8686-7034E31469E7}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {631C295A-7CCF-4B42-8686-7034E31469E7}.Release|Any CPU.Build.0 = Release|Any CPU
- {631C295A-7CCF-4B42-8686-7034E31469E7}.Release|x64.ActiveCfg = Release|Any CPU
- {631C295A-7CCF-4B42-8686-7034E31469E7}.Release|x64.Build.0 = Release|Any CPU
- {D940853C-003A-482C-BDB0-665367F274A0}.Debug Mac|Any CPU.ActiveCfg = Debug|Any CPU
- {D940853C-003A-482C-BDB0-665367F274A0}.Debug Mac|Any CPU.Build.0 = Debug|Any CPU
- {D940853C-003A-482C-BDB0-665367F274A0}.Debug Mac|x64.ActiveCfg = Debug|Any CPU
- {D940853C-003A-482C-BDB0-665367F274A0}.Debug Mac|x64.Build.0 = Debug|Any CPU
- {D940853C-003A-482C-BDB0-665367F274A0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {D940853C-003A-482C-BDB0-665367F274A0}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {D940853C-003A-482C-BDB0-665367F274A0}.Debug|x64.ActiveCfg = Debug|Any CPU
- {D940853C-003A-482C-BDB0-665367F274A0}.Debug|x64.Build.0 = Debug|Any CPU
- {D940853C-003A-482C-BDB0-665367F274A0}.Release Mac|Any CPU.ActiveCfg = Debug|Any CPU
- {D940853C-003A-482C-BDB0-665367F274A0}.Release Mac|Any CPU.Build.0 = Debug|Any CPU
- {D940853C-003A-482C-BDB0-665367F274A0}.Release Mac|x64.ActiveCfg = Debug|Any CPU
- {D940853C-003A-482C-BDB0-665367F274A0}.Release Mac|x64.Build.0 = Debug|Any CPU
- {D940853C-003A-482C-BDB0-665367F274A0}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {D940853C-003A-482C-BDB0-665367F274A0}.Release|Any CPU.Build.0 = Release|Any CPU
- {D940853C-003A-482C-BDB0-665367F274A0}.Release|x64.ActiveCfg = Release|Any CPU
- {D940853C-003A-482C-BDB0-665367F274A0}.Release|x64.Build.0 = Release|Any CPU
{7420652C-3046-4F38-BE64-9B9E69D76FA2}.Debug Mac|Any CPU.ActiveCfg = Debug|Any CPU
{7420652C-3046-4F38-BE64-9B9E69D76FA2}.Debug Mac|Any CPU.Build.0 = Debug|Any CPU
{7420652C-3046-4F38-BE64-9B9E69D76FA2}.Debug Mac|x64.ActiveCfg = Debug|Any CPU
@@ -2812,38 +2788,102 @@ Global
{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
+ {E7FA6A25-A224-4207-846B-75CE8236228D}.Debug Mac|Any CPU.ActiveCfg = Debug|Any CPU
+ {E7FA6A25-A224-4207-846B-75CE8236228D}.Debug Mac|Any CPU.Build.0 = Debug|Any CPU
+ {E7FA6A25-A224-4207-846B-75CE8236228D}.Debug Mac|x64.ActiveCfg = Debug|Any CPU
+ {E7FA6A25-A224-4207-846B-75CE8236228D}.Debug Mac|x64.Build.0 = Debug|Any CPU
+ {E7FA6A25-A224-4207-846B-75CE8236228D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E7FA6A25-A224-4207-846B-75CE8236228D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E7FA6A25-A224-4207-846B-75CE8236228D}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {E7FA6A25-A224-4207-846B-75CE8236228D}.Debug|x64.Build.0 = Debug|Any CPU
+ {E7FA6A25-A224-4207-846B-75CE8236228D}.Release Mac|Any CPU.ActiveCfg = Release|Any CPU
+ {E7FA6A25-A224-4207-846B-75CE8236228D}.Release Mac|Any CPU.Build.0 = Release|Any CPU
+ {E7FA6A25-A224-4207-846B-75CE8236228D}.Release Mac|x64.ActiveCfg = Release|Any CPU
+ {E7FA6A25-A224-4207-846B-75CE8236228D}.Release Mac|x64.Build.0 = Release|Any CPU
+ {E7FA6A25-A224-4207-846B-75CE8236228D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E7FA6A25-A224-4207-846B-75CE8236228D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E7FA6A25-A224-4207-846B-75CE8236228D}.Release|x64.ActiveCfg = Release|Any CPU
+ {E7FA6A25-A224-4207-846B-75CE8236228D}.Release|x64.Build.0 = Release|Any CPU
+ {9BCE88BA-1E01-44EE-BF9D-2CB906E63E34}.Debug Mac|Any CPU.ActiveCfg = Debug|Any CPU
+ {9BCE88BA-1E01-44EE-BF9D-2CB906E63E34}.Debug Mac|Any CPU.Build.0 = Debug|Any CPU
+ {9BCE88BA-1E01-44EE-BF9D-2CB906E63E34}.Debug Mac|x64.ActiveCfg = Debug|Any CPU
+ {9BCE88BA-1E01-44EE-BF9D-2CB906E63E34}.Debug Mac|x64.Build.0 = Debug|Any CPU
+ {9BCE88BA-1E01-44EE-BF9D-2CB906E63E34}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {9BCE88BA-1E01-44EE-BF9D-2CB906E63E34}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {9BCE88BA-1E01-44EE-BF9D-2CB906E63E34}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {9BCE88BA-1E01-44EE-BF9D-2CB906E63E34}.Debug|x64.Build.0 = Debug|Any CPU
+ {9BCE88BA-1E01-44EE-BF9D-2CB906E63E34}.Release Mac|Any CPU.ActiveCfg = Release|Any CPU
+ {9BCE88BA-1E01-44EE-BF9D-2CB906E63E34}.Release Mac|Any CPU.Build.0 = Release|Any CPU
+ {9BCE88BA-1E01-44EE-BF9D-2CB906E63E34}.Release Mac|x64.ActiveCfg = Release|Any CPU
+ {9BCE88BA-1E01-44EE-BF9D-2CB906E63E34}.Release Mac|x64.Build.0 = Release|Any CPU
+ {9BCE88BA-1E01-44EE-BF9D-2CB906E63E34}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {9BCE88BA-1E01-44EE-BF9D-2CB906E63E34}.Release|Any CPU.Build.0 = Release|Any CPU
+ {9BCE88BA-1E01-44EE-BF9D-2CB906E63E34}.Release|x64.ActiveCfg = Release|Any CPU
+ {9BCE88BA-1E01-44EE-BF9D-2CB906E63E34}.Release|x64.Build.0 = Release|Any CPU
+ {2C587020-5F9F-40E1-8AF8-772FE3FC256A}.Debug Mac|Any CPU.ActiveCfg = Debug|Any CPU
+ {2C587020-5F9F-40E1-8AF8-772FE3FC256A}.Debug Mac|Any CPU.Build.0 = Debug|Any CPU
+ {2C587020-5F9F-40E1-8AF8-772FE3FC256A}.Debug Mac|x64.ActiveCfg = Debug|Any CPU
+ {2C587020-5F9F-40E1-8AF8-772FE3FC256A}.Debug Mac|x64.Build.0 = Debug|Any CPU
+ {2C587020-5F9F-40E1-8AF8-772FE3FC256A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {2C587020-5F9F-40E1-8AF8-772FE3FC256A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {2C587020-5F9F-40E1-8AF8-772FE3FC256A}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {2C587020-5F9F-40E1-8AF8-772FE3FC256A}.Debug|x64.Build.0 = Debug|Any CPU
+ {2C587020-5F9F-40E1-8AF8-772FE3FC256A}.Release Mac|Any CPU.ActiveCfg = Release|Any CPU
+ {2C587020-5F9F-40E1-8AF8-772FE3FC256A}.Release Mac|Any CPU.Build.0 = Release|Any CPU
+ {2C587020-5F9F-40E1-8AF8-772FE3FC256A}.Release Mac|x64.ActiveCfg = Release|Any CPU
+ {2C587020-5F9F-40E1-8AF8-772FE3FC256A}.Release Mac|x64.Build.0 = Release|Any CPU
+ {2C587020-5F9F-40E1-8AF8-772FE3FC256A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {2C587020-5F9F-40E1-8AF8-772FE3FC256A}.Release|Any CPU.Build.0 = Release|Any CPU
+ {2C587020-5F9F-40E1-8AF8-772FE3FC256A}.Release|x64.ActiveCfg = Release|Any CPU
+ {2C587020-5F9F-40E1-8AF8-772FE3FC256A}.Release|x64.Build.0 = Release|Any CPU
+ {C9F084AF-FB70-4F5F-ACEB-DB6818BBECAF}.Debug Mac|Any CPU.ActiveCfg = Debug|Any CPU
+ {C9F084AF-FB70-4F5F-ACEB-DB6818BBECAF}.Debug Mac|Any CPU.Build.0 = Debug|Any CPU
+ {C9F084AF-FB70-4F5F-ACEB-DB6818BBECAF}.Debug Mac|x64.ActiveCfg = Debug|Any CPU
+ {C9F084AF-FB70-4F5F-ACEB-DB6818BBECAF}.Debug Mac|x64.Build.0 = Debug|Any CPU
+ {C9F084AF-FB70-4F5F-ACEB-DB6818BBECAF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C9F084AF-FB70-4F5F-ACEB-DB6818BBECAF}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C9F084AF-FB70-4F5F-ACEB-DB6818BBECAF}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {C9F084AF-FB70-4F5F-ACEB-DB6818BBECAF}.Debug|x64.Build.0 = Debug|Any CPU
+ {C9F084AF-FB70-4F5F-ACEB-DB6818BBECAF}.Release Mac|Any CPU.ActiveCfg = Release|Any CPU
+ {C9F084AF-FB70-4F5F-ACEB-DB6818BBECAF}.Release Mac|Any CPU.Build.0 = Release|Any CPU
+ {C9F084AF-FB70-4F5F-ACEB-DB6818BBECAF}.Release Mac|x64.ActiveCfg = Release|Any CPU
+ {C9F084AF-FB70-4F5F-ACEB-DB6818BBECAF}.Release Mac|x64.Build.0 = Release|Any CPU
+ {C9F084AF-FB70-4F5F-ACEB-DB6818BBECAF}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {C9F084AF-FB70-4F5F-ACEB-DB6818BBECAF}.Release|Any CPU.Build.0 = Release|Any CPU
+ {C9F084AF-FB70-4F5F-ACEB-DB6818BBECAF}.Release|x64.ActiveCfg = Release|Any CPU
+ {C9F084AF-FB70-4F5F-ACEB-DB6818BBECAF}.Release|x64.Build.0 = Release|Any CPU
+ {4E83BA93-4EC4-4A6E-AD27-8CD9A409FD23}.Debug Mac|Any CPU.ActiveCfg = Debug|Any CPU
+ {4E83BA93-4EC4-4A6E-AD27-8CD9A409FD23}.Debug Mac|Any CPU.Build.0 = Debug|Any CPU
+ {4E83BA93-4EC4-4A6E-AD27-8CD9A409FD23}.Debug Mac|x64.ActiveCfg = Debug|Any CPU
+ {4E83BA93-4EC4-4A6E-AD27-8CD9A409FD23}.Debug Mac|x64.Build.0 = Debug|Any CPU
+ {4E83BA93-4EC4-4A6E-AD27-8CD9A409FD23}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {4E83BA93-4EC4-4A6E-AD27-8CD9A409FD23}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {4E83BA93-4EC4-4A6E-AD27-8CD9A409FD23}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {4E83BA93-4EC4-4A6E-AD27-8CD9A409FD23}.Debug|x64.Build.0 = Debug|Any CPU
+ {4E83BA93-4EC4-4A6E-AD27-8CD9A409FD23}.Release Mac|Any CPU.ActiveCfg = Release|Any CPU
+ {4E83BA93-4EC4-4A6E-AD27-8CD9A409FD23}.Release Mac|Any CPU.Build.0 = Release|Any CPU
+ {4E83BA93-4EC4-4A6E-AD27-8CD9A409FD23}.Release Mac|x64.ActiveCfg = Release|Any CPU
+ {4E83BA93-4EC4-4A6E-AD27-8CD9A409FD23}.Release Mac|x64.Build.0 = Release|Any CPU
+ {4E83BA93-4EC4-4A6E-AD27-8CD9A409FD23}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {4E83BA93-4EC4-4A6E-AD27-8CD9A409FD23}.Release|Any CPU.Build.0 = Release|Any CPU
+ {4E83BA93-4EC4-4A6E-AD27-8CD9A409FD23}.Release|x64.ActiveCfg = Release|Any CPU
+ {4E83BA93-4EC4-4A6E-AD27-8CD9A409FD23}.Release|x64.Build.0 = Release|Any CPU
+ {A6BAA749-0DBE-49A9-9A9D-FCA0F06EE096}.Debug Mac|Any CPU.ActiveCfg = Debug|Any CPU
+ {A6BAA749-0DBE-49A9-9A9D-FCA0F06EE096}.Debug Mac|Any CPU.Build.0 = Debug|Any CPU
+ {A6BAA749-0DBE-49A9-9A9D-FCA0F06EE096}.Debug Mac|x64.ActiveCfg = Debug|Any CPU
+ {A6BAA749-0DBE-49A9-9A9D-FCA0F06EE096}.Debug Mac|x64.Build.0 = Debug|Any CPU
+ {A6BAA749-0DBE-49A9-9A9D-FCA0F06EE096}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {A6BAA749-0DBE-49A9-9A9D-FCA0F06EE096}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {A6BAA749-0DBE-49A9-9A9D-FCA0F06EE096}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {A6BAA749-0DBE-49A9-9A9D-FCA0F06EE096}.Debug|x64.Build.0 = Debug|Any CPU
+ {A6BAA749-0DBE-49A9-9A9D-FCA0F06EE096}.Release Mac|Any CPU.ActiveCfg = Release|Any CPU
+ {A6BAA749-0DBE-49A9-9A9D-FCA0F06EE096}.Release Mac|Any CPU.Build.0 = Release|Any CPU
+ {A6BAA749-0DBE-49A9-9A9D-FCA0F06EE096}.Release Mac|x64.ActiveCfg = Release|Any CPU
+ {A6BAA749-0DBE-49A9-9A9D-FCA0F06EE096}.Release Mac|x64.Build.0 = Release|Any CPU
+ {A6BAA749-0DBE-49A9-9A9D-FCA0F06EE096}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {A6BAA749-0DBE-49A9-9A9D-FCA0F06EE096}.Release|Any CPU.Build.0 = Release|Any CPU
+ {A6BAA749-0DBE-49A9-9A9D-FCA0F06EE096}.Release|x64.ActiveCfg = Release|Any CPU
+ {A6BAA749-0DBE-49A9-9A9D-FCA0F06EE096}.Release|x64.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -3054,10 +3094,14 @@ Global
{70DEAA13-6DC8-44A0-B287-9E806A8054F1} = {890F3257-FCC2-4ED8-9180-22B3641B494C}
{F06E4C37-4076-4272-9CA6-FB505E02CD31} = {BE521908-7944-46F3-98BF-B47D34509934}
{DDBBA313-69A6-40DE-AB3A-79EE5BF32A7E} = {743489BF-1941-43D5-8AF9-35C56D0DCC34}
- {631C295A-7CCF-4B42-8686-7034E31469E7} = {804E065F-914C-414A-AF84-009312C3CFF6}
- {D940853C-003A-482C-BDB0-665367F274A0} = {804E065F-914C-414A-AF84-009312C3CFF6}
- {C9C28F31-1367-438C-83B0-049C3B3A3E3B} = {804E065F-914C-414A-AF84-009312C3CFF6}
- {06082BAA-98E8-49B1-9D33-252B126A0561} = {804E065F-914C-414A-AF84-009312C3CFF6}
+ {34A6BB15-A030-4C5B-94B2-1A1DFE49334A} = {1FE3C60E-7865-40A5-9794-55ECB64F6489}
+ {35175682-DA83-4C0A-A49D-B191F5885D8E} = {34A6BB15-A030-4C5B-94B2-1A1DFE49334A}
+ {E7FA6A25-A224-4207-846B-75CE8236228D} = {34A6BB15-A030-4C5B-94B2-1A1DFE49334A}
+ {9BCE88BA-1E01-44EE-BF9D-2CB906E63E34} = {34A6BB15-A030-4C5B-94B2-1A1DFE49334A}
+ {2C587020-5F9F-40E1-8AF8-772FE3FC256A} = {804E065F-914C-414A-AF84-009312C3CFF6}
+ {C9F084AF-FB70-4F5F-ACEB-DB6818BBECAF} = {804E065F-914C-414A-AF84-009312C3CFF6}
+ {4E83BA93-4EC4-4A6E-AD27-8CD9A409FD23} = {804E065F-914C-414A-AF84-009312C3CFF6}
+ {A6BAA749-0DBE-49A9-9A9D-FCA0F06EE096} = {804E065F-914C-414A-AF84-009312C3CFF6}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {1D43D91B-4F01-4A78-8250-CC6F9BD93A14}
@@ -3084,6 +3128,7 @@ Global
ConnectorTeklaStructures\ConnectorTeklaStructuresShared\ConnectorTeklaStructuresShared.projitems*{28e2ea7f-ffd1-4e13-9165-0243b5ac82f5}*SharedItemsImports = 13
Objects\Converters\ConverterAutocadCivil\ConverterAutocadCivilShared\ConverterAutocadCivilShared.projitems*{2d0f9f8a-2e89-4780-978a-cd92d6d7b843}*SharedItemsImports = 13
Objects\Converters\ConverterRevit\ConverterRevitShared\ConverterRevitShared.projitems*{2dcd648d-dca5-4d2a-8b14-ad2cb85d24b0}*SharedItemsImports = 13
+ DUI3-DX\Converters\Civil3d\Speckle.Converters.Civil3dShared\Speckle.Converters.Civil3dShared.projitems*{35175682-da83-4c0a-a49d-b191f5885d8e}*SharedItemsImports = 13
ConnectorBentley\ConnectorBentleyShared\ConnectorBentleyShared.projitems*{372d9f0f-ede9-4050-bf8c-758911c5c2e0}*SharedItemsImports = 13
ConnectorTeklaStructures\ConnectorTeklaStructuresShared\ConnectorTeklaStructuresShared.projitems*{3af1ef30-0906-4926-a02c-4e3ad666352a}*SharedItemsImports = 5
ConnectorAutocadCivil\ConnectorAutocadCivil\ConnectorAutocadCivilShared.projitems*{3b9189b9-e485-448a-8793-9b9587a36791}*SharedItemsImports = 5
@@ -3112,7 +3157,6 @@ Global
ConnectorRevit\ConnectorRevit\ConnectorRevit.projitems*{5fd0d810-03e9-4fd2-93e4-b1b51e5d82c5}*SharedItemsImports = 13
ConnectorCSI\ConnectorCSIShared\ConnectorCSIShared.projitems*{61374cd0-e774-4dcd-bfab-6356b0931283}*SharedItemsImports = 13
ConnectorRevit\RevitSharedResources\RevitSharedResources.projitems*{61c1304b-ed48-456b-ab90-a89066187952}*SharedItemsImports = 5
- DUI3-DX\Converters\Autocad\Speckle.Converters.AutocadShared\Speckle.Converters.AutocadShared.projitems*{631c295a-7ccf-4b42-8686-7034e31469e7}*SharedItemsImports = 5
ConnectorAutocadCivil\ConnectorAutocadCivil\ConnectorAutocadCivilShared.projitems*{658de496-5177-4cd5-a949-fe59e47109b6}*SharedItemsImports = 5
ConnectorTeklaStructures\ConnectorTeklaStructuresShared\ConnectorTeklaStructuresShared.projitems*{67157264-aaa5-46a8-a38b-16254b49b892}*SharedItemsImports = 5
Objects\Converters\ConverterDynamo\ConverterDynamoShared\ConverterDynamoShared.projitems*{67a463d3-e98b-4b16-b069-d7bbb05386a1}*SharedItemsImports = 5
@@ -3147,6 +3191,7 @@ Global
ConnectorBentley\ConnectorBentleyShared\ConnectorBentleyShared.projitems*{a3a0ee09-6055-4009-ab8e-13fbc1a403a9}*SharedItemsImports = 5
ConnectorNavisworks\ConnectorNavisworks\ConnectorNavisworks.Shared.projitems*{a517a609-cab1-4b33-b83c-1b13b34e4560}*SharedItemsImports = 13
ConnectorRhino\ConnectorRhino\ConnectorRhinoShared\ConnectorRhinoShared.projitems*{a64acbf9-db82-4839-af99-57ed2e7989f4}*SharedItemsImports = 5
+ DUI3-DX\Converters\Autocad\Speckle.Converters.AutocadShared\Speckle.Converters.AutocadShared.projitems*{a6baa749-0dbe-49a9-9a9d-fca0f06ee096}*SharedItemsImports = 5
Objects\Converters\ConverterRhinoGh\ConverterRhinoGhShared\ConverterRhinoGhShared.projitems*{a8607330-1b23-43cc-8b9b-25818d9c1d64}*SharedItemsImports = 5
Objects\Converters\ConverterDynamo\ConverterDynamoShared\ConverterDynamoShared.projitems*{aaa05c3d-856d-4f22-971e-5e3f066d0eae}*SharedItemsImports = 5
Objects\Converters\ConverterRevit\ConverterRevitShared\ConverterRevitShared.projitems*{aaa05c3d-856d-4f22-971e-5e3f066d0eae}*SharedItemsImports = 5
@@ -3165,7 +3210,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
+ DUI3-DX\Converters\Autocad\Speckle.Converters.AutocadShared\Speckle.Converters.AutocadShared.projitems*{c9f084af-fb70-4f5f-aceb-db6818bbecaf}*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
@@ -3181,6 +3226,8 @@ Global
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
+ DUI3-DX\Converters\Autocad\Speckle.Converters.AutocadShared\Speckle.Converters.AutocadShared.projitems*{e7fa6a25-a224-4207-846b-75ce8236228d}*SharedItemsImports = 5
+ DUI3-DX\Converters\Civil3d\Speckle.Converters.Civil3dShared\Speckle.Converters.Civil3dShared.projitems*{e7fa6a25-a224-4207-846b-75ce8236228d}*SharedItemsImports = 5
ConnectorRevit\RevitSharedResources\RevitSharedResources.projitems*{ea34ac83-5825-4473-a572-d5127fd33b1b}*SharedItemsImports = 5
Objects\Converters\ConverterRhinoGh\ConverterRhinoGhShared\ConverterRhinoGhShared.projitems*{ea81f83c-1485-49c8-ab05-9df2798d70ec}*SharedItemsImports = 5
Objects\Converters\ConverterTeklaStructures\ConverterTeklaStructuresShared\ConverterTeklaStructuresShared.projitems*{eb52e451-9ed8-460e-9ee4-6717bfb12eab}*SharedItemsImports = 5
diff --git a/DUI3-DX.slnf b/DUI3-DX.slnf
index 4f4a6e3edb..ae770c7ef8 100644
--- a/DUI3-DX.slnf
+++ b/DUI3-DX.slnf
@@ -12,11 +12,14 @@
"DUI3-DX\\Connectors\\Rhino\\Speckle.Connectors.Rhino7\\Speckle.Connectors.Rhino7.csproj",
"DUI3-DX\\Converters\\ArcGIS\\Speckle.Converters.ArcGIS3.DependencyInjection\\Speckle.Converters.ArcGIS3.DependencyInjection.csproj",
"DUI3-DX\\Converters\\ArcGIS\\Speckle.Converters.ArcGIS3\\Speckle.Converters.ArcGIS3.csproj",
- "DUI3-DX\\Converters\\Autocad\\2023\\Speckle.Converters.Autocad2023.DependencyInjection\\Speckle.Converters.Autocad2023.DependencyInjection.csproj",
- "DUI3-DX\\Converters\\Autocad\\2023\\Speckle.Converters.Autocad2023\\Speckle.Converters.Autocad2023.csproj",
- "DUI3-DX\\Converters\\Autocad\\2024\\Speckle.Converters.Autocad2024.DependencyInjection\\Speckle.Converters.Autocad2024.DependencyInjection.csproj",
- "DUI3-DX\\Converters\\Autocad\\2024\\Speckle.Converters.Autocad2024\\Speckle.Converters.Autocad2024.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\\Civil3d\\Speckle.Converters.Civil3d2024.DependencyInjection\\Speckle.Converters.Civil3d2024.DependencyInjection.csproj",
+ "DUI3-DX\\Converters\\Civil3d\\Speckle.Converters.Civil3d2024\\Speckle.Converters.Civil3d2024.csproj",
+ "DUI3-DX\\Converters\\Civil3d\\Speckle.Converters.Civil3dShared\\Speckle.Converters.Civil3dShared.shproj",
"DUI3-DX\\Converters\\Revit\\Speckle.Converters.Revit2023.DependencyInjection\\Speckle.Converters.Revit2023.DependencyInjection.csproj",
"DUI3-DX\\Converters\\Revit\\Speckle.Converters.Revit2023\\Speckle.Converters.Revit2023.csproj",
"DUI3-DX\\Converters\\Revit\\Speckle.Converters.RevitShared\\Speckle.Converters.RevitShared.shproj",
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 e3913f6c11..88e6b47cdf 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
@@ -10,7 +10,7 @@
-
+
@@ -19,7 +19,7 @@
-
+
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 52da8c7d75..777a2ed66c 100644
--- a/DUI3-DX/Connectors/Autocad/Speckle.Connectors.AutocadShared/DependencyInjection/AutocadConnectorModule.cs
+++ b/DUI3-DX/Connectors/Autocad/Speckle.Connectors.AutocadShared/DependencyInjection/AutocadConnectorModule.cs
@@ -1,25 +1,6 @@
#if AUTOCAD
-using Autodesk.AutoCAD.DatabaseServices;
-using Speckle.Autofac;
using Speckle.Autofac.DependencyInjection;
-using Speckle.Connectors.Autocad.Bindings;
-using Speckle.Connectors.Autocad.Filters;
-using Speckle.Connectors.Autocad.HostApp;
-using Speckle.Connectors.Autocad.Interfaces;
-using Speckle.Connectors.Autocad.Operations.Receive;
-using Speckle.Connectors.Autocad.Operations.Send;
-using Speckle.Connectors.Autocad.Plugin;
-using Speckle.Connectors.DUI;
using Speckle.Connectors.DUI.Bindings;
-using Speckle.Connectors.DUI.Models;
-using Speckle.Connectors.DUI.Models.Card.SendFilter;
-using Speckle.Connectors.DUI.WebView;
-using Speckle.Connectors.Utils;
-using Speckle.Connectors.Utils.Builders;
-using Speckle.Connectors.Utils.Caching;
-using Speckle.Connectors.Utils.Instances;
-using Speckle.Connectors.Utils.Operations;
-using Speckle.Core.Models.GraphTraversal;
namespace Speckle.Connectors.Autocad.DependencyInjection;
@@ -27,43 +8,14 @@ public class AutocadConnectorModule : ISpeckleModule
{
public void Load(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();
-
- SharedConnectorModule.LoadShared(builder);
-
-
- builder.AddScoped();
+ SharedRegistration.Load(builder);
// Operations
- builder.AddScoped>();
- builder.AddSingleton(DefaultTraversal.CreateTraversalFunc());
-
- // Object Builders
- builder.AddScoped();
- builder.AddScoped, AutocadRootObjectBuilder>();
+ SharedRegistration.LoadSend(builder);
+ SharedRegistration.LoadReceive(builder);
// Register bindings
builder.AddSingleton("connectorName", "Autocad"); // POC: Easier like this for now, should be cleaned up later
- builder.AddSingleton();
- builder.AddSingleton();
-
- // register send filters
- builder.AddTransient();
-
- // register send conversion cache
- builder.AddSingleton();
- 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
index e6889843c5..0b06869c6e 100644
--- a/DUI3-DX/Connectors/Autocad/Speckle.Connectors.AutocadShared/DependencyInjection/Civil3dConnectorModule.cs
+++ b/DUI3-DX/Connectors/Autocad/Speckle.Connectors.AutocadShared/DependencyInjection/Civil3dConnectorModule.cs
@@ -1,13 +1,7 @@
#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;
@@ -15,23 +9,11 @@ public class Civil3dConnectorModule : ISpeckleModule
{
public void Load(SpeckleContainerBuilder builder)
{
- SharedConnectorModule.LoadShared(builder);
-
- // Operations
- builder.AddScoped>();
-
- // Object Builders
- builder.AddScoped, AutocadRootObjectBuilder>();
-
+ SharedRegistration.Load(builder);
+ SharedRegistration.LoadSend(builder);
+
// 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
deleted file mode 100644
index 48b71d723e..0000000000
--- a/DUI3-DX/Connectors/Autocad/Speckle.Connectors.AutocadShared/DependencyInjection/SharedConnectorModule.cs
+++ /dev/null
@@ -1,40 +0,0 @@
-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/DependencyInjection/SharedRegistration.cs b/DUI3-DX/Connectors/Autocad/Speckle.Connectors.AutocadShared/DependencyInjection/SharedRegistration.cs
new file mode 100644
index 0000000000..b9b5856054
--- /dev/null
+++ b/DUI3-DX/Connectors/Autocad/Speckle.Connectors.AutocadShared/DependencyInjection/SharedRegistration.cs
@@ -0,0 +1,82 @@
+using Autodesk.AutoCAD.DatabaseServices;
+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;
+using Speckle.Connectors.Autocad.Filters;
+using Speckle.Connectors.Autocad.Operations.Send;
+using Speckle.Connectors.DUI.Models.Card.SendFilter;
+using Speckle.Connectors.Utils.Builders;
+using Speckle.Connectors.Utils.Caching;
+using Speckle.Connectors.Utils.Operations;
+using Speckle.Connectors.Utils.Instances;
+using Speckle.Connectors.Autocad.Operations.Receive;
+
+using Speckle.Core.Models.GraphTraversal;
+
+namespace Speckle.Connectors.Autocad.DependencyInjection;
+
+public static class SharedRegistration
+{
+ public static void Load(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.AddScoped();
+ builder.AddSingleton();
+
+ // Register bindings
+ builder.AddSingleton();
+ builder.AddSingleton();
+ builder.AddSingleton();
+ builder.AddSingleton();
+ builder.AddSingleton();
+ }
+
+ public static void LoadSend(SpeckleContainerBuilder builder)
+ {
+ // Operations
+ builder.AddScoped>();
+
+ // Object Builders
+ builder.AddScoped, AutocadRootObjectBuilder>();
+
+ // Register bindings
+ builder.AddSingleton();
+
+ // register send filters
+ builder.AddTransient();
+
+ // register send conversion cache
+ builder.AddSingleton();
+ builder.AddScoped>, AutocadInstanceObjectManager>();
+ }
+
+ public static void LoadReceive(SpeckleContainerBuilder builder)
+ {
+ // traversal
+ builder.AddSingleton(DefaultTraversal.CreateTraversalFunc());
+
+ // Object Builders
+ builder.AddScoped();
+
+ // Register bindings
+ builder.AddSingleton();
+ }
+}
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 b95639804d..8fb44c372f 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,7 @@
-
+
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
index b04e1c73e0..8e9190f710 100644
--- a/DUI3-DX/Connectors/Autocad/Speckle.Connectors.Civil3d2024/Speckle.Connectors.Civil3d2024.csproj
+++ b/DUI3-DX/Connectors/Autocad/Speckle.Connectors.Civil3d2024/Speckle.Connectors.Civil3d2024.csproj
@@ -1,4 +1,4 @@
-
+
Speckle.Connectors.Civil3d
net48
@@ -10,7 +10,7 @@
-
+
@@ -19,6 +19,7 @@
+
diff --git a/DUI3-DX/Connectors/Autocad/Speckle.Connectors.Civil3d2024/packages.lock.json b/DUI3-DX/Connectors/Autocad/Speckle.Connectors.Civil3d2024/packages.lock.json
index 71a6fee082..aff9c51d13 100644
--- a/DUI3-DX/Connectors/Autocad/Speckle.Connectors.Civil3d2024/packages.lock.json
+++ b/DUI3-DX/Connectors/Autocad/Speckle.Connectors.Civil3d2024/packages.lock.json
@@ -28,6 +28,12 @@
"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, )",
@@ -458,18 +464,19 @@
"Speckle.Core": "[3.0.1-alpha.14, )"
}
},
- "speckle.converters.autocad2024": {
+ "speckle.converters.civil3d2024": {
"type": "Project",
"dependencies": {
"Speckle.AutoCAD.API": "[2024.0.0, )",
+ "Speckle.Civil3D.API": "[2024.0.0, )",
"Speckle.Converters.Common": "[2.0.999-local, )"
}
},
- "speckle.converters.autocad2024.dependencyinjection": {
+ "speckle.converters.civil3d2024.dependencyinjection": {
"type": "Project",
"dependencies": {
"Autofac": "[5.2.0, )",
- "Speckle.Converters.Autocad2024": "[2.0.999-local, )",
+ "Speckle.Converters.Civil3d2024": "[2.0.999-local, )",
"Speckle.Converters.Common.DependencyInjection": "[2.0.999-local, )"
}
},
@@ -512,12 +519,6 @@
"Serilog": "2.12.0"
}
},
- "Speckle.AutoCAD.API": {
- "type": "CentralTransitive",
- "requested": "[2023.0.0, )",
- "resolved": "2024.0.0",
- "contentHash": "pZZ5uI+NXhZaQnsqRkgp/rywqBAjDObDJ9XNFGJvemT5k2OthDpHzlK/mKxz8QDCYie7uImQ8dv3uWj2QUFDPw=="
- },
"Speckle.Core": {
"type": "CentralTransitive",
"requested": "[3.0.1-alpha.14, )",
diff --git a/DUI3-DX/Converters/Autocad/2023/Speckle.Converters.Autocad2023.DependencyInjection/AutocadConverterModule.cs b/DUI3-DX/Converters/Autocad/Speckle.Converters.Autocad2023.DependencyInjection/AutocadConverterModule.cs
similarity index 100%
rename from DUI3-DX/Converters/Autocad/2023/Speckle.Converters.Autocad2023.DependencyInjection/AutocadConverterModule.cs
rename to DUI3-DX/Converters/Autocad/Speckle.Converters.Autocad2023.DependencyInjection/AutocadConverterModule.cs
diff --git a/DUI3-DX/Converters/Autocad/2023/Speckle.Converters.Autocad2023.DependencyInjection/Speckle.Converters.Autocad2023.DependencyInjection.csproj b/DUI3-DX/Converters/Autocad/Speckle.Converters.Autocad2023.DependencyInjection/Speckle.Converters.Autocad2023.DependencyInjection.csproj
similarity index 72%
rename from DUI3-DX/Converters/Autocad/2023/Speckle.Converters.Autocad2023.DependencyInjection/Speckle.Converters.Autocad2023.DependencyInjection.csproj
rename to DUI3-DX/Converters/Autocad/Speckle.Converters.Autocad2023.DependencyInjection/Speckle.Converters.Autocad2023.DependencyInjection.csproj
index 303e2f808a..aa5a5af310 100644
--- a/DUI3-DX/Converters/Autocad/2023/Speckle.Converters.Autocad2023.DependencyInjection/Speckle.Converters.Autocad2023.DependencyInjection.csproj
+++ b/DUI3-DX/Converters/Autocad/Speckle.Converters.Autocad2023.DependencyInjection/Speckle.Converters.Autocad2023.DependencyInjection.csproj
@@ -4,14 +4,14 @@
net48
x64
-
+
-
-
+
-
+
+
diff --git a/DUI3-DX/Converters/Autocad/2023/Speckle.Converters.Autocad2023.DependencyInjection/packages.lock.json b/DUI3-DX/Converters/Autocad/Speckle.Converters.Autocad2023.DependencyInjection/packages.lock.json
similarity index 99%
rename from DUI3-DX/Converters/Autocad/2023/Speckle.Converters.Autocad2023.DependencyInjection/packages.lock.json
rename to DUI3-DX/Converters/Autocad/Speckle.Converters.Autocad2023.DependencyInjection/packages.lock.json
index e51635ea86..99b4b1fb8c 100644
--- a/DUI3-DX/Converters/Autocad/2023/Speckle.Converters.Autocad2023.DependencyInjection/packages.lock.json
+++ b/DUI3-DX/Converters/Autocad/Speckle.Converters.Autocad2023.DependencyInjection/packages.lock.json
@@ -396,7 +396,7 @@
},
"Speckle.AutoCAD.API": {
"type": "CentralTransitive",
- "requested": "[2023.0.0, )",
+ "requested": "[2024.0.0, )",
"resolved": "2023.0.0",
"contentHash": "aNfiNw9zRW8pCl8AAQK7afEJuea4bJ4sFNsGVSDrdq1egaonZrwALU01dSyFNCE8tne86eVjlprpOGG6r0+G/A=="
},
diff --git a/DUI3-DX/Converters/Autocad/2023/Speckle.Converters.Autocad2023/Speckle.Converters.Autocad2023.csproj b/DUI3-DX/Converters/Autocad/Speckle.Converters.Autocad2023/Speckle.Converters.Autocad2023.csproj
similarity index 57%
rename from DUI3-DX/Converters/Autocad/2023/Speckle.Converters.Autocad2023/Speckle.Converters.Autocad2023.csproj
rename to DUI3-DX/Converters/Autocad/Speckle.Converters.Autocad2023/Speckle.Converters.Autocad2023.csproj
index 2fc9b23da0..06ab0541d9 100644
--- a/DUI3-DX/Converters/Autocad/2023/Speckle.Converters.Autocad2023/Speckle.Converters.Autocad2023.csproj
+++ b/DUI3-DX/Converters/Autocad/Speckle.Converters.Autocad2023/Speckle.Converters.Autocad2023.csproj
@@ -10,9 +10,9 @@
-
+
-
+
diff --git a/DUI3-DX/Converters/Autocad/2023/Speckle.Converters.Autocad2023/packages.lock.json b/DUI3-DX/Converters/Autocad/Speckle.Converters.Autocad2023/packages.lock.json
similarity index 100%
rename from DUI3-DX/Converters/Autocad/2023/Speckle.Converters.Autocad2023/packages.lock.json
rename to DUI3-DX/Converters/Autocad/Speckle.Converters.Autocad2023/packages.lock.json
diff --git a/DUI3-DX/Converters/Autocad/2024/Speckle.Converters.Autocad2024.DependencyInjection/AutocadConverterModule.cs b/DUI3-DX/Converters/Autocad/Speckle.Converters.Autocad2024.DependencyInjection/AutocadConverterModule.cs
similarity index 91%
rename from DUI3-DX/Converters/Autocad/2024/Speckle.Converters.Autocad2024.DependencyInjection/AutocadConverterModule.cs
rename to DUI3-DX/Converters/Autocad/Speckle.Converters.Autocad2024.DependencyInjection/AutocadConverterModule.cs
index 66c4b57aff..6d9b3a767a 100644
--- a/DUI3-DX/Converters/Autocad/2024/Speckle.Converters.Autocad2024.DependencyInjection/AutocadConverterModule.cs
+++ b/DUI3-DX/Converters/Autocad/Speckle.Converters.Autocad2024.DependencyInjection/AutocadConverterModule.cs
@@ -5,7 +5,7 @@
using Speckle.Converters.Common;
using Speckle.Converters.Common.DependencyInjection;
-namespace Speckle.Converters.Autocad20243.DependencyInjection;
+namespace Speckle.Converters.Autocad2024.DependencyInjection;
public class AutocadConverterModule : ISpeckleModule
{
diff --git a/DUI3-DX/Converters/Autocad/2024/Speckle.Converters.Autocad2024.DependencyInjection/Speckle.Converters.Autocad2024.DependencyInjection.csproj b/DUI3-DX/Converters/Autocad/Speckle.Converters.Autocad2024.DependencyInjection/Speckle.Converters.Autocad2024.DependencyInjection.csproj
similarity index 73%
rename from DUI3-DX/Converters/Autocad/2024/Speckle.Converters.Autocad2024.DependencyInjection/Speckle.Converters.Autocad2024.DependencyInjection.csproj
rename to DUI3-DX/Converters/Autocad/Speckle.Converters.Autocad2024.DependencyInjection/Speckle.Converters.Autocad2024.DependencyInjection.csproj
index 05de443d1e..79c93f345c 100644
--- a/DUI3-DX/Converters/Autocad/2024/Speckle.Converters.Autocad2024.DependencyInjection/Speckle.Converters.Autocad2024.DependencyInjection.csproj
+++ b/DUI3-DX/Converters/Autocad/Speckle.Converters.Autocad2024.DependencyInjection/Speckle.Converters.Autocad2024.DependencyInjection.csproj
@@ -6,7 +6,7 @@
-
+
diff --git a/DUI3-DX/Converters/Autocad/2024/Speckle.Converters.Autocad2024.DependencyInjection/packages.lock.json b/DUI3-DX/Converters/Autocad/Speckle.Converters.Autocad2024.DependencyInjection/packages.lock.json
similarity index 99%
rename from DUI3-DX/Converters/Autocad/2024/Speckle.Converters.Autocad2024.DependencyInjection/packages.lock.json
rename to DUI3-DX/Converters/Autocad/Speckle.Converters.Autocad2024.DependencyInjection/packages.lock.json
index bb0e3cfe08..fe9923d926 100644
--- a/DUI3-DX/Converters/Autocad/2024/Speckle.Converters.Autocad2024.DependencyInjection/packages.lock.json
+++ b/DUI3-DX/Converters/Autocad/Speckle.Converters.Autocad2024.DependencyInjection/packages.lock.json
@@ -396,7 +396,7 @@
},
"Speckle.AutoCAD.API": {
"type": "CentralTransitive",
- "requested": "[2023.0.0, )",
+ "requested": "[2024.0.0, )",
"resolved": "2024.0.0",
"contentHash": "pZZ5uI+NXhZaQnsqRkgp/rywqBAjDObDJ9XNFGJvemT5k2OthDpHzlK/mKxz8QDCYie7uImQ8dv3uWj2QUFDPw=="
},
diff --git a/DUI3-DX/Converters/Autocad/2024/Speckle.Converters.Autocad2024/Speckle.Converters.Autocad2024.csproj b/DUI3-DX/Converters/Autocad/Speckle.Converters.Autocad2024/Speckle.Converters.Autocad2024.csproj
similarity index 57%
rename from DUI3-DX/Converters/Autocad/2024/Speckle.Converters.Autocad2024/Speckle.Converters.Autocad2024.csproj
rename to DUI3-DX/Converters/Autocad/Speckle.Converters.Autocad2024/Speckle.Converters.Autocad2024.csproj
index 05f9613b37..da1163a6ad 100644
--- a/DUI3-DX/Converters/Autocad/2024/Speckle.Converters.Autocad2024/Speckle.Converters.Autocad2024.csproj
+++ b/DUI3-DX/Converters/Autocad/Speckle.Converters.Autocad2024/Speckle.Converters.Autocad2024.csproj
@@ -10,9 +10,9 @@
-
+
-
+
diff --git a/DUI3-DX/Converters/Autocad/2024/Speckle.Converters.Autocad2024/packages.lock.json b/DUI3-DX/Converters/Autocad/Speckle.Converters.Autocad2024/packages.lock.json
similarity index 100%
rename from DUI3-DX/Converters/Autocad/2024/Speckle.Converters.Autocad2024/packages.lock.json
rename to DUI3-DX/Converters/Autocad/Speckle.Converters.Autocad2024/packages.lock.json
diff --git a/DUI3-DX/Converters/Autocad/Speckle.Converters.AutocadShared/GlobalUsings.cs b/DUI3-DX/Converters/Autocad/Speckle.Converters.AutocadShared/GlobalUsings.cs
index 9c48f198aa..7922a59807 100644
--- a/DUI3-DX/Converters/Autocad/Speckle.Converters.AutocadShared/GlobalUsings.cs
+++ b/DUI3-DX/Converters/Autocad/Speckle.Converters.AutocadShared/GlobalUsings.cs
@@ -1,5 +1,6 @@
global using ADB = Autodesk.AutoCAD.DatabaseServices;
global using AG = Autodesk.AutoCAD.Geometry;
+global using ABR = Autodesk.AutoCAD.BoundaryRepresentation;
global using SOG = Objects.Geometry;
global using SOP = Objects.Primitive;
global using Document = Autodesk.AutoCAD.ApplicationServices.Document;
diff --git a/DUI3-DX/Converters/Autocad/Speckle.Converters.AutocadShared/Speckle.Converters.AutocadShared.projitems b/DUI3-DX/Converters/Autocad/Speckle.Converters.AutocadShared/Speckle.Converters.AutocadShared.projitems
index 3644c81cc1..8fb784a3af 100644
--- a/DUI3-DX/Converters/Autocad/Speckle.Converters.AutocadShared/Speckle.Converters.AutocadShared.projitems
+++ b/DUI3-DX/Converters/Autocad/Speckle.Converters.AutocadShared/Speckle.Converters.AutocadShared.projitems
@@ -38,6 +38,13 @@
+
+
+
+
+
+
+
@@ -49,11 +56,12 @@
-
+
+
\ No newline at end of file
diff --git a/DUI3-DX/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/ArcToSpeckleConverter.cs b/DUI3-DX/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/ArcToSpeckleConverter.cs
index 36d7b796f6..c437aa04e0 100644
--- a/DUI3-DX/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/ArcToSpeckleConverter.cs
+++ b/DUI3-DX/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/ArcToSpeckleConverter.cs
@@ -5,55 +5,16 @@
namespace Speckle.Converters.Autocad.ToSpeckle.Geometry;
[NameAndRankValue(nameof(ADB.Arc), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)]
-public class DBArcToSpeckleConverter : IToSpeckleTopLevelConverter, ITypedConverter
+public class DBArcToSpeckleConverter : IToSpeckleTopLevelConverter
{
- private readonly ITypedConverter _pointConverter;
- private readonly ITypedConverter _planeConverter;
- private readonly ITypedConverter _boxConverter;
- private readonly IConversionContextStack _contextStack;
+ private readonly ITypedConverter _arcConverter;
- public DBArcToSpeckleConverter(
- ITypedConverter pointConverter,
- ITypedConverter planeConverter,
- ITypedConverter boxConverter,
- IConversionContextStack contextStack
- )
+ public DBArcToSpeckleConverter(ITypedConverter arcConverter)
{
- _pointConverter = pointConverter;
- _planeConverter = planeConverter;
- _boxConverter = boxConverter;
- _contextStack = contextStack;
+ _arcConverter = arcConverter;
}
public Base Convert(object target) => Convert((ADB.Arc)target);
- public SOG.Arc Convert(ADB.Arc target)
- {
- SOG.Plane plane = _planeConverter.Convert(target.GetPlane());
- SOG.Point start = _pointConverter.Convert(target.StartPoint);
- SOG.Point end = _pointConverter.Convert(target.EndPoint);
- SOG.Point mid = _pointConverter.Convert(target.GetPointAtDist(target.Length / 2.0));
- SOP.Interval domain = new(target.StartParam, target.EndParam);
- SOG.Box bbox = _boxConverter.Convert(target.GeometricExtents);
-
- SOG.Arc arc =
- new(
- plane,
- target.Radius,
- target.StartAngle,
- target.EndAngle,
- target.TotalAngle,
- _contextStack.Current.SpeckleUnits
- )
- {
- startPoint = start,
- endPoint = end,
- midPoint = mid,
- domain = domain,
- length = target.Length,
- bbox = bbox
- };
-
- return arc;
- }
+ public SOG.Arc Convert(ADB.Arc target) => _arcConverter.Convert(target);
}
diff --git a/DUI3-DX/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/CircleToSpeckleConverter.cs b/DUI3-DX/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/CircleToSpeckleConverter.cs
index 18b45a8daf..16b1a2bd26 100644
--- a/DUI3-DX/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/CircleToSpeckleConverter.cs
+++ b/DUI3-DX/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/CircleToSpeckleConverter.cs
@@ -7,30 +7,14 @@ namespace Speckle.Converters.Autocad.ToSpeckle.Geometry;
[NameAndRankValue(nameof(ADB.Circle), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)]
public class DBCircleToSpeckleConverter : IToSpeckleTopLevelConverter
{
- private readonly ITypedConverter _planeConverter;
- private readonly ITypedConverter _boxConverter;
- private readonly IConversionContextStack _contextStack;
+ private readonly ITypedConverter _circleConverter;
- public DBCircleToSpeckleConverter(
- ITypedConverter planeConverter,
- ITypedConverter boxConverter,
- IConversionContextStack contextStack
- )
+ public DBCircleToSpeckleConverter(ITypedConverter circleConverter)
{
- _planeConverter = planeConverter;
- _boxConverter = boxConverter;
- _contextStack = contextStack;
+ _circleConverter = circleConverter;
}
public Base Convert(object target) => RawConvert((ADB.Circle)target);
- public SOG.Circle RawConvert(ADB.Circle target)
- {
- SOG.Plane plane = _planeConverter.Convert(target.GetPlane());
- SOG.Box bbox = _boxConverter.Convert(target.GeometricExtents);
- SOG.Circle circle =
- new(plane, target.Radius, _contextStack.Current.SpeckleUnits) { length = target.Circumference, bbox = bbox };
-
- return circle;
- }
+ public SOG.Circle RawConvert(ADB.Circle target) => _circleConverter.Convert(target);
}
diff --git a/DUI3-DX/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/EllipseToSpeckleConverter.cs b/DUI3-DX/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/EllipseToSpeckleConverter.cs
index 524e1a1d8c..53d3d7e5b7 100644
--- a/DUI3-DX/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/EllipseToSpeckleConverter.cs
+++ b/DUI3-DX/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/EllipseToSpeckleConverter.cs
@@ -7,40 +7,14 @@ namespace Speckle.Converters.Autocad.ToSpeckle.Geometry;
[NameAndRankValue(nameof(ADB.Ellipse), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)]
public class DBEllipseToSpeckleConverter : IToSpeckleTopLevelConverter
{
- private readonly ITypedConverter _planeConverter;
- private readonly ITypedConverter _boxConverter;
- private readonly IConversionContextStack _contextStack;
+ private readonly ITypedConverter _ellipseConverter;
- public DBEllipseToSpeckleConverter(
- ITypedConverter planeConverter,
- ITypedConverter boxConverter,
- IConversionContextStack contextStack
- )
+ public DBEllipseToSpeckleConverter(ITypedConverter ellipseConverter)
{
- _planeConverter = planeConverter;
- _boxConverter = boxConverter;
- _contextStack = contextStack;
+ _ellipseConverter = ellipseConverter;
}
public Base Convert(object target) => RawConvert((ADB.Ellipse)target);
- public SOG.Ellipse RawConvert(ADB.Ellipse target)
- {
- SOG.Plane plane = _planeConverter.Convert(new AG.Plane(target.Center, target.MajorAxis, target.MinorAxis));
- SOG.Box bbox = _boxConverter.Convert(target.GeometricExtents);
-
- // the start and end param corresponds to start and end angle in radians
- SOP.Interval trim = new(target.StartAngle, target.EndAngle);
-
- SOG.Ellipse ellipse =
- new(plane, target.MajorRadius, target.MinorRadius, _contextStack.Current.SpeckleUnits)
- {
- domain = new(0, Math.PI * 2),
- trimDomain = trim,
- length = target.GetDistanceAtParameter(target.EndParam),
- bbox = bbox
- };
-
- return ellipse;
- }
+ public SOG.Ellipse RawConvert(ADB.Ellipse target) => _ellipseConverter.Convert(target);
}
diff --git a/DUI3-DX/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/LineToSpeckleConverter.cs b/DUI3-DX/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/LineToSpeckleConverter.cs
index 22787e2290..710a607f9e 100644
--- a/DUI3-DX/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/LineToSpeckleConverter.cs
+++ b/DUI3-DX/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/LineToSpeckleConverter.cs
@@ -5,34 +5,16 @@
namespace Speckle.Converters.Autocad.ToSpeckle.Geometry;
[NameAndRankValue(nameof(ADB.Line), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)]
-public class LineToSpeckleConverter : IToSpeckleTopLevelConverter, ITypedConverter
+public class LineToSpeckleConverter : IToSpeckleTopLevelConverter
{
- private readonly ITypedConverter _pointConverter;
- private readonly ITypedConverter _boxConverter;
- private readonly IConversionContextStack _contextStack;
+ private readonly ITypedConverter _lineConverter;
- public LineToSpeckleConverter(
- ITypedConverter pointConverter,
- ITypedConverter boxConverter,
- IConversionContextStack contextStack
- )
+ public LineToSpeckleConverter(ITypedConverter lineConverter)
{
- _pointConverter = pointConverter;
- _boxConverter = boxConverter;
- _contextStack = contextStack;
+ _lineConverter = lineConverter;
}
public Base Convert(object target) => Convert((ADB.Line)target);
- public SOG.Line Convert(ADB.Line target) =>
- new(
- _pointConverter.Convert(target.StartPoint),
- _pointConverter.Convert(target.EndPoint),
- _contextStack.Current.SpeckleUnits
- )
- {
- length = target.Length,
- domain = new SOP.Interval(0, target.Length),
- bbox = _boxConverter.Convert(target.GeometricExtents)
- };
+ public SOG.Line Convert(ADB.Line target) => _lineConverter.Convert(target);
}
diff --git a/DUI3-DX/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/Polyline2dToSpeckleConverter.cs b/DUI3-DX/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/Polyline2dToSpeckleConverter.cs
index 330d832cba..e0b053c12c 100644
--- a/DUI3-DX/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/Polyline2dToSpeckleConverter.cs
+++ b/DUI3-DX/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/Polyline2dToSpeckleConverter.cs
@@ -15,7 +15,9 @@ namespace Speckle.Converters.Autocad.Geometry;
/// The IToSpeckleTopLevelConverter inheritance should only expect database-resident objects. IRawConversion inheritance can expect non database-resident objects, when generated from other converters.
///
[NameAndRankValue(nameof(ADB.Polyline2d), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)]
-public class Polyline2dToSpeckleConverter : IToSpeckleTopLevelConverter
+public class Polyline2dToSpeckleConverter
+ : IToSpeckleTopLevelConverter,
+ ITypedConverter
{
private readonly ITypedConverter _arcConverter;
private readonly ITypedConverter _lineConverter;
@@ -44,9 +46,9 @@ public Polyline2dToSpeckleConverter(
_contextStack = contextStack;
}
- public Base Convert(object target) => RawConvert((ADB.Polyline2d)target);
+ public Base Convert(object target) => Convert((ADB.Polyline2d)target);
- public SOG.Autocad.AutocadPolycurve RawConvert(ADB.Polyline2d target)
+ public SOG.Autocad.AutocadPolycurve Convert(ADB.Polyline2d target)
{
// get the poly type
var polyType = SOG.Autocad.AutocadPolyType.Unknown;
diff --git a/DUI3-DX/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/Polyline3dToSpeckleConverter.cs b/DUI3-DX/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/Polyline3dToSpeckleConverter.cs
index fdef5bd478..87b90ad1e9 100644
--- a/DUI3-DX/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/Polyline3dToSpeckleConverter.cs
+++ b/DUI3-DX/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/Polyline3dToSpeckleConverter.cs
@@ -14,7 +14,9 @@ namespace Speckle.Converters.Autocad.Geometry;
/// The IToSpeckleTopLevelConverter inheritance should only expect database-resident Polyline2d objects. IRawConversion inheritance can expect non database-resident objects, when generated from other converters.
///
[NameAndRankValue(nameof(ADB.Polyline3d), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)]
-public class Polyline3dToSpeckleConverter : IToSpeckleTopLevelConverter
+public class Polyline3dToSpeckleConverter
+ : IToSpeckleTopLevelConverter,
+ ITypedConverter
{
private readonly ITypedConverter _pointConverter;
private readonly ITypedConverter _splineConverter;
@@ -34,9 +36,9 @@ public Polyline3dToSpeckleConverter(
_contextStack = contextStack;
}
- public Base Convert(object target) => RawConvert((ADB.Polyline3d)target);
+ public Base Convert(object target) => Convert((ADB.Polyline3d)target);
- public SOG.Autocad.AutocadPolycurve RawConvert(ADB.Polyline3d target)
+ public SOG.Autocad.AutocadPolycurve Convert(ADB.Polyline3d target)
{
// get the poly type
var polyType = SOG.Autocad.AutocadPolyType.Unknown;
diff --git a/DUI3-DX/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/Solid3dToSpeckleConverter.cs b/DUI3-DX/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/Solid3dToSpeckleConverter.cs
new file mode 100644
index 0000000000..841dc1120b
--- /dev/null
+++ b/DUI3-DX/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/Solid3dToSpeckleConverter.cs
@@ -0,0 +1,23 @@
+using Speckle.Converters.Common;
+using Speckle.Converters.Common.Objects;
+using Speckle.Core.Models;
+
+namespace Speckle.Converters.Autocad.Geometry;
+
+[NameAndRankValue(nameof(ADB.Solid3d), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)]
+public class Solid3dToSpeckleConverter : IToSpeckleTopLevelConverter
+{
+ private readonly ITypedConverter _solidConverter;
+
+ public Solid3dToSpeckleConverter(ITypedConverter solidConverter)
+ {
+ _solidConverter = solidConverter;
+ }
+
+ public Base Convert(object target) => RawConvert((ADB.Solid3d)target);
+
+ public SOG.Mesh RawConvert(ADB.Solid3d target)
+ {
+ return _solidConverter.Convert(target);
+ }
+}
diff --git a/DUI3-DX/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/SplineToSpeckleConverter.cs b/DUI3-DX/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/SplineToSpeckleConverter.cs
index 059f92f033..d182376cd7 100644
--- a/DUI3-DX/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/SplineToSpeckleConverter.cs
+++ b/DUI3-DX/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/SplineToSpeckleConverter.cs
@@ -1,5 +1,3 @@
-using Autodesk.AutoCAD.Geometry;
-using Speckle.Converters.Autocad.Extensions;
using Speckle.Converters.Common;
using Speckle.Converters.Common.Objects;
using Speckle.Core.Models;
@@ -7,150 +5,16 @@
namespace Speckle.Converters.Autocad.ToSpeckle.Geometry;
[NameAndRankValue(nameof(ADB.Spline), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)]
-public class SplineToSpeckleConverter : IToSpeckleTopLevelConverter, ITypedConverter
+public class SplineToSpeckleConverter : IToSpeckleTopLevelConverter
{
- private readonly ITypedConverter _intervalConverter;
- private readonly ITypedConverter _boxConverter;
- private readonly IConversionContextStack _contextStack;
+ private readonly ITypedConverter _splineConverter;
- public SplineToSpeckleConverter(
- ITypedConverter intervalConverter,
- ITypedConverter boxConverter,
- IConversionContextStack contextStack
- )
+ public SplineToSpeckleConverter(ITypedConverter splineConverter)
{
- _intervalConverter = intervalConverter;
- _boxConverter = boxConverter;
- _contextStack = contextStack;
+ _splineConverter = splineConverter;
}
public Base Convert(object target) => Convert((ADB.Spline)target);
- public SOG.Curve Convert(ADB.Spline target)
- {
- // get nurbs and geo data
- ADB.NurbsData data = target.NurbsData;
-
- // POC: HACK: check for incorrectly closed periodic curves (this seems like acad bug, has resulted from receiving rhino curves)
- bool periodicClosed = false;
- double length = 0;
- SOP.Interval domain = new();
- if (target.GetGeCurve() is NurbCurve3d nurbs)
- {
- length = nurbs.GetLength(nurbs.StartParameter, nurbs.EndParameter, 0.001);
- domain = _intervalConverter.Convert(nurbs.GetInterval());
- if (nurbs.Knots.Count < nurbs.NumberOfControlPoints + nurbs.Degree + 1 && target.IsPeriodic)
- {
- periodicClosed = true;
- }
- }
-
- // get points
- List points = new();
- foreach (Point3d point in data.GetControlPoints().OfType())
- {
- points.Add(point);
- }
-
- // NOTE: for closed periodic splines, autocad does not track last #degree points.
- // Add the first #degree control points to the list if so.
- if (periodicClosed)
- {
- points.AddRange(points.GetRange(0, target.Degree));
- }
-
- // get knots
- // NOTE: for closed periodic splines, autocad has #control points + 1 knots.
- // Add #degree extra knots to beginning and end with #degree - 1 multiplicity for first and last
- var knots = data.GetKnots().OfType().ToList();
- if (periodicClosed)
- {
- double interval = knots[1] - knots[0]; //knot interval
-
- for (int i = 0; i < data.Degree; i++)
- {
- if (i < 2)
- {
- knots.Insert(knots.Count, knots[^1] + interval);
- knots.Insert(0, knots[0] - interval);
- }
- else
- {
- knots.Insert(knots.Count, knots[^1]);
- knots.Insert(0, knots[0]);
- }
- }
- }
-
- // get weights
- // NOTE: autocad assigns unweighted points a value of -1, and will return an empty list in the spline's nurbsdata if no points are weighted
- // NOTE: for closed periodic splines, autocad does not track last #degree points. Add the first #degree weights to the list if so.
- List weights = new();
- for (int i = 0; i < target.NumControlPoints; i++)
- {
- double weight = target.WeightAt(i);
- weights.Add(weight <= 0 ? 1 : weight);
- }
-
- if (periodicClosed)
- {
- weights.AddRange(weights.GetRange(0, target.Degree));
- }
-
- // set nurbs curve info
- var curve = new SOG.Curve
- {
- points = points.SelectMany(o => o.ToArray()).ToList(),
- knots = knots,
- weights = weights,
- degree = target.Degree,
- periodic = target.IsPeriodic,
- rational = target.IsRational,
- closed = periodicClosed || target.Closed,
- length = length,
- domain = domain,
- bbox = _boxConverter.Convert(target.GeometricExtents),
- units = _contextStack.Current.SpeckleUnits
- };
-
- // POC: get display value if this is a database-resident spline
- // POC: if this is called by another converter that has created a spline, assumes the display value is set by that converter
- if (target.Database is not null)
- {
- curve.displayValue = GetDisplayValue(target);
- }
-
- return curve;
- }
-
- // POC: we might have DisplayValue converter/mapper?
- private SOG.Polyline GetDisplayValue(ADB.Spline spline)
- {
- ADB.Curve polySpline = spline.ToPolylineWithPrecision(10, false, false);
- List verticesList = new();
- switch (polySpline)
- {
- case ADB.Polyline2d o:
- verticesList = o.GetSubEntities(
- ADB.OpenMode.ForRead,
- _contextStack.Current.Document.TransactionManager.TopTransaction
- )
- .Where(e => e.VertexType != ADB.Vertex2dType.SplineControlVertex) // POC: not validated yet!
- .SelectMany(o => o.Position.ToArray())
- .ToList();
-
- break;
- case ADB.Polyline3d o:
- verticesList = o.GetSubEntities(
- ADB.OpenMode.ForRead,
- _contextStack.Current.Document.TransactionManager.TopTransaction
- )
- .Where(e => e.VertexType != ADB.Vertex3dType.ControlVertex)
- .SelectMany(o => o.Position.ToArray())
- .ToList();
- break;
- }
-
- return verticesList.ConvertToSpecklePolyline(_contextStack.Current.SpeckleUnits);
- }
+ public SOG.Curve Convert(ADB.Spline target) => _splineConverter.Convert(target);
}
diff --git a/DUI3-DX/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Raw/CircularArc3dToSpeckleConverter.cs b/DUI3-DX/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Raw/CircularArc3dToSpeckleRawConverter.cs
similarity index 100%
rename from DUI3-DX/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Raw/CircularArc3dToSpeckleConverter.cs
rename to DUI3-DX/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Raw/CircularArc3dToSpeckleRawConverter.cs
diff --git a/DUI3-DX/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Raw/DBArcToSpeckleRawConverter.cs b/DUI3-DX/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Raw/DBArcToSpeckleRawConverter.cs
new file mode 100644
index 0000000000..8b45be3de3
--- /dev/null
+++ b/DUI3-DX/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Raw/DBArcToSpeckleRawConverter.cs
@@ -0,0 +1,58 @@
+using Speckle.Converters.Common;
+using Speckle.Converters.Common.Objects;
+using Speckle.Core.Models;
+
+namespace Speckle.Converters.Autocad.ToSpeckle.Raw;
+
+public class DBArcToSpeckleRawConverter : ITypedConverter
+{
+ private readonly ITypedConverter _pointConverter;
+ private readonly ITypedConverter _planeConverter;
+ private readonly ITypedConverter _boxConverter;
+ private readonly IConversionContextStack _contextStack;
+
+ public DBArcToSpeckleRawConverter(
+ ITypedConverter pointConverter,
+ ITypedConverter planeConverter,
+ ITypedConverter boxConverter,
+ IConversionContextStack contextStack
+ )
+ {
+ _pointConverter = pointConverter;
+ _planeConverter = planeConverter;
+ _boxConverter = boxConverter;
+ _contextStack = contextStack;
+ }
+
+ public Base Convert(object target) => Convert((ADB.Arc)target);
+
+ public SOG.Arc Convert(ADB.Arc target)
+ {
+ SOG.Plane plane = _planeConverter.Convert(target.GetPlane());
+ SOG.Point start = _pointConverter.Convert(target.StartPoint);
+ SOG.Point end = _pointConverter.Convert(target.EndPoint);
+ SOG.Point mid = _pointConverter.Convert(target.GetPointAtDist(target.Length / 2.0));
+ SOP.Interval domain = new(target.StartParam, target.EndParam);
+ SOG.Box bbox = _boxConverter.Convert(target.GeometricExtents);
+
+ SOG.Arc arc =
+ new(
+ plane,
+ target.Radius,
+ target.StartAngle,
+ target.EndAngle,
+ target.TotalAngle,
+ _contextStack.Current.SpeckleUnits
+ )
+ {
+ startPoint = start,
+ endPoint = end,
+ midPoint = mid,
+ domain = domain,
+ length = target.Length,
+ bbox = bbox
+ };
+
+ return arc;
+ }
+}
diff --git a/DUI3-DX/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Raw/DBCircleToSpeckleRawConverter.cs b/DUI3-DX/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Raw/DBCircleToSpeckleRawConverter.cs
new file mode 100644
index 0000000000..06f4cf6877
--- /dev/null
+++ b/DUI3-DX/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Raw/DBCircleToSpeckleRawConverter.cs
@@ -0,0 +1,35 @@
+using Speckle.Converters.Common;
+using Speckle.Converters.Common.Objects;
+using Speckle.Core.Models;
+
+namespace Speckle.Converters.Autocad.ToSpeckle.Raw;
+
+public class DBCircleToSpeckleRawConverter : ITypedConverter
+{
+ private readonly ITypedConverter _planeConverter;
+ private readonly ITypedConverter _boxConverter;
+ private readonly IConversionContextStack _contextStack;
+
+ public DBCircleToSpeckleRawConverter(
+ ITypedConverter planeConverter,
+ ITypedConverter boxConverter,
+ IConversionContextStack contextStack
+ )
+ {
+ _planeConverter = planeConverter;
+ _boxConverter = boxConverter;
+ _contextStack = contextStack;
+ }
+
+ public Base Convert(object target) => Convert((ADB.Circle)target);
+
+ public SOG.Circle Convert(ADB.Circle target)
+ {
+ SOG.Plane plane = _planeConverter.Convert(target.GetPlane());
+ SOG.Box bbox = _boxConverter.Convert(target.GeometricExtents);
+ SOG.Circle circle =
+ new(plane, target.Radius, _contextStack.Current.SpeckleUnits) { length = target.Circumference, bbox = bbox };
+
+ return circle;
+ }
+}
diff --git a/DUI3-DX/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Raw/DBCurveToSpeckleRawConverter.cs b/DUI3-DX/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Raw/DBCurveToSpeckleRawConverter.cs
new file mode 100644
index 0000000000..ef392923be
--- /dev/null
+++ b/DUI3-DX/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Raw/DBCurveToSpeckleRawConverter.cs
@@ -0,0 +1,67 @@
+using Speckle.Converters.Common;
+using Speckle.Converters.Common.Objects;
+using Speckle.Core.Models;
+
+namespace Speckle.Converters.Autocad.ToSpeckle.Raw;
+
+public class DBCurveToSpeckleRawConverter : ITypedConverter, ITypedConverter
+{
+ private readonly ITypedConverter _lineConverter;
+
+ private readonly ITypedConverter _polylineConverter;
+ private readonly ITypedConverter _polyline2dConverter;
+ private readonly ITypedConverter _polyline3dConverter;
+ private readonly ITypedConverter _arcConverter;
+ private readonly ITypedConverter _circleConverter;
+ private readonly ITypedConverter _ellipseConverter;
+ private readonly ITypedConverter _splineConverter;
+ private readonly IConversionContextStack _contextStack;
+
+ public DBCurveToSpeckleRawConverter(
+ ITypedConverter lineConverter,
+ ITypedConverter polylineConverter,
+ ITypedConverter polyline2dConverter,
+ ITypedConverter polyline3dConverter,
+ ITypedConverter arcConverter,
+ ITypedConverter circleConverter,
+ ITypedConverter ellipseConverter,
+ ITypedConverter splineConverter,
+ IConversionContextStack contextStack
+ )
+ {
+ _lineConverter = lineConverter;
+ _polylineConverter = polylineConverter;
+ _polyline2dConverter = polyline2dConverter;
+ _polyline3dConverter = polyline3dConverter;
+ _arcConverter = arcConverter;
+ _circleConverter = circleConverter;
+ _ellipseConverter = ellipseConverter;
+ _splineConverter = splineConverter;
+ _contextStack = contextStack;
+ }
+
+ ///
+ /// Converts an Autocad curve to a Speckle ICurve.
+ ///
+ /// The Autocad curve to convert.
+ /// The Speckle curve.
+ ///
+ /// This is the main converter when the type of curve you input or output does not matter to the caller.
+ /// ⚠️ If an unsupported type of Curve is input, it will be converted as Spline.
+ ///
+ public Objects.ICurve Convert(ADB.Curve target) =>
+ target switch
+ {
+ ADB.Line line => _lineConverter.Convert(line),
+ //ADB.Polyline polyline => _polylineConverter.Convert(polyline),
+ //ADB.Polyline2d polyline2d => _polyline2dConverter.Convert(polyline2d),
+ //ADB.Polyline3d polyline3d => _polyline3dConverter.Convert(polyline3d),
+ ADB.Arc arc => _arcConverter.Convert(arc),
+ ADB.Circle circle => _circleConverter.Convert(circle),
+ ADB.Ellipse ellipse => _ellipseConverter.Convert(ellipse),
+ ADB.Spline spline => _splineConverter.Convert(spline),
+ _ => _splineConverter.Convert(target.Spline)
+ };
+
+ Base ITypedConverter.Convert(ADB.Curve target) => (Base)Convert(target);
+}
diff --git a/DUI3-DX/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Raw/DBEllipseToSpeckleRawConverter.cs b/DUI3-DX/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Raw/DBEllipseToSpeckleRawConverter.cs
new file mode 100644
index 0000000000..c763bb0e66
--- /dev/null
+++ b/DUI3-DX/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Raw/DBEllipseToSpeckleRawConverter.cs
@@ -0,0 +1,45 @@
+using Speckle.Converters.Common;
+using Speckle.Converters.Common.Objects;
+using Speckle.Core.Models;
+
+namespace Speckle.Converters.Autocad.ToSpeckle.Raw;
+
+public class DBEllipseToSpeckleRawConverter : ITypedConverter
+{
+ private readonly ITypedConverter _planeConverter;
+ private readonly ITypedConverter _boxConverter;
+ private readonly IConversionContextStack _contextStack;
+
+ public DBEllipseToSpeckleRawConverter(
+ ITypedConverter planeConverter,
+ ITypedConverter boxConverter,
+ IConversionContextStack contextStack
+ )
+ {
+ _planeConverter = planeConverter;
+ _boxConverter = boxConverter;
+ _contextStack = contextStack;
+ }
+
+ public Base Convert(object target) => Convert((ADB.Ellipse)target);
+
+ public SOG.Ellipse Convert(ADB.Ellipse target)
+ {
+ SOG.Plane plane = _planeConverter.Convert(new AG.Plane(target.Center, target.MajorAxis, target.MinorAxis));
+ SOG.Box bbox = _boxConverter.Convert(target.GeometricExtents);
+
+ // the start and end param corresponds to start and end angle in radians
+ SOP.Interval trim = new(target.StartAngle, target.EndAngle);
+
+ SOG.Ellipse ellipse =
+ new(plane, target.MajorRadius, target.MinorRadius, _contextStack.Current.SpeckleUnits)
+ {
+ domain = new(0, Math.PI * 2),
+ trimDomain = trim,
+ length = target.GetDistanceAtParameter(target.EndParam),
+ bbox = bbox
+ };
+
+ return ellipse;
+ }
+}
diff --git a/DUI3-DX/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Raw/DBLineToSpeckleRawConverter.cs b/DUI3-DX/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Raw/DBLineToSpeckleRawConverter.cs
new file mode 100644
index 0000000000..b4a083c8e3
--- /dev/null
+++ b/DUI3-DX/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Raw/DBLineToSpeckleRawConverter.cs
@@ -0,0 +1,37 @@
+using Speckle.Converters.Common;
+using Speckle.Converters.Common.Objects;
+using Speckle.Core.Models;
+
+namespace Speckle.Converters.Autocad.ToSpeckle.Raw;
+
+public class DBLineToSpeckleRawConverter : ITypedConverter
+{
+ private readonly ITypedConverter _pointConverter;
+ private readonly ITypedConverter _boxConverter;
+ private readonly IConversionContextStack _contextStack;
+
+ public DBLineToSpeckleRawConverter(
+ ITypedConverter pointConverter,
+ ITypedConverter boxConverter,
+ IConversionContextStack contextStack
+ )
+ {
+ _pointConverter = pointConverter;
+ _boxConverter = boxConverter;
+ _contextStack = contextStack;
+ }
+
+ public Base Convert(object target) => Convert((ADB.Line)target);
+
+ public SOG.Line Convert(ADB.Line target) =>
+ new(
+ _pointConverter.Convert(target.StartPoint),
+ _pointConverter.Convert(target.EndPoint),
+ _contextStack.Current.SpeckleUnits
+ )
+ {
+ length = target.Length,
+ domain = new SOP.Interval(0, target.Length),
+ bbox = _boxConverter.Convert(target.GeometricExtents)
+ };
+}
diff --git a/DUI3-DX/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Raw/DBSolid3dToSpeckleRawConverter.cs b/DUI3-DX/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Raw/DBSolid3dToSpeckleRawConverter.cs
new file mode 100644
index 0000000000..45c2d531a4
--- /dev/null
+++ b/DUI3-DX/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Raw/DBSolid3dToSpeckleRawConverter.cs
@@ -0,0 +1,84 @@
+using Speckle.Converters.Common;
+using Speckle.Converters.Common.Objects;
+using Speckle.Core.Models;
+
+namespace Speckle.Converters.Autocad.ToSpeckle.Raw;
+
+public class Solid3dToSpeckleRawConverter : ITypedConverter
+{
+ private readonly ITypedConverter _pointConverter;
+ private readonly ITypedConverter _boxConverter;
+ private readonly IConversionContextStack _contextStack;
+
+ public Solid3dToSpeckleRawConverter(
+ ITypedConverter pointConverter,
+ ITypedConverter boxConverter,
+ IConversionContextStack contextStack
+ )
+ {
+ _pointConverter = pointConverter;
+ _boxConverter = boxConverter;
+ _contextStack = contextStack;
+ }
+
+ public Base Convert(object target) => Convert((ADB.Solid3d)target);
+
+ public SOG.Mesh Convert(ADB.Solid3d target)
+ {
+ using ABR.Brep brep = new(target);
+ if (brep.IsNull)
+ {
+ throw new SpeckleConversionException("Could not retrieve brep from the solid3d.");
+ }
+
+ var vertices = new List();
+ var faces = new List();
+
+ // create mesh from solid with mesh filter
+ using ABR.Mesh2dControl control = new();
+ control.MaxSubdivisions = 10000; // POC: these settings may need adjusting
+ using ABR.Mesh2dFilter filter = new();
+ filter.Insert(brep, control);
+ using ABR.Mesh2d m = new(filter);
+ foreach (ABR.Element2d e in m.Element2ds)
+ {
+ // get vertices
+ List faceIndices = new();
+ foreach (ABR.Node n in e.Nodes)
+ {
+ faceIndices.Add(vertices.Count);
+ vertices.Add(n.Point);
+ n.Dispose();
+ }
+
+ // get faces
+ List faceList = new() { e.Nodes.Count() };
+ for (int i = 0; i < e.Nodes.Count(); i++)
+ {
+ faceList.Add(faceIndices[i]);
+ }
+
+ faces.AddRange(faceList);
+
+ e.Dispose();
+ }
+
+ // mesh props
+ var convertedVertices = vertices.SelectMany(o => _pointConverter.Convert(o).ToList()).ToList();
+ double volume = target.MassProperties.Volume;
+ double area = target.Area;
+ SOG.Box bbox = _boxConverter.Convert(target.GeometricExtents);
+
+ // create speckle mesh
+ SOG.Mesh mesh =
+ new(convertedVertices, faces)
+ {
+ units = _contextStack.Current.SpeckleUnits,
+ bbox = bbox,
+ area = area,
+ volume = volume
+ };
+
+ return mesh;
+ }
+}
diff --git a/DUI3-DX/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Raw/DBSplineToSpeckleRawConverter.cs b/DUI3-DX/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Raw/DBSplineToSpeckleRawConverter.cs
new file mode 100644
index 0000000000..d46b9de0a7
--- /dev/null
+++ b/DUI3-DX/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Raw/DBSplineToSpeckleRawConverter.cs
@@ -0,0 +1,155 @@
+using Autodesk.AutoCAD.Geometry;
+using Speckle.Converters.Autocad.Extensions;
+using Speckle.Converters.Common;
+using Speckle.Converters.Common.Objects;
+using Speckle.Core.Models;
+
+namespace Speckle.Converters.Autocad.ToSpeckle.Raw;
+
+public class DBSplineToSpeckleRawConverter : ITypedConverter
+{
+ private readonly ITypedConverter _intervalConverter;
+ private readonly ITypedConverter _boxConverter;
+ private readonly IConversionContextStack _contextStack;
+
+ public DBSplineToSpeckleRawConverter(
+ ITypedConverter intervalConverter,
+ ITypedConverter boxConverter,
+ IConversionContextStack contextStack
+ )
+ {
+ _intervalConverter = intervalConverter;
+ _boxConverter = boxConverter;
+ _contextStack = contextStack;
+ }
+
+ public Base Convert(object target) => Convert((ADB.Spline)target);
+
+ public SOG.Curve Convert(ADB.Spline target)
+ {
+ // get nurbs and geo data
+ ADB.NurbsData data = target.NurbsData;
+
+ // POC: HACK: check for incorrectly closed periodic curves (this seems like acad bug, has resulted from receiving rhino curves)
+ bool periodicClosed = false;
+ double length = 0;
+ SOP.Interval domain = new();
+ if (target.GetGeCurve() is NurbCurve3d nurbs)
+ {
+ length = nurbs.GetLength(nurbs.StartParameter, nurbs.EndParameter, 0.001);
+ domain = _intervalConverter.Convert(nurbs.GetInterval());
+ if (nurbs.Knots.Count < nurbs.NumberOfControlPoints + nurbs.Degree + 1 && target.IsPeriodic)
+ {
+ periodicClosed = true;
+ }
+ }
+
+ // get points
+ List points = new();
+ foreach (Point3d point in data.GetControlPoints().OfType())
+ {
+ points.Add(point);
+ }
+
+ // NOTE: for closed periodic splines, autocad does not track last #degree points.
+ // Add the first #degree control points to the list if so.
+ if (periodicClosed)
+ {
+ points.AddRange(points.GetRange(0, target.Degree));
+ }
+
+ // get knots
+ // NOTE: for closed periodic splines, autocad has #control points + 1 knots.
+ // Add #degree extra knots to beginning and end with #degree - 1 multiplicity for first and last
+ var knots = data.GetKnots().OfType().ToList();
+ if (periodicClosed)
+ {
+ double interval = knots[1] - knots[0]; //knot interval
+
+ for (int i = 0; i < data.Degree; i++)
+ {
+ if (i < 2)
+ {
+ knots.Insert(knots.Count, knots[^1] + interval);
+ knots.Insert(0, knots[0] - interval);
+ }
+ else
+ {
+ knots.Insert(knots.Count, knots[^1]);
+ knots.Insert(0, knots[0]);
+ }
+ }
+ }
+
+ // get weights
+ // NOTE: autocad assigns unweighted points a value of -1, and will return an empty list in the spline's nurbsdata if no points are weighted
+ // NOTE: for closed periodic splines, autocad does not track last #degree points. Add the first #degree weights to the list if so.
+ List weights = new();
+ for (int i = 0; i < target.NumControlPoints; i++)
+ {
+ double weight = target.WeightAt(i);
+ weights.Add(weight <= 0 ? 1 : weight);
+ }
+
+ if (periodicClosed)
+ {
+ weights.AddRange(weights.GetRange(0, target.Degree));
+ }
+
+ // set nurbs curve info
+ var curve = new SOG.Curve
+ {
+ points = points.SelectMany(o => o.ToArray()).ToList(),
+ knots = knots,
+ weights = weights,
+ degree = target.Degree,
+ periodic = target.IsPeriodic,
+ rational = target.IsRational,
+ closed = periodicClosed || target.Closed,
+ length = length,
+ domain = domain,
+ bbox = _boxConverter.Convert(target.GeometricExtents),
+ units = _contextStack.Current.SpeckleUnits
+ };
+
+ // POC: get display value if this is a database-resident spline
+ // POC: if this is called by another converter that has created a spline, assumes the display value is set by that converter
+ if (target.Database is not null)
+ {
+ curve.displayValue = GetDisplayValue(target);
+ }
+
+ return curve;
+ }
+
+ // POC: we might have DisplayValue converter/mapper?
+ private SOG.Polyline GetDisplayValue(ADB.Spline spline)
+ {
+ ADB.Curve polySpline = spline.ToPolylineWithPrecision(10, false, false);
+ List verticesList = new();
+ switch (polySpline)
+ {
+ case ADB.Polyline2d o:
+ verticesList = o.GetSubEntities(
+ ADB.OpenMode.ForRead,
+ _contextStack.Current.Document.TransactionManager.TopTransaction
+ )
+ .Where(e => e.VertexType != ADB.Vertex2dType.SplineControlVertex) // POC: not validated yet!
+ .SelectMany(o => o.Position.ToArray())
+ .ToList();
+
+ break;
+ case ADB.Polyline3d o:
+ verticesList = o.GetSubEntities(
+ ADB.OpenMode.ForRead,
+ _contextStack.Current.Document.TransactionManager.TopTransaction
+ )
+ .Where(e => e.VertexType != ADB.Vertex3dType.ControlVertex)
+ .SelectMany(o => o.Position.ToArray())
+ .ToList();
+ break;
+ }
+
+ return verticesList.ConvertToSpecklePolyline(_contextStack.Current.SpeckleUnits);
+ }
+}
diff --git a/DUI3-DX/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Raw/PlaneToSpeckleRawConverter.cs b/DUI3-DX/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Raw/PlaneToSpeckleRawConverter.cs
index 4c5bc6f1ce..5e712b033b 100644
--- a/DUI3-DX/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Raw/PlaneToSpeckleRawConverter.cs
+++ b/DUI3-DX/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Raw/PlaneToSpeckleRawConverter.cs
@@ -4,7 +4,7 @@
namespace Speckle.Converters.Autocad.ToSpeckle.Raw;
-public class PlaneToSpeckleRawConverter : IToSpeckleTopLevelConverter, ITypedConverter
+public class PlaneToSpeckleRawConverter : ITypedConverter
{
private readonly ITypedConverter _vectorConverter;
private readonly ITypedConverter _pointConverter;
diff --git a/DUI3-DX/Converters/Civil3d/Speckle.Converters.Civil3d2024.DependencyInjection/Civil3dConverterModule.cs b/DUI3-DX/Converters/Civil3d/Speckle.Converters.Civil3d2024.DependencyInjection/Civil3dConverterModule.cs
new file mode 100644
index 0000000000..193648613b
--- /dev/null
+++ b/DUI3-DX/Converters/Civil3d/Speckle.Converters.Civil3d2024.DependencyInjection/Civil3dConverterModule.cs
@@ -0,0 +1,24 @@
+using Autodesk.AutoCAD.ApplicationServices;
+using Speckle.Autofac.DependencyInjection;
+using Speckle.Converters.Civil3d;
+using Speckle.Converters.Common;
+using Speckle.Converters.Common.DependencyInjection;
+using Autodesk.AutoCAD.DatabaseServices;
+using Speckle.Converters.Autocad;
+
+namespace Speckle.Converters.Civil3d2024.DependencyInjection;
+
+public class Civil3dConverterModule : ISpeckleModule
+{
+ public void Load(SpeckleContainerBuilder builder)
+ {
+ // Register single root
+ builder.AddRootCommon();
+
+ // register all application converters
+ builder.AddApplicationConverters();
+ builder.AddApplicationConverters();
+ builder.AddScoped, Civil3dConversionContextStack>();
+ builder.AddScoped, AutocadConversionContextStack>();
+ }
+}
diff --git a/DUI3-DX/Converters/Civil3d/Speckle.Converters.Civil3d2024.DependencyInjection/Speckle.Converters.Civil3d2024.DependencyInjection.csproj b/DUI3-DX/Converters/Civil3d/Speckle.Converters.Civil3d2024.DependencyInjection/Speckle.Converters.Civil3d2024.DependencyInjection.csproj
new file mode 100644
index 0000000000..9cbf64f01c
--- /dev/null
+++ b/DUI3-DX/Converters/Civil3d/Speckle.Converters.Civil3d2024.DependencyInjection/Speckle.Converters.Civil3d2024.DependencyInjection.csproj
@@ -0,0 +1,17 @@
+
+
+
+ net48
+ x64
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/DUI3-DX/Converters/Civil3d/Speckle.Converters.Civil3d2024.DependencyInjection/packages.lock.json b/DUI3-DX/Converters/Civil3d/Speckle.Converters.Civil3d2024.DependencyInjection/packages.lock.json
new file mode 100644
index 0000000000..90e69d514d
--- /dev/null
+++ b/DUI3-DX/Converters/Civil3d/Speckle.Converters.Civil3d2024.DependencyInjection/packages.lock.json
@@ -0,0 +1,448 @@
+{
+ "version": 2,
+ "dependencies": {
+ ".NETFramework,Version=v4.8": {
+ "Autofac": {
+ "type": "Direct",
+ "requested": "[5.2.0, )",
+ "resolved": "5.2.0",
+ "contentHash": "V8dBH0dsv75uDzl7Sw+HkhKDPUw2eXnlMjcSVMH+tLo2s67MpTKGyDj1pDcpR+IF2u4YRs0s3/x7R88YJzIWvg==",
+ "dependencies": {
+ "Microsoft.Bcl.AsyncInterfaces": "1.1.0"
+ }
+ },
+ "Microsoft.SourceLink.GitHub": {
+ "type": "Direct",
+ "requested": "[8.0.0, )",
+ "resolved": "8.0.0",
+ "contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==",
+ "dependencies": {
+ "Microsoft.Build.Tasks.Git": "8.0.0",
+ "Microsoft.SourceLink.Common": "8.0.0"
+ }
+ },
+ "PolySharp": {
+ "type": "Direct",
+ "requested": "[1.14.1, )",
+ "resolved": "1.14.1",
+ "contentHash": "mOOmFYwad3MIOL14VCjj02LljyF1GNw1wP0YVlxtcPvqdxjGGMNdNJJxHptlry3MOd8b40Flm8RPOM8JOlN2sQ=="
+ },
+ "Speckle.InterfaceGenerator": {
+ "type": "Direct",
+ "requested": "[0.9.5, )",
+ "resolved": "0.9.5",
+ "contentHash": "oU/L7pN1R7q8KkbrpQ3WJnHirPHqn+9DEA7asOcUiggV5dzVg1A/VYs7GOSusD24njxXh03tE3a2oTLOjt3cVg=="
+ },
+ "GraphQL.Client": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "8yPNBbuVBpTptivyAlak4GZvbwbUcjeQTL4vN1HKHRuOykZ4r7l5fcLS6vpyPyLn0x8FsL31xbOIKyxbmR9rbA==",
+ "dependencies": {
+ "GraphQL.Client.Abstractions": "6.0.0",
+ "GraphQL.Client.Abstractions.Websocket": "6.0.0",
+ "System.Net.WebSockets.Client.Managed": "1.0.22",
+ "System.Reactive": "5.0.0"
+ }
+ },
+ "GraphQL.Client.Abstractions": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "h7uzWFORHZ+CCjwr/ThAyXMr0DPpzEANDa4Uo54wqCQ+j7qUKwqYTgOrb1W40sqbvNaZm9v/X7It31SUw0maHA==",
+ "dependencies": {
+ "GraphQL.Primitives": "6.0.0"
+ }
+ },
+ "GraphQL.Client.Abstractions.Websocket": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "Nr9bPf8gIOvLuXpqEpqr9z9jslYFJOvd0feHth3/kPqeR3uMbjF5pjiwh4jxyMcxHdr8Pb6QiXkV3hsSyt0v7A==",
+ "dependencies": {
+ "GraphQL.Client.Abstractions": "6.0.0"
+ }
+ },
+ "GraphQL.Primitives": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "yg72rrYDapfsIUrul7aF6wwNnTJBOFvuA9VdDTQpPa8AlAriHbufeXYLBcodKjfUdkCnaiggX1U/nEP08Zb5GA=="
+ },
+ "Microsoft.Bcl.AsyncInterfaces": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "W8DPQjkMScOMTtJbPwmPyj9c3zYSFGawDW3jwlBOOsnY+EzZFLgNQ/UMkK35JmkNOVPdCyPr2Tw7Vv9N+KA3ZQ==",
+ "dependencies": {
+ "System.Threading.Tasks.Extensions": "4.5.4"
+ }
+ },
+ "Microsoft.Build.Tasks.Git": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ=="
+ },
+ "Microsoft.CSharp": {
+ "type": "Transitive",
+ "resolved": "4.7.0",
+ "contentHash": "pTj+D3uJWyN3My70i2Hqo+OXixq3Os2D1nJ2x92FFo6sk8fYS1m1WLNTs0Dc1uPaViH0YvEEwvzddQ7y4rhXmA=="
+ },
+ "Microsoft.Data.Sqlite": {
+ "type": "Transitive",
+ "resolved": "7.0.5",
+ "contentHash": "KGxbPeWsQMnmQy43DSBxAFtHz3l2JX8EWBSGUCvT3CuZ8KsuzbkqMIJMDOxWtG8eZSoCDI04aiVQjWuuV8HmSw==",
+ "dependencies": {
+ "Microsoft.Data.Sqlite.Core": "7.0.5",
+ "SQLitePCLRaw.bundle_e_sqlite3": "2.1.4"
+ }
+ },
+ "Microsoft.Data.Sqlite.Core": {
+ "type": "Transitive",
+ "resolved": "7.0.5",
+ "contentHash": "FTerRmQPqHrCrnoUzhBu+E+1DNGwyrAMLqHkAqOOOu5pGfyMOj8qQUBxI/gDtWtG11p49UxSfWmBzRNlwZqfUg==",
+ "dependencies": {
+ "SQLitePCLRaw.core": "2.1.4"
+ }
+ },
+ "Microsoft.SourceLink.Common": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw=="
+ },
+ "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.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.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": "5.0.0",
+ "contentHash": "ZD9TMpsmYJLrxbbmdvhwt9YEgG5WntEnZ/d1eH8JBX9LBp+Ju8BSBhUGbZMNVHHomWo2KVImJhTDl2hIgw/6MA=="
+ },
+ "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.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.converters.civil3d2024": {
+ "type": "Project",
+ "dependencies": {
+ "Speckle.AutoCAD.API": "[2024.0.0, )",
+ "Speckle.Civil3D.API": "[2024.0.0, )",
+ "Speckle.Converters.Common": "[2.0.999-local, )"
+ }
+ },
+ "speckle.converters.common": {
+ "type": "Project",
+ "dependencies": {
+ "Speckle.Autofac": "[2.0.999-local, )",
+ "Speckle.Objects": "[3.0.1-alpha.14, )"
+ }
+ },
+ "speckle.converters.common.dependencyinjection": {
+ "type": "Project",
+ "dependencies": {
+ "Speckle.Autofac": "[2.0.999-local, )",
+ "Speckle.Converters.Common": "[2.0.999-local, )"
+ }
+ },
+ "Microsoft.Extensions.Logging.Abstractions": {
+ "type": "CentralTransitive",
+ "requested": "[7.0.0, )",
+ "resolved": "7.0.0",
+ "contentHash": "kmn78+LPVMOWeITUjIlfxUPDsI0R6G0RkeAMBmQxAJ7vBJn4q2dTva7pWi65ceN5vPGjJ9q/Uae2WKgvfktJAw==",
+ "dependencies": {
+ "System.Buffers": "4.5.1",
+ "System.Memory": "4.5.5"
+ }
+ },
+ "Speckle.AutoCAD.API": {
+ "type": "CentralTransitive",
+ "requested": "[2024.0.0, )",
+ "resolved": "2024.0.0",
+ "contentHash": "pZZ5uI+NXhZaQnsqRkgp/rywqBAjDObDJ9XNFGJvemT5k2OthDpHzlK/mKxz8QDCYie7uImQ8dv3uWj2QUFDPw=="
+ },
+ "Speckle.Civil3D.API": {
+ "type": "CentralTransitive",
+ "requested": "[2024.0.0, )",
+ "resolved": "2024.0.0",
+ "contentHash": "9Q7M1k0DotN8w7MkiScQezErRdnZ4dAkxBMcPNhHSWoth/lSaT6UPV1aYEdl90RhehJWG4l3O7U2e3OXvVSFdw==",
+ "dependencies": {
+ "Speckle.AutoCAD.API": "2024.0.0"
+ }
+ },
+ "Speckle.Core": {
+ "type": "CentralTransitive",
+ "requested": "[3.0.1-alpha.14, )",
+ "resolved": "3.0.1-alpha.14",
+ "contentHash": "RzQPVIGFFkKvG56YLr8ACtiwdWJE6IJ9vCQ4qHa0PIsUEpfzAIAi59jnzqtByOFC0FiFrFPow9bkfzylaZorAA==",
+ "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": "CentralTransitive",
+ "requested": "[3.0.1-alpha.14, )",
+ "resolved": "3.0.1-alpha.14",
+ "contentHash": "z38LGryMvh7iU1uBW+4uo5DwsB3CwRgLt2uFexWFx3mPSid+A0l5XcJzOgLwgFhNl6B42Ryz4ezBsddTp1Uc/g==",
+ "dependencies": {
+ "Speckle.Core": "3.0.1-alpha.14"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/DUI3-DX/Converters/Civil3d/Speckle.Converters.Civil3d2024/Speckle.Converters.Civil3d2024.csproj b/DUI3-DX/Converters/Civil3d/Speckle.Converters.Civil3d2024/Speckle.Converters.Civil3d2024.csproj
new file mode 100644
index 0000000000..5cd6f9707b
--- /dev/null
+++ b/DUI3-DX/Converters/Civil3d/Speckle.Converters.Civil3d2024/Speckle.Converters.Civil3d2024.csproj
@@ -0,0 +1,21 @@
+
+
+
+ net48
+ x64
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/DUI3-DX/Converters/Civil3d/Speckle.Converters.Civil3d2024/packages.lock.json b/DUI3-DX/Converters/Civil3d/Speckle.Converters.Civil3d2024/packages.lock.json
new file mode 100644
index 0000000000..853f08eb85
--- /dev/null
+++ b/DUI3-DX/Converters/Civil3d/Speckle.Converters.Civil3d2024/packages.lock.json
@@ -0,0 +1,424 @@
+{
+ "version": 2,
+ "dependencies": {
+ ".NETFramework,Version=v4.8": {
+ "Microsoft.SourceLink.GitHub": {
+ "type": "Direct",
+ "requested": "[8.0.0, )",
+ "resolved": "8.0.0",
+ "contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==",
+ "dependencies": {
+ "Microsoft.Build.Tasks.Git": "8.0.0",
+ "Microsoft.SourceLink.Common": "8.0.0"
+ }
+ },
+ "PolySharp": {
+ "type": "Direct",
+ "requested": "[1.14.1, )",
+ "resolved": "1.14.1",
+ "contentHash": "mOOmFYwad3MIOL14VCjj02LljyF1GNw1wP0YVlxtcPvqdxjGGMNdNJJxHptlry3MOd8b40Flm8RPOM8JOlN2sQ=="
+ },
+ "Speckle.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=="
+ },
+ "GraphQL.Client": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "8yPNBbuVBpTptivyAlak4GZvbwbUcjeQTL4vN1HKHRuOykZ4r7l5fcLS6vpyPyLn0x8FsL31xbOIKyxbmR9rbA==",
+ "dependencies": {
+ "GraphQL.Client.Abstractions": "6.0.0",
+ "GraphQL.Client.Abstractions.Websocket": "6.0.0",
+ "System.Net.WebSockets.Client.Managed": "1.0.22",
+ "System.Reactive": "5.0.0"
+ }
+ },
+ "GraphQL.Client.Abstractions": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "h7uzWFORHZ+CCjwr/ThAyXMr0DPpzEANDa4Uo54wqCQ+j7qUKwqYTgOrb1W40sqbvNaZm9v/X7It31SUw0maHA==",
+ "dependencies": {
+ "GraphQL.Primitives": "6.0.0"
+ }
+ },
+ "GraphQL.Client.Abstractions.Websocket": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "Nr9bPf8gIOvLuXpqEpqr9z9jslYFJOvd0feHth3/kPqeR3uMbjF5pjiwh4jxyMcxHdr8Pb6QiXkV3hsSyt0v7A==",
+ "dependencies": {
+ "GraphQL.Client.Abstractions": "6.0.0"
+ }
+ },
+ "GraphQL.Primitives": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "yg72rrYDapfsIUrul7aF6wwNnTJBOFvuA9VdDTQpPa8AlAriHbufeXYLBcodKjfUdkCnaiggX1U/nEP08Zb5GA=="
+ },
+ "Microsoft.Bcl.AsyncInterfaces": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "W8DPQjkMScOMTtJbPwmPyj9c3zYSFGawDW3jwlBOOsnY+EzZFLgNQ/UMkK35JmkNOVPdCyPr2Tw7Vv9N+KA3ZQ==",
+ "dependencies": {
+ "System.Threading.Tasks.Extensions": "4.5.4"
+ }
+ },
+ "Microsoft.Build.Tasks.Git": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ=="
+ },
+ "Microsoft.CSharp": {
+ "type": "Transitive",
+ "resolved": "4.7.0",
+ "contentHash": "pTj+D3uJWyN3My70i2Hqo+OXixq3Os2D1nJ2x92FFo6sk8fYS1m1WLNTs0Dc1uPaViH0YvEEwvzddQ7y4rhXmA=="
+ },
+ "Microsoft.Data.Sqlite": {
+ "type": "Transitive",
+ "resolved": "7.0.5",
+ "contentHash": "KGxbPeWsQMnmQy43DSBxAFtHz3l2JX8EWBSGUCvT3CuZ8KsuzbkqMIJMDOxWtG8eZSoCDI04aiVQjWuuV8HmSw==",
+ "dependencies": {
+ "Microsoft.Data.Sqlite.Core": "7.0.5",
+ "SQLitePCLRaw.bundle_e_sqlite3": "2.1.4"
+ }
+ },
+ "Microsoft.Data.Sqlite.Core": {
+ "type": "Transitive",
+ "resolved": "7.0.5",
+ "contentHash": "FTerRmQPqHrCrnoUzhBu+E+1DNGwyrAMLqHkAqOOOu5pGfyMOj8qQUBxI/gDtWtG11p49UxSfWmBzRNlwZqfUg==",
+ "dependencies": {
+ "SQLitePCLRaw.core": "2.1.4"
+ }
+ },
+ "Microsoft.SourceLink.Common": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw=="
+ },
+ "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.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.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": "5.0.0",
+ "contentHash": "ZD9TMpsmYJLrxbbmdvhwt9YEgG5WntEnZ/d1eH8JBX9LBp+Ju8BSBhUGbZMNVHHomWo2KVImJhTDl2hIgw/6MA=="
+ },
+ "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.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.converters.common": {
+ "type": "Project",
+ "dependencies": {
+ "Speckle.Autofac": "[2.0.999-local, )",
+ "Speckle.Objects": "[3.0.1-alpha.14, )"
+ }
+ },
+ "Microsoft.Extensions.Logging.Abstractions": {
+ "type": "CentralTransitive",
+ "requested": "[7.0.0, )",
+ "resolved": "7.0.0",
+ "contentHash": "kmn78+LPVMOWeITUjIlfxUPDsI0R6G0RkeAMBmQxAJ7vBJn4q2dTva7pWi65ceN5vPGjJ9q/Uae2WKgvfktJAw==",
+ "dependencies": {
+ "System.Buffers": "4.5.1",
+ "System.Memory": "4.5.5"
+ }
+ },
+ "Speckle.Core": {
+ "type": "CentralTransitive",
+ "requested": "[3.0.1-alpha.14, )",
+ "resolved": "3.0.1-alpha.14",
+ "contentHash": "RzQPVIGFFkKvG56YLr8ACtiwdWJE6IJ9vCQ4qHa0PIsUEpfzAIAi59jnzqtByOFC0FiFrFPow9bkfzylaZorAA==",
+ "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": "CentralTransitive",
+ "requested": "[3.0.1-alpha.14, )",
+ "resolved": "3.0.1-alpha.14",
+ "contentHash": "z38LGryMvh7iU1uBW+4uo5DwsB3CwRgLt2uFexWFx3mPSid+A0l5XcJzOgLwgFhNl6B42Ryz4ezBsddTp1Uc/g==",
+ "dependencies": {
+ "Speckle.Core": "3.0.1-alpha.14"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/DUI3-DX/Converters/Civil3d/Speckle.Converters.Civil3dShared/Civil3dConversionContextStack.cs b/DUI3-DX/Converters/Civil3d/Speckle.Converters.Civil3dShared/Civil3dConversionContextStack.cs
new file mode 100644
index 0000000000..0d803db250
--- /dev/null
+++ b/DUI3-DX/Converters/Civil3d/Speckle.Converters.Civil3dShared/Civil3dConversionContextStack.cs
@@ -0,0 +1,38 @@
+using System.Diagnostics.CodeAnalysis;
+using Speckle.Converters.Common;
+
+namespace Speckle.Converters.Civil3d;
+
+// POC: Suppressed naming warning for now, but we should evaluate if we should follow this or disable it.
+[SuppressMessage(
+ "Naming",
+ "CA1711:Identifiers should not have incorrect suffix",
+ Justification = "Name ends in Stack but it is in fact a Stack, just not inheriting from `System.Collections.Stack`"
+)]
+public class Civil3dConversionContextStack : ConversionContextStack
+{
+ public Civil3dConversionContextStack(IHostToSpeckleUnitConverter unitConverter)
+ : base(
+ Application.DocumentManager.CurrentDocument,
+ GetDocBuiltInUnit(Application.DocumentManager.CurrentDocument),
+ unitConverter
+ ) { }
+
+ private static AAEC.BuiltInUnit GetDocBuiltInUnit(Document doc)
+ {
+ AAEC.BuiltInUnit unit = AAEC.BuiltInUnit.Dimensionless;
+
+ using (ADB.Transaction tr = doc.Database.TransactionManager.StartTransaction())
+ {
+ ADB.ObjectId id = AAEC.ApplicationServices.DrawingSetupVariables.GetInstance(doc.Database, false);
+ if (tr.GetObject(id, ADB.OpenMode.ForRead) is AAEC.ApplicationServices.DrawingSetupVariables setupVariables)
+ {
+ unit = setupVariables.LinearUnit;
+ }
+
+ tr.Commit();
+ }
+
+ return unit;
+ }
+}
diff --git a/DUI3-DX/Converters/Civil3d/Speckle.Converters.Civil3dShared/Civil3dRootToHostConverter.cs b/DUI3-DX/Converters/Civil3d/Speckle.Converters.Civil3dShared/Civil3dRootToHostConverter.cs
new file mode 100644
index 0000000000..265cd3a796
--- /dev/null
+++ b/DUI3-DX/Converters/Civil3d/Speckle.Converters.Civil3dShared/Civil3dRootToHostConverter.cs
@@ -0,0 +1,59 @@
+using Autodesk.AutoCAD.DatabaseServices;
+using Speckle.Autofac.DependencyInjection;
+using Speckle.Converters.Common;
+using Speckle.Converters.Common.Objects;
+using Speckle.Core.Models;
+
+namespace Speckle.Converters.Civil3d;
+
+public class Civil3dRootToHostConverter : IRootToSpeckleConverter
+{
+ private readonly IFactory _toSpeckle;
+ private readonly IConversionContextStack _contextStack;
+
+ public Civil3dRootToHostConverter(
+ IFactory toSpeckle,
+ IConversionContextStack contextStack
+ )
+ {
+ _toSpeckle = toSpeckle;
+ _contextStack = contextStack;
+ }
+
+ public Base Convert(object target)
+ {
+ if (target is not DBObject dbObject)
+ {
+ throw new NotSupportedException(
+ $"Conversion of {target.GetType().Name} to Speckle is not supported. Only objects that inherit from DBObject are."
+ );
+ }
+
+ Type type = dbObject.GetType();
+
+ try
+ {
+ using (var l = _contextStack.Current.Document.LockDocument())
+ {
+ using (var tr = _contextStack.Current.Document.Database.TransactionManager.StartTransaction())
+ {
+ var objectConverter = _toSpeckle.ResolveInstance(type.Name);
+
+ if (objectConverter == null)
+ {
+ throw new NotSupportedException($"No conversion found for {target.GetType().Name}");
+ }
+
+ var convertedObject = objectConverter.Convert(dbObject);
+ tr.Commit();
+ return convertedObject;
+ }
+ }
+ }
+ catch (SpeckleConversionException e)
+ {
+ Console.WriteLine(e);
+ throw; // Just rethrowing for now, Logs may be needed here.
+ }
+ }
+}
diff --git a/DUI3-DX/Converters/Civil3d/Speckle.Converters.Civil3dShared/Civil3dToSpeckleUnitConverter.cs b/DUI3-DX/Converters/Civil3d/Speckle.Converters.Civil3dShared/Civil3dToSpeckleUnitConverter.cs
new file mode 100644
index 0000000000..0c61621a4c
--- /dev/null
+++ b/DUI3-DX/Converters/Civil3d/Speckle.Converters.Civil3dShared/Civil3dToSpeckleUnitConverter.cs
@@ -0,0 +1,39 @@
+using Speckle.Converters.Common;
+using Speckle.Core.Kits;
+using Speckle.Core.Logging; // POC: boy do I think this is the wrong place for SpeckleException!
+
+namespace Speckle.Converters.Civil3d;
+
+public class Civil3dToSpeckleUnitConverter : IHostToSpeckleUnitConverter
+{
+ private static readonly IReadOnlyDictionary s_unitsMapping = Create();
+
+ private static IReadOnlyDictionary Create()
+ {
+ var dict = new Dictionary();
+
+ // POC: we should have a unit test to confirm these are as expected and don't change
+ dict[AAEC.BuiltInUnit.Kilometer] = Units.Kilometers;
+ dict[AAEC.BuiltInUnit.Meter] = Units.Meters;
+ dict[AAEC.BuiltInUnit.Centimeter] = Units.Centimeters;
+ dict[AAEC.BuiltInUnit.Millimeter] = Units.Millimeters;
+ dict[AAEC.BuiltInUnit.Mile] = Units.Miles;
+ dict[AAEC.BuiltInUnit.Yards] = Units.Yards;
+ dict[AAEC.BuiltInUnit.Foot] = Units.Feet;
+ dict[AAEC.BuiltInUnit.SurveyFoot] = Units.USFeet;
+ dict[AAEC.BuiltInUnit.Inch] = Units.Inches;
+ dict[AAEC.BuiltInUnit.Dimensionless] = Units.None;
+ return dict;
+ }
+
+ public string ConvertOrThrow(AAEC.BuiltInUnit hostUnit)
+ {
+ if (s_unitsMapping.TryGetValue(hostUnit, out string value))
+ {
+ return value;
+ }
+
+ // POC: probably would prefer something more specific
+ throw new SpeckleException($"The Unit System \"{hostUnit}\" is unsupported.");
+ }
+}
diff --git a/DUI3-DX/Converters/Civil3d/Speckle.Converters.Civil3dShared/GlobalUsings.cs b/DUI3-DX/Converters/Civil3d/Speckle.Converters.Civil3dShared/GlobalUsings.cs
new file mode 100644
index 0000000000..c4134c866e
--- /dev/null
+++ b/DUI3-DX/Converters/Civil3d/Speckle.Converters.Civil3dShared/GlobalUsings.cs
@@ -0,0 +1,3 @@
+global using AAEC = Autodesk.Aec;
+global using CDB = Autodesk.Civil.DatabaseServices;
+global using SOBE = Objects.BuiltElements;
diff --git a/DUI3-DX/Converters/Civil3d/Speckle.Converters.Civil3dShared/Speckle.Converters.Civil3dShared.projitems b/DUI3-DX/Converters/Civil3d/Speckle.Converters.Civil3dShared/Speckle.Converters.Civil3dShared.projitems
new file mode 100644
index 0000000000..1dc6ebd3b8
--- /dev/null
+++ b/DUI3-DX/Converters/Civil3d/Speckle.Converters.Civil3dShared/Speckle.Converters.Civil3dShared.projitems
@@ -0,0 +1,19 @@
+
+
+
+ $(MSBuildAllProjects);$(MSBuildThisFileFullPath)
+ true
+ 35175682-da83-4c0a-a49d-b191f5885d8e
+
+
+ Speckle.Converters.Civil3dShared
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/DUI3-DX/Converters/Civil3d/Speckle.Converters.Civil3dShared/Speckle.Converters.Civil3dShared.shproj b/DUI3-DX/Converters/Civil3d/Speckle.Converters.Civil3dShared/Speckle.Converters.Civil3dShared.shproj
new file mode 100644
index 0000000000..ab81b391e7
--- /dev/null
+++ b/DUI3-DX/Converters/Civil3d/Speckle.Converters.Civil3dShared/Speckle.Converters.Civil3dShared.shproj
@@ -0,0 +1,13 @@
+
+
+
+ 35175682-da83-4c0a-a49d-b191f5885d8e
+ 14.0
+
+
+
+
+
+
+
+
diff --git a/DUI3-DX/Converters/Civil3d/Speckle.Converters.Civil3dShared/ToSpeckle/BuiltElements/PipeToSpeckleConverter.cs b/DUI3-DX/Converters/Civil3d/Speckle.Converters.Civil3dShared/ToSpeckle/BuiltElements/PipeToSpeckleConverter.cs
new file mode 100644
index 0000000000..f061a890bd
--- /dev/null
+++ b/DUI3-DX/Converters/Civil3d/Speckle.Converters.Civil3dShared/ToSpeckle/BuiltElements/PipeToSpeckleConverter.cs
@@ -0,0 +1,60 @@
+using Objects;
+using Objects.Other;
+using Speckle.Converters.Common;
+using Speckle.Converters.Common.Objects;
+using Speckle.Core.Models;
+using AECPropDB = Autodesk.Aec.PropertyData.DatabaseServices;
+
+namespace Speckle.Converters.Civil3d.ToSpeckle.BuiltElements;
+
+[NameAndRankValue(nameof(CDB.Pipe), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)]
+public class PipeToSpeckleConverter : IToSpeckleTopLevelConverter
+{
+ private readonly ITypedConverter _pointConverter;
+ private readonly ITypedConverter _curveConverter;
+ private readonly ITypedConverter _boxConverter;
+ private readonly ITypedConverter _solidConverter;
+ private readonly ITypedConverter> _propertySetConverter;
+ private readonly IConversionContextStack _contextStack;
+
+ public PipeToSpeckleConverter(
+ ITypedConverter pointConverter,
+ ITypedConverter curveConverter,
+ ITypedConverter boxConverter,
+ ITypedConverter solidConverter,
+ ITypedConverter> propertySetConverter,
+ IConversionContextStack contextStack
+ )
+ {
+ _pointConverter = pointConverter;
+ _curveConverter = curveConverter;
+ _boxConverter = boxConverter;
+ _solidConverter = solidConverter;
+ _propertySetConverter = propertySetConverter;
+ _contextStack = contextStack;
+ }
+
+ public Base Convert(object target) => Convert((CDB.Pipe)target);
+
+ public SOBE.Pipe Convert(CDB.Pipe target)
+ {
+ ICurve curve = _curveConverter.Convert(target.BaseCurve);
+ SOG.Mesh pipeMesh = _solidConverter.Convert(target.Solid3dBody);
+
+ SOBE.Pipe specklePipe =
+ new()
+ {
+ baseCurve = curve,
+ diameter = target.InnerDiameterOrWidth,
+ length = target.Length3DToInsideEdge,
+ displayValue = new List { pipeMesh },
+ units = _contextStack.Current.SpeckleUnits
+ };
+
+ // POC: not setting property sets yet, need to determine connector parameter interoperability
+ // POC: not setting part data yet, same reason as above
+ // POC: not setting additional pipe properties, probably should scope a CivilPipe class
+
+ return specklePipe;
+ }
+}
diff --git a/DUI3-DX/Converters/Civil3d/Speckle.Converters.Civil3dShared/ToSpeckle/Raw/PropertySetToSpeckleRawConverter.cs b/DUI3-DX/Converters/Civil3d/Speckle.Converters.Civil3dShared/ToSpeckle/Raw/PropertySetToSpeckleRawConverter.cs
new file mode 100644
index 0000000000..d3576871cc
--- /dev/null
+++ b/DUI3-DX/Converters/Civil3d/Speckle.Converters.Civil3dShared/ToSpeckle/Raw/PropertySetToSpeckleRawConverter.cs
@@ -0,0 +1,55 @@
+using Objects.Other;
+using Speckle.Converters.Common;
+using Speckle.Converters.Common.Objects;
+using AECPropDB = Autodesk.Aec.PropertyData.DatabaseServices;
+
+namespace Speckle.Converters.Civil3d.ToSpeckle.Raw;
+
+public class PropertySetToSpeckleRawConverter : ITypedConverter>
+{
+ private readonly ITypedConverter _vectorConverter;
+ private readonly ITypedConverter _pointConverter;
+ private readonly IConversionContextStack _contextStack;
+
+ public PropertySetToSpeckleRawConverter(
+ ITypedConverter vectorConverter,
+ ITypedConverter pointConverter,
+ IConversionContextStack contextStack
+ )
+ {
+ _vectorConverter = vectorConverter;
+ _pointConverter = pointConverter;
+ _contextStack = contextStack;
+ }
+
+ public List Convert(object target) => Convert((AECPropDB.PropertySet)target);
+
+ public List Convert(AECPropDB.PropertySet target)
+ {
+ List properties = new();
+
+ ADB.Transaction tr = _contextStack.Current.Document.TransactionManager.TopTransaction;
+ AECPropDB.PropertySetDefinition setDef = (AECPropDB.PropertySetDefinition)
+ tr.GetObject(target.PropertySetDefinition, ADB.OpenMode.ForRead);
+
+ // get property definitions
+ var propDefs = new Dictionary();
+ foreach (AECPropDB.PropertyDefinition def in setDef.Definitions)
+ {
+ propDefs.Add(def.Id, def);
+ }
+
+ foreach (AECPropDB.PropertySetData data in target.PropertySetData)
+ {
+ string fieldName = propDefs.TryGetValue(data.Id, out AECPropDB.PropertyDefinition value)
+ ? value.Name
+ : data.FieldBucketId;
+
+ object fieldData = data.GetData();
+ DataField field = new(fieldName, fieldData.GetType().Name, data.UnitType.PluralName(false), fieldData);
+ properties.Add(field);
+ }
+
+ return properties;
+ }
+}
diff --git a/DUI3-DX/Directory.Packages.props b/DUI3-DX/Directory.Packages.props
index 217c4a191b..06de90bb1c 100644
--- a/DUI3-DX/Directory.Packages.props
+++ b/DUI3-DX/Directory.Packages.props
@@ -4,25 +4,25 @@
-
+
-
+
-
+
-
-
+
+
-
+
-
-
-
+
+
+
-
+
\ No newline at end of file