1. ВНИМАНИЕ! В течении пары дней +- будет переезд форума на более защищённый сервер. Возможны перебои в работе.
    Скрыть объявление

Лисп для замены координат точек

Тема в разделе "Autodesk", создана пользователем a.gonchy, 5 дек 2019.

  1. Столкнулся с проблемой: необходимо заменить в выбранной области координаты точек (менять местами будем значения оси Y и оси Z в мировой системе координат. Т.е. необходимо добиться того, чтобы лисп сам находил точки в выбранной области и сам у всех менял координаты Y и Z местами, дабы не делать это каждый раз вручную. Не смог пока понять, каким кодом это можно осуществить.
     
  2. ivsem

    ivsem Форумчанин

    Пробуй.
    Запуск программы, набрать число 11 и нажать Enter
    Тестирование программы возлагается на пользователя.
    Алгоритм программы такой: выбираются точки автокадовским методом выбора, далее программа рисует новые точки, затем удаляет старые точки.
    Перед запуском программы можно задать другой цвет, нежели у обрабатываемых точек и будет наглядно видно, что точки обработаны.
     

    Вложения:

    a.gonchy нравится это.
  3. Спасибо! При определённых условиях всё работает, но в остальных случаях разворачивает как-то по-другому.
    Суть моей проблемы, если полностью, вот в чём: есть набор точек (например, 6 шт.). Представим (для визуализации), что таким образом на тахеометр была подснята стена дома. Мне необходимо развернуть эти точки так, будто мы смотрим на стену спереди, а не сверху. Процесс поворота через ПСК слишком долгий, учитывая, что приходится делать это постоянно много раз в день. Подумал, что если поменять Y и Z местами, то оно же и получится, но так работает только в том случае, если стенка вытянута с запада на восток, а вот если с севера на юг, получается кракозябра какая-то. ::unsure.gif::
     
  4. ivsem

    ivsem Форумчанин

    Выложите чертеж dwg, в котором должно быть как было и как должно быть.
    Распишите процесс ручного преобразования из было в как должно быть.
     
  5. trir

    trir Форумчанин

    вот его и надо закодить
     
  6. Я логически понимаю как, исходя из структуры, созданной ivsem добиться результата, нужного мне:
    - Пользователь пишет команду, которая выводит ему у курсора список, где предлагает выбрать, например, 1, 2, 3 или 4 вариант.
    - Если выбирается первый вариант, то сразу начинает выполняться команда из лиспа, написанного выше.
    - Если выбирается 2, то весь чертёж (в чертеже только точки) поворачивается на 180 градусов против часовой стрелки и затем выполняется команда из лиспа выше (от ivsem).
    - Если выбирается 3, то весь чертёж поворачивается на 90 градусов против часовой и выполняется команда по аналогии.
    - Если 4 вариант, то на 90 градусов по часовой и далее по аналогии запускается команда.
    Вот логика такая, а пытаюсь это написать кодом и ничего не выходит.)
     
  7. Код:
    (defun c:\имя первой функции ()
    (initget 1 "слова")
    (setq x (getkword "\выбрать вариант [первый/второй/третий/четвёртый]: "))
    (cond
    ((= x "первый" ) (имя второй функции))
    ((= x "второй" ) ()) ; тут отправит к развороту, а разворот позже запустит вторую функцию и т.д. по аналогии
    ((= x "третий" ) ())
    ((= x "четвёртый" ) ())
    (T "error"))
    Пытаюсь что-то вроде этого сделать, но опять туплю, как развернуть теперь всё, при нужных условиях)
     
    Последнее редактирование: 6 дек 2019
  8. Всё доделал, у страха глаза велики, спасибо большое за помощь!::hi::
     
  9. BearDyugin

    BearDyugin Модератор Форумчанин

    ну так выложи, глядишь ещё кому-то пригодится.
     
    flareon нравится это.
  1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление
  1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление