
По многочисленным просьбам трудящихся, нашел и скопипастил код
немного причесал его.
Вызов drz_LayerImport
что делает:
- Запрашивает файл с настроенными фильтрами слоев (*.dwg;*.dws;*.dwt;*.dxf)
- копипастит эти фильтры в активный чертеж.
========================
Важно:
код работает бесхитростно , как удар серпом по причинному месту, просто копирует LayerFilterTree из одного файла в другой.
соответственно существующие фильтры слоев (если есть) будут затерты.
Добавление фильтров к существующим будет реализовано когда/если нанодев допилит наноапи (ну и всякие плюшки типа экспорта импорта фильтров в текстовые форматы по аналогии с LayerFilter_gile.LSP, DotSoft Layer Filter Import/Export)
----------------
Пользуемся как есть, на свой страх и риск, проверок и защит от пытливых пользователей и вообще.... сделано по минимуму))))
using System.IO; using System.Runtime.CompilerServices; using System.Windows.Forms; using HostMgd.ApplicationServices; using HostMgd.EditorInput; using Teigha.DatabaseServices; using Teigha.LayerManager; using Teigha.Runtime; using App = HostMgd.ApplicationServices; using Db = Teigha.DatabaseServices; using DialogResult = System.Windows.Forms.DialogResult; namespace LayerFilterIO { public class AppCommand : IExtensionApplication { [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] public void Initialize() { } public void Terminate() { } /// <summary> /// https://www.caduser.ru/forum/post278685.html#p278685 /// </summary> [CommandMethod("drz_LayerImport", CommandFlags.Session | CommandFlags.Modal)] public static void LFilterImp() { string sFilName = string.Empty; // set full path of container file that contains desired layer filter using (OpenFileDialog openFileDialog = new OpenFileDialog()) { openFileDialog.Filter = "All supported formats (*.dwg;*.dws;*.dwt;*.dxf)|*.dwg;*.dws;*.dwt;*.dxf"; openFileDialog.Title = "Select drawing files to import layer filters"; if (openFileDialog.ShowDialog() != DialogResult.OK) { return; } sFilName = openFileDialog.FileName; } ImortLFilterFromFile(sFilName); } public static void ImortLFilterFromFile(string sourcefile) { // Find the file containing layer filter to clone if (!File.Exists(sourcefile)) { MessageBox.Show("Could not find file !"); return; } DocumentCollection dm = App.Application.DocumentManager; Document doc = dm.MdiActiveDocument; //!старая база запомним Db.Database dbCarent = Db.HostApplicationServices.WorkingDatabase; Database db = doc.Database; Editor ed = doc.Editor; try { //Document sourcedoc = dm.Open(sourcefile, false); // Needed for source document since the source database has to be active. //dm.MdiActiveDocument = sourcedoc; //Editor sourced = sourcedoc.Editor; //Database sourcedb = sourcedoc.Database; using (Db.Database db0 = new Db.Database(false, false)) { db0.ReadDwgFile(sourcefile, Db.FileOpenMode.OpenForReadAndAllShare, false, "", false); Db.HostApplicationServices.WorkingDatabase = db0; using (Transaction sourcetr = db0.TransactionManager.StartTransaction()) { BlockTable sourcebt = null; sourcebt = sourcetr.GetObject(db0.BlockTableId, OpenMode.ForRead) as BlockTable; if (db0.LayerFilters.Root == null) { MessageBox.Show("The Layer Filters aren't found !"); return; } LayerFilterTree lt = db0.LayerFilters; using (DocumentLock doclock = doc.LockDocument()) { using (Transaction tr = db.TransactionManager.StartTransaction()) { LayerFilterTree ltc = db.LayerFilters; dm.MdiActiveDocument = doc; db.LayerFilters = lt; sourcetr.Commit(); // Close source file without changes //sourcedoc.CloseAndDiscard(); tr.Commit(); } } } } Db.HostApplicationServices.WorkingDatabase = db; ed.WriteMessage("\nFilter import completed successfully"); //using (Transaction sourcetr = sourcedb.TransactionManager.StartTransaction()) //{ // BlockTable sourcebt = null; // sourcebt = sourcetr.GetObject(sourcedb.BlockTableId, OpenMode.ForRead) as BlockTable; // if (sourcedb.LayerFilters.Root == null) // { // MessageBox.Show("The Layer Filters aren't found !"); // return; // } // LayerFilterTree lt = sourcedb.LayerFilters; // using (DocumentLock doclock = doc.LockDocument()) // { // using (Transaction tr = db.TransactionManager.StartTransaction()) // { // LayerFilterTree ltc = db.LayerFilters; // dm.MdiActiveDocument = doc; // db.LayerFilters = lt; // sourcetr.Commit(); // // Close source file without changes // sourcedoc.CloseAndDiscard(); // tr.Commit(); // } // } //} } catch (System.Exception ex) { App.Application.ShowAlertDialog(string.Format("\n{0}\n{1}", ex.Message, ex.StackTrace)); } } } }
традиционно пожелания и конструктивная критика...
- Read more...
-
- 0 comments
- 82 views