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

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Упрощение кривой ломанными

Упрощение кривой ломанными

Ответ
Поиск в этой теме
Непрочитано 08.07.2013, 16:07 #1
Упрощение кривой ломанными
lebedun
 
Регистрация: 04.06.2011
Сообщений: 39

Имеется 3д кривая. Каким инструментом я могу провести по ней ломанную с определенной длинной сегментов этой ломанной?
Просмотров: 6324
 
Непрочитано 08.07.2013, 16:15
#2
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,432


_divide / _measure / написать свою программу / заняться поиском и найти готовую программу
все дороги хороши, выбирай на вкус
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 08.07.2013, 16:23
#3
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,188


PLTOOLS forever!
kp+ вне форума  
 
Непрочитано 08.07.2013, 21:56
#4
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


РЕДСПЛАЙН с 2010 года преобразовывает сплайн в полилинию
gomer вне форума  
 
Автор темы   Непрочитано 09.07.2013, 10:41
#5
lebedun


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


Я так понимаю из всего изложенного остается только написать свою программу
lebedun вне форума  
 
Непрочитано 09.07.2013, 10:42
#6
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,432


#3 прочитай еще разок
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 09.07.2013, 10:51
#7
CaMoCAD


 
Регистрация: 25.03.2008
Зелик
Сообщений: 1,602


Цитата:
Сообщение от lebedun Посмотреть сообщение
Я так понимаю из всего изложенного остается только написать свою программу
Вы бы хоть сказали, что за примитив надо сегментировать. Кривых в автокаде не бывает. А для дуги, полилинии и сплайна нужны разные методы.
__________________
* Буква "ё" не используется в тексте исключительно в связи с требованиями ЕСКД.
CaMoCAD вне форума  
 
Автор темы   Непрочитано 09.07.2013, 19:48
#8
lebedun


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


К примеру есть полилиния из множества прямых и дуг. мне надо ее заменить ломаной полилинией из прямых сегментов определенной длинны. pltools делает это с дугой, но вот со сплайном или ломаной полилинией чето никак у меня не получилось
lebedun вне форума  
 
Непрочитано 10.07.2013, 19:35
#9
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Цитата:
Сообщение от lebedun Посмотреть сообщение
есть полилиния из множества прямых и дуг. мне надо ее заменить ломаной полилинией из прямых сегментов определенной длинны
Сначала
Цитата:
PL-DIVAll -Разбивает все сегменты полилинии на указанное количество сегментов или через указанное расстояние
затем
Цитата:
PL-NoArc -Аппроксимация дуговых сегментов полилинии
А со сплайнами см. #4 и далее все с начала
skkkk на форуме  
 
Автор темы   Непрочитано 11.07.2013, 09:50
#10
lebedun


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


Цитата:
Сообщение от skkkk Посмотреть сообщение
PL-DIVAll -Разбивает все сегменты полилинии на указанное количество сегментов или через указанное расстояние
Эта команда делит сегменты, которые больше требуемой длины. А если полилиния состоит из ломаной с длиной сегмента к примеру 10, а мне надо получить с длинной 13, то эта команда не работает.
lebedun вне форума  
 
Непрочитано 11.07.2013, 10:07
#11
CaMoCAD


 
Регистрация: 25.03.2008
Зелик
Сообщений: 1,602


Что привередничаете? Пост №2 -
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
_divide / _measure / написать свою программу
__________________
* Буква "ё" не используется в тексте исключительно в связи с требованиями ЕСКД.
CaMoCAD вне форума  
 
Автор темы   Непрочитано 11.07.2013, 10:21
#12
lebedun


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


_measure делит на сегменты по линии существующей, а не создавая прямые отрезки определенной длины. Хорда всегда меньше дуги.

PL-NoArc я поделю дугу. А вот с ломаной полилинией получается ничего не поделаешь
lebedun вне форума  
 
Непрочитано 11.07.2013, 10:31
#13
CaMoCAD


 
Регистрация: 25.03.2008
Зелик
Сообщений: 1,602


Однако, у Вас запросы...
Тогда ручками, - из начала ПЛ чертите окружность нужного радиуса (длина Вашей хорды). Потом копируете ее в точки пересечения с исходной ПЛ. Центры окружностей соединяете - плучаете искомую ломаную.
Как автоматизировать - в душЕ не знаю. Пересечений может быть несколько.
__________________
* Буква "ё" не используется в тексте исключительно в связи с требованиями ЕСКД.
CaMoCAD вне форума  
 
Автор темы   Непрочитано 11.07.2013, 11:49
#14
lebedun


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


Цитата:
Сообщение от CaMoCAD Посмотреть сообщение
Однако, у Вас запросы...
Тогда ручками, - из начала ПЛ чертите окружность нужного радиуса (длина Вашей хорды). Потом копируете ее в точки пересечения с исходной ПЛ. Центры окружностей соединяете - плучаете искомую ломаную.
Как автоматизировать - в душЕ не знаю. Пересечений может быть несколько.
Да. Окружность решит этот вопрос вручную. Но мне нужно это делать с 3д полилинией, и окружность уже здесь не спасет
lebedun вне форума  
 
Непрочитано 11.07.2013, 11:54
#15
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,432


В 3Dполилинии не может быть дуговых сегментов.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 11.07.2013, 11:58
#16
VVA

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


Цитата:
Сообщение от lebedun Посмотреть сообщение
А если полилиния состоит из ломаной с длиной сегмента к примеру 10, а мне надо получить с длинной 13
Это можно сделать, если вершины расположены на одной прямой или некой условной прямой, когда незначительными отклонениями можно пренебречь. Для этого есть "прополка" полилинии.
PL-VxRdc -Удаление вершин полилиний, которые лежат на одной прямой
После можно разбить и через 13 PL-DIV или PL-DIVALL.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 11.07.2013, 13:54
#17
lebedun


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
В 3Dполилинии не может быть дуговых сегментов.
Да. Дуга у меня была в 2д
lebedun вне форума  
 
Непрочитано 11.07.2013, 13:55
#18
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,432


Как говорят на некоторых ресурсах, "эта пять!" И каким манером определять, где что начинается и куда продолжается?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 11.07.2013, 14:00
#19
lebedun


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


Цитата:
Сообщение от VVA Посмотреть сообщение
Это можно сделать, если вершины расположены на одной прямой или некой условной прямой, когда незначительными отклонениями можно пренебречь. Для этого есть "прополка" полилинии.
PL-VxRdc -Удаление вершин полилиний, которые лежат на одной прямой
После можно разбить и через 13 PL-DIV или PL-DIVALL.
Как вариант это пойдет. Но желательно чтобы неточностей было как можно меньше. Буду писать свои инструменты.
Спасибо.
lebedun вне форума  
 
Непрочитано 11.07.2013, 14:49
#20
CaMoCAD


 
Регистрация: 25.03.2008
Зелик
Сообщений: 1,602


Цитата:
Сообщение от lebedun Посмотреть сообщение
и окружность уже здесь не спасет
значит, - сфера
__________________
* Буква "ё" не используется в тексте исключительно в связи с требованиями ЕСКД.
CaMoCAD вне форума  
 
Автор темы   Непрочитано 11.07.2013, 19:40
#21
lebedun


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


если привязка к пересечению сферы с полилинией есть то да
lebedun вне форума  
 
Непрочитано 11.07.2013, 19:45
#22
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от CaMoCAD Посмотреть сообщение
из начала ПЛ чертите окружность нужного радиуса (длина Вашей хорды). Потом копируете ее в точки пересечения с исходной ПЛ. Центры окружностей соединяете - плучаете искомую ломаную.
Я кстати так и подумал сначала, автоматизировать несложно, просто это как-то некошерно да и лениво ибо жарко... Без полторушки не обойтись. Могу только подсказать IntersectWith и выбор следующей точки по большему значению параметра полилинии в точке пересечения... Для 3м полилинии проще, там нужно решать треугольники, без всяких сфер
gomer вне форума  
 
Автор темы   Непрочитано 12.07.2013, 09:24
#23
lebedun


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


Цитата:
Сообщение от gomer Посмотреть сообщение
Могу только подсказать IntersectWith
Что такое IntersectWith? Где используется?
lebedun вне форума  
 
Непрочитано 12.07.2013, 15:27
#24
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


да, сделал я ради интереса
Код:
[Выделить все]
 (defun c:test ()

  (vl-load-com)

  (defun mkcircle (c r)
    ;; допилено с помощью VVA
    (entmakex (list '(0 .  "CIRCLE")(cons 10 c)(cons 40 r)))
  )

  (defun mkpline (lst / plst)
	(entmake
	  (append
		(list
		 '(0 . "LWPOLYLINE")'(100 . "AcDbEntity")'(100 . "AcDbPolyline")
		  (cons 90 (length (setq plst (mapcar '(lambda (x)(cons 10 x))lst))))
		  (cons 70 0)
		 '(210 0.0 0.0 1.0)
		)
		plst
	  )
	)
  )

  (defun mklist (lst)
	(if lst 
	  (if (> 3 (length lst))
		(list lst)
		(cons (list (car lst)(cadr lst)(caddr lst)) (mklist (cdddr lst)))
	  )
	)
  )
  
  (setq ofs (getreal "\nУкажите длину участка: "))
  (setq pline (car (entsel "\nУкажите трассу: ")))
  
  (setq start_point (vlax-curve-getStartPoint pline)
		cur_point start_point
		cur_param (vlax-curve-getParamAtPoint pline cur_point)
		end_param (vlax-curve-getEndParam pline)
		prev_param -1
		end_point (vlax-curve-getEndPoint pline)
		plist '()
  )
  (while (< prev_param cur_param end_param)
	(setq
	  circle (mkcircle cur_point ofs)
	  inters
	  (mklist
		(vlax-safearray->list
			  (vlax-variant-value
				(vla-IntersectWith 
				  (vlax-ename->vla-object circle)
				  (vlax-ename->vla-object pline)
				  acExtendNone
				)
			  )
		)
	  )
	  prev_param cur_param
	  cur_param
	  (apply
	   'max
		(mapcar
		 '(lambda (x)
			(vlax-curve-getParamAtPoint pline x)
		  )
		  inters
		)
	  )
	  cur_point (vlax-curve-getPointAtParam pline cur_param)
	  plist (cons cur_point plist)
	)
	(entdel circle)
  )
  (mkpline (append (list start_point) (reverse plist) (list end_point)))
)
кто хочет пирожок, допиливайте

Последний раз редактировалось gomer, 12.07.2013 в 18:06. Причина: Допилено
gomer вне форума  
 
Непрочитано 12.07.2013, 16:21
#25
VVA

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


Допиливаю
Код:
[Выделить все]
(defun mkcircle (c r)(entmakex (list '(0 .  "CIRCLE")(cons 10 c)(cons 40 r))))
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 12.07.2013, 18:03
#26
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Я в том смысле, что если исходная полилиния достаточно серпантиниста, то искомая полилиния может получиться совсем не такой как хотелось, бы, и если честно, но я не знаю как решить эту проблему
gomer вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Упрощение кривой ломанными

Реклама i


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Текст вдоль полилинии или сплайна (по кривой) Denioska AutoCAD 48 10.09.2022 21:55
Отложить на ломаной кривой (сегменты состоят из отрезков) линию нужной длины. khanter72rus AutoCAD 6 23.03.2012 10:32
Как выглядит самая простая формула вычисления уклона точки на вертикальной кривой? МишаИнженер Поиск литературы, чертежей, моделей и прочих материалов 15 14.01.2012 10:47
Команда Array вдоль кривой? d-mytro AutoCAD 2 09.02.2011 18:33
Вписывание свободной переходной кривой между прямой и кривой в AutoCAD Civil 3D 2010 Работа-не-волк Вертикальные решения на базе AutoCAD 3 30.10.2009 11:25