Архитектору и проектировщику|Тепло- и звукоизоляция URSA.RU
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Готовые программы > .NET SiberiaRemove

.NET SiberiaRemove

Ответ
Поиск в этой теме
Непрочитано 09.08.2019, 09:56 #1
.NET SiberiaRemove
Boxa
 
КЖ; C#
 
Санкт-Петербург
Регистрация: 03.11.2005
Сообщений: 2,011

В продолжении вот этой темы: https://forum.dwg.ru/showthread.php?t=91342
Цитата:
Сообщение от bargool Посмотреть сообщение
Единственное, что нашёл в этом файле чуждого обычному автокаду - это следы какого-то приложения "siberia". Это как-то относится к AutoCAD СПДС? (походу, да - какие-то стили выносок, отметок и проч.)
По быстрому накатал программку, которая удаляет эти артефакты из файла. Компилировал для акадов 2009-2012. Как всегда, _netload, указываете соответствующую dll-ку, потом bargSiberiaRemove в ком. строке.
Вложения Тип файла: rar SiberiaRemoving.rar (15.1 Кб, 80 просмотров)
и вот этой https://forum.dwg.ru/showthread.php?t=103878&page=85

В обоих темах подход к очистке от Autocad SPDS (Siberia) объектов прост, понятен и радикален, как удар серпом по причинному месту: снести к черту словарь содержащий данные об объектах.
Однако, ИМХО, такой подход как минимум не оправдан и не может быть применен, по следующим причинам:
Помимо NOD надо чистить и таблицу приложений, но это мелочи, главное, если в чертеже есть и используются объекты AutoCAD SPDS, то сносить ВСЕ записи о них как минимум не самая лучшая идея.

И не смотря, на то что я пересобирал и выкладывал программу bargool под новые версии автокада, внутренний перфекционист был против такого подхода.
И когда совсем допекло, переписал ее по своему, так что бы удалялись именно не используемые объекты Siberia.

Исходный код ТУТ
Файлы библиотек ТУТ

Загрузка как обычно командой: _NETLOAD
Сама команда очистки: SiberiaRemove

ЗЫ.
После скачивания не забывайте разблокировать библиотеку и загружать ее желательно с локального диска, если конечно нет желания разбираться с политиками безопасности Windows
__________________
_бложиг
Просмотров: 252
 
Непрочитано 09.08.2019, 10:02
#2
trir


 
Регистрация: 18.12.2010
Сообщений: 3,381


а я делаю так
Код:
[Выделить все]
 [CommandMethod("ClearSiberia")]
        static public void ClearSiberia()
        {
            AppServ.Document doc = AppServ.Application.DocumentManager.MdiActiveDocument;
            using (Transaction tr = doc.Database.TransactionManager.StartTransaction())
            {
                DBDictionary nod = tr.GetObject(doc.Database.NamedObjectsDictionaryId, OpenMode.ForRead) as DBDictionary;
                if (nod.Contains("Siberia")) {
                    ObjectId myDataId = nod.GetAt("Siberia");
                    if (myDataId.ObjectClass.Name == "AcDbDictionary")
                    {
                        DBDictionary nDict = tr.GetObject(myDataId, OpenMode.ForRead) as DBDictionary;
                        if (nDict.Contains("Styles"))
                        {
                            myDataId = nDict.GetAt("Styles");
                            if (myDataId.ObjectClass.Name == "AcDbDictionary")
                            {
                                DBDictionary nDStyles = tr.GetObject(myDataId, OpenMode.ForWrite) as DBDictionary;
                                if (nDStyles.Count > 10)
                                {
                                    foreach (DBDictionaryEntry ent in nDStyles)
                                    {
                                        nDStyles.Remove(ent.Value);
                                    }
                                }
                            }
                        }
                    }
                }
                tr.Commit();
            }
        }
trir вне форума  
 
Автор темы   Непрочитано 09.08.2019, 10:12
#3
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,011


trir, приблизительно так было и у меня (я слегка модифицировал код bargool), до переписывания и в этом коде нет поиска используемых стилей...
У bargool было вот так:

Код:
[Выделить все]
 string text = "Siberia";
DBDictionary dBDictionary = transaction.GetObject(database.get_NamedObjectsDictionaryId(), 0) as DBDictionary;
if (dBDictionary.Contains(text))
{
	dBDictionary.UpgradeOpen();
	dBDictionary.Remove(text);
	editor.WriteMessage("\nЧистим NOD от " + text);
}
Что на мой взгляд ну совсем радикально и почти равно лисповскому: (DICTREMOVE (namedobjdict) "Siberia")
__________________
_бложиг
Boxa на форуме  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Готовые программы > .NET SiberiaRemove

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
.NET Программный аналог "Извлечения данных..." La Persona .NET 3 09.12.2013 01:28
C++ to С++ CLI. Миграция на .NET. Rizling .NET 21 10.07.2013 13:15
реализация задачи visual studio2012 (visual basic .net) autocad 2012, oracle11g Anta .NET 32 31.12.2012 07:35
Extended AutoCAD .Net API hwd .NET 5 22.08.2012 19:38
.Net событие double-click как поймать dvim .NET 7 04.04.2010 15:13