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

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

  1. alz

    alz Форумчанин

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

    ivsem Форумчанин

    alz, можно построить дополнительный вектор перпендикулярно проектной линии и вычислив пропорцию подвернуть по углу размер до необходимой величины (чертеж слева).
    Обнаружил у Вас двойные размеры черный и красный друг по другу.(чертеж справа)
    4-5.jpg
     
    Shahvalad нравится это.
  3. alz

    alz Форумчанин


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

    Вложения:

    Shahvalad нравится это.
  4. Протестировал сегодня прогу, очень вам благодарен, действительно это то, что и имелось ввиду.

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

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

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

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

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

    alz Форумчанин

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


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

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

    Тут встает вопрос как искать пару из двух множеств полилиний, тут я вижу пару вариантов, самый оптимальный, как мне кажется, поиск через границы объектов, сработает если полилинии имеют примерно одинаковую форму, все остальное сложнее и требует предварительной подготовки.
     
  6. Мой первый вопрос, это мое же противоречие, изначально, я писал, что шаг нужен именно в промежутке, а теперь пишу, что шаг на всю длину полилиний, поэтому прошу прощения
    В ближайшие дни постараюсь прикрепить двг файл с полноценным участком работы, до и после обработки, где учту момент с большими вылетами.
    Они имеют частично одинаковую форму, на примере будет видно.
     
  7. ivsem

    ivsem Форумчанин

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

    Вложения:

  9. alz

    alz Форумчанин

    Ухх, ну у вас и жесть, в общем обработку красных и зеленых массовую сделать можно, но проектную белую придется брать одну, иначе обрабатывать будет пол года, если обрабатывать с каждой точки до всевозможных линий. В остальном посмотрю, проблем быть не должно.
     
  10. alz

    alz Форумчанин

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

    Вложения:

  11. ivsem

    ivsem Форумчанин

    Что бы не выглядело, как зависание можно выводить на экран (в командную строку) количество построенных размеров в виде меняющегося числа, кратного например 500. Пользователю будет понятно, что идет работа программы.
     
  12. alz

    alz Форумчанин

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

    alz Форумчанин

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

    Вложения:

  14. alz

    alz Форумчанин

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

    Вложения:

    • Release.rar
      Размер файла:
      18 КБ
      Просмотров:
      15
    Shahvalad нравится это.
  15. Я вам ответил в лс, но тем не менее решил и сюда написать, чтобы подвести итог.
    Программа действительно выполняет ту задачу, которая была поднята в этой теме. К сожалению, конкретно к своей рутине я ее, пока что, не смогу полноценно применить, но возможно, кто то возьмёт ее себе в пользование, наткнувшись на данную тему через гугл.
    Благодарю вас за создание программы и всех форумчан, учавстоваших в обсуждении!
     
  1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление
  1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление