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

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

.NET SiberiaRemove

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

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


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


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


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
Сообщений: 96


Скачал 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,588


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


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


Boxa, благодарю, запустилось, но только после того, как разблокировал файл и перезапустил autocad.
Огромный вам респект за утилиту! Отлично вычищает стили Autodesk СПДС.
Инкуб вне форума  
 
Непрочитано 14.11.2019, 09:31
#7
shadowkas


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


Для людей обычных, чтобы разблокировать DLL надо нажать по файлу правой кнопкой мыши, зайти в свойства, и там в самом низу поставить галочку Разблокировать
shadowkas вне форума  
 
Непрочитано 14.11.2019, 10:01
#8
926


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


А под 2020 не могли бы сделать ? Или подходит 2019 ?
926 вне форума  
 
Непрочитано 14.11.2019, 10:26
#9
trir


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


Цитата:
А под 2020 не могли бы сделать ?
ну так скомпилирую под 2020
trir на форуме  
 
Непрочитано 25.02.2020, 00:14
#10
ronik710

Инженер-проектировщик искусственных сооружений
 
Регистрация: 24.12.2010
Сейчас Московская область
Сообщений: 65


Здравствуйте, Boxa!

Прочитал про Вашу программу очистки и пытаюсь им воспользоваться, но у меня ничего не получается. У меня AutoCAD 2014, а *.dll файлы которые я нашёл и скормил AutoCAD на ГитХабе не хотят работать. Знакомые у которых стоят 2015 AutoCAD успешно чистят.

Не могли бы подсказать в чём может быть проблема? AutoCAD 2014 64 bit.
ronik710 вне форума  
 
Автор темы   Непрочитано 26.02.2020, 10:06
#11
Boxa

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


Пересобрал. Только у меня нет 2014 автокада, так что протестировать не могу. Пробуйте.
И в 2014 отключен аудит, нужно будет запускать руками....
Boxa вне форума  
 
Непрочитано 26.02.2020, 11:06
#12
ronik710

Инженер-проектировщик искусственных сооружений
 
Регистрация: 24.12.2010
Сейчас Московская область
Сообщений: 65


Загружаю приложение, запускаю его и выводит ошибку см. рисунок. При нажатии на далее ничего не происходит. В чём может быть причина?
Миниатюры
Нажмите на изображение для увеличения
Название: WhatsApp Image 2020-02-26 at 10.58.39.jpeg
Просмотров: 323
Размер:	124.2 Кб
ID:	223472  Нажмите на изображение для увеличения
Название: WhatsApp Image 2020-02-26 at 10.58.52.jpeg
Просмотров: 321
Размер:	186.8 Кб
ID:	223473  
ronik710 вне форума  
 
Непрочитано 26.02.2020, 11:12
#13
trir


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


у тебя неправильный AutoCAD
кажется там нет нужного типа
trir на форуме  
 
Автор темы   Непрочитано 26.02.2020, 13:42
1 | #14
Boxa

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


Очень странно, так как я специально отключил обращение к этому методу в 2014 акаде...
DatabaseExtension.Audit(database, true, true);

Отключил для 2014 автокада вообще все лишнее, пересобрал, лежит там же.
Если не заработает, то увы.
Boxa вне форума  
 
Непрочитано 26.02.2020, 14:44
#15
ronik710

Инженер-проектировщик искусственных сооружений
 
Регистрация: 24.12.2010
Сейчас Московская область
Сообщений: 65


Цитата:
Сообщение от Boxa Посмотреть сообщение
Очень странно, так как я специально отключил обращение к этому методу в 2014 акаде...
DatabaseExtension.Audit(database, true, true);

Отключил для 2014 автокада вообще все лишнее, пересобрал, лежит там же.
Если не заработает, то увы.
Спасибо. Вроде заработало.
ronik710 вне форума  
 
Непрочитано 20.03.2020, 15:07
#16
Sapien


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


Спасибо за программу, спасает!
У меня во всех файлах dwg присутствует мусор, который вычищает данная прога. Пока что настроил автозапуск при открытии файла.
1. Как реализовать очистку только при обнаружении Siberia в файле, а не при каждом его открытии? Чтобы уже очищенные файлы не прогонялись по новой.
2. Как реализовать пакетную очистку файлов, как это сделано в DrawingPurge?

Последний раз редактировалось Sapien, 20.03.2020 в 15:21.
Sapien вне форума  
 
Автор темы   Непрочитано 20.03.2020, 16:18
#17
Boxa

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


1. Надо будет посмотреть, там вроде был какой то ограничитель...
2. Попробуйте bat файл и консольный автокад с загрузкой и запуском dll через сценарий (scr).
Boxa вне форума  
 
Непрочитано 23.04.2020, 01:08
#18
For2Na


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


Цитата:
Сообщение от Boxa Посмотреть сообщение
Загрузка как обычно командой: _NETLOAD
Сама команда очистки: SiberiaRemove
Спасибо огромное! Помогло на все 100! Файл стал в 2 раза меньше и тормоза исчезли. Можно работать на удаленке
Я прям готова Вас обнять!...ну или хотя бы крепко пожать руку, т.к. перерыла все на что только можно, включая оф.форум автодеск, но помогло только Ваше решение)))
For2Na вне форума  
 
Непрочитано 24.04.2020, 10:51
#19
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,825
<phrase 1=


Boxa, при загрузке dll выдает ошибку

Код:
[Выделить все]
 Команда: NETLOAD
Не удалось загрузить сборку. Сведения об ошибке: 
System.BadImageFormatException: Не удалось загрузить файл или сборку 
"file:///D:\AutoCAD\Programms\SiberiaRemoving2012.dll" либо одну из их 
зависимостей. Ожидалось, что модуль содержит манифест сборки.
Имя файла: 'file:///D:\AutoCAD\Programms\SiberiaRemoving2012.dll'
   в 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()

Предупреждение: регистрация привязки сборок выключена.
Чтобы включить регистрацию ошибок привязки сборок, установите значение 
параметра реестра [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) в 1.
Примечание. Регистрация ошибок привязки сборок может привести к некоторому 
снижению производительности.
Чтобы отключить эту функцию, удалите параметр реестра 
[HKLM\Software\Microsoft\Fusion!EnableLog].
Acad 2012SP2, Win7
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Автор темы   Непрочитано 27.04.2020, 19:37
#20
Boxa

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


zenon, не удалось загрузить сборку... Подобная ошибка может быть в случае, когда dll собрана с настройкой AnyCpu, а какая то из подключенных библиотек построена с x86\x64... Где конфликт в Вашем случае, я угадать не могу.
Однако т.к. мне негде тестировать столь старые версии, то я уже довольно давно обновляю только версии 2014 и выше.

Цитата:
Сообщение от Sapien Посмотреть сообщение
Как реализовать пакетную очистку файлов, как это сделано в DrawingPurge?
Хм... я конечно все переписал и добавил пакетную обработку, но есть один нюанс... Если есть желание поэкспериментировать, то сборки обновлены и лежат там же.

Последний раз редактировалось Boxa, 27.04.2020 в 19:44.
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