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

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

Вопрос по команде "отменить"

Ответ
Поиск в этой теме
Непрочитано 26.06.2006, 07:45 #1
Вопрос по команде "отменить"
Haos
 
инженер-строитель
 
E-burg
Регистрация: 17.05.2005
Сообщений: 696

Матчасть автокада еще не очень хорошо знаю, поэтому попрошу не бить ногами....
Как сделать так, чтобы в отмену предыдущей команды не входило зуммирование и перемещение по экрану?
Просмотров: 7879
 
Непрочитано 26.06.2006, 08:05
#2
Кулик Алексей aka kpblc
Moderator

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


По-моему, никак. Это дело висит в ядре када.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 26.06.2006, 08:12
#3
Haos

инженер-строитель
 
Регистрация: 17.05.2005
E-burg
Сообщений: 696
<phrase 1=


Цитата:
Сообщение от kpblc
По-моему, никак. Это дело висит в ядре када.
Жаль...
Haos вне форума  
 
Непрочитано 26.06.2006, 08:41
#4
kha

BIM, С#, AutoCAD, LISP
 
Регистрация: 15.03.2006
Дуброво
Сообщений: 657


А по-моему это сделано очень грамотно. Например, в арчике по умолчанию отмена действий не включает зуммирование. Ну и попробуй вспомнить что ты в какой части чертежа делал В автокаде всё под контролем. Отменяя, можно видеть где происходили изменения чертежа
kha вне форума  
 
Непрочитано 26.06.2006, 11:33
#5
Profan


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


Как-то люди забывают, что "_zoom" и "_pan" - обычные команды AutoCAD'а и, естественно, подчиняются команде отмены. В других программах, например, CorelDRAW, управление экраном осуществляется операционной системой, поэтому команды отмены внутри программы на изображение не оказывают влияния.
Profan вне форума  
 
Непрочитано 29.06.2006, 14:09 Re: Вопрос по команде "отменить"
#6
balk


 
Регистрация: 21.06.2006
С-Петербург
Сообщений: 51


Цитата:
Сообщение от Haos
Как сделать так, чтобы в отмену предыдущей команды не входило зуммирование и перемещение по экрану?
Если говорить о восстановлении обьектов (случай довольно распространенный), то существует команда "OOPS".
Эта команда восстанавливает последний обьект (или набор обьектов), удаленный либо с помощью команды "ERASE", либо при создании блока, даже если после удаления выполнялись другие команды.
balk вне форума  
 
Непрочитано 29.06.2006, 14:18
#7
Pilot

Проектировщик свиноводство
 
Регистрация: 21.08.2003
Сообщений: 2,291


Тут недавно обнаружил, что объекты, удаленные программно через лисп-фунцию, команда OOPS не восстанавливает.
Pilot вне форума  
 
Непрочитано 29.06.2006, 14:19
#8
Andi55

инженер-электрик
 
Регистрация: 12.08.2005
Иркутск
Сообщений: 523
<phrase 1=


Для Акада 2006:
Format>Options>UserPreferences>Combine zoom and pan commands галку поставить
Andi55 вне форума  
 
Непрочитано 29.06.2006, 14:37
#9
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от Pilot
Тут недавно обнаружил, что объекты, удаленные программно через лисп-фунцию, команда OOPS не восстанавливает.
Даже при установленных метках начала и конца отмены?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 29.06.2006, 17:24
#10
Pilot

Проектировщик свиноводство
 
Регистрация: 21.08.2003
Сообщений: 2,291


2 kpblc

А при чем метки? Я про OOPS говорил, а не про UNDO.
Pilot вне форума  
 
Непрочитано 29.06.2006, 20:03
#11
Profan


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


Для Pilot.
Попробовал вот такую программу:
Код:
[Выделить все]
(defun er_oops (/)
(command "_ERASE")
(princ)
)
_oops (ой) сработала. :P
Profan вне форума  
 
Непрочитано 29.06.2006, 20:30
#12
Pilot

Проектировщик свиноводство
 
Регистрация: 21.08.2003
Сообщений: 2,291


