feat(Revit 2026) Add projects and fixes for Revit 2026 usage (#736)
* add base revit 26 projects * fix up cef replacement * fix up revit 2026 events * add revit events * fixes for revit 26 * use right version of DI for Revit26 * add Revit26 to local * fmt * use visual studio to fix slns * Add revit to installer constants * move webview stuff to 2026 specific area to avoid build issues * update locks * Revit 2026 wants to invoke scripts with RevitTask. Abstract RevitTask * fmt * fix project copying * use 3.2 SDK * fix build * Revit 2025 is now CEF vulnerable * add SendProgress to not overload revit context * update Revit 26 lock files * update locks --------- Co-authored-by: Oğuzhan Koral <45078678+oguzhankoral@users.noreply.github.com>
This commit is contained in:
+2
-1
@@ -20,7 +20,8 @@ public static class Consts
|
||||
new("Connectors/Revit/Speckle.Connectors.Revit2022", "net48"),
|
||||
new("Connectors/Revit/Speckle.Connectors.Revit2023", "net48"),
|
||||
new("Connectors/Revit/Speckle.Connectors.Revit2024", "net48"),
|
||||
new("Connectors/Revit/Speckle.Connectors.Revit2025", "net8.0-windows")
|
||||
new("Connectors/Revit/Speckle.Connectors.Revit2025", "net8.0-windows"),
|
||||
new("Connectors/Revit/Speckle.Connectors.Revit2026", "net8.0-windows")
|
||||
]
|
||||
),
|
||||
new(
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
<UserControl x:Class="Speckle.Connectors.Revit2026.Plugin.RevitControlWebView"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||
xmlns:wv2="clr-namespace:Microsoft.Web.WebView2.Wpf;assembly=Microsoft.Web.WebView2.Wpf"
|
||||
xmlns:dui="clr-namespace:Speckle.Connectors.DUI;assembly=Speckle.Connectors.DUI"
|
||||
mc:Ignorable="d"
|
||||
d:DesignHeight="450" d:DesignWidth="800">
|
||||
<UserControl.Resources>
|
||||
<wv2:CoreWebView2CreationProperties x:Key="EvergreenWebView2CreationProperties" UserDataFolder="C:\temp" />
|
||||
</UserControl.Resources>
|
||||
<DockPanel>
|
||||
<wv2:WebView2
|
||||
CreationProperties="{StaticResource EvergreenWebView2CreationProperties}"
|
||||
HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
|
||||
Name="Browser" Grid.Row="0" Source="{x:Static dui:Url.Netlify}" />
|
||||
</DockPanel>
|
||||
</UserControl>
|
||||
@@ -0,0 +1,84 @@
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Threading;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Web.WebView2.Core;
|
||||
using Speckle.Connectors.DUI.Bindings;
|
||||
using Speckle.Connectors.DUI.Bridge;
|
||||
using Speckle.Connectors.Revit.Plugin;
|
||||
|
||||
namespace Speckle.Connectors.Revit2026.Plugin;
|
||||
|
||||
public sealed partial class RevitControlWebView : UserControl, IBrowserScriptExecutor, IDisposable
|
||||
{
|
||||
private readonly IServiceProvider _serviceProvider;
|
||||
private readonly IRevitTask _revitTask;
|
||||
|
||||
public RevitControlWebView(IServiceProvider serviceProvider, IRevitTask revitTask)
|
||||
{
|
||||
_serviceProvider = serviceProvider;
|
||||
_revitTask = revitTask;
|
||||
InitializeComponent();
|
||||
|
||||
Browser.CoreWebView2InitializationCompleted += (sender, args) =>
|
||||
_serviceProvider
|
||||
.GetRequiredService<ITopLevelExceptionHandler>()
|
||||
.CatchUnhandled(() => OnInitialized(sender, args));
|
||||
}
|
||||
|
||||
public bool IsBrowserInitialized => Browser.IsInitialized;
|
||||
|
||||
public object BrowserElement => Browser;
|
||||
|
||||
public void ExecuteScript(string script)
|
||||
{
|
||||
if (!Browser.IsInitialized)
|
||||
{
|
||||
throw new InvalidOperationException("Failed to execute script, Webview2 is not initialized yet.");
|
||||
}
|
||||
_revitTask.Run(() => Browser.ExecuteScriptAsync(script));
|
||||
}
|
||||
|
||||
public void SendProgress(string script)
|
||||
{
|
||||
if (!Browser.IsInitialized)
|
||||
{
|
||||
throw new InvalidOperationException("Failed to execute script, Webview2 is not initialized yet.");
|
||||
}
|
||||
//always invoke even on the main thread because it's better somehow
|
||||
Browser.Dispatcher.Invoke(
|
||||
//fire and forget
|
||||
() => Browser.ExecuteScriptAsync(script),
|
||||
DispatcherPriority.Background
|
||||
);
|
||||
}
|
||||
|
||||
private void OnInitialized(object? sender, CoreWebView2InitializationCompletedEventArgs e)
|
||||
{
|
||||
Console.WriteLine(CoreWebView2Environment.GetAvailableBrowserVersionString());
|
||||
if (!e.IsSuccess)
|
||||
{
|
||||
throw new InvalidOperationException("Webview Failed to initialize", e.InitializationException);
|
||||
}
|
||||
|
||||
// We use Lazy here to delay creating the binding until after the Browser is fully initialized.
|
||||
// Otherwise the Browser cannot respond to any requests to ExecuteScriptAsyncMethod
|
||||
foreach (var binding in _serviceProvider.GetRequiredService<IEnumerable<IBinding>>())
|
||||
{
|
||||
SetupBinding(binding);
|
||||
}
|
||||
}
|
||||
|
||||
/// <remark>
|
||||
/// This must be called on the Main thread
|
||||
/// </remark>
|
||||
private void SetupBinding(IBinding binding)
|
||||
{
|
||||
binding.Parent.AssociateWithBinding(binding);
|
||||
Browser.CoreWebView2.AddHostObjectToScript(binding.Name, binding.Parent);
|
||||
}
|
||||
|
||||
public void ShowDevTools() => Browser.CoreWebView2.OpenDevToolsWindow();
|
||||
|
||||
//https://github.com/MicrosoftEdge/WebView2Feedback/issues/2161
|
||||
public void Dispose() => Browser.Dispatcher.Invoke(() => Browser.Dispose(), DispatcherPriority.Send);
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
using System.Windows.Controls;
|
||||
using Autodesk.Revit.UI;
|
||||
|
||||
namespace Speckle.Connectors.Revit2026.Plugin;
|
||||
|
||||
public sealed class RevitControlWebViewDockable : UserControl, Autodesk.Revit.UI.IDockablePaneProvider
|
||||
{
|
||||
public RevitControlWebViewDockable(RevitControlWebView dUI3ControlWebView)
|
||||
{
|
||||
Content = dUI3ControlWebView;
|
||||
}
|
||||
|
||||
public void SetupDockablePane(DockablePaneProviderData data)
|
||||
{
|
||||
data.FrameworkElement = this;
|
||||
data.InitialState = new Autodesk.Revit.UI.DockablePaneState
|
||||
{
|
||||
DockPosition = DockPosition.Tabbed,
|
||||
TabBehind = DockablePanes.BuiltInDockablePanes.ProjectBrowser
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,114 @@
|
||||
using System.IO;
|
||||
using System.Reflection;
|
||||
using System.Windows.Media;
|
||||
using System.Windows.Media.Imaging;
|
||||
using Autodesk.Revit.UI;
|
||||
using Speckle.Connectors.Common;
|
||||
using Speckle.Connectors.Revit.Plugin;
|
||||
using Speckle.Converters.RevitShared.Helpers;
|
||||
using Speckle.Sdk;
|
||||
|
||||
namespace Speckle.Connectors.Revit2026.Plugin;
|
||||
|
||||
internal sealed class RevitWebViewPlugin(
|
||||
UIControlledApplication uIControlledApplication,
|
||||
RevitContext revitContext,
|
||||
RevitControlWebViewDockable webViewPanel,
|
||||
ISpeckleApplication speckleApplication
|
||||
) : IRevitPlugin
|
||||
{
|
||||
public void Initialise()
|
||||
{
|
||||
// Create and register panels before app initialized. this is needed for double-click file open
|
||||
CreateTabAndRibbonPanel(uIControlledApplication);
|
||||
RegisterDockablePane();
|
||||
uIControlledApplication.ControlledApplication.ApplicationInitialized += OnApplicationInitialized;
|
||||
}
|
||||
|
||||
public void Shutdown()
|
||||
{
|
||||
// POC: should we be cleaning up the RibbonPanel etc...
|
||||
// Should we be indicating to any active in-flight functions that we are being closed?
|
||||
}
|
||||
|
||||
// POC: Could be injected but maybe not worthwhile
|
||||
private void CreateTabAndRibbonPanel(UIControlledApplication application)
|
||||
{
|
||||
// POC: some top-level handling and feedback here
|
||||
try
|
||||
{
|
||||
application.CreateRibbonTab(Connector.TabName);
|
||||
}
|
||||
catch (ArgumentException)
|
||||
{
|
||||
// exception occurs when the speckle tab has already been created.
|
||||
// this happens when both the dui2 and the dui3 connectors are installed. Can be safely ignored.
|
||||
}
|
||||
|
||||
RibbonPanel specklePanel = application.CreateRibbonPanel(Connector.TabName, Connector.TabTitle);
|
||||
var dui3Button = (PushButton)
|
||||
specklePanel.AddItem(
|
||||
new PushButtonData(
|
||||
"Speckle (Beta) for Revit",
|
||||
Connector.TabTitle,
|
||||
typeof(RevitExternalApplication).Assembly.Location,
|
||||
typeof(SpeckleRevitCommand).FullName
|
||||
)
|
||||
);
|
||||
|
||||
string path = typeof(RevitWebViewPlugin).Assembly.Location;
|
||||
dui3Button.Image = LoadPngImgSource(
|
||||
$"Speckle.Connectors.Revit{speckleApplication.HostApplicationVersion}.Assets.logo16.png",
|
||||
path
|
||||
);
|
||||
dui3Button.LargeImage = LoadPngImgSource(
|
||||
$"Speckle.Connectors.Revit{speckleApplication.HostApplicationVersion}.Assets.logo32.png",
|
||||
path
|
||||
);
|
||||
dui3Button.ToolTipImage = LoadPngImgSource(
|
||||
$"Speckle.Connectors.Revit{speckleApplication.HostApplicationVersion}.Assets.logo32.png",
|
||||
path
|
||||
);
|
||||
dui3Button.ToolTip = "Speckle (Beta) for Revit";
|
||||
//dui3Button.AvailabilityClassName = typeof(CmdAvailabilityViews).FullName;
|
||||
dui3Button.SetContextualHelp(new ContextualHelp(ContextualHelpType.Url, "https://speckle.systems"));
|
||||
}
|
||||
|
||||
private void OnApplicationInitialized(object? sender, Autodesk.Revit.DB.Events.ApplicationInitializedEventArgs e)
|
||||
{
|
||||
var uiApplication = new UIApplication(sender as Autodesk.Revit.ApplicationServices.Application);
|
||||
revitContext.UIApplication = uiApplication;
|
||||
|
||||
// POC: might be worth to interface this out, we shall see...
|
||||
global::Revit.Async.RevitTask.Initialize(uiApplication);
|
||||
}
|
||||
|
||||
private void RegisterDockablePane()
|
||||
{
|
||||
// Registering dockable pane should happen before UiApplication is initialized with RevitTask.
|
||||
// Otherwise pane cannot be registered for double-click file open.
|
||||
uIControlledApplication.RegisterDockablePane(
|
||||
RevitExternalApplication.DockablePanelId,
|
||||
Connector.TabTitle,
|
||||
webViewPanel
|
||||
);
|
||||
}
|
||||
|
||||
private ImageSource? LoadPngImgSource(string sourceName, string path)
|
||||
{
|
||||
try
|
||||
{
|
||||
var assembly = Assembly.LoadFrom(Path.Combine(path));
|
||||
var icon = assembly.GetManifestResourceStream(sourceName);
|
||||
PngBitmapDecoder decoder = new(icon, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);
|
||||
ImageSource source = decoder.Frames[0];
|
||||
return source;
|
||||
}
|
||||
catch (Exception ex) when (!ex.IsFatal())
|
||||
{
|
||||
// POC: logging
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RevitAddIns>
|
||||
<AddIn Type="Application">
|
||||
<Name>Speckle (Beta) for Revit</Name>
|
||||
<Description>Speckle (Beta) for Revit</Description>
|
||||
<Assembly>Speckle.Connectors.Revit2026\Speckle.Connectors.Revit2026.dll</Assembly>
|
||||
<FullClassName>Speckle.Connectors.Revit.Plugin.RevitExternalApplication</FullClassName>
|
||||
<ClientId>27ccff2c-011c-4374-bb79-b93990d0c86a</ClientId>
|
||||
<VendorId>speckle</VendorId>
|
||||
<VendorDescription>Speckle: Empowering your design and construction data. For any problems, visit our community forum https://speckle.community</VendorDescription>
|
||||
</AddIn>
|
||||
</RevitAddIns>
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"profiles": {
|
||||
"ConnectorRevit2026": {
|
||||
"commandName": "Executable",
|
||||
"executablePath": "C:\\Program Files\\Autodesk\\Revit 2026\\Revit.exe",
|
||||
"runtime": "net8.0-windows"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net8.0-windows</TargetFramework>
|
||||
<PlatformTarget>x64</PlatformTarget>
|
||||
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
|
||||
<UseWpf>true</UseWpf>
|
||||
<RevitVersion>2026</RevitVersion>
|
||||
<DefineConstants>$(DefineConstants);REVIT2026;REVIT2022_OR_GREATER;REVIT2023_OR_GREATER;REVIT2024_OR_GREATER;REVIT2025_OR_GREATER;REVIT2026_OR_GREATER</DefineConstants><CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
|
||||
<AppendRuntimeIdentifierToOutputPath>false</AppendRuntimeIdentifierToOutputPath>
|
||||
<Configurations>Debug;Release;Local</Configurations>
|
||||
</PropertyGroup>
|
||||
|
||||
<Import Project="..\Speckle.Connectors.RevitShared\Speckle.Connectors.RevitShared.projitems" Label="Shared" />
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\..\Converters\Revit\Speckle.Converters.Revit2026\Speckle.Converters.Revit2026.csproj" />
|
||||
<ProjectReference Include="..\..\..\DUI3\Speckle.Connectors.DUI\Speckle.Connectors.DUI.csproj" />
|
||||
<ProjectReference Include="..\..\..\Sdk\Speckle.Connectors.Common\Speckle.Connectors.Common.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Revit.Async" />
|
||||
<PackageReference Include="Microsoft.Web.WebView2" IncludeAssets="compile" />
|
||||
<PackageReference Include="Microsoft.Extensions.DependencyInjection" VersionOverride="8.0.0" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Content Include="Plugin\Speckle.Connectors.Revit2026.addin">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</Content>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
@@ -0,0 +1,338 @@
|
||||
{
|
||||
"version": 2,
|
||||
"dependencies": {
|
||||
"net8.0-windows7.0": {
|
||||
"Microsoft.Extensions.DependencyInjection": {
|
||||
"type": "Direct",
|
||||
"requested": "[8.0.0, )",
|
||||
"resolved": "8.0.0",
|
||||
"contentHash": "V8S3bsm50ig6JSyrbcJJ8bW2b9QLGouz+G1miK3UTaOWmMtFwNNNzUf4AleyDWUmTrWMLNnFSLEQtxmxgNQnNQ==",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
|
||||
}
|
||||
},
|
||||
"Microsoft.NETFramework.ReferenceAssemblies": {
|
||||
"type": "Direct",
|
||||
"requested": "[1.0.3, )",
|
||||
"resolved": "1.0.3",
|
||||
"contentHash": "vUc9Npcs14QsyOD01tnv/m8sQUnGTGOw1BCmKcv77LBJY7OxhJ+zJF7UD/sCL3lYNFuqmQEVlkfS4Quif6FyYg==",
|
||||
"dependencies": {
|
||||
"Microsoft.NETFramework.ReferenceAssemblies.net461": "1.0.3"
|
||||
}
|
||||
},
|
||||
"Microsoft.SourceLink.GitHub": {
|
||||
"type": "Direct",
|
||||
"requested": "[8.0.0, )",
|
||||
"resolved": "8.0.0",
|
||||
"contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==",
|
||||
"dependencies": {
|
||||
"Microsoft.Build.Tasks.Git": "8.0.0",
|
||||
"Microsoft.SourceLink.Common": "8.0.0"
|
||||
}
|
||||
},
|
||||
"Microsoft.Web.WebView2": {
|
||||
"type": "Direct",
|
||||
"requested": "[1.0.1938.49, )",
|
||||
"resolved": "1.0.1938.49",
|
||||
"contentHash": "z8KnFnaTYzhA/ZnyRX0qGfS1NU5ZBJeClAH64F0fVDvdDJTvME7xl6zTJ0Jlfe1BtL3C0NH9xTy64shg2baKdw=="
|
||||
},
|
||||
"PolySharp": {
|
||||
"type": "Direct",
|
||||
"requested": "[1.14.1, )",
|
||||
"resolved": "1.14.1",
|
||||
"contentHash": "mOOmFYwad3MIOL14VCjj02LljyF1GNw1wP0YVlxtcPvqdxjGGMNdNJJxHptlry3MOd8b40Flm8RPOM8JOlN2sQ=="
|
||||
},
|
||||
"Revit.Async": {
|
||||
"type": "Direct",
|
||||
"requested": "[2.1.1, )",
|
||||
"resolved": "2.1.1",
|
||||
"contentHash": "aK6R/fxrn3jpiKc8LYqfWZ+OfEKNnwgkiln1uyuvaPnTWBOvfiisnOfe7+Sgogr4iEuMmuMDsmBRMCycMlUpnw=="
|
||||
},
|
||||
"Speckle.InterfaceGenerator": {
|
||||
"type": "Direct",
|
||||
"requested": "[0.9.6, )",
|
||||
"resolved": "0.9.6",
|
||||
"contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w=="
|
||||
},
|
||||
"GraphQL.Client": {
|
||||
"type": "Transitive",
|
||||
"resolved": "6.0.0",
|
||||
"contentHash": "8yPNBbuVBpTptivyAlak4GZvbwbUcjeQTL4vN1HKHRuOykZ4r7l5fcLS6vpyPyLn0x8FsL31xbOIKyxbmR9rbA==",
|
||||
"dependencies": {
|
||||
"GraphQL.Client.Abstractions": "6.0.0",
|
||||
"GraphQL.Client.Abstractions.Websocket": "6.0.0",
|
||||
"System.Reactive": "5.0.0"
|
||||
}
|
||||
},
|
||||
"GraphQL.Client.Abstractions": {
|
||||
"type": "Transitive",
|
||||
"resolved": "6.0.0",
|
||||
"contentHash": "h7uzWFORHZ+CCjwr/ThAyXMr0DPpzEANDa4Uo54wqCQ+j7qUKwqYTgOrb1W40sqbvNaZm9v/X7It31SUw0maHA==",
|
||||
"dependencies": {
|
||||
"GraphQL.Primitives": "6.0.0"
|
||||
}
|
||||
},
|
||||
"GraphQL.Client.Abstractions.Websocket": {
|
||||
"type": "Transitive",
|
||||
"resolved": "6.0.0",
|
||||
"contentHash": "Nr9bPf8gIOvLuXpqEpqr9z9jslYFJOvd0feHth3/kPqeR3uMbjF5pjiwh4jxyMcxHdr8Pb6QiXkV3hsSyt0v7A==",
|
||||
"dependencies": {
|
||||
"GraphQL.Client.Abstractions": "6.0.0"
|
||||
}
|
||||
},
|
||||
"GraphQL.Primitives": {
|
||||
"type": "Transitive",
|
||||
"resolved": "6.0.0",
|
||||
"contentHash": "yg72rrYDapfsIUrul7aF6wwNnTJBOFvuA9VdDTQpPa8AlAriHbufeXYLBcodKjfUdkCnaiggX1U/nEP08Zb5GA=="
|
||||
},
|
||||
"Microsoft.Build.Tasks.Git": {
|
||||
"type": "Transitive",
|
||||
"resolved": "8.0.0",
|
||||
"contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ=="
|
||||
},
|
||||
"Microsoft.CSharp": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.7.0",
|
||||
"contentHash": "pTj+D3uJWyN3My70i2Hqo+OXixq3Os2D1nJ2x92FFo6sk8fYS1m1WLNTs0Dc1uPaViH0YvEEwvzddQ7y4rhXmA=="
|
||||
},
|
||||
"Microsoft.Data.Sqlite": {
|
||||
"type": "Transitive",
|
||||
"resolved": "7.0.5",
|
||||
"contentHash": "KGxbPeWsQMnmQy43DSBxAFtHz3l2JX8EWBSGUCvT3CuZ8KsuzbkqMIJMDOxWtG8eZSoCDI04aiVQjWuuV8HmSw==",
|
||||
"dependencies": {
|
||||
"Microsoft.Data.Sqlite.Core": "7.0.5",
|
||||
"SQLitePCLRaw.bundle_e_sqlite3": "2.1.4"
|
||||
}
|
||||
},
|
||||
"Microsoft.Data.Sqlite.Core": {
|
||||
"type": "Transitive",
|
||||
"resolved": "7.0.5",
|
||||
"contentHash": "FTerRmQPqHrCrnoUzhBu+E+1DNGwyrAMLqHkAqOOOu5pGfyMOj8qQUBxI/gDtWtG11p49UxSfWmBzRNlwZqfUg==",
|
||||
"dependencies": {
|
||||
"SQLitePCLRaw.core": "2.1.4"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Configuration": {
|
||||
"type": "Transitive",
|
||||
"resolved": "2.2.0",
|
||||
"contentHash": "nOP8R1mVb/6mZtm2qgAJXn/LFm/2kMjHDAg/QJLFG6CuWYJtaD3p1BwQhufBVvRzL9ceJ/xF0SQ0qsI2GkDQAA==",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Configuration.Abstractions": "2.2.0"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Configuration.Abstractions": {
|
||||
"type": "Transitive",
|
||||
"resolved": "2.2.0",
|
||||
"contentHash": "65MrmXCziWaQFrI0UHkQbesrX5wTwf9XPjY5yFm/VkgJKFJ5gqvXRoXjIZcf2wLi5ZlwGz/oMYfyURVCWbM5iw==",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Primitives": "2.2.0"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Configuration.Binder": {
|
||||
"type": "Transitive",
|
||||
"resolved": "2.2.0",
|
||||
"contentHash": "vJ9xvOZCnUAIHcGC3SU35r3HKmHTVIeHzo6u/qzlHAqD8m6xv92MLin4oJntTvkpKxVX3vI1GFFkIQtU3AdlsQ==",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Configuration": "2.2.0"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": {
|
||||
"type": "Transitive",
|
||||
"resolved": "8.0.0",
|
||||
"contentHash": "cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg=="
|
||||
},
|
||||
"Microsoft.Extensions.Options": {
|
||||
"type": "Transitive",
|
||||
"resolved": "2.2.0",
|
||||
"contentHash": "UpZLNLBpIZ0GTebShui7xXYh6DmBHjWM8NxGxZbdQh/bPZ5e6YswqI+bru6BnEL5eWiOdodsXtEz3FROcgi/qg==",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0",
|
||||
"Microsoft.Extensions.Primitives": "2.2.0",
|
||||
"System.ComponentModel.Annotations": "4.5.0"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Primitives": {
|
||||
"type": "Transitive",
|
||||
"resolved": "2.2.0",
|
||||
"contentHash": "azyQtqbm4fSaDzZHD/J+V6oWMFaf2tWP4WEGIYePLCMw3+b2RQdj9ybgbQyjCshcitQKQ4lEDOZjmSlTTrHxUg==",
|
||||
"dependencies": {
|
||||
"System.Memory": "4.5.1",
|
||||
"System.Runtime.CompilerServices.Unsafe": "4.5.1"
|
||||
}
|
||||
},
|
||||
"Microsoft.NETFramework.ReferenceAssemblies.net461": {
|
||||
"type": "Transitive",
|
||||
"resolved": "1.0.3",
|
||||
"contentHash": "AmOJZwCqnOCNp6PPcf9joyogScWLtwy0M1WkqfEQ0M9nYwyDD7EX9ZjscKS5iYnyvteX7kzSKFCKt9I9dXA6mA=="
|
||||
},
|
||||
"Microsoft.SourceLink.Common": {
|
||||
"type": "Transitive",
|
||||
"resolved": "8.0.0",
|
||||
"contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw=="
|
||||
},
|
||||
"Speckle.Newtonsoft.Json": {
|
||||
"type": "Transitive",
|
||||
"resolved": "13.0.2",
|
||||
"contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA=="
|
||||
},
|
||||
"SQLitePCLRaw.bundle_e_sqlite3": {
|
||||
"type": "Transitive",
|
||||
"resolved": "2.1.4",
|
||||
"contentHash": "EWI1olKDjFEBMJu0+3wuxwziIAdWDVMYLhuZ3Qs84rrz+DHwD00RzWPZCa+bLnHCf3oJwuFZIRsHT5p236QXww==",
|
||||
"dependencies": {
|
||||
"SQLitePCLRaw.lib.e_sqlite3": "2.1.4",
|
||||
"SQLitePCLRaw.provider.e_sqlite3": "2.1.4"
|
||||
}
|
||||
},
|
||||
"SQLitePCLRaw.core": {
|
||||
"type": "Transitive",
|
||||
"resolved": "2.1.4",
|
||||
"contentHash": "inBjvSHo9UDKneGNzfUfDjK08JzlcIhn1+SP5Y3m6cgXpCxXKCJDy6Mka7LpgSV+UZmKSnC8rTwB0SQ0xKu5pA==",
|
||||
"dependencies": {
|
||||
"System.Memory": "4.5.3"
|
||||
}
|
||||
},
|
||||
"SQLitePCLRaw.lib.e_sqlite3": {
|
||||
"type": "Transitive",
|
||||
"resolved": "2.1.4",
|
||||
"contentHash": "2C9Q9eX7CPLveJA0rIhf9RXAvu+7nWZu1A2MdG6SD/NOu26TakGgL1nsbc0JAspGijFOo3HoN79xrx8a368fBg=="
|
||||
},
|
||||
"SQLitePCLRaw.provider.e_sqlite3": {
|
||||
"type": "Transitive",
|
||||
"resolved": "2.1.4",
|
||||
"contentHash": "CSlb5dUp1FMIkez9Iv5EXzpeq7rHryVNqwJMWnpq87j9zWZexaEMdisDktMsnnrzKM6ahNrsTkjqNodTBPBxtQ==",
|
||||
"dependencies": {
|
||||
"SQLitePCLRaw.core": "2.1.4"
|
||||
}
|
||||
},
|
||||
"System.ComponentModel.Annotations": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.5.0",
|
||||
"contentHash": "UxYQ3FGUOtzJ7LfSdnYSFd7+oEv6M8NgUatatIN2HxNtDdlcvFAf+VIq4Of9cDMJEJC0aSRv/x898RYhB4Yppg=="
|
||||
},
|
||||
"System.Memory": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.5.3",
|
||||
"contentHash": "3oDzvc/zzetpTKWMShs1AADwZjQ/36HnsufHRPcOjyRAAMLDlu2iD33MBI2opxnezcVUtXyqDXXjoFMOU9c7SA=="
|
||||
},
|
||||
"System.Reactive": {
|
||||
"type": "Transitive",
|
||||
"resolved": "5.0.0",
|
||||
"contentHash": "erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ=="
|
||||
},
|
||||
"System.Runtime.CompilerServices.Unsafe": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.5.1",
|
||||
"contentHash": "Zh8t8oqolRaFa9vmOZfdQm/qKejdqz0J9kr7o2Fu0vPeoH3BL1EOXipKWwkWtLT1JPzjByrF19fGuFlNbmPpiw=="
|
||||
},
|
||||
"speckle.connectors.common": {
|
||||
"type": "Project",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.DependencyInjection": "[2.2.0, )",
|
||||
"Speckle.Connectors.Logging": "[1.0.0, )",
|
||||
"Speckle.Objects": "[3.3.3, )",
|
||||
"Speckle.Sdk": "[3.3.3, )",
|
||||
"Speckle.Sdk.Dependencies": "[3.3.3, )"
|
||||
}
|
||||
},
|
||||
"speckle.connectors.dui": {
|
||||
"type": "Project",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )",
|
||||
"Speckle.Connectors.Common": "[1.0.0, )"
|
||||
}
|
||||
},
|
||||
"speckle.connectors.logging": {
|
||||
"type": "Project"
|
||||
},
|
||||
"speckle.converters.common": {
|
||||
"type": "Project",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )",
|
||||
"Speckle.Objects": "[3.3.3, )"
|
||||
}
|
||||
},
|
||||
"speckle.converters.revit2026": {
|
||||
"type": "Project",
|
||||
"dependencies": {
|
||||
"Speckle.Converters.Common": "[1.0.0, )",
|
||||
"Speckle.Revit.API": "[2026.0.0, )"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Logging": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[2.2.0, )",
|
||||
"resolved": "2.2.0",
|
||||
"contentHash": "Nxqhadc9FCmFHzU+fz3oc8sFlE6IadViYg8dfUdGzJZ2JUxnCsRghBhhOWdM4B2zSZqEc+0BjliBh/oNdRZuig==",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Configuration.Binder": "2.2.0",
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "2.2.0",
|
||||
"Microsoft.Extensions.Options": "2.2.0"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Logging.Abstractions": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[2.2.0, )",
|
||||
"resolved": "2.2.0",
|
||||
"contentHash": "B2WqEox8o+4KUOpL7rZPyh6qYjik8tHi2tN8Z9jZkHzED8ElYgZa/h6K+xliB435SqUcWT290Fr2aa8BtZjn8A=="
|
||||
},
|
||||
"Speckle.DoubleNumerics": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[4.1.0, )",
|
||||
"resolved": "4.1.0",
|
||||
"contentHash": "20DtS+FsDRsOD9+AU3TwNFZ0qrKo5f6f7B5ZR9wStsIHHHC9k7DpjbCvuNtmnSjx54MD+TJC7wV2f5iyGVPj1A=="
|
||||
},
|
||||
"Speckle.Objects": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.3.3, )",
|
||||
"resolved": "3.3.3",
|
||||
"contentHash": "JCwkfdY4t7MgyrvxeLRZONRjby3qs6vbAqyyOtp9stoqRZiChNugX2ufEs1h7kXoRleYnZVGGHzy2Fbiy5B1ww==",
|
||||
"dependencies": {
|
||||
"Speckle.Sdk": "3.3.3"
|
||||
}
|
||||
},
|
||||
"Speckle.Revit.API": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[2023.0.0, )",
|
||||
"resolved": "2026.0.0",
|
||||
"contentHash": "SiqqKbF1pXyZWXZhAl2JhjYhTt7RiYO5JaQrAjq+OlleAjT4zatwAp/DnTwQspFbP7UZr3b2Ed2kuWNN0ZFelw=="
|
||||
},
|
||||
"Speckle.Sdk": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.3.3, )",
|
||||
"resolved": "3.3.3",
|
||||
"contentHash": "1iC0P2ckeQ7smc9iOf2G1xFR1e1eQBQ122CHTx+b0/4m1LorlyAiW4PYui6erxM72fM6fM4b3r30ey2ceF8ffg==",
|
||||
"dependencies": {
|
||||
"GraphQL.Client": "6.0.0",
|
||||
"Microsoft.CSharp": "4.7.0",
|
||||
"Microsoft.Data.Sqlite": "7.0.5",
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0",
|
||||
"Microsoft.Extensions.Logging": "2.2.0",
|
||||
"Speckle.DoubleNumerics": "4.1.0",
|
||||
"Speckle.Newtonsoft.Json": "13.0.2",
|
||||
"Speckle.Sdk.Dependencies": "3.3.3"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk.Dependencies": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.3.3, )",
|
||||
"resolved": "3.3.3",
|
||||
"contentHash": "mroKNj1mlYLDeBHazsWofp6IHxAOWrRULUEqQd/BfeixXrQswruQ+w6OHEu2IoTqLHyVr/SLhMaBW61WxNG8aw=="
|
||||
}
|
||||
},
|
||||
"net8.0-windows7.0/win-x64": {
|
||||
"Microsoft.Web.WebView2": {
|
||||
"type": "Direct",
|
||||
"requested": "[1.0.1938.49, )",
|
||||
"resolved": "1.0.1938.49",
|
||||
"contentHash": "z8KnFnaTYzhA/ZnyRX0qGfS1NU5ZBJeClAH64F0fVDvdDJTvME7xl6zTJ0Jlfe1BtL3C0NH9xTy64shg2baKdw=="
|
||||
},
|
||||
"SQLitePCLRaw.lib.e_sqlite3": {
|
||||
"type": "Transitive",
|
||||
"resolved": "2.1.4",
|
||||
"contentHash": "2C9Q9eX7CPLveJA0rIhf9RXAvu+7nWZu1A2MdG6SD/NOu26TakGgL1nsbc0JAspGijFOo3HoN79xrx8a368fBg=="
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -18,6 +18,8 @@ public partial class CefSharpPanel : Page, Autodesk.Revit.UI.IDockablePaneProvid
|
||||
Browser.Dispatcher.Invoke(() => Browser.ExecuteScriptAsync(script), DispatcherPriority.Background);
|
||||
}
|
||||
|
||||
public void SendProgress(string script) => ExecuteScript(script);
|
||||
|
||||
public bool IsBrowserInitialized => Browser.IsBrowserInitialized;
|
||||
public object BrowserElement => Browser;
|
||||
|
||||
|
||||
+7
-4
@@ -1,8 +1,8 @@
|
||||
using Autodesk.Revit.DB;
|
||||
using Revit.Async;
|
||||
using Speckle.Connectors.DUI.Bridge;
|
||||
using Speckle.Connectors.DUI.Models;
|
||||
using Speckle.Connectors.DUI.Models.Card;
|
||||
using Speckle.Connectors.Revit.Plugin;
|
||||
using Speckle.Connectors.RevitShared;
|
||||
using Speckle.Connectors.RevitShared.Operations.Send.Filters;
|
||||
using Speckle.Converters.RevitShared.Helpers;
|
||||
@@ -23,13 +23,15 @@ internal sealed class BasicConnectorBindingRevit : IBasicConnectorBinding
|
||||
private readonly RevitContext _revitContext;
|
||||
private readonly ISpeckleApplication _speckleApplication;
|
||||
private readonly ITopLevelExceptionHandler _topLevelExceptionHandler;
|
||||
private readonly IRevitTask _revitTask;
|
||||
|
||||
public BasicConnectorBindingRevit(
|
||||
DocumentModelStore store,
|
||||
IBrowserBridge parent,
|
||||
RevitContext revitContext,
|
||||
ISpeckleApplication speckleApplication,
|
||||
ITopLevelExceptionHandler topLevelExceptionHandler
|
||||
ITopLevelExceptionHandler topLevelExceptionHandler,
|
||||
IRevitTask revitTask
|
||||
)
|
||||
{
|
||||
Name = "baseBinding";
|
||||
@@ -38,6 +40,7 @@ internal sealed class BasicConnectorBindingRevit : IBasicConnectorBinding
|
||||
_revitContext = revitContext;
|
||||
_speckleApplication = speckleApplication;
|
||||
_topLevelExceptionHandler = topLevelExceptionHandler;
|
||||
_revitTask = revitTask;
|
||||
Commands = new BasicConnectorBindingCommands(parent);
|
||||
|
||||
_store.DocumentChanged += (_, _) =>
|
||||
@@ -105,7 +108,7 @@ internal sealed class BasicConnectorBindingRevit : IBasicConnectorBinding
|
||||
var view = revitViewsFilter.GetView();
|
||||
if (view is not null)
|
||||
{
|
||||
await RevitTask
|
||||
await _revitTask
|
||||
.RunAsync(() =>
|
||||
{
|
||||
_revitContext.UIApplication.ActiveUIDocument.ActiveView = view;
|
||||
@@ -170,7 +173,7 @@ internal sealed class BasicConnectorBindingRevit : IBasicConnectorBinding
|
||||
_revitContext.UIApplication?.ActiveUIDocument
|
||||
?? throw new SpeckleException("Unable to retrieve active UI document");
|
||||
|
||||
await RevitTask
|
||||
await _revitTask
|
||||
.RunAsync(() =>
|
||||
{
|
||||
activeUIDoc.Selection.SetElementIds(objectIds);
|
||||
|
||||
@@ -68,7 +68,8 @@ internal sealed class RevitSendBinding : RevitBaseBinding, ISendBinding
|
||||
ISpeckleApplication speckleApplication,
|
||||
ITopLevelExceptionHandler topLevelExceptionHandler,
|
||||
LinkedModelHandler linkedModelHandler,
|
||||
IThreadContext threadContext
|
||||
IThreadContext threadContext,
|
||||
IRevitTask revitTask
|
||||
)
|
||||
: base("sendBinding", bridge)
|
||||
{
|
||||
@@ -92,9 +93,12 @@ internal sealed class RevitSendBinding : RevitBaseBinding, ISendBinding
|
||||
// TODO expiry events
|
||||
// TODO filters need refresh events
|
||||
|
||||
revitContext.UIApplication.NotNull().Application.DocumentChanged += (_, e) =>
|
||||
_topLevelExceptionHandler.CatchUnhandled(() => DocChangeHandler(e));
|
||||
_store.DocumentChanged += (_, _) => topLevelExceptionHandler.FireAndForget(async () => await OnDocumentChanged());
|
||||
revitTask.Run(() =>
|
||||
{
|
||||
revitContext.UIApplication.NotNull().Application.DocumentChanged += (_, e) =>
|
||||
_topLevelExceptionHandler.CatchUnhandled(() => DocChangeHandler(e));
|
||||
_store.DocumentChanged += (_, _) => topLevelExceptionHandler.FireAndForget(async () => await OnDocumentChanged());
|
||||
});
|
||||
}
|
||||
|
||||
public List<ISendFilter> GetSendFilters() =>
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using Speckle.Connectors.DUI.Bindings;
|
||||
using Speckle.Connectors.DUI.Bridge;
|
||||
using Speckle.Connectors.Revit.Plugin;
|
||||
using Speckle.Converters.RevitShared.Helpers;
|
||||
using Speckle.Sdk.Common;
|
||||
|
||||
@@ -12,30 +13,30 @@ internal sealed class SelectionBinding : RevitBaseBinding, ISelectionBinding, ID
|
||||
private readonly System.Timers.Timer _selectionTimer;
|
||||
#endif
|
||||
private readonly RevitContext _revitContext;
|
||||
private readonly IAppIdleManager _idleManager;
|
||||
private readonly ITopLevelExceptionHandler _topLevelExceptionHandler;
|
||||
|
||||
public SelectionBinding(
|
||||
RevitContext revitContext,
|
||||
IBrowserBridge parent,
|
||||
IAppIdleManager idleManager,
|
||||
ITopLevelExceptionHandler topLevelExceptionHandler
|
||||
ITopLevelExceptionHandler topLevelExceptionHandler,
|
||||
IRevitTask revitTask
|
||||
)
|
||||
: base("selectionBinding", parent)
|
||||
{
|
||||
_revitContext = revitContext;
|
||||
_idleManager = idleManager;
|
||||
_topLevelExceptionHandler = topLevelExceptionHandler;
|
||||
|
||||
#if REVIT2022
|
||||
// NOTE: getting the selection data should be a fast function all, even for '000s of elements - and having a timer hitting it every 1s is ok.
|
||||
_selectionTimer = new System.Timers.Timer(1000);
|
||||
_selectionTimer.Elapsed += (_, _) => _topLevelExceptionHandler.CatchUnhandled(OnSelectionChanged);
|
||||
_selectionTimer.Elapsed += (_, _) => topLevelExceptionHandler.CatchUnhandled(OnSelectionChanged);
|
||||
_selectionTimer.Start();
|
||||
#else
|
||||
|
||||
_revitContext.UIApplication.NotNull().SelectionChanged += (_, _) =>
|
||||
_idleManager.SubscribeToIdle(nameof(OnSelectionChanged), OnSelectionChanged);
|
||||
revitTask.Run(
|
||||
() =>
|
||||
_revitContext.UIApplication.NotNull().SelectionChanged += (_, _) =>
|
||||
idleManager.SubscribeToIdle(nameof(OnSelectionChanged), OnSelectionChanged)
|
||||
);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
+14
-2
@@ -1,5 +1,5 @@
|
||||
using System.Reflection;
|
||||
using Autodesk.Revit.DB;
|
||||
using CefSharp;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Speckle.Connectors.Common;
|
||||
using Speckle.Connectors.Common.Builders;
|
||||
@@ -15,7 +15,13 @@ using Speckle.Connectors.Revit.Operations.Send;
|
||||
using Speckle.Connectors.Revit.Operations.Send.Settings;
|
||||
using Speckle.Connectors.Revit.Plugin;
|
||||
using Speckle.Converters.Common;
|
||||
using Speckle.Sdk;
|
||||
using Speckle.Sdk.Models.GraphTraversal;
|
||||
#if REVIT2026_OR_GREATER
|
||||
using Speckle.Connectors.Revit2026.Plugin;
|
||||
#else
|
||||
using CefSharp;
|
||||
#endif
|
||||
|
||||
namespace Speckle.Connectors.Revit.DependencyInjection;
|
||||
|
||||
@@ -27,6 +33,7 @@ public static class ServiceRegistration
|
||||
serviceCollection.AddConnectors();
|
||||
serviceCollection.AddDUI<RevitThreadContext, RevitDocumentStore>();
|
||||
RegisterUiDependencies(serviceCollection);
|
||||
serviceCollection.AddMatchingInterfacesAsTransient(Assembly.GetExecutingAssembly());
|
||||
|
||||
// Storage Schema
|
||||
serviceCollection.AddScoped<DocumentModelStorageSchema>();
|
||||
@@ -80,7 +87,7 @@ public static class ServiceRegistration
|
||||
serviceCollection.AddSingleton<CefSharpPanel>();
|
||||
serviceCollection.AddSingleton<IBrowserScriptExecutor>(sp => sp.GetRequiredService<CefSharpPanel>());
|
||||
serviceCollection.AddSingleton<IRevitPlugin, RevitCefPlugin>();
|
||||
#else
|
||||
#elif !REVIT2026_OR_GREATER
|
||||
// different versions for different versions of CEF
|
||||
serviceCollection.AddSingleton(BindingOptions.DefaultBinder);
|
||||
|
||||
@@ -90,6 +97,11 @@ public static class ServiceRegistration
|
||||
serviceCollection.AddSingleton(panel);
|
||||
serviceCollection.AddSingleton<IBrowserScriptExecutor>(c => c.GetRequiredService<CefSharpPanel>());
|
||||
serviceCollection.AddSingleton<IRevitPlugin, RevitCefPlugin>();
|
||||
#else
|
||||
serviceCollection.AddSingleton<IRevitPlugin, RevitWebViewPlugin>();
|
||||
serviceCollection.AddSingleton<IBrowserScriptExecutor>(c => c.GetRequiredService<RevitControlWebView>());
|
||||
serviceCollection.AddSingleton<RevitControlWebView>();
|
||||
serviceCollection.AddSingleton<RevitControlWebViewDockable>();
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ using Speckle.Connectors.Common.Threading;
|
||||
using Speckle.Connectors.DUI.Bridge;
|
||||
using Speckle.Connectors.DUI.Models;
|
||||
using Speckle.Connectors.DUI.Utils;
|
||||
using Speckle.Connectors.Revit.Plugin;
|
||||
using Speckle.Converters.RevitShared.Helpers;
|
||||
using Speckle.Sdk.Common;
|
||||
|
||||
@@ -33,7 +34,8 @@ internal sealed class RevitDocumentStore : DocumentModelStore
|
||||
DocumentModelStorageSchema documentModelStorageSchema,
|
||||
IdStorageSchema idStorageSchema,
|
||||
ITopLevelExceptionHandler topLevelExceptionHandler,
|
||||
IThreadContext threadContext
|
||||
IThreadContext threadContext,
|
||||
IRevitTask revitTask
|
||||
)
|
||||
: base(logger, jsonSerializer)
|
||||
{
|
||||
@@ -46,18 +48,21 @@ internal sealed class RevitDocumentStore : DocumentModelStore
|
||||
|
||||
UIApplication uiApplication = _revitContext.UIApplication.NotNull();
|
||||
|
||||
uiApplication.ViewActivated += (s, e) => _topLevelExceptionHandler.CatchUnhandled(() => OnViewActivated(s, e));
|
||||
revitTask.Run(() =>
|
||||
{
|
||||
uiApplication.ViewActivated += (s, e) => _topLevelExceptionHandler.CatchUnhandled(() => OnViewActivated(s, e));
|
||||
|
||||
uiApplication.Application.DocumentOpening += (_, _) =>
|
||||
_topLevelExceptionHandler.CatchUnhandled(() => IsDocumentInit = false);
|
||||
uiApplication.Application.DocumentOpening += (_, _) =>
|
||||
_topLevelExceptionHandler.CatchUnhandled(() => IsDocumentInit = false);
|
||||
|
||||
uiApplication.Application.DocumentOpened += (_, _) =>
|
||||
_topLevelExceptionHandler.CatchUnhandled(() => IsDocumentInit = false);
|
||||
uiApplication.Application.DocumentOpened += (_, _) =>
|
||||
_topLevelExceptionHandler.CatchUnhandled(() => IsDocumentInit = false);
|
||||
|
||||
// There is no event that we can hook here for double-click file open...
|
||||
// It is kind of harmless since we create this object as "SingleInstance".
|
||||
LoadState();
|
||||
OnDocumentChanged();
|
||||
// There is no event that we can hook here for double-click file open...
|
||||
// It is kind of harmless since we create this object as "SingleInstance".
|
||||
LoadState();
|
||||
OnDocumentChanged();
|
||||
});
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
#if !REVIT2026_OR_GREATER
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Reflection;
|
||||
@@ -6,7 +7,6 @@ using System.Windows.Media.Imaging;
|
||||
using Autodesk.Revit.UI;
|
||||
using CefSharp;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Revit.Async;
|
||||
using Speckle.Connectors.Common;
|
||||
using Speckle.Connectors.DUI.Bindings;
|
||||
using Speckle.Connectors.DUI.Bridge;
|
||||
@@ -104,7 +104,7 @@ internal sealed class RevitCefPlugin : IRevitPlugin
|
||||
_revitContext.UIApplication = uiApplication;
|
||||
|
||||
// POC: might be worth to interface this out, we shall see...
|
||||
RevitTask.Initialize(uiApplication);
|
||||
global::Revit.Async.RevitTask.Initialize(uiApplication);
|
||||
|
||||
PostApplicationInit(); // for double-click file open
|
||||
}
|
||||
@@ -181,3 +181,4 @@ internal sealed class RevitCefPlugin : IRevitPlugin
|
||||
return null;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
using Autodesk.Revit.UI;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Revit.Async;
|
||||
using Speckle.Connectors.Common;
|
||||
using Speckle.Connectors.DUI;
|
||||
using Speckle.Connectors.Revit.DependencyInjection;
|
||||
@@ -30,6 +29,8 @@ internal sealed class RevitExternalApplication : IExternalApplication
|
||||
return HostAppVersion.v2024;
|
||||
#elif REVIT2025
|
||||
return HostAppVersion.v2025;
|
||||
#elif REVIT2026
|
||||
return HostAppVersion.v2026;
|
||||
#else
|
||||
throw new NotImplementedException();
|
||||
#endif
|
||||
@@ -50,7 +51,7 @@ internal sealed class RevitExternalApplication : IExternalApplication
|
||||
_container = services.BuildServiceProvider();
|
||||
_container.UseDUI();
|
||||
|
||||
RevitTask.Initialize(application);
|
||||
global::Revit.Async.RevitTask.Initialize(application);
|
||||
// resolve root object
|
||||
_revitPlugin = _container.GetRequiredService<IRevitPlugin>();
|
||||
_revitPlugin.Initialise();
|
||||
@@ -58,7 +59,7 @@ internal sealed class RevitExternalApplication : IExternalApplication
|
||||
catch (Exception e) when (!e.IsFatal())
|
||||
{
|
||||
_container
|
||||
.GetRequiredService<ILoggerFactory>()
|
||||
?.GetRequiredService<ILoggerFactory>()
|
||||
.CreateLogger<RevitExternalApplication>()
|
||||
.LogCritical(e, "Unhandled exception");
|
||||
// POC: feedback?
|
||||
|
||||
@@ -17,14 +17,17 @@ public sealed class RevitIdleManager : AppIdleManager
|
||||
public RevitIdleManager(
|
||||
RevitContext revitContext,
|
||||
IIdleCallManager idleCallManager,
|
||||
ITopLevelExceptionHandler topLevelExceptionHandler
|
||||
ITopLevelExceptionHandler topLevelExceptionHandler,
|
||||
IRevitTask revitTask
|
||||
)
|
||||
: base(idleCallManager)
|
||||
{
|
||||
_topLevelExceptionHandler = topLevelExceptionHandler;
|
||||
_uiApplication = revitContext.UIApplication.NotNull();
|
||||
_idleCallManager = idleCallManager;
|
||||
_uiApplication.Idling += (s, e) => OnIdle?.Invoke(s, e); // will be called on the main thread always and fixing the Revit exceptions on subscribing/unsubscribing Idle events
|
||||
revitTask.Run(
|
||||
() => _uiApplication.Idling += (s, e) => OnIdle?.Invoke(s, e) // will be called on the main thread always and fixing the Revit exceptions on subscribing/unsubscribing Idle events
|
||||
);
|
||||
}
|
||||
|
||||
protected override void AddEvent()
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
using Speckle.Connectors.Common.Threading;
|
||||
using Speckle.Connectors.DUI.Bridge;
|
||||
using Speckle.InterfaceGenerator;
|
||||
|
||||
namespace Speckle.Connectors.Revit.Plugin;
|
||||
|
||||
[GenerateAutoInterface]
|
||||
public class RevitTask(ITopLevelExceptionHandler topLevelExceptionHandler) : IRevitTask
|
||||
{
|
||||
public void Run(Func<Task> handler) =>
|
||||
global::Revit.Async.RevitTask.RunAsync(() => topLevelExceptionHandler.FireAndForget(handler)).FireAndForget();
|
||||
|
||||
public void Run(Action handler) =>
|
||||
global::Revit.Async.RevitTask.RunAsync(() => topLevelExceptionHandler.CatchUnhandled(handler)).FireAndForget();
|
||||
|
||||
public Task RunAsync(Func<Task> handler) =>
|
||||
global::Revit.Async.RevitTask.RunAsync(() => topLevelExceptionHandler.CatchUnhandledAsync(handler));
|
||||
|
||||
public Task RunAsync(Action handler) =>
|
||||
global::Revit.Async.RevitTask.RunAsync(() => topLevelExceptionHandler.CatchUnhandled(handler));
|
||||
}
|
||||
@@ -1,4 +1,3 @@
|
||||
using Revit.Async;
|
||||
using Speckle.Connectors.Common.Threading;
|
||||
using Speckle.Sdk;
|
||||
|
||||
@@ -26,7 +25,7 @@ public class RevitThreadContext : ThreadContext
|
||||
{
|
||||
Exception? ex = null;
|
||||
//force the usage of the application overload
|
||||
var ret = await RevitTask.RunAsync(_ =>
|
||||
var ret = await global::Revit.Async.RevitTask.RunAsync(_ =>
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -49,7 +48,7 @@ public class RevitThreadContext : ThreadContext
|
||||
{
|
||||
Exception? ex = null;
|
||||
//force the usage of the application overload
|
||||
var ret = await RevitTask.RunAsync(async _ =>
|
||||
var ret = await global::Revit.Async.RevitTask.RunAsync(async _ =>
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -72,7 +71,7 @@ public class RevitThreadContext : ThreadContext
|
||||
{
|
||||
Exception? ex = null;
|
||||
//force the usage of the application overload
|
||||
await RevitTask.RunAsync(async _ =>
|
||||
await global::Revit.Async.RevitTask.RunAsync(async _ =>
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -93,7 +92,7 @@ public class RevitThreadContext : ThreadContext
|
||||
{
|
||||
Exception? ex = null;
|
||||
//force the usage of the application overload
|
||||
await RevitTask.RunAsync(() =>
|
||||
await global::Revit.Async.RevitTask.RunAsync(() =>
|
||||
{
|
||||
try
|
||||
{
|
||||
|
||||
+1
@@ -51,6 +51,7 @@
|
||||
<Compile Include="$(MSBuildThisFileDirectory)Operations\Send\Settings\DetailLevelSetting.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)Plugin\IRevitPlugin.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)Plugin\RevitCommand.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)Plugin\RevitTask.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)Plugin\RevitExternalApplication.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)Plugin\RevitIdleManager.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)Plugin\RevitThreadContext.cs" />
|
||||
|
||||
@@ -46,7 +46,7 @@ public class TeklaSelectionBinding : ISelectionBinding
|
||||
private void UpdateSelection()
|
||||
{
|
||||
SelectionInfo selInfo = GetSelection();
|
||||
Parent.Send2(SELECTION_EVENT, selInfo);
|
||||
Parent.Send(SELECTION_EVENT, selInfo);
|
||||
}
|
||||
|
||||
public SelectionInfo GetSelection()
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net8.0-windows</TargetFramework>
|
||||
<PlatformTarget>x64</PlatformTarget>
|
||||
<Configurations>Debug;Release;Local</Configurations>
|
||||
<DefineConstants>$(DefineConstants);REVIT2025;REVIT2022_OR_GREATER;REVIT2023_OR_GREATER;REVIT2024_OR_GREATER;REVIT2025_OR_GREATER</DefineConstants>
|
||||
</PropertyGroup>
|
||||
|
||||
<Import Project="..\Speckle.Converters.RevitShared\Speckle.Converters.RevitShared.projitems" Label="Shared" />
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Speckle.Revit.API" VersionOverride="2026.0.0" ExcludeAssets="runtime"/>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\..\Sdk\Speckle.Converters.Common\Speckle.Converters.Common.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
@@ -0,0 +1,277 @@
|
||||
{
|
||||
"version": 2,
|
||||
"dependencies": {
|
||||
"net8.0-windows7.0": {
|
||||
"Microsoft.NETFramework.ReferenceAssemblies": {
|
||||
"type": "Direct",
|
||||
"requested": "[1.0.3, )",
|
||||
"resolved": "1.0.3",
|
||||
"contentHash": "vUc9Npcs14QsyOD01tnv/m8sQUnGTGOw1BCmKcv77LBJY7OxhJ+zJF7UD/sCL3lYNFuqmQEVlkfS4Quif6FyYg==",
|
||||
"dependencies": {
|
||||
"Microsoft.NETFramework.ReferenceAssemblies.net461": "1.0.3"
|
||||
}
|
||||
},
|
||||
"Microsoft.SourceLink.GitHub": {
|
||||
"type": "Direct",
|
||||
"requested": "[8.0.0, )",
|
||||
"resolved": "8.0.0",
|
||||
"contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==",
|
||||
"dependencies": {
|
||||
"Microsoft.Build.Tasks.Git": "8.0.0",
|
||||
"Microsoft.SourceLink.Common": "8.0.0"
|
||||
}
|
||||
},
|
||||
"PolySharp": {
|
||||
"type": "Direct",
|
||||
"requested": "[1.14.1, )",
|
||||
"resolved": "1.14.1",
|
||||
"contentHash": "mOOmFYwad3MIOL14VCjj02LljyF1GNw1wP0YVlxtcPvqdxjGGMNdNJJxHptlry3MOd8b40Flm8RPOM8JOlN2sQ=="
|
||||
},
|
||||
"Speckle.InterfaceGenerator": {
|
||||
"type": "Direct",
|
||||
"requested": "[0.9.6, )",
|
||||
"resolved": "0.9.6",
|
||||
"contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w=="
|
||||
},
|
||||
"Speckle.Revit.API": {
|
||||
"type": "Direct",
|
||||
"requested": "[2026.0.0, )",
|
||||
"resolved": "2026.0.0",
|
||||
"contentHash": "SiqqKbF1pXyZWXZhAl2JhjYhTt7RiYO5JaQrAjq+OlleAjT4zatwAp/DnTwQspFbP7UZr3b2Ed2kuWNN0ZFelw=="
|
||||
},
|
||||
"GraphQL.Client": {
|
||||
"type": "Transitive",
|
||||
"resolved": "6.0.0",
|
||||
"contentHash": "8yPNBbuVBpTptivyAlak4GZvbwbUcjeQTL4vN1HKHRuOykZ4r7l5fcLS6vpyPyLn0x8FsL31xbOIKyxbmR9rbA==",
|
||||
"dependencies": {
|
||||
"GraphQL.Client.Abstractions": "6.0.0",
|
||||
"GraphQL.Client.Abstractions.Websocket": "6.0.0",
|
||||
"System.Reactive": "5.0.0"
|
||||
}
|
||||
},
|
||||
"GraphQL.Client.Abstractions": {
|
||||
"type": "Transitive",
|
||||
"resolved": "6.0.0",
|
||||
"contentHash": "h7uzWFORHZ+CCjwr/ThAyXMr0DPpzEANDa4Uo54wqCQ+j7qUKwqYTgOrb1W40sqbvNaZm9v/X7It31SUw0maHA==",
|
||||
"dependencies": {
|
||||
"GraphQL.Primitives": "6.0.0"
|
||||
}
|
||||
},
|
||||
"GraphQL.Client.Abstractions.Websocket": {
|
||||
"type": "Transitive",
|
||||
"resolved": "6.0.0",
|
||||
"contentHash": "Nr9bPf8gIOvLuXpqEpqr9z9jslYFJOvd0feHth3/kPqeR3uMbjF5pjiwh4jxyMcxHdr8Pb6QiXkV3hsSyt0v7A==",
|
||||
"dependencies": {
|
||||
"GraphQL.Client.Abstractions": "6.0.0"
|
||||
}
|
||||
},
|
||||
"GraphQL.Primitives": {
|
||||
"type": "Transitive",
|
||||
"resolved": "6.0.0",
|
||||
"contentHash": "yg72rrYDapfsIUrul7aF6wwNnTJBOFvuA9VdDTQpPa8AlAriHbufeXYLBcodKjfUdkCnaiggX1U/nEP08Zb5GA=="
|
||||
},
|
||||
"Microsoft.Build.Tasks.Git": {
|
||||
"type": "Transitive",
|
||||
"resolved": "8.0.0",
|
||||
"contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ=="
|
||||
},
|
||||
"Microsoft.CSharp": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.7.0",
|
||||
"contentHash": "pTj+D3uJWyN3My70i2Hqo+OXixq3Os2D1nJ2x92FFo6sk8fYS1m1WLNTs0Dc1uPaViH0YvEEwvzddQ7y4rhXmA=="
|
||||
},
|
||||
"Microsoft.Data.Sqlite": {
|
||||
"type": "Transitive",
|
||||
"resolved": "7.0.5",
|
||||
"contentHash": "KGxbPeWsQMnmQy43DSBxAFtHz3l2JX8EWBSGUCvT3CuZ8KsuzbkqMIJMDOxWtG8eZSoCDI04aiVQjWuuV8HmSw==",
|
||||
"dependencies": {
|
||||
"Microsoft.Data.Sqlite.Core": "7.0.5",
|
||||
"SQLitePCLRaw.bundle_e_sqlite3": "2.1.4"
|
||||
}
|
||||
},
|
||||
"Microsoft.Data.Sqlite.Core": {
|
||||
"type": "Transitive",
|
||||
"resolved": "7.0.5",
|
||||
"contentHash": "FTerRmQPqHrCrnoUzhBu+E+1DNGwyrAMLqHkAqOOOu5pGfyMOj8qQUBxI/gDtWtG11p49UxSfWmBzRNlwZqfUg==",
|
||||
"dependencies": {
|
||||
"SQLitePCLRaw.core": "2.1.4"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Configuration": {
|
||||
"type": "Transitive",
|
||||
"resolved": "2.2.0",
|
||||
"contentHash": "nOP8R1mVb/6mZtm2qgAJXn/LFm/2kMjHDAg/QJLFG6CuWYJtaD3p1BwQhufBVvRzL9ceJ/xF0SQ0qsI2GkDQAA==",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Configuration.Abstractions": "2.2.0"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Configuration.Abstractions": {
|
||||
"type": "Transitive",
|
||||
"resolved": "2.2.0",
|
||||
"contentHash": "65MrmXCziWaQFrI0UHkQbesrX5wTwf9XPjY5yFm/VkgJKFJ5gqvXRoXjIZcf2wLi5ZlwGz/oMYfyURVCWbM5iw==",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Primitives": "2.2.0"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Configuration.Binder": {
|
||||
"type": "Transitive",
|
||||
"resolved": "2.2.0",
|
||||
"contentHash": "vJ9xvOZCnUAIHcGC3SU35r3HKmHTVIeHzo6u/qzlHAqD8m6xv92MLin4oJntTvkpKxVX3vI1GFFkIQtU3AdlsQ==",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Configuration": "2.2.0"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": {
|
||||
"type": "Transitive",
|
||||
"resolved": "2.2.0",
|
||||
"contentHash": "f9hstgjVmr6rmrfGSpfsVOl2irKAgr1QjrSi3FgnS7kulxband50f2brRLwySAQTADPZeTdow0mpSMcoAdadCw=="
|
||||
},
|
||||
"Microsoft.Extensions.Options": {
|
||||
"type": "Transitive",
|
||||
"resolved": "2.2.0",
|
||||
"contentHash": "UpZLNLBpIZ0GTebShui7xXYh6DmBHjWM8NxGxZbdQh/bPZ5e6YswqI+bru6BnEL5eWiOdodsXtEz3FROcgi/qg==",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0",
|
||||
"Microsoft.Extensions.Primitives": "2.2.0",
|
||||
"System.ComponentModel.Annotations": "4.5.0"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Primitives": {
|
||||
"type": "Transitive",
|
||||
"resolved": "2.2.0",
|
||||
"contentHash": "azyQtqbm4fSaDzZHD/J+V6oWMFaf2tWP4WEGIYePLCMw3+b2RQdj9ybgbQyjCshcitQKQ4lEDOZjmSlTTrHxUg==",
|
||||
"dependencies": {
|
||||
"System.Memory": "4.5.1",
|
||||
"System.Runtime.CompilerServices.Unsafe": "4.5.1"
|
||||
}
|
||||
},
|
||||
"Microsoft.NETFramework.ReferenceAssemblies.net461": {
|
||||
"type": "Transitive",
|
||||
"resolved": "1.0.3",
|
||||
"contentHash": "AmOJZwCqnOCNp6PPcf9joyogScWLtwy0M1WkqfEQ0M9nYwyDD7EX9ZjscKS5iYnyvteX7kzSKFCKt9I9dXA6mA=="
|
||||
},
|
||||
"Microsoft.SourceLink.Common": {
|
||||
"type": "Transitive",
|
||||
"resolved": "8.0.0",
|
||||
"contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw=="
|
||||
},
|
||||
"Speckle.Newtonsoft.Json": {
|
||||
"type": "Transitive",
|
||||
"resolved": "13.0.2",
|
||||
"contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA=="
|
||||
},
|
||||
"SQLitePCLRaw.bundle_e_sqlite3": {
|
||||
"type": "Transitive",
|
||||
"resolved": "2.1.4",
|
||||
"contentHash": "EWI1olKDjFEBMJu0+3wuxwziIAdWDVMYLhuZ3Qs84rrz+DHwD00RzWPZCa+bLnHCf3oJwuFZIRsHT5p236QXww==",
|
||||
"dependencies": {
|
||||
"SQLitePCLRaw.lib.e_sqlite3": "2.1.4",
|
||||
"SQLitePCLRaw.provider.e_sqlite3": "2.1.4"
|
||||
}
|
||||
},
|
||||
"SQLitePCLRaw.core": {
|
||||
"type": "Transitive",
|
||||
"resolved": "2.1.4",
|
||||
"contentHash": "inBjvSHo9UDKneGNzfUfDjK08JzlcIhn1+SP5Y3m6cgXpCxXKCJDy6Mka7LpgSV+UZmKSnC8rTwB0SQ0xKu5pA==",
|
||||
"dependencies": {
|
||||
"System.Memory": "4.5.3"
|
||||
}
|
||||
},
|
||||
"SQLitePCLRaw.lib.e_sqlite3": {
|
||||
"type": "Transitive",
|
||||
"resolved": "2.1.4",
|
||||
"contentHash": "2C9Q9eX7CPLveJA0rIhf9RXAvu+7nWZu1A2MdG6SD/NOu26TakGgL1nsbc0JAspGijFOo3HoN79xrx8a368fBg=="
|
||||
},
|
||||
"SQLitePCLRaw.provider.e_sqlite3": {
|
||||
"type": "Transitive",
|
||||
"resolved": "2.1.4",
|
||||
"contentHash": "CSlb5dUp1FMIkez9Iv5EXzpeq7rHryVNqwJMWnpq87j9zWZexaEMdisDktMsnnrzKM6ahNrsTkjqNodTBPBxtQ==",
|
||||
"dependencies": {
|
||||
"SQLitePCLRaw.core": "2.1.4"
|
||||
}
|
||||
},
|
||||
"System.ComponentModel.Annotations": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.5.0",
|
||||
"contentHash": "UxYQ3FGUOtzJ7LfSdnYSFd7+oEv6M8NgUatatIN2HxNtDdlcvFAf+VIq4Of9cDMJEJC0aSRv/x898RYhB4Yppg=="
|
||||
},
|
||||
"System.Memory": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.5.3",
|
||||
"contentHash": "3oDzvc/zzetpTKWMShs1AADwZjQ/36HnsufHRPcOjyRAAMLDlu2iD33MBI2opxnezcVUtXyqDXXjoFMOU9c7SA=="
|
||||
},
|
||||
"System.Reactive": {
|
||||
"type": "Transitive",
|
||||
"resolved": "5.0.0",
|
||||
"contentHash": "erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ=="
|
||||
},
|
||||
"System.Runtime.CompilerServices.Unsafe": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.5.1",
|
||||
"contentHash": "Zh8t8oqolRaFa9vmOZfdQm/qKejdqz0J9kr7o2Fu0vPeoH3BL1EOXipKWwkWtLT1JPzjByrF19fGuFlNbmPpiw=="
|
||||
},
|
||||
"speckle.converters.common": {
|
||||
"type": "Project",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )",
|
||||
"Speckle.Objects": "[3.3.3, )"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Logging": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[2.2.0, )",
|
||||
"resolved": "2.2.0",
|
||||
"contentHash": "Nxqhadc9FCmFHzU+fz3oc8sFlE6IadViYg8dfUdGzJZ2JUxnCsRghBhhOWdM4B2zSZqEc+0BjliBh/oNdRZuig==",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Configuration.Binder": "2.2.0",
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "2.2.0",
|
||||
"Microsoft.Extensions.Options": "2.2.0"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Logging.Abstractions": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[2.2.0, )",
|
||||
"resolved": "2.2.0",
|
||||
"contentHash": "B2WqEox8o+4KUOpL7rZPyh6qYjik8tHi2tN8Z9jZkHzED8ElYgZa/h6K+xliB435SqUcWT290Fr2aa8BtZjn8A=="
|
||||
},
|
||||
"Speckle.DoubleNumerics": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[4.1.0, )",
|
||||
"resolved": "4.1.0",
|
||||
"contentHash": "20DtS+FsDRsOD9+AU3TwNFZ0qrKo5f6f7B5ZR9wStsIHHHC9k7DpjbCvuNtmnSjx54MD+TJC7wV2f5iyGVPj1A=="
|
||||
},
|
||||
"Speckle.Objects": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.3.3, )",
|
||||
"resolved": "3.3.3",
|
||||
"contentHash": "JCwkfdY4t7MgyrvxeLRZONRjby3qs6vbAqyyOtp9stoqRZiChNugX2ufEs1h7kXoRleYnZVGGHzy2Fbiy5B1ww==",
|
||||
"dependencies": {
|
||||
"Speckle.Sdk": "3.3.3"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.3.3, )",
|
||||
"resolved": "3.3.3",
|
||||
"contentHash": "1iC0P2ckeQ7smc9iOf2G1xFR1e1eQBQ122CHTx+b0/4m1LorlyAiW4PYui6erxM72fM6fM4b3r30ey2ceF8ffg==",
|
||||
"dependencies": {
|
||||
"GraphQL.Client": "6.0.0",
|
||||
"Microsoft.CSharp": "4.7.0",
|
||||
"Microsoft.Data.Sqlite": "7.0.5",
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0",
|
||||
"Microsoft.Extensions.Logging": "2.2.0",
|
||||
"Speckle.DoubleNumerics": "4.1.0",
|
||||
"Speckle.Newtonsoft.Json": "13.0.2",
|
||||
"Speckle.Sdk.Dependencies": "3.3.3"
|
||||
}
|
||||
},
|
||||
"Speckle.Sdk.Dependencies": {
|
||||
"type": "CentralTransitive",
|
||||
"requested": "[3.3.3, )",
|
||||
"resolved": "3.3.3",
|
||||
"contentHash": "mroKNj1mlYLDeBHazsWofp6IHxAOWrRULUEqQd/BfeixXrQswruQ+w6OHEu2IoTqLHyVr/SLhMaBW61WxNG8aw=="
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -41,6 +41,8 @@ public sealed partial class DUI3ControlWebView : UserControl, IBrowserScriptExec
|
||||
);
|
||||
}
|
||||
|
||||
public void SendProgress(string script) => ExecuteScript(script);
|
||||
|
||||
private void OnInitialized(object? sender, CoreWebView2InitializationCompletedEventArgs e)
|
||||
{
|
||||
if (!e.IsSuccess)
|
||||
|
||||
@@ -75,5 +75,5 @@ public class OperationProgressManager : IOperationProgressManager
|
||||
}
|
||||
|
||||
private static void SendProgress(IBrowserBridge bridge, string modelCardId, ModelCardProgress progress) =>
|
||||
bridge.Send2(SET_MODEL_PROGRESS_UI_COMMAND_NAME, new { modelCardId, progress });
|
||||
bridge.SendProgress(SET_MODEL_PROGRESS_UI_COMMAND_NAME, new { modelCardId, progress });
|
||||
}
|
||||
|
||||
@@ -295,7 +295,7 @@ public sealed class BrowserBridge : IBrowserBridge
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
public void Send2<T>(string eventName, T data)
|
||||
public void SendProgress<T>(string eventName, T data)
|
||||
where T : class
|
||||
{
|
||||
if (_binding is null)
|
||||
@@ -307,6 +307,6 @@ public sealed class BrowserBridge : IBrowserBridge
|
||||
string requestId = $"{Guid.NewGuid()}_{eventName}";
|
||||
_resultsStore[requestId] = payload;
|
||||
var script = $"{FrontendBoundName}.emitResponseReady('{eventName}', '{requestId}')";
|
||||
_browserScriptExecutor.ExecuteScript(script);
|
||||
_browserScriptExecutor.SendProgress(script);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,6 +40,6 @@ public interface IBrowserBridge
|
||||
public Task Send<T>(string eventName, T data, CancellationToken cancellationToken = default)
|
||||
where T : class;
|
||||
|
||||
public void Send2<T>(string eventName, T data)
|
||||
public void SendProgress<T>(string eventName, T data)
|
||||
where T : class;
|
||||
}
|
||||
|
||||
@@ -4,14 +4,16 @@ public interface IBrowserScriptExecutor
|
||||
{
|
||||
/// <exception cref="InvalidOperationException">thrown when <see cref="IsBrowserInitialized"/> is <see langword="false"/></exception>
|
||||
/// <param name="script">The (constant string) script to execute on the browser</param>
|
||||
public void ExecuteScript(string script);
|
||||
void ExecuteScript(string script);
|
||||
|
||||
public bool IsBrowserInitialized { get; }
|
||||
void SendProgress(string script);
|
||||
|
||||
public object BrowserElement { get; }
|
||||
bool IsBrowserInitialized { get; }
|
||||
|
||||
object BrowserElement { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Action that opens up the developer tools of the respective browser we're using. While webview2 allows for "right click, inspect", cefsharp does not - hence the need for this.
|
||||
/// </summary>
|
||||
public void ShowDevTools();
|
||||
void ShowDevTools();
|
||||
}
|
||||
|
||||
@@ -289,6 +289,12 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Connectors.Grasshop
|
||||
EndProject
|
||||
Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Speckle.Connectors.GrasshopperShared", "Connectors\Rhino\Speckle.Connectors.GrasshopperShared\Speckle.Connectors.GrasshopperShared.shproj", "{B6FBB8F4-4E2D-41D9-AC3F-1E30D0C8E87C}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "2026", "2026", "{6B2DFE65-31AF-474E-87BD-E85E53D290C1}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Converters.Revit2026", "Converters\Revit\Speckle.Converters.Revit2026\Speckle.Converters.Revit2026.csproj", "{6006ECF4-FAEC-4200-B3A1-9B5A670AAF42}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Connectors.Revit2026", "Connectors\Revit\Speckle.Connectors.Revit2026\Speckle.Connectors.Revit2026.csproj", "{F98F97AC-D862-4750-B952-FBE4E9EE0EBA}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
@@ -740,18 +746,6 @@ Global
|
||||
{C4061419-5E61-4A1A-ACA1-EAF4D174D6D3}.Local|Any CPU.Build.0 = Local|Any CPU
|
||||
{C4061419-5E61-4A1A-ACA1-EAF4D174D6D3}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{C4061419-5E61-4A1A-ACA1-EAF4D174D6D3}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{304DB2B8-7DA9-4A52-98E7-972887D8A4EF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{304DB2B8-7DA9-4A52-98E7-972887D8A4EF}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{304DB2B8-7DA9-4A52-98E7-972887D8A4EF}.Local|Any CPU.ActiveCfg = Local|Any CPU
|
||||
{304DB2B8-7DA9-4A52-98E7-972887D8A4EF}.Local|Any CPU.Build.0 = Local|Any CPU
|
||||
{304DB2B8-7DA9-4A52-98E7-972887D8A4EF}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{304DB2B8-7DA9-4A52-98E7-972887D8A4EF}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{3E24CEFE-FC27-45DA-97BA-544027BB09DD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{3E24CEFE-FC27-45DA-97BA-544027BB09DD}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{3E24CEFE-FC27-45DA-97BA-544027BB09DD}.Local|Any CPU.ActiveCfg = Local|Any CPU
|
||||
{3E24CEFE-FC27-45DA-97BA-544027BB09DD}.Local|Any CPU.Build.0 = Local|Any CPU
|
||||
{3E24CEFE-FC27-45DA-97BA-544027BB09DD}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{3E24CEFE-FC27-45DA-97BA-544027BB09DD}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
@@ -882,9 +876,6 @@ Global
|
||||
{855008CB-80B6-48E9-82DE-CDA741434E22} = {44C95FA6-B91D-4F67-AB5C-7115032614A5}
|
||||
{2DBE21BB-CE33-449C-A377-D4148D56F810} = {44C95FA6-B91D-4F67-AB5C-7115032614A5}
|
||||
{C4061419-5E61-4A1A-ACA1-EAF4D174D6D3} = {44C95FA6-B91D-4F67-AB5C-7115032614A5}
|
||||
{304DB2B8-7DA9-4A52-98E7-972887D8A4EF} = {201AF4EA-F049-4332-A746-42D3413DAE08}
|
||||
{3E24CEFE-FC27-45DA-97BA-544027BB09DD} = {9714467A-AECB-45B5-82D8-3E7BFF6E37C8}
|
||||
{B6FBB8F4-4E2D-41D9-AC3F-1E30D0C8E87C} = {A5D616EA-1D91-48BE-BAB8-3501A29F1C20}
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {EE253116-7070-4E9A-BCE8-2911C251B8C8}
|
||||
@@ -929,6 +920,7 @@ Global
|
||||
Connectors\CSi\Speckle.Connectors.ETABSShared\Speckle.Connectors.ETABSShared.projitems*{5d1e0b0d-56a7-4e13-b9a9-8633e02b8f17}*SharedItemsImports = 13
|
||||
Converters\CSi\Speckle.Converters.CSiShared\Speckle.Converters.CSiShared.projitems*{5e924b13-b3e8-4724-9ba7-ce82e39866eb}*SharedItemsImports = 5
|
||||
Converters\CSi\Speckle.Converters.ETABSShared\Speckle.Converters.ETABSShared.projitems*{5e924b13-b3e8-4724-9ba7-ce82e39866eb}*SharedItemsImports = 5
|
||||
Converters\Revit\Speckle.Converters.RevitShared\Speckle.Converters.RevitShared.projitems*{6006ecf4-faec-4200-b3a1-9b5a670aaf42}*SharedItemsImports = 5
|
||||
Converters\Navisworks\Speckle.Converters.NavisworksShared\Speckle.Converters.NavisworksShared.projitems*{6101b44d-3805-4aa1-b8d0-e06c461ed202}*SharedItemsImports = 5
|
||||
Connectors\Revit\Speckle.Connectors.RevitShared.Cef\Speckle.Connectors.RevitShared.Cef.projitems*{617bd3c7-87d9-4d28-8ac9-4910945bb9fc}*SharedItemsImports = 5
|
||||
Connectors\Revit\Speckle.Connectors.RevitShared\Speckle.Connectors.RevitShared.projitems*{617bd3c7-87d9-4d28-8ac9-4910945bb9fc}*SharedItemsImports = 5
|
||||
@@ -980,6 +972,7 @@ Global
|
||||
Converters\Revit\Speckle.Converters.RevitShared.Tests\Speckle.Converters.RevitShared.Tests.projitems*{e1c43415-3202-45f4-8bf9-a4dd7d7f2ed6}*SharedItemsImports = 13
|
||||
Connectors\Autocad\Speckle.Connectors.AutocadShared\Speckle.Connectors.AutocadShared.projitems*{eaad080d-49af-49bf-b8bd-a18ceb210734}*SharedItemsImports = 5
|
||||
Connectors\Autocad\Speckle.Connectors.Civil3dShared\Speckle.Connectors.Civil3dShared.projitems*{efd01520-93e8-4cca-8e03-9cdc635f55f4}*SharedItemsImports = 13
|
||||
Connectors\Revit\Speckle.Connectors.RevitShared\Speckle.Connectors.RevitShared.projitems*{f98f97ac-d862-4750-b952-fbe4e9ee0eba}*SharedItemsImports = 5
|
||||
Connectors\Navisworks\Speckle.Connectors.NavisworksShared\Speckle.Connectors.NavisworksShared.projitems*{fd44e1f0-d20a-49b6-adc9-482d911a74fb}*SharedItemsImports = 5
|
||||
Connectors\Autocad\Speckle.Connectors.AutocadShared\Speckle.Connectors.AutocadShared.projitems*{fe4cb79d-4e59-4070-871c-108545537e6c}*SharedItemsImports = 5
|
||||
Connectors\Autocad\Speckle.Connectors.Civil3dShared\Speckle.Connectors.Civil3dShared.projitems*{fe4cb79d-4e59-4070-871c-108545537e6c}*SharedItemsImports = 5
|
||||
|
||||
+59
-36
@@ -298,6 +298,12 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Converters.Civil3d2
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Connectors.Civil3d2026", "Connectors\Autocad\Speckle.Connectors.Civil3d2026\Speckle.Connectors.Civil3d2026.csproj", "{EC0E8472-2C5F-424B-B868-7BBA272DF611}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "2026", "2026", "{6B2DFE65-31AF-474E-87BD-E85E53D290C1}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Converters.Revit2026", "Converters\Revit\Speckle.Converters.Revit2026\Speckle.Converters.Revit2026.csproj", "{6006ECF4-FAEC-4200-B3A1-9B5A670AAF42}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Connectors.Revit2026", "Connectors\Revit\Speckle.Connectors.Revit2026\Speckle.Connectors.Revit2026.csproj", "{F98F97AC-D862-4750-B952-FBE4E9EE0EBA}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
@@ -499,8 +505,8 @@ Global
|
||||
{8098BAFC-DF1C-4AFA-A93E-08121E6D09D4}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{2319C00F-B268-4E4C-9F88-6B379E2BBD22}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{2319C00F-B268-4E4C-9F88-6B379E2BBD22}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{2319C00F-B268-4E4C-9F88-6B379E2BBD22}.Local|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{2319C00F-B268-4E4C-9F88-6B379E2BBD22}.Local|Any CPU.Build.0 = Release|Any CPU
|
||||
{2319C00F-B268-4E4C-9F88-6B379E2BBD22}.Local|Any CPU.ActiveCfg = Local|Any CPU
|
||||
{2319C00F-B268-4E4C-9F88-6B379E2BBD22}.Local|Any CPU.Build.0 = Local|Any CPU
|
||||
{2319C00F-B268-4E4C-9F88-6B379E2BBD22}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{2319C00F-B268-4E4C-9F88-6B379E2BBD22}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{9EF292C6-1333-4502-AD9C-224D99847185}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
@@ -511,14 +517,14 @@ Global
|
||||
{9EF292C6-1333-4502-AD9C-224D99847185}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{81FCEE13-FEAC-475D-9EF9-71132EF26909}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{81FCEE13-FEAC-475D-9EF9-71132EF26909}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{81FCEE13-FEAC-475D-9EF9-71132EF26909}.Local|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{81FCEE13-FEAC-475D-9EF9-71132EF26909}.Local|Any CPU.Build.0 = Debug|Any CPU
|
||||
{81FCEE13-FEAC-475D-9EF9-71132EF26909}.Local|Any CPU.ActiveCfg = Local|Any CPU
|
||||
{81FCEE13-FEAC-475D-9EF9-71132EF26909}.Local|Any CPU.Build.0 = Local|Any CPU
|
||||
{81FCEE13-FEAC-475D-9EF9-71132EF26909}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{81FCEE13-FEAC-475D-9EF9-71132EF26909}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{AFAB80BD-A4DD-4CAD-9937-ACBFED668A48}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AFAB80BD-A4DD-4CAD-9937-ACBFED668A48}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AFAB80BD-A4DD-4CAD-9937-ACBFED668A48}.Local|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AFAB80BD-A4DD-4CAD-9937-ACBFED668A48}.Local|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AFAB80BD-A4DD-4CAD-9937-ACBFED668A48}.Local|Any CPU.ActiveCfg = Local|Any CPU
|
||||
{AFAB80BD-A4DD-4CAD-9937-ACBFED668A48}.Local|Any CPU.Build.0 = Local|Any CPU
|
||||
{AFAB80BD-A4DD-4CAD-9937-ACBFED668A48}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{AFAB80BD-A4DD-4CAD-9937-ACBFED668A48}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{5CDEC958-708E-4D19-A79E-0C1DB23A6039}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
@@ -535,26 +541,26 @@ Global
|
||||
{842F4BFD-3997-485D-BAB5-9419C1D982F2}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{4459F2B1-A340-488E-A856-EB2AE9C72AD4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{4459F2B1-A340-488E-A856-EB2AE9C72AD4}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{4459F2B1-A340-488E-A856-EB2AE9C72AD4}.Local|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{4459F2B1-A340-488E-A856-EB2AE9C72AD4}.Local|Any CPU.Build.0 = Debug|Any CPU
|
||||
{4459F2B1-A340-488E-A856-EB2AE9C72AD4}.Local|Any CPU.ActiveCfg = Local|Any CPU
|
||||
{4459F2B1-A340-488E-A856-EB2AE9C72AD4}.Local|Any CPU.Build.0 = Local|Any CPU
|
||||
{4459F2B1-A340-488E-A856-EB2AE9C72AD4}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{4459F2B1-A340-488E-A856-EB2AE9C72AD4}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{DB31E57B-60FC-49BE-91E0-1374290BCF03}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{DB31E57B-60FC-49BE-91E0-1374290BCF03}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{DB31E57B-60FC-49BE-91E0-1374290BCF03}.Local|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{DB31E57B-60FC-49BE-91E0-1374290BCF03}.Local|Any CPU.Build.0 = Debug|Any CPU
|
||||
{DB31E57B-60FC-49BE-91E0-1374290BCF03}.Local|Any CPU.ActiveCfg = Local|Any CPU
|
||||
{DB31E57B-60FC-49BE-91E0-1374290BCF03}.Local|Any CPU.Build.0 = Local|Any CPU
|
||||
{DB31E57B-60FC-49BE-91E0-1374290BCF03}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{DB31E57B-60FC-49BE-91E0-1374290BCF03}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{ACF75860-7FCE-4AE9-8C45-68AD1043550B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{ACF75860-7FCE-4AE9-8C45-68AD1043550B}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{ACF75860-7FCE-4AE9-8C45-68AD1043550B}.Local|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{ACF75860-7FCE-4AE9-8C45-68AD1043550B}.Local|Any CPU.Build.0 = Debug|Any CPU
|
||||
{ACF75860-7FCE-4AE9-8C45-68AD1043550B}.Local|Any CPU.ActiveCfg = Local|Any CPU
|
||||
{ACF75860-7FCE-4AE9-8C45-68AD1043550B}.Local|Any CPU.Build.0 = Local|Any CPU
|
||||
{ACF75860-7FCE-4AE9-8C45-68AD1043550B}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{ACF75860-7FCE-4AE9-8C45-68AD1043550B}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{025C85F8-F741-4600-BC46-5FEAD754B65D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{025C85F8-F741-4600-BC46-5FEAD754B65D}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{025C85F8-F741-4600-BC46-5FEAD754B65D}.Local|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{025C85F8-F741-4600-BC46-5FEAD754B65D}.Local|Any CPU.Build.0 = Debug|Any CPU
|
||||
{025C85F8-F741-4600-BC46-5FEAD754B65D}.Local|Any CPU.ActiveCfg = Local|Any CPU
|
||||
{025C85F8-F741-4600-BC46-5FEAD754B65D}.Local|Any CPU.Build.0 = Local|Any CPU
|
||||
{025C85F8-F741-4600-BC46-5FEAD754B65D}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{025C85F8-F741-4600-BC46-5FEAD754B65D}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{8F9181C2-1808-44C0-A33A-5BAE40C49E63}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
@@ -583,20 +589,20 @@ Global
|
||||
{115D6106-1801-484A-B4E5-BCC94B6E5C7F}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{791E3288-8001-4D54-8EAB-03D1D7F51044}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{791E3288-8001-4D54-8EAB-03D1D7F51044}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{791E3288-8001-4D54-8EAB-03D1D7F51044}.Local|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{791E3288-8001-4D54-8EAB-03D1D7F51044}.Local|Any CPU.Build.0 = Debug|Any CPU
|
||||
{791E3288-8001-4D54-8EAB-03D1D7F51044}.Local|Any CPU.ActiveCfg = Local|Any CPU
|
||||
{791E3288-8001-4D54-8EAB-03D1D7F51044}.Local|Any CPU.Build.0 = Local|Any CPU
|
||||
{791E3288-8001-4D54-8EAB-03D1D7F51044}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{791E3288-8001-4D54-8EAB-03D1D7F51044}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{D61ECD90-3D17-4AF0-8B1A-0E0AD302DFF9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{D61ECD90-3D17-4AF0-8B1A-0E0AD302DFF9}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{D61ECD90-3D17-4AF0-8B1A-0E0AD302DFF9}.Local|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{D61ECD90-3D17-4AF0-8B1A-0E0AD302DFF9}.Local|Any CPU.Build.0 = Debug|Any CPU
|
||||
{D61ECD90-3D17-4AF0-8B1A-0E0AD302DFF9}.Local|Any CPU.ActiveCfg = Local|Any CPU
|
||||
{D61ECD90-3D17-4AF0-8B1A-0E0AD302DFF9}.Local|Any CPU.Build.0 = Local|Any CPU
|
||||
{D61ECD90-3D17-4AF0-8B1A-0E0AD302DFF9}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{D61ECD90-3D17-4AF0-8B1A-0E0AD302DFF9}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{8C14D930-03D2-4E2F-9D8D-A6B57F57A659}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{8C14D930-03D2-4E2F-9D8D-A6B57F57A659}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{8C14D930-03D2-4E2F-9D8D-A6B57F57A659}.Local|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{8C14D930-03D2-4E2F-9D8D-A6B57F57A659}.Local|Any CPU.Build.0 = Debug|Any CPU
|
||||
{8C14D930-03D2-4E2F-9D8D-A6B57F57A659}.Local|Any CPU.ActiveCfg = Local|Any CPU
|
||||
{8C14D930-03D2-4E2F-9D8D-A6B57F57A659}.Local|Any CPU.Build.0 = Local|Any CPU
|
||||
{8C14D930-03D2-4E2F-9D8D-A6B57F57A659}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{8C14D930-03D2-4E2F-9D8D-A6B57F57A659}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{B12D6A2E-51FD-4197-B442-46C7D8F5E4E4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
@@ -607,8 +613,8 @@ Global
|
||||
{B12D6A2E-51FD-4197-B442-46C7D8F5E4E4}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{B6985672-4704-4F86-A3E0-2310BF8E6D73}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{B6985672-4704-4F86-A3E0-2310BF8E6D73}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{B6985672-4704-4F86-A3E0-2310BF8E6D73}.Local|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{B6985672-4704-4F86-A3E0-2310BF8E6D73}.Local|Any CPU.Build.0 = Debug|Any CPU
|
||||
{B6985672-4704-4F86-A3E0-2310BF8E6D73}.Local|Any CPU.ActiveCfg = Local|Any CPU
|
||||
{B6985672-4704-4F86-A3E0-2310BF8E6D73}.Local|Any CPU.Build.0 = Local|Any CPU
|
||||
{B6985672-4704-4F86-A3E0-2310BF8E6D73}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{B6985672-4704-4F86-A3E0-2310BF8E6D73}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{56680EA7-3599-4D88-83A5-B43BA93AC046}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
@@ -643,38 +649,38 @@ Global
|
||||
{0B5AB325-3791-4A81-B0EF-BCA040381BE2}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{C635619C-2938-4E6F-9E25-56CE1632A7EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{C635619C-2938-4E6F-9E25-56CE1632A7EC}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{C635619C-2938-4E6F-9E25-56CE1632A7EC}.Local|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{C635619C-2938-4E6F-9E25-56CE1632A7EC}.Local|Any CPU.Build.0 = Debug|Any CPU
|
||||
{C635619C-2938-4E6F-9E25-56CE1632A7EC}.Local|Any CPU.ActiveCfg = Local|Any CPU
|
||||
{C635619C-2938-4E6F-9E25-56CE1632A7EC}.Local|Any CPU.Build.0 = Local|Any CPU
|
||||
{C635619C-2938-4E6F-9E25-56CE1632A7EC}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{C635619C-2938-4E6F-9E25-56CE1632A7EC}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{04FC86A3-2E25-41A1-98C5-10898616CD78}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{04FC86A3-2E25-41A1-98C5-10898616CD78}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{04FC86A3-2E25-41A1-98C5-10898616CD78}.Local|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{04FC86A3-2E25-41A1-98C5-10898616CD78}.Local|Any CPU.Build.0 = Debug|Any CPU
|
||||
{04FC86A3-2E25-41A1-98C5-10898616CD78}.Local|Any CPU.ActiveCfg = Local|Any CPU
|
||||
{04FC86A3-2E25-41A1-98C5-10898616CD78}.Local|Any CPU.Build.0 = Local|Any CPU
|
||||
{04FC86A3-2E25-41A1-98C5-10898616CD78}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{04FC86A3-2E25-41A1-98C5-10898616CD78}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{FD44E1F0-D20A-49B6-ADC9-482D911A74FB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{FD44E1F0-D20A-49B6-ADC9-482D911A74FB}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{FD44E1F0-D20A-49B6-ADC9-482D911A74FB}.Local|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{FD44E1F0-D20A-49B6-ADC9-482D911A74FB}.Local|Any CPU.Build.0 = Debug|Any CPU
|
||||
{FD44E1F0-D20A-49B6-ADC9-482D911A74FB}.Local|Any CPU.ActiveCfg = Local|Any CPU
|
||||
{FD44E1F0-D20A-49B6-ADC9-482D911A74FB}.Local|Any CPU.Build.0 = Local|Any CPU
|
||||
{FD44E1F0-D20A-49B6-ADC9-482D911A74FB}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{FD44E1F0-D20A-49B6-ADC9-482D911A74FB}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{7791806E-7531-41D8-9C9D-4A1249D9F99C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{7791806E-7531-41D8-9C9D-4A1249D9F99C}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{7791806E-7531-41D8-9C9D-4A1249D9F99C}.Local|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{7791806E-7531-41D8-9C9D-4A1249D9F99C}.Local|Any CPU.Build.0 = Debug|Any CPU
|
||||
{7791806E-7531-41D8-9C9D-4A1249D9F99C}.Local|Any CPU.ActiveCfg = Local|Any CPU
|
||||
{7791806E-7531-41D8-9C9D-4A1249D9F99C}.Local|Any CPU.Build.0 = Local|Any CPU
|
||||
{7791806E-7531-41D8-9C9D-4A1249D9F99C}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{7791806E-7531-41D8-9C9D-4A1249D9F99C}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{E6B7A640-F85C-41C9-8226-B5310A98822D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{E6B7A640-F85C-41C9-8226-B5310A98822D}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{E6B7A640-F85C-41C9-8226-B5310A98822D}.Local|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{E6B7A640-F85C-41C9-8226-B5310A98822D}.Local|Any CPU.Build.0 = Debug|Any CPU
|
||||
{E6B7A640-F85C-41C9-8226-B5310A98822D}.Local|Any CPU.ActiveCfg = Local|Any CPU
|
||||
{E6B7A640-F85C-41C9-8226-B5310A98822D}.Local|Any CPU.Build.0 = Local|Any CPU
|
||||
{E6B7A640-F85C-41C9-8226-B5310A98822D}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{E6B7A640-F85C-41C9-8226-B5310A98822D}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{FCD6CB79-6B41-4448-99E1-787408AD24B0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{FCD6CB79-6B41-4448-99E1-787408AD24B0}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{FCD6CB79-6B41-4448-99E1-787408AD24B0}.Local|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{FCD6CB79-6B41-4448-99E1-787408AD24B0}.Local|Any CPU.Build.0 = Debug|Any CPU
|
||||
{FCD6CB79-6B41-4448-99E1-787408AD24B0}.Local|Any CPU.ActiveCfg = Local|Any CPU
|
||||
{FCD6CB79-6B41-4448-99E1-787408AD24B0}.Local|Any CPU.Build.0 = Local|Any CPU
|
||||
{FCD6CB79-6B41-4448-99E1-787408AD24B0}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{FCD6CB79-6B41-4448-99E1-787408AD24B0}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{17FB6920-DF63-4D94-86A4-F1619D501C6D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
@@ -685,8 +691,8 @@ Global
|
||||
{17FB6920-DF63-4D94-86A4-F1619D501C6D}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{F86DFA8A-E2E0-4EBE-9BAF-72AE2698EDC6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{F86DFA8A-E2E0-4EBE-9BAF-72AE2698EDC6}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{F86DFA8A-E2E0-4EBE-9BAF-72AE2698EDC6}.Local|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{F86DFA8A-E2E0-4EBE-9BAF-72AE2698EDC6}.Local|Any CPU.Build.0 = Debug|Any CPU
|
||||
{F86DFA8A-E2E0-4EBE-9BAF-72AE2698EDC6}.Local|Any CPU.ActiveCfg = Local|Any CPU
|
||||
{F86DFA8A-E2E0-4EBE-9BAF-72AE2698EDC6}.Local|Any CPU.Build.0 = Local|Any CPU
|
||||
{F86DFA8A-E2E0-4EBE-9BAF-72AE2698EDC6}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{F86DFA8A-E2E0-4EBE-9BAF-72AE2698EDC6}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{B740A025-1035-4A75-865B-7825857D610C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
@@ -743,6 +749,18 @@ Global
|
||||
{EC0E8472-2C5F-424B-B868-7BBA272DF611}.Local|Any CPU.Build.0 = Local|Any CPU
|
||||
{EC0E8472-2C5F-424B-B868-7BBA272DF611}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{EC0E8472-2C5F-424B-B868-7BBA272DF611}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{6006ECF4-FAEC-4200-B3A1-9B5A670AAF42}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{6006ECF4-FAEC-4200-B3A1-9B5A670AAF42}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{6006ECF4-FAEC-4200-B3A1-9B5A670AAF42}.Local|Any CPU.ActiveCfg = Local|Any CPU
|
||||
{6006ECF4-FAEC-4200-B3A1-9B5A670AAF42}.Local|Any CPU.Build.0 = Local|Any CPU
|
||||
{6006ECF4-FAEC-4200-B3A1-9B5A670AAF42}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{6006ECF4-FAEC-4200-B3A1-9B5A670AAF42}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{F98F97AC-D862-4750-B952-FBE4E9EE0EBA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{F98F97AC-D862-4750-B952-FBE4E9EE0EBA}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{F98F97AC-D862-4750-B952-FBE4E9EE0EBA}.Local|Any CPU.ActiveCfg = Local|Any CPU
|
||||
{F98F97AC-D862-4750-B952-FBE4E9EE0EBA}.Local|Any CPU.Build.0 = Local|Any CPU
|
||||
{F98F97AC-D862-4750-B952-FBE4E9EE0EBA}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{F98F97AC-D862-4750-B952-FBE4E9EE0EBA}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
@@ -876,6 +894,9 @@ Global
|
||||
{57D5EEC9-082C-4882-BA7A-956088A2B820} = {1D9F4468-A382-4D25-8195-F93A884B14DA}
|
||||
{17AFD669-AECB-4A45-AE09-BD1BF8248BDA} = {1D9F4468-A382-4D25-8195-F93A884B14DA}
|
||||
{EC0E8472-2C5F-424B-B868-7BBA272DF611} = {1D9F4468-A382-4D25-8195-F93A884B14DA}
|
||||
{6B2DFE65-31AF-474E-87BD-E85E53D290C1} = {D92751C8-1039-4005-90B2-913E55E0B8BD}
|
||||
{6006ECF4-FAEC-4200-B3A1-9B5A670AAF42} = {6B2DFE65-31AF-474E-87BD-E85E53D290C1}
|
||||
{F98F97AC-D862-4750-B952-FBE4E9EE0EBA} = {6B2DFE65-31AF-474E-87BD-E85E53D290C1}
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {EE253116-7070-4E9A-BCE8-2911C251B8C8}
|
||||
@@ -915,6 +936,7 @@ Global
|
||||
Converters\Autocad\Speckle.Converters.AutocadShared\Speckle.Converters.AutocadShared.projitems*{5cdec958-708e-4d19-a79e-0c1db23a6039}*SharedItemsImports = 5
|
||||
Converters\Civil3d\Speckle.Converters.Civil3dShared\Speckle.Converters.Civil3dShared.projitems*{5cdec958-708e-4d19-a79e-0c1db23a6039}*SharedItemsImports = 5
|
||||
Connectors\CSi\Speckle.Connectors.ETABSShared\Speckle.Connectors.ETABSShared.projitems*{5d1e0b0d-56a7-4e13-b9a9-8633e02b8f17}*SharedItemsImports = 13
|
||||
Converters\Revit\Speckle.Converters.RevitShared\Speckle.Converters.RevitShared.projitems*{6006ecf4-faec-4200-b3a1-9b5a670aaf42}*SharedItemsImports = 5
|
||||
Converters\Navisworks\Speckle.Converters.NavisworksShared\Speckle.Converters.NavisworksShared.projitems*{6101b44d-3805-4aa1-b8d0-e06c461ed202}*SharedItemsImports = 5
|
||||
Connectors\Revit\Speckle.Connectors.RevitShared.Cef\Speckle.Connectors.RevitShared.Cef.projitems*{617bd3c7-87d9-4d28-8ac9-4910945bb9fc}*SharedItemsImports = 5
|
||||
Connectors\Revit\Speckle.Connectors.RevitShared\Speckle.Connectors.RevitShared.projitems*{617bd3c7-87d9-4d28-8ac9-4910945bb9fc}*SharedItemsImports = 5
|
||||
@@ -972,6 +994,7 @@ Global
|
||||
Connectors\Autocad\Speckle.Connectors.AutocadShared\Speckle.Connectors.AutocadShared.projitems*{ec0e8472-2c5f-424b-b868-7bba272df611}*SharedItemsImports = 5
|
||||
Connectors\Autocad\Speckle.Connectors.Civil3dShared\Speckle.Connectors.Civil3dShared.projitems*{ec0e8472-2c5f-424b-b868-7bba272df611}*SharedItemsImports = 5
|
||||
Converters\Navisworks\Speckle.Converters.NavisworksShared\Speckle.Converters.NavisworksShared.projitems*{f8cc203d-e0dc-42da-99c1-ca07fdbceccc}*SharedItemsImports = 5
|
||||
Connectors\Revit\Speckle.Connectors.RevitShared\Speckle.Connectors.RevitShared.projitems*{f98f97ac-d862-4750-b952-fbe4e9ee0eba}*SharedItemsImports = 5
|
||||
Connectors\Navisworks\Speckle.Connectors.NavisworksShared\Speckle.Connectors.NavisworksShared.projitems*{fd44e1f0-d20a-49b6-adc9-482d911a74fb}*SharedItemsImports = 5
|
||||
Connectors\Navisworks\Speckle.Connectors.NavisworksShared\Speckle.Connectors.NavisworksShared.projitems*{fe797118-07cb-44a7-a779-68ff3b69ee40}*SharedItemsImports = 5
|
||||
EndGlobalSection
|
||||
|
||||
Reference in New Issue
Block a user