Files
speckle-sharp-connectors/Connectors/Revit/Speckle.Connectors.RevitShared/DependencyInjection/RevitConnectorModule.cs
T
Dimitrie Stefanescu 4e48427bee Revit receive first pass: reference geometry workflow (CNX-403) (#254)
* feat(dui3): re-enables receive binding

probably the fourth time

* chore(revit): drastic cleanup

maybe too drastic, we will see soon

* feat(revit): starts scaffolding revit root to host converter

* RenderMaterialToHostConverter added back

* casting to GeometryObject instead of GeometryElement

* feat(dui3): fallback display values and refactors out material converter

* feat(dui3): creates DS and adds point support

* feat(dui3): closed nurbs fallback to display values

* David/cnx 443 selection (#231)

* highlight works

* use status.success on receive success

* question comment

* wip

* feat(revit): wraps receive in correct context

* wip

* feat(dui3): adds prototype grouping by collection

and adds todos

* remove invalid characters from group name

* hide warnings preprocessor

* exception handling and error log

* added cancellation and progress reporting

* chore: comments and minor cleanup

* David/cnx 409 2 add rendermaterial and color manager to connector (#242)

* materials wip

* Make it work receiving render materials

* MaterialBaker mods, cleanup

* Address the PR comments

* Remove invalid chars from structured material names

---------

Co-authored-by: oguzhankoral <oguzhankoral@gmail.com>

* Minor cleanup

* Add object application id into objects of its layer render material proxy

* feat(dui3): adds compatibility for objects with display values

* Use LocalToGlobal logic for revit receive

* Use common local to global util for arcgis too

* Remove unnecessary registration

* Remove using

* Remove unnecessart ToList

* Register LocalToGlobalConverterUtils for connectors not as common

* purge materials and groups in Revit before update (#245)

* purge materials and groups in Revit before update

* cleaner linq

* renamed _groupManager to _groupBaker

* assign categories to DirectShapes after receive, updated revit invalid chars (#253)

* Post conflict resolving problems

* minor changes, logging, comments (#257)

* minor changes, logging, comments

* typo

---------

Co-authored-by: David Kekesi <david@speckle.systems>
Co-authored-by: kekesidavid <david.kekesi@gmail.com>
Co-authored-by: oguzhankoral <oguzhankoral@gmail.com>
2024-09-19 14:09:17 +03:00

108 lines
4.1 KiB
C#

using Autodesk.Revit.DB;
using Autofac;
using CefSharp;
using Speckle.Autofac;
using Speckle.Autofac.DependencyInjection;
using Speckle.Connectors.DUI;
using Speckle.Connectors.DUI.Bindings;
using Speckle.Connectors.DUI.Bridge;
using Speckle.Connectors.DUI.Models;
using Speckle.Connectors.Revit.Bindings;
using Speckle.Connectors.Revit.HostApp;
using Speckle.Connectors.Revit.Operations.Receive;
using Speckle.Connectors.Revit.Operations.Send;
using Speckle.Connectors.Revit.Operations.Send.Settings;
using Speckle.Connectors.Revit.Plugin;
using Speckle.Connectors.Utils;
using Speckle.Connectors.Utils.Builders;
using Speckle.Connectors.Utils.Caching;
using Speckle.Connectors.Utils.Operations;
using Speckle.Converters.Common;
using Speckle.Sdk.Models.GraphTraversal;
namespace Speckle.Connectors.Revit.DependencyInjection;
// POC: should interface out things that are not
public class RevitConnectorModule : ISpeckleModule
{
public void Load(SpeckleContainerBuilder builder)
{
builder.AddAutofac();
builder.AddConnectorUtils();
builder.AddDUI();
RegisterUiDependencies(builder);
// register
builder.AddSingleton<DocumentModelStore, RevitDocumentStore>();
// Storage Schema
builder.AddScoped<DocumentModelStorageSchema>();
builder.AddScoped<IdStorageSchema>();
// POC: we need to review the scopes and create a document on what the policy is
// and where the UoW should be
// register UI bindings
builder.AddSingleton<IBinding, TestBinding>();
builder.AddSingleton<IBinding, ConfigBinding>("connectorName", "Revit"); // POC: Easier like this for now, should be cleaned up later
builder.AddSingleton<IBinding, AccountBinding>();
builder.AddSingleton<IBinding, SelectionBinding>();
builder.AddSingleton<IBinding, RevitSendBinding>();
builder.AddSingleton<IBinding, RevitReceiveBinding>();
builder.AddSingleton<IRevitIdleManager, RevitIdleManager>();
builder.ContainerBuilder.RegisterType<TopLevelExceptionHandlerBinding>().As<IBinding>().AsSelf().SingleInstance();
builder.AddSingleton<ITopLevelExceptionHandler>(c =>
c.Resolve<TopLevelExceptionHandlerBinding>().Parent.TopLevelExceptionHandler
);
builder
.ContainerBuilder.RegisterType<BasicConnectorBindingRevit>()
.As<IBinding>()
.As<IBasicConnectorBinding>()
.SingleInstance();
// send operation and dependencies
builder.AddScoped<SendOperation<ElementId>>();
builder.AddScoped<ElementUnpacker>();
builder.AddScoped<SendCollectionManager>();
builder.AddScoped<IRootObjectBuilder<ElementId>, RevitRootObjectBuilder>();
builder.AddSingleton<ISendConversionCache, SendConversionCache>();
builder.AddSingleton<ToSpeckleSettingsManager>();
// receive operation and dependencies
builder.AddScoped<IHostObjectBuilder, RevitHostObjectBuilder>();
builder.AddScoped<ITransactionManager, TransactionManager>();
builder.AddScoped<RevitGroupBaker>();
builder.AddScoped<RevitMaterialBaker>();
builder.AddSingleton<RevitUtils>();
builder.AddSingleton<IFailuresPreprocessor, HideWarningsFailuresPreprocessor>();
builder.AddSingleton(DefaultTraversal.CreateTraversalFunc());
builder.AddScoped<LocalToGlobalConverterUtils>();
// operation progress manager
builder.AddSingleton<IOperationProgressManager, OperationProgressManager>();
}
public void RegisterUiDependencies(SpeckleContainerBuilder builder)
{
#if REVIT2022
//different versons for different versions of CEF
builder.AddSingleton(new BindingOptions() { CamelCaseJavascriptNames = false });
builder.AddSingleton<CefSharpPanel>();
builder.AddSingleton<IBrowserScriptExecutor>(c => c.Resolve<CefSharpPanel>());
builder.AddSingleton<IRevitPlugin, RevitCefPlugin>();
#else
// different versions for different versions of CEF
builder.AddSingleton(BindingOptions.DefaultBinder);
var panel = new CefSharpPanel();
panel.Browser.JavascriptObjectRepository.NameConverter = null;
builder.AddSingleton(panel);
builder.AddSingleton<IBrowserScriptExecutor>(c => c.Resolve<CefSharpPanel>());
builder.AddSingleton<IRevitPlugin, RevitCefPlugin>();
#endif
}
}