Merge pull request #854 from specklesystems/dev
.NET Build and Publish / build-windows (push) Has been cancelled
.NET Build and Publish / build-linux (push) Has been cancelled
.NET Build and Publish / deploy-installers (push) Has been cancelled

Dev -> Main
This commit is contained in:
Jedd Morgan
2025-05-21 11:59:51 +01:00
committed by GitHub
46 changed files with 2129 additions and 898 deletions
+1
View File
@@ -10,6 +10,7 @@
<PackageReference Include="Bullseye" />
<PackageReference Include="Glob" />
<PackageReference Include="Microsoft.Build" />
<PackageReference Include="Microsoft.VisualStudio.SolutionPersistence" />
<PackageReference Include="Semver" />
<PackageReference Include="SimpleExec" />
</ItemGroup>
+9 -13
View File
@@ -15,6 +15,7 @@ const string ZIP = "zip";
const string RESTORE_TOOLS = "restore-tools";
const string CLEAN_LOCKS = "clean-locks";
const string CHECK_SOLUTIONS = "check-solutions";
const string GEN_SOLUTIONS = "generate-solutions";
const string DEEP_CLEAN = "deep-clean";
const string DEEP_CLEAN_LOCAL = "deep-clean-local";
const string DETECT_AFFECTED = "detect-affected";
@@ -27,14 +28,7 @@ if (args.Length > 1)
args = new[] { arguments.First() };
//arguments = arguments.Skip(1).ToList();
}*/
void Build(string solution, string configuration)
{
Console.WriteLine();
Console.WriteLine();
Console.WriteLine($"Building solution '{solution}' as '{configuration}'");
Console.WriteLine();
Run("dotnet", $"build \".\\{solution}\" --configuration {configuration} --no-restore");
}
void Restore(string solution)
{
Console.WriteLine();
@@ -71,23 +65,24 @@ void CleanSolution(string solution, string configuration)
DeleteDirectories("**/obj");
DeleteFiles("**/*.lock.json");
Restore(solution);
Build(solution, configuration);
}
Target(
CLEAN_LOCKS,
() =>
Consts.Solutions,
s =>
{
DeleteFiles("**/*.lock.json");
Restore("Speckle.Connectors.sln");
Restore(s);
}
);
Target(
DEEP_CLEAN,
() =>
Consts.Solutions,
s =>
{
CleanSolution("Speckle.Connectors.sln", "debug");
CleanSolution(s, "debug");
}
);
Target(
@@ -183,6 +178,7 @@ Target(
);
Target(CHECK_SOLUTIONS, Solutions.CompareConnectorsToLocal);
Target(GEN_SOLUTIONS, Solutions.GenerateSolutions);
Target(
TEST,
+51
View File
@@ -1,4 +1,6 @@
using Microsoft.Build.Construction;
using Microsoft.VisualStudio.SolutionPersistence.Model;
using Microsoft.VisualStudio.SolutionPersistence.Serializer;
namespace Build;
@@ -53,4 +55,53 @@ public static class Solutions
);
}
}
public static async Task GenerateSolutions()
{
await GenerateLocalSlnx();
foreach (var group in Consts.ProjectGroups)
{
var path = group.Projects[0].ProjectPath.Split('/');
var folder = $"/{path[0]}/{path[1]}/";
await GenerateConnector(group.HostAppSlug, folder);
}
}
public static async Task GenerateLocalSlnx()
{
var connectors = await GetFullSlnx();
connectors.AddProject("..\\speckle-sharp-sdk\\src\\Speckle.Objects\\Speckle.Objects.csproj");
connectors.AddProject("..\\speckle-sharp-sdk\\src\\Speckle.Sdk\\Speckle.Sdk.csproj");
connectors.AddProject("..\\speckle-sharp-sdk\\src\\Speckle.Sdk.Dependencies\\Speckle.Sdk.Dependencies.csproj");
var sln = Path.Combine("C:\\Users\\adam\\Git\\speckle-sharp-connectors", "Local.slnx");
await SolutionSerializers.SlnXml.SaveAsync(sln, connectors, default);
sln = Path.Combine("C:\\Users\\adam\\Git\\speckle-sharp-connectors", "Local.sln");
await SolutionSerializers.SlnFileV12.SaveAsync(sln, connectors, default);
}
public static async Task GenerateConnector(string slug, string folder)
{
slug = string.Concat(slug[0].ToString().ToUpper(), slug.AsSpan(1));
var connectors = await GetFullSlnx();
var foldersToRemove = connectors
.SolutionFolders.Where(x =>
//need base folder
!x.Path.Equals("/Connectors/")
//don't grab all
&& (x.Path.StartsWith("/Connectors/") && !x.Path.StartsWith(folder))
)
.ToList();
foreach (var folderToRemove in foldersToRemove)
{
connectors.RemoveFolder(folderToRemove);
}
var sln = Path.Combine("C:\\Users\\adam\\Git\\speckle-sharp-connectors", $"Speckle.{slug}.slnx");
await SolutionSerializers.SlnXml.SaveAsync(sln, connectors, default);
}
public static async Task<SolutionModel> GetFullSlnx()
{
var connectorsSln = Path.Combine("C:\\Users\\adam\\Git\\speckle-sharp-connectors", "Speckle.Connectors.slnx");
return await SolutionSerializers.SlnXml.OpenAsync(connectorsSln, default);
}
}
+6
View File
@@ -47,6 +47,12 @@
"Microsoft.SourceLink.Common": "8.0.0"
}
},
"Microsoft.VisualStudio.SolutionPersistence": {
"type": "Direct",
"requested": "[1.0.52, )",
"resolved": "1.0.52",
"contentHash": "oNv2JtYXhpdJrX63nibx1JT3uCESOBQ1LAk7Dtz/sr0+laW0KRM6eKp4CZ3MHDR2siIkKsY8MmUkeP5DKkQQ5w=="
},
"PolySharp": {
"type": "Direct",
"requested": "[1.14.1, )",
@@ -25,12 +25,10 @@
</Target>
<PropertyGroup Condition="'$(AutoCADVersion)' != '' And '$(ContinuousIntegrationBuild)' != 'true'">
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
<StartAction>Program</StartAction>
<StartProgram>$(ProgramW6432)\Autodesk\AutoCAD $(AutoCADVersion)\acad.exe</StartProgram>
</PropertyGroup>
<PropertyGroup Condition="'$(Civil3DVersion)' != '' And '$(ContinuousIntegrationBuild)' != 'true'">
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
<StartAction>Program</StartAction>
<StartProgram>$(ProgramW6432)\Autodesk\AutoCAD $(Civil3DVersion)\acad.exe</StartProgram>
<StartArguments>/product C3D</StartArguments>
@@ -4,7 +4,13 @@
<AutoCADVersion>2025</AutoCADVersion>
<DefineConstants>$(DefineConstants);AUTOCAD;AUTOCAD2025;AUTOCAD2022_OR_GREATER;AUTOCAD2023_OR_GREATER;AUTOCAD2024_OR_GREATER;AUTOCAD2025_OR_GREATER</DefineConstants>
<Configurations>Debug;Release;Local</Configurations>
<RuntimeIdentifier>win-x64</RuntimeIdentifier> <!-- .NET Core uses this to move native dependencies into a root for runtime selection and usage for non-windows development https://learn.microsoft.com/en-us/dotnet/core/project-sdk/msbuild-props#enablewindowstargeting -->
</PropertyGroup>
<PropertyGroup>
<!-- .NET Core uses this to move native dependencies into a root for runtime selection and usage for non-windows development https://learn.microsoft.com/en-us/dotnet/core/project-sdk/msbuild-props#enablewindowstargeting -->
<RuntimeIdentifier>win-x64</RuntimeIdentifier> <!--This is needed for managed dependencies-->
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies> <!--This is needed for the rest-->
<AppendRuntimeIdentifierToOutputPath>false</AppendRuntimeIdentifierToOutputPath> <!--This is needed just to keep folder paths the same as the netframework versions of autocad/civil-->
</PropertyGroup>
<ItemGroup>
@@ -3,8 +3,14 @@
<TargetFramework>net8.0-windows</TargetFramework>
<AutoCADVersion>2026</AutoCADVersion>
<DefineConstants>$(DefineConstants);AUTOCAD;AUTOCAD2026;AUTOCAD2022_OR_GREATER;AUTOCAD2023_OR_GREATER;AUTOCAD2024_OR_GREATER;AUTOCAD2025_OR_GREATER;AUTOCAD2026_OR_GREATER</DefineConstants>
<Configurations>Debug;Release;Local</Configurations>
<RuntimeIdentifier>win-x64</RuntimeIdentifier> <!-- .NET Core uses this to move native dependencies into a root for runtime selection and usage for non-windows development https://learn.microsoft.com/en-us/dotnet/core/project-sdk/msbuild-props#enablewindowstargeting -->
<Configurations>Debug;Release;Local</Configurations>
</PropertyGroup>
<PropertyGroup>
<!-- .NET Core uses this to move native dependencies into a root for runtime selection and usage for non-windows development https://learn.microsoft.com/en-us/dotnet/core/project-sdk/msbuild-props#enablewindowstargeting -->
<RuntimeIdentifier>win-x64</RuntimeIdentifier> <!--This is needed for managed dependencies-->
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies> <!--This is needed for the rest-->
<AppendRuntimeIdentifierToOutputPath>false</AppendRuntimeIdentifierToOutputPath> <!--This is needed just to keep folder paths the same as the netframework versions of autocad/civil-->
</PropertyGroup>
<ItemGroup>
@@ -4,7 +4,13 @@
<Civil3DVersion>2025</Civil3DVersion>
<DefineConstants>$(DefineConstants);CIVIL3D2025;CIVIL3D;CIVIL3D2022_OR_GREATER;CIVIL3D2023_OR_GREATER;CIVIL3D2024_OR_GREATER;CIVIL3D2025_OR_GREATER</DefineConstants>
<Configurations>Debug;Release;Local</Configurations>
<RuntimeIdentifier>win-x64</RuntimeIdentifier> <!-- .NET Core uses this to move native dependencies into a root for runtime selection and usage for non-windows development https://learn.microsoft.com/en-us/dotnet/core/project-sdk/msbuild-props#enablewindowstargeting -->
</PropertyGroup>
<PropertyGroup>
<!-- .NET Core uses this to move native dependencies into a root for runtime selection and usage for non-windows development https://learn.microsoft.com/en-us/dotnet/core/project-sdk/msbuild-props#enablewindowstargeting -->
<RuntimeIdentifier>win-x64</RuntimeIdentifier> <!--This is needed for managed dependencies-->
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies> <!--This is needed for the rest-->
<AppendRuntimeIdentifierToOutputPath>false</AppendRuntimeIdentifierToOutputPath> <!--This is needed just to keep folder paths the same as the netframework versions of autocad/civil-->
</PropertyGroup>
<ItemGroup>
@@ -4,7 +4,13 @@
<Civil3DVersion>2026</Civil3DVersion>
<DefineConstants>$(DefineConstants);CIVIL3D2026;CIVIL3D;CIVIL3D2022_OR_GREATER;CIVIL3D2023_OR_GREATER;CIVIL3D2024_OR_GREATER;CIVIL3D2025_OR_GREATER;CIVIL3D2026_OR_GREATER</DefineConstants>
<Configurations>Debug;Release;Local</Configurations>
<RuntimeIdentifier>win-x64</RuntimeIdentifier> <!-- .NET Core uses this to move native dependencies into a root for runtime selection and usage for non-windows development https://learn.microsoft.com/en-us/dotnet/core/project-sdk/msbuild-props#enablewindowstargeting -->
</PropertyGroup>
<PropertyGroup>
<!-- .NET Core uses this to move native dependencies into a root for runtime selection and usage for non-windows development https://learn.microsoft.com/en-us/dotnet/core/project-sdk/msbuild-props#enablewindowstargeting -->
<RuntimeIdentifier>win-x64</RuntimeIdentifier> <!--This is needed for managed dependencies-->
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies> <!--This is needed for the rest-->
<AppendRuntimeIdentifierToOutputPath>false</AppendRuntimeIdentifierToOutputPath> <!--This is needed just to keep folder paths the same as the netframework versions of autocad/civil-->
</PropertyGroup>
<ItemGroup>
@@ -4,11 +4,19 @@
<UseWpf>true</UseWpf>
<RevitVersion>2022</RevitVersion>
<DefineConstants>$(DefineConstants);REVIT2022;REVIT2022_OR_GREATER</DefineConstants>
<CefSharpAnyCpuSupport>true</CefSharpAnyCpuSupport>
<Prefer32bit>false</Prefer32bit>
<Configurations>Debug;Release;Local</Configurations>
</PropertyGroup>
<PropertyGroup Label="Things needed to get ancient cef buildling with modern msbuild">
<!--There is a weird bug or misconfiguration in cef 65.0.1 nuget that makes it pick x86 dlls if asked to build x64.-->
<!--Asking it to build AnyCPU appaers to work, but generates MSB3270 warnings, which we are ignoring here-->
<!--Official docs suggest setting the entire solution to x64, which we can't do, and we don't want to create a new SLN just for Revit 2022-->
<CefSharpAnyCpuSupport>true</CefSharpAnyCpuSupport>
<Prefer32bit>false</Prefer32bit>
<ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch>None</ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch>
</PropertyGroup>
<Import Project="..\Speckle.Connectors.RevitShared\Speckle.Connectors.RevitShared.projitems" Label="Shared" />
<Import Project="..\Speckle.Connectors.RevitShared.Cef\Speckle.Connectors.RevitShared.Cef.projitems" Label="Shared" />
@@ -63,7 +63,9 @@ public class LinkedModelHandler
viewFilter.GetView().NotNull().Id,
linkInstance.Id
);
return viewCollector.WhereElementIsNotElementType().ToElements().ToList();
// NOTE: related to [CNX-1482](https://linear.app/speckle/issue/CNX-1482/wall-sweeps-published-duplicated). See RevitViewsFilter.cs
return viewCollector.WhereElementIsNotElementType().Where(e => !string.IsNullOrEmpty(e.Name)).ToList();
#else
// 🚨 LIMITATION: in Revit 2023 and below, we can only check if the entire linked model is visible,
// not individual elements within it. If the linked model is visible, all its elements will be included.
@@ -72,12 +72,17 @@ public class RevitViewsFilter : DiscriminatedObject, ISendFilter, IRevitSendFilt
if (view is null)
{
//this used to throw an exception but we don't want to fail loudly if the view is not found
//this used to throw an exception, but we don't want to fail loudly if the view is not found
return [];
}
using var viewCollector = new FilteredElementCollector(_doc, view.Id);
var elementsInView = viewCollector.ToElements();
var objectIds = elementsInView.Select(e => e.UniqueId).ToList();
// NOTE: FilteredElementCollector() includes sweeps and reveals from a wall family's definition and includes them as additional objects
// on this return. displayValue for Wall already includes these, therefore we end up with duplicate elements on wall sweeps
// related to [CNX-1482](https://linear.app/speckle/issue/CNX-1482/wall-sweeps-published-duplicated)
// i (björn) noticed that all these elements have an empty string as Name parameter, hence below exclusion. tested as much as possible, seems like legit fix
var objectIds = elementsInView.Where(e => !string.IsNullOrEmpty(e.Name)).Select(e => e.UniqueId).ToList();
SelectedObjectIds = objectIds;
return objectIds;
}
@@ -25,15 +25,35 @@ public class GhContextMenuButtonAttributes(GhContextMenuButton owner) : GH_Attri
button1.Render(graphics, Parent.Selected, false, false);
}
public override GH_ObjectResponse RespondToMouseUp(GH_Canvas sender, GH_CanvasMouseEvent e)
public override GH_ObjectResponse RespondToMouseDown(GH_Canvas sender, GH_CanvasMouseEvent e)
{
if (!Owner.Enabled && e.Button == MouseButtons.Right)
if (Bounds.Contains(e.CanvasLocation) && e.Button == MouseButtons.Left)
{
// handle the mouse down to prevent component selection
return GH_ObjectResponse.Handled;
}
return base.RespondToMouseDown(sender, e);
}
public override GH_ObjectResponse RespondToMouseUp(GH_Canvas sender, GH_CanvasMouseEvent e)
{
// detect left-clicks on enabled buttons
if (Owner.Enabled && e.Button == MouseButtons.Left && Bounds.Contains(e.CanvasLocation))
{
// show menu
ToolStripDropDown menu = new();
Owner.AppendMenuItems(menu);
menu.Show(sender, sender.PointToClient(Cursor.Position));
return GH_ObjectResponse.Handled;
}
// block right-clicks to prevent the default context menu
if (e.Button == MouseButtons.Right && Bounds.Contains(e.CanvasLocation))
{
// Prevents canvas from triggering the right-click behaviour, and showing the context menu.
return GH_ObjectResponse.Handled;
}
// Allowing event to bubble up to canvas will handle the event and show the context menu.
return base.RespondToMouseUp(sender, e);
}
}
@@ -29,7 +29,7 @@ public class ModelMenuHandler
ModelContextMenuButton = new GhContextMenuButton(
"Select Model",
"Select Model",
"Right-click to select a model",
"Left-click to select a model",
PopulateMenu
);
}
@@ -46,7 +46,7 @@ public class ModelMenuHandler
public void RedrawMenuButton(Model? model)
{
var suffix = ModelContextMenuButton.Enabled
? "Right-click to select another model."
? "Left-click to select another model."
: "Selection is disabled due to component input.";
if (model != null)
{
@@ -58,7 +58,7 @@ public class ModelMenuHandler
{
ModelContextMenuButton.Name = "Select Model";
ModelContextMenuButton.NickName = "Model";
ModelContextMenuButton.Description = "Right-click to select model";
ModelContextMenuButton.Description = "Left-click to select model";
}
}
@@ -29,7 +29,7 @@ public class ProjectMenuHandler
ProjectContextMenuButton = new GhContextMenuButton(
"Select Project",
"Select Project",
"Right-click to select project",
"Left-click to select project",
PopulateMenu
);
}
@@ -46,7 +46,7 @@ public class ProjectMenuHandler
public void RedrawMenuButton(Project? project)
{
var suffix = ProjectContextMenuButton.Enabled
? "Right-click to select another project."
? "Left-click to select another project."
: "Selection is disabled due to component input.";
if (project != null)
{
@@ -58,7 +58,7 @@ public class ProjectMenuHandler
{
ProjectContextMenuButton.Name = "Select Project";
ProjectContextMenuButton.NickName = "Project";
ProjectContextMenuButton.Description = "Right-click to select project";
ProjectContextMenuButton.Description = "Left-click to select project";
}
}
@@ -27,7 +27,7 @@ public class VersionMenuHandler
VersionContextMenuButton = new GhContextMenuButton(
"Select Version",
"Select Project",
"Right-click to select a version",
"Left-click to select a version",
PopulateMenu
);
}
@@ -125,7 +125,7 @@ public class VersionMenuHandler
public void RedrawMenuButton(Version? version)
{
var suffix = VersionContextMenuButton.Enabled
? "Right-click to select another version."
? "Left-click to select another version."
: "Selection is disabled due to component input.";
if (version != null)
{
@@ -143,7 +143,7 @@ public class VersionMenuHandler
{
VersionContextMenuButton.Name = "Select Version";
VersionContextMenuButton.NickName = "Version";
VersionContextMenuButton.Description = "Right-click to select version";
VersionContextMenuButton.Description = "Left-click to select version";
}
}
@@ -33,7 +33,7 @@ public class WorkspaceMenuHandler
WorkspaceContextMenuButton = new GhContextMenuButton(
"Select Workspace",
"Select Workspace",
"Right-click to select a workspace",
"Left-click to select a workspace",
PopulateMenu
);
}
@@ -114,7 +114,7 @@ public class WorkspaceMenuHandler
public void RedrawMenuButton(Workspace? workspace)
{
var suffix = WorkspaceContextMenuButton.Enabled
? "Right-click to select another workspace."
? "Left-click to select another workspace."
: "Selection is disabled due to component input.";
if (workspace != null && !IsPersonalProjects)
{
@@ -136,7 +136,7 @@ public class WorkspaceMenuHandler
WorkspaceContextMenuButton.SetIconOverride(null);
WorkspaceContextMenuButton.Name = "Select Workspace";
WorkspaceContextMenuButton.NickName = "Workspace";
WorkspaceContextMenuButton.Description = "Right-click to select workspace";
WorkspaceContextMenuButton.Description = "Left-click to select workspace";
}
}
@@ -50,7 +50,8 @@ public class TeklaBasicConnectorBinding : IBasicConnectorBinding
public string GetConnectorVersion() => _speckleApplication.SpeckleVersion;
public DocumentInfo? GetDocumentInfo() => new DocumentInfo("Test", "Test", "Test");
public DocumentInfo GetDocumentInfo() =>
new(_model.GetInfo().ModelPath, _model.GetInfo().ModelName, _model.GetInfo().GetHashCode().ToString());
public DocumentModelStore GetDocumentState() => _store;
@@ -5,7 +5,7 @@
<DefineConstants>$(DefineConstants);AUTOCAD2026;AUTOCAD</DefineConstants>
<Configurations>Debug;Release;Local</Configurations>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Speckle.AutoCAD.API" VersionOverride="2026.0.0" />
</ItemGroup>
@@ -44,9 +44,14 @@ public sealed class BaseCurveExtractor
switch (entity)
{
// rant: if this is a pipe, the BaseCurve prop is fake news && will return a DB.line with start and endpoints set to [0,0,0] & [0,0,1]
// pressurepipes also tend to have null basecurves
// do not use basecurve for pipes 😡
case CDB.Pipe pipe:
return GetPipeBaseCurves(pipe);
#if CIVIL3D2024_OR_GREATER
case CDB.PressurePipe pressurePipe:
return GetPipeBaseCurves(pressurePipe);
#endif
case CDB.Alignment alignment:
return GetAlignmentBaseCurves(alignment);
@@ -77,6 +82,15 @@ public sealed class BaseCurveExtractor
}
}
#if CIVIL3D2024_OR_GREATER
private List<Speckle.Objects.ICurve> GetPipeBaseCurves(CDB.PressurePipe pipe)
{
return pipe.IsCurve
? new() { _arcConverter.Convert(pipe.CurveGeometry.GetArc2d()) }
: new() { _lineConverter.Convert(new AG.LineSegment3d(pipe.StartPoint, pipe.EndPoint)) };
}
#endif
private List<Speckle.Objects.ICurve> GetAlignmentBaseCurves(CDB.Alignment alignment)
{
// get the alignment subentity curves
@@ -53,6 +53,11 @@ public sealed class DisplayValueExtractor
SOG.Mesh partMesh = _solidConverter.Convert(part.Solid3dBody);
yield return partMesh;
break;
// pressure pipe networks: https://help.autodesk.com/view/CIV3D/2025/ENU/?guid=f1361ca3-4195-3b06-8a66-ecd31f5208b0
case CDB.PressurePart pressurePart:
SOG.Mesh pressurePartMesh = _solidConverter.Convert(pressurePart.Get3dBody());
yield return pressurePartMesh;
break;
// surfaces: https://help.autodesk.com/view/CIV3D/2025/ENU/?guid=d741aa49-e7da-9513-6b0b-226ebe3fa43f
// POC: volume surfaces not supported
@@ -16,12 +16,31 @@ public class PartDataExtractor
/// <returns></returns>
public Dictionary<string, object?>? GetPartData(CDB.Entity entity)
{
if (entity is CDB.Part part)
return entity switch
{
return ParsePartData(part.PartData);
CDB.Part part => ParsePartData(part.PartData),
CDB.PressurePart pressurePart => ParsePartData(pressurePart.PartData),
_ => null
};
}
private Dictionary<string, object?> ParsePartData(CDB.PressureNetworkPartData partData)
{
var result = new Dictionary<string, object?>();
foreach (CDB.PressurePartProperty prop in partData)
{
if (!prop.HasValue)
{
continue; // don't send null props
}
if (!result.ContainsKey(prop.DisplayName))
{
result.Add(prop.DisplayName, prop.Value);
}
}
return null;
return result;
}
private Dictionary<string, object?> ParsePartData(CDB.PartDataRecord partData)
@@ -6,10 +6,15 @@ namespace Speckle.Converters.RevitShared.ToSpeckle;
public class CurveConverterToHost : ITypedConverter<SOG.Curve, DB.Curve>
{
private readonly ITypedConverter<SOG.Point, DB.XYZ> _pointConverter;
private readonly ITypedConverter<SOG.Polyline, DB.CurveArray> _polylineConverter;
public CurveConverterToHost(ITypedConverter<SOG.Point, DB.XYZ> pointConverter)
public CurveConverterToHost(
ITypedConverter<SOG.Point, DB.XYZ> pointConverter,
ITypedConverter<SOG.Polyline, DB.CurveArray> polylineConverter
)
{
_pointConverter = pointConverter;
_polylineConverter = polylineConverter;
}
public DB.Curve Convert(SOG.Curve target)
@@ -33,9 +38,35 @@ public class CurveConverterToHost : ITypedConverter<SOG.Curve, DB.Curve>
speckleKnots.Add(speckleKnots[^1]);
}
//var knots = speckleKnots.GetRange(0, pts.Count + speckleCurve.degree + 1);
var curve = DB.NurbSpline.CreateCurve(target.degree, speckleKnots, pts, weights);
return curve;
try
{
//var knots = speckleKnots.GetRange(0, pts.Count + speckleCurve.degree + 1);
var curve = DB.NurbSpline.CreateCurve(target.degree, speckleKnots, pts, weights);
return curve;
}
// An exception was thrown by NurbSpline.CreateCurve
// because Revit is stricter than Rhino regarding the input parameters for NURBS curves.
// this case is encountered for semicircles that are converted as NURBS
// Exception message:
// "The multiplicities of other interior knots must be at most degree - 2."
// The solution below falls back to using displayValue.
catch (Autodesk.Revit.Exceptions.ArgumentException)
{
var curveArray = _polylineConverter.Convert(target.displayValue);
List<DB.XYZ> points = new List<DB.XYZ>();
if (curveArray.Size > 0)
{
points.Add(curveArray.get_Item(0).GetEndPoint(0));
foreach (DB.Curve curve in curveArray)
{
points.Add(curve.GetEndPoint(1));
}
}
return DB.HermiteSpline.Create(points, false);
}
}
else
{
@@ -5,6 +5,7 @@ using Speckle.DoubleNumerics;
using Speckle.Objects.Data;
using Speckle.Sdk.Common;
using Speckle.Sdk.Models;
using Speckle.Sdk.Models.Extensions;
namespace Speckle.Converters.RevitShared.ToSpeckle;
@@ -59,6 +60,15 @@ public class LocalToGlobalToDirectShapeConverter
// 2 - init DirectShape
var result = DB.DirectShape.CreateElement(_converterSettings.Current.Document, new DB.ElementId(dsCategory));
// NOTE: this should technically be in a property extraction class / helper method
// This change is localised to [CNX-1825](https://linear.app/speckle/issue/CNX-1825/set-directshape-name)
// TODO: Property extraction is a greater conversation which needs to be had: [CNX-1830](https://linear.app/speckle/issue/CNX-1830/data-exchange-investigations)
var name = target.atomicObject.TryGetName();
if (name is not null)
{
result.SetName(name);
}
// If there is no transforms to be applied, use the simple way of creating direct shapes
if (target.matrix.Count == 0)
{
@@ -0,0 +1,24 @@
namespace Speckle.Converters.Rhino.Extensions;
public static class GeometryBaseExtensions
{
/// <summary>
/// Getting translation vector from origin to the Geometry bbox Center (if geometry is far from origin and translation needed)
/// This is needed for some objects, because of Rhino using single precision numbers for Mesh vertices: https://wiki.mcneel.com/rhino/farfromorigin
/// </summary>
/// <returns>
/// Vector from origin to Geometry bbox center (if translation needed), otherwise zero-length vector.
/// </returns>
public static bool IsFarFromOrigin(this RG.GeometryBase geometry, out RG.Vector3d vectorToGeometry)
{
var geometryBbox = geometry.GetBoundingBox(false); // 'false' for 'accurate' parameter to accelerate bbox calculation
if (geometryBbox.Min.DistanceTo(RG.Point3d.Origin) > 1e5 || geometryBbox.Max.DistanceTo(RG.Point3d.Origin) > 1e5)
{
vectorToGeometry = new RG.Vector3d(geometryBbox.Center);
return true;
}
vectorToGeometry = new RG.Vector3d();
return false;
}
}
@@ -2,4 +2,7 @@
namespace Speckle.Converters.Rhino;
public record RhinoConversionSettings(RhinoDoc Document, string SpeckleUnits);
/// <summary>
/// Represents the settings used for Rhino and Grasshopper conversions.
/// </summary>
public record RhinoConversionSettings(RhinoDoc Document, string SpeckleUnits, bool ModelFarFromOrigin);
@@ -13,5 +13,19 @@ public class RhinoConversionSettingsFactory(
public RhinoConversionSettings Current => settingsStore.Current;
public RhinoConversionSettings Create(RhinoDoc document) =>
new(document, unitsConverter.ConvertOrThrow(RhinoDoc.ActiveDoc.ModelUnitSystem));
new(document, unitsConverter.ConvertOrThrow(RhinoDoc.ActiveDoc.ModelUnitSystem), ModelFarFromOrigin());
/// <summary>
/// Quick check whether any of the objects in the scene might be located too far from origin and cause precision issues during meshing.
/// It prevents 'normal' Rhino models (not too far from origin) from unnecessary Bbox calculations on every object on Send.
/// </summary>
private bool ModelFarFromOrigin()
{
RG.BoundingBox bbox = RhinoDoc.ActiveDoc.Objects.BoundingBox;
if (bbox.Min.DistanceTo(RG.Point3d.Origin) > 1e5 || bbox.Max.DistanceTo(RG.Point3d.Origin) > 1e5)
{
return true;
}
return false;
}
}
@@ -1,4 +1,7 @@
using Rhino.DocObjects;
using Speckle.Converters.Common.Objects;
using Speckle.Converters.Rhino.Extensions;
using Speckle.DoubleNumerics;
using Speckle.Sdk.Common.Exceptions;
namespace Speckle.Converters.Rhino.ToSpeckle.Meshing;
@@ -43,8 +46,13 @@ public static class DisplayMeshExtractor
return joinedMesh;
}
public static RG.Mesh? GetGeometryDisplayMesh(RG.GeometryBase geometry)
/// <summary>
/// Extracting Rhino Mesh from Rhino GeometryBase using specified MeshingParameters settings, e.g. minimumEdgeLength.
/// </summary>
public static RG.Mesh GetGeometryDisplayMesh(RG.GeometryBase geometry, bool highPrecision = false)
{
double minEdgeLength = highPrecision ? GetAccurateMinEdgeLegth(geometry) : 0.05;
// declare "renderMeshes" as a separate var, because it needs to be checked for null after each Mesh.Create method
RG.Mesh[] renderMeshes;
var joinedMesh = new RG.Mesh();
@@ -52,7 +60,7 @@ public static class DisplayMeshExtractor
switch (geometry)
{
case RG.Brep brep:
renderMeshes = RG.Mesh.CreateFromBrep(brep, new(0.05, 0.05));
renderMeshes = RG.Mesh.CreateFromBrep(brep, new(0.05, minEdgeLength));
break;
case RG.SubD subd:
#pragma warning disable CA2000
@@ -61,7 +69,7 @@ public static class DisplayMeshExtractor
renderMeshes = [subdMesh];
break;
case RG.Extrusion extrusion:
renderMeshes = RG.Mesh.CreateFromBrep(extrusion.ToBrep(), new(0.05, 0.05));
renderMeshes = RG.Mesh.CreateFromBrep(extrusion.ToBrep(), new(0.05, minEdgeLength));
break;
default:
throw new ConversionException($"Unsupported object for display mesh generation {geometry.GetType().FullName}");
@@ -76,4 +84,63 @@ public static class DisplayMeshExtractor
joinedMesh.Append(renderMeshes);
return joinedMesh;
}
/// <summary>
/// Calculating optimal meshing parameter 'minimumEdgeLength' for the given geometry.
/// </summary>
private static double GetAccurateMinEdgeLegth(RG.GeometryBase geometry)
{
// adjust meshing parameters if Brep edges are too close to the document tolerance
double minEdgeLength = 0.05;
if (geometry is RG.Brep brep && brep.Edges.Any(x => x.GetLength() < minEdgeLength))
{
return 0;
}
return minEdgeLength;
}
/// <summary>
/// Extracting Rhino Mesh and converting to Speckle with the most suitable settings (e.g. moving to origin first, if needed)
/// This is needed because of Rhino using single precision numbers for Mesh vertices: https://wiki.mcneel.com/rhino/farfromorigin
/// </summary>
/// <returns>List of converted Speckle meshes</returns>
public static List<SOG.Mesh> GetSpeckleMeshes(
RG.GeometryBase geometry,
bool modelFarFromOrigin,
string units,
ITypedConverter<RG.Mesh, SOG.Mesh> meshConverter
)
{
RG.GeometryBase geometryToMesh = geometry;
RG.Vector3d? vector = null;
// 1.1. If needed, move geometry to origin
if (modelFarFromOrigin && geometry.IsFarFromOrigin(out RG.Vector3d vectorToGeometry))
{
geometryToMesh = geometry.Duplicate();
geometryToMesh.Transform(RG.Transform.Translation(-vectorToGeometry));
vector = vectorToGeometry;
}
// 1.2. Extract Rhino Mesh
RG.Mesh movedDisplayMesh = GetGeometryDisplayMesh(geometryToMesh, true);
// 2. Convert extracted Mesh to Speckle. We don't move geometry back yet, because 'far from origin' geometry is causing Speckle conversion issues too
List<SOG.Mesh> displayValue = new() { meshConverter.Convert(movedDisplayMesh) };
// 3. Move Speckle geometry back from origin, if translation was applied
MoveSpeckleMeshes(displayValue, vector, units);
return displayValue;
}
public static void MoveSpeckleMeshes(List<SOG.Mesh> displayValue, RG.Vector3d? vectorToGeometry, string units)
{
if (vectorToGeometry is RG.Vector3d vector)
{
Matrix4x4 matrix = new(1, 0, 0, vector.X, 0, 1, 0, vector.Y, 0, 0, 1, vector.Z, 0, 0, 0, 1);
SO.Transform transform = new() { matrix = matrix, units = units };
displayValue.ForEach(x => x.Transform(transform));
}
}
}
@@ -28,8 +28,12 @@ public class BrepToSpeckleConverter : ITypedConverter<RG.Brep, SOG.BrepX>
{
var brepEncoding = RawEncodingCreator.Encode(target, _settingsStore.Current.Document);
var displayMesh = DisplayMeshExtractor.GetGeometryDisplayMesh(target);
List<SOG.Mesh> displayValue = displayMesh is null ? new() : new() { _meshConverter.Convert(displayMesh) };
List<SOG.Mesh> displayValue = DisplayMeshExtractor.GetSpeckleMeshes(
target,
_settingsStore.Current.ModelFarFromOrigin,
_settingsStore.Current.SpeckleUnits,
_meshConverter
);
var bx = new SOG.BrepX()
{
@@ -28,8 +28,12 @@ public class ExtrusionToSpeckleConverter : ITypedConverter<RG.Extrusion, SOG.Ext
{
var extrusionEncoding = RawEncodingCreator.Encode(target, _settingsStore.Current.Document);
var displayMesh = DisplayMeshExtractor.GetGeometryDisplayMesh(target);
List<SOG.Mesh> displayValue = displayMesh is null ? new() : new() { _meshConverter.Convert(displayMesh) };
List<SOG.Mesh> displayValue = DisplayMeshExtractor.GetSpeckleMeshes(
target,
_settingsStore.Current.ModelFarFromOrigin,
_settingsStore.Current.SpeckleUnits,
_meshConverter
);
var bx = new SOG.ExtrusionX()
{
@@ -38,8 +38,13 @@ public class HatchToSpeckleConverter : ITypedConverter<RG.Hatch, SOG.Region>
// create display mesh from region by converting to brep first
var brep = RG.Brep.TryConvertBrep(target);
var displayMesh = DisplayMeshExtractor.GetGeometryDisplayMesh(brep);
List<SOG.Mesh> displayValue = displayMesh is null ? new() : new() { _meshConverter.Convert(displayMesh) };
List<SOG.Mesh> displayValue = DisplayMeshExtractor.GetSpeckleMeshes(
brep,
_settingsStore.Current.ModelFarFromOrigin,
_settingsStore.Current.SpeckleUnits,
_meshConverter
);
return new SOG.Region
{
@@ -1,5 +1,7 @@
using Speckle.Converters.Common;
using Speckle.Converters.Common.Objects;
using Speckle.Converters.Rhino.Extensions;
using Speckle.Converters.Rhino.ToSpeckle.Meshing;
using Speckle.Sdk.Common.Exceptions;
namespace Speckle.Converters.Rhino.ToSpeckle.Raw;
@@ -31,6 +33,30 @@ public class MeshToSpeckleConverter : ITypedConverter<RG.Mesh, SOG.Mesh>
{
throw new ValidationException("Cannot convert a mesh with 0 vertices/faces");
}
// Extracting Rhino Mesh and converting to Speckle with the most suitable settings (e.g. moving to origin first, if needed)
// This is needed because of Rhino using single precision numbers for Mesh vertices: https://wiki.mcneel.com/rhino/farfromorigin
RG.Mesh meshToConvert = target;
RG.Vector3d? vector = null;
// 1. If needed, move geometry to origin
if (_settingsStore.Current.ModelFarFromOrigin && target.IsFarFromOrigin(out RG.Vector3d vectorToGeometry))
{
meshToConvert = (RG.Mesh)target.Duplicate();
meshToConvert.Transform(RG.Transform.Translation(-vectorToGeometry));
vector = vectorToGeometry;
}
// 2. Convert extracted Mesh to Speckle. We don't move geometry back yet, because 'far from origin' geometry is causing Speckle conversion issues too
SOG.Mesh convertedMesh = ConvertMesh(meshToConvert);
// 3. Move Speckle geometry back from origin, if translation was applied
DisplayMeshExtractor.MoveSpeckleMeshes([convertedMesh], vector, _settingsStore.Current.SpeckleUnits);
return convertedMesh;
}
private SOG.Mesh ConvertMesh(RG.Mesh target)
{
var vertexCoordinates = new double[target.Vertices.Count * 3];
var x = 0;
for (int i = 0; i < target.Vertices.Count; i++)
@@ -28,8 +28,12 @@ public class SubDToSpeckleConverter : ITypedConverter<RG.SubD, SOG.SubDX>
{
var subdEncoding = RawEncodingCreator.Encode(target, _settingsStore.Current.Document);
var displayMesh = DisplayMeshExtractor.GetGeometryDisplayMesh(target);
List<SOG.Mesh> displayValue = displayMesh is null ? new() : new() { _meshConverter.Convert(displayMesh) };
List<SOG.Mesh> displayValue = DisplayMeshExtractor.GetSpeckleMeshes(
target,
_settingsStore.Current.ModelFarFromOrigin,
_settingsStore.Current.SpeckleUnits,
_meshConverter
);
var bx = new SOG.SubDX()
{
+4 -2
View File
@@ -13,6 +13,7 @@
<PackageVersion Include="ILRepack.FullAuto" Version="1.6.0" />
<PackageVersion Include="JetBrains.Profiler.SelfApi" Version="2.5.12" />
<PackageVersion Include="LibTessDotNet" Version="1.1.15" />
<PackageVersion Include="Microsoft.VisualStudio.SolutionPersistence" Version="1.0.52" />
<PackageVersion Include="Moq" Version="4.20.70" />
<PackageVersion Include="Microsoft.Build" Version="17.11.4" />
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.11.1" />
@@ -54,6 +55,7 @@
<GlobalPackageReference Include="PolySharp" Version="1.14.1" />
<GlobalPackageReference Include="Microsoft.SourceLink.GitHub" Version="8.0.0" />
<GlobalPackageReference Include="Speckle.InterfaceGenerator" Version="0.9.6" />
<GlobalPackageReference Include="Microsoft.NETFramework.ReferenceAssemblies" Version="1.0.3" /> <!-- allows for non-windows platforms to target net48 without error -->
<GlobalPackageReference Include="Microsoft.NETFramework.ReferenceAssemblies" Version="1.0.3" />
<!-- allows for non-windows platforms to target net48 without error -->
</ItemGroup>
</Project>
</Project>
+775 -833
View File
File diff suppressed because it is too large Load Diff
+201
View File
@@ -0,0 +1,201 @@
<Solution>
<Configurations>
<BuildType Name="Debug" />
<BuildType Name="Local" />
<BuildType Name="Release" />
</Configurations>
<Folder Name="/Build/">
<Project Path="Build/Build.csproj" />
<File Path=".github/workflows/pr.yml" />
<File Path=".github/workflows/release.yml" />
</Folder>
<Folder Name="/Config/">
<File Path=".csharpierrc.yaml" />
<File Path=".editorconfig" />
<File Path="codecov.yml" />
<File Path="CodeMetricsConfig.txt" />
<File Path="Directory.Build.props" />
<File Path="Directory.Packages.props" />
<File Path=".config/dotnet-tools.json" />
<File Path="global.json" />
<File Path="README.md" />
</Folder>
<Folder Name="/Connectors/" />
<Folder Name="/Connectors/ArcGIS/">
<Project Path="Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Speckle.Connectors.ArcGIS3.csproj" />
<Project Path="Converters/ArcGIS/Speckle.Converters.ArcGIS3/Speckle.Converters.ArcGIS3.csproj" />
</Folder>
<Folder Name="/Connectors/Autocad/">
<File Path="Connectors/Autocad/Directory.Build.targets" />
</Folder>
<Folder Name="/Connectors/Autocad/2022/">
<Project Path="Connectors/Autocad/Speckle.Connectors.Autocad2022/Speckle.Connectors.Autocad2022.csproj" />
<Project Path="Connectors/Autocad/Speckle.Connectors.Civil3d2022/Speckle.Connectors.Civil3d2022.csproj" />
<Project Path="Converters/Autocad/Speckle.Converters.Autocad2022/Speckle.Converters.Autocad2022.csproj" />
<Project Path="Converters/Civil3d/Speckle.Converters.Civil3d2022/Speckle.Converters.Civil3d2022.csproj" />
</Folder>
<Folder Name="/Connectors/Autocad/2023/">
<Project Path="Connectors/Autocad/Speckle.Connectors.Autocad2023/Speckle.Connectors.Autocad2023.csproj" />
<Project Path="Connectors/Autocad/Speckle.Connectors.Civil3d2023/Speckle.Connectors.Civil3d2023.csproj" />
<Project Path="Converters/Autocad/Speckle.Converters.Autocad2023/Speckle.Converters.Autocad2023.csproj" />
<Project Path="Converters/Civil3d/Speckle.Converters.Civil3d2023/Speckle.Converters.Civil3d2023.csproj" />
</Folder>
<Folder Name="/Connectors/Autocad/2024/">
<Project Path="Connectors/Autocad/Speckle.Connectors.Autocad2024/Speckle.Connectors.Autocad2024.csproj" />
<Project Path="Connectors/Autocad/Speckle.Connectors.Civil3d2024/Speckle.Connectors.Civil3d2024.csproj" />
<Project Path="Converters/Autocad/Speckle.Converters.Autocad2024/Speckle.Converters.Autocad2024.csproj" />
<Project Path="Converters/Civil3d/Speckle.Converters.Civil3d2024/Speckle.Converters.Civil3d2024.csproj" />
</Folder>
<Folder Name="/Connectors/Autocad/2025/">
<Project Path="Connectors/Autocad/Speckle.Connectors.Autocad2025/Speckle.Connectors.Autocad2025.csproj" />
<Project Path="Connectors/Autocad/Speckle.Connectors.Civil3d2025/Speckle.Connectors.Civil3d2025.csproj" />
<Project Path="Converters/Autocad/Speckle.Converters.Autocad2025/Speckle.Converters.Autocad2025.csproj" />
<Project Path="Converters/Civil3d/Speckle.Converters.Civil3d2025/Speckle.Converters.Civil3d2025.csproj" />
</Folder>
<Folder Name="/Connectors/Autocad/2026/">
<Project Path="Connectors/Autocad/Speckle.Connectors.Autocad2026/Speckle.Connectors.Autocad2026.csproj" />
<Project Path="Connectors/Autocad/Speckle.Connectors.Civil3d2026/Speckle.Connectors.Civil3d2026.csproj" />
<Project Path="Converters/Autocad/Speckle.Converters.Autocad2026/Speckle.Converters.Autocad2026.csproj" />
<Project Path="Converters/Civil3d/Speckle.Converters.Civil3d2026/Speckle.Converters.Civil3d2026.csproj" />
</Folder>
<Folder Name="/Connectors/Autocad/Shared/">
<Project Path="Connectors/Autocad/Speckle.Connectors.AutocadShared/Speckle.Connectors.AutocadShared.shproj" />
<Project Path="Connectors/Autocad/Speckle.Connectors.Civil3dShared/Speckle.Connectors.Civil3dShared.shproj" />
<Project Path="Converters/Autocad/Speckle.Converters.AutocadShared/Speckle.Converters.AutocadShared.shproj" />
<Project Path="Converters/Civil3d/Speckle.Converters.Civil3dShared/Speckle.Converters.Civil3dShared.shproj" />
</Folder>
<Folder Name="/Connectors/CSi/" />
<Folder Name="/Connectors/CSi/ETABS21/">
<Project Path="Connectors/CSi/Speckle.Connectors.ETABS21/Speckle.Connectors.ETABS21.csproj" />
<Project Path="Converters/CSi/Speckle.Converters.ETABS21/Speckle.Converters.ETABS21.csproj" />
</Folder>
<Folder Name="/Connectors/CSi/ETABS22/">
<Project Path="Connectors/CSi/Speckle.Connectors.ETABS22/Speckle.Connectors.ETABS22.csproj" />
<Project Path="Converters/CSi/Speckle.Converters.ETABS22/Speckle.Converters.ETABS22.csproj" />
</Folder>
<Folder Name="/Connectors/CSi/Shared/">
<Project Path="Connectors/CSi/Speckle.Connectors.CSiShared/Speckle.Connectors.CSiShared.shproj" />
<Project Path="Connectors/CSi/Speckle.Connectors.ETABSShared/Speckle.Connectors.ETABSShared.shproj" />
<Project Path="Converters/CSi/Speckle.Converters.CSiShared/Speckle.Converters.CSiShared.shproj" />
<Project Path="Converters/CSi/Speckle.Converters.ETABSShared/Speckle.Converters.ETABSShared.shproj" />
</Folder>
<Folder Name="/Connectors/Navisworks/">
<File Path="Connectors/Navisworks/Directory.Build.targets" />
</Folder>
<Folder Name="/Connectors/Navisworks/2020/">
<Project Path="Connectors/Navisworks/Speckle.Connectors.Navisworks2020/Speckle.Connectors.Navisworks2020.csproj" />
<Project Path="Converters/Navisworks/Speckle.Converters.Navisworks2020/Speckle.Converters.Navisworks2020.csproj" />
</Folder>
<Folder Name="/Connectors/Navisworks/2021/">
<Project Path="Connectors/Navisworks/Speckle.Connectors.Navisworks2021/Speckle.Connectors.Navisworks2021.csproj" />
<Project Path="Converters/Navisworks/Speckle.Converters.Navisworks2021/Speckle.Converters.Navisworks2021.csproj" />
</Folder>
<Folder Name="/Connectors/Navisworks/2022/">
<Project Path="Connectors/Navisworks/Speckle.Connectors.Navisworks2022/Speckle.Connectors.Navisworks2022.csproj" />
<Project Path="Converters/Navisworks/Speckle.Converters.Navisworks2022/Speckle.Converters.Navisworks2022.csproj" />
</Folder>
<Folder Name="/Connectors/Navisworks/2023/">
<Project Path="Connectors/Navisworks/Speckle.Connectors.Navisworks2023/Speckle.Connectors.Navisworks2023.csproj" />
<Project Path="Converters/Navisworks/Speckle.Converters.Navisworks2023/Speckle.Converters.Navisworks2023.csproj" />
</Folder>
<Folder Name="/Connectors/Navisworks/2024/">
<Project Path="Connectors/Navisworks/Speckle.Connectors.Navisworks2024/Speckle.Connectors.Navisworks2024.csproj" />
<Project Path="Converters/Navisworks/Speckle.Converters.Navisworks2024/Speckle.Converters.Navisworks2024.csproj" />
</Folder>
<Folder Name="/Connectors/Navisworks/2025/">
<Project Path="Connectors/Navisworks/Speckle.Connectors.Navisworks2025/Speckle.Connectors.Navisworks2025.csproj" />
<Project Path="Converters/Navisworks/Speckle.Converters.Navisworks2025/Speckle.Converters.Navisworks2025.csproj" />
</Folder>
<Folder Name="/Connectors/Navisworks/2026/">
<Project Path="Connectors/Navisworks/Speckle.Connectors.Navisworks2026/Speckle.Connectors.Navisworks2026.csproj" />
<Project Path="Converters/Navisworks/Speckle.Converters.Navisworks2026/Speckle.Converters.Navisworks2026.csproj" />
</Folder>
<Folder Name="/Connectors/Navisworks/Shared/">
<Project Path="Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Speckle.Connectors.NavisworksShared.shproj" />
<Project Path="Converters/Navisworks/Speckle.Converters.NavisworksShared/Speckle.Converters.NavisworksShared.shproj" />
</Folder>
<Folder Name="/Connectors/Revit/">
<File Path="Connectors/Revit/Directory.Build.targets" />
</Folder>
<Folder Name="/Connectors/Revit/2022/">
<Project Path="Connectors/Revit/Speckle.Connectors.Revit2022/Speckle.Connectors.Revit2022.csproj" />
<Project Path="Converters/Revit/Speckle.Converters.Revit2022/Speckle.Converters.Revit2022.csproj" />
</Folder>
<Folder Name="/Connectors/Revit/2023/">
<Project Path="Connectors/Revit/Speckle.Connectors.Revit2023/Speckle.Connectors.Revit2023.csproj" />
<Project Path="Converters/Revit/Speckle.Converters.Revit2023/Speckle.Converters.Revit2023.csproj" />
</Folder>
<Folder Name="/Connectors/Revit/2024/">
<Project Path="Connectors/Revit/Speckle.Connectors.Revit2024/Speckle.Connectors.Revit2024.csproj" />
<Project Path="Converters/Revit/Speckle.Converters.Revit2024/Speckle.Converters.Revit2024.csproj" />
</Folder>
<Folder Name="/Connectors/Revit/2025/">
<Project Path="Connectors/Revit/Speckle.Connectors.Revit2025/Speckle.Connectors.Revit2025.csproj" />
<Project Path="Converters/Revit/Speckle.Converters.Revit2025/Speckle.Converters.Revit2025.csproj" />
</Folder>
<Folder Name="/Connectors/Revit/2026/">
<Project Path="Connectors/Revit/Speckle.Connectors.Revit2026/Speckle.Connectors.Revit2026.csproj" />
<Project Path="Converters/Revit/Speckle.Converters.Revit2026/Speckle.Converters.Revit2026.csproj" />
</Folder>
<Folder Name="/Connectors/Revit/Shared/">
<Project Path="Connectors/Revit/Speckle.Connectors.RevitShared.Cef/Speckle.Connectors.RevitShared.Cef.shproj" />
<Project Path="Connectors/Revit/Speckle.Connectors.RevitShared/Speckle.Connectors.RevitShared.shproj" />
<Project Path="Converters/Revit/Speckle.Converters.RevitShared.Tests/Speckle.Converters.RevitShared.Tests.shproj" />
<Project Path="Converters/Revit/Speckle.Converters.RevitShared/Speckle.Converters.RevitShared.shproj" />
</Folder>
<Folder Name="/Connectors/Rhino/">
<File Path="Connectors/Rhino/Directory.Build.targets" />
</Folder>
<Folder Name="/Connectors/Rhino/7/">
<Project Path="Connectors/Rhino/Speckle.Connectors.Grasshopper7/Speckle.Connectors.Grasshopper7.csproj" />
<Project Path="Connectors/Rhino/Speckle.Connectors.Rhino7/Speckle.Connectors.Rhino7.csproj" />
<Project Path="Converters/Rhino/Speckle.Converters.Rhino7/Speckle.Converters.Rhino7.csproj" />
</Folder>
<Folder Name="/Connectors/Rhino/8/">
<Project Path="Connectors/Rhino/Speckle.Connectors.Grasshopper8/Speckle.Connectors.Grasshopper8.csproj" />
<Project Path="Connectors/Rhino/Speckle.Connectors.Rhino8/Speckle.Connectors.Rhino8.csproj" />
<Project Path="Converters/Rhino/Speckle.Converters.Rhino8/Speckle.Converters.Rhino8.csproj" />
</Folder>
<Folder Name="/Connectors/Rhino/Shared/">
<Project Path="Connectors/Rhino/Speckle.Connectors.GrasshopperShared/Speckle.Connectors.GrasshopperShared.shproj" />
<Project Path="Connectors/Rhino/Speckle.Connectors.RhinoShared/Speckle.Connectors.RhinoShared.shproj" />
<Project Path="Converters/Rhino/Speckle.Converters.RhinoShared/Speckle.Converters.RhinoShared.shproj" />
</Folder>
<Folder Name="/Connectors/Tekla/">
<File Path="Connectors/Tekla/Directory.Build.targets" />
</Folder>
<Folder Name="/Connectors/Tekla/2023/">
<Project Path="Connectors/Tekla/Speckle.Connector.Tekla2023/Speckle.Connector.Tekla2023.csproj" />
<Project Path="Converters/Tekla/Speckle.Converter.Tekla2023/Speckle.Converter.Tekla2023.csproj" />
</Folder>
<Folder Name="/Connectors/Tekla/2024/">
<Project Path="Connectors/Tekla/Speckle.Connector.Tekla2024/Speckle.Connector.Tekla2024.csproj" />
<Project Path="Converters/Tekla/Speckle.Converter.Tekla2024/Speckle.Converter.Tekla2024.csproj" />
</Folder>
<Folder Name="/Connectors/Tekla/Shared/">
<Project Path="Connectors/Tekla/Speckle.Connector.TeklaShared/Speckle.Connectors.TeklaShared.shproj" />
<Project Path="Converters/Tekla/Speckle.Converters.TeklaShared/Speckle.Converters.TeklaShared.shproj" />
</Folder>
<Folder Name="/Importers/" />
<Folder Name="/Importers/Ifc/">
<Project Path="Importers/Ifc/Speckle.Importers.Ifc.Tester/Speckle.Importers.Ifc.Tester.csproj" />
<Project Path="Importers/Ifc/Speckle.Importers.Ifc.Tester2/Speckle.Importers.Ifc.Tester2.csproj" />
<Project Path="Importers/Ifc/Speckle.Importers.Ifc/Speckle.Importers.Ifc.csproj" />
</Folder>
<Folder Name="/Sdk/">
<Project Path="DUI3/Speckle.Connectors.DUI.Tests/Speckle.Connectors.DUI.Tests.csproj" />
<Project Path="DUI3/Speckle.Connectors.DUI.WebView/Speckle.Connectors.DUI.WebView.csproj" />
<Project Path="DUI3/Speckle.Connectors.DUI/Speckle.Connectors.DUI.csproj" />
<Project Path="Sdk/Speckle.Common.MeshTriangulation/Speckle.Common.MeshTriangulation.csproj" />
<Project Path="Sdk/Speckle.Connectors.Common.Tests/Speckle.Connectors.Common.Tests.csproj" />
<Project Path="Sdk/Speckle.Connectors.Common/Speckle.Connectors.Common.csproj" />
<Project Path="Sdk/Speckle.Connectors.Logging/Speckle.Connectors.Logging.csproj" />
<Project Path="Sdk/Speckle.Converters.Common.Tests/Speckle.Converters.Common.Tests.csproj" />
<Project Path="Sdk/Speckle.Converters.Common/Speckle.Converters.Common.csproj" />
<Project Path="Sdk/Speckle.Performance/Speckle.Performance.csproj" />
<Project Path="Sdk/Speckle.Testing/Speckle.Testing.csproj" />
</Folder>
<Project Path="../speckle-sharp-sdk/src/Speckle.Objects/Speckle.Objects.csproj" />
<Project Path="../speckle-sharp-sdk/src/Speckle.Sdk.Dependencies/Speckle.Sdk.Dependencies.csproj" />
<Project Path="../speckle-sharp-sdk/src/Speckle.Sdk/Speckle.Sdk.csproj" />
</Solution>
+8
View File
@@ -58,6 +58,14 @@ Issues or questions? We encourage everyone interested to debug / hack / contribu
For good development experience and environment setup, run the commands below as needed.
### Switching to SLNX
SLNX was introduced with .NET 9 (in May 2024), Visual Studio 17.13 and Rider 2024.3. The older SLNs being used remain for now but will be removed when .NET 10 is introduced to the repo. SLNXs specific to certain host apps are being generated from the main SLN to allow for faster developmenet.
[https://devblogs.microsoft.com/dotnet/introducing-slnx-support-dotnet-cli/](https://devblogs.microsoft.com/dotnet/introducing-slnx-support-dotnet-cli/)
[https://devblogs.microsoft.com/visualstudio/new-simpler-solution-file-format/](https://devblogs.microsoft.com/visualstudio/new-simpler-solution-file-format/)
### Formatting
We're using [CSharpier](https://github.com/belav/csharpier) to format our code. You can install Csharpier in a few ways:
- Install CSharpier as a local tool and reformat from CLI
+47
View File
@@ -0,0 +1,47 @@
<Solution>
<Configurations>
<BuildType Name="Debug" />
<BuildType Name="Local" />
<BuildType Name="Release" />
</Configurations>
<Folder Name="/Build/">
<Project Path="Build/Build.csproj" />
<File Path=".github/workflows/pr.yml" />
<File Path=".github/workflows/release.yml" />
</Folder>
<Folder Name="/Config/">
<File Path=".csharpierrc.yaml" />
<File Path=".editorconfig" />
<File Path="codecov.yml" />
<File Path="CodeMetricsConfig.txt" />
<File Path="Directory.Build.props" />
<File Path="Directory.Packages.props" />
<File Path=".config/dotnet-tools.json" />
<File Path="global.json" />
<File Path="README.md" />
</Folder>
<Folder Name="/Connectors/" />
<Folder Name="/Connectors/ArcGIS/">
<Project Path="Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Speckle.Connectors.ArcGIS3.csproj" />
<Project Path="Converters/ArcGIS/Speckle.Converters.ArcGIS3/Speckle.Converters.ArcGIS3.csproj" />
</Folder>
<Folder Name="/Importers/" />
<Folder Name="/Importers/Ifc/">
<Project Path="Importers/Ifc/Speckle.Importers.Ifc.Tester/Speckle.Importers.Ifc.Tester.csproj" />
<Project Path="Importers/Ifc/Speckle.Importers.Ifc.Tester2/Speckle.Importers.Ifc.Tester2.csproj" />
<Project Path="Importers/Ifc/Speckle.Importers.Ifc/Speckle.Importers.Ifc.csproj" />
</Folder>
<Folder Name="/Sdk/">
<Project Path="DUI3/Speckle.Connectors.DUI.Tests/Speckle.Connectors.DUI.Tests.csproj" />
<Project Path="DUI3/Speckle.Connectors.DUI.WebView/Speckle.Connectors.DUI.WebView.csproj" />
<Project Path="DUI3/Speckle.Connectors.DUI/Speckle.Connectors.DUI.csproj" />
<Project Path="Sdk/Speckle.Common.MeshTriangulation/Speckle.Common.MeshTriangulation.csproj" />
<Project Path="Sdk/Speckle.Connectors.Common.Tests/Speckle.Connectors.Common.Tests.csproj" />
<Project Path="Sdk/Speckle.Connectors.Common/Speckle.Connectors.Common.csproj" />
<Project Path="Sdk/Speckle.Connectors.Logging/Speckle.Connectors.Logging.csproj" />
<Project Path="Sdk/Speckle.Converters.Common.Tests/Speckle.Converters.Common.Tests.csproj" />
<Project Path="Sdk/Speckle.Converters.Common/Speckle.Converters.Common.csproj" />
<Project Path="Sdk/Speckle.Performance/Speckle.Performance.csproj" />
<Project Path="Sdk/Speckle.Testing/Speckle.Testing.csproj" />
</Folder>
</Solution>
+82
View File
@@ -0,0 +1,82 @@
<Solution>
<Configurations>
<BuildType Name="Debug" />
<BuildType Name="Local" />
<BuildType Name="Release" />
</Configurations>
<Folder Name="/Build/">
<Project Path="Build/Build.csproj" />
<File Path=".github/workflows/pr.yml" />
<File Path=".github/workflows/release.yml" />
</Folder>
<Folder Name="/Config/">
<File Path=".csharpierrc.yaml" />
<File Path=".editorconfig" />
<File Path="codecov.yml" />
<File Path="CodeMetricsConfig.txt" />
<File Path="Directory.Build.props" />
<File Path="Directory.Packages.props" />
<File Path=".config/dotnet-tools.json" />
<File Path="global.json" />
<File Path="README.md" />
</Folder>
<Folder Name="/Connectors/" />
<Folder Name="/Connectors/Autocad/">
<File Path="Connectors/Autocad/Directory.Build.targets" />
</Folder>
<Folder Name="/Connectors/Autocad/2022/">
<Project Path="Connectors/Autocad/Speckle.Connectors.Autocad2022/Speckle.Connectors.Autocad2022.csproj" />
<Project Path="Connectors/Autocad/Speckle.Connectors.Civil3d2022/Speckle.Connectors.Civil3d2022.csproj" />
<Project Path="Converters/Autocad/Speckle.Converters.Autocad2022/Speckle.Converters.Autocad2022.csproj" />
<Project Path="Converters/Civil3d/Speckle.Converters.Civil3d2022/Speckle.Converters.Civil3d2022.csproj" />
</Folder>
<Folder Name="/Connectors/Autocad/2023/">
<Project Path="Connectors/Autocad/Speckle.Connectors.Autocad2023/Speckle.Connectors.Autocad2023.csproj" />
<Project Path="Connectors/Autocad/Speckle.Connectors.Civil3d2023/Speckle.Connectors.Civil3d2023.csproj" />
<Project Path="Converters/Autocad/Speckle.Converters.Autocad2023/Speckle.Converters.Autocad2023.csproj" />
<Project Path="Converters/Civil3d/Speckle.Converters.Civil3d2023/Speckle.Converters.Civil3d2023.csproj" />
</Folder>
<Folder Name="/Connectors/Autocad/2024/">
<Project Path="Connectors/Autocad/Speckle.Connectors.Autocad2024/Speckle.Connectors.Autocad2024.csproj" />
<Project Path="Connectors/Autocad/Speckle.Connectors.Civil3d2024/Speckle.Connectors.Civil3d2024.csproj" />
<Project Path="Converters/Autocad/Speckle.Converters.Autocad2024/Speckle.Converters.Autocad2024.csproj" />
<Project Path="Converters/Civil3d/Speckle.Converters.Civil3d2024/Speckle.Converters.Civil3d2024.csproj" />
</Folder>
<Folder Name="/Connectors/Autocad/2025/">
<Project Path="Connectors/Autocad/Speckle.Connectors.Autocad2025/Speckle.Connectors.Autocad2025.csproj" />
<Project Path="Connectors/Autocad/Speckle.Connectors.Civil3d2025/Speckle.Connectors.Civil3d2025.csproj" />
<Project Path="Converters/Autocad/Speckle.Converters.Autocad2025/Speckle.Converters.Autocad2025.csproj" />
<Project Path="Converters/Civil3d/Speckle.Converters.Civil3d2025/Speckle.Converters.Civil3d2025.csproj" />
</Folder>
<Folder Name="/Connectors/Autocad/2026/">
<Project Path="Connectors/Autocad/Speckle.Connectors.Autocad2026/Speckle.Connectors.Autocad2026.csproj" />
<Project Path="Connectors/Autocad/Speckle.Connectors.Civil3d2026/Speckle.Connectors.Civil3d2026.csproj" />
<Project Path="Converters/Autocad/Speckle.Converters.Autocad2026/Speckle.Converters.Autocad2026.csproj" />
<Project Path="Converters/Civil3d/Speckle.Converters.Civil3d2026/Speckle.Converters.Civil3d2026.csproj" />
</Folder>
<Folder Name="/Connectors/Autocad/Shared/">
<Project Path="Connectors/Autocad/Speckle.Connectors.AutocadShared/Speckle.Connectors.AutocadShared.shproj" />
<Project Path="Connectors/Autocad/Speckle.Connectors.Civil3dShared/Speckle.Connectors.Civil3dShared.shproj" />
<Project Path="Converters/Autocad/Speckle.Converters.AutocadShared/Speckle.Converters.AutocadShared.shproj" />
<Project Path="Converters/Civil3d/Speckle.Converters.Civil3dShared/Speckle.Converters.Civil3dShared.shproj" />
</Folder>
<Folder Name="/Importers/" />
<Folder Name="/Importers/Ifc/">
<Project Path="Importers/Ifc/Speckle.Importers.Ifc.Tester/Speckle.Importers.Ifc.Tester.csproj" />
<Project Path="Importers/Ifc/Speckle.Importers.Ifc.Tester2/Speckle.Importers.Ifc.Tester2.csproj" />
<Project Path="Importers/Ifc/Speckle.Importers.Ifc/Speckle.Importers.Ifc.csproj" />
</Folder>
<Folder Name="/Sdk/">
<Project Path="DUI3/Speckle.Connectors.DUI.Tests/Speckle.Connectors.DUI.Tests.csproj" />
<Project Path="DUI3/Speckle.Connectors.DUI.WebView/Speckle.Connectors.DUI.WebView.csproj" />
<Project Path="DUI3/Speckle.Connectors.DUI/Speckle.Connectors.DUI.csproj" />
<Project Path="Sdk/Speckle.Common.MeshTriangulation/Speckle.Common.MeshTriangulation.csproj" />
<Project Path="Sdk/Speckle.Connectors.Common.Tests/Speckle.Connectors.Common.Tests.csproj" />
<Project Path="Sdk/Speckle.Connectors.Common/Speckle.Connectors.Common.csproj" />
<Project Path="Sdk/Speckle.Connectors.Logging/Speckle.Connectors.Logging.csproj" />
<Project Path="Sdk/Speckle.Converters.Common.Tests/Speckle.Converters.Common.Tests.csproj" />
<Project Path="Sdk/Speckle.Converters.Common/Speckle.Converters.Common.csproj" />
<Project Path="Sdk/Speckle.Performance/Speckle.Performance.csproj" />
<Project Path="Sdk/Speckle.Testing/Speckle.Testing.csproj" />
</Folder>
</Solution>
+82
View File
@@ -0,0 +1,82 @@
<Solution>
<Configurations>
<BuildType Name="Debug" />
<BuildType Name="Local" />
<BuildType Name="Release" />
</Configurations>
<Folder Name="/Build/">
<Project Path="Build/Build.csproj" />
<File Path=".github/workflows/pr.yml" />
<File Path=".github/workflows/release.yml" />
</Folder>
<Folder Name="/Config/">
<File Path=".csharpierrc.yaml" />
<File Path=".editorconfig" />
<File Path="codecov.yml" />
<File Path="CodeMetricsConfig.txt" />
<File Path="Directory.Build.props" />
<File Path="Directory.Packages.props" />
<File Path=".config/dotnet-tools.json" />
<File Path="global.json" />
<File Path="README.md" />
</Folder>
<Folder Name="/Connectors/" />
<Folder Name="/Connectors/Autocad/">
<File Path="Connectors/Autocad/Directory.Build.targets" />
</Folder>
<Folder Name="/Connectors/Autocad/2022/">
<Project Path="Connectors/Autocad/Speckle.Connectors.Autocad2022/Speckle.Connectors.Autocad2022.csproj" />
<Project Path="Connectors/Autocad/Speckle.Connectors.Civil3d2022/Speckle.Connectors.Civil3d2022.csproj" />
<Project Path="Converters/Autocad/Speckle.Converters.Autocad2022/Speckle.Converters.Autocad2022.csproj" />
<Project Path="Converters/Civil3d/Speckle.Converters.Civil3d2022/Speckle.Converters.Civil3d2022.csproj" />
</Folder>
<Folder Name="/Connectors/Autocad/2023/">
<Project Path="Connectors/Autocad/Speckle.Connectors.Autocad2023/Speckle.Connectors.Autocad2023.csproj" />
<Project Path="Connectors/Autocad/Speckle.Connectors.Civil3d2023/Speckle.Connectors.Civil3d2023.csproj" />
<Project Path="Converters/Autocad/Speckle.Converters.Autocad2023/Speckle.Converters.Autocad2023.csproj" />
<Project Path="Converters/Civil3d/Speckle.Converters.Civil3d2023/Speckle.Converters.Civil3d2023.csproj" />
</Folder>
<Folder Name="/Connectors/Autocad/2024/">
<Project Path="Connectors/Autocad/Speckle.Connectors.Autocad2024/Speckle.Connectors.Autocad2024.csproj" />
<Project Path="Connectors/Autocad/Speckle.Connectors.Civil3d2024/Speckle.Connectors.Civil3d2024.csproj" />
<Project Path="Converters/Autocad/Speckle.Converters.Autocad2024/Speckle.Converters.Autocad2024.csproj" />
<Project Path="Converters/Civil3d/Speckle.Converters.Civil3d2024/Speckle.Converters.Civil3d2024.csproj" />
</Folder>
<Folder Name="/Connectors/Autocad/2025/">
<Project Path="Connectors/Autocad/Speckle.Connectors.Autocad2025/Speckle.Connectors.Autocad2025.csproj" />
<Project Path="Connectors/Autocad/Speckle.Connectors.Civil3d2025/Speckle.Connectors.Civil3d2025.csproj" />
<Project Path="Converters/Autocad/Speckle.Converters.Autocad2025/Speckle.Converters.Autocad2025.csproj" />
<Project Path="Converters/Civil3d/Speckle.Converters.Civil3d2025/Speckle.Converters.Civil3d2025.csproj" />
</Folder>
<Folder Name="/Connectors/Autocad/2026/">
<Project Path="Connectors/Autocad/Speckle.Connectors.Autocad2026/Speckle.Connectors.Autocad2026.csproj" />
<Project Path="Connectors/Autocad/Speckle.Connectors.Civil3d2026/Speckle.Connectors.Civil3d2026.csproj" />
<Project Path="Converters/Autocad/Speckle.Converters.Autocad2026/Speckle.Converters.Autocad2026.csproj" />
<Project Path="Converters/Civil3d/Speckle.Converters.Civil3d2026/Speckle.Converters.Civil3d2026.csproj" />
</Folder>
<Folder Name="/Connectors/Autocad/Shared/">
<Project Path="Connectors/Autocad/Speckle.Connectors.AutocadShared/Speckle.Connectors.AutocadShared.shproj" />
<Project Path="Connectors/Autocad/Speckle.Connectors.Civil3dShared/Speckle.Connectors.Civil3dShared.shproj" />
<Project Path="Converters/Autocad/Speckle.Converters.AutocadShared/Speckle.Converters.AutocadShared.shproj" />
<Project Path="Converters/Civil3d/Speckle.Converters.Civil3dShared/Speckle.Converters.Civil3dShared.shproj" />
</Folder>
<Folder Name="/Importers/" />
<Folder Name="/Importers/Ifc/">
<Project Path="Importers/Ifc/Speckle.Importers.Ifc.Tester/Speckle.Importers.Ifc.Tester.csproj" />
<Project Path="Importers/Ifc/Speckle.Importers.Ifc.Tester2/Speckle.Importers.Ifc.Tester2.csproj" />
<Project Path="Importers/Ifc/Speckle.Importers.Ifc/Speckle.Importers.Ifc.csproj" />
</Folder>
<Folder Name="/Sdk/">
<Project Path="DUI3/Speckle.Connectors.DUI.Tests/Speckle.Connectors.DUI.Tests.csproj" />
<Project Path="DUI3/Speckle.Connectors.DUI.WebView/Speckle.Connectors.DUI.WebView.csproj" />
<Project Path="DUI3/Speckle.Connectors.DUI/Speckle.Connectors.DUI.csproj" />
<Project Path="Sdk/Speckle.Common.MeshTriangulation/Speckle.Common.MeshTriangulation.csproj" />
<Project Path="Sdk/Speckle.Connectors.Common.Tests/Speckle.Connectors.Common.Tests.csproj" />
<Project Path="Sdk/Speckle.Connectors.Common/Speckle.Connectors.Common.csproj" />
<Project Path="Sdk/Speckle.Connectors.Logging/Speckle.Connectors.Logging.csproj" />
<Project Path="Sdk/Speckle.Converters.Common.Tests/Speckle.Converters.Common.Tests.csproj" />
<Project Path="Sdk/Speckle.Converters.Common/Speckle.Converters.Common.csproj" />
<Project Path="Sdk/Speckle.Performance/Speckle.Performance.csproj" />
<Project Path="Sdk/Speckle.Testing/Speckle.Testing.csproj" />
</Folder>
</Solution>
+198
View File
@@ -0,0 +1,198 @@
<Solution>
<Configurations>
<BuildType Name="Debug" />
<BuildType Name="Local" />
<BuildType Name="Release" />
</Configurations>
<Folder Name="/Build/">
<Project Path="Build/Build.csproj" />
<File Path=".github/workflows/pr.yml" />
<File Path=".github/workflows/release.yml" />
</Folder>
<Folder Name="/Config/">
<File Path=".csharpierrc.yaml" />
<File Path=".editorconfig" />
<File Path="codecov.yml" />
<File Path="CodeMetricsConfig.txt" />
<File Path="Directory.Build.props" />
<File Path="Directory.Packages.props" />
<File Path=".config/dotnet-tools.json" />
<File Path="global.json" />
<File Path="README.md" />
</Folder>
<Folder Name="/Connectors/" />
<Folder Name="/Connectors/ArcGIS/">
<Project Path="Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Speckle.Connectors.ArcGIS3.csproj" />
<Project Path="Converters/ArcGIS/Speckle.Converters.ArcGIS3/Speckle.Converters.ArcGIS3.csproj" />
</Folder>
<Folder Name="/Connectors/Autocad/">
<File Path="Connectors/Autocad/Directory.Build.targets" />
</Folder>
<Folder Name="/Connectors/Autocad/2022/">
<Project Path="Connectors/Autocad/Speckle.Connectors.Autocad2022/Speckle.Connectors.Autocad2022.csproj" />
<Project Path="Connectors/Autocad/Speckle.Connectors.Civil3d2022/Speckle.Connectors.Civil3d2022.csproj" />
<Project Path="Converters/Autocad/Speckle.Converters.Autocad2022/Speckle.Converters.Autocad2022.csproj" />
<Project Path="Converters/Civil3d/Speckle.Converters.Civil3d2022/Speckle.Converters.Civil3d2022.csproj" />
</Folder>
<Folder Name="/Connectors/Autocad/2023/">
<Project Path="Connectors/Autocad/Speckle.Connectors.Autocad2023/Speckle.Connectors.Autocad2023.csproj" />
<Project Path="Connectors/Autocad/Speckle.Connectors.Civil3d2023/Speckle.Connectors.Civil3d2023.csproj" />
<Project Path="Converters/Autocad/Speckle.Converters.Autocad2023/Speckle.Converters.Autocad2023.csproj" />
<Project Path="Converters/Civil3d/Speckle.Converters.Civil3d2023/Speckle.Converters.Civil3d2023.csproj" />
</Folder>
<Folder Name="/Connectors/Autocad/2024/">
<Project Path="Connectors/Autocad/Speckle.Connectors.Autocad2024/Speckle.Connectors.Autocad2024.csproj" />
<Project Path="Connectors/Autocad/Speckle.Connectors.Civil3d2024/Speckle.Connectors.Civil3d2024.csproj" />
<Project Path="Converters/Autocad/Speckle.Converters.Autocad2024/Speckle.Converters.Autocad2024.csproj" />
<Project Path="Converters/Civil3d/Speckle.Converters.Civil3d2024/Speckle.Converters.Civil3d2024.csproj" />
</Folder>
<Folder Name="/Connectors/Autocad/2025/">
<Project Path="Connectors/Autocad/Speckle.Connectors.Autocad2025/Speckle.Connectors.Autocad2025.csproj" />
<Project Path="Connectors/Autocad/Speckle.Connectors.Civil3d2025/Speckle.Connectors.Civil3d2025.csproj" />
<Project Path="Converters/Autocad/Speckle.Converters.Autocad2025/Speckle.Converters.Autocad2025.csproj" />
<Project Path="Converters/Civil3d/Speckle.Converters.Civil3d2025/Speckle.Converters.Civil3d2025.csproj" />
</Folder>
<Folder Name="/Connectors/Autocad/2026/">
<Project Path="Connectors/Autocad/Speckle.Connectors.Autocad2026/Speckle.Connectors.Autocad2026.csproj" />
<Project Path="Connectors/Autocad/Speckle.Connectors.Civil3d2026/Speckle.Connectors.Civil3d2026.csproj" />
<Project Path="Converters/Autocad/Speckle.Converters.Autocad2026/Speckle.Converters.Autocad2026.csproj" />
<Project Path="Converters/Civil3d/Speckle.Converters.Civil3d2026/Speckle.Converters.Civil3d2026.csproj" />
</Folder>
<Folder Name="/Connectors/Autocad/Shared/">
<Project Path="Connectors/Autocad/Speckle.Connectors.AutocadShared/Speckle.Connectors.AutocadShared.shproj" />
<Project Path="Connectors/Autocad/Speckle.Connectors.Civil3dShared/Speckle.Connectors.Civil3dShared.shproj" />
<Project Path="Converters/Autocad/Speckle.Converters.AutocadShared/Speckle.Converters.AutocadShared.shproj" />
<Project Path="Converters/Civil3d/Speckle.Converters.Civil3dShared/Speckle.Converters.Civil3dShared.shproj" />
</Folder>
<Folder Name="/Connectors/CSi/" />
<Folder Name="/Connectors/CSi/ETABS21/">
<Project Path="Connectors/CSi/Speckle.Connectors.ETABS21/Speckle.Connectors.ETABS21.csproj" />
<Project Path="Converters/CSi/Speckle.Converters.ETABS21/Speckle.Converters.ETABS21.csproj" />
</Folder>
<Folder Name="/Connectors/CSi/ETABS22/">
<Project Path="Connectors/CSi/Speckle.Connectors.ETABS22/Speckle.Connectors.ETABS22.csproj" />
<Project Path="Converters/CSi/Speckle.Converters.ETABS22/Speckle.Converters.ETABS22.csproj" />
</Folder>
<Folder Name="/Connectors/CSi/Shared/">
<Project Path="Connectors/CSi/Speckle.Connectors.CSiShared/Speckle.Connectors.CSiShared.shproj" />
<Project Path="Connectors/CSi/Speckle.Connectors.ETABSShared/Speckle.Connectors.ETABSShared.shproj" />
<Project Path="Converters/CSi/Speckle.Converters.CSiShared/Speckle.Converters.CSiShared.shproj" />
<Project Path="Converters/CSi/Speckle.Converters.ETABSShared/Speckle.Converters.ETABSShared.shproj" />
</Folder>
<Folder Name="/Connectors/Navisworks/">
<File Path="Connectors/Navisworks/Directory.Build.targets" />
</Folder>
<Folder Name="/Connectors/Navisworks/2020/">
<Project Path="Connectors/Navisworks/Speckle.Connectors.Navisworks2020/Speckle.Connectors.Navisworks2020.csproj" />
<Project Path="Converters/Navisworks/Speckle.Converters.Navisworks2020/Speckle.Converters.Navisworks2020.csproj" />
</Folder>
<Folder Name="/Connectors/Navisworks/2021/">
<Project Path="Connectors/Navisworks/Speckle.Connectors.Navisworks2021/Speckle.Connectors.Navisworks2021.csproj" />
<Project Path="Converters/Navisworks/Speckle.Converters.Navisworks2021/Speckle.Converters.Navisworks2021.csproj" />
</Folder>
<Folder Name="/Connectors/Navisworks/2022/">
<Project Path="Connectors/Navisworks/Speckle.Connectors.Navisworks2022/Speckle.Connectors.Navisworks2022.csproj" />
<Project Path="Converters/Navisworks/Speckle.Converters.Navisworks2022/Speckle.Converters.Navisworks2022.csproj" />
</Folder>
<Folder Name="/Connectors/Navisworks/2023/">
<Project Path="Connectors/Navisworks/Speckle.Connectors.Navisworks2023/Speckle.Connectors.Navisworks2023.csproj" />
<Project Path="Converters/Navisworks/Speckle.Converters.Navisworks2023/Speckle.Converters.Navisworks2023.csproj" />
</Folder>
<Folder Name="/Connectors/Navisworks/2024/">
<Project Path="Connectors/Navisworks/Speckle.Connectors.Navisworks2024/Speckle.Connectors.Navisworks2024.csproj" />
<Project Path="Converters/Navisworks/Speckle.Converters.Navisworks2024/Speckle.Converters.Navisworks2024.csproj" />
</Folder>
<Folder Name="/Connectors/Navisworks/2025/">
<Project Path="Connectors/Navisworks/Speckle.Connectors.Navisworks2025/Speckle.Connectors.Navisworks2025.csproj" />
<Project Path="Converters/Navisworks/Speckle.Converters.Navisworks2025/Speckle.Converters.Navisworks2025.csproj" />
</Folder>
<Folder Name="/Connectors/Navisworks/2026/">
<Project Path="Connectors/Navisworks/Speckle.Connectors.Navisworks2026/Speckle.Connectors.Navisworks2026.csproj" />
<Project Path="Converters/Navisworks/Speckle.Converters.Navisworks2026/Speckle.Converters.Navisworks2026.csproj" />
</Folder>
<Folder Name="/Connectors/Navisworks/Shared/">
<Project Path="Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Speckle.Connectors.NavisworksShared.shproj" />
<Project Path="Converters/Navisworks/Speckle.Converters.NavisworksShared/Speckle.Converters.NavisworksShared.shproj" />
</Folder>
<Folder Name="/Connectors/Revit/">
<File Path="Connectors/Revit/Directory.Build.targets" />
</Folder>
<Folder Name="/Connectors/Revit/2022/">
<Project Path="Connectors/Revit/Speckle.Connectors.Revit2022/Speckle.Connectors.Revit2022.csproj" />
<Project Path="Converters/Revit/Speckle.Converters.Revit2022/Speckle.Converters.Revit2022.csproj" />
</Folder>
<Folder Name="/Connectors/Revit/2023/">
<Project Path="Connectors/Revit/Speckle.Connectors.Revit2023/Speckle.Connectors.Revit2023.csproj" />
<Project Path="Converters/Revit/Speckle.Converters.Revit2023/Speckle.Converters.Revit2023.csproj" />
</Folder>
<Folder Name="/Connectors/Revit/2024/">
<Project Path="Connectors/Revit/Speckle.Connectors.Revit2024/Speckle.Connectors.Revit2024.csproj" />
<Project Path="Converters/Revit/Speckle.Converters.Revit2024/Speckle.Converters.Revit2024.csproj" />
</Folder>
<Folder Name="/Connectors/Revit/2025/">
<Project Path="Connectors/Revit/Speckle.Connectors.Revit2025/Speckle.Connectors.Revit2025.csproj" />
<Project Path="Converters/Revit/Speckle.Converters.Revit2025/Speckle.Converters.Revit2025.csproj" />
</Folder>
<Folder Name="/Connectors/Revit/2026/">
<Project Path="Connectors/Revit/Speckle.Connectors.Revit2026/Speckle.Connectors.Revit2026.csproj" />
<Project Path="Converters/Revit/Speckle.Converters.Revit2026/Speckle.Converters.Revit2026.csproj" />
</Folder>
<Folder Name="/Connectors/Revit/Shared/">
<Project Path="Connectors/Revit/Speckle.Connectors.RevitShared.Cef/Speckle.Connectors.RevitShared.Cef.shproj" />
<Project Path="Connectors/Revit/Speckle.Connectors.RevitShared/Speckle.Connectors.RevitShared.shproj" />
<Project Path="Converters/Revit/Speckle.Converters.RevitShared.Tests/Speckle.Converters.RevitShared.Tests.shproj" />
<Project Path="Converters/Revit/Speckle.Converters.RevitShared/Speckle.Converters.RevitShared.shproj" />
</Folder>
<Folder Name="/Connectors/Rhino/">
<File Path="Connectors/Rhino/Directory.Build.targets" />
</Folder>
<Folder Name="/Connectors/Rhino/7/">
<Project Path="Connectors/Rhino/Speckle.Connectors.Grasshopper7/Speckle.Connectors.Grasshopper7.csproj" />
<Project Path="Connectors/Rhino/Speckle.Connectors.Rhino7/Speckle.Connectors.Rhino7.csproj" />
<Project Path="Converters/Rhino/Speckle.Converters.Rhino7/Speckle.Converters.Rhino7.csproj" />
</Folder>
<Folder Name="/Connectors/Rhino/8/">
<Project Path="Connectors/Rhino/Speckle.Connectors.Grasshopper8/Speckle.Connectors.Grasshopper8.csproj" />
<Project Path="Connectors/Rhino/Speckle.Connectors.Rhino8/Speckle.Connectors.Rhino8.csproj" />
<Project Path="Converters/Rhino/Speckle.Converters.Rhino8/Speckle.Converters.Rhino8.csproj" />
</Folder>
<Folder Name="/Connectors/Rhino/Shared/">
<Project Path="Connectors/Rhino/Speckle.Connectors.GrasshopperShared/Speckle.Connectors.GrasshopperShared.shproj" />
<Project Path="Connectors/Rhino/Speckle.Connectors.RhinoShared/Speckle.Connectors.RhinoShared.shproj" />
<Project Path="Converters/Rhino/Speckle.Converters.RhinoShared/Speckle.Converters.RhinoShared.shproj" />
</Folder>
<Folder Name="/Connectors/Tekla/">
<File Path="Connectors/Tekla/Directory.Build.targets" />
</Folder>
<Folder Name="/Connectors/Tekla/2023/">
<Project Path="Connectors/Tekla/Speckle.Connector.Tekla2023/Speckle.Connector.Tekla2023.csproj" />
<Project Path="Converters/Tekla/Speckle.Converter.Tekla2023/Speckle.Converter.Tekla2023.csproj" />
</Folder>
<Folder Name="/Connectors/Tekla/2024/">
<Project Path="Connectors/Tekla/Speckle.Connector.Tekla2024/Speckle.Connector.Tekla2024.csproj" />
<Project Path="Converters/Tekla/Speckle.Converter.Tekla2024/Speckle.Converter.Tekla2024.csproj" />
</Folder>
<Folder Name="/Connectors/Tekla/Shared/">
<Project Path="Connectors/Tekla/Speckle.Connector.TeklaShared/Speckle.Connectors.TeklaShared.shproj" />
<Project Path="Converters/Tekla/Speckle.Converters.TeklaShared/Speckle.Converters.TeklaShared.shproj" />
</Folder>
<Folder Name="/Importers/" />
<Folder Name="/Importers/Ifc/">
<Project Path="Importers/Ifc/Speckle.Importers.Ifc.Tester/Speckle.Importers.Ifc.Tester.csproj" />
<Project Path="Importers/Ifc/Speckle.Importers.Ifc.Tester2/Speckle.Importers.Ifc.Tester2.csproj" />
<Project Path="Importers/Ifc/Speckle.Importers.Ifc/Speckle.Importers.Ifc.csproj" />
</Folder>
<Folder Name="/Sdk/">
<Project Path="DUI3/Speckle.Connectors.DUI.Tests/Speckle.Connectors.DUI.Tests.csproj" />
<Project Path="DUI3/Speckle.Connectors.DUI.WebView/Speckle.Connectors.DUI.WebView.csproj" />
<Project Path="DUI3/Speckle.Connectors.DUI/Speckle.Connectors.DUI.csproj" />
<Project Path="Sdk/Speckle.Common.MeshTriangulation/Speckle.Common.MeshTriangulation.csproj" />
<Project Path="Sdk/Speckle.Connectors.Common.Tests/Speckle.Connectors.Common.Tests.csproj" />
<Project Path="Sdk/Speckle.Connectors.Common/Speckle.Connectors.Common.csproj" />
<Project Path="Sdk/Speckle.Connectors.Logging/Speckle.Connectors.Logging.csproj" />
<Project Path="Sdk/Speckle.Converters.Common.Tests/Speckle.Converters.Common.Tests.csproj" />
<Project Path="Sdk/Speckle.Converters.Common/Speckle.Converters.Common.csproj" />
<Project Path="Sdk/Speckle.Performance/Speckle.Performance.csproj" />
<Project Path="Sdk/Speckle.Testing/Speckle.Testing.csproj" />
</Folder>
</Solution>
+58
View File
@@ -0,0 +1,58 @@
<Solution>
<Configurations>
<BuildType Name="Debug" />
<BuildType Name="Local" />
<BuildType Name="Release" />
</Configurations>
<Folder Name="/Build/">
<Project Path="Build/Build.csproj" />
<File Path=".github/workflows/pr.yml" />
<File Path=".github/workflows/release.yml" />
</Folder>
<Folder Name="/Config/">
<File Path=".csharpierrc.yaml" />
<File Path=".editorconfig" />
<File Path="codecov.yml" />
<File Path="CodeMetricsConfig.txt" />
<File Path="Directory.Build.props" />
<File Path="Directory.Packages.props" />
<File Path=".config/dotnet-tools.json" />
<File Path="global.json" />
<File Path="README.md" />
</Folder>
<Folder Name="/Connectors/" />
<Folder Name="/Connectors/CSi/" />
<Folder Name="/Connectors/CSi/ETABS21/">
<Project Path="Connectors/CSi/Speckle.Connectors.ETABS21/Speckle.Connectors.ETABS21.csproj" />
<Project Path="Converters/CSi/Speckle.Converters.ETABS21/Speckle.Converters.ETABS21.csproj" />
</Folder>
<Folder Name="/Connectors/CSi/ETABS22/">
<Project Path="Connectors/CSi/Speckle.Connectors.ETABS22/Speckle.Connectors.ETABS22.csproj" />
<Project Path="Converters/CSi/Speckle.Converters.ETABS22/Speckle.Converters.ETABS22.csproj" />
</Folder>
<Folder Name="/Connectors/CSi/Shared/">
<Project Path="Connectors/CSi/Speckle.Connectors.CSiShared/Speckle.Connectors.CSiShared.shproj" />
<Project Path="Connectors/CSi/Speckle.Connectors.ETABSShared/Speckle.Connectors.ETABSShared.shproj" />
<Project Path="Converters/CSi/Speckle.Converters.CSiShared/Speckle.Converters.CSiShared.shproj" />
<Project Path="Converters/CSi/Speckle.Converters.ETABSShared/Speckle.Converters.ETABSShared.shproj" />
</Folder>
<Folder Name="/Importers/" />
<Folder Name="/Importers/Ifc/">
<Project Path="Importers/Ifc/Speckle.Importers.Ifc.Tester/Speckle.Importers.Ifc.Tester.csproj" />
<Project Path="Importers/Ifc/Speckle.Importers.Ifc.Tester2/Speckle.Importers.Ifc.Tester2.csproj" />
<Project Path="Importers/Ifc/Speckle.Importers.Ifc/Speckle.Importers.Ifc.csproj" />
</Folder>
<Folder Name="/Sdk/">
<Project Path="DUI3/Speckle.Connectors.DUI.Tests/Speckle.Connectors.DUI.Tests.csproj" />
<Project Path="DUI3/Speckle.Connectors.DUI.WebView/Speckle.Connectors.DUI.WebView.csproj" />
<Project Path="DUI3/Speckle.Connectors.DUI/Speckle.Connectors.DUI.csproj" />
<Project Path="Sdk/Speckle.Common.MeshTriangulation/Speckle.Common.MeshTriangulation.csproj" />
<Project Path="Sdk/Speckle.Connectors.Common.Tests/Speckle.Connectors.Common.Tests.csproj" />
<Project Path="Sdk/Speckle.Connectors.Common/Speckle.Connectors.Common.csproj" />
<Project Path="Sdk/Speckle.Connectors.Logging/Speckle.Connectors.Logging.csproj" />
<Project Path="Sdk/Speckle.Converters.Common.Tests/Speckle.Converters.Common.Tests.csproj" />
<Project Path="Sdk/Speckle.Converters.Common/Speckle.Converters.Common.csproj" />
<Project Path="Sdk/Speckle.Performance/Speckle.Performance.csproj" />
<Project Path="Sdk/Speckle.Testing/Speckle.Testing.csproj" />
</Folder>
</Solution>
+78
View File
@@ -0,0 +1,78 @@
<Solution>
<Configurations>
<BuildType Name="Debug" />
<BuildType Name="Local" />
<BuildType Name="Release" />
</Configurations>
<Folder Name="/Build/">
<Project Path="Build/Build.csproj" />
<File Path=".github/workflows/pr.yml" />
<File Path=".github/workflows/release.yml" />
</Folder>
<Folder Name="/Config/">
<File Path=".csharpierrc.yaml" />
<File Path=".editorconfig" />
<File Path="codecov.yml" />
<File Path="CodeMetricsConfig.txt" />
<File Path="Directory.Build.props" />
<File Path="Directory.Packages.props" />
<File Path=".config/dotnet-tools.json" />
<File Path="global.json" />
<File Path="README.md" />
</Folder>
<Folder Name="/Connectors/" />
<Folder Name="/Connectors/Navisworks/">
<File Path="Connectors/Navisworks/Directory.Build.targets" />
</Folder>
<Folder Name="/Connectors/Navisworks/2020/">
<Project Path="Connectors/Navisworks/Speckle.Connectors.Navisworks2020/Speckle.Connectors.Navisworks2020.csproj" />
<Project Path="Converters/Navisworks/Speckle.Converters.Navisworks2020/Speckle.Converters.Navisworks2020.csproj" />
</Folder>
<Folder Name="/Connectors/Navisworks/2021/">
<Project Path="Connectors/Navisworks/Speckle.Connectors.Navisworks2021/Speckle.Connectors.Navisworks2021.csproj" />
<Project Path="Converters/Navisworks/Speckle.Converters.Navisworks2021/Speckle.Converters.Navisworks2021.csproj" />
</Folder>
<Folder Name="/Connectors/Navisworks/2022/">
<Project Path="Connectors/Navisworks/Speckle.Connectors.Navisworks2022/Speckle.Connectors.Navisworks2022.csproj" />
<Project Path="Converters/Navisworks/Speckle.Converters.Navisworks2022/Speckle.Converters.Navisworks2022.csproj" />
</Folder>
<Folder Name="/Connectors/Navisworks/2023/">
<Project Path="Connectors/Navisworks/Speckle.Connectors.Navisworks2023/Speckle.Connectors.Navisworks2023.csproj" />
<Project Path="Converters/Navisworks/Speckle.Converters.Navisworks2023/Speckle.Converters.Navisworks2023.csproj" />
</Folder>
<Folder Name="/Connectors/Navisworks/2024/">
<Project Path="Connectors/Navisworks/Speckle.Connectors.Navisworks2024/Speckle.Connectors.Navisworks2024.csproj" />
<Project Path="Converters/Navisworks/Speckle.Converters.Navisworks2024/Speckle.Converters.Navisworks2024.csproj" />
</Folder>
<Folder Name="/Connectors/Navisworks/2025/">
<Project Path="Connectors/Navisworks/Speckle.Connectors.Navisworks2025/Speckle.Connectors.Navisworks2025.csproj" />
<Project Path="Converters/Navisworks/Speckle.Converters.Navisworks2025/Speckle.Converters.Navisworks2025.csproj" />
</Folder>
<Folder Name="/Connectors/Navisworks/2026/">
<Project Path="Connectors/Navisworks/Speckle.Connectors.Navisworks2026/Speckle.Connectors.Navisworks2026.csproj" />
<Project Path="Converters/Navisworks/Speckle.Converters.Navisworks2026/Speckle.Converters.Navisworks2026.csproj" />
</Folder>
<Folder Name="/Connectors/Navisworks/Shared/">
<Project Path="Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Speckle.Connectors.NavisworksShared.shproj" />
<Project Path="Converters/Navisworks/Speckle.Converters.NavisworksShared/Speckle.Converters.NavisworksShared.shproj" />
</Folder>
<Folder Name="/Importers/" />
<Folder Name="/Importers/Ifc/">
<Project Path="Importers/Ifc/Speckle.Importers.Ifc.Tester/Speckle.Importers.Ifc.Tester.csproj" />
<Project Path="Importers/Ifc/Speckle.Importers.Ifc.Tester2/Speckle.Importers.Ifc.Tester2.csproj" />
<Project Path="Importers/Ifc/Speckle.Importers.Ifc/Speckle.Importers.Ifc.csproj" />
</Folder>
<Folder Name="/Sdk/">
<Project Path="DUI3/Speckle.Connectors.DUI.Tests/Speckle.Connectors.DUI.Tests.csproj" />
<Project Path="DUI3/Speckle.Connectors.DUI.WebView/Speckle.Connectors.DUI.WebView.csproj" />
<Project Path="DUI3/Speckle.Connectors.DUI/Speckle.Connectors.DUI.csproj" />
<Project Path="Sdk/Speckle.Common.MeshTriangulation/Speckle.Common.MeshTriangulation.csproj" />
<Project Path="Sdk/Speckle.Connectors.Common.Tests/Speckle.Connectors.Common.Tests.csproj" />
<Project Path="Sdk/Speckle.Connectors.Common/Speckle.Connectors.Common.csproj" />
<Project Path="Sdk/Speckle.Connectors.Logging/Speckle.Connectors.Logging.csproj" />
<Project Path="Sdk/Speckle.Converters.Common.Tests/Speckle.Converters.Common.Tests.csproj" />
<Project Path="Sdk/Speckle.Converters.Common/Speckle.Converters.Common.csproj" />
<Project Path="Sdk/Speckle.Performance/Speckle.Performance.csproj" />
<Project Path="Sdk/Speckle.Testing/Speckle.Testing.csproj" />
</Folder>
</Solution>
+72
View File
@@ -0,0 +1,72 @@
<Solution>
<Configurations>
<BuildType Name="Debug" />
<BuildType Name="Local" />
<BuildType Name="Release" />
</Configurations>
<Folder Name="/Build/">
<Project Path="Build/Build.csproj" />
<File Path=".github/workflows/pr.yml" />
<File Path=".github/workflows/release.yml" />
</Folder>
<Folder Name="/Config/">
<File Path=".csharpierrc.yaml" />
<File Path=".editorconfig" />
<File Path="codecov.yml" />
<File Path="CodeMetricsConfig.txt" />
<File Path="Directory.Build.props" />
<File Path="Directory.Packages.props" />
<File Path=".config/dotnet-tools.json" />
<File Path="global.json" />
<File Path="README.md" />
</Folder>
<Folder Name="/Connectors/" />
<Folder Name="/Connectors/Revit/">
<File Path="Connectors/Revit/Directory.Build.targets" />
</Folder>
<Folder Name="/Connectors/Revit/2022/">
<Project Path="Connectors/Revit/Speckle.Connectors.Revit2022/Speckle.Connectors.Revit2022.csproj" />
<Project Path="Converters/Revit/Speckle.Converters.Revit2022/Speckle.Converters.Revit2022.csproj" />
</Folder>
<Folder Name="/Connectors/Revit/2023/">
<Project Path="Connectors/Revit/Speckle.Connectors.Revit2023/Speckle.Connectors.Revit2023.csproj" />
<Project Path="Converters/Revit/Speckle.Converters.Revit2023/Speckle.Converters.Revit2023.csproj" />
</Folder>
<Folder Name="/Connectors/Revit/2024/">
<Project Path="Connectors/Revit/Speckle.Connectors.Revit2024/Speckle.Connectors.Revit2024.csproj" />
<Project Path="Converters/Revit/Speckle.Converters.Revit2024/Speckle.Converters.Revit2024.csproj" />
</Folder>
<Folder Name="/Connectors/Revit/2025/">
<Project Path="Connectors/Revit/Speckle.Connectors.Revit2025/Speckle.Connectors.Revit2025.csproj" />
<Project Path="Converters/Revit/Speckle.Converters.Revit2025/Speckle.Converters.Revit2025.csproj" />
</Folder>
<Folder Name="/Connectors/Revit/2026/">
<Project Path="Connectors/Revit/Speckle.Connectors.Revit2026/Speckle.Connectors.Revit2026.csproj" />
<Project Path="Converters/Revit/Speckle.Converters.Revit2026/Speckle.Converters.Revit2026.csproj" />
</Folder>
<Folder Name="/Connectors/Revit/Shared/">
<Project Path="Connectors/Revit/Speckle.Connectors.RevitShared.Cef/Speckle.Connectors.RevitShared.Cef.shproj" />
<Project Path="Connectors/Revit/Speckle.Connectors.RevitShared/Speckle.Connectors.RevitShared.shproj" />
<Project Path="Converters/Revit/Speckle.Converters.RevitShared.Tests/Speckle.Converters.RevitShared.Tests.shproj" />
<Project Path="Converters/Revit/Speckle.Converters.RevitShared/Speckle.Converters.RevitShared.shproj" />
</Folder>
<Folder Name="/Importers/" />
<Folder Name="/Importers/Ifc/">
<Project Path="Importers/Ifc/Speckle.Importers.Ifc.Tester/Speckle.Importers.Ifc.Tester.csproj" />
<Project Path="Importers/Ifc/Speckle.Importers.Ifc.Tester2/Speckle.Importers.Ifc.Tester2.csproj" />
<Project Path="Importers/Ifc/Speckle.Importers.Ifc/Speckle.Importers.Ifc.csproj" />
</Folder>
<Folder Name="/Sdk/">
<Project Path="DUI3/Speckle.Connectors.DUI.Tests/Speckle.Connectors.DUI.Tests.csproj" />
<Project Path="DUI3/Speckle.Connectors.DUI.WebView/Speckle.Connectors.DUI.WebView.csproj" />
<Project Path="DUI3/Speckle.Connectors.DUI/Speckle.Connectors.DUI.csproj" />
<Project Path="Sdk/Speckle.Common.MeshTriangulation/Speckle.Common.MeshTriangulation.csproj" />
<Project Path="Sdk/Speckle.Connectors.Common.Tests/Speckle.Connectors.Common.Tests.csproj" />
<Project Path="Sdk/Speckle.Connectors.Common/Speckle.Connectors.Common.csproj" />
<Project Path="Sdk/Speckle.Connectors.Logging/Speckle.Connectors.Logging.csproj" />
<Project Path="Sdk/Speckle.Converters.Common.Tests/Speckle.Converters.Common.Tests.csproj" />
<Project Path="Sdk/Speckle.Converters.Common/Speckle.Converters.Common.csproj" />
<Project Path="Sdk/Speckle.Performance/Speckle.Performance.csproj" />
<Project Path="Sdk/Speckle.Testing/Speckle.Testing.csproj" />
</Folder>
</Solution>
+61
View File
@@ -0,0 +1,61 @@
<Solution>
<Configurations>
<BuildType Name="Debug" />
<BuildType Name="Local" />
<BuildType Name="Release" />
</Configurations>
<Folder Name="/Build/">
<Project Path="Build/Build.csproj" />
<File Path=".github/workflows/pr.yml" />
<File Path=".github/workflows/release.yml" />
</Folder>
<Folder Name="/Config/">
<File Path=".csharpierrc.yaml" />
<File Path=".editorconfig" />
<File Path="codecov.yml" />
<File Path="CodeMetricsConfig.txt" />
<File Path="Directory.Build.props" />
<File Path="Directory.Packages.props" />
<File Path=".config/dotnet-tools.json" />
<File Path="global.json" />
<File Path="README.md" />
</Folder>
<Folder Name="/Connectors/" />
<Folder Name="/Connectors/Rhino/">
<File Path="Connectors/Rhino/Directory.Build.targets" />
</Folder>
<Folder Name="/Connectors/Rhino/7/">
<Project Path="Connectors/Rhino/Speckle.Connectors.Grasshopper7/Speckle.Connectors.Grasshopper7.csproj" />
<Project Path="Connectors/Rhino/Speckle.Connectors.Rhino7/Speckle.Connectors.Rhino7.csproj" />
<Project Path="Converters/Rhino/Speckle.Converters.Rhino7/Speckle.Converters.Rhino7.csproj" />
</Folder>
<Folder Name="/Connectors/Rhino/8/">
<Project Path="Connectors/Rhino/Speckle.Connectors.Grasshopper8/Speckle.Connectors.Grasshopper8.csproj" />
<Project Path="Connectors/Rhino/Speckle.Connectors.Rhino8/Speckle.Connectors.Rhino8.csproj" />
<Project Path="Converters/Rhino/Speckle.Converters.Rhino8/Speckle.Converters.Rhino8.csproj" />
</Folder>
<Folder Name="/Connectors/Rhino/Shared/">
<Project Path="Connectors/Rhino/Speckle.Connectors.GrasshopperShared/Speckle.Connectors.GrasshopperShared.shproj" />
<Project Path="Connectors/Rhino/Speckle.Connectors.RhinoShared/Speckle.Connectors.RhinoShared.shproj" />
<Project Path="Converters/Rhino/Speckle.Converters.RhinoShared/Speckle.Converters.RhinoShared.shproj" />
</Folder>
<Folder Name="/Importers/" />
<Folder Name="/Importers/Ifc/">
<Project Path="Importers/Ifc/Speckle.Importers.Ifc.Tester/Speckle.Importers.Ifc.Tester.csproj" />
<Project Path="Importers/Ifc/Speckle.Importers.Ifc.Tester2/Speckle.Importers.Ifc.Tester2.csproj" />
<Project Path="Importers/Ifc/Speckle.Importers.Ifc/Speckle.Importers.Ifc.csproj" />
</Folder>
<Folder Name="/Sdk/">
<Project Path="DUI3/Speckle.Connectors.DUI.Tests/Speckle.Connectors.DUI.Tests.csproj" />
<Project Path="DUI3/Speckle.Connectors.DUI.WebView/Speckle.Connectors.DUI.WebView.csproj" />
<Project Path="DUI3/Speckle.Connectors.DUI/Speckle.Connectors.DUI.csproj" />
<Project Path="Sdk/Speckle.Common.MeshTriangulation/Speckle.Common.MeshTriangulation.csproj" />
<Project Path="Sdk/Speckle.Connectors.Common.Tests/Speckle.Connectors.Common.Tests.csproj" />
<Project Path="Sdk/Speckle.Connectors.Common/Speckle.Connectors.Common.csproj" />
<Project Path="Sdk/Speckle.Connectors.Logging/Speckle.Connectors.Logging.csproj" />
<Project Path="Sdk/Speckle.Converters.Common.Tests/Speckle.Converters.Common.Tests.csproj" />
<Project Path="Sdk/Speckle.Converters.Common/Speckle.Converters.Common.csproj" />
<Project Path="Sdk/Speckle.Performance/Speckle.Performance.csproj" />
<Project Path="Sdk/Speckle.Testing/Speckle.Testing.csproj" />
</Folder>
</Solution>
+58
View File
@@ -0,0 +1,58 @@
<Solution>
<Configurations>
<BuildType Name="Debug" />
<BuildType Name="Local" />
<BuildType Name="Release" />
</Configurations>
<Folder Name="/Build/">
<Project Path="Build/Build.csproj" />
<File Path=".github/workflows/pr.yml" />
<File Path=".github/workflows/release.yml" />
</Folder>
<Folder Name="/Config/">
<File Path=".csharpierrc.yaml" />
<File Path=".editorconfig" />
<File Path="codecov.yml" />
<File Path="CodeMetricsConfig.txt" />
<File Path="Directory.Build.props" />
<File Path="Directory.Packages.props" />
<File Path=".config/dotnet-tools.json" />
<File Path="global.json" />
<File Path="README.md" />
</Folder>
<Folder Name="/Connectors/" />
<Folder Name="/Connectors/Tekla/">
<File Path="Connectors/Tekla/Directory.Build.targets" />
</Folder>
<Folder Name="/Connectors/Tekla/2023/">
<Project Path="Connectors/Tekla/Speckle.Connector.Tekla2023/Speckle.Connector.Tekla2023.csproj" />
<Project Path="Converters/Tekla/Speckle.Converter.Tekla2023/Speckle.Converter.Tekla2023.csproj" />
</Folder>
<Folder Name="/Connectors/Tekla/2024/">
<Project Path="Connectors/Tekla/Speckle.Connector.Tekla2024/Speckle.Connector.Tekla2024.csproj" />
<Project Path="Converters/Tekla/Speckle.Converter.Tekla2024/Speckle.Converter.Tekla2024.csproj" />
</Folder>
<Folder Name="/Connectors/Tekla/Shared/">
<Project Path="Connectors/Tekla/Speckle.Connector.TeklaShared/Speckle.Connectors.TeklaShared.shproj" />
<Project Path="Converters/Tekla/Speckle.Converters.TeklaShared/Speckle.Converters.TeklaShared.shproj" />
</Folder>
<Folder Name="/Importers/" />
<Folder Name="/Importers/Ifc/">
<Project Path="Importers/Ifc/Speckle.Importers.Ifc.Tester/Speckle.Importers.Ifc.Tester.csproj" />
<Project Path="Importers/Ifc/Speckle.Importers.Ifc.Tester2/Speckle.Importers.Ifc.Tester2.csproj" />
<Project Path="Importers/Ifc/Speckle.Importers.Ifc/Speckle.Importers.Ifc.csproj" />
</Folder>
<Folder Name="/Sdk/">
<Project Path="DUI3/Speckle.Connectors.DUI.Tests/Speckle.Connectors.DUI.Tests.csproj" />
<Project Path="DUI3/Speckle.Connectors.DUI.WebView/Speckle.Connectors.DUI.WebView.csproj" />
<Project Path="DUI3/Speckle.Connectors.DUI/Speckle.Connectors.DUI.csproj" />
<Project Path="Sdk/Speckle.Common.MeshTriangulation/Speckle.Common.MeshTriangulation.csproj" />
<Project Path="Sdk/Speckle.Connectors.Common.Tests/Speckle.Connectors.Common.Tests.csproj" />
<Project Path="Sdk/Speckle.Connectors.Common/Speckle.Connectors.Common.csproj" />
<Project Path="Sdk/Speckle.Connectors.Logging/Speckle.Connectors.Logging.csproj" />
<Project Path="Sdk/Speckle.Converters.Common.Tests/Speckle.Converters.Common.Tests.csproj" />
<Project Path="Sdk/Speckle.Converters.Common/Speckle.Converters.Common.csproj" />
<Project Path="Sdk/Speckle.Performance/Speckle.Performance.csproj" />
<Project Path="Sdk/Speckle.Testing/Speckle.Testing.csproj" />
</Folder>
</Solution>