|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,992
|
Vilen, А этот вариант не подойдет?
Код:
Цитата:
__________________
Как использовать код на Лиспе читаем здесь |
|||
|
||||
Регистрация: 25.07.2007
Сообщений: 2,508
|
Всем привет. Есть рельеф земли в виде полилинии, нужно посчитать расстояние по рельефу. То есть на каждом участке суммировать с предыдущим. Смотрел здесь http://forum.dwg.ru/showpost.php?p=734502&postcount=19 но что то никак не выбрал нужную. Подскажите, пожалуйста. 4 км считать вручную через свойства тяжко
|
|||
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,589
|
Рyslan, после просмотра файла сложилось впечатление, что Вам ведь не посчитать суммарную длину нужно (такого рода скриптов море), а вывести расстояние от начальной точки, до конца каждого отрезка, строго соблюдая последовательность и рельеф. А это несколько другая задача.
|
|||
|
||||
Регистрация: 25.07.2007
Сообщений: 2,508
|
Да да, на каждом участке рельефа сумма предыдущего и данного участка 0, 0+20, 0+20+30, 0+20+50 и так далее. И участки могут быть разной длины. Вообще рельеф идет одной полилинией. Я просто разбил ее, хотел считать вручную. Потом стал искать лисп. Пока что в Веткаде спецкалькулятором тренируюсь. Но тут текст еще корректировать нужно, поворачивать его . Но он действительно суммирует длины по участкам, уже легче
|
|||
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,589
|
Я бы попробовал без всякого программирования, порезанные отрезки загнать в ексель (_DATAEXTRACTION), с длиной и координатой Х начальной точки, отсортировал бы по координате и потом бы, в нижних ячейках просуммировал бы длины как нужно и вставил бы таблицу в акад, растянув и задав соответствующее форматирование.
Прошу прощения, стандартный DATAEXTRACTION координаты вершин полилинии не возващает. Последний раз редактировалось Boxa, 24.05.2017 в 08:29. |
|||
|
||||
Регистрация: 25.07.2007
Сообщений: 2,508
|
Есть расстояния между объектами (линейные), есть расстояние по рельефу. Да нужны "наклонные полилинии", причем еще рельеф (полилинию) разбить нужно по участкам)
Вот сейчас спецкалькулятором один профиль посчитал по рельефу, конечно быстрее чем через свойства, но...может можно еще быстрее Последний раз редактировалось Рyslan, 24.05.2017 в 09:10. |
|||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Рyslan, набросал наскоро, бегло потестировал, вроде полет нормальный.
Сначала (временно) убираем в сторону все вертикальные объекты, не то обработает все не так, как надо (не стал делать их обработку). Затем указываем точку, от которой берется Y-координата для вставки текстов, затем указываем начальную точку (самую первую вершину первой линии, где 0.000). Код:
----- добавлено через ~6 мин. ----- LISP. Разорвать объекты в точках пересечения. BreakObjects. ----- добавлено через ~22 мин. ----- Посмотрел скрин-пример в #169 - стало ясно, что не нужно везде делать префикс "0.000+", да и два знака после запятой там. Исправил Последний раз редактировалось skkkk, 24.05.2017 в 12:51. |
|||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Рyslan, а как? С выбранного места она считает с любого, но первое число - 0. Как проге "объяснить", сколько было до этого линий, и какая стартовая длина? В число первых запросов добавить выбор объекта (текстового) из которого возьмется начальная длина? Или просто запросить число?
|
|||
|
||||
Регистрация: 25.07.2007
Сообщений: 2,508
|
Ладно, что-то я наглею ))) Пусть так останется. Вот у меня например 3 профиля, первый я разбил и от 0 посчитал. Вторую полилинию стыкую с первой, также разбиваю, убираю подсчет от 0 и заново уже две линии считаю, точно также с третьей. Тогда все цифры получаются по порядку, просто их потом на разные профиля раскидал. Большое пребольшое спасибо!!! То что я полдня обсчитывал, твоя программа сделала за 15 минут
|
|||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Ладно уж, это ж мелочи
Добавил запрос стартовой длины. Если на этот запрос нажать Enter, то будет ноль. Обновил в #172. Если будет удобнее, можно вместо ввода длины взять ее с текста. Это несложно. ----- добавлено через ~8 мин. ----- Тут есть еще один момент. Надо, чтобы направление полилинии, обозначающей поверхность земли, до разбивки на куски по 20 м (по горизонтали) было слева направо. Проверить можно, выбрав полилинию и потыкать пункт "Вершины" в свойствах. Обратить - с помощью _PEDIT. Просто прога сканирует у каждого куска (разбитой полилинии) вершины от левой к правой (от начальной к конечной), берет новый кусок справа, ставит его длину - и так, пока не кончатся куски. |
|||
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,992
|
Цитата:
http://www.cadtutor.net/forum/showth...l=1#post405249
__________________
Как использовать код на Лиспе читаем здесь |
|||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
VVA, никак не возьму в толк: что значит "по часовой". С замкнутыми - ясно, а вот у меня строго горизонтальная полилиния с направлением обхода слева на право. Она - по часовой или против в данном контексте? Или сверху вниз - она как? Как-то пытался связаться с этим "клоквайзом", чтобы определить угол поворота полилинии - влево или вправо по ходу движения (кажется, нашел функцию Евгения Елпанова) - сломал весь мозг, с моей логикой она не увязалась, и я сделал по-другому. Попробовал коды из твоей ссылки - еще больше сбился с толку. PL-CW вообще ничего не делает, а PL-CCW меняет направление на обратное. А как сделать по-любому слева направо, так и не понял.
Рyslan, кстати, ты пока нет-нет да и проверяй результаты. Выбери все полилинии до какого-то текста с их суммой и проверь суммарную длину (думаю, знаешь, как). Мало ли чего. ----- добавлено через ~21 мин. ----- Только сейчас увидел эту дописку. Разница в 0.01 - это старая как мир (программирования) проблема - результат вычислений над числами с плавающей запятой. Ты в первый раз скорее всего прогнал прогой весь профиль, а второй - по частям, вводя на началах разбитых фрагментов длину с клавиатуры с двумя знаками после запятой. В первом случае третий знак после запятой не пишется, но участвует в расчетах. И в сумме он может дать, например, 0.004 или 0.005. При округлении до двух знаков третий знак теряется, и не складывается далее с последующими, округляясь по математическим правилам: 0.04 -> 0.0, а 0.05 -> 0.1. Во втором случае третий знак потерялся, и не просуммировался с последующими значениями, поэтому и разница в 0.1. Чтобы этого избежать, надо в расчетах брать не все знаки после запятой, а переводить обратно в число строку, которая вписывается в текст. Конечно, тысячная метра для геодезии - фигня, но осадок остается, и некоторые придирчивые проверялы прям потирают ручки при виде подобных оплошностей. Подправлю по возможности, вместе с обработкой направления полилиний, когда пойму, как это сделать. |
|||
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,992
|
Цитата:
Цитата:
По поводу PL-CW, PL-CCW - в основе код Евгения Елпанова, корни нужно искать на caduser'e и там, по моему, для точного определения направления нужно 3 точки. Значит считается, что обход линии идет по часовой и нет необходимости реверсировать линию Значит считается, что обход линии идет по часовой и нужно реверсировать линию
__________________
Как использовать код на Лиспе читаем здесь |
|||