public static DynamoController_Revit CreateDynamoRevitControllerAndViewModel(RevitServicesUpdater updater, DynamoLogger logger, string context) { BaseUnit.HostApplicationInternalAreaUnit = DynamoAreaUnit.SquareFoot; BaseUnit.HostApplicationInternalLengthUnit = DynamoLengthUnit.DecimalFoot; BaseUnit.HostApplicationInternalVolumeUnit = DynamoVolumeUnit.CubicFoot; var updateManager = new UpdateManager.UpdateManager(logger); var dynamoController = new DynamoController_Revit(updater, context, updateManager); // Generate a view model to be the data context for the view dynamoController.DynamoViewModel = new DynamoRevitViewModel(dynamoController, null); dynamoController.DynamoViewModel.RequestAuthentication += ((DynamoController_Revit)dynamoController).RegisterSingleSignOn; dynamoController.DynamoViewModel.CurrentSpaceViewModel.CanFindNodesFromElements = true; dynamoController.DynamoViewModel.CurrentSpaceViewModel.FindNodesFromElements = ((DynamoController_Revit)dynamoController).FindNodesFromSelection; // Register the view model to handle sign-on requests dynSettings.Controller.DynamoViewModel.RequestAuthentication += ((DynamoController_Revit)dynamoController).RegisterSingleSignOn; dynamoController.VisualizationManager = new VisualizationManagerRevit(); return(dynamoController); }
public DynamoController_Revit(RevitServicesUpdater updater, string context, IUpdateManager updateManager, ILogger logger) : base( context, updateManager, logger, new RevitWatchHandler(), Dynamo.PreferenceSettings.Load()) { Updater = updater; dynRevitSettings.Controller = this; DocumentManager.Instance.CurrentUIApplication.Application.DocumentClosed += Application_DocumentClosed; DocumentManager.Instance.CurrentUIApplication.Application.DocumentOpened += Application_DocumentOpened; DocumentManager.Instance.CurrentUIApplication.ViewActivated += Revit_ViewActivated; TransactionWrapper = TransactionManager.Instance.TransactionWrapper; TransactionWrapper.TransactionStarted += TransactionManager_TransactionCommitted; TransactionWrapper.TransactionCancelled += TransactionManager_TransactionCancelled; TransactionWrapper.FailuresRaised += TransactionManager_FailuresRaised; MigrationManager.Instance.MigrationTargets.Add(typeof(WorkspaceMigrationsRevit)); ElementNameStore = new Dictionary <ElementId, string>(); EngineController.ImportLibrary("RevitNodes.dll"); }
private void StartDynamo() { try { var updater = new RevitServicesUpdater(DynamoRevitApp.ControlledApplication, DynamoRevitApp.Updaters); updater.ElementAddedForID += ElementMappingCache.GetInstance().WatcherMethodForAdd; updater.ElementsDeleted += ElementMappingCache.GetInstance().WatcherMethodForDelete; SIUnit.HostApplicationInternalAreaUnit = DynamoAreaUnit.SquareFoot; SIUnit.HostApplicationInternalLengthUnit = DynamoLengthUnit.DecimalFoot; SIUnit.HostApplicationInternalVolumeUnit = DynamoVolumeUnit.CubicFoot; var logger = new DynamoLogger(); dynSettings.DynamoLogger = logger; var updateManager = new UpdateManager.UpdateManager(logger); Controller = DynamoRevit.CreateDynamoRevitControllerAndViewModel(updater, logger, Context.NONE); DynamoController.IsTestMode = true; // create the transaction manager object TransactionManager.SetupManager(new AutomaticTransactionStrategy()); // Because the test framework does not work in the idle thread. // We need to trick Dynamo into believing that it's in the idle // thread already. IdlePromise.InIdleThread = true; } catch (Exception ex) { Console.WriteLine(ex.StackTrace); } }
public DynamoController_Revit(RevitServicesUpdater updater, string context, IUpdateManager updateManager, string corePath) : base( context, updateManager, new RevitWatchHandler(), Dynamo.PreferenceSettings.Load(), corePath) { Updater = updater; dynRevitSettings.Controller = this; DocumentManager.Instance.CurrentUIApplication.Application.DocumentClosed += Application_DocumentClosed; DocumentManager.Instance.CurrentUIApplication.Application.DocumentOpened += Application_DocumentOpened; DocumentManager.Instance.CurrentUIApplication.ViewActivated += Revit_ViewActivated; // Set the intitial document. if (DocumentManager.Instance.CurrentUIApplication.ActiveUIDocument != null) { DocumentManager.Instance.CurrentUIDocument = DocumentManager.Instance.CurrentUIApplication.ActiveUIDocument; dynSettings.DynamoLogger.LogWarning(GetDocumentPointerMessage(), WarningLevel.Moderate); } TransactionWrapper = TransactionManager.Instance.TransactionWrapper; TransactionWrapper.TransactionStarted += TransactionManager_TransactionCommitted; TransactionWrapper.TransactionCancelled += TransactionManager_TransactionCancelled; TransactionWrapper.FailuresRaised += TransactionManager_FailuresRaised; MigrationManager.Instance.MigrationTargets.Add(typeof(WorkspaceMigrationsRevit)); ElementNameStore = new Dictionary <ElementId, string>(); var revitPath = Path.Combine(DynamoPaths.MainExecPath, @"Revit_2014\RevitNodes.dll"); var raasPath = Path.Combine(DynamoPaths.MainExecPath, @"Revit_2014\SimpleRaaS.dll"); EngineController.ImportLibrary(revitPath); EngineController.ImportLibrary(raasPath); //IronPythonEvaluator.InputMarshaler.RegisterMarshaler((WrappedElement element) => element.InternalElement); IronPythonEvaluator.OutputMarshaler.RegisterMarshaler((Element element) => element.ToDSType(true)); //IronPythonEvaluator.OutputMarshaler.RegisterMarshaler((IList<Element> elements) => elements.Select(e=>e.ToDSType(true))); // Turn off element binding during iron python script execution IronPythonEvaluator.EvaluationBegin += (a, b, c, d, e) => ElementBinder.IsEnabled = false; IronPythonEvaluator.EvaluationEnd += (a, b, c, d, e) => ElementBinder.IsEnabled = true; // register UnwrapElement method in ironpython IronPythonEvaluator.EvaluationBegin += (a, b, scope, d, e) => { var marshaler = new DataMarshaler(); marshaler.RegisterMarshaler((WrappedElement element) => element.InternalElement); Func <WrappedElement, object> unwrap = marshaler.Marshal; scope.SetVariable("UnwrapElement", unwrap); }; Runner = new DynamoRunner_Revit(this); }
public void Regressions(RegressionTestData testData) { Exception exception = null; try { var dynamoFilePath = testData.Arguments[0].ToString(); var revitFilePath = testData.Arguments[1].ToString(); //ensure that the incoming arguments are not empty or null //if a dyn file is found in the regression tests directory //and there is no corresponding rfa or rvt, then an empty string //or a null will be passed into here. Assert.IsNotNullOrEmpty(dynamoFilePath, "Dynamo file path is invalid or missing."); Assert.IsNotNullOrEmpty(revitFilePath, "Revit file path is invalid or missing."); //open the revit model SwapCurrentModel(revitFilePath); //Ensure SystemTestBase picks up the right directory. pathResolver = new RevitTestPathResolver(); (pathResolver as RevitTestPathResolver).InitializePreloadedLibraries(); //Setup should be called after swapping document, so that RevitDynamoModel //is now associated with swapped model. Setup(); //open the dyn file ViewModel.OpenCommand.Execute(dynamoFilePath); Assert.IsTrue(ViewModel.Model.CurrentWorkspace.Nodes.Count > 0); AssertNoDummyNodes(); //run the expression and assert that it does not //throw an error RunCurrentModel(); var errorNodes = ViewModel.Model.CurrentWorkspace.Nodes.Where( x => x.State == ElementState.Error || x.State == ElementState.Warning); Assert.AreEqual(0, errorNodes.Count()); } catch (Exception ex) { exception = ex; } finally { ViewModel.Model.ShutDown(false); ViewModel = null; RevitServicesUpdater.DisposeInstance(); TearDown(); } if (exception != null) { Assert.Fail(exception.Message); } }
protected override void ShutDownCore(bool shutDownHost) { DisposeLogic.IsShuttingDown = true; base.ShutDownCore(shutDownHost); // unsubscribe events RevitServicesUpdater.Instance.UnRegisterAllChangeHooks(); UnsubscribeApplicationEvents(externalCommandData); UnsubscribeDocumentManagerEvents(); UnsubscribeRevitServicesUpdaterEvents(); UnsubscribeTransactionManagerEvents(); RevitServicesUpdater.DisposeInstance(); ElementIDLifecycleManager <int> .DisposeInstance(); }
public Result OnShutdown(UIControlledApplication application) { if (dynamoCommand != null) { dynamoCommand.BeforeExecuted -= beforeExecuted; dynamoCommand.CanExecute -= canExecute; dynamoCommand.Executed -= executed; dynamoCommand = null; } UnsubscribeAssemblyEvents(); UnsubscribeApplicationEvents(); UnsubscribeDocumentChangedEvent(); RevitServicesUpdater.DisposeInstance(); return(Result.Succeeded); }
private RevitDynamoModel(StartConfiguration configuration) : base(configuration) { string context = configuration.Context; IPreferences preferences = configuration.Preferences; string corePath = configuration.DynamoCorePath; bool isTestMode = configuration.StartInTestMode; RevitServicesUpdater = new RevitServicesUpdater(DynamoRevitApp.ControlledApplication, DynamoRevitApp.Updaters); SubscribeRevitServicesUpdaterEvents(); InitializeDocumentManager(); SubscribeDocumentManagerEvents(); SubscribeTransactionManagerEvents(); SetupPython(); }
private RevitDynamoModel(IRevitStartConfiguration configuration) : base(configuration) { DisposeLogic.IsShuttingDown = false; externalCommandData = configuration.ExternalCommandData; RevitServicesUpdater.Initialize(DynamoRevitApp.ControlledApplication, DynamoRevitApp.Updaters); SubscribeRevitServicesUpdaterEvents(); SubscribeApplicationEvents(configuration.ExternalCommandData); InitializeDocumentManager(); SubscribeDocumentManagerEvents(); SubscribeTransactionManagerEvents(); SetupPython(); }
private RevitDynamoModel(IRevitStartConfiguration configuration) : base(configuration) { externalCommandData = configuration.ExternalCommandData; RevitServicesUpdater.Initialize(DynamoRevitApp.ControlledApplication, DynamoRevitApp.Updaters); SubscribeRevitServicesUpdaterEvents(); SubscribeApplicationEvents(configuration.ExternalCommandData); InitializeDocumentManager(); SubscribeDocumentManagerEvents(); SubscribeTransactionManagerEvents(); MigrationManager.MigrationTargets.Add(typeof(WorkspaceMigrationsRevit)); SetupPython(); WorkspaceEvents.WorkspaceAdded += WorkspaceEvents_WorkspaceAdded; }
public Result OnStartup(UIControlledApplication application) { try { if (false == TryResolveDynamoCore()) { return(Result.Failed); } UIControlledApplication = application; ControlledApplication = application.ControlledApplication; SubscribeAssemblyEvents(); SubscribeApplicationEvents(); TransactionManager.SetupManager(new AutomaticTransactionStrategy()); ElementBinder.IsEnabled = true; var dynamoCmdId = RevitCommandId.LookupCommandId("ID_VISUAL_PROGRAMMING_DYNAMO"); dynamoCommand = application.CreateAddInCommandBinding(dynamoCmdId); dynamoCommand.CanExecute += canExecute; dynamoCommand.BeforeExecuted += beforeExecuted; dynamoCommand.Executed += executed; DynamoButtonEnabled = true; //initialize RegisterAdditionalUpdaters(application); RevitServicesUpdater.Initialize(DynamoRevitApp.Updaters); SubscribeDocumentChangedEvent(); loadDependentComponents(); return(Result.Succeeded); } catch (Exception ex) { MessageBox.Show(ex.ToString()); return(Result.Failed); } }
public Result Execute(ExternalCommandData revit, ref string message, ElementSet elements) { if (revit.JournalData != null && revit.JournalData.ContainsKey("debug")) { if (bool.Parse(revit.JournalData["debug"])) { Debugger.Launch(); } } AppDomain.CurrentDomain.AssemblyResolve += AssemblyHelper.CurrentDomain_AssemblyResolve; AppDomain.CurrentDomain.AssemblyResolve += Analyze.Render.AssemblyHelper.ResolveAssemblies; //Add an assembly load step for the System.Windows.Interactivity assembly //Revit owns a version of this as well. Adding our step here prevents a duplicative //load of the dll at a later time. var assLoc = Assembly.GetExecutingAssembly().Location; var interactivityPath = Path.Combine(Path.GetDirectoryName(assLoc), "System.Windows.Interactivity.dll"); var interactivityAss = Assembly.LoadFrom(interactivityPath); DynamoRevitApp.dynamoButton.Enabled = false; try { #region default level var fecLevel = new FilteredElementCollector(revit.Application.ActiveUIDocument.Document); fecLevel.OfClass(typeof(Level)); var defaultLevel = fecLevel.ToElements()[0] as Level; #endregion var logger = new DynamoLogger(); dynSettings.DynamoLogger = logger; if (DocumentManager.Instance.CurrentUIApplication == null) { DocumentManager.Instance.CurrentUIApplication = revit.Application; } DocumentManager.OnLogError += dynSettings.DynamoLogger.Log; dynRevitSettings.DefaultLevel = defaultLevel; //TODO: has to be changed when we handle multiple docs Updater = new RevitServicesUpdater(DynamoRevitApp.ControlledApplication, DynamoRevitApp.Updaters); Updater.ElementAddedForID += ElementMappingCache.GetInstance().WatcherMethodForAdd; Updater.ElementsDeleted += ElementMappingCache.GetInstance().WatcherMethodForDelete; RevThread.IdlePromise.ExecuteOnIdleAsync( delegate { //get window handle IntPtr mwHandle = Process.GetCurrentProcess().MainWindowHandle; var r = new Regex(@"\b(Autodesk |Structure |MEP |Architecture )\b"); string context = r.Replace(revit.Application.Application.VersionName, ""); //they changed the application version name conventions for vasari //it no longer has a version year so we can't compare it to other versions //TODO:come up with a more stable way to test for Vasari beta 3 if (context == "Vasari") { context = "Vasari 2014"; } dynamoController = CreateDynamoRevitControllerAndViewModel(Updater, logger, context); var dynamoView = new DynamoView { DataContext = dynamoController.DynamoViewModel }; dynamoController.UIDispatcher = dynamoView.Dispatcher; //set window handle and show dynamo new WindowInteropHelper(dynamoView).Owner = mwHandle; handledCrash = false; dynamoView.Show(); if (revit.JournalData != null && revit.JournalData.ContainsKey("dynPath")) { dynamoController.DynamoModel.OpenWorkspace(revit.JournalData["dynPath"]); } dynamoView.Dispatcher.UnhandledException += DispatcherOnUnhandledException; dynamoView.Closing += dynamoView_Closing; dynamoView.Closed += dynamoView_Closed; revit.Application.ViewActivating += Application_ViewActivating; }); } catch (Exception ex) { //isRunning = false; MessageBox.Show(ex.ToString()); dynSettings.DynamoLogger.LogError(ex.Message); dynSettings.DynamoLogger.LogError(ex.StackTrace); dynSettings.DynamoLogger.LogError("Dynamo log ended " + DateTime.Now); return(Result.Failed); } return(Result.Succeeded); }
public Result Execute(ExternalCommandData revit, ref string message, ElementSet elements) { AppDomain.CurrentDomain.AssemblyResolve += AssemblyHelper.CurrentDomain_AssemblyResolve; AppDomain.CurrentDomain.AssemblyResolve += DynamoRaaS.AssemblyHelper.ResolveAssemblies; //Add an assembly load step for the System.Windows.Interactivity assembly //Revit owns a version of this as well. Adding our step here prevents a duplicative //load of the dll at a later time. var assLoc = Assembly.GetExecutingAssembly().Location; var interactivityPath = Path.Combine(Path.GetDirectoryName(assLoc), "System.Windows.Interactivity.dll"); var interactivityAss = Assembly.LoadFrom(interactivityPath); //When a user double-clicks the Dynamo icon, we need to make //sure that we don't create another instance of Dynamo. if (isRunning) { Debug.WriteLine("Dynamo is already running."); if (dynamoView != null) { dynamoView.Focus(); } return(Result.Succeeded); } isRunning = true; try { #region default level var fecLevel = new FilteredElementCollector(revit.Application.ActiveUIDocument.Document); fecLevel.OfClass(typeof(Level)); var defaultLevel = fecLevel.ToElements()[0] as Level; #endregion if (DocumentManager.Instance.CurrentUIApplication == null) { DocumentManager.Instance.CurrentUIApplication = revit.Application; } DocumentManager.OnLogError += dynSettings.Controller.DynamoLogger.Log; dynRevitSettings.DefaultLevel = defaultLevel; //TODO: has to be changed when we handle multiple docs Updater = new RevitServicesUpdater(DynamoRevitApp.ControlledApplication, DynamoRevitApp.Updaters); Updater.ElementAddedForID += ElementMappingCache.GetInstance().WatcherMethodForAdd; Updater.ElementsDeleted += ElementMappingCache.GetInstance().WatcherMethodForDelete; RevThread.IdlePromise.ExecuteOnIdleAsync( delegate { //get window handle IntPtr mwHandle = Process.GetCurrentProcess().MainWindowHandle; var r = new Regex(@"\b(Autodesk |Structure |MEP |Architecture )\b"); string context = r.Replace(revit.Application.Application.VersionName, ""); //they changed the application version name conventions for vasari //it no longer has a version year so we can't compare it to other versions //TODO:come up with a more stable way to test for Vasari beta 3 if (context == "Vasari") { context = "Vasari 2014"; } BaseUnit.HostApplicationInternalAreaUnit = DynamoAreaUnit.SquareFoot; BaseUnit.HostApplicationInternalLengthUnit = DynamoLengthUnit.DecimalFoot; BaseUnit.HostApplicationInternalVolumeUnit = DynamoVolumeUnit.CubicFoot; var logger = new DynamoLogger(); var updateManager = new UpdateManager.UpdateManager(logger); dynamoController = new DynamoController_Revit(Updater, context, updateManager, logger); // Generate a view model to be the data context for the view dynamoController.DynamoViewModel = new DynamoRevitViewModel(dynamoController, null); dynamoController.DynamoViewModel.RequestAuthentication += ((DynamoController_Revit)dynamoController).RegisterSingleSignOn; dynamoController.DynamoViewModel.CurrentSpaceViewModel.CanFindNodesFromElements = true; dynamoController.DynamoViewModel.CurrentSpaceViewModel.FindNodesFromElements = ((DynamoController_Revit)dynamoController).FindNodesFromSelection; // Register the view model to handle sign-on requests dynSettings.Controller.DynamoViewModel.RequestAuthentication += ((DynamoController_Revit)dynamoController).RegisterSingleSignOn; dynamoController.VisualizationManager = new VisualizationManagerRevit(); dynamoView = new DynamoView { DataContext = dynamoController.DynamoViewModel }; dynamoController.UIDispatcher = dynamoView.Dispatcher; //set window handle and show dynamo new WindowInteropHelper(dynamoView).Owner = mwHandle; handledCrash = false; dynamoView.WindowStartupLocation = WindowStartupLocation.Manual; Rectangle bounds = Screen.PrimaryScreen.Bounds; dynamoView.Left = DynamoViewX ?? bounds.X; dynamoView.Top = DynamoViewY ?? bounds.Y; dynamoView.Width = DynamoViewWidth ?? 1000.0; dynamoView.Height = DynamoViewHeight ?? 800.0; dynamoView.Show(); dynamoView.Dispatcher.UnhandledException += DispatcherOnUnhandledException; dynamoView.Closing += dynamoView_Closing; dynamoView.Closed += dynamoView_Closed; revit.Application.ViewActivating += Application_ViewActivating; }); } catch (Exception ex) { isRunning = false; MessageBox.Show(ex.ToString()); dynSettings.Controller.DynamoLogger.LogError(ex.Message); dynSettings.Controller.DynamoLogger.LogError(ex.StackTrace); dynSettings.Controller.DynamoLogger.LogError("Dynamo log ended " + DateTime.Now); return(Result.Failed); } return(Result.Succeeded); }