Вот после этой программы у меня не работает OOPS.
В коде вместо (setq lname "LAYER_NAME") у меня интерактивный ввод имени слоя с использованием DCL, который я тут для простоты опустил.
Сразу скажу, что большая часть этого кода не моя, а позаимствованная уже довольно давно не поню у кого (да простит меня автор).
Код:
[Выделить все]
(defun c:DelLay ( / sset_1 sset_2 prg num count ex)
   (setq lname "LAYER_NAME");!!!!!
   (setq olderr *error*
        *error* dellerr)
   (setq ocmd (getvar "CMDECHO"))(setvar "CMDECHO" 0)
   (setq lname "LAYER_NAME")
   (setq sset_1 (ssget "X" (list (cons 8 lname))))
   (if sset_1
      (progn
            (setq prg "Yes")
         (setq num (sslength sset_1))
         (setq count 0)
         (repeat (sslength sset_1)
            (entdel (ssname sset_1 count))
            (setq count (1+ count))
         )
         (if
            (ssget "X" (list (cons 8 lname)))
            (progn
              (setq tm (getvar "tilemode"))
                (if (= 1 tm)
                  (setvar "tilemode" 0)
                )
                (if (/= 1 (getvar "cvport"))
                 (progn
                  (princ "\nGo to Layout.")
                  (command "_.pspace")
                 )
                )
                (setq sset_2 (ssget "X" (list (cons 8 lname))))
                (setq count 0)
                 (repeat (sslength sset_2)
                   (entdel (ssname sset_2 count))
                   (setq count (1+ count))
                 )
              (setvar "tilemode" tm)
            )
         )
         (if (= prg "Yes")
           (progn
             (setq ex (getvar "expert"))
             (setvar "expert" 5)
             (command "_.layer"
             "_thaw" lname "")
               (if (= 0 (getvar "tilemode"))
                 (command "_.vplayer" "_vpvisdflt" lname "_thaw" "_reset"
                 lname "_all" "")
               )
             (Alert (strcat "Layer " lname ". " (itoa num) " entities deleted."))
             (setvar "expert" ex)
           )
           (prinL (list "\n" num " entities at layer " lname " deleted."))
         )
      )
      (alert (strcat " No objects at layer " lname "."))
   )
   (setq sset_1 nil)
   (setq sset_2 nil)
   (setvar "CMDECHO" ocmd)
   (setq *error* olderr)
   (princ)
);c:DelLay

(defun dellerr (s)
(if (/= s "Canceled")
    (princ (strcat "\nError: " s)))
  (setq sset_1 nil)
  (setq sset_2 nil)
  (setvar "CMDECHO" ocmd)
  (setq *error* olderr)
  (princ)
)
Pilot вне форума  
 
Непрочитано 29.06.2006, 21:51
#13
Profan


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


Вот два варианта программы:
Код:
[Выделить все]
(defun del_oops (/)
(command "_line" pause pause "")
(command "_select" "")
(entdel (entlast))
(princ)
)
и
Код:
[Выделить все]
(defun del_oops (/)
(command "_line" pause pause "")
(command "_select" "")
(command "_erase" "_l" "")
(princ)
)
В первом варианте _oops не срабатывает, а во втором срабатывает...
Profan вне форума  
 
Непрочитано 29.06.2006, 22:02
#14
Pilot

Проектировщик свиноводство
 
Регистрация: 21.08.2003
Сообщений: 2,291


Понял.
Pilot вне форума  
 
Непрочитано 29.06.2006, 23:02
#15
Profan


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


А вот что в этих программках делает команда "_select"? По-моему - ничего не делает.
Profan вне форума  
 
Непрочитано 30.06.2006, 08:34
#16
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,837


Цитата:
Сообщение от Profan
А вот что в этих программках делает команда "_select"? По-моему - ничего не делает.

Вместо _l, поставь _P.
Krieger вне форума  
 
Непрочитано 30.06.2006, 09:56
#17
Zouss


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


не хотел ввязываться, ну да ладно

когда то делал я проньку которая обеспечивала мне двойной щелчок мышью в 10 acade (собственно идею то я, если честно, подсмотрел в одной умной книжке) реальный двойной щелчок получался только на средней кнопке, так как правую и левую система не отдавала. Потом мне захотелось прикрутить на это дело какие нито команды, что в общем то получилось очень не сразу. В результате по одиночному щелчку у меня вызывалось Zoom E, а по двойному Zoom P... undo на это дело не работало... причина та же - не использовалась функция command, так как там у меня reenter получался, а вот КАК с начала темы вспомнить не могу
Zouss вне форума  
 
Непрочитано 30.06.2006, 10:29
#18
Pilot

Проектировщик свиноводство
 
Регистрация: 21.08.2003
Сообщений: 2,291


Цитата:
Сообщение от Zouss
...двойной щелчок мышью в 10 acade (собственно идею то я, если честно, подсмотрел в одной умной книжке)...
Знакомо. Эта книжка до сих пор у меня где-то валяется.
Pilot вне форума  
 
Непрочитано 30.06.2006, 10:43
#19
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,176


Цитата:
Сообщение от Pilot
Цитата:
Сообщение от Zouss
...двойной щелчок мышью в 10 acade (собственно идею то я, если честно, подсмотрел в одной умной книжке)...
Знакомо. Эта книжка до сих пор у меня где-то валяется.
А что за книжка? Если очень умная, то, может быть, какие-то идеи и алгоритмы из нее не утратили значимость и для ACAD 2006?
Я не имею в виду двойной щелчок, просто зачастую в старых книжках хорошо расписаны очень нужные вещи, которые в новых днем с огнем не сыскать.
Расскажите, PLS.
kp+ вне форума  
 
Непрочитано 30.06.2006, 12:13
#20
Zouss


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


acad полезные рецепты, в мягкой ЖОЛТОЙ обложке

к сожалению большинство рецептов морально устарело (читай присутствует в новых версиях)

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

а еще была у меня (сперли) книжка в бледно-синей обложке с изображенным на ней шаттлом "бураном" - вот ее я бы поглядел еще разок, там более менее толковые рекомендации есть по созданию единичных блоков условных обозначений
Zouss вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Вопрос по команде "отменить"