This example shows how to fire application and document events.
//------------------------------------------------------------ // Preconditions: // 1. Create a C# Windows console project. // 2. Copy and paste this example into the C# IDE. // 3. Add a reference to: // install_dir\APISDK\tlb\DraftSight.Interop.dsAutomation.dll. // 4. Add references to System and System.Windows.Forms. // 5. Change the path and name of the image file to insert. // NOTE: Image must be a PNG file. // 6. Start DraftSight, create, save, and close a drawing named // c:\test\circle.dwg. // 7. Set a break point in the project where the project connects // to DraftSight. // 8. Press F10 to step through the project. // // Postconditions: Message boxes pop up for all events, // regardless if fired. Read the the text in each message box // before clicking OK to close it. //--------------------------------------------------------------
using System; using System.Runtime.InteropServices; using System.Windows.Forms; using DraftSight.Interop.dsAutomation;
static class Program
{
static DraftSight.Interop.dsAutomation.Application dsApp = null;
static Document dsDoc = null;
static bool filePreOpenNotify;
static bool filePostOpenNotify;
static bool docDestroyNotify;
static bool fileSavePreNotify;
static bool fileSavePostNotify;
static bool fileModifyNotify;
static string docName = "c:\\test\\circle.dwg";
static string imageFileName = "c:\\test\\note.png";
public static void Main() { //Connect to DraftSight dsApp = (DraftSight.Interop.dsAutomation.Application)Marshal.GetActiveObject("DraftSight.Application"); dsApp.AbortRunningCommand(); // abort any command currently running in DraftSight to avoid nested commands//Set up dsApp events AttachAppEventHandlers();//Open documentfilePostOpenNotify = false; filePreOpenNotify = false;dsDoc = (Document)dsApp.OpenDocument2(docName, dsDocumentOpenOption_e.dsDocumentOpen_Default, dsEncoding_e.dsEncoding_Default);if (dsDoc != null) { if (false == filePreOpenNotify) { MessageBox.Show("FileOpenPreNotify event wasn't fired while opening a document."); } if (false == filePostOpenNotify) { MessageBox.Show("FileOpenPostNotify event wasn't fired while opening a document."); } }//Set up dsDoc events AttachDocEventHandlers();//Modify document TestFileModifyEvents();//Save document as a different document TestFileSaveEvents();//Close documents CloseAllDocuments();//Detach events DetachEventHandlers();
}
//Attach dsApp event handlers
static public void AttachAppEventHandlers()
{
AttachAppEvents();
}
static public void AttachAppEvents()
{
dsApp.FileOpenPostNotify += new _IApplicationEvents_FileOpenPostNotifyEventHandler(FileOpenPostNotify);
dsApp.FileOpenPreNotify += new _IApplicationEvents_FileOpenPreNotifyEventHandler(FileOpenPreNotify);
}
//Attach dsDoc event handlers
static public void AttachDocEventHandlers()
{
AttachDocEvents();
}
static public void AttachDocEvents()
{
dsDoc.FileSavePostNotify += new _IDocumentEvents_FileSavePostNotifyEventHandler(FileSavePostNotify);
dsDoc.FileSavePreNotify += new _IDocumentEvents_FileSavePreNotifyEventHandler(FileSavePreNotify);
dsDoc.ModifyNotify += new _IDocumentEvents_ModifyNotifyEventHandler(ModifyNotify);
dsDoc.DestroyNotify += new _IDocumentEvents_DestroyNotifyEventHandler(DestroyNotify);
}
//Detach all event handlers
static public void DetachEventHandlers()
{
dsApp.FileOpenPostNotify -= new _IApplicationEvents_FileOpenPostNotifyEventHandler(FileOpenPostNotify);
dsApp.FileOpenPreNotify -= new _IApplicationEvents_FileOpenPreNotifyEventHandler(FileOpenPreNotify);
dsDoc.FileSavePostNotify -= new _IDocumentEvents_FileSavePostNotifyEventHandler(FileSavePostNotify);
dsDoc.FileSavePreNotify -= new _IDocumentEvents_FileSavePreNotifyEventHandler(FileSavePreNotify);
dsDoc.ModifyNotify -= new _IDocumentEvents_ModifyNotifyEventHandler(ModifyNotify);
dsDoc.DestroyNotify -= new _IDocumentEvents_DestroyNotifyEventHandler(DestroyNotify);
}
static public void TestFileModifyEvents()
{
filePreOpenNotify = false;
filePostOpenNotify = false;
ReferenceImage dsPicture = default(ReferenceImage);
Model dsModel = default(Model);
SketchManager dsSketchMgr = default(SketchManager);
if ((dsDoc != null))
{
//Get model space
dsModel = (Model)dsDoc.GetModel();
if ((dsModel != null))
{
//Get sketch manager
dsSketchMgr = (SketchManager)dsModel.GetSketchManager();
if ((dsSketchMgr != null))
{
fileModifyNotify = false;
//insert a picture in the model
dsPicture = (ReferenceImage)dsSketchMgr.InsertPicture(imageFileName, 0.0, 0.0, 0.0, 1.0, 0.0);
if ((dsPicture != null))
{
//Check if ModifyNotify event is fired
if (false == fileModifyNotify)
{
MessageBox.Show("ModifyNotify event wasn't fired while inserting a picture in the document.");
}
}
else
{
MessageBox.Show("ISketchManager::InsertPicture method returns Nothing for the '" + dsDoc.GetPathName() + "' document");
}
}
else
{
MessageBox.Show("IModel.GetSketchManager method returns Nothing for the '" + dsDoc.GetPathName() + "' document.");
}
}
else
{
MessageBox.Show("IDocument.GetModel method returns Nothing for the '" + dsDoc.GetPathName() + "' document.");
}
}
else
{
MessageBox.Show("IApplication.OpenDocument method returns Nothing for the '" + docName + "' document.");
}
}
static public void TestFileSaveEvents()
{
dsDocumentSaveError_e saveError = default(dsDocumentSaveError_e);
string savedDocName = null;
if ((dsDoc != null))
{
fileSavePreNotify = false;
fileSavePostNotify = false;
//Save document
savedDocName = docName + "_saved.dwg";
dsDoc.SaveAs2(savedDocName, dsDocumentSaveAsOption_e.dsDocumentSaveAs_R2010_DWG, true, out saveError);
if (saveError != dsDocumentSaveError_e.dsDocumentSave_Succeeded)
{
MessageBox.Show("SaveAs method returns '" + saveError + "' error.");
}
else
{
//Check FileSavePreNotify and FileSavePostNotify events
if (false == fileSavePreNotify)
{
MessageBox.Show("FileSavePreNotify event wasn't fired after saving the '" + docName + "' document");
}
if (false == fileSavePostNotify)
{
MessageBox.Show("FileSavePostNotify event wasn't fired after saving the '" + docName + "' document");
}
}
}
else
{
MessageBox.Show("OpenDocument method returns Nothing for the '" + docName + "' document.");
}
}
static public void CloseAllDocuments()
{
object[] dsDocs = null;
int index = 0;
docDestroyNotify = false;
//Get documents
dsDocs = (object[])dsApp.GetDocuments();
if (dsDocs == null)
{
MessageBox.Show("No open documents.");
}
else
{
for (index = 0; index <= dsDocs.Length - 1; index++)
{
dsDoc = (Document)dsDocs[index];
dsApp.CloseDocument(dsDoc.GetPathName(), false);
if (false == docDestroyNotify)
{
MessageBox.Show("DestroyNotify event wasn't fired after closing a document.");
}
}
}
}
static public void FileOpenPostNotify(Document Document)
{
filePostOpenNotify = true;
MessageBox.Show("FileOpenPostNotify event was fired while opening a document.");
}
static public void FileOpenPreNotify(string FileName, dsDocumentOpenOption_e Option)
{
filePreOpenNotify = true;
MessageBox.Show("FileOpenPreNotify event was fired while opening a document.");
}
static public void DestroyNotify()
{
docDestroyNotify = true;
MessageBox.Show("DestroyNotify event was fired after closing a document.");
}
static public void FileSavePostNotify()
{
fileSavePostNotify = true;
MessageBox.Show("FileSavePostNotify event was fired while saving a document.");
}
static public void FileSavePreNotify(string FileName, dsDocumentSaveAsOption_e SaveOption)
{
fileSavePreNotify = true;
MessageBox.Show("FileSavePreNotify event was fired while saving a document.");
}
static public void ModifyNotify()
{
fileModifyNotify = true;
MessageBox.Show("ModifyNotify event was fired while inserting a picture in a document.");
}
}