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

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

Войти

Автоматическое проставление расстояний между двумя полилиниями

Тема в разделе "Autocad", создана пользователем Shahvalad, 27 май 2023.

  1. alz

    alz
    Форумчанин

    Регистрация:
    26 май 2014
    Сообщения:
    254
    Симпатии:
    107
    хмм, вот на замкнутых я не тестировал, левый нижний угол правого чертежа это последствия не замкнутой полилинии, из за этого при построении оффсетов не построился угол и левое пересечение не обнаружилось, в принципе решается параметром замкнутости в свойствах полилинии ну или то же самое в коде если начальная и конечная точки совпадают. Там где находит чуть больщие расстояния это уже геометрия, при смещении наружу полилиния удлиняется и точка пересечения находится на участке, построенном дополнительно, соответственно до угла там будет чуть больше. Есть мысля как это обойти, если ближайшая точка из полученной точки пересечения больше допуска то можно из этого угла строить окружность с радиусом в допуск, найти ее точки пересечения с линией и проверить от этих точек расстояния до этого угла, при размере ровно в допуск по идее нужная точка будет найдена, осталось это в коде оформить)
     
    #21
  2. ivsem

    Форумчанин

    Регистрация:
    26 мар 2009
    Сообщения:
    2.475
    Симпатии:
    1.051
    Адрес:
    Киев
    alz, можно построить дополнительный вектор перпендикулярно проектной линии и вычислив пропорцию подвернуть по углу размер до необходимой величины (чертеж слева).
    Обнаружил у Вас двойные размеры черный и красный друг по другу.(чертеж справа)
    4-5.jpg
     
    #22
    Shahvalad нравится это.
  3. alz

    alz
    Форумчанин

    Регистрация:
    26 май 2014
    Сообщения:
    254
    Симпатии:
    107

    Да, все эти моменты постарался учесть, тут писец неоднозначностей вылезает в начальных точках, очень много зависимостей из-за комбинаций замкнутая/незамкнутая первая или вторая линия, внутри она получается или снаружи, в общем сделал последний вариант, что бы еще больше учесть надо лезть в совсем уже частности и это уведет от универсальности, сейчас 95% функционала работает вообще с любыми кривыми, можно хоть между сплайнами мерить, небольшая часть завязана на замкнутость полилинии, как раз про тот уголок слева снизу.
     

    Вложения:

    #23
    Shahvalad нравится это.
  4. Shahvalad

    Регистрация:
    29 май 2019
    Сообщения:
    11
    Симпатии:
    0
    Протестировал сегодня прогу, очень вам благодарен, действительно это то, что и имелось ввиду.

    Единственное на практике пользоваться ею оказалась сложнее, поскольку пример я указал достаточно примитивный, а на деле те задачи, для которых применялась бы программа, имеют много нюансов, таких как:

    1) Обе линии могут быть очень ломанными, и поэтому программа игнорируя шаг, проставляет размер на каждой из вершин (то есть там качели получаются, допуск-недопуск-допуск-и т.д.). Вернее она не игнорирует шаг, но использует его только тогда, когда промежуток недопуска длинный, а если происходят те самые качели, то размер проставляется без шага. Возможно ли сделать общий шаг для всей протяженности двух линий?

    2) Если линии образуют квадраты (допустим комнаты в квартире), то при запуске программы иногда проставляются размеры в том числе между (допустим) проектным положением северной стены комнаты, и фактического сечения южной стены комнаты. Я предполагаю, что эту проблему можно решить ограничив потолок значений размеров (например, если допуск 100, то потолок будет 300).

    3) Поскольку сечения, для которых будет использоваться программа, создавались автоматически, то их количество, количество вершин и поворотов в каждой из них, оставляет желать лучшего, поэтому вопрос, можно ли сделать так, что при запуске программы, можно было бы выбрать не 2 полилинии (факт и проект), а множество полилиний факт и другое множество полилиний проект, которые отличались бы цветом/слоем/или др. свойством?

    П.С.: на самом деле я не призываю вас достраивать программу под мои хотелки, поскольку в действительности программа уже справляется со своей задачей, и подчеркну, что уже благодарен вам за ответ, на суть вопроса данной темы. Я лишь загорелся желанием узнать, возможно ли автоматизировать конкретно мою рутину, поскольку мне и моим коллегам это казалось труднореализуемым, но видимо некоторые задачи нужно/придется делать вручную)
     
    #24
  5. alz

    alz
    Форумчанин

    Регистрация:
    26 май 2014
    Сообщения:
    254
    Симпатии:
    107
    Можно, сейчас шаг привязан к началу нашедшегося интервала "вне допуска" и идет пока не дойдет до "конец интервала" -1 шаг, можно и убрать это, но тогда как получится, размеры могут попадаться очень близко к размерам начала и конца интервала.


    Выложили бы вы примеры можно было бы посмотреть как так получается, пока ничего сказать не могу.

    3) Поскольку сечения, для которых будет использоваться программа, создавались автоматически, то их количество, количество вершин и поворотов в каждой из них, оставляет желать лучшего, поэтому вопрос, можно ли сделать так, что при запуске программы, можно было бы выбрать не 2 полилинии (факт и проект), а множество полилиний факт и другое множество полилиний проект, которые отличались бы цветом/слоем/или др. свойством?

    Тут встает вопрос как искать пару из двух множеств полилиний, тут я вижу пару вариантов, самый оптимальный, как мне кажется, поиск через границы объектов, сработает если полилинии имеют примерно одинаковую форму, все остальное сложнее и требует предварительной подготовки.
     
    #25
  6. Shahvalad

    Регистрация:
    29 май 2019
    Сообщения:
    11
    Симпатии:
    0
    Мой первый вопрос, это мое же противоречие, изначально, я писал, что шаг нужен именно в промежутке, а теперь пишу, что шаг на всю длину полилиний, поэтому прошу прощения
    В ближайшие дни постараюсь прикрепить двг файл с полноценным участком работы, до и после обработки, где учту момент с большими вылетами.
    Они имеют частично одинаковую форму, на примере будет видно.
     
    #26
  7. ivsem

    Форумчанин

    Регистрация:
    26 мар 2009
    Сообщения:
    2.475
    Симпатии:
    1.051
    Адрес:
    Киев
    С этого надо было и начитать- с реального файла работ.
     
    #27
  8. Shahvalad

    Регистрация:
    29 май 2019
    Сообщения:
    11
    Симпатии:
    0
    Доброго времени суток!
    1) Зеленые полилинии - сечения низа стен; Красные - сечения верха стен; Белые - проект.
    2) Посередине - исходный фрагмент.
    3) Слева сверху - завал стены (размеры между верхним сечением и нижним).
    3) Слева снизу - смещение низа стены от проекта.
    4) Справа снизу - попробовал вашей программой проставить размеры, вот, про что я и писал ранее: размеры проставляются между сечениями соседних/параллельных стен.
    5) Справа сверху при попытке запуска программы Автокад намертво зависает, и решается перезапуском.
     

    Вложения:

    #28
  9. alz

    alz
    Форумчанин

    Регистрация:
    26 май 2014
    Сообщения:
    254
    Симпатии:
    107
    Ухх, ну у вас и жесть, в общем обработку красных и зеленых массовую сделать можно, но проектную белую придется брать одну, иначе обрабатывать будет пол года, если обрабатывать с каждой точки до всевозможных линий. В остальном посмотрю, проблем быть не должно.
     
    #29
  10. alz

    alz
    Форумчанин

    Регистрация:
    26 май 2014
    Сообщения:
    254
    Симпатии:
    107
    В общем чутка переделал, во первых убрал привязку к найденным интервалам, размеры будут ставиться если попадают за допуск начиная с начала кривой и с выбранным шагом,
    Добавил возможность массовой обработки, после запросов шага и допуска запрашивается тип первой кривой, потом запрашивается вторая кривая, и после можно рамочкой выбрать любое количество элементов, размеры проставятся от всех выбранных кривых, подобных первой выбранной, ко второй выбранной. Фильтрация происходит по цвету и слою.
    В примере обработал кусок чертежа, с шагом в 0,1 м и допуском в 1 см, эта область на 800-900 размеров обрабатывалась около 2-4 секунд, так что если область будет больше или шаг меньше то обработка может затянуться, что будет выглядеть как зависание.
    Проектный контур придется обвести вручную. Но ту думаю это меньшее из зол.
     

    Вложения:

    #30
  11. ivsem

    Форумчанин

    Регистрация:
    26 мар 2009
    Сообщения:
    2.475
    Симпатии:
    1.051
    Адрес:
    Киев
    Что бы не выглядело, как зависание можно выводить на экран (в командную строку) количество построенных размеров в виде меняющегося числа, кратного например 500. Пользователю будет понятно, что идет работа программы.
     
    #31
  12. alz

    alz
    Форумчанин

    Регистрация:
    26 май 2014
    Сообщения:
    254
    Симпатии:
    107
    Можно конечно, даже с полосой процентной, но таки тут не настолько все долго будет, в паре программ я такое реализовал, но там расчеты были на обработки генпланов на десятки тысяч объектов, а одна прога у мну помню обрабатывала чертеж примерно пол часа, вот там да, без полоски стремно бы было, та и есть одна проблема у автокада, в связи с тем, что он однопоточный и вся обработка должна происходить в основном потоке все эти полоски и выводы делать тот еще геморрой с кучей костылей, по крайней мере с моим уровнем знаний, имхо тут вопрос не стоит настолько остро что бы этим заниматься. Но кстати на мысль вы меня навели, что-то подобное было встроенное в каких-то примерах групповой распечатки, может и получится приспособить под другие виды программ.
     
    #32
  13. alz

    alz
    Форумчанин

    Регистрация:
    26 май 2014
    Сообщения:
    254
    Симпатии:
    107
    Добавил таки второй вариант
    Команда DimBetweenCurves2
    Запускается аналогично первой, но обрабатывает все выбранные проектные линии вместе со всеми фактическими, так как это достаточно долго таки прикрутил прогресс бар от распечатки, с возможностью прерывания команды.
    На примере обработал один из корпусов(наверное) на моем кампе это заняло около 5-10 минут, с допуском в 1 см и с шагом в 10 см проставилось 3700 размеров, местами размеры проставились не туда, куда надо но это погрешности исходных данных, то есть где исходные контура отсутствуют в тех местах где есть съемка и размеры проставлялись в отдаленные места к другим стенам, но таких достаточно мало на общем фоне.
     

    Вложения:

    #33
  14. alz

    alz
    Форумчанин

    Регистрация:
    26 май 2014
    Сообщения:
    254
    Симпатии:
    107
    Ну в общем доработал до логического конца, задаваемые параметры теперь сохраняются, добавлен параметр максимального размера, больше которого ставиться не будут, переделана полоса прогресса, о том, что она все же от печати напоминает только значек плоттера, как его убрать я хз, походу никак.
    Время работы программы сильно зависит от фрагментированности кривых, обработать 10 кривых по100 метров на порядок быстрее чем 20 кривых по 1 метру, так что очень сильно фрагментированные объемы лучше обрабатывать кусками.
    Команды
    DimBetweenCurves - обрабатывает все выбранные объекты относительно одного проектного, быстро и без полосы прогресса
    DimBetweenCurves2 - обрабатывает все выбранные объекты относительно всех выбранных проектных, долго и с индикацией процесса.
     

    Вложения:

    • Release.rar
      Размер файла:
      18 КБ
      Просмотров:
      9
    #34
    Shahvalad нравится это.
  15. Shahvalad

    Регистрация:
    29 май 2019
    Сообщения:
    11
    Симпатии:
    0
    Я вам ответил в лс, но тем не менее решил и сюда написать, чтобы подвести итог.
    Программа действительно выполняет ту задачу, которая была поднята в этой теме. К сожалению, конкретно к своей рутине я ее, пока что, не смогу полноценно применить, но возможно, кто то возьмёт ее себе в пользование, наткнувшись на данную тему через гугл.
    Благодарю вас за создание программы и всех форумчан, учавстоваших в обсуждении!
     
    #35

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

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