Работа с ExplodeProxy

Автор Тема: Работа с ExplodeProxy  (Прочитано 2701 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Захаров МаксимАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 139
  • Карма: 3
Работа с ExplodeProxy
« : 19-03-2024, 10:53:49 »
Добрый день.
Подскажите пожалуйста, есть возможность запустить ExplodeProxy на множестве файлов dwg. т.е. создать цикл открыть файл, запустить EXPLODEALLPROXY потом REMOVEALLPROXY, сохранить, закрыть файл. Я что то попытался, но вот закрытие файла не работает. Может уже есть готовое решение?

Оффлайн alz

  • ADN OPEN
  • **
  • Сообщений: 93
  • Карма: 11
Re: Работа с ExplodeProxy
« Ответ #1 : 19-03-2024, 12:32:38 »
По идее через accoreconsole можно сделать.
у меня было примерно вот так реализовано

Код - C# [Выбрать]
  1.            
  2.             using (StreamWriter writer = new StreamWriter("D:\\print.scr", false))
  3.             {
  4.                 //загрузка приложения
  5.                 writer.WriteLine("(arxload \"Приложение\" nil)");
  6.                 writer.WriteLine("команда");
  7.                 writer.WriteLine("_close");
  8.                 writer.WriteLine("_y");
  9.             }
  10.             //запускаем скрипт
  11.             Process start = new Process();
  12.             start.StartInfo.Arguments = "/i " + FileName +  "/s D:\\print.scr";
  13.             start.StartInfo.FileName = accoreconsolePath;
  14.             start.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
  15.             start.Start();
  16.             //ждем пока отработает
  17.             start.WaitForExit();
  18.             File.Delete("D:\\print.scr");

Правда были проблемы с кириллицей в названии или в пути к чертежу, решил копированием файла во временный каталог  с названием без кирилицы, и если нужно сохранить то заменял оригинальный файл обработанной копией.
В чате мне объяснили что проблема в кодировке файла скрипта(фиг знает причем если кирилицы в скрипте нет), но тут я ничего не проверял так как все и так работает.

Оффлайн Захаров МаксимАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 139
  • Карма: 3
Re: Работа с ExplodeProxy
« Ответ #2 : 19-03-2024, 14:09:38 »
Спасибо, я посмотрю
Я пытался вот так решить, но на этапе сохранения вылезает ошибка
Код - vb.net [Выбрать]
  1. <CommandMethod("ExpodeProxyObjectUser")>
  2.     Public Sub ExpodeProxyObjectUser()
  3.         '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
  4.         '1. получем доступ к пользовательскому каталогу
  5.         'временный каталог для автосохранения таблицы
  6.         Dim TempDir As String = FuncFiles.FuncGetAbsoluteFolderPathName("Выберите папку", 1)
  7.         '=============================================================================================
  8.         'читаем файлы dwg
  9.         If IO.Directory.Exists(TempDir) = True Then
  10.             Try
  11.                 'создаем дерево в TreeView
  12.                 For Each fileDWG As String In Directory.GetFiles(TempDir)
  13.                     Dim ext As String = Path.GetExtension(fileDWG)
  14.                     If ext Like ".dwg" Then
  15.                         Dim acDoc As Document = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.Open(fileDWG, False)
  16.                         Dim docs As DocumentCollection = Application.DocumentManager
  17.                         Dim db As Database = acDoc.Database()
  18.                         acDoc.SendStringToExecute("EXPLODEALLPROXY ", False, False, True)
  19.                         acDoc.SendStringToExecute("REMOVEALLPROXY ", False, False, True)
  20.                         'If acDoc.IsReadOnly Then
  21.                         '    acDoc.CloseAndDiscard()
  22.                         'Else
  23.                         '    If docs.MdiActiveDocument <> acDoc Then
  24.                         '        docs.MdiActiveDocument = acDoc
  25.                         '    End If
  26.                         '    Dim isModified As Integer = System.Convert.ToInt32(Application.GetSystemVariable("DBMOD"))
  27.                         '    If isModified = 0 Then
  28.                         '        acDoc.SendStringToExecute("^C^C ", False, False, True)
  29.                         '        acDoc.CloseAndDiscard()
  30.                         '    Else
  31.                         '        acDoc.SendStringToExecute("^C^C ", False, False, True)
  32.                         '        acDoc.CloseAndSave(acDoc.Name)
  33.                         '    End If
  34.                         'End If
  35.                     End If
  36.                 Next
  37.             Catch ex As IOException
  38.             Catch ex As UnauthorizedAccessException
  39.             Catch ex As ArgumentException
  40.             End Try
  41.         End If
  42.     End Sub

Оффлайн alz

  • ADN OPEN
  • **
  • Сообщений: 93
  • Карма: 11
Re: Работа с ExplodeProxy
« Ответ #3 : 19-03-2024, 14:25:25 »
Недавно обсуждали, SendStringToExecute это асинхронный метод, команда запустилась и программа не дожидаясь ее окончания сразу переходит к закрытию файла, ну и когда я подобным методом считывал данные из файлов сохранял я через базу данных а не документ, примерно вот такой конструкцией, но тут ориентировочно, давно в эту степь не лазил, аргументы надо бы проверить и не факт что в открытой так базе данных можно использовать командные методы, имхо тут все же лучше через консоль делать, экземпляров консоли параллельно можно открывать несколько, отрабатываю быстро.

Код - C# [Выбрать]
  1. using (Database db = new Database(false, true))
  2. {
  3.     db.ReadDwgFile(fileName, FileShare.ReadWrite, true, String.Empty);
  4.     //действия
  5.     //
  6.     db.SaveAs(fileName, DwgVersion.Current);
  7. }

« Последнее редактирование: 21-03-2024, 13:50:04 от alz »

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13868
  • Карма: 1785
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Работа с ExplodeProxy
« Ответ #4 : 19-03-2024, 17:21:22 »
Подскажите пожалуйста, есть возможность запустить ExplodeProxy на множестве файлов dwg. т.е. создать цикл открыть файл, запустить EXPLODEALLPROXY потом REMOVEALLPROXY, сохранить, закрыть файл.
Если переписать сами EXPLODEALLPROXY и REMOVEALLPROXY, то можно. Но я не рекомендую это делать. Причины объяснять не буду - просто запомните мое мнение. Все остальные варианты использования пакетного запуска ненадежные. Что касается accoreconsole, то в нее arx-файл не грузится и его следует переименовать в  crx-файл (поменять расширение). В этом случае есть шанс, что сработает.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Захаров МаксимАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 139
  • Карма: 3
Re: Работа с ExplodeProxy
« Ответ #5 : 20-03-2024, 08:28:34 »
Спасибо, за ответ Александр. Еще немного попробую, не получится, брошу тогда это "гиблое" дело

Оффлайн Захаров МаксимАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 139
  • Карма: 3
Re: Работа с ExplodeProxy
« Ответ #6 : 21-03-2024, 13:40:13 »
Скажите пожалуйста, а можно не открывая напрямую чертеж, узнать, есть ли в нем proxi. И если есть, то тогда открыть?

Оффлайн alz

  • ADN OPEN
  • **
  • Сообщений: 93
  • Карма: 11
Re: Работа с ExplodeProxy
« Ответ #7 : 21-03-2024, 13:49:24 »
Ну насколько я знаю определить есть что-то в чертеже или нет можно только перебором по базе, соответственно как минимум нужно открыть базу чертежа, код я чуть выше выкладывал. Вчера как раз понадобилось пакетно чертежи обработать, так что код проверил и чутка изменил.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13868
  • Карма: 1785
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Работа с ExplodeProxy
« Ответ #8 : 21-03-2024, 15:36:58 »
Скажите пожалуйста, а можно не открывая напрямую чертеж, узнать, есть ли в нем proxi. И если есть, то тогда открыть?
Нет. Более того даже открытие базы без открытия в редакторе AutoCAD не то, что нужно, т.к. открытие в редакторе AutoCAD может приводить к замене proxy на нормальные примитивы при подгрузке соответствующих arx/dbx-файлов.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение