Наверно уже не актуально, но хочу предложить свой вариант решения данной задачи. 1) Создать поверхность для подсчета объемов. 2) Создать дубли тех точек COGO которые необходимо сравнить с поверхностью (лучше в группе или другом слое). Можно и не создавать, но только в том случае если поверхность не опирается на эти точки. 3) Сохранить чертеж 4) Выбрать дублированную группу точек и поднять ее на поверхность для подсчета объемов, таким образом все точки выше поверхности будут иметь отметку положительную, ниже отрицательную. 5) Через быстрый выбор выбрать точки по свойству отметки больше нуля, получим выбранный массив точек лежащих выше поверхности. 6) Создаем группу точек (не сбрасывая выбор), выбираем вкладку включить, по номерам точек - указать на чертеже точки и так как массив точек выбран то поле заполниться номерами точек (формат примерно такой "1,3,10,15-25,31"), далее копируем это поле во внешний текстовый файл. 7) Закрываем чертеж не сохраняя его. 8) Открываем чертеж, создаем группу точек и выбираем включить по номерам точек и вставляем скопированные ранее номера точек. И получаем группу точек выше поверхности. Так же можно сделать для точек ниже поверхности
Как вариант(прикрепил лисп). Запускается также как называется. Выбираем целевую поверхность,из всех точек выбираются точки либо над поверхностью, либо ниже поверхности, либо на самой поверхности, ли за пределами поверхности в зависимости от выбранного варианта.
Круто! И гораздо шире заданного вопроса. :) Оффтоп (Move your mouse to the spoiler area to reveal the content) Кстати, на базе этого можно сделать классификацию точек по диапазонам высот относительно "земли". Как это сделано в самом мощном ПО для работы с точками лазерного сканирования - в Terrasolid. Там можно классифицировать точки на классы "низкая растительность", "средняя растительность", "высокая растительность", выделить "птиц" и т.д. Т.е. там вызывается команда классификации по высоте, указывается слой, относительно которого ("земля"), слой в который, и диапазон высот. Но Terrasolid работает с облаками точек, миллионами, которые отражают в целом местность подробно. А здесь все-таки точки в виде графических примитивов, т.е. относительно немного - тысячи. Реальная польза может быть небольшая. Но зато и сделать на базе этой программы, похоже, не оч. сложно...
Что-то в Civil 3D 2020 не работает. Когда вызываешь команду, то сразу выдаёт, что не найдено поверхностей или примитивов. И не важно, вызываешь её, когда уже выбрал целевую поверхность или нет. Будто игнорирует первое условие if. Может для новой версии Civil надо модифицировать код? Очень нужна это программа.
Попробуй в программу вставить строку (vl-load-com) и знак подчеркивания перед X. (defun c:onsurf (/ nbr srf fl) (vl-load-com) (if (and (setq nbr (ssget "_X" '((0 . "POINT"))))
Sergey B., если вас не затруднит, то сможете проверить работу кода на этом чертеже? Тут облако точек, разрезанное поверхностью, требуется выбрать те, которые выше неё. Если код сработает, то буду искать у себя проблемы дальше. Может проблемы в чертеже самом? Буду очень признателен.
Vit.Blackbird, лисп работает с точками AutoCAD, а не с точками CoGo. Есть несколько способов для трансформации. Прикладываю ваш файл с добавленными точками AutoCAD. Точки выше поверхности обозначены фиолетовым цветом и находятся в слое "Точки выше поверхности". Точки на поверхности обозначены зелёным цветом и находятся в соответствующем слое. Точки ниже поверхности - синие. И так же в отдельном слое.
Средствами цивила можно сделать так: 1. Строим две поверхности по разным наборам точек. 2. Сравниваем две поверхности и получаем поверхность объемов. 3. Поверхность объемов экспортируем в xml . 4. Удаляем все поверхности. 5. Импортируем поверхность объемов обратно. 6. Нужную группу точек опускаем на эту поверхность. 7. Создаём две группы точек: одна плюс, другая минус. 8. Через мастер запросов выбираем точки с минусом и с плюсом в нужную группу автоматом.
shiz, слишком много действий получается. Проще использовать лисп onsurf.lsp, предварительно создав точки AutoCAD по точкам COGO. Первый вариант: настроить стиль маркера точки в виде точки AutoCAD , затем взорвать несколько раз блок точки COGO. Второй вариант. из точек COGO создается поверхность. Назначается стиль поверхности с отображением точек. Далее нужно извлечь объекты (точки) из поверхности. Точки AutoCAD готовы.
В первом предложении указано средствами цивил. Если взять ещё и эксель в помощь, то даже писать и искать лиспы не нужно, а задача решается в два раза короче и быстрее --- Сообщения объединены, 7 дек 2019, Оригинальное время сообщения: 7 дек 2019 --- Описывать решение?
ой, как интересно. мой вариант: 1. строим из точек поверхность. 2 находим пересечение этих двух поверхностей (команда _MinimumDistBetweenSurfaces 3. линию пересечения вставляем структурной линией в созданную поверхность. 4. удаляем согласно линии вышележащие части поверхности 5. Из поверхности снова получаем точки
Sergey B., спасибо за разъяснения, всё это очень полезный опыт, который не так просто откопать в Гугле. Вы помогли мне сэкономить огромное количество времени. С интересом вот наблюдаю за предложениями других пользователей, как это можно сделать эффективнее. Ещё раз благодарю, и других участников беседы тоже!
1. Группу которую нужно сравнить выгружаем в текст. 2. Строим поверхности и сравниваем. 3. Переносим нужную группу на поверхность объемов и выгружает ее. 4. В Экселе делим по отметкам на две группы и помечаем их в отдельном столбике. 5. Выгружаем обратно в цивил в разные группы. --- Сообщения объединены, 7 дек 2019, Оригинальное время сообщения: 7 дек 2019 --- Для разделения отметок в Экселе используем функцию фильтрации данных. Списки совмещаем по общим номерам.
1. Группу точек экспортируем в csv формате и открываем в Excel-е (список 1) 2. Группе точек обнуляем отметку и после поднимаем на поверхность и экспортируем в csv формате и открываем в Excel-е (список 2) 3. В Excel-е, сравниваем оба списка: -если в списке 2 отметка равно нулю, то точка вне границы поверхности -если ометка из списка 1 равна отметке из списка 2, то точка лежит на поверхности -если разность отметок из списка 1 и списка 2 больше нуля, то точка выше, а если меньше нуля то ниже поверхности.