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 работают вынуждены пользоваться размерными линиями для переноса объектов в существующей плоскости.
Просмотров: 17035
 
Непрочитано 10.12.2007, 17:41
#2
Кочетков Андрей

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


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

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

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,917
<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,406


(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,627


А 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,406


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


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


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


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

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


Обычно привязки срабатывают, да по ним переместить объект обычно и требуется. Это действительно интересный нюанс. Приходится измерять расстояние и перемещать на это расстояние, забивая его с клавы.
Вот было бы удобно, если бы привязки в плоскосях работали в 3М а перемещение объектов происходило в строго в 2М!?
А то бывает так переместишь, что потом не межешь это объект отыскать.
Jerald вне форума  
Ответ
Вернуться   Форум 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