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

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

.NET SiberiaRemove

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

В продолжении вот этой темы: 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
__________________
_бложиг
Просмотров: 920
 
Непрочитано 09.08.2019, 10:02
#2
trir


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


а я делаю так
Код:
[Выделить все]
 [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,073


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 вне форума  
 
Непрочитано 19.10.2019, 11:13
#4
Инкуб


 
Регистрация: 21.03.2010
Сообщений: 95


Скачал SiberiaRemoving_2017.dll. Пытаюсь загрузить файл через NETLOAD в AutoCAD.
Пишет:
"Команда: NETLOAD
Не удалось загрузить сборку. Сведения об ошибке: System.IO.FileLoadException: Не удалось загрузить файл или сборку "file:///C:\SiberiaRemoving_2017.dll" либо одну из их зависимостей. Операция не поддерживается. (Исключение из HRESULT: 0x80131515)
Имя файла: 'file:///C:\SiberiaRemoving_2017.dll' ---> System.NotSupportedException: Предпринята попытка загрузить сборку из сетевого ресурса, что в предыдущих версиях .NET Framework могло привести к помещению сборки в "песочницу". Этот выпуск .NET Framework не включает политику CAS по умолчанию, поэтому данная загрузка может быть опасной. Если эта нагрузка не предназначена для изоляции сборки, включите переключатель loadFromRemoteSources. Дополнительные сведения см. на странице http://go.microsoft.com/fwlink/?LinkId=155569.
в System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
в System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, RuntimeAssembly reqAssembly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
в System.Reflection.RuntimeAssembly.InternalLoadFrom(String assemblyFile, Evidence securityEvidence, Byte[] hashValue, AssemblyHashAlgorithm hashAlgorithm, Boolean forIntrospection, Boolean suppressSecurityChecks, StackCrawlMark& stackMark)
в System.Reflection.Assembly.LoadFrom(String assemblyFile)
в Autodesk.AutoCAD.Runtime.ExtensionLoader.Load(String fileName)
в loadmgd()
"

Где копать?
Инкуб вне форума  
 
Автор темы   Непрочитано 19.10.2019, 11:22
1 | #5
Boxa

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


Инкуб,
Цитата:
Сообщение от Boxa Посмотреть сообщение
ЗЫ.
После скачивания не забывайте разблокировать библиотеку и загружать ее желательно с локального диска, если конечно нет желания разбираться с политиками безопасности Windows
__________________
_бложиг
Boxa вне форума  
 
Непрочитано 19.10.2019, 11:32
#6
Инкуб


 
Регистрация: 21.03.2010
Сообщений: 95


Boxa, благодарю, запустилось, но только после того, как разблокировал файл и перезапустил autocad.
Огромный вам респект за утилиту! Отлично вычищает стили Autodesk СПДС.
Инкуб вне форума  
Ответ
Вернуться   Форум 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