add import default

This commit is contained in:
Adam Hathcock
2024-11-20 08:31:54 +00:00
parent 87dcbecef9
commit 0a378bffb9
5 changed files with 74 additions and 55 deletions
+3 -3
View File
@@ -7,9 +7,9 @@
<PackageVersion Include="Glob" Version="1.1.9" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="8.0.1" />
<PackageVersion Include="SimpleExec" Version="12.0.0" />
<PackageVersion Include="Speckle.Objects" Version="3.1.0-dev.182" />
<PackageVersion Include="Speckle.Sdk" Version="3.1.0-dev.182" />
<PackageVersion Include="Speckle.Sdk.Dependencies" Version="3.1.0-dev.182" />
<PackageVersion Include="Speckle.Objects" Version="3.1.0-dev.186" />
<PackageVersion Include="Speckle.Sdk" Version="3.1.0-dev.186" />
<PackageVersion Include="Speckle.Sdk.Dependencies" Version="3.1.0-dev.186" />
<PackageVersion Include="Speckle.WebIfc" Version="0.0.64-speckle1" />
<PackageVersion Include="System.CommandLine" Version="2.0.0-beta4.22272.1" />
<GlobalPackageReference Include="Microsoft.SourceLink.GitHub" Version="8.0.0" />
+59 -9
View File
@@ -1,39 +1,89 @@
using System.Diagnostics;
using System.Reflection;
using Ara3D.IfcParser;
using Ara3D.Utils;
using Microsoft.Extensions.DependencyInjection;
using Speckle.Objects.Geometry;
using Speckle.Sdk;
using Speckle.Sdk.Api;
using Speckle.Sdk.Api.GraphQL.Inputs;
using Speckle.Sdk.Api.GraphQL.Models;
using Speckle.Sdk.Common;
using Speckle.Sdk.Credentials;
using Speckle.Sdk.Host;
using Speckle.Sdk.Models;
using Speckle.Sdk.Serialisation.V2;
using Speckle.Sdk.Serialisation.V2.Send;
using Speckle.Sdk.Transports;
using Speckle.WebIfc.Importer.Converters;
using Speckle.WebIfc.Importer.Ifc;
namespace Speckle.WebIfc.Importer;
public static class Import
{
private static readonly Uri BaseUri = new Uri("https://api.github.com/");
public static async Task Ifc(string url, string filePath, string streamId,
string modelId, string commitMessage, string token, IProgress<ProgressArgs>? progress = null)
{
var serviceProvider = GetServiceProvider();
await Ifc(serviceProvider, url, filePath, streamId, modelId, commitMessage, token, progress);
}
public static async Task Ifc(string filePath, string userId, string streamId, string branchName, string commitMessage, string token)
public static ServiceProvider GetServiceProvider()
{
TypeLoader.Initialize(typeof(Base).Assembly, typeof(Point).Assembly);
var serviceCollection = new ServiceCollection();
serviceCollection.AddSpeckleSdk(HostApplications.Other, HostAppVersion.v2024, "IFC-Importer");
serviceCollection.AddSpeckleWebIfc();
serviceCollection.AddMatchingInterfacesAsTransient(Assembly.GetExecutingAssembly());
return serviceCollection.BuildServiceProvider();
}
var serviceProvider = serviceCollection.BuildServiceProvider();
var operations = serviceProvider.GetRequiredService<IOperations>();
public static async Task Ifc(IServiceProvider serviceProvider, string url, string filePath, string streamId,
string modelId, string commitMessage, string token, IProgress<ProgressArgs>? progress = null)
var factory = serviceProvider.GetRequiredService<IIfcFactory>();
Console.WriteLine(factory.Version);
{
var ifcFactory = serviceProvider.GetRequiredService<IIfcFactory>();
var clientFactory = serviceProvider.GetRequiredService<IClientFactory>();
var baseUri = new Uri(url);
Console.WriteLine(ifcFactory.Version);
var stopwatch = Stopwatch.StartNew();
var model = factory.Open(filePath);
var model = ifcFactory.Open(filePath);
var ms = stopwatch.ElapsedMilliseconds;
Console.WriteLine($"Opened with WebIFC: {ms} ms");
var graph = IfcGraph.Load(new FilePath(filePath));
var ms2 = stopwatch.ElapsedMilliseconds;
Console.WriteLine($"Loaded with StepParser: {ms2 - ms} ms");
var converter = serviceProvider.GetRequiredService<IGraphConverter>();
var b = converter.Convert(model, graph);
var (rootId, _) = await operations.Send2(BaseUri, streamId, token, b);
ms = ms2;
ms2 = stopwatch.ElapsedMilliseconds;
Console.WriteLine($"Converted to Speckle Bases: {ms2 - ms} ms");
var serializeProcessFactory = serviceProvider.GetRequiredService<ISerializeProcessFactory>();
var process = serializeProcessFactory.CreateSerializeProcess(baseUri, streamId, token, progress);
var (rootId, _) = await process.Serialize(b, default, new SerializeProcessOptions(true, true, false))
.ConfigureAwait(false);
Account account = new() { token = token, serverInfo = new ServerInfo { url = baseUri.ToString(), } };
ms = ms2;
ms2 = stopwatch.ElapsedMilliseconds;
Console.WriteLine($"Uploaded to Speckle: {ms2 - ms} ms");
// 8 - Create the version (commit)
using var apiClient = clientFactory.Create(account);
_ = await apiClient
.Version.Create(
new CreateVersionInput(
rootId,
modelId,
streamId,
message: commitMessage
)
);
ms = ms2;
ms2 = stopwatch.ElapsedMilliseconds;
Console.WriteLine($"Committed to Speckle: {ms2 - ms} ms");
}
}
-30
View File
@@ -1,30 +0,0 @@
using System.CommandLine;
using Speckle.WebIfc.Importer;
var filePathArgument = new Argument<string>
(name: "filePath");
var userIdArgument = new Argument<string>
("userId");
var streamIdArgument = new Argument<string>
("streamId");
var branchNameArgument = new Argument<string>
("branchName");
var commitMessageArgument = new Argument<string>
("commitMessage");
var tokenArgument = new Argument<string>
("token");
var rootCommand = new RootCommand
{
filePathArgument,
userIdArgument,
streamIdArgument,
branchNameArgument,
commitMessageArgument,
tokenArgument
};
rootCommand.SetHandler(async (filePath, userId, streamId, branchName, commitMessage, token) =>
{
await Import.Ifc(filePath, userId, streamId, branchName, commitMessage, token);
}, filePathArgument, userIdArgument, streamIdArgument, branchNameArgument, commitMessageArgument, tokenArgument);
await rootCommand.InvokeAsync(args);
@@ -1,7 +1,6 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>
+12 -12
View File
@@ -53,18 +53,18 @@
},
"Speckle.Objects": {
"type": "Direct",
"requested": "[3.1.0-dev.182, )",
"resolved": "3.1.0-dev.182",
"contentHash": "4jjZ4vBEjvINkY33lpGhg9hc27LY0PNOEzB4n5EXyuTo1YlSO2KHMsLWHtR44cO64vDtFxhICkNaSoup+S8hvA==",
"requested": "[3.1.0-dev.186, )",
"resolved": "3.1.0-dev.186",
"contentHash": "NuKYQLfG32v+NsjlAamECyBfLAD19LWjuWHnH/ZqCDVxebXsCDh19Y//W/8rQPKuM7ojbO1nSjxZiRwhITQP8A==",
"dependencies": {
"Speckle.Sdk": "3.1.0-dev.182"
"Speckle.Sdk": "3.1.0-dev.186"
}
},
"Speckle.Sdk": {
"type": "Direct",
"requested": "[3.1.0-dev.182, )",
"resolved": "3.1.0-dev.182",
"contentHash": "zSx4WGweeDUYLfIEWMiYautd2AYHx0nMRFEu7s9E5bNNY3oXIaGGez3LJaHMP14walrGq22d2WhDfjJKdw+4ug==",
"requested": "[3.1.0-dev.186, )",
"resolved": "3.1.0-dev.186",
"contentHash": "9+s6TiJ59hw5G7hPHE7WmF6D/3zoXCCgJFaYEsfXxQi2SBEkCthuJq7MfkSoukvEM0N/OwEoSuCwS+G5vbE3/Q==",
"dependencies": {
"GraphQL.Client": "6.0.0",
"Microsoft.CSharp": "4.7.0",
@@ -73,14 +73,14 @@
"Microsoft.Extensions.Logging": "2.2.0",
"Speckle.DoubleNumerics": "4.0.1",
"Speckle.Newtonsoft.Json": "13.0.2",
"Speckle.Sdk.Dependencies": "3.1.0-dev.182"
"Speckle.Sdk.Dependencies": "3.1.0-dev.186"
}
},
"Speckle.WebIfc": {
"type": "Direct",
"requested": "[0.0.64-speckle1, )",
"resolved": "0.0.64-speckle1",
"contentHash": "dJQ4mPgiNAVjdyZNvejmnv0UTqNHw/7BCEbYUumKklLyzXtVAARGXRsDDbNNwJv3Y/L/6kVgwUehU9BbpAKURA=="
"contentHash": "oJgPu/LCypQLelDrtV6+dk0Qm+3VSEYWXCjeXHs2/ekOZEKwpFKhcKVOd1uMjtVLh+n3CZ/6tMgO1nZq9FpwMw=="
},
"System.CommandLine": {
"type": "Direct",
@@ -277,9 +277,9 @@
},
"Speckle.Sdk.Dependencies": {
"type": "CentralTransitive",
"requested": "[3.1.0-dev.182, )",
"resolved": "3.1.0-dev.182",
"contentHash": "65aBMrKZTa4MXLFZS4xIsqXsTjJRAXDpUNEKcV73c+VAxQZXTuwpMdv6KTbOAFxRA3DrSf2rCx1ZHHNK7aLRzA=="
"requested": "[3.1.0-dev.186, )",
"resolved": "3.1.0-dev.186",
"contentHash": "fGD7PtPYuyNe7hPOuEFvEi4qy5gpLZHqeNjQ8ZhRF6nodUjJTUDNHq/VQiJ4GW5u7d+mnnwCBx+9GwlRSJW3Cg=="
}
}
}