Добро пожаловать!

Войдите или зарегистрируйтесь сейчас!

Войти

Помогу бесплатно разработать любую программу на autolisp.

Тема в разделе "Autodesk", создана пользователем Германup, 3 фев 2014.

  1. MrBrown

    Форумчанин

    Регистрация:
    31 июл 2013
    Сообщения:
    35
    Симпатии:
    9
    Приветствую всех на форуме!
    Можно ли на AutoLISP сделать из массива точек в модели что-то наподобие тепловой карты.
    Там, где концентрация точек большая, они (точки) коричневого цвета, где пореже - красного, ещё реже - оранжевого и т.д. до зелёного цвета.

    В приложенном файле - массив точек (Z=0).
    Требуется перебором закрасить каждую точку в нужный цвет в соответствии с расстоянием до ближайшей другой точки.
    Если расстояние менее 500 - коричневый цвет,
    501-600 - красный,
    601-700 - оранжевый,
    701-800 - жёлтый,
    801 и более - зелёный.
    Строки кода AutoLISP прошу закомментировать, не сочтите за большой труд (программистом не стану, но хоть что-то для себя почерпну).
     

    Вложения:

    • Пятно+.dwg
      Размер файла:
      366,4 КБ
      Просмотров:
      5
    #1181
  2. zvezdochiot

    Форумчанин

    Регистрация:
    27 июн 2014
    Сообщения:
    5.915
    Симпатии:
    2.092
    Адрес:
    г. Москва
    Неправильный "ответ". Диапазон надо задавать исходя из расстояния между наиболее удалёнными точками, или (что проще) из разности максимальных и минимальных координат в облаке точек, а так же их количества.
     
    #1182
  3. MrBrown

    Форумчанин

    Регистрация:
    31 июл 2013
    Сообщения:
    35
    Симпатии:
    9
    Да я ума не приложу, как и что задавать, по какому алгоритму выполнить задачу.
     
    #1183
  4. zvezdochiot

    Форумчанин

    Регистрация:
    27 июн 2014
    Сообщения:
    5.915
    Симпатии:
    2.092
    Адрес:
    г. Москва
    Дели координаты на некий dX и dY, округляй до целого и подсчитывай одинаковые. По полученной "карте" раскрашивай.

    PS: Можно и "усложнить". Сначала вычитать координаты текущей точки из остальных, потом только поделить, округлить и посчитать кол-во "нулевых".
     
    #1184
  5. MrBrown

    Форумчанин

    Регистрация:
    31 июл 2013
    Сообщения:
    35
    Симпатии:
    9
    А возможно ли сделать так:
    от каждой точки (по очереди, в цикле) определять сначала окружность радиусом в 500мм и все другие точки, попавшие в этот круг, закрасить коричневым. Эти точки далее в цикле не участвуют, и цикл продолжается с другими точками, у которых окружность уже будет 600мм. Эти точки раскрасить красным.
    Потом цикл с оставшимися точками - круг 700мм, а точки в круге - раскрасить оранжевым и так до конца цикла.
     
    #1185
  6. zvezdochiot

    Форумчанин

    Регистрация:
    27 июн 2014
    Сообщения:
    5.915
    Симпатии:
    2.092
    Адрес:
    г. Москва
    "Ручками" попробуй сначала. Ежели получится, то и лиспом сумеешь. Только выделять точки надо не "ручками", а командами. Сумеешь?
     
    #1186
  7. MrBrown

    Форумчанин

    Регистрация:
    31 июл 2013
    Сообщения:
    35
    Симпатии:
    9
    "Сумеешь?" - теоретически. Ну, делать нечего, буду пробовать...
    Вот, набросал алгоритм (см. приложенный файл)
     

    Вложения:

    #1187
  8. trir

    Форумчанин

    Регистрация:
    25 ноя 2014
    Сообщения:
    3.253
    Симпатии:
    931
    Адрес:
    gnomtrir@mail.ru
    #1188
    zvezdochiot нравится это.
  9. MrBrown

    Форумчанин

    Регистрация:
    31 июл 2013
    Сообщения:
    35
    Симпатии:
    9
    Спасибо, но я чего-то заморочился на AutoLISP сделать. Хотя сам ни бельмеса в нём.
    И ведь не для какой-то там важной задачи,а просто интересно стало: "А можно ли сваять такой макрос?"
     
    #1189
  10. zvezdochiot

    Форумчанин

    Регистрация:
    27 июн 2014
    Сообщения:
    5.915
    Симпатии:
    2.092
    Адрес:
    г. Москва
    #1190
  11. MrBrown

    Форумчанин

    Регистрация:
    31 июл 2013
    Сообщения:
    35
    Симпатии:
    9
    Народ, всех благодарю за рекомендации, за полезные ссылки. Завтра буду изучать. Всем спокойной ночи.
     
    #1191
  12. trir

    Форумчанин

    Регистрация:
    25 ноя 2014
    Сообщения:
    3.253
    Симпатии:
    931
    Адрес:
    gnomtrir@mail.ru
    #1192
  13. zvezdochiot

    Форумчанин

    Регистрация:
    27 июн 2014
    Сообщения:
    5.915
    Симпатии:
    2.092
    Адрес:
    г. Москва
    По-русски нарисано: O(n*log(n))
     
    #1193
  14. BearDyugin

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

    Регистрация:
    30 ноя 2007
    Сообщения:
    2.748
    Симпатии:
    2.505
    Адрес:
    Сибирь
    Код:
    (defun c:MrBrown (/       all_point   chek_point  border_list
      border      1_5_border  color       vla_point
      coord       pt_coord   pt_vla
     )
      (vl-load-com)
      (if
        (setq all_point (ssget "_X" (list (cons 0 "POINT"))))
         (progn
           (setq all_point  (mapcar
       (function (lambda (x / vla_point coord)
           (setq vla_point (vlax-ename->vla-object x)
         coord     (vlax-get vla_point 'Coordinates)
           )
           (list (list (car coord) (cadr coord))
         vla_point
           )
         )
       )
       (vl-remove-if
         'listp
         (mapcar 'cadr
         (ssnamex all_point)
         )
       )
     )
         chek_point  all_point
         border_list (list
       (list 500 34)
       (list 600 1)
       (list 700 30)
       (list 800 2)
     )
           )
           (foreach border border_list
     (setq
       color      (cadr border)
       border     (car border)
       1_5_border (* 1.5 border)
     )
     (foreach base_point all_point
       (setq
         coord (car base_point)
       )
       (foreach point chek_point
         (setq pt_coord    (car point)
       delta_coord (apply
     '+
     (mapcar 'abs (mapcar '- pt_coord coord))
           )
       pt_vla      (cadr point)
         )
         (if (and
       (<= delta_coord 1_5_border)
       (<= (distance pt_coord coord) border)
       (not (equal coord pt_coord))
     )
           (progn
     (setq chek_point (vl-remove point chek_point))
     (vla-put-color pt_vla color)
           )
         )
       )
     )
           )
           (mapcar (function (lambda (x)
       (vla-put-color (cadr x) 3)
     )
           )
           chek_point
           )
         )
      )
      (princ)
    )
    Комментировать лень, да и задач решена в лоб, без всяких там алгоритмов и триангуляций.
    На BricsCAD (он гораздо шустрее с LISP работает чем AutoCAD) твой файл за 5 минут переработало. Правда плотность там не высокая. почти все точки попали в максимальный диапазон
     
    #1194
    Последнее редактирование: 10 окт 2021
    flareon нравится это.
  15. MrBrown

    Форумчанин

    Регистрация:
    31 июл 2013
    Сообщения:
    35
    Симпатии:
    9
    BearDyugin, спасибо, работает, но медленно в автокаде - ужас!
    Мне на DWG.RU создали вот такой макрос (см. вложение).
    Тоже работает, быстренько так.
    Может, кому-то пригодится.
     

    Вложения:

    #1195
  16. ktyfh dfiubokdbxb

    Форумчанин

    Регистрация:
    3 апр 2016
    Сообщения:
    79
    Симпатии:
    43
    Адрес:
    Набережные Челны
    Приветствую всех! Нет ли у кого программки для создания выноски с абсолютной отметкой(или просто текст без выноски), которая вычисляется от заданного "нуля", а лучше от заданного значения. То есть, у меня на объекте сотни жб колонн эстакады с закладными деталями на гранях. Соответственно, все линейные размеры даны от низа колонны и на всю длину до каждой закладной. Отрисовал всё, четко по размерам. Считаю все отметки ручками, но немного надоело уже. Прошу помощи).
     
    #1196
    Последнее редактирование: 15 янв 2022
  17. Sergey B.

    Форумчанин

    Регистрация:
    16 мар 2017
    Сообщения:
    388
    Симпатии:
    95
    Адрес:
    Тула
    Как вариант, можно скачать с сайта autodesk модуль СПДС. В этом модуле, в том числе, есть возможность создавать динамические отметки уровня. Однако, этот модуль не все геодезисты принимают, т.к. он создавался для проектирования и рассчитан на работу в чертежах с масштабом 1 единица чертежа = 1 метр, а не 1 единица чертежа = 1 миллиметр. Также, в версиях до 2019 - 2020 года встречались глюки, приводящие к Fatal error.
     
    #1197
  18. zvezdochiot

    Форумчанин

    Регистрация:
    27 июн 2014
    Сообщения:
    5.915
    Симпатии:
    2.092
    Адрес:
    г. Москва
    Так считай в таблицах и жизнь покажется мёдом.
     
    #1198
  19. ktyfh dfiubokdbxb

    Форумчанин

    Регистрация:
    3 апр 2016
    Сообщения:
    79
    Симпатии:
    43
    Адрес:
    Набережные Челны
    В скорости выигрыша нет. У меня же и так все в размерах поэтому проще в самом акаде считать. Но геодезист же ленив и стремится автоматизировать или упростить работу.
    --- Сообщения объединены, 15 янв 2022, Оригинальное время сообщения: 15 янв 2022 ---
    Пробовал. Не то пальто. Но спасибо за отклик!
     
    #1199
  20. zvezdochiot

    Форумчанин

    Регистрация:
    27 июн 2014
    Сообщения:
    5.915
    Симпатии:
    2.092
    Адрес:
    г. Москва
    То есть таблицами ты тоже пользоваться не умеешь? Однако.
     
    #1200

Поделиться этой страницей

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