| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
03.03.2012, 13:43 | #1 | |
LISP Есть дерево из линий, нужно на концы линий нарисовать метки
студент
Москва
Регистрация: 03.03.2012
Сообщений: 50
|
||
Просмотров: 4639
|
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
А слой восстановить? И зачем его устанавливать несколько раз? Обработчик ошибок? Блок вместо полилинии?
Можно вообще так (это в качестве идеи): выбираешь одну линию... а рисует для всего дерева И если честно, непонятно как работает алгоритм... вот ты выбираешь линии в точке, в наборе должны быть две штуки или одна, если нет пересечения, потом ты берешь первую попавшуюся линию и ищешь пересечение, отступая от точки на некоторое расстояние, есть там пересечение или нет... По идее алгоритм должен быть такой Перебираешь все отрезки и если есть пересечение, то есть два отрезка в наборе, то строишь прямоугольник, если один не строишь ничего, попутно нужно записывать точки в список, чтобы не было накладывающихся треугольников... как-то так |
|||
|
||||
студент Регистрация: 03.03.2012
Москва
Сообщений: 50
|
Цитата:
* "Блок вместо полилинии?" Если я правильно понял это про выбор. Это часть работы по вентиляции поэтому мне нужно, что бы чертёж был из отрезков (это участки воздуховода). * Отрисовка для всех линий лежащих в слое ventline. Мне нужно максимально автоматизировать процесс расчёта вентиляции, поэтому от пользователя стараюсь получать минимум действий )) * Если посмотреть на первый вариант поиска, там я как раз пошёл по пути поиска пересечений. И зашёл в тупик... По хорошему туда ещё один вложенный цикл нужен на поиск пересечения с другой стороны линии. 2 дня я мучился с этим способом... И решил переписать. Алгоритм: все элементы в слое ventline заносим в набор lines перебираем поочерёдно все элементы в этом массиве у каждого элемента (линии) берём координаты начальной и конечной точки для каждой из это точки организуем цикл проверки (сколько раз она принадлежит линиям на слое vent) 0 - не может быть (минимум лежит на своём отрезке) 1 - лежит только на одном отрезке 2 - точка на стыке двух линий и так далее ) и в конце отрисовываем нужную фигуру в точке где <2 (фактически 1) Логика строится на том, что для автокада стык линий это одна точка. И методом перебора мы просматриваем скольки отрезкам принадлежит одна точка. Надеюсь, я ответил на все ваши ответы. Благодарю за критику, теперь знаю, что нужно будет добавить в будущем ) ЗЫ Забыл сказать, отрисовка метки (треугольника) работает только с отключённой привязкой. Пока не дошли руки, В будущем добавлю. |
|||
|
||||
специалист по околачиванию грушевых деревьев Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 813
|
|
|||
|
||||
студент Регистрация: 03.03.2012
Москва
Сообщений: 50
|
Цитата:
|
|||
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
собрано когда приложений много, то сделать лучше общую обработки ошибок функцию и *error* назначать во время программы выполнения с возвращением последующим... лучше еще прописать это дело все в фунцииях типа start_cmd и end_cmd
|
|||
|
||||
студент Регистрация: 03.03.2012
Москва
Сообщений: 50
|
Цитата:
http://forum.dwg.ru/showthread.php?t=57484&page=18 http://forum.dwg.ru/showthread.php?t=7185 Это то? ) если нет, не могли бы дать ссылку? |
|||
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
Это как start_dialog и unload_dialog надеюсь вы понимаете о чем я говорю... вчитайтесь в название функций, вы же программист
Вы создаете команду, значит она как-то начинается, а также непременно заканчивается. Многие команды начинаются и заканчиваются одинаково: сохраняются переменные, создаются слои, стили... и т.д. Затем диалог с пользователем, потом отрисовка... и в конце концов нужно вернуть системные переменные в исходное состояние, удалить временные слои... если происходит прерывание, то программа не дойдет до конца... следовательно в обработчике ошибок нужно дублировать завершающие шаги... чтобы не писать код 2 раза, создается функция end_cmd (название неважно, важна суть) ну и соответственно аналогичная функция добавляется в начало команды Это довольно трудоемко вроде-бы... но когда вы пишите вторую функцию, то вам уже не надо ни о чем беспокоиться Код:
|
|||
|
||||
студент Регистрация: 03.03.2012
Москва
Сообщений: 50
|
Цитата:
Для gomer: Я представил себе для чего это может понадобиться и совершенно с Вами согласен, благодарю за помощь ) За сегодняшний день узнал для себя много нового Последний раз редактировалось Golem-iq, 04.03.2012 в 22:31. |
|||
|
||||
студент Регистрация: 03.03.2012
Москва
Сообщений: 50
|
Цитата:
VVA, я очень много бродил по поиску и посетил не одну сотню тем. И в 95% случаев там есть ваше участие: совет дать, листинг кода привести или даже просто направить на правильный путь мыслей. Я честно говоря поражён. Очень приятно видеть, что есть ещё люди, которые действительно готовы помогать окружающим. |
|||
|
||||
Регистрация: 14.12.2010
Там, где мамонты жили ...
Сообщений: 224
|
5+++
__________________
Время – лучшее лекарство, лечит даже от жизни. |
|||
|
||||
студент Регистрация: 03.03.2012
Москва
Сообщений: 50
|
|
|||
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Рифмоплетство. | Kryaker | Разное | 554 | 14.11.2023 11:59 |
Как сосчитать сумму цифр из отдельных мтекстов (и лисп для подсчета спецификаций) | Red Nova | LISP | 666 | 07.06.2023 14:00 |
Создание нового типа линий | Apelsinov | AutoCAD | 915 | 08.07.2022 12:36 |
Юмор 2011 | RomaV | Разное | 1834 | 31.12.2011 21:05 |