| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Lisp - ошибка определения длины объекта

Lisp - ошибка определения длины объекта

Ответ
Поиск в этой теме
Непрочитано 29.11.2010, 13:18 #1
Lisp - ошибка определения длины объекта
Лиспер
 
Регистрация: 11.10.2010
Сообщений: 980

Здрасьте всем.
В коде достаточно долго определял длину объекта через его vla-указатель:
Код:
[Выделить все]
(setq obj (vlax-ename->vla-object (car (entsel))))
(vlax-curve-getDistAtPoint obj (vlax-curve-getEndPoint obj))
И все было хорошо, пока не столкнулся с полилинией, созданной командой _.donut. Для таких полилиний почему-то длина, вычисленная по тому же коду, выдавала 0 (AutoCAD 2008).
Что это - кривые руки? Баг? Фича?
Конечно, обойти можно, проверяя доступность свойства Lenght и уже от этого плясать, но хочется найти какое-то более универсальное решение.
Спасибо.
__________________
(/= RegDate StartReadDate)
Просмотров: 2203
 
Непрочитано 29.11.2010, 13:32
1 | #2
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,407
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от Лиспер Посмотреть сообщение
Что это - кривые руки? Баг? Фича?
Если полиния замкнутая, то начальная точка совпадает с конечной точкой. Поэтому очевидно, что так посчитать длину нельзя. А так можно:
Код:
[Выделить все]
(setq obj (vlax-ename->vla-object (car (entsel))))
(vlax-curve-getDistAtParam obj (vlax-curve-getEndParam obj))
Александр Ривилис на форуме  
 
Автор темы   Непрочитано 29.11.2010, 13:36
#3
Лиспер


 
Регистрация: 11.10.2010
Сообщений: 980


Спасибо. Я-то думал, что vlax-curve-getdistatpoint высчитывает длину от первой точки до указанной, а не так, как выяснилось...
__________________
(/= RegDate StartReadDate)
Лиспер вне форума  
 
Непрочитано 29.11.2010, 15:12
1 | #4
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,407
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от Лиспер Посмотреть сообщение
Спасибо. Я-то думал, что vlax-curve-getdistatpoint высчитывает длину от первой точки до указанной, а не так, как выяснилось...
Ну если у тебя первая точка и последняя совпадают, то как AutoCAD догадается, что тебе нужно расстояние именно до последней точки, а не до первой?
Александр Ривилис на форуме  
 
Автор темы   Непрочитано 29.11.2010, 15:18
#5
Лиспер


 
Регистрация: 11.10.2010
Сообщений: 980


Ну так... От первой точки до указанной вдоль объекта. И все же - почему обращение к параметру объекта срабатывает корректно? Ведь геометрически последний параметр совпадает с первым.
__________________
(/= RegDate StartReadDate)
Лиспер вне форума  
 
Непрочитано 29.11.2010, 15:50
#6
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 571


Цитата:
Сообщение от Лиспер Посмотреть сообщение
Ну так... От первой точки до указанной вдоль объекта.
Ну так у Тебя первая точка и последняя совпадуют и как сказал Александр Ривилис
Цитата:
как AutoCAD догадается, что тебе нужно расстояние именно до последней точки, а не до первой?
Т. е. ACAD думает что Тебе нужно расстояние от первой точки (или не важно от какой) до нее же самой, вот и выдает ноль

Цитата:
Сообщение от Лиспер Посмотреть сообщение
И все же - почему обращение к параметру объекта срабатывает корректно? Ведь геометрически последний параметр совпадает с первым.
Потому что для полилиний (AutoLisl и Visual Lisp в среде AutoCAD, стр. 355) парамерт кривой - это количество предыдущих участков от начала (целая часть параметра) и доля следующего участка (в дробной части); например, 1.5 - середина втротого участка полилинии. Целые значения соответствуют вершинам
__________________
cadtools
TararykovDG вне форума  
 
Автор темы   Непрочитано 29.11.2010, 16:13
#7
Лиспер


 
Регистрация: 11.10.2010
Сообщений: 980


Ладно, примерно понял. Что такое параметр - я в курсе
__________________
(/= RegDate StartReadDate)
Лиспер вне форума  
 
Непрочитано 29.11.2010, 21:45
#8
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,407
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от Лиспер Посмотреть сообщение
Ладно, примерно понял.
Чтобы понял окончательно, представь себе что полилиния самопересекающаяся (например в виде восьмерки). Теперь подумай какое расстояние вернет тебе функция vlax-curve-getDistAtPoint если ты передашь ей точку, в которой полилиния пересекает саму себя. Кстати, что касается параметра, то то, что написал
TararykovDG, для полилинии справедливо. А вот для других кривых (эллипс, сплайн, отрезок, дуга и т.д.) далеко не всегда. Но самое главное, это то, что параметр - это монотонная функция от длины вдоль кривой. И соответственно зная параметр длину можно получить всегда однозначно. А вот если знаешь точку на кривой, то определить параметр и длину можно не всегда.
Цитата:
Сообщение от Лиспер Посмотреть сообщение
И все же - почему обращение к параметру объекта срабатывает корректно? Ведь геометрически последний параметр совпадает с первым.
Не совпадает. Можешь сам проверить полученные значения.
Александр Ривилис на форуме  
 
Автор темы   Непрочитано 30.11.2010, 00:37
#9
Лиспер


 
Регистрация: 11.10.2010
Сообщений: 980


Все, понял, спасибо.
__________________
(/= RegDate StartReadDate)
Лиспер вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Lisp - ошибка определения длины объекта

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Есть ненужные документы. Посмотрите, кому что нужно Дмитрий832 Поиск литературы, чертежей, моделей и прочих материалов 73 18.12.2010 22:55
Несоответствие результатов в Лире s.vas Лира / Лира-САПР 19 11.11.2009 07:31
ГОСТ Р 53231-2008 UnyqUm Поиск литературы, чертежей, моделей и прочих материалов 5 15.09.2009 14:41
VBA. Размораживание слоя, построение объекта в нем, замораживание слоя = ошибка Alexey_02 Программирование 3 06.03.2009 22:33
Помощь по Лире Серега М Лира / Лира-САПР 52 28.05.2007 02:47