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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Отключение слоя в нескольких открытых документах

Отключение слоя в нескольких открытых документах

Ответ
Поиск в этой теме
Непрочитано 20.08.2015, 15:59 #1
Отключение слоя в нескольких открытых документах
100рож
 
Инженер ПГС
 
Самара
Регистрация: 18.01.2013
Сообщений: 78

Итак, задача. Дано: открыто несколько документов, в которых есть слой с определенным именем. Требуется: включить/отключить этот слой во всех открытых документах.
Вопрос: каким образом можно этот процесс автоматизировать? Файлов может быть открыто много, на переход от документа к документу тратится уйма времени
Поясню, для чего это мне понадобилось. Мы в организации делаем ПДФ с подписями не сканированием бумаги, а печатью из ДВГ. А в ДВГ у нас все подписи лежат на одном слое. При пакетной печати подлинников нужно отключать слой с подписями, при печати ПДФ - включать.
Просмотров: 9576
 
Непрочитано 20.08.2015, 20:54
2 | #2
v.psk

конструктор
 
Регистрация: 14.08.2014
Псков
Сообщений: 4,814


Планировал создать новую тему.... Вот макрос.
Слой должен называться "podpis" или подкрути в строке
Set layerObj = ThisDrawing.Layers("podpis")
на другой слой.
Макрос поочередно открывает файлы двг из выбранной папки
и делает слой невидимым. Проверял на 2012.
можно запустить другую команду методом
ThisDrawing.SendCommand " "

----- добавлено через ~1 мин. -----
///писал для обновления ссылок на таблицы xls
Вложения
Тип файла: dvb layvisible_off.dvb (32.0 Кб, 65 просмотров)
v.psk вне форума  
 
Непрочитано 20.08.2015, 21:28
#3
maratovich


 
Регистрация: 12.07.2009
г. Самара
Сообщений: 2,447
Отправить сообщение для maratovich с помощью Skype™


Цитата:
Сообщение от 100рож Посмотреть сообщение
При пакетной печати подлинников нужно отключать слой с подписями, при печати ПДФ - включать.
А почему бы при пакетной печати сразу не сделать такую функцию ? Автоматом оно быстрее.
__________________
Вопрос : Где находится Тургай ? Ответ : Между Парагваем и Уругваем.....
maratovich вне форума  
 
Непрочитано 20.08.2015, 21:32
#4
v.psk

конструктор
 
Регистрация: 14.08.2014
Псков
Сообщений: 4,814


Цитата:
Сообщение от maratovich Посмотреть сообщение
сразу не сделать такую функцию ?
это предложение в Autodesk ?
v.psk вне форума  
 
Непрочитано 20.08.2015, 23:36
#5
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 38,058


А если попробовать поиграть с состоянием слоев (команда _.layerstate)?
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 21.08.2015, 08:13
#6
100рож

Инженер ПГС
 
Регистрация: 18.01.2013
Самара
Сообщений: 78


Цитата:
Сообщение от maratovich Посмотреть сообщение
А почему бы при пакетной печати сразу не сделать такую функцию ? Автоматом оно быстрее.
Да я бы рад, это как раз то, что мне нужно. Но не знаю, как это сделать. На VBA бы сообразил, но это ж не Эксель...
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
А если попробовать поиграть с состоянием слоев (команда _.layerstate)?
Как именно?
100рож вне форума  
 
Непрочитано 21.08.2015, 08:15
#7
baksconstructor


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


Цитата:
Сообщение от 100рож Посмотреть сообщение
Да я бы рад, это как раз то, что мне нужно. Но не знаю, как это сделать. На VBA бы сообразил, но это ж не Эксель...
Вам сюда
baksconstructor вне форума  
 
Непрочитано 21.08.2015, 08:16
#8
v.psk

конструктор
 
Регистрация: 14.08.2014
Псков
Сообщений: 4,814


Чем вариант в посте 2 не устраивает?
v.psk вне форума  
 
Автор темы   Непрочитано 21.08.2015, 08:46
#9
100рож

Инженер ПГС
 
Регистрация: 18.01.2013
Самара
Сообщений: 78


Цитата:
Сообщение от v.psk Посмотреть сообщение
Чем вариант в посте 2 не устраивает?
  1. В окне выбора папки присутствует только диск D. А мне нужно открыть файлы на сервере.
  2. Если я правильно прочитал скрипт, программа открывает файл, выключает нужный слой, закрывает файл. В какой момент я должен успеть запустить пакетную печать?
Попробую подумать, как заставить этот скрипт включать/выключать слой именно в открытых документах. Другое направление мысли: скрипт, который в зависимости от того, что нужно делать (печатать на бумаге или публиковать в ПДФ), выключает или включает нужный слой и выполняет пакетную печать из заранее сохраненного файла набора листов.
100рож вне форума  
 
Непрочитано 21.08.2015, 08:55
#10
v.psk

конструктор
 
Регистрация: 14.08.2014
Псков
Сообщений: 4,814


Пакетная печать подшивкой может быть запущена в закрытых файлах. Т.е.
1. Выполняем макрос off
2. Печатаем в пдф для дальнейшей печати на принтере. Затем я обычно группирую листы по размеру.
3. Выполняем макрос on
4. Печатаем в пдф для заказчика.
Если сохранен список листов для подшивки то это быстро.
Не пробовал на сетевом диске, но вместо D можешь поменять на другой.
v.psk вне форума  
 
Автор темы   Непрочитано 21.08.2015, 13:53
#11
100рож

Инженер ПГС
 
Регистрация: 18.01.2013
Самара
Сообщений: 78


Итак, результат на сегодня. С помощью скрипта v.psk написан модуль, в который зашита форма. Форма собирает список слоев с активного документа, позволяет выбрать целевой слой и его целевое состояние (вкл/выкл). Далее модуль перебирает открытые документы и в каждом отключает/включает выбранный в форме слой. Проблема одна: как только цикл For доходит до последнего документа появляется ошибка "Method 'Item' of object 'IAcadDocuments' failed". Состояние целевого слоя меняется во всех открытых документах, кроме одного. Может кто посмотрит код и поймет, в чем дело?

Подшивками, наверно удобно было бы сделать, но мы пока их не освоили. Нам пакетная печать уже за счастье )))
Вложения
Тип файла: dvb Layer_switch.dvb (38.0 Кб, 15 просмотров)
100рож вне форума  
 
Автор темы   Непрочитано 21.08.2015, 14:00
#12
100рож

Инженер ПГС
 
Регистрация: 18.01.2013
Самара
Сообщений: 78


Как же это было просто... Чертов VBA нумерует документы с нуля. Вот исправленный модуль. В принципе, можно его допилить. В форму можно добавить другие свойства слоев, можно организовать (наверно) поиск/замену текста во всех открытых документах. Если пользоваться скриптом от v.psk, то можно это все проделывать, не открывая файлы.
Осталось прикрутить скрипт к кнопке и вот оно, счастье
Вложения
Тип файла: dvb Layer_switch.dvb (38.0 Кб, 39 просмотров)
100рож вне форума  
 
Непрочитано 21.08.2015, 14:33
#13
v.psk

конструктор
 
Регистрация: 14.08.2014
Псков
Сообщений: 4,814


Цитата:
Сообщение от 100рож Посмотреть сообщение
ертов VBA нумерует документы с нуля.
у меня же это предусмотрено было

----- добавлено через ~2 мин. -----
)))
предполагалось что открыт сторонний документ
v.psk вне форума  
 
Автор темы   Непрочитано 21.08.2015, 14:47
#14
100рож

Инженер ПГС
 
Регистрация: 18.01.2013
Самара
Сообщений: 78


Цитата:
Сообщение от v.psk Посмотреть сообщение
предполагалось что открыт сторонний документ
Вот-вот )))
Спасибо всем, кто откликнулся, с пятницей!
100рож вне форума  
 
