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

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

Войти

Найти точки ниже (выше) поверхности

Тема в разделе "Civil 3D", создана пользователем АлексЮстасу, 8 ноя 2016.

  1. Евгений Рак

    Форумчанин

    Регистрация:
    26 окт 2012
    Сообщения:
    26
    Симпатии:
    14
    Адрес:
    Красноярск
    Наверно уже не актуально, но хочу предложить свой вариант решения данной задачи.
    1) Создать поверхность для подсчета объемов.
    2) Создать дубли тех точек COGO которые необходимо сравнить с поверхностью (лучше в группе или другом слое). Можно и не создавать, но только в том случае если поверхность не опирается на эти точки.
    3) Сохранить чертеж
    4) Выбрать дублированную группу точек и поднять ее на поверхность для подсчета объемов, таким образом все точки выше поверхности будут иметь отметку положительную, ниже отрицательную.
    5) Через быстрый выбор выбрать точки по свойству отметки больше нуля, получим выбранный массив точек лежащих выше поверхности.
    6) Создаем группу точек (не сбрасывая выбор), выбираем вкладку включить, по номерам точек - указать на чертеже точки и так как массив точек выбран то поле заполниться номерами точек (формат примерно такой "1,3,10,15-25,31"), далее копируем это поле во внешний текстовый файл.
    7) Закрываем чертеж не сохраняя его.
    8) Открываем чертеж, создаем группу точек и выбираем включить по номерам точек и вставляем скопированные ранее номера точек. И получаем группу точек выше поверхности.
    Так же можно сделать для точек ниже поверхности
     
    #21
    АлексейМанс нравится это.
  2. Alexandr-GR

    Форумчанин

    Регистрация:
    9 июн 2011
    Сообщения:
    1.192
    Симпатии:
    945
    Адрес:
    Новосибирск
    Как вариант(прикрепил лисп). Запускается также как называется. Выбираем целевую поверхность,из всех точек выбираются точки либо над поверхностью, либо ниже поверхности, либо на самой поверхности, ли за пределами поверхности в зависимости от выбранного варианта.
     

    Вложения:

    • onsurf.lsp
      Размер файла:
      1,6 КБ
      Просмотров:
      65
    #22
    TulGeo, SOYZNIK, ardi.stroi и 7 другим нравится это.
  3. АлексЮстасу

    Форумчанин

    Регистрация:
    28 май 2012
    Сообщения:
    1.869
    Симпатии:
    668
    Адрес:
    Маськва
    Круто! И гораздо шире заданного вопроса. :)
    Оффтоп
    Кстати, на базе этого можно сделать классификацию точек по диапазонам высот относительно "земли". Как это сделано в самом мощном ПО для работы с точками лазерного сканирования - в Terrasolid.
    Там можно классифицировать точки на классы "низкая растительность", "средняя растительность", "высокая растительность", выделить "птиц" и т.д. Т.е. там вызывается команда классификации по высоте, указывается слой, относительно которого ("земля"), слой в который, и диапазон высот.
    Но Terrasolid работает с облаками точек, миллионами, которые отражают в целом местность подробно. А здесь все-таки точки в виде графических примитивов, т.е. относительно немного - тысячи. Реальная польза может быть небольшая. Но зато и сделать на базе этой программы, похоже, не оч. сложно...
     
    #23
    АлексейМанс нравится это.
  4. Sergey B.

    Форумчанин

    Регистрация:
    16 мар 2017
    Сообщения:
    388
    Симпатии:
    95
    Адрес:
    Тула
    Alexandr-GR, спасибо! Нужная вещь
     
    #24
  5. Vit.Blackbird

    Регистрация:
    9 июн 2019
    Сообщения:
    4
    Симпатии:
    0
    Что-то в Civil 3D 2020 не работает. Когда вызываешь команду, то сразу выдаёт, что не найдено поверхностей или примитивов. И не важно, вызываешь её, когда уже выбрал целевую поверхность или нет. Будто игнорирует первое условие if. Может для новой версии Civil надо модифицировать код? Очень нужна это программа.
     
    #25
  6. ivsem

    Форумчанин

    Регистрация:
    26 мар 2009
    Сообщения:
    2.475
    Симпатии:
    1.051
    Адрес:
    Киев
    Попробуй в программу вставить строку (vl-load-com) и знак подчеркивания перед X.
    (defun c:onsurf (/ nbr srf fl)
    (vl-load-com)
    (if
    (and (setq nbr (ssget "_X" '((0 . "POINT"))))
     
    #26
    Vit.Blackbird нравится это.
  7. Vit.Blackbird

    Регистрация:
    9 июн 2019
    Сообщения:
    4
    Симпатии:
    0
    Эх, к сожалению ничего не изменилось. Если у тебя работает, то может у меня проблема?
     
    #27
  8. Sergey B.

    Форумчанин

    Регистрация:
    16 мар 2017
    Сообщения:
    388
    Симпатии:
    95
    Адрес:
    Тула
    Vit.Blackbird, работает на 2020 версии. Проверено
     
    #28
    Vit.Blackbird нравится это.
  9. Vit.Blackbird

    Регистрация:
    9 июн 2019
    Сообщения:
    4
    Симпатии:
    0
    Sergey B., если вас не затруднит, то сможете проверить работу кода на этом чертеже? Тут облако точек, разрезанное поверхностью, требуется выбрать те, которые выше неё. Если код сработает, то буду искать у себя проблемы дальше. Может проблемы в чертеже самом? Буду очень признателен.
     

    Вложения:

    #29
  10. Sergey B.

    Форумчанин

    Регистрация:
    16 мар 2017
    Сообщения:
    388
    Симпатии:
    95
    Адрес:
    Тула
    Vit.Blackbird, лисп работает с точками AutoCAD, а не с точками CoGo. Есть несколько способов для трансформации. Прикладываю ваш файл с добавленными точками AutoCAD. Точки выше поверхности обозначены фиолетовым цветом и находятся в слое "Точки выше поверхности". Точки на поверхности обозначены зелёным цветом и находятся в соответствующем слое. Точки ниже поверхности - синие. И так же в отдельном слое.
     

    Вложения:

    #30
    Vit.Blackbird нравится это.
  11. shiz

    Форумчанин

    Регистрация:
    17 фев 2013
    Сообщения:
    523
    Симпатии:
    186
    Средствами цивила можно сделать так:
    1. Строим две поверхности по разным наборам точек.
    2. Сравниваем две поверхности и получаем поверхность объемов.
    3. Поверхность объемов экспортируем в xml .
    4. Удаляем все поверхности.
    5. Импортируем поверхность объемов обратно.
    6. Нужную группу точек опускаем на эту поверхность.
    7. Создаём две группы точек: одна плюс, другая минус.
    8. Через мастер запросов выбираем точки с минусом и с плюсом в нужную группу автоматом.
     
    #31
    Vit.Blackbird нравится это.
  12. Sergey B.

    Форумчанин

    Регистрация:
    16 мар 2017
    Сообщения:
    388
    Симпатии:
    95
    Адрес:
    Тула
    shiz, слишком много действий получается. Проще использовать лисп onsurf.lsp, предварительно создав точки AutoCAD по точкам COGO. Первый вариант: настроить стиль маркера точки в виде точки AutoCAD 2.jpg , затем взорвать несколько раз блок точки COGO.
    Второй вариант. из точек COGO создается поверхность. Назначается стиль поверхности с отображением точек. Далее нужно извлечь объекты (точки) из поверхности. Точки AutoCAD готовы.
     
    #32
    Vit.Blackbird нравится это.
  13. shiz

    Форумчанин

    Регистрация:
    17 фев 2013
    Сообщения:
    523
    Симпатии:
    186
    В первом предложении указано средствами цивил. Если взять ещё и эксель в помощь, то даже писать и искать лиспы не нужно, а задача решается в два раза короче и быстрее
    --- Сообщения объединены, 7 дек 2019, Оригинальное время сообщения: 7 дек 2019 ---
    Описывать решение?
     
    #33
  14. Neznayka

    Форумчанин

    Регистрация:
    8 дек 2007
    Сообщения:
    456
    Симпатии:
    313
    Адрес:
    Brest
    ой, как интересно. мой вариант:
    1. строим из точек поверхность.
    2 находим пересечение этих двух поверхностей (команда _MinimumDistBetweenSurfaces
    3. линию пересечения вставляем структурной линией в созданную поверхность.
    4. удаляем согласно линии вышележащие части поверхности
    5. Из поверхности снова получаем точки
     
    #34
    Vit.Blackbird нравится это.
  15. Sergey B.

    Форумчанин

    Регистрация:
    16 мар 2017
    Сообщения:
    388
    Симпатии:
    95
    Адрес:
    Тула
    shiz, конечно. Мы же тут не поумничать собрались, а делиться опытом и знаниями.
     
    #35
  16. Vit.Blackbird

    Регистрация:
    9 июн 2019
    Сообщения:
    4
    Симпатии:
    0
    Sergey B., спасибо за разъяснения, всё это очень полезный опыт, который не так просто откопать в Гугле. Вы помогли мне сэкономить огромное количество времени. С интересом вот наблюдаю за предложениями других пользователей, как это можно сделать эффективнее. Ещё раз благодарю, и других участников беседы тоже!
     
    #36
  17. shiz

    Форумчанин

    Регистрация:
    17 фев 2013
    Сообщения:
    523
    Симпатии:
    186
    1. Группу которую нужно сравнить выгружаем в текст.
    2. Строим поверхности и сравниваем.
    3. Переносим нужную группу на поверхность объемов и выгружает ее.
    4. В Экселе делим по отметкам на две группы и помечаем их в отдельном столбике.
    5. Выгружаем обратно в цивил в разные группы.
    --- Сообщения объединены, 7 дек 2019, Оригинальное время сообщения: 7 дек 2019 ---
    Для разделения отметок в Экселе используем функцию фильтрации данных. Списки совмещаем по общим номерам.
     
    #37
  18. sokkol

    Форумчанин

    Регистрация:
    14 май 2013
    Сообщения:
    90
    Симпатии:
    82
    Адрес:
    Tbilisi, Georgia
    1. Группу точек экспортируем в csv формате и открываем в Excel-е (список 1)
    2. Группе точек обнуляем отметку и после поднимаем на поверхность и экспортируем в csv формате и открываем в Excel-е (список 2)
    3. В Excel-е, сравниваем оба списка:
    -если в списке 2 отметка равно нулю, то точка вне границы поверхности
    -если ометка из списка 1 равна отметке из списка 2, то точка лежит на поверхности
    -если разность отметок из списка 1 и списка 2 больше нуля, то точка выше, а если меньше нуля то ниже поверхности.
     
    #38
  19. Sergey B.

    Форумчанин

    Регистрация:
    16 мар 2017
    Сообщения:
    388
    Симпатии:
    95
    Адрес:
    Тула
    Alexandr-GR, ещё бывает на форуме? Возможно его попросить сделать данный лисп и для точек CoGo?
     
    #39
  20. Alexandr-GR

    Форумчанин

    Регистрация:
    9 июн 2011
    Сообщения:
    1.192
    Симпатии:
    945
    Адрес:
    Новосибирск
    бываю иногда
     

    Вложения:

    • onsurf_cogo.lsp
      Размер файла:
      1,8 КБ
      Просмотров:
      13
    #40
    Qvinto, Sergey B., FOXXX591 и ещё 1-му нравится это.

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

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