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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Move 2D

Move 2D

Ответ
Поиск в этой теме
Непрочитано 10.12.2007, 17:35 #1
Move 2D
Supermax
 
Руководитель фирмы
 
Москва
Регистрация: 28.03.2007
Сообщений: 1,831

Надо переносить объекты 3D в плане не меняя их Z координату. Только по X и Y. Что-то типа команды Move, только 2D.
Когда модель в плане и очень много отметок по Z, перенос командой Move сбивает положение по Z переносимого объекта.
У кого какие мысли по поводу данной задачи. Ведь все страдают. Знаю точно. Все кто с 3D работают вынуждены пользоваться размерными линиями для переноса объектов в существующей плоскости.
Просмотров: 17132
 
Непрочитано 10.12.2007, 17:41
#2
Кочетков Андрей

Java/Kotlin/Go
 
Регистрация: 03.02.2006
Сообщений: 5,789


Фильтрами координат пользуешься?

.XY например
Кочетков Андрей вне форума  
 
Непрочитано 10.12.2007, 17:58
#3
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,925
<phrase 1=


Supermax,
не понял, в чем проблема???
а вроде этот человек расковырял динблоки по биту!!!!
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Автор темы   Непрочитано 10.12.2007, 18:03
#4
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Да чаю наверное много выпил, вот бъюсь с Move, а она не хочет принимать программно координаты.
Supermax вне форума  
 
Автор темы   Непрочитано 10.12.2007, 18:23
#5
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


И с фильтром ничего не получается. Лисп не хочет в строке Move работать. В других командах я такого еще не встречал. Везде лисп пашет, а тут брыкается и не передает ничего ни координат, ни фильтр.
Supermax вне форума  
 
Автор темы   Непрочитано 10.12.2007, 18:28
#6
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


А макрос в кнопке не слабый:
Код:
[Выделить все]
$M=$(if,$(eq,$(substr,$(getvar,cmdnames),1,4),GRIP),_move,^C^C_move)
Supermax вне форума  
 
Непрочитано 10.12.2007, 18:33
#7
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Тебе Андрей Кочетков дельную мысль предложил.
Чтобы зафиксировать Z пользуйся фильтром координат .Z в ответ на "Базовая точка" или "Вторая точка"

Код:
[Выделить все]
(defun C:MOVEZ ()
(setvar "CMDECHO" 0)
(and
(setq point-with-Z (getpoint "\nУкажите точку с нужной координатой Z <выход>:"))
(setq ss (ssget))
(princ "\nУкажите базовую точку")
(vl-cmdf "_.MOVE" ss "" ".Z" point-with-Z pause)
(princ "\nУкажите вторую точку")
(vl-cmdf ".Z" point-with-Z pause)
)
  )
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 10.12.2007, 18:37
#8
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Если точка с Z и базовая в Move одна и та же, то еще проще
Код:
[Выделить все]
(defun C:MOVEZ ()
(setvar "CMDECHO" 0)
(and
(setq ss (ssget))
(setq point-with-Z (getpoint "\nУкажите точку с нужной координатой Z <выход>:"))
(princ "\nУкажите вторую точку")
(vl-cmdf "_.MOVE" ss "" point-with-Z ".Z" point-with-Z pause)
)
  )
Обрати внимание на использование .Z
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 10.12.2007, 18:48
#9
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Да, а я через (command тужусь.

Вот, чуток подправил твой перл:
Код:
[Выделить все]
(defun C:MOVEZ ()
(setvar "CMDECHO" 0)
(and
(setq point-with-Z '(0.0 0.0 0.0))
(setq ss (ssget))
(princ "\nУкажите базовую точку")
(vl-cmdf "_.MOVE" ss "" ".Z" point-with-Z pause)
(princ "\nУкажите вторую точку")
(vl-cmdf ".Z" point-with-Z pause)
)
  )
Ну ты ж сам понимаешь, что если я по X и Y перетаскиваю, то что в Z не имеет никакого значения.
Supermax вне форума  
 
Непрочитано 10.12.2007, 18:50
#10
Кулик Алексей aka kpblc
Moderator

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


(setq pt (getpoint "\nBase point")
pt2 (getpoint pt "\nNew point"))
(vla-move obj (vlax-3d-point (list (car pt) (cadr pt))) (vlax-3d-point (list (car pt2) (cadr pt2)))
Вроде так. Пишу без проверки и запущенного acad'a.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 10.12.2007, 18:57
#11
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Ну, мужики, все круто стало. И так и сяк получается. А почему собственно в (command "_move" дальше нельзя лиспом вставлять результат расчета? Я только тут с этим столкнулся. vl-cmdf работает, а через command даже вручную в кавычках статику не дает вставить. Сбрасывает выделенное и требует указать заново объект.
Supermax вне форума  
 
Автор темы   Непрочитано 10.12.2007, 19:02
#12
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


А! Понял. Надо объект всегда вставлять.

Всем огромное спасибо!
Supermax вне форума  
 
Автор темы   Непрочитано 10.12.2007, 19:32
#13
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Kpblc, ты про obj напрочь забыл.

Хотя, лучше бы сразу на 471 странцу послал.

Последний раз редактировалось Supermax, 10.12.2007 в 19:54.
Supermax вне форума  
 
Непрочитано 10.12.2007, 20:00
#14
Profan


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


А OSNAPZ не поможет?
Profan вне форума  
 
Автор темы   Непрочитано 10.12.2007, 20:06
#15
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Да я не мечусь, хотя такую полезную ве.с.ч надо класть в библиотеку программ. Только варианта я наблюдаю аж два, а какой из них самый, самый пока не знаю.
Попробуй с OSNAPZ реализовать. Может еще лучше будет.
Supermax вне форума  
 
Непрочитано 10.12.2007, 21:12
#16
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от Supermax Посмотреть сообщение
Kpblc, ты про obj напрочь забыл.

Хотя, лучше бы сразу на 471 странцу послал.
Во-первых, я про obj не забыл. Еще раз посмотри мой пост. Работающий код:
Код:
[Выделить все]
(defun test-move (/ obj adoc pt pt2)
  (vl-load-com)
  (vla-startundomark
    (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
    ) ;_ end of vla-StartUndoMark
  (if
    (and
      (= (type
           (setq
             obj (vl-catch-all-apply
                   '(lambda () (car (entsel "\nSelect an entity <Cancel> : ")))
                   ) ;_ end of vl-catch-all-apply
             ) ;_ end of setq
           ) ;_ end of type
         'ename
         ) ;_ end of =
      (= (type (setq pt (vl-catch-all-apply
                          '(lambda () (getpoint "\nBase point <Cancel> : "))
                          ) ;_ end of vl-catch-all-apply
                     ) ;_ end of setq
               ) ;_ end of type
         'list
         ) ;_ end of =
      pt
      (= (type (setq pt2 (vl-catch-all-apply
                           '(lambda () (getpoint pt "\nEnd point <Cancel> : "))
                           ) ;_ end of vl-catch-all-apply
                     ) ;_ end of setq
               ) ;_ end of type
         'list
         ) ;_ end of =
      pt2
      ) ;_ end of and
     (progn
       (setq obj (vlax-ename->vla-object obj)
             pt  (trans pt 0 1)
             pt2 (trans pt2 0 1)
             ) ;_ end of setq
       (vla-move obj
                 (vlax-3d-point (list (car pt) (cadr pt)))
                 (vlax-3d-point (list (car pt2) (cadr pt2)))
                 ) ;_ end of vla-move
       ) ;_ end of progn
     ) ;_ end of if
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
А про страницу 471 вообще не понял прикола. Если про книги по LISP, то они на работе
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 10.12.2007, 23:11
#17
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Да....! Тут ты не забыл! Вот не забыл, так не забыл!!!
Даже смайлика подходящего я не нашел.

А нафига проверять выделенные элементы на ename? а getpoint на list? Че, были случаи, что не то выдавало?
Откаты зачем вставил? Не, я за надежность, но сравнивая предидущие тексты и этот, начинаю теряться.


471 страница в книге AutoLISP и Visual LISP в среде AutoCAD про метод Move, где буква в букву как у тебя в #10, только obj там есть, а тут нет. Я много раз просмотрел и не нашел в #10 этого obj.
Ну да это и не важно. Только для публики разве что. А я этот obj наизусть помню.
Для публики:
Код:
[Выделить все]
(setq obj (vlax-ename->vla-object (car (entsel))))
Строчка для поста #10

Эта, на первый взгляд простая задача кровь портит очень многим и почему-то до сих пор мне нигде не попадалась в темах. Давайте выберем самый лучший вариант макроса и кинем в программы.

Кстати, когда смотришь на модель в профиль, то очень часто надо перемещать объекты по Y не трогая X и Z. Надо и для этого случая сделать move. Только надо как-то правильно назвать функции. Вот причем тут Z в названии функции, когда мы перемещаем по X и Y?
Supermax вне форума  
 
Непрочитано 11.12.2007, 01:12
#18
Кулик Алексей aka kpblc
Moderator

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


Цитата:
А нафига проверять выделенные элементы на ename? а getpoint на list? Че, были случаи, что не то выдавало?
Бывали. Когда юзер кликал правой кнопкой мыши или Esc жал.
Еще раз просмотри пост 10 - упоминание об obj там есть.
Цитата:
Эта, на первый взгляд простая задача кровь портит очень многим и почему-то до сих пор мне нигде не попадалась в темах. Давайте выберем самый лучший вариант макроса и кинем в программы.
Нереал. Потому что это в данном конкретном случае тебе надо перемещать по мировой системе координат. Кому-то понадобится в своей собственной. Поэтому универсального варианта сделать невозможно. Команда _.move вкупе с фильтрами дает достаточную гибкость ИМХО.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 11.12.2007, 06:13
#19
Profan


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


Я вот ни хрена не пойму, из-за чего перемещение по осям X или Y в ортогональных проекциях должно вызывать изменение координаты Z???
Profan вне форума  
 
Непрочитано 11.12.2007, 07:09
#20
Jerald

Конструктор
 
Регистрация: 04.04.2007
Киев
Сообщений: 536


Обычно привязки срабатывают, да по ним переместить объект обычно и требуется. Это действительно интересный нюанс. Приходится измерять расстояние и перемещать на это расстояние, забивая его с клавы.
Вот было бы удобно, если бы привязки в плоскосях работали в 3М а перемещение объектов происходило в строго в 2М!?
А то бывает так переместишь, что потом не межешь это объект отыскать.
Jerald вне форума  
 
Непрочитано 11.12.2007, 08:16
#21
Кулик Алексей aka kpblc
Moderator

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


ну так чего, рисовать лисп на перемещения с игнорированием изменения одной или более координат?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 11.12.2007, 09:17
#22
Profan


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


А, привязки...
Когда-то была переменная FLATLAND.
http://www.caduser.ru/acad/index.php?var_name=FLATLAND
На самом деле установить FLATLAND в 1 не удается.
Profan вне форума  
 
Непрочитано 11.12.2007, 09:55
#23
Jerald

Конструктор
 
Регистрация: 04.04.2007
Киев
Сообщений: 536


Это не то. Это когда рисуешь в 3М, например линию, можно по зет её гнуть, а можно и запретить.
Jerald вне форума  
 
Непрочитано 11.12.2007, 10:04
#24
Кулик Алексей aka kpblc
Moderator

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


Отрезок "гнуть" нельзя. И 3Д-полилинию "гнуть" нельзя - ее можно только "сломать".
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 11.12.2007, 10:19
#25
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Я думаю FLATLAND реинкарнировалась в OSNAPZ. Комбинация OSNAPZ и ПСК даст необходимый эффект
Цитата:
OSNAPZ
Управляет автоматической проекцией объектной привязки на плоскость, параллельную плоскости XY текущей ПСК, на текущем уровне .
Код:
[Выделить все]
(defun C:MOVEZ ( / ss)(if (null(setq ss (ssget "_I")))(setq ss (ssget)))
 (setvar "OSNAPZ" 0)(command "_.MOVE" ss "" pause)
  (setvar "OSNAPZ" 1)(command pause)
  )
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 11.12.2007, 16:38
#26
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Jerald Дык, это же и сделали тут. Когда смотришь на модель в фас или профиль или план, объекты громоздятся один над другим и точки сливаются в одну. перенести надо строго по горизонтали и когда переносишь - переносимый объект либо подпрыгивает по Z, либо опускается, в зависимости к чему зацепился. Размерные линии тем и хороши (были), что всегда лежат в плоскости X, Y или Z. Я раньше практиковал следующее:
Ставишь диогональный, или ортогональный размер между точкой "от куда" надо перенести и точкой "куда" надо перенести, выделяешь объект, указываешь точку на одной линии выноски, затем на другой, где высветится знак перпендикулярности и все. Объект переместился куда надо.
А сейчас у меня есть уже кнопка Move2D и я переношу просто тыкая в точку "от куда" и в точку "куда" и тело переносится не смещаясь по Z, даже если точка, куда я указал лежит по Z не там где надо.

Когда работаешь с профилем, не с тем профилем, где обычно трубы и кабеля в земле показаны, а с профилем модели, и надо переместить объект на нужную высоту, которая имеет точки от каких либо элементов модели, расположенных на этой высоте, то перенос нужен вообще только по Y и все. На основе макросов наших уважаемых гуру это сделать - раз плюнуть.

Возьмем пример:
Изометрия, без ретуши, плита пола и стул, стоящий на ней. Видно, что ножки "погружены" в плиту. Включаем макрос перемещения только по Z, тыкаем в точку на ножке, точку на поверхности пола и стул становится на пол ножками, как и положено. Причем, если я даже зашел в изометрию орбитом, через план, все равно сработает.
Сейчас сделаю на Move выпадающее меню с Move, Move2D, и MoveY.
Supermax вне форума  
 
Автор темы   Непрочитано 25.12.2007, 20:00
#27
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Код:
[Выделить все]
(defun C:MOVEZ ( / ss)(if (null(setq ss (ssget "_I")))(setq ss (ssget)))
 (setvar "OSNAPZ" 0)(command "_.MOVE" ss "" pause)
  (setvar "OSNAPZ" 1)(command pause)
  )
Дает ошибку. Объекты смещаются по Z.

Код:
[Выделить все]
(defun C:MOVEZ ()
(setvar "CMDECHO" 0)
(and
(setq point-with-Z '(0.0 0.0 0.0))
(setq ss (ssget))
(princ "\nУкажите базовую точку")
(vl-cmdf "_.MOVE" ss "" ".Z" point-with-Z pause)
(princ "\nУкажите вторую точку")
(vl-cmdf ".Z" point-with-Z pause)
)
  )
Также дает ошибку. Объекты тоже смещаются по Z.

Код:
[Выделить все]
(defun test-move (/ obj adoc pt pt2)
  (vl-load-com)
  (vla-startundomark
    (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
    ) ;_ end of vla-StartUndoMark
  (if
    (and
      (= (type
           (setq
             obj (vl-catch-all-apply
                   '(lambda () (car (entsel "\nSelect an entity <Cancel> : ")))
                   ) ;_ end of vl-catch-all-apply
             ) ;_ end of setq
           ) ;_ end of type
         'ename
         ) ;_ end of =
      (= (type (setq pt (vl-catch-all-apply
                          '(lambda () (getpoint "\nBase point <Cancel> : "))
                          ) ;_ end of vl-catch-all-apply
                     ) ;_ end of setq
               ) ;_ end of type
         'list
         ) ;_ end of =
      pt
      (= (type (setq pt2 (vl-catch-all-apply
                           '(lambda () (getpoint pt "\nEnd point <Cancel> : "))
                           ) ;_ end of vl-catch-all-apply
                     ) ;_ end of setq
               ) ;_ end of type
         'list
         ) ;_ end of =
      pt2
      ) ;_ end of and
     (progn
       (setq obj (vlax-ename->vla-object obj)
             pt  (trans pt 0 1)
             pt2 (trans pt2 0 1)
             ) ;_ end of setq
       (vla-move obj
                 (vlax-3d-point (list (car pt) (cadr pt)))
                 (vlax-3d-point (list (car pt2) (cadr pt2)))
                 ) ;_ end of vla-move
       ) ;_ end of progn
     ) ;_ end of if
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
Работает корректно, но только по одному элементу, что меня не устраивает. Надо чтобы группа выделялась и переносилась без изменения координат элементов по Z.
Supermax вне форума  
 
Непрочитано 25.12.2007, 22:52
#28
Кулик Алексей aka kpblc
Moderator

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


С применением библиотеки:
Код:
[Выделить все]
(defun test-move (/ obj adoc pt pt2)
  (vl-load-com)
  (vla-startundomark
    (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
    ) ;_ end of vla-StartUndoMark
  (if
    (and
      (= (type
           (setq
             selset (vl-catch-all-apply
                      '(lambda () (ssget "_:L"))
                      ) ;_ end of vl-catch-all-apply
             ) ;_ end of setq
           ) ;_ end of type
         'pickset
         ) ;_ end of =
      (= (type (setq pt (vl-catch-all-apply
                          '(lambda () (getpoint "\nBase point <Cancel> : "))
                          ) ;_ end of vl-catch-all-apply
                     ) ;_ end of setq
               ) ;_ end of type
         'list
         ) ;_ end of =
      pt
      (= (type (setq pt2 (vl-catch-all-apply
                           '(lambda () (getpoint pt "\nEnd point <Cancel> : "))
                           ) ;_ end of vl-catch-all-apply
                     ) ;_ end of setq
               ) ;_ end of type
         'list
         ) ;_ end of =
      pt2
      ) ;_ end of and
     (progn
       (setq pt  (trans pt 0 1)
             pt2 (trans pt2 0 1)
             ) ;_ end of setq
       (foreach obj (mapcar 'vlax-ename->vla-object (dwgru-conv-pickset-to-list selset))
         (vla-move obj
                   (vlax-3d-point (list (car pt) (cadr pt)))
                   (vlax-3d-point (list (car pt2) (cadr pt2)))
                   ) ;_ end of vla-move
         ) ;_ end of foreach
       ) ;_ end of progn
     ) ;_ end of if
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.

Последний раз редактировалось Кулик Алексей aka kpblc, 26.12.2007 в 18:16. Причина: исправил ошибку в коде
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 26.12.2007, 12:04
#29
Евгений А.

Армспорт
 
Регистрация: 18.07.2006
Ейск
Сообщений: 355


Могу предложить свой вариант перемещения и копирования совмещённого с возможностью 3D выравнивания (что-то типа "align", отменяется через" esc" или пустой ввод) При перемещении можно ограничивать любую ось или плоскость в текущей системе координат. Качать можно здесь: http://ad-cad.narod.ru/AD-Profil.htm смотреть в дополнительных командах ad-move и ad-copy, желательно включить динамический ввод.
Евгений А. вне форума  
 
Непрочитано 26.12.2007, 16:30
#30
Jerald

Конструктор
 
Регистрация: 04.04.2007
Киев
Сообщений: 536


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
С применением библиотеки:
Код:
[Выделить все]
(defun test-move (/ obj adoc pt pt2)
  (vl-load-com)
  (vla-startundomark
    (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
    ) ;_ end of vla-StartUndoMark
  (if
    (and
      (= (type
           (setq
             selset (vl-catch-all-apply
                      '(lambda () (ssget "_:L"))
                      ) ;_ end of vl-catch-all-apply
             ) ;_ end of setq
           ) ;_ end of type
         'pickset
         ) ;_ end of =
      (= (type (setq pt (vl-catch-all-apply
                          '(lambda () (getpoint "\nBase point <Cancel> : "))
                          ) ;_ end of vl-catch-all-apply
                     ) ;_ end of setq
               ) ;_ end of type
         'list
         ) ;_ end of =
      pt
      (= (type (setq pt2 (vl-catch-all-apply
                           '(lambda () (getpoint pt "\nEnd point <Cancel> : "))
                           ) ;_ end of vl-catch-all-apply
                     ) ;_ end of setq
               ) ;_ end of type
         'list
         ) ;_ end of =
      pt2
      ) ;_ end of and
     (progn
       (setq pt  (trans pt 0 1)
             pt2 (trans pt2 0 1)
             ) ;_ end of setq
       (foreach obj (dwgru-conv-pickset-to-list selset)
         (vla-move obj
                   (vlax-3d-point (list (car pt) (cadr pt)))
                   (vlax-3d-point (list (car pt2) (cadr pt2)))
                   ) ;_ end of vla-move
         ) ;_ end of foreach
       ) ;_ end of progn
     ) ;_ end of if
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
Команде всегда предшествует префикс C: после слова defun.

Я не нашёл сего префикса ни в одном из кодов!?
Jerald вне форума  
 
Непрочитано 26.12.2007, 16:32
#31
Кулик Алексей aka kpblc
Moderator

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


Команде - да. Но это не команда, а функция (ну не любитель я рисовать команды ). А имеющийся код вызывается как
Command: (test-move)
Именно так, со скобками.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 26.12.2007, 17:44
#32
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Command: (test-move)
Select objects: Specify opposite corner: 1 found
Select objects:
Base point <Cancel> :
End point <Cancel> : ; error: bad argument type: VLA-OBJECT <Entity name: 7efa0440>

Supermax вне форума  
 
Непрочитано 26.12.2007, 18:16
#33
Кулик Алексей aka kpblc
Moderator

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


Код подправил, попробуй
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 26.12.2007, 18:43
#34
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Supermax вне форума  
 
Автор темы   Непрочитано 26.12.2007, 18:45
#35
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


А казалось бы, простая задача...
Supermax вне форума  
 
Непрочитано 26.12.2007, 19:12
#36
Кулик Алексей aka kpblc
Moderator

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


Мне как-то Эдуард сказал: "90% лиспов сейчас пишется от незнания стандартных команд AutoCAD'a", и я не смог оспорить это утверждение
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 26.12.2007, 19:56
#37
Миттрич

Проектировщик
 
Регистрация: 20.01.2006
Челябинск
Сообщений: 791


Читаю я всё это, набираюсь ума-разума... И всё-таки меня продолжает мучать вопрос: а воспользоваться некоей командой IgnorZ никак? Не знаю какая у автора вопроса версия АКАДа, к сожалению. Но хочу заметить, что в моём 2002 (вообще-то MDT, но как таковым не пользуюсь) такая есть. К слову, и привязка к середине между двумя указанными точками, с возможностью менять расположение привязываемой относительно указанных, тоже. Игнор могу ракопать, если интересно.
__________________
Главное - спокойстие... как говаривал незабвенный старик Карлсон. В чём его безусловно поддерживал его друг и соратник - Энгельссон...
Миттрич вне форума  
 
Непрочитано 26.12.2007, 20:07
#38
Jerald

Конструктор
 
Регистрация: 04.04.2007
Киев
Сообщений: 536


Раскопай.
Jerald вне форума  
 
Автор темы   Непрочитано 26.12.2007, 20:41
#39
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Цитата:
Мне как-то Эдуард сказал: "90% лиспов сейчас пишется от незнания стандартных команд AutoCAD'a", и я не смог оспорить это утверждение
А кто-то не любит их использовать...
Supermax вне форума  
 
Автор темы   Непрочитано 26.12.2007, 20:45
#40
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Kpblc, у меня модель - одни ссылки. Пришлось дописать к твоему макросу подгрузку библиотеки. А вот ее тут и нет в теме. Народ ее не найдет без пузыря.
Supermax вне форума  
 
Непрочитано 26.12.2007, 20:53
#41
Кулик Алексей aka kpblc
Moderator

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


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

Проектировщик
 
Регистрация: 20.01.2006
Челябинск
Сообщений: 791


Цитата:
// ------------------------------------------------------------------------------------
// Assist Pulldown Menu
// ------------------------------------------------------------------------------------

p_ampsnap1 [Power Snap Configuration &1]'_ampsnap1;
p_ampsnap2 [Power Snap Configuration &2]'_ampsnap2;
p_ampsnap3 [Power Snap Configuration &3]'_ampsnap3;
p_ampsnap4 [Power Snap Configuration &4]'_ampsnap4;
[--]
p_ampsnapfiltero [&Entity Filter On/Off]'_ampsnapfiltero;
p_ampsnapzo [<-Ignore &Z Coordinate On/Off]'_ampsnapzo;
Выделил название команды, которой запускается игнорирование Z. Теперь подскажите, где ( в каком файле) искать лисп ей соответствующий? Залез в суппорт мдт - не нашёл. Может она вызываться подобным образом из какого-нибудь .арх или .fas?
__________________
Главное - спокойстие... как говаривал незабвенный старик Карлсон. В чём его безусловно поддерживал его друг и соратник - Энгельссон...
Миттрич вне форума  
 
Непрочитано 26.12.2007, 22:45
#43
Кулик Алексей aka kpblc
Moderator

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


Чисто MDT'шная команда. "Не-MDT" пользователям до нее не добраться.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 26.12.2007, 23:08
#44
Миттрич

Проектировщик
 
Регистрация: 20.01.2006
Челябинск
Сообщений: 791


То есть бесполезно даже пытаться? В виде лиспа она может быть не прописана?
__________________
Главное - спокойстие... как говаривал незабвенный старик Карлсон. В чём его безусловно поддерживал его друг и соратник - Энгельссон...
Миттрич вне форума  
 
Непрочитано 26.12.2007, 23:18
#45
Кулик Алексей aka kpblc
Moderator

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


Именно. Например, IsolateObjects из ADT прописана на arx, хотя, поняв ее логику, я смог нарисовать ее и на лиспе.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 27.12.2007, 00:22
#46
Jerald

Конструктор
 
Регистрация: 04.04.2007
Киев
Сообщений: 536


Цитата:
В публикуемых кодах может быть использована библиотека DwgRuLispLib
Я извиняюсь, а что это означает? Это что то меняет в схеме использования кода?
Jerald вне форума  
 
Непрочитано 27.12.2007, 00:26
#47
Кулик Алексей aka kpblc
Moderator

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


В №28 в коде используется функция dwgru-conv-pickset-to-list. Для ее работы надо пройти по ссылке из подписи, (пока) в теме Предложение: Готовые функции скачать из №157 архив в 60 кб (там fas и несколько лиспов); fas загрузить в AutoCAD. Меня просто не хватает на полноразмерную проработку. Надеюсь, что это изменится.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 27.12.2007, 00:37
#48
Jerald

Конструктор
 
Регистрация: 04.04.2007
Киев
Сообщений: 536


Я вот что подумал: сколько помню, в ортогональных режимах работы перемещать практически всегда надо в видимой плоскости с различными привязками + копирование (ещё чаще нужно делать), тоже в одной плоскости.
Отсюда вопрос: можно Автокаду создать какую-нибудь переменную, через выставление которой можно блокировать перемещение по Зет, но только, чур, в ортогональных режимах!?
Jerald вне форума  
 
Непрочитано 27.12.2007, 00:43
#49
Кулик Алексей aka kpblc
Moderator

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


прочти повыше - osnapz не то??
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 27.12.2007, 01:05
#50
Jerald

Конструктор
 
Регистрация: 04.04.2007
Киев
Сообщений: 536


Проверил, вроде то. Только о чём тогда три страницы топика?
Jerald вне форума  
 
Непрочитано 27.12.2007, 01:09
#51
Кулик Алексей aka kpblc
Moderator

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


Да так, на предмет потрепаться
---
Кстати, я сам об этой переменной только здесь и узнал. Так что я не совсем прав был, говоря что "потрепаться"
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 27.12.2007, 11:21
#52
Евгений А.

Армспорт
 
Регистрация: 18.07.2006
Ейск
Сообщений: 355


А что, пост №29 никто не читал??? Там же готовый вариант и с перемещением и с копированием... чего тогда помощи просить? Выходит Крыс прав насчёт "потрепаться".
Евгений А. вне форума  
 
Непрочитано 27.12.2007, 11:50
#53
Jerald

Конструктор
 
Регистрация: 04.04.2007
Киев
Сообщений: 536


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Да так, на предмет потрепаться
---
Кстати, я сам об этой переменной только здесь и узнал. Так что я не совсем прав был, говоря что "потрепаться"
Ну да, а я немного поработал с лиспом, надо же когда то эту технику осваивать.
Jerald вне форума  
 
Автор темы   Непрочитано 27.12.2007, 13:06
#54
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


А я, если честно, до 29-го так и не добрался. Скачать - скачал, а проверить в полевых условиях не получилось. Может сегодня получится.

Вот может здесь я всетаки дожму вопрос. Функция - это часть языка программирования или программа для ЭВМ?

Я блин, буду в каждой теме задавать этот вопрос, пока не получу ответ.
Supermax вне форума  
 
Непрочитано 27.12.2007, 13:34
#55
Profan


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


Цитата:
Я блин
А я огурец.
Profan вне форума  
 
Непрочитано 27.12.2007, 13:37
#56
Jerald

Конструктор
 
Регистрация: 04.04.2007
Киев
Сообщений: 536


Цитата:
Сообщение от Евгений А. Посмотреть сообщение
А что, пост №29 никто не читал??? Там же готовый вариант и с перемещением и с копированием... чего тогда помощи просить? Выходит Крыс прав насчёт "потрепаться".
Евгений, мы, как видите, раскопали переменную.
У вас там что то получше?
Jerald вне форума  
 
Непрочитано 27.12.2007, 16:40
#57
Евгений А.

Армспорт
 
Регистрация: 18.07.2006
Ейск
Сообщений: 355


Цитата:
Сообщение от Jerald Посмотреть сообщение
Евгений, мы, как видите, раскопали переменную.
У вас там что то получше?
Да не, вы можете копать и дальше. Если перейти по сылке влом, то я пас!
Евгений А. вне форума  
 
Непрочитано 27.12.2007, 16:42
#58
Кулик Алексей aka kpblc
Moderator

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


Лично мне ходить не в лом, но, увидев vlx, качать не стал. Все равно исходники не посмотреть... А получить ненужные элементы типа реакторов или глобальных обработчиков ошибок тоже не хочется (был уже печальный опыт).
---
Поправка: посмотреть можно, но это такой геморрой...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 27.12.2007, 16:47
#59
Евгений А.

Армспорт
 
Регистрация: 18.07.2006
Ейск
Сообщений: 355


Цитата:
Сообщение от Supermax Посмотреть сообщение
Вот может здесь я всетаки дожму вопрос. Функция - это часть языка программирования или программа для ЭВМ?
Вроде как функция - это математическое понятие, то есть зависимость результата от исходных данных. В программировании она описана "на языке программирования" как "программа для ЭВМ", а логика всё таже...
Евгений А. вне форума  
 
Непрочитано 27.12.2007, 17:02
#60
Евгений А.

Армспорт
 
Регистрация: 18.07.2006
Ейск
Сообщений: 355


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Лично мне ходить не в лом, но, увидев vlx, качать не стал. Все равно исходники не посмотреть... А получить ненужные элементы типа реакторов или глобальных обработчиков ошибок тоже не хочется (был уже печальный опыт).
---
Поправка: посмотреть можно, но это такой геморрой...
Ну-у, батенька, волков бояться - в лес не ходить, тогда .ARX - вообще бабай страшный! :-)
Как автор, могу заверить - глобального обработчика и реакторов нема.
ps: а лазить по чужому коду - не геморой?
Евгений А. вне форума  
 
Непрочитано 27.12.2007, 17:10
#61
Кулик Алексей aka kpblc
Moderator

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


Что ARX - это хуже бабая, я и так знаю. Чего стоит практически гарантированный вылет ADT после выгружения стандартного arx, отвечающего за обработку двойного клика!
Мне же интересен не столько результат (я знаю, что он будет на высоте), мне больше интересен код.
Цитата:
ps: а лазить по чужому коду - не геморой?
Смотря какой код
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 27.12.2007, 17:52
#62
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Евгений А. Снимаю шляпу!
Все посмотрел и попробовал. Остальное скажу потом. Спешу.
Supermax вне форума  
 
Непрочитано 28.12.2007, 13:43
#63
Jerald

Конструктор
 
Регистрация: 04.04.2007
Киев
Сообщений: 536


Евгений А, а в чём преимущества использования программы "help-paper"?
Jerald вне форума  
 
Непрочитано 28.12.2007, 14:29
#64
Евгений А.

Армспорт
 
Регистрация: 18.07.2006
Ейск
Сообщений: 355


Цитата:
Сообщение от Jerald Посмотреть сообщение
Евгений А, а в чём преимущества использования программы "help-paper"?
???
Исключительно чтобы облегчить работу. Это программа впервую очередь для тех, кто делает рабочку с 3D модели в пространстве листа с использованием "_solview" и пр. На самом деле программу написал конкретно под себя, в ней есть ещё куча других комманд, которых нет в описании на сайте (кое-что ещё не довёл до удобного использования, а в основном - просто лень описывать. К примеру "ad")
Евгений А. вне форума  
 
Непрочитано 30.12.2007, 10:57
#65
Pastor

это только кличка
 
Регистрация: 22.10.2006
Москва
Сообщений: 252


Еще вариант:
http://www.caduser.ru/cgi-bin/f1/board.cgi?t=23194tl
Pastor вне форума  
 
Непрочитано 30.12.2007, 21:50
#66
Jerald

Конструктор
 
Регистрация: 04.04.2007
Киев
Сообщений: 536


Цитата:
Сообщение от Евгений А. Посмотреть сообщение
???
Исключительно чтобы облегчить работу. Это программа впервую очередь для тех, кто делает рабочку с 3D модели в пространстве листа с использованием "_solview" и пр. На самом деле программу написал конкретно под себя, в ней есть ещё куча других комманд, которых нет в описании на сайте (кое-что ещё не довёл до удобного использования, а в основном - просто лень описывать. К примеру "ad")
Хм... Ты своим постом всё запутал.
1. Прогрмма недоработана!
2. Нету инструкций по применению.
Тогда вопрос: С какой целью программа выставлена на сайте? И ещё: там ничего не сказано - платная она или бесплатная?
Jerald вне форума  
 
Непрочитано 31.12.2007, 10:07
#67
vadim_evg1


 
Регистрация: 08.01.2007
Рус
Сообщений: 398


Цитата:
Сообщение от Jerald Посмотреть сообщение
Хм... Ты своим постом всё запутал.
1. Прогрмма недоработана!
2. Нету инструкций по применению.
Тогда вопрос: С какой целью программа выставлена на сайте? И ещё: там ничего не сказано - платная она или бесплатная?
1. Дорабатывается постоянно
2. Попробую исправить, надеюсь автор против не будет
Из справки на сайте:
виД (solview+) Команда объединяет пункты Расчленить, Purge (см. ниже) и выполняет команду “_.Solview” “_U” “_W” и передаёт управление пользователю.

Фильтр слоёв (soldraw+) Выполняет команду “_.soldraw” для всех видовых экранов активного листа, настраивает цвет, тип и толщину линий для слоёв по фильтрам (см. таблицу фильтров), выполняет пункты Блокировать, Заморозить vports, передний пЛан .

Расчленить Расчленение всех вхождений блоков в пространстве модели, до полного их (Insert) отсутствия в пространстве модели.

Purge Стандартная команда удаления неиспользуемых блоков.

Оси Автоматически проставляет осевые линии в отверстиях тел в пространстве модели в слое “AXIS_centr”. Аналогичная и более надёжная функция есть в программе AD-Bolt.

Тела Обработка всех тел в модели:

Заморозить Замораживание (на всех видовых экранах) слоёв, на которых найдены тела;

Разморозить Размораживание (на всех видовых экранах) слоёв, на которых найдены тела;

Удалить Удаление всех тел модели.

Цвет Устанавливает свойства слоям по таблице шаблонов (см. далее);

передний пЛан Перенос видимых линий на передний план;

Блокировать Блокирует масштабы на всех видовых экранах активного файла;

Разблокировать Разблокирует масштабы на всех видовых экранах активного файла;

Заморозить vports Замораживает слой “VPORTS”.

Параметры Окно создания и редактирования шаблонов для пунктов «Цвет» и «Фильтр слоёв» - возможность автоматом задать нужным слоям цвет, тип линии, вес.
AD-Select - Выделение примитивов в модели по подобию с использованием множественного фильтра.

Дополнительное меню вызывается командой AD:

Редактировать имена блоков - возможность заменять, добавлять символы в именах всех блоков. Полезна при вставке одноименных блоков
Редактировать имена слоев - см.выше, только со слоями
ad-Wblock - появляется окно, указываете шаблон, блоки, путь
ad-Stamp - пропущу описание
Изменить базовые точки у блоков - и так понятно
Удалить примитивы из файла - тоже ясно
Редактор атрибутов - хорошая опция для тех, у кого рамка чертежа в виде блока с атрибутами. Позволяет изменять значение атриб. в файле или во всей папке с файлами ( должен быть открыт хотя бы один файл из нужной папки)

Команды, которые не описаны вообще:

3DPURGE - очистка 3D модели от мусора
AD-rot - поворот выбранных объектов на заданный угол вокруг центра их масс (надеюсь правильно написал) - управление с помощью цифровой клавиатуры Num*, клавиша 5 позволяет задать нужный угол
AD-Select-ins-name - выбор по имени блока с исп. фильтра
AD-Select-lay-name - по имени слоя
AD-Select-kod-name - по коду dxf
ad-ren-i - переименовывает один блок ( в случае, когда куча одинаковых блоков, а изменить нужно только один, не расчленяя)
Может есть еще команды, но я пока о них не знаю
Для удобства лучше использовать дин.ввод

Программа бесплатная и обновляется примерно раз в две-три недели
vadim_evg1 вне форума  
 
Непрочитано 02.01.2008, 03:58
#68
Jerald

Конструктор
 
Регистрация: 04.04.2007
Киев
Сообщений: 536


Цитата:
Программа бесплатная и обновляется примерно раз в две-три недели
Как можно узнавать об обновлениях?
И как узнать, когда будут готовы инструкции по применению?
Неплохо бы описать парочку примерчиков, показывающих в чём именно состоит удобство использования.

Попробую описать некоторые свои впечатления от использования пространства листа:
Очень удобно для создания ВЭ пользоваться панелью Viewports, однако к ВЭ, созданным с этой панели невозможно применять команду Drawing.
Команда Drawing меня тоже не очень радует. Мне сто лет не нужны те четыре слоя, которые после её использования появляются. Чаще всего три приходится удалять, что б не мешали.
В последнее время предпочитаю использовать команду Flatshot. Правда приходится модель три раза копировать и каждую копию поворачивать. Зато в результате получаю три ортогональных проекции в одной плоскости, взрываю блок, меняю типы линий и после этого можно уже спокойно доводить чертёж до "рабочего" вида...
Jerald вне форума  
 
Непрочитано 02.01.2008, 14:40
#69
Евгений А.

Армспорт
 
Регистрация: 18.07.2006
Ейск
Сообщений: 355


Цитата:
Сообщение от Jerald Посмотреть сообщение
Как можно узнавать об обновлениях?
И как узнать, когда будут готовы инструкции по применению?
Проблема в том, что это не универсальная программа для всех, а сборник функций которые нужны мне и тем с кем я работаю, а угодить всем - такой необходимости не возникало. Мне проще и быстрее созвониться по телефону и описать что по чём, заодно и критику услышать и тут же подправить программу и обновить её на сайте. Есть некоторые команды, которые будут корректно работать только нашими шаблонами, например ad-zoom-paper - масштабирует все листы файла по рамке чертежа, но рамка должна быть блоком с именем "Рамка общ*" - иначе будет просто _zoom _all или ad-stamp - заполняет штамп по конкретным атрибутам.
Вадим описал выше далеко не все команды и не совсем правильно некоторые. Но исправлять не буду, всё-таки тема топика про другое Могу только пообещать собраться с духом и дописать справку на сайте.
Цитата:
Сообщение от Jerald Посмотреть сообщение
взрываю блок, меняю типы линий и после этого можно уже спокойно доводить чертёж до "рабочего" вида...
Ну вот живой пример:
У меня есть три кнопки на панели с такими макросами:
1)^C^Cad-stamp;^C^Chelp-paper Д;
Автоматом заполняется штамп: проставляется матриал для деталей, имя рисунка и именуются листы в зависимости от имени файла. Затем расчленяются все блоки в модели до тел и замускается стандартная команда _solview _U _С 1 и передаётся управление пользователю, где я создаю нужные мне виды.
2)^C^Chelp-paper Ф;_regenall;
Вызывается, когда виды созданы, отмасштабированы и размещены на листе - автоматом выполняется команда _soldraw для всех видовых экранов на листе, выполняется обработка слоёв по фильтрам (присваивается нужный цвет, тип линии, вес), все "видимые" элементы переносятся на передний план, на всех видах блокируется масштаб и слой "VPORTS" замораживается.
Дальше стандартными средствами проставляются размеры, оси (кстати команда "ad-line-centr" в шаблоне надо иметь слой CENTR с нужным типом линии), выноски (есть "ad-poz", нужны настройки выноски на указание двух точек... может чего ещё)
3)^C^Cad-stamp;^C^Chelp-paper Ч Т У P В;^C^Cad-zoom-paper;^C^C_audit _y;_qsave;_close
Запускаю, когда чертежи готовы - обновляется штамп на всех листах (проставляется также пункт ЛИСТ, ЛИСТОВ), все види блокируются, контрольное расчленение блоков до тел в модели, все тела из модели удаляются, файл пургенится, листы масштабируются по рамке чертежа, выполняется проверка файла на ошибки с исправлением таковых, файл сохраняется и закрывается.
Сами видите, что я трачу своё время на "творческую" часть оформления, а не на нудную рутину.
Кстати, если не хотите расчленять блоки, можете использовать не "_soldraw", а "ad-Soldraw" или "ad-Soldraw-all", хотя мне так не нравится.

Но всё же вернёмся к нашим баранам
Вот сел и написал по-новой две команды ad-xyz-move и ad-xyz-copy - можно выбирать оси, которые используются при перемещении или копировании, этот режим сохраняется в реестре и используется при повторных запусках. Программу включил в Help-paper. Специально для КрЫса выкладываю текущий исходник:
Код:
[Выделить все]
;|
команда перемещения: AD-XYZ-MOVE 
команда копирования: AD-XYZ-COPY 
|;
(vl-load-com)
(defun c:ad-xyz-move (/ adres_reestr key_str initget_str adoc point_start select sset key
                      vlo point1)
  (setq adres_reestr "HKEY_CURRENT_USER\\Software\\AD\\ad-xyz-move"
        key_str      "[XYZ/X/Y/Z/XY/XZ/YZ]"
        initget_str  "XYZ X Y Z XY XZ YZ"
        adoc         (vla-get-activedocument (vlax-get-acad-object))
        ) ;_ end setq
  (if (not (setq key (vl-registry-read adres_reestr "key")))
    (setq key "XYZ")
    ) ;_ end if
  (if (and (setq sset (ssget))
           (= (type
                (setq point1 (vl-catch-all-apply 'getpoint
                                                 (list "Укажите базовую точку: ")
                                                 ) ;_ end vl-catch-all-apply
                      ) ;_ end setq
                ) ;_ end type
              'list
              ) ;_ end =
           (setq point_start (vlax-3d-point (trans point1 1 0)))
           (= (type (setq point_end (ad-xyz:2point point1))) 'list)
           (setq point_end (vlax-3d-point (trans point_end 1 0)))
           ) ;_ end and
    (progn (setq select (mapcar 'vlax-ename->vla-object (ad:pickset->list sset)))
           (vla-startundomark adoc)
           (foreach vlo select
             (vl-catch-all-apply 'vla-move
                                 (list vlo point_start point_end)
                                 ) ;_ end vl-catch-all-apply
             ) ;_ end foreach
           (vla-endundomark adoc)
           ) ;_ end progn
    (princ (strcat "*Отмена*\n"))
    ) ;_ end if
  (princ)
  ) ;_ end defun

(defun c:ad-xyz-copy (/ adres_reestr key_str initget_str adoc point_start select sset key
                      vlo point1)
  (setq adres_reestr "HKEY_CURRENT_USER\\Software\\AD\\ad-xyz-copy"
        key_str      "[XYZ/X/Y/Z/XY/XZ/YZ]"
        initget_str  "XYZ X Y Z XY XZ YZ"
        adoc         (vla-get-activedocument (vlax-get-acad-object))
        ) ;_ end setq
  (if (not (setq key (vl-registry-read adres_reestr "key")))
    (setq key "XYZ")
    ) ;_ end if
  (if (and (setq sset (ssget))
           (setq select (mapcar 'vlax-ename->vla-object (ad:pickset->list sset)))
           (= (type
                (setq point1 (vl-catch-all-apply 'getpoint
                                                 (list "Укажите базовую точку: ")
                                                 ) ;_ end vl-catch-all-apply
                      ) ;_ end setq
                ) ;_ end type
              'list
              ) ;_ end =
           (setq point_start (vlax-3d-point (trans point1 1 0)))
           ) ;_ end and
    (while (= (type (setq point_end (ad-xyz:2point point1))) 'list)
      (setq point_end (vlax-3d-point (trans point_end 1 0)))
      (vla-startundomark adoc)
      (foreach vlo select
        (and (not (vl-catch-all-error-p
                    (setq vlo (vl-catch-all-apply 'vla-copy (list vlo)))
                    ) ;_ end vl-catch-all-error-p
                  ) ;_ end not
             (vl-catch-all-error-p
               (vl-catch-all-apply 'vla-move
                                   (list vlo point_start point_end)
                                   ) ;_ end vl-catch-all-apply
               ) ;_ end vl-catch-all-error-p
             (vl-catch-all-apply 'vla-delete (list vlo))
             ) ;_ end and
        ) ;_ end foreach
      (vla-endundomark adoc)
      ) ;_ end while
    (princ (strcat "*Отмена*\n"))
    ) ;_ end if
  (princ)
  ) ;_ end defun


(defun ad-xyz:2point (point1 / msg)
  (while (and (progn (initget initget_str)
                     (setq msg
                            (vl-catch-all-apply
                              'getpoint
                              (list
                                point1
                                (strcat "Новое положение базовой точки или Выберите используемые оси <"
                                        key
                                        ">: "
                                        key_str
                                        ) ;_ end strcat
                                ) ;_ end list
                              ) ;_ end vl-catch-all-apply
                           ) ;_ end setq
                     ) ;_ end progn
              (= (type msg) 'str)
              ) ;_ end and
    (if (/= msg key)
      (vl-registry-write adres_reestr "key" (setq key msg)) ;_ end vl-registry-write
      ) ;_ end if
    ) ;_ end while
  (if (= (type msg) 'list)
    (cond ((= key "XYZ") msg)
          ((= key "X") (list (car msg) (cadr point1) (caddr point1)))
          ((= key "Y") (list (car point1) (cadr msg) (caddr point1)))
          ((= key "Z") (list (car point1) (cadr point1) (caddr msg)))
          ((= key "XY") (list (car msg) (cadr msg) (caddr point1)))
          ((= key "XZ") (list (car msg) (cadr point1) (caddr msg)))
          ((= key "YZ") (list (car point1) (cadr msg) (caddr msg)))
          (t msg)
          ) ;_ end cond
    ) ;_ end if
  ) ;_ end defun

(defun ad:pickset->list (value / tab index)
  (repeat (setq tab   nil
                index (sslength value)
                ) ;_ end setq
    (setq tab (cons (ssname value (setq index (1- index))) tab))
    ) ;_ end repeat
  ) ;_ end defun
Евгений А. вне форума  
 
Непрочитано 03.01.2008, 01:01
#70
Кулик Алексей aka kpblc
Moderator

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


Из врожденной сволочности и мелочности: я б заменил строку (setq sset (ssget)) на (setq sset (ssget "_:L")), исключив таким образом заблокированные слои. Да и в initget попробовал поиграться с вариантом (initget 128 initget_str)...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Move 2D



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблемма после команды MOVE *LUCKY* AutoCAD 6 12.07.2007 10:25
move - Do you really want to do this? Apelsinov AutoCAD 11 30.05.2007 21:48
Solidedit > Faces > Move? Styx AutoCAD 2 27.09.2006 13:22
Динамические блоки. Параметр Rotate Tramp Динамические блоки 5 29.06.2006 14:53
Можно ли отключить резиновую нить при MOVE? {Smirnoff} Программирование 10 20.01.2004 16:30