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

Вернуться   Форум 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 работают вынуждены пользоваться размерными линиями для переноса объектов в существующей плоскости.
Просмотров: 16577
 
Непрочитано 27.12.2007, 17:10
#61
Кулик Алексей aka kpblc
Moderator

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


Что 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
С.-Петербург
Сообщений: 39,787


Из врожденной сволочности и мелочности: я б заменил строку (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