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

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

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

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

Итак, задача. Дано: открыто несколько документов, в которых есть слой с определенным именем. Требуется: включить/отключить этот слой во всех открытых документах.
Вопрос: каким образом можно этот процесс автоматизировать? Файлов может быть открыто много, на переход от документа к документу тратится уйма времени
Поясню, для чего это мне понадобилось. Мы в организации делаем ПДФ с подписями не сканированием бумаги, а печатью из ДВГ. А в ДВГ у нас все подписи лежат на одном слое. При пакетной печати подлинников нужно отключать слой с подписями, при печати ПДФ - включать.
Просмотров: 8891
 
Непрочитано 18.02.2020, 15:44
1 | #21
Кулик Алексей aka kpblc
Moderator

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


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

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


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


Цитата:
Сообщение от Кулик Алексей 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
С.-Петербург
Сообщений: 37,942


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

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


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


Цитата:
Сообщение от Кулик Алексей 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
С.-Петербург
Сообщений: 37,942


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

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


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


Цитата:
Сообщение от Кулик Алексей 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
С.-Петербург
Сообщений: 37,942


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

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


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


Цитата:
Сообщение от Кулик Алексей 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
С.-Петербург
Сообщений: 37,942


Че?
__________________

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


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
через ObjectDBX
НЕ открытые документы
(odbx_layers_off '("Layer_Off_1" "Layer_Off_2"...)
Вложения
Тип файла: rar odbx_layers_off.fas.rar (6.0 Кб, 9 просмотров)
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
Сообщений: 910


Цитата:
Сообщение от 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
Сообщений: 910


ну, лично я копался во встроенном хелпере, с привлечением поисковика. в хелпере есть пример использования библиотеки 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