mirror of
https://github.com/jeremytammik/RevitSdkSamples.git
synced 2026-08-09 06:31:32 +00:00
193 lines
7.3 KiB
C#
193 lines
7.3 KiB
C#
//
|
|
// (C) Copyright 2003-2019 by Autodesk, Inc.
|
|
//
|
|
// Permission to use, copy, modify, and distribute this software in
|
|
// object code form for any purpose and without fee is hereby granted,
|
|
// provided that the above copyright notice appears in all copies and
|
|
// that both that copyright notice and the limited warranty and
|
|
// restricted rights notice below appear in all supporting
|
|
// documentation.
|
|
//
|
|
// AUTODESK PROVIDES THIS PROGRAM "AS IS" AND WITH ALL FAULTS.
|
|
// AUTODESK SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTY OF
|
|
// MERCHANTABILITY OR FITNESS FOR A PARTICULAR USE. AUTODESK, INC.
|
|
// DOES NOT WARRANT THAT THE OPERATION OF THE PROGRAM WILL BE
|
|
// UNINTERRUPTED OR ERROR FREE.
|
|
//
|
|
// Use, duplication, or disclosure by the U.S. Government is subject to
|
|
// restrictions set forth in FAR 52.227-19 (Commercial Computer
|
|
// Software - Restricted Rights) and DFAR 252.227-7013(c)(1)(ii)
|
|
// (Rights in Technical Data and Computer Software), as applicable.
|
|
//
|
|
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Windows;
|
|
using System.Windows.Controls;
|
|
using System.Windows.Data;
|
|
using System.Windows.Documents;
|
|
using System.Windows.Input;
|
|
using System.Windows.Media;
|
|
using System.Windows.Media.Imaging;
|
|
using System.Windows.Navigation;
|
|
using System.Windows.Shapes;
|
|
|
|
namespace Revit.SDK.Samples.ProgressNotifier.CS
|
|
{
|
|
/// <summary>
|
|
/// Interaction logic for MainWindow.xaml
|
|
/// </summary>
|
|
public partial class MainWindow : Window
|
|
{
|
|
/// <summary>
|
|
/// Constructor
|
|
/// </summary>
|
|
/// <param name="application"></param>
|
|
public MainWindow(Autodesk.Revit.ApplicationServices.Application application)
|
|
{
|
|
InitializeComponent();
|
|
m_application = application;
|
|
m_progressStack = new ProgressStack();
|
|
m_application.ProgressChanged += new EventHandler<Autodesk.Revit.DB.Events.ProgressChangedEventArgs>(RevitApp_ProgressChanged);
|
|
m_application.DocumentOpened += new EventHandler<Autodesk.Revit.DB.Events.DocumentOpenedEventArgs>(RevitApp_DocumentOpened);
|
|
m_cancel = false;
|
|
m_receivedCancelEvent = false;
|
|
m_previousEvent = null;
|
|
}
|
|
|
|
#region 'Event handlers for document opened and progress changed'
|
|
void RevitApp_DocumentOpened(object sender, Autodesk.Revit.DB.Events.DocumentOpenedEventArgs e)
|
|
{
|
|
textBox_log.Text += "RevitApp_DocumentOpened: Cancellable:" + e.Cancellable.ToString() + " , IsCancelled: " + e.IsCancelled().ToString() + " , Status:" + e.Status.ToString() + Environment.NewLine;
|
|
m_receivedCancelEvent = (e.Status == Autodesk.Revit.DB.Events.RevitAPIEventStatus.Cancelled);
|
|
}
|
|
void RevitApp_ProgressChanged(object sender, Autodesk.Revit.DB.Events.ProgressChangedEventArgs e)
|
|
{
|
|
|
|
if ((e.Stage == Autodesk.Revit.DB.Events.ProgressStage.Unchanged) || ((e.Stage == Autodesk.Revit.DB.Events.ProgressStage.PositionChanged) && e.Cancellable))
|
|
this.button_Cancel.IsEnabled = true;
|
|
else
|
|
this.button_Cancel.IsEnabled = false;
|
|
|
|
System.Windows.Forms.Application.DoEvents();
|
|
|
|
if (m_cancel)
|
|
{
|
|
bool shouldCancel = e.Cancellable;
|
|
if (e.IsCancelled())
|
|
textBox_log.Text += "!! We are already canceled!" + Environment.NewLine;
|
|
|
|
try
|
|
{
|
|
e.Cancel();
|
|
m_cancel = false;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
textBox_log.Text += ("Exception: " + ex.ToString() + Environment.NewLine + "' Cancelable' value: " + shouldCancel + Environment.NewLine);
|
|
}
|
|
|
|
}
|
|
|
|
|
|
ProgressItem itemReturn = m_progressStack.AddEventData(e);
|
|
|
|
this.stackPanel_ProgressData.Children.Clear();
|
|
List<string> progressItems = m_progressStack.ToStringList(6);
|
|
foreach (string progressItem in progressItems)
|
|
{
|
|
TextBox tbProgressItem = new TextBox();
|
|
tbProgressItem.Text = progressItem;
|
|
if (tbProgressItem.Text.Contains("<None>"))
|
|
{
|
|
tbProgressItem.Foreground = Brushes.LightSlateGray;
|
|
}
|
|
this.stackPanel_ProgressData.Children.Add(tbProgressItem);
|
|
}
|
|
|
|
|
|
if ((itemReturn.Stage == Autodesk.Revit.DB.Events.ProgressStage.RangeChanged) || (itemReturn.Stage == Autodesk.Revit.DB.Events.ProgressStage.Unchanged))
|
|
{
|
|
string previousEventData = "null";
|
|
if (m_previousEvent != null)
|
|
previousEventData = m_previousEvent.ToString();
|
|
|
|
// textBox_log.Text += "Previous: "+ previousEventData + Environment.NewLine + "Current: " + itemReturn.ToString() + Environment.NewLine;
|
|
}
|
|
|
|
System.Windows.Forms.Application.DoEvents();
|
|
|
|
m_previousEvent = itemReturn;
|
|
|
|
|
|
}
|
|
#endregion
|
|
|
|
|
|
#region Handlers for 'Open' and 'Cancel' buttons
|
|
private void Button_Open_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
Microsoft.Win32.OpenFileDialog ofd = new Microsoft.Win32.OpenFileDialog();
|
|
|
|
ofd.DefaultExt = ".rvt";
|
|
ofd.Filter = "rvt files (*.rvt)|*.rvt|All files (*.*)|*.*";
|
|
ofd.FilterIndex = 1;
|
|
ofd.Title = "Open revit documents.";
|
|
|
|
ofd.ShowDialog();
|
|
if (!System.IO.File.Exists(ofd.FileName))
|
|
return;
|
|
|
|
label_FileName.Content = ofd.FileName;
|
|
System.Windows.Forms.Application.DoEvents();
|
|
Autodesk.Revit.DB.Document document = null;
|
|
try
|
|
{
|
|
document = m_application.OpenDocumentFile(ofd.FileName);
|
|
this.textBox_log.Text += "Opened filename = " + document.Title + Environment.NewLine;
|
|
}
|
|
catch (System.Exception ex)
|
|
{
|
|
if (m_receivedCancelEvent)
|
|
{
|
|
string isNull;
|
|
if (document == null)
|
|
isNull = " is null.";
|
|
else
|
|
isNull = " is not null.";
|
|
|
|
this.textBox_log.Text += "Open Document has thrown an exception." + Environment.NewLine;
|
|
this.textBox_log.Text += "We just got a cancel event, so this exception is likely from 'Open' being canceled. Returned document" + isNull + Environment.NewLine;
|
|
m_receivedCancelEvent = false;
|
|
}
|
|
else
|
|
this.textBox_log.Text += ex.ToString() + Environment.NewLine;
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
private void button_Cancel_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
m_cancel = true;
|
|
}
|
|
#endregion
|
|
|
|
#region Data
|
|
Autodesk.Revit.ApplicationServices.Application m_application;
|
|
ProgressStack m_progressStack;
|
|
bool m_cancel;
|
|
|
|
private bool m_receivedCancelEvent;
|
|
private ProgressItem m_previousEvent;
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
}
|
|
}
|