Convert ellipses to polylines - Страница 2
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Convert ellipses to polylines

Convert ellipses to polylines

Ответ
Поиск в этой теме
Непрочитано 15.05.2006, 16:02
Convert ellipses to polylines
Amaru
 
Зеленоград
Регистрация: 03.03.2006
Сообщений: 3

Никак не могу эллипсы преобразовать в полилинию. Может кто-ть знает как?....Получается только при помощи Toolpac'a конвертировать эллипс в Plines....но это не пойдет, т.к. кривую он делит на множество прямых линий...
Просмотров: 10311
 
Непрочитано 19.06.2023, 11:21
#21
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Не хватает функции TraceACE

----- добавлено через ~8 мин. -----
Еще вариант отсюда (требуется регистрация)

Код:
[Выделить все]
;;Ellipses to polylines By cjw 11/9/09
(defun C:EL2PL2 (/ E E1 E2 O)
  (vl-load-com)
  (setq E (car (entsel "\nSelect the ellipse: ")))
  (setq O (vlax-ename->vla-object E))
  (vla-offset O 0.1)
  (setq E1 (entlast))
  (vla-offset (vlax-ename->vla-object E1) -0.1)
  (setq E2 (entlast))
  (entdel E)
  (entdel E1)
  (princ)
)
Эллипсы преобразуются в сплайны. Правая кнопка мыши на сплайне -> Преобразовать в полилинию
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 19.06.2023, 17:00
#22
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,072


Цитата:
Сообщение от VVA Посмотреть сообщение
Не хватает функции TraceACE
Ее хватает - из Вашего же PlTools. Приведенный мной фрагмент используется в программе.
Мой вопрос был о точности. Программа от Gile из Вашего #8 делала не точный контур. Приведенный мной фрагмент дает точный контур. Дуговые сегменты позволяют ее достичь.
Но работает медленно. Или не работает.
__________________
количество моих сообщений не говорит о знании Автокада
АлексЮстасу вне форума  
 
Непрочитано 27.06.2023, 11:07
#23
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Цитата:
Сообщение от АлексЮстасу Посмотреть сообщение
Но работает медленно. Или не работает.
Обновил команду E2P в #8
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 27.06.2023, 11:59
#24
AlexCondor

инженер
 
Регистрация: 03.08.2007
Сообщений: 1,401


Цитата:
Сообщение от VVA Посмотреть сообщение
Обновил команду E2P
Попробовал в 2014-м. На полных эллипсах работает, а на не полных пишет - "; error: no function definition: NORMALANGLE"
AlexCondor вне форума  
 
Непрочитано 27.06.2023, 13:13
1 | #25
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Обновил #8
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 27.06.2023, 18:24
#26
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,072


Цитата:
Сообщение от VVA Посмотреть сообщение
Обновил #8
У меня как раз на полных эллипсах E2P задумывается напрочь.
__________________
количество моих сообщений не говорит о знании Автокада

Последний раз редактировалось АлексЮстасу, 27.06.2023 в 20:26.
АлексЮстасу вне форума  
 
Непрочитано 28.06.2023, 11:29
#27
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Цитата:
Сообщение от АлексЮстасу Посмотреть сообщение
У меня как раз на полных эллипсах E2P задумывается напрочь
Там командный метод
На полных эллипсах вроде код Gile не отличается от команды эллипс с PELLIPSE=1
Обновил #8
E2P - для полных эллипсов используется ф-ция gile
E2PCMD - полные эллипсы строятся командным методом (PELLIPSE=1)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 28.06.2023, 19:53
#28
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,072


Цитата:
Сообщение от VVA Посмотреть сообщение
E2P - для полных эллипсов используется ф-ция gile
E2PCMD - полные эллипсы строятся командным методом (PELLIPSE=1)
Пардон, не догоняю...
Обе команды одинаково преобразуют эллиптические дуги. И обе же одинаково зависают на полных эллипсах.
В принципе, зачем две команды? Тем более, что они делают/не делают одинаково...
__________________
количество моих сообщений не говорит о знании Автокада
АлексЮстасу вне форума  
 
Непрочитано 29.06.2023, 10:30
#29
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Отличие в методах. В команде E2PCMD используется команда "Эллипс" с установкой pellipse=1, в команде E2P функция gile (считается геометрически). Выложи или пришли пример, в котором виснет.

----- добавлено через ~39 мин. -----
АлексЮстасу, Я еще раз обновил #8 Отказался от ф-ции gile для полных эллипсов. Пересмотрел граничные условия для написанной ф-ции для неполных элипсов. Тестируй
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 29.06.2023 в 12:07.
VVA вне форума  
 
Непрочитано 29.06.2023, 17:01
#30
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,072


Цитата:
Сообщение от VVA Посмотреть сообщение
еще раз обновил #8
Почему-то виснут обе команды.
Цитата:
Сообщение от VVA Посмотреть сообщение
Выложи или пришли пример, в котором виснет.
Обычный эллипс, начерченный когда-то от балды.
2018, Map/Civil, сохранен в 2004.
Вложения
Тип файла: dwg
DWG 2004
ellipse.dwg (379.7 Кб, 4 просмотров)
__________________
количество моих сообщений не говорит о знании Автокада
АлексЮстасу вне форума  
 
Непрочитано 29.06.2023, 18:29
1 | #31
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Цитата:
Сообщение от АлексЮстасу Посмотреть сообщение
Обычный эллипс, начерченный когда-то от балды.
Я не могу повторить твой эллипс, но вижу что он есть.
Функция TraceAce считала, что начальный и конечный угол полного эллипса 0 - 360, но может быть и 90-90 как у тебя и 180-180 и 270-270. Из-за этого был бесконечный цикл. Поправил логику
обновил #8
Миниатюры
Нажмите на изображение для увеличения
Название: el.png
Просмотров: 16
Размер:	17.8 Кб
ID:	256975  
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 29.06.2023, 22:48
#32
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,072


Цитата:
Сообщение от VVA Посмотреть сообщение
Я не могу повторить твой эллипс, но вижу что он есть.
Я умудрился сваять какой-то неправильный эллипс?
Цитата:
Сообщение от VVA Посмотреть сообщение
Функция TraceAce считала, что начальный и конечный угол полного эллипса 0 - 360, но может быть и 90-90 как у тебя и 180-180 и 270-270. Из-за этого был бесконечный цикл. Поправил логику
обновил #8
Спасибо!
E2P теперь преобразует достаточно быстро и эллипсы, и эллиптические дуги.

О точности (вторая проблема - #20).
Пардон, если отморожу - я ничего не понимаю в коде, и математику не знал, но забыл.
Вижу в коде то
Код:
[Выделить все]
(equal (cdr(assoc 42 (entget el))) (* 2 pi) 1e-6)
, то
Код:
[Выделить все]
(equal endparam (* pi 2) 1e-12)
.
Может быть точность будет лучше, если "1e-6" заменить на "1e-8" или т.д.?
__________________
количество моих сообщений не говорит о знании Автокада
АлексЮстасу вне форума  
 
Непрочитано 30.06.2023, 08:58
1 | #33
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


можешь поправить и до 1e-6. Эти строки проверяют конечный угол и сравнивают его с 2*pi, т.е 360 градусов с точностью до 1e-x. Я обычно использую 1e-6, т.е до 0,000001. Автор этой функции использовал 1e-12, т.е. 0,000000000001. Но это сравнение с углом 360 градусов, поэтому можешь заменить и на 1e-8 или оставить как есть.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 30.06.2023, 18:43
#34
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,072


Цитата:
Сообщение от VVA Посмотреть сообщение
до 0,000001
Сейчас я намерил расхождения в 4-5 знаке.
Цитата:
Сообщение от VVA Посмотреть сообщение
твой эллипс
Возможно, этот эллипс был не непосредственно вручную начерчен. Кажется, я разбирался со штриховками, и этот эллипс мог получиться восстановлением границы штриховки.
__________________
количество моих сообщений не говорит о знании Автокада
АлексЮстасу вне форума  
 
Непрочитано 30.06.2023, 22:41
#35
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


АлексЮстасу, Мне тоже не получилось создать такой эллипс штатными средствами автокада, возможно он был создан программно каким-то приложением.
Цитата:
Сообщение от АлексЮстасу Посмотреть сообщение
Сейчас я намерил расхождения в 4-5 знаке.
Значит надо оставить 1e-3.
Цитата:
Сообщение от АлексЮстасу Посмотреть сообщение
О точности (вторая проблема - #20).
В функции TraceACE за количество полученных сегментов отвечает
Цитата:
anginc (* pi (/ 5.0 180.0))
, конкретнее цифра 5 (градусов). Т.е расчет точек идет через угловой инкремент, который равен 5 градусов, которые переводятся в радианы
Далее количество точек получается как разница между начальным и конечным углом эллипса (для полного эллипса 360 градусов или 2*pi радиан. Здесь и была ошибка для твоего эллипса)
Цитата:
;Divide delta (included angle) into an equal number of parts.
(setq div (1+ (fix (/ delta anginc)))
inc (/ delta div)
)
Попробуй поиграйся в строке
Цитата:
anginc (* pi (/ 5.0 180.0))
с цифрой 5 (замени на 3 или 2 или 1). Но это увеличит количество вершин

----- добавлено через ~5 мин. -----
Мне просто интересно, насколько критично для геодезии шаг в 5 градусов. Чтобы были большие расхождения, эллипсы должны быть больших размеров, а что может описываться эллипсом такого размера? Московская область, включая г.Москва?
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 01.07.2023, 03:26
#36
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,072


Цитата:
Сообщение от VVA Посмотреть сообщение
не получилось создать такой эллипс штатными средствами автокада, возможно он был создан программно каким-то приложением.
Кажется, эллпис создан все же штатными автокадовскими средствами - могут ошибаться, программка восстанавливала границу штриховок командой HATCHEDIT.
Цитата:
Сообщение от VVA Посмотреть сообщение
Мне просто интересно, насколько критично для геодезии шаг в 5 градусов.
Я сейчас не про геодезию.
Смотрел программку, определяющую положение точек относительно контуров [штриховок]. Контуры делались полилиниями из эллипсов, окружностей, сплайнов и пр.
Тогда стали попадаться случаи, когда точки внутри или на границе определялись как внешние и наоборот. Оказалось, что дело в точности повторения этими полилиниями кривых.
Цитата:
Сообщение от VVA Посмотреть сообщение
Значит надо оставить 1e-3.
Я путаюсь - уменьшить с 6 до 3, разве не ухудшить точность?
__________________
количество моих сообщений не говорит о знании Автокада
АлексЮстасу вне форума  
 
Непрочитано 04.07.2023, 08:41
#37
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Цитата:
Сообщение от АлексЮстасу Посмотреть сообщение
Я путаюсь - уменьшить с 6 до 3, разве не ухудшить точность?
Это сравнения угла эллипса с углом в 360 градусов, представленных в радианах, чтобы определить, это полный эллипс или эллиптическая дуга.
Сравнение до 1e-3=0,001 рад= 0.0572958 градуса или 0°3'26"
Т.е. если ты начертишь эллиптическую дугу в внутренним углом в 359°56'34", то сравнение до 1e-3 может посчитать это полным эллипсом и ты получишь замыкающий сегмент в виде полилинии
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 04.07.2023, 18:01
#38
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,809


VVA,
почему бы просто не проверить начальную и конечную точки?
Код:
[Выделить все]
 
(equal (vlax-get ellipse 'startpoint) (vlax-get ellipse  'endpoint))
__________________
K Lisp
koMon вне форума  
 
Непрочитано 05.07.2023, 13:33
#39
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


koMon, Да, так лучше. Обновил #8
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Convert ellipses to polylines