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

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

Move 2D

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

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

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


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


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


А, привязки...
Когда-то была переменная 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
С.-Петербург
Сообщений: 39,848


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

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


Я думаю 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
С.-Петербург
Сообщений: 39,848


С применением библиотеки:
Код:
[Выделить все]
(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
С.-Петербург
Сообщений: 39,848


Команде - да. Но это не команда, а функция (ну не любитель я рисовать команды ). А имеющийся код вызывается как
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
С.-Петербург
Сообщений: 39,848


Код подправил, попробуй
__________________
Моя библиотека 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
С.-Петербург
Сообщений: 39,848


Мне как-то Эдуард сказал: "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 вне форума  
Ответ
Вернуться   Форум 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