| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Convert ellipses to polylines
Зеленоград
Регистрация: 03.03.2006
Сообщений: 3
|
||
Просмотров: 9269
|
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,591
|
Нереально. У полилинии нет эллиптических сегментов. Соответственно все варианты - это либо прямые, либо дуговые сегменты с бОльшей или меньшей степенью детализации
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 25.12.2005
Москва
Сообщений: 13,627
|
Для Amaru.
Если эллипс уже нарисован, то можно поделить его командой "_DIVIDE" и обвести на другом слое дуговыми сегментами полилинии с использованием привязок "_nod" ("узел") и "_nea" ("бли"). Последняя привязка нужна для использования второй точки при отрисовки дуговых сегментов и большей точности. Количество точек деления влияет на точность аппроксимации. |
|||
![]() |
|
||||
Хочу быть фотографом :) Регистрация: 21.10.2005
Москва, Кисловодск
Сообщений: 2,538
![]() |
Единственное, чтобы при этом получить гладкую кривую (без переломов), имитирующую эллипс, нужно правильно построить сопряжения дуг (окружностей). Необходимо, чтобы оба центра окружностей и точка пересечения дуг лежали на одной прямой..
__________________
Камень на камень, кирпич на кирпич.. |
|||
![]() |
|
||||
>Amaru
http://forum.dwg.ru/showthread.php?t=6557 Преобразуй эллипсы в регионы и используй команду EXP_REGION из №6 Последний раз редактировалось VVA, 14.10.2011 в 15:29. |
||||
![]() |
|
||||
Последний раз редактировалось VVA, 05.07.2023 в 13:32. Причина: Внесены изменения см #38 |
||||
![]() |
|
||||
проектирование автомобильных дорог Регистрация: 03.02.2009
Киев
Сообщений: 144
![]() |
классный лисп,но вот если у меня только сегмент эллипса, а лисп дорисовывает недостающие части круговыми дугами которые мне приходится впоследствие удалять,как быть?
просто задача у меня такая: есть набор линий, полилиний,частей эллипсов которые между собой последовательно соединены,мне же нужно все это превратить в полилинию,когда дохожу до эллипсов начинаються траблы помогите кто может))) |
|||
![]() |
|
||||
Проблема в том, что когда PELLIPSE=1, то в команде _ELLIPSE отсутствует опция _ARC (Дуга). Т.е. в режиме отрисовки эллипсов полилиниями (PELLIPSE=1) можно рисовать только полные эллипсы.
Код от GILE - Gilles Chanteau (перенесен из #8) Код:
__________________
Как использовать код на Лиспе читаем здесь Последний раз редактировалось VVA, 29.06.2023 в 11:06. |
||||
![]() |
|
||||
Столкнулся с эллиптическими дугами, которые нужно сшивать с полилиниями. (После воссоздания контуров штриховок).
Лисп от GILE - Gilles Chanteau их преобразует в полилинии дуговыми сегментами, но грубовато. Что можно поменять в его лиспе, чтобы вершин в заменяющей полилинии было побольше? На второй картинке обведено желтым - видно расхождение между положением конца эллиптической дуги и концом заменяющей полилинии.
__________________
количество моих сообщений не говорит о знании Автокада |
||||
![]() |
|
||||
маркшейдер Регистрация: 25.09.2021
Москва
Сообщений: 156
|
Цитата:
Код:
__________________
Keep it simple, stupid. |
|||
![]() |
|
||||
Пробовал. Плачет.
__________________
количество моих сообщений не говорит о знании Автокада |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,591
|
Цитата:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
В смысле? Пяток постов выше, на этой странице, #8, от GILE - Gilles Chanteau.
__________________
количество моих сообщений не говорит о знании Автокада |
||||
![]() |
|
||||
Плачет.
__________________
количество моих сообщений не говорит о знании Автокада |
||||
![]() |
|
||||
маркшейдер Регистрация: 25.09.2021
Москва
Сообщений: 156
|
Тогда никак. Потому что всё сидит в этих:
Код:
__________________
Keep it simple, stupid. |
|||
![]() |
|
||||
Цитата:
(defun mb:ace2arcpl ( obj / a ptlst n startparam endparam midpt anab pacc) (setq ptlst (reverse (TraceACE obj))) (setq pacc (getvar "PEDITACCEPT")) (setvar "PEDITACCEPT" 1) (setq n 0 anab (ssadd)) ; anab nil (while (< n (1- (length ptlst))) (setq startparam (vlax-curve-getParamAtPoint obj (nth n ptlst)) endparam (vlax-curve-getParamAtPoint obj (nth (1+ n) ptlst)) midpt (vlax-curve-getPointAtParam obj (+ startparam (/ (- endparam startparam) 2))) ) (setq a (vl-cmdf "_.ARC" "_none" (nth n ptlst) "_none" midpt "_none" (nth (1+ n) ptlst))) (ssadd (entlast) anab) (setq n (1+ n)) ) (setq a (vl-cmdf "_PEDIT" "_Multiple" anab "" "_Join" 0 "")) (setq anab nil) (setvar "PEDITACCEPT" pacc) (princ) (entlast) ) ; _ defun _ mb:ace2arcpl В лиспе решена проблема с неточностью получаемых полилиний - расхождений пока не заметил. К сожалению, два "но": может вылетать на цельных эллипсах и работает оч. медленно. Низкая скорость, наверное, из-за командных методов создания дуг и их сшивания. Может кто-нибудь подправить, чтобы снять эти засады? [Я не программист.]
__________________
количество моих сообщений не говорит о знании Автокада |
||||
![]() |
|
||||
Не хватает функции TraceACE
----- добавлено через ~8 мин. ----- Еще вариант отсюда (требуется регистрация) Код:
__________________
Как использовать код на Лиспе читаем здесь |
||||
![]() |
|
||||
Ее хватает - из Вашего же PlTools. Приведенный мной фрагмент используется в программе.
Мой вопрос был о точности. Программа от Gile из Вашего #8 делала не точный контур. Приведенный мной фрагмент дает точный контур. Дуговые сегменты позволяют ее достичь. Но работает медленно. Или не работает.
__________________
количество моих сообщений не говорит о знании Автокада |
||||
![]() |
|
||||
Обновил #8
__________________
Как использовать код на Лиспе читаем здесь |
||||
![]() |
|
||||
__________________
количество моих сообщений не говорит о знании Автокада Последний раз редактировалось АлексЮстасу, 27.06.2023 в 20:26. |
||||
![]() |
|
||||
Цитата:
Обе команды одинаково преобразуют эллиптические дуги. И обе же одинаково зависают на полных эллипсах. В принципе, зачем две команды? Тем более, что они делают/не делают одинаково...
__________________
количество моих сообщений не говорит о знании Автокада |
||||
![]() |
|
||||
Отличие в методах. В команде E2PCMD используется команда "Эллипс" с установкой pellipse=1, в команде E2P функция gile (считается геометрически). Выложи или пришли пример, в котором виснет.
----- добавлено через ~39 мин. ----- АлексЮстасу, Я еще раз обновил #8 Отказался от ф-ции gile для полных эллипсов. Пересмотрел граничные условия для написанной ф-ции для неполных элипсов. Тестируй
__________________
Как использовать код на Лиспе читаем здесь Последний раз редактировалось VVA, 29.06.2023 в 12:07. |
||||
![]() |
|
||||
Почему-то виснут обе команды.
![]() Обычный эллипс, начерченный когда-то от балды. 2018, Map/Civil, сохранен в 2004.
__________________
количество моих сообщений не говорит о знании Автокада |
||||
![]() |
|
||||
Я не могу повторить твой эллипс, но вижу что он есть.
Функция TraceAce считала, что начальный и конечный угол полного эллипса 0 - 360, но может быть и 90-90 как у тебя и 180-180 и 270-270. Из-за этого был бесконечный цикл. Поправил логику обновил #8
__________________
Как использовать код на Лиспе читаем здесь |
||||
![]() |
|
||||
Я умудрился сваять какой-то неправильный эллипс?
![]() Цитата:
E2P теперь преобразует достаточно быстро и эллипсы, и эллиптические дуги. О точности (вторая проблема - #20). Пардон, если отморожу - я ничего не понимаю в коде, и математику не знал, но забыл. ![]() Вижу в коде то Код:
Код:
Может быть точность будет лучше, если "1e-6" заменить на "1e-8" или т.д.?
__________________
количество моих сообщений не говорит о знании Автокада |
||||
![]() |
|
||||
можешь поправить и до 1e-6. Эти строки проверяют конечный угол и сравнивают его с 2*pi, т.е 360 градусов с точностью до 1e-x. Я обычно использую 1e-6, т.е до 0,000001. Автор этой функции использовал 1e-12, т.е. 0,000000000001. Но это сравнение с углом 360 градусов, поэтому можешь заменить и на 1e-8 или оставить как есть.
__________________
Как использовать код на Лиспе читаем здесь |
||||
![]() |
|
||||
Сейчас я намерил расхождения в 4-5 знаке.
Возможно, этот эллипс был не непосредственно вручную начерчен. Кажется, я разбирался со штриховками, и этот эллипс мог получиться восстановлением границы штриховки.
__________________
количество моих сообщений не говорит о знании Автокада |
||||
![]() |
|
||||
АлексЮстасу, Мне тоже не получилось создать такой эллипс штатными средствами автокада, возможно он был создан программно каким-то приложением.
Значит надо оставить 1e-3. В функции TraceACE за количество полученных сегментов отвечает Цитата:
Далее количество точек получается как разница между начальным и конечным углом эллипса (для полного эллипса 360 градусов или 2*pi радиан. Здесь и была ошибка для твоего эллипса) Цитата:
Цитата:
----- добавлено через ~5 мин. ----- Мне просто интересно, насколько критично для геодезии шаг в 5 градусов. Чтобы были большие расхождения, эллипсы должны быть больших размеров, а что может описываться эллипсом такого размера? Московская область, включая г.Москва?
__________________
Как использовать код на Лиспе читаем здесь |
||||
![]() |
|
||||
Цитата:
Я сейчас не про геодезию. ![]() Смотрел программку, определяющую положение точек относительно контуров [штриховок]. Контуры делались полилиниями из эллипсов, окружностей, сплайнов и пр. Тогда стали попадаться случаи, когда точки внутри или на границе определялись как внешние и наоборот. Оказалось, что дело в точности повторения этими полилиниями кривых. Я путаюсь - уменьшить с 6 до 3, разве не ухудшить точность?
__________________
количество моих сообщений не говорит о знании Автокада |
||||
![]() |
|
||||
Это сравнения угла эллипса с углом в 360 градусов, представленных в радианах, чтобы определить, это полный эллипс или эллиптическая дуга.
Сравнение до 1e-3=0,001 рад= 0.0572958 градуса или 0°3'26" Т.е. если ты начертишь эллиптическую дугу в внутренним углом в 359°56'34", то сравнение до 1e-3 может посчитать это полным эллипсом и ты получишь замыкающий сегмент в виде полилинии
__________________
Как использовать код на Лиспе читаем здесь |
||||
![]() |