[CommandMethod("X3")]
public static void X3()
{
Document doc = Application.DocumentManager.MdiActiveDocument;
Editor ed = doc.Editor;
var currentFilename = doc.Name;
var currentPath = Path.GetDirectoryName(currentFilename);
var drawing = Path.GetFileNameWithoutExtension(currentFilename);
var fileWithDwfExt = Path.ChangeExtension(drawing, ".dwf");
var destFile = Path.Combine(currentPath, fileWithDwfExt);
XrefUtils.DetachAllXrefsCommand();
LayerUtils.Layerson();
LayerUtils.ThawAll();
ed.Command("-xref", "d", "*");
ed.Command("export", destFile, "a", "y");
}
public void Initialize()
{
Application.DocumentManager.DocumentCreated += DocumentManager_DocumentCreated;
foreach (Document doc in Application.DocumentManager)
{
doc.CommandEnded += OnCommandEnding;
}
}
public static void OnCommandEnding(object sender, CommandEventArgs e)
{
X3();
}
System.Exception {Autodesk.AutoCAD.Runtime.Exception}
"eInvalidInput"as a message.
Hi,
As far as I know, you cannot call a command from an event handler (either using SendStringToExecute, SendCommand or Command).
public void Initialize()
{
Application.DocumentManager.DocumentCreated += DocumentManager_DocumentCreated;
foreach (Document doc in Application.DocumentManager)
{
doc.Database.SaveComplete += OnDatabaseSaveComplete;
}
}
private void OnDatabaseSaveComplete(object sender, DatabaseIOEventArgs e)
{
// ignore when the document is being auto saved
if (e.FileName.Contains(".sv$"))
return;
Document doc = Application.DocumentManager.MdiActiveDocument;
var currentFilename = doc.Name;
if ((currentFilename.Contains("-CSA-")) ||
(currentFilename.Contains("-S-")) ||
(currentFilename.Contains("-B-")) ||
(currentFilename.Contains("-F-")))
{
ExportTo3dDwf();
}
}
[CommandMethod("Thawall")]
public static void ThawAll()
{
Database db = HostApplicationServices.WorkingDatabase;
LayerTableRecord layer;
string curLayer = (string)Application.GetSystemVariable("CLayer");
using (Transaction tr = db.TransactionManager.StartTransaction())
{
LayerTable lt = tr.GetObject(db.LayerTableId, OpenMode.ForRead) as LayerTable;
foreach (ObjectId layerId in lt)
{
layer = tr.GetObject
(layerId, OpenMode.ForWrite) as LayerTableRecord;
if (layer.Name != curLayer)
layer.IsFrozen = false;
}
tr.Commit();
Application.DocumentManager.MdiActiveDocument.Editor.Regen();
}
}
(acad-push-dbmod)
to prevent saving the changes to the drawing. How do I do that in C#?