我确实在 SaveComplete 事件期间触发了我的导出:
- 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();
- }
- }
和 ExportTo3dDwf 分离所有外部参照并解冻所有层...但我的意图是不修改数据库。我想在分离外部参照和解冻图层之前保持 DWG 不变,以准备导出到 dwf。
所以我正在使用这里找到的一些漂亮的例程..这就是我解冻所有层的方式:
- [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();
- }
- }
那么我怎么能做到这一点,而不是保存/修改DWG?我尝试过删除提交,但它仍然修改了DWG。
在一些旧的LISP中,我看到
以防止保存对图形的更改。如何在 C# 中执行此操作?
|