Непрочитано 21.08.2015, 14:50
#15
v.psk

конструктор
 
Регистрация: 14.08.2014
Псков
Сообщений: 4,814


вот соответственно макрос для обновления связей с xls

----- добавлено через 21 сек. -----
Цитата:
Сообщение от 100рож Посмотреть сообщение
с пятницей!
) взаимно
Вложения
Тип файла: dvb datalinksnfiles.dvb (16.0 Кб, 17 просмотров)
v.psk вне форума  
 
Непрочитано 21.08.2015, 15:24
#16
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 38,058


Интересно ситуация складывается... Вопрос задан в разделе "AutoCAD", а не программирование. Соответственно предполагалось использование только штатных средств AutoCAD. Вместо этого началась vba-писанина. Для которой, между прочим, есть отдельный раздел - "Программирование" называется.
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 21.08.2015, 15:51
#17
v.psk

конструктор
 
Регистрация: 14.08.2014
Псков
Сообщений: 4,814


Задача стояла следующая
Цитата:
Сообщение от 100рож Посмотреть сообщение
каким образом можно этот процесс автоматизировать
Что касается штатных способов автоматизации, то мне приходит на ум только встроенный рекордер операций.
Мб еще что есть.
v.psk вне форума  
 
Автор темы   Непрочитано 24.08.2015, 08:19
#18
100рож

Инженер ПГС
 
Регистрация: 18.01.2013
Самара
Сообщений: 78


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Интересно ситуация складывается... Вопрос задан в разделе "AutoCAD", а не программирование. Соответственно предполагалось использование только штатных средств AutoCAD. Вместо этого началась vba-писанина. Для которой, между прочим, есть отдельный раздел - "Программирование" называется.
Действительно, тема плавно перешла в область программирования, хотя изначально вопрос был задан безотносительно к методам получения результата. Теперь тему можно перенести в другую ветку.
100рож вне форума  
 
Непрочитано 07.06.2017, 12:35
1 | #19
kegorovsc


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


Цитата:
Сообщение от v.psk Посмотреть сообщение
Планировал создать новую тему.... Вот макрос.
Слой должен называться "podpis" или подкрути в строке
Set layerObj = ThisDrawing.Layers("podpis")
на другой слой.
Макрос поочередно открывает файлы двг из выбранной папки
и делает слой невидимым. Проверял на 2012.
можно запустить другую команду методом
ThisDrawing.SendCommand " "

----- добавлено через ~1 мин. -----
///писал для обновления ссылок на таблицы xls
Спасибо работает макрос. Но почему то файлы не закрывает после выключения слоя. Хотя у него вроде прописано внутри об этом. Пробовал на акаде 2009. также интересно как включать обратно слой? сделать макрос с именем ..._on и прописать вместо false - true? больше ничего на ум не приходит=)
kegorovsc вне форума  
 
Непрочитано 18.02.2020, 15:37
#20
allar8


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


Цитата:
Сообщение от kegorovsc Посмотреть сообщение
Спасибо работает макрос. Но почему то файлы не закрывает после выключения слоя. Хотя у него вроде прописано внутри об этом. Пробовал на акаде 2009. также интересно как включать обратно слой? сделать макрос с именем ..._on и прописать вместо false - true? больше ничего на ум не приходит=)
Спасибо! Есть счастье. С этим разобралси. Тема с пакетной печатью и автовключением подписей тоже интересна но у нас своя софтина пакетной печати. Я туда енто не пришью)

----- добавлено через ~5 мин. -----
Цитата:
Сообщение от v.psk Посмотреть сообщение
Планировал создать новую тему.... Вот макрос.
Слой должен называться "podpis" или подкрути в строке
Set layerObj = ThisDrawing.Layers("podpis")
на другой слой.
Макрос поочередно открывает файлы двг из выбранной папки
и делает слой невидимым. Проверял на 2012.
можно запустить другую команду методом
ThisDrawing.SendCommand " "
Подскажите еще плиз, как исправить этот dvb, чтоб не скрывать слой а замораживать размораживать. Заранее Спасибо!
allar8 вне форума  
 
Непрочитано 18.02.2020, 15:44
1 | #21
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 38,058


Замени LayerOff на Freeze / Lock (код не смотрел).
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 18.02.2020, 16:06
#22
allar8


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Замени LayerOff на Freeze / Lock (код не смотрел).
Там в коде вот такая строчка
layerObj.layerObj.LayerOn = False

layerObj.layerObj.LayerFreeze = True - не работает
layerObj.layerObj.LayerFreeze = Lock - ошибка

Подскажите плиз как вот эту строчку
layerObj.layerObj.LayerOn = False
поправить для заморозки разморозки

----- добавлено через ~5 мин. -----
layerObj.Freeze = True
layerObj.Freeze = False

Получилось
Спасибо большое!
allar8 вне форума  
 
Непрочитано 18.02.2020, 16:12
#23
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 38,058


Заморозить активный слой невозможно - ну так, для полноты картины.
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 18.02.2020, 16:13
#24
allar8


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Заморозить активный слой невозможно - ну так, для полноты картины.
Это я видел уже). Спасибо!

----- добавлено через ~7 мин. -----
А еще интересно конечно все проворачивать не открывая файлы. Но тут вроде был такой макрос - но у меня на 2017 не пошел.
А может можно как нить макрос layvisible_off.dvb гондобнуть, чтоб он не открывал замораживал сохранял закрывал, а просто есть куча открытых файлов и просто между
этими открытыми файлами перескакивать замораживать или размораживать без закрытия и сохранения?
Кодик то вроде не большой
Код:
[Выделить все]
 Sub layvisible_off()

Dim MyName As String
Dim MyPath As String
Dim sPath As String
Dim objShellApp As Object, objFolder As Object, ulFlags
On Error Resume Next

'Выбор папки
    Set objShellApp = CreateObject("Shell.Application")
    ulFlags = 0
    Set objFolder = objShellApp.BrowseForFolder(0, "Выбрать папку", ulFlags, "D:\")
    MyPath = objFolder.Self.Path & "\"
    
' проверка
    If Err.Number <> 0 Then
        MsgBox "папка не выбрана!"
        Else
        
'цикл перебора файлов Dir
        MyName = Dir(MyPath & "*.dwg")
            Do While MyName <> ""
            sPath = MyPath + MyName
            ThisDrawing.Application.Documents.Open (sPath)
            
'выполнение команды
             Set layerObj = ThisDrawing.Layers("Подписи")
             layerObj.Freeze = True
             ThisDrawing.Regen acActiveViewport
            
        MyName = Dir
        
'закрытие файлов (кроме начального)
        If ThisDrawing.Application.Documents.Count > 1 Then
        ThisDrawing.Application.Documents.Item(1).Close
        End If
            Loop
    End If
'(с)v.psk
End Sub

Последний раз редактировалось allar8, 18.02.2020 в 16:37.
allar8 вне форума  
 
Непрочитано 18.02.2020, 16:37
1 | #25
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 38,058


Можно. Открывай документы через ObjectDBX, например - правда, там своих приколов полно. Ну или вообще добро пожаловать в NET
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 18.02.2020, 16:39
#26
allar8


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Можно. Открывай документы через ObjectDBX, например - правда, там своих приколов полно. Ну или вообще добро пожаловать в NET
Я почему то так и думал). Но как всегда некогда, думал может тут просто 'цикл перебора файлов Dir чуть чуть почикать - но видимо ан NET)))
allar8 вне форума  
 
Непрочитано 18.02.2020, 16:49
1 | #27
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 38,058


Как капитальный костыль - создавай новый экземпляр приложения, ему Visible = False, и уже в нем открывай документы и делай чего возжелает левая пятка ))
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 18.02.2020, 16:51
#28
allar8


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Как капитальный костыль - создавай новый экземпляр приложения, ему Visible = False, и уже в нем открывай документы и делай чего возжелает левая пятка ))
Спасибо, но нпнм)
allar8 вне форума  
 
Непрочитано 18.02.2020, 16:59
#29
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 38,058


Че?
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 21.02.2020, 12:08
3 | #30
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,005


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
через ObjectDBX
НЕ открытые документы
(odbx_layers_off '("Layer_Off_1" "Layer_Off_2"...)
Вложения
Тип файла: rar odbx_layers_off.fas.rar (6.0 Кб, 12 просмотров)
koMon вне форума  
 
Непрочитано 18.01.2021, 08:31
#31
GogMagog


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


Цитата:
Сообщение от koMon Посмотреть сообщение
НЕ открытые документы
(odbx_layers_off '("Layer_Off_1" "Layer_Off_2"...)
Прошу прощения за глупый вопрос На каком языке вы такую красоту сделали? На си++?
GogMagog вне форума  
 
Непрочитано 18.01.2021, 08:44
#32
мозголом из Самары


 
Регистрация: 17.10.2007
Самара
Сообщений: 1,672


Цитата:
Сообщение от koMon Посмотреть сообщение
(odbx_layers_off '("Layer_Off_1" "Layer_Off_2"...)
Очень круто!!!! Спасибо!!!
А не могли бы вы дополнить функцию включить слои???
мозголом из Самары вне форума  
 
Непрочитано 18.01.2021, 08:54
#33
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,005


Цитата:
Сообщение от GogMagog Посмотреть сообщение
На каком языке вы такую красоту сделали?
исключительно на лиспе
Цитата:
Сообщение от мозголом из Самары Посмотреть сообщение
дополнить функцию включить слои
надо поднять и посмотретью. я думаю можно.
koMon вне форума  
 
Непрочитано 18.01.2021, 09:26
#34
GogMagog


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


Цитата:
Сообщение от koMon Посмотреть сообщение
исключительно на лиспе
подскажите, мне в этом направлении смотреть
https://autolisp.ru/2010/04/08/proce...tive-document/
спасибо!
GogMagog вне форума  
 
Непрочитано 19.01.2021, 11:31
1 | #35
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,005


ну, лично я копался во встроенном хелпере, с привлечением поисковика. в хелпере есть пример использования библиотеки axdb при комментировании метода copyobjects, которая в общем и позволяет открыть в параллели с текущим чертежом ещё один и частично адресоваться к его базе.

@мозголом из Самары, odbx_layers_off_on.fas.rar
koMon вне форума  
 
Непрочитано 19.02.2021, 12:48
#36
Vadim_EC


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


Для VBA получаете все открытые документы через коллекцию set oDocs=Documents циклом for each oDoc in oDocs проходите их все и отключаете слой.

Вот как пример очистка от SelectionSets во всех открытых документах:

Код:
[Выделить все]
Function pf_SelectionSets_DeleteInAllDocuments()
    Dim i As Integer
    Dim oSelectionSets As AcadSelectionSets, oSelectionSet As AcadSelectionSet
    Dim oDocuments As AcadDocuments, oDocument As AcadDocument
    Set oDocuments = AcadApplication.Documents
    For Each oDocument In oDocuments
        Set oSelectionSets = oDocument.SelectionSets
        
        Do Until oSelectionSets.Count = 0
            Set oSelectionSet = oSelectionSets.Item(0)
            oSelectionSet.Delete
        
        Loop
    
    
    Next
End Function
Vadim_EC вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Отключение слоя в нескольких открытых документах

Реверс. Автоматическая пакетная печать множества рамок (форматов) из пространства модели и листов
Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменение цыета слоя в нескольких файлах elena_din AutoCAD 16 01.12.2017 13:50
Редактирование свойств слоя в нескольких документах одновременно SKY_SHY AutoCAD 7 30.03.2012 15:35
Почему не проходит теплорасчет? Suom Конструкции зданий и сооружений 15 10.08.2011 17:22