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

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Как переключаться между листами?

Как переключаться между листами?

Ответ
Поиск в этой теме
Непрочитано 24.10.2006, 19:32 #1
Как переключаться между листами?
Рогатин
 
конструктор Al (не волшебник, а только учусь)
 
Моcква
Регистрация: 04.12.2003
Сообщений: 133

Подскажите, как можно переключаться между листами (Alt+Tab переключаться между открытыми файлами)? Т.е. между моделью и листом; между листом и листом.
__________________
...быть, а не казаться...
Просмотров: 27693
 
Непрочитано 24.10.2006, 20:21
#2
Jek


 
Регистрация: 18.07.2006
Стольный г. Омск
Сообщений: 56


Ctrl+PageUp
Ctrl+PageDown
Jek вне форума  
 
Автор темы   Непрочитано 24.10.2006, 20:31
#3
Рогатин

конструктор Al (не волшебник, а только учусь)
 
Регистрация: 04.12.2003
Моcква
Сообщений: 133
<phrase 1=


Спасибо, а можно назначить какому-нибудь сочетанию клавиш, чтобы с любого листа прыгать на модель.
__________________
...быть, а не казаться...
Рогатин вне форума  
 
Непрочитано 25.10.2006, 08:34
#4
Кулик Алексей aka kpblc
Moderator

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


_mspace либо алиас на нее
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 25.10.2006, 09:01
#5
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Не пойму, а чем плохО отображение вкладок внизу экрана? Там же запросто можно переключаться из модели в ЛЮБОЙ лист, из ЛЮБОГО листа в модель и из любого листа в любой лист. Листов более 100? А сочетания клавиш позволяют переключаться между листами только последовательно.
Profan вне форума  
 
Непрочитано 25.10.2006, 09:33
#6
Геннадий aka PG

Машиностроение, Проектирование
 
Регистрация: 15.09.2003
Москва
Сообщений: 1,113
<phrase 1=


тут есть небольшое неудобство: когда границы листа и видового экрана вне поля монитора (невидны) можно случайно влезь в модель через видовой экран или специально влезть для какой то корректировки и тогда могут быть ненужные казусы, например, невыйдя из модели, зуммировать "ALL"
Потом придется делать ненужные откаты
Я сделал себе кнопки и вставил в меню

Код:
[Выделить все]
**SPACE_CNG
**ПРОСТРАНСТВА
               [_Toolbar("Пространства", _Top, _Show, 2, 1, 1)]
ID_Mspace_0    [_Button("Mspace", "mspace.bmp", "mspace.bmp")]^C^C_mspace 
ID_Pspace_0    [_Button("Pspace", "pspace.bmp", "pspace.bmp")]^C^C_pspace 
ID_TileMode_0  [_Button("TileMode", "tilemode.bmp", "tilemode.bmp")]^C^C(if(eq (getvar"tilemode") 0)(setvar "tilemode" 1)(setvar "tilemode" 0))


Стало удобнее
__________________
С уважением,
Геннадий aka PG
Геннадий aka PG вне форума  
 
Непрочитано 03.02.2016, 06:44
#7
RNB

Проектирование мостов
 
Регистрация: 29.01.2014
Новосибирск
Сообщений: 433


Цитата:
Сообщение от Jek Посмотреть сообщение
Ctrl+PageUp
Ctrl+PageDown
Извиняюсь за некропостинг, но тема более чем подходящая.
Командами это как-то делается?
RNB вне форума  
 
Непрочитано 03.02.2016, 09:55
1 | #8
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,991
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Цитата:
Сообщение от RNB Посмотреть сообщение
Командами это как-то делается?
Цитата:
Команда: _ctab

Новое значение CTAB <"Model">: лист1.
Выполняется регенерация листов.
Можно лиспом
Код:
[Выделить все]
(setvar "CTAB" "Layname")
где Layname - имя вкладки
Или воспользоваться готовым решением LISP. Копирование, сортировка, переименование листов (layout)
Цитата:
LS - Переключение на нужный лист (Layout switch)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 03.02.2016, 09:59
#9
RNB

Проектирование мостов
 
Регистрация: 29.01.2014
Новосибирск
Сообщений: 433


А есть именно переключение на следующий/предыдущий лист?
RNB вне форума  
 
Непрочитано 03.02.2016, 12:39
1 | #10
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,991
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Цитата:
Сообщение от RNB Посмотреть сообщение
А есть именно переключение на следующий/предыдущий лист?
Код:
[Выделить все]
(defun C:Next (/ lay lts)
  (vl-load-com)
  (setq lts (vla-get-layouts
              (vla-get-activedocument (vlax-get-acad-object))
            ) ;_ end of vla-get-layouts
  ) ;_ end of setq
  (if (vl-catch-all-error-p
        (vl-catch-all-apply
          '(lambda ()
             (setq lay
                    (vla-item
                      lts
                      (1+
                        (vla-get-taborder
                          (vla-item lts (getvar "CTAB"))
                        ) ;_ end of vla-get-TabOrder
                      ) ;_ end of 1+
                    ) ;_ end of vla-item
             ) ;_ end of setq
           ) ;_ end of lambda
        ) ;_ end of VL-CATCH-ALL-APPLY
      ) ;_ end of VL-CATCH-ALL-ERROR-P
    (setvar 'CTAB
            (vla-get-name (vla-item lts 1))
    ) ;_ end of setvar
    (setvar 'CTAB (vla-get-name lay))
  ) ;_ end of if
) ;_ end of defun
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 03.02.2016 в 12:47.
VVA вне форума  
 
Непрочитано 03.02.2016, 12:50
#11
RNB

Проектирование мостов
 
Регистрация: 29.01.2014
Новосибирск
Сообщений: 433


Вот спасибо!
Я правильно понимаю, если 1+ поменять на 1-, будет возврат на 1 назад?
UPD. Поменял, работает
RNB вне форума  
 
Непрочитано 03.02.2016, 16:13
1 | #12
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,991
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Цитата:
Сообщение от RNB Посмотреть сообщение
Я правильно понимаю, если 1+ поменять на 1-, будет возврат на 1 назад?
Да, до граничных условий. Надо поменять еще в одном месте
Код:
[Выделить все]
(defun C:Prev (/ lay lts)
  (vl-load-com)
  (setq lts (vla-get-layouts
              (vla-get-activedocument (vlax-get-acad-object))
            ) ;_ end of vla-get-layouts
  ) ;_ end of setq
  (if (vl-catch-all-error-p
        (vl-catch-all-apply
          '(lambda ()
             (setq lay
                    (vla-item
                      lts
                      (1- ;;;<<<< Здесь
                        (vla-get-taborder
                          (vla-item lts (getvar "CTAB"))
                        ) ;_ end of vla-get-TabOrder
                      ) ;_ end of 1+
                    ) ;_ end of vla-item
             ) ;_ end of setq
           ) ;_ end of lambda
        ) ;_ end of VL-CATCH-ALL-APPLY
      ) ;_ end of VL-CATCH-ALL-ERROR-P
    (setvar 'CTAB
            (vla-get-name (vla-item lts (1- (vla-get-Count lts)))) ;;;<<<< Здесь
    ) ;_ end of setvar
    (setvar 'CTAB (vla-get-name lay))
  ) ;_ end of if
) ;_ end of defun
----- добавлено через ~1 ч. -----
Все в одном. Даны короткие команды
Код:
[Выделить все]
 
(defun C:,()(layPrev))
(defun C:Б()(layPrev))
(defun C:.()(layNext))
(defun C:Ю()(layNext))
(defun layPrev (/ lay lts)
  (vl-load-com)
  (setq lts (vla-get-layouts
              (vla-get-activedocument (vlax-get-acad-object))
            ) ;_ end of vla-get-layouts
  ) ;_ end of setq
  (if (vl-catch-all-error-p
        (vl-catch-all-apply
          '(lambda ()
             (setq lay
                    (vla-item
                      lts
                      (1-
                        (vla-get-taborder
                          (vla-item lts (getvar "CTAB"))
                        ) ;_ end of vla-get-TabOrder
                      ) ;_ end of 1+
                    ) ;_ end of vla-item
             ) ;_ end of setq
           ) ;_ end of lambda
        ) ;_ end of VL-CATCH-ALL-APPLY
      ) ;_ end of VL-CATCH-ALL-ERROR-P
    (setvar 'CTAB
            (vla-get-name (vla-item lts (1- (vla-get-Count lts))))
    ) ;_ end of setvar
    (setvar 'CTAB (vla-get-name lay))
  ) ;_ end of if
) ;_ end of defun
(defun layNext (/ lay lts)
  (vl-load-com)
  (setq lts (vla-get-layouts
              (vla-get-activedocument (vlax-get-acad-object))
            ) ;_ end of vla-get-layouts
  ) ;_ end of setq
  (if (vl-catch-all-error-p
        (vl-catch-all-apply
          '(lambda ()
             (setq lay
                    (vla-item
                      lts
                      (1+
                        (vla-get-taborder
                          (vla-item lts (getvar "CTAB"))
                        ) ;_ end of vla-get-TabOrder
                      ) ;_ end of 1+
                    ) ;_ end of vla-item
             ) ;_ end of setq
           ) ;_ end of lambda
        ) ;_ end of VL-CATCH-ALL-APPLY
      ) ;_ end of VL-CATCH-ALL-ERROR-P
    (setvar 'CTAB
            (vla-get-name (vla-item lts 1))
    ) ;_ end of setvar
    (setvar 'CTAB (vla-get-name lay))
  ) ;_ end of if
) ;_ end of defun
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 17.06.2016, 23:16
#13
kedobear


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


Цитата:
Сообщение от VVA Посмотреть сообщение
Да, до граничных условий. Надо поменять еще в одном месте
Для определения искомой вкладки из указателя на семейство вкладок вы используете метод vla-item, который позволяет искать по индексу или имени. Проблема в том, что для vla-item вы не можете точно указать, что именно является поисковым аргументом: номер вкладки или имя вкладки. Поэтому для файлов, содержащих вкладки с цифрами в имени, ваш код будет работать некорректно (возможно, будут проблемы и с вкладками, фрагменты имен которых повторяются).
Я предлагаю следующий вариант, который будет работать независимо от имени вкладки (за исключительную краткость не ручаюсь):
Код:
[Выделить все]
 (defun c:layprev
       (/ ad lts i cur_lay_num prev_lay_num lay i_lay_num count)
  (vl-load-com)
  (setq ad (vla-get-activedocument (vlax-get-acad-object)))
  (setq lts (vla-get-layouts ad))	;получили указатель на семейство вкладок (модель - вкладка за номером 0)
  (setq cur_lay_num (vla-get-taborder (vla-get-ActiveLayout ad)))
					;получили номер текущего листа
  (setq prev_lay_num (1- cur_lay_num))	;отняли от номера текущего листа 1, получили номер предыдущего листа
  (setq count (vla-get-Count lts))
  (if (= cur_lay_num 1)			;если мы находимся на первом листе, то предыдущей вкладкой будет Модель
    (setvar 'TILEMODE 1)		;переходим в Модель
  )
  (if (/= cur_lay_num 0)		;если наша вкладка не Модель, выполняется первый foreach
    (foreach i (layoutlist)		;выполняем цикл, подставляя в качестве i по очереди имя каждого листа (не модели!) по алфавиту
      (setq lay (vla-item lts i))	;по имени очередного листа из списка определяем указатель на него
      (setq i_lay_num (vla-get-taborder lay))
					;получаем номер нашего листа из списка (номер с учетом нулевого номера модели)
      (if (= i_lay_num prev_lay_num)	;если номер листа из списка совпал с номером предыдущего листа
	(setvar 'CTAB i)		;переменная CTAB принимает имя листа из списка, переключаемся на этот лист
      )
    )
    (foreach i (layoutlist)		;если наша вкладка - Модель, выполняется второй foreach, в котором мы ищем последнюю вкладку и переключаемся на нее
      (setq lay (vla-item lts i))
      (setq i_lay_num (vla-get-taborder lay))
      (if (= i_lay_num (1- count))
	(setvar 'CTAB i)
      )
    )
  )
  (princ)
)

(defun c:laynext
       (/ ad lts i cur_lay_num next_lay_num lay i_lay_num count)
  (vl-load-com)
  (setq ad (vla-get-activedocument (vlax-get-acad-object)))
  (setq lts (vla-get-layouts ad))	;получили указатель на семейство вкладок (модель - вкладка за номером 0)
  (setq cur_lay_num (vla-get-taborder (vla-get-ActiveLayout ad)))
					;получили номер текущего листа
  (setq next_lay_num (1+ cur_lay_num))	;прибавили к номеру текущего листа 1, получили номер следующего листа
  (setq count (vla-get-Count lts))
  (if (= cur_lay_num (1- count))	;если мы находимся на последнем листе, то следующей вкладкой будет Модель
    (setvar 'TILEMODE 1)		;переходим в Модель
  )
  (foreach i (layoutlist)		;выполняем цикл, подставляя в качестве i по очереди имя каждого листа (не модели!) по алфавиту
    (setq lay (vla-item lts i))		;по имени очередного листа из списка определяем указатель на него
    (setq i_lay_num (vla-get-taborder lay))
					;получаем номер нашего листа из списка (номер с учетом нулевого номера модели)
    (if	(= i_lay_num next_lay_num)	;если номер листа из списка совпал с номером следующего листа
      (setvar 'CTAB i)			;переменная CTAB принимает имя листа из списка, переключаемся на этот лист
    )
  )
  (princ)
)
kedobear вне форума  
 
Непрочитано 18.07.2019, 16:03
#14
allar8


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


Цитата:
Сообщение от VVA Посмотреть сообщение
(setvar "CTAB" "Layname")
Зачет. Спасибо. Давно искал способ автоматического перехода в пространство модели при открытии файла через подшивку
В одной теме Кулик Алексей подсказал как запустить лисп при открытии - нужно его прописать в acad.mnl
Т.е., прописав в этом файле (setvar "CTAB" "model") - получил то что хотел

Не совсем что хотел(

С открытыми файлами при переходе через подшивку - все таки открывается лист, а хотелось бы чтоб всегда открывалась модель.
Это нужно мне потому, что пространства листов я использую как вспомогательные элементы для использования подшивки
(а подшивку использую только для связей между файлами)
и в пространстве листов не работаю и не размещаю никакой информации, в том числе и видовые экраны.
Работаю чисто в модели

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

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


Попробуй поменять tilemode
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 18.07.2019, 16:33
#16
allar8


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


Вроде оно, но не пойму как это применить при выборе файла через диспетчер подшивок c ОТКРЫТЫМИ УЖЕ файлами
Ведь при выборе листа (мне важен не выбранный лист а пространство модели файла в котором этот лист) через диспетчер подшивок открывается этот лист
и руками надо tilemode в 1 сделать.
А хочется не руками а чтоб автоматически tilemode делался в 1
Т.е. посути результат тот же
прописанные в acad.mnl
(setvar "CTAB" "model")
и
(setvar "tilemode" 1)
Равнозначны

По сути меня бы устроило следующее:
Запрет выбора вкладок листов - В место них всегда автоматически выбирать вкладку модель

Пока опять присандалил к Регенерировать все, но надо для перехода в пространство модели нажать F9 )))
Изврат скажете?) - не спорю. Но хоть так)
Показалось удобнее, чем тыкнуть мышкой на вкладку модель)))

Последний раз редактировалось allar8, 18.07.2019 в 20:12.
allar8 вне форума  
 
Непрочитано 18.07.2019, 17:55
| 1 #17
Сергей812


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


Цитата:
Сообщение от allar8 Посмотреть сообщение
и в пространстве листов не работаю и не размещаю никакой информации, в том числе и видовые экраны.
Работаю чисто в модели
гиперссылки на вид в пространстве модели (причем если файл закрыт, то его акад автоматически откроет). Подшивка предназначена для работы с листами, и у вас болтается неприкаянная по сути)
Сергей812 вне форума  
 
Непрочитано 18.07.2019, 20:07
#18
allar8


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


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Подшивка предназначена для работы с листами, и у вас болтается неприкаянная по сути)
Согласен - болтается по сути), но умышленно). Я сторонник работы в пространстве модели - подшивка нужна мне сейчас только для зависимых связей через ее свойства между файлами (в основном ссылки на номера листов интересны и доп свойства подшивки).
Для автоматизированной печати раньше пользовался только реверсом. Сейчас на новом месте работы своя софтина, которая не только с dwg, но и офисными файлами дружит. Дома иногда надо, если че запдфить - использую реверс.)

Последний раз редактировалось allar8, 19.07.2019 в 08:03.
allar8 вне форума  
 
Непрочитано 18.07.2019, 23:59
#19
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,991
<phrase 1= Отправить сообщение для VVA с помощью Skype™


allar8,
Как запретить отключение шага?
Попробуй в коде SNAPMODE поменять на TILEMODE
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 19.07.2019, 07:57
#20
allar8


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


Цитата:
Сообщение от VVA Посмотреть сообщение
allar8,
Как запретить отключение шага?
Попробуй в коде SNAPMODE поменять на TILEMODE
Не понимаю как это связано, но сделал - поменял и добавил код в acad.mnl.
Да в листы не переходит, но какой то странный глюк появился при выборе через подшивку - какое то визуальное задублирование при прокрутке колеса мыши - не пойму что это такое. (см. вложение)

----- добавлено через ~8 мин. -----
Цитата:
Сообщение от allar8 Посмотреть сообщение
как это применить при выборе файла через диспетчер подшивок c ОТКРЫТЫМИ УЖЕ файлами
В принципе я так подумал - не так уж это и важно - между открытыми файлами все равно навигация через Ctrl+Tab
Так что всем спасибо за идею с
(setvar "CTAB" "model")
(setvar "tilemode" 1)
Миниатюры
Нажмите на изображение для увеличения
Название: 1.png
Просмотров: 81
Размер:	200.6 Кб
ID:	216106  

Последний раз редактировалось allar8, 19.07.2019 в 09:53.
allar8 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Как переключаться между листами?

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

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