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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Выравнивание полилинии в одну линию.

Выравнивание полилинии в одну линию.

Ответ
Поиск в этой теме
Непрочитано 25.03.2008, 14:55
Выравнивание полилинии в одну линию.
f0lk
 
Регистрация: 16.10.2007
Сообщений: 7

Здравствуйте.
Есть полилиния - нужна программа которая выравнивает точки полилинии по одной прямой, со сохранением длин между вершинами полилинии.
С лиспом практически незнаком, а стандартными средствами такое сделать не получается.
Просмотров: 31014
 
Непрочитано 01.07.2008, 16:49
#21
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,991
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Цитата:
Тогда возникает вопрос, как загнать в блок их попроще
Все выбранное в блок. Напомните ЛИСП
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 01.07.2008, 17:38
#22
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,991
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Одно НО
В SETUB3 точка вставки блока посередине габарита (для отрезков - посередине), а для кода Дима_ нужно
Цитата:
НО чтоб центр (или точка вставки для блока) лежали строго на вершине полилинии
Но по моему этого не требуется в коде Алексея
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 01.07.2008, 19:17
#23
skkkk


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


Алексей, а в твоем коде (#15) что это за зеленые мишени по бывшим вершинам появляются на распрямленном отрезке? Можно их убрать? И на него (отрезок) из всех выбранных мной блоков почему-то переносится только первый. И еще у меня оба лиспа (второй - от Димы_) выпрямленную линию делают задом наперед. С чего бы это вдруг?? Не страшно, конечно, Rotate спасает, но изящность процесса портится

VVA , в лиспе Алексея тоже надо, чтобы точка вставки блока совпадала с вершиной

Последний раз редактировалось skkkk, 01.07.2008 в 19:26.
skkkk вне форума  
 
Непрочитано 01.07.2008, 22:16
#24
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,991
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Не знаю, я детально не анализировал, Алексею видней всех.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 01.07.2008, 23:46
#25
Кулик Алексей aka kpblc
Moderator

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


skkkk, #23 в продолжение #19 и на его основе?
"Зеленые" типа точки - на самом деле блоки, которые показывать должны старое положение вершин.
Не очень понял - что значит "задом наперед". Она лично у меня отрисовывается слева направо в текущей системе координат. А вершины располагаются начиная с первой по направлению отрисовки полилинии. Хочешь - попробуй инвертировать направление (см. http://dwg.ru/dnl/607)
Вопрос с "поворотом" пересекающих объектов лично я сейчас решить не в силах - прилично аналитики надо прописывать, чтоб добиться приемлемого результата (
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 02.07.2008, 02:35
#26
skkkk


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
skkkk, #23 в продолжение #19 и на его основе?
(
именно так

А у меня почему-то выпрямленная линия отрисовывается справа налево, причем и твоим лиспом и Диминым_

Помнится мне, речь шла о допуске...
Цитата:
Сообщение от Дима_ Посмотреть сообщение
НО чтоб центр (или точка вставки для блока) лежали строго на вершине полилинии.
Цитата:
Сообщение от VVA Посмотреть сообщение
Дима_, Только я бы сравнивал координаты с допуском. У меня бывали случаи, когда 2 одинаковые точки не были equal
...нельзя ли этот допуск увеличить? Так, чтобы центры блоков, отстоящие от ближайшей вершины, допустим, на 0,5 единиц, тоже шли в зачет....
skkkk вне форума  
 
Непрочитано 02.07.2008, 02:41
#27
skkkk


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


VVA, а ведь эту (эти) команду можно добавить в PLTOOLS, не считаете?
Добавлено: Разумеется, с согласия авторов

Последний раз редактировалось skkkk, 02.07.2008 в 14:17.
skkkk вне форума  
 
Непрочитано 02.07.2008, 10:27
#28
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Цитата:
Сообщение от skkkk Посмотреть сообщение
А у меня почему-то выпрямленная линия отрисовывается справа налево, причем и твоим лиспом и Диминым_

Помнится мне, речь шла о допуске...


...нельзя ли этот допуск увеличить? Так, чтобы центры блоков, отстоящие от ближайшей вершины, допустим, на 0,5 единиц, тоже шли в зачет....
1 - Скорее всего ты на эту линию снизу "смотришь".
2 - (if (equal (cdr (assoc 10 (entget obj))) (append (nth n lst) (list 0.0)) 1e-6) и есть допуск.

P.S. А понял в чем дело - скорее всего линия с права на лево получаеться потому, что исходная полилиния идет с права на лево, а сканирует программа с начала линии, исправить это без проблем, но я сейчас в отпуске и на рыбалку укатываю, через 2 дня если никто не исправит, перепишу. Пока можешь написать, что делать если исходные точки одна под другой окажется (по одной X координате) - откуда сканировать сверху вниз или наоборот.
__________________
Когда в руках молоток все вокруг кажется гвоздями.

Последний раз редактировалось Дима_, 02.07.2008 в 10:46.
Дима_ вне форума  
 
Непрочитано 02.07.2008, 15:26
#29
skkkk


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


Дима_, удачного улова, и не забудь(те) взять удочки, а то я знаю, как в России рыбалка бывает

А нельзя как-то придумать снятие вообще этого ограничения насчет соответствия вершин полилинии точкам вставки блоков? Если пересекает блок (а лучше - отрезок)в любом месте, значит переносится на выпрямляемую линию... Было бы здорово. Ведь не все пересекаемые линии проходят через центр (см. во вложении). Может, как-то можно лиспом Согласовать ориентацию блока с ориентацией объекта по аналогии с командой _measure АвтоКАДа?

А по поводу справа налево. Осенило меня тут.....я сглупил конкретно, головой меня об кирпич. Конечно же, я отрисовывал эту полилинию справа налево, а то что она рисуется наоборот, так мне же так и надо!!!! Так что этот момент переделывать ни к чему
Вложения
Тип файла: dwg
DWG 2007
Чертеж.dwg (86.8 Кб, 1702 просмотров)

Последний раз редактировалось skkkk, 02.07.2008 в 15:46.
skkkk вне форума  
 
Непрочитано 02.07.2008, 18:52
#30
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,991
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Ну вот по быстрому что-то сфарганил. По идее должна разворачивать все пересекающие полилинию объекты. Особо не теститровал. Поэтому лучше пока сразу выставить МСК
Код:
[Выделить все]
(defun c:razv3 ( / P lst lst2 lst3 n obj krd)
(setq lst nil lst2 nil lst3 nil krd 0 n 0 obj (entget (car (entsel "Выберите полилинию "))))
(if (/= (cdr (assoc 0 obj)) "LWPOLYLINE") (progn (alert "Это не LW полилиния") (exit)))
(setq p (trans (getpoint "Куда вставлять развертку ") 1 0))

;записывает координаты вершин
(while (/= krd nil)
(setq krd (nth n obj))
(if (= (car krd) 10) (setq lst (append lst (list (list (cadr krd) (caddr krd)))))
);end of if
(setq n (1+ n))
);end of while

;записывает расстояния 
(setq n 0)
(while (/= (nth (1+ n) lst) nil)
(setq lst2 (append lst2 (list (distance (nth n lst) (nth (1+ n) lst))))
n (1+ n)
);end of setq
);end of while

;записывает координаты новых вершин
(setq n 0 krd p lst3 (list krd))
(repeat (length lst2)
(setq
krd (list (+ (car krd) (nth n lst2)) (cadr krd))
lst3 (append lst3 (list krd))
n (1+ n)
);end of setq
);end of repeat

;строит полилинию
(pl lst3)
(if (and (setq ss (ssget "_F" (mapcar '(lambda(x)(trans x 0 1)) lst)))
	 (ssdel (cdr(assoc -1 obj)) ss)
	 (> (sslength ss) 0)
	 )
  (progn
    (mapcar '(lambda(item / vla-obj pt-rot index flag segN)
	       (setq vla-obj (vlax-ename->vla-object (cadr item)))
	       (setq vla-obj (vla-copy vla-obj))
	       (setq pt-rot (trans(cadr(last item)) 1 0))
	       (setq flag t index '-1 segn nil)
	       (mapcar '(lambda (p1 p2)
			  (setq index (1+ index))
			  (if (and flag
				   (equal (distance p1 p2)
					  (+ (distance p1 pt-rot)
					     (distance pt-rot p2)
					     )
					  1e-3)
				   )
			    (setq flag nil segN index)
			    )
			  )
		       lst (cdr lst)
		       )
	       (if segN
		 (progn
	       (vla-rotate vla-obj (vlax-3d-point (append (nth segN lst)(list (cdr(assoc 38 obj)))))
			       (- (* 2 pi)(angle (nth segN lst)(nth (1+ segN) lst)))
			       )
	       (vla-move vla-obj (vlax-3d-point (append (nth segN lst)(list (cdr(assoc 38 obj)))))
			          (vlax-3d-point (nth segN lst3))
			 )
	       )
		 )
	       )
    (ssnamex ss)
	    )
    )
  )
  (princ)
);end defun

(defun pl (obj / ed n tmp); создает полилинию по списку вершин obj.
(setq 	ed (list (cons 0 "LWPOLYLINE")
		(cons 100 "AcDbEntity")
		(cons 100 "AcDbPolyline")
		(cons 90 (length obj)));end of list
	n 0
	tmp (nth n obj)
);end of setq
(while (/= tmp nil)
(setq 	ed (append ed (list (append (list 10) (nth n obj))))
	n (1+ n)
	tmp (nth n obj)
);end setq 
);end of while
(entmakex ed)
);end of defun
*** Добавлено
>Skkkk В полилинии в твоем примере из #29 есть дублирующиеся вершины. Обработай до применения RAZV3 командой PL-VxOpt и (если нужно) Entrevs.
Это ,наверное, станет очередным кандидатом в pltools (возможно в 2-х варинтах: просто развертка полилинии и развертка с пересекающими полилинию объектами)
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 02.07.2008 в 19:00.
VVA вне форума  
 
Непрочитано 02.07.2008, 19:28
#31
skkkk


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


VVA, не разворачивает у меня пересекающие объекты. Рисует только прямую полилинию

Добавлено:
Прошу прощения. Это относится только к прикрепленному чертежу из #29. Там все так. Ну этот чертеж, видимо, многое вытерпел....
Попробовал на новом, все работает. Огромное спасибо, Владимир. А можно дополнить код так, чтобы от развернутой полилинии в местах пересечения рисовались отрезки длиной 40мм по направлению вверх? Только если несложно

Последний раз редактировалось skkkk, 02.07.2008 в 20:39.
skkkk вне форума  
 
Непрочитано 02.07.2008, 22:51
#32
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,991
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Цитата:
Сообщение от skkkk Посмотреть сообщение
Это относится только к прикрепленному чертежу из #29. Там все так. Ну этот чертеж, видимо, многое вытерпел....
Из #30
Цитата:
>Skkkk В полилинии в твоем примере из #29 есть дублирующиеся вершины. Обработай до применения RAZV3 командой PL-VxOpt и (если нужно) Entrevs.
В полилинии не должно быть дублирующихся вершин, иначе не работает выбор _fence в ssget
>skkkk #31 В местах пересечения чего с чем?
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 02.07.2008, 23:05
#33
skkkk


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


Цитата:
Сообщение от VVA Посмотреть сообщение
Из #30

В полилинии не должно быть дублирующихся вершин, иначе не работает выбор _fence в ssget
Не заметил..

Цитата:
Сообщение от VVA Посмотреть сообщение
>skkkk #31 В местах пересечения чего с чем?
Вот тут во вложении красные линии. Только красными их делать не надо
Вложения
Тип файла: dwg
DWG 2007
Чертеж1.dwg (60.3 Кб, 1688 просмотров)
skkkk вне форума  
 
Непрочитано 23.07.2008, 05:00
#34
skkkk


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


VVA, почему-то некорректно разворачивается полилиния в примере. Длина развернутой не совпадает с длиной оригинала (при проверке entlen'ом и в свойствах). Не знаете, в чем может быть дело? Всю голову сломал. МСК стоит. Круглая часть полилинии создана обрезкой круга и присоединением pedit'ом, только на ней замечена такая ошибка. И еще не все коротенькие черточки переносит. А еще мне неясно, почему файл так много весит?? Вроде всего две поли там, да несколько отрезков....
P.S. Речь о лиспе с #30
Вложения
Тип файла: dwg
DWG 2007
Пример.dwg (472.7 Кб, 1715 просмотров)
skkkk вне форума  
 
Непрочитано 03.04.2013, 04:48 подскажите с лиспом
#35
Gri05-1


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


Доброго всем дня! Проьлемка в том, что есть не ровные полилинии которые нужно сделать ровными и той же длины. Лисп razv подходит, но только для горизонтальных, а если у меня вертикальные линии прога их на 90 градусов поворачивает.. В чертеже у меня они то так и должны быть, ровные верт-ые и ровные гориз-ые. Я до этого скачивал лисп - l_align_xy Александра Ривилиса, она делает все как полагается, единственно только на отрезках... Подскажите как проблему решить или ссылочку на нужный лисп киньте... А надо простые полилинии и 3д полилинии. Заранее благодарен!
Gri05-1 вне форума  
 
Непрочитано 03.04.2013, 11:46
#36
skkkk


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


Неточная постановка вопроса. Как неровные линии могут быть горизонтальными или вертикальными? Лучше приложить пример в dwg с нарисованными вариантами и их описанием, что есть и что надо.
skkkk вне форума  
 
Непрочитано 03.04.2013, 14:23
#37
sertor

Геодезист
 
Регистрация: 23.05.2012
Ухта
Сообщений: 1,374


Цитата:
Сообщение от Gri05-1 Посмотреть сообщение
а если у меня вертикальные линии прога их на 90 градусов поворачивает.
Я так понимаю, что пост написан в развитие этой темы.
__________________
Как-то так.
sertor вне форума  
 
Непрочитано 03.04.2013, 19:11
#38
skkkk


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


Offtop: sertor, это она и есть "эта" тема
skkkk вне форума  
 
Непрочитано 03.04.2013, 20:03
#39
sertor

Геодезист
 
Регистрация: 23.05.2012
Ухта
Сообщений: 1,374


Цитата:
Сообщение от skkkk Посмотреть сообщение
sertor, это она и есть "эта" тема
Offtop: Точно. Прошу прощения за невнимательность, хотелось направить в "нужное русло".
__________________
Как-то так.
sertor вне форума  
 
Непрочитано 04.04.2013, 04:18
#40
Gri05-1


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


Прикладываю файл автокада. Не судите строго, может чего не так делаю..
Вложения
Тип файла: rar полилинии.rar (32.3 Кб, 67 просмотров)
Gri05-1 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Выравнивание полилинии в одну линию.

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
lisp: Длина по полилинии до точки vosh LISP 19 15.07.2013 15:10
Как получить контур полилинии с различной шириной Marina AutoCAD 5 26.12.2008 09:16
Странное выравнивание в таблице Bull AutoCAD 8 12.03.2008 12:01
Как рисуя одну полилинию получить сразу 4? Димас AutoCAD 33 22.07.2006 01:17
некорректно определяется площадь замкнутой полилинии elena_din AutoCAD 16 23.09.2005 17:37