using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Autodesk.Revit.UI;
using Autodesk.Revit.DB;
using Autodesk.Revit.Attributes;
using System.Diagnostics;
using System.IO;
using Autodesk.Revit.DB.Events;
namespace AutoUpdata
{
[Transaction(TransactionMode.Manual)]
public class UpdatApp : IExternalApplication
{
private TextWriterTraceListener m_txtListener;
private static string m_directory = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
private string m_tempFile = Path.Combine(m_directory, "temp.log");
public Result OnShutdown(UIControlledApplication application)
{
application.ControlledApplication.DocumentOpened -= application_DocumentOpened;
CloseLogFile();
return Result.Succeeded;
}
public Result OnStartup(UIControlledApplication application)
{
try
{
CreateTempFile();
application.ControlledApplication.DocumentOpened += new EventHandler<Autodesk.Revit.DB.Events.DocumentOpenedEventArgs>(application_DocumentOpened);
return Result.Succeeded;
}
catch (Exception)
{
return Result.Failed;
}
}
private void application_DocumentOpened(object sender, DocumentOpenedEventArgs e)
{
Trace.WriteLine("DocumentEventArgs Parameters----");
Trace.WriteLine(" Event Cancel :" + e.IsCancelled());
Trace.WriteLine(" Event Cancellabel :" + e.Cancellable);
Trace.WriteLine(" Status :" + e.Status);
Document doc = e.Document;
if (doc.IsFamilyDocument)
{
return;
}
try
{
using (Transaction trans = new Transaction(doc))
{
trans.Start();
doc.ProjectInformation.Address = "Test Address";
trans.Commit();
}
}
catch (Exception ee)
{
Trace.WriteLine("Failed to modify project information!" + ee.ToString());
throw;
}
}
private void CreateTempFile()
{
if (File.Exists(m_tempFile))
File.Delete(m_tempFile);
m_txtListener = new TextWriterTraceListener(m_tempFile);
Trace.AutoFlush = true;
Trace.Listeners.Add(m_txtListener);
}
private void CloseLogFile()
{
Trace.Flush();
Trace.Listeners.Remove(m_txtListener);
Trace.Close();
m_txtListener.Close();
string logFile = Path.Combine(m_directory, "AutoUpdata.log");
if (File.Exists(logFile))
File.Delete(logFile);
File.Copy(m_tempFile,logFile);
File.Delete(m_tempFile);
}
}
}