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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как добавить вершины в полилинии в тех местах, где на не находятся блоки?

Как добавить вершины в полилинии в тех местах, где на не находятся блоки?

Ответ
Поиск в этой теме
Непрочитано 04.11.2012, 16:16 #1
Как добавить вершины в полилинии в тех местах, где на не находятся блоки?
reddiska
 
Регистрация: 18.08.2012
Сообщений: 52

На полилинии с точной привязкой к ней находятся блоки (или точки, без разницы). ПОлилиний много, они длинные и извилистые. Вершины полилиний находятся только точках поворота. Но на прямых участках полилиний сверху тоже присобачены блоки. Вершины этих точках раньше стояли, но я их случайно прополола http://dwg.ru/dnl/607 этой штукой. Как их вернуть назад?
Просмотров: 9369
 
Непрочитано 04.11.2012, 18:28
#2
VVA

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


reddiska,
1. Если сеанс не закрыт, то _undo
2. Программно, но нужно файл посмотреть.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 04.11.2012, 18:55
#3
reddiska


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


Сеанс был 2 недели назад и на другом компьютере. А потом выяснилось, что все вершины должны были остаться на месте. Архивного файла нет. Только вручную перебивать, или может кто еще варианты какие знает?У меня был вариант разбить полилинию на отрезки в местах пересечения с блоками или точками, преобразовать в полилинии и объединить, но как разбить - толкового ответа я тоже не нашла.
reddiska вне форума  
 
Непрочитано 04.11.2012, 20:24
#4
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Цитата:
Сообщение от reddiska Посмотреть сообщение
или может кто еще варианты какие знает?
Вариант 1:
  1. Выбираем блоки и полилинию
  2. Вытаскиваем из блоков точки вставки
  3. Добавляем к полилинии вершины в точках из пункта 2.
Вариант 2 (Меньше кода, больше "допиливания ручками")
  1. Выбираем блоки
  2. Извлекаем точки вставки блоков
  3. Создаем новую полилинию по точкам из пункта 2.
  4. Дальше вручную удаляем кусок из имеющейся полилинии и вставляем полученный в пункте 3 кусок.
Do$ вне форума  
 
Непрочитано 04.11.2012, 21:46
#5
VVA

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


reddiska, Без проверки. переделал отсюда
Правила:
1. Pltools должны быть загружены
2. Блоки/точки должны лежать на полилинии с точностью, которую ты введешь на запрос "Укажите допуск"
3. Вершины, расстояния между которыми меньше указанного допуска в полилинию добавляться не будут

Код:
[Выделить все]
(defun C:PL-BLK	(/ SS N LST PT *ERROR* FUZZ VXCNT)
  ;; PL-VFI - Vertex From Intersection with objects
  ;;автовставка вершин в выбранных полилиниях в местах пересечения с указанной полилинией, линией, дугой
  ;;http://www.caduser.ru/forum/index.php?PAGE_NAME=read&FID=23&TID=47618

  (defun *ERROR* (MSG)
    (princ MSG)
    (princ)
  ) ;_ end of defun
  (or (setq FUZZ *PL-FUZZ*)
      (setq *PL-FUZZ* 0.001
	    FUZZ *PL-FUZZ*
      ) ;_ end of setq
  ) ;_ end of or
  (if
    (and
      (progn
	(setq VXCNT 0)
	(initget 6)
	(princ (if *PL:ISRUS*
		 "\nУкажите допуск <"
		 "Enter fuzz distance <"
	       ) ;_ end of if
	) ;_ end of princ
	(princ FUZZ)
	(princ " >: ")
	(or
	  (setq FUZZ (getdist))
	  (setq FUZZ *PL-FUZZ*)
	) ;_ end of or
	FUZZ
      ) ;_ end of progn
      (princ
	(if *PL:ISRUS*
	  "\nВыберите блоки"
	  "\nSelect block"
	) ;_ end of if
      ) ;_ end of princ
      (setq SS (ssget "_:L" '((0 . "INSERT,POINT"))))
      (setq LST (PL:SELSET-TO-ENAMELIST SS))
      (princ (if *PL:ISRUS*
	       "\nВыберите полилинии для вставки вершин"
	       "\nPlease select the polyline to add vertex"
	     ) ;_ end of if
      ) ;_ end of princ
      (setq SS NIL
	    SS (ssget "_:L"
		      '(
			(0 . "*POLYLINE")
			(-4 . "<AND")
			(-4 . "!=")
			(70 . 2)
			(-4 . "!=")
			(70 . 3)
			(-4 . "!=")
			(70 . 4)
			(-4 . "!=")
			(70 . 5)
			(-4 . "!=")
			(70 . 10)
			(-4 . "!=")
			(70 . 11)
			(-4 . "!=")
			(70 . 12)
			(-4 . "!=")
			(70 . 13)
			(-4 . "!=")
			(70 . 130)
			(-4 . "!=")
			(70 . 131)
			(-4 . "!=")
			(70 . 132)
			(-4 . "!=")
			(70 . 133)
			(-4 . "!=")
			(70 . 138)
			(-4 . "!=")
			(70 . 139)
			(-4 . "!=")
			(70 . 140)
			(-4 . "!=")
			(70 . 141)
			(-4 . "AND>")
		       )
	       )
      ) ;_ end of setq
      (> (sslength SS) 0)
    ) ;_ end of and
     (progn
       (setq N 0
	     VXCNT 0
       )
       (foreach	ITEM (PL:SELSET-TO-ENAMELIST SS)
	 (setq N (1+ N))
	 (foreach blk LST
	   (grtext -1 (strcat "Polyline № " (itoa N) " Vertex №: " (itoa VXCNT)))
	   (if (equal
		 (vlax-curve-getClosestPointTo
		   ITEM
		   (setq PT (cdr (assoc 10 (entget blk))))
		 )
		 PT
		 FUZZ
	       ) ;_блок на полилинии с точночтью до 0.001
	     ((lambda (PT / PARAM PARAM1 PARAM2)
		(setq PARAM
		       (vlax-curve-getparamatpoint
			 ITEM
			 (vlax-curve-getclosestpointto
			   ITEM
			   PT
			 ) ;_ end of vlax-curve-getclosestpointto
		       ) ;_ end of vlax-curve-getParamAtPoint
		) ;_ end of setq
		(setq PARAM1 (fix PARAM)
		      PARAM2 (1+ PARAM1)
		) ;_ end of setq
		(if
		  (< (vlax-curve-getendparam ITEM) PARAM2)
		   (setq PARAM2 PARAM1)
		) ;_ end of if
		(if
		  (not
		    (apply
		      'or
		      (mapcar
			'(lambda (PR)
			   (equal
			     (vlax-curve-getpointatparam
			       ITEM
			       PR
			     ) ;_ end of vlax-curve-getPointAtParam
			     PT
			     FUZZ
			   ) ;_ end of equal
			 ) ;_ end of lambda
			(list PARAM1 PARAM2)
		      ) ;_ end of mapcar
		    ) ;_ end of apply
		  ) ;_ end of not
		   (progn
		     (PL:ADDVX PT
			       ITEM
			       PT
		     ) ;_ end of pl:AddVX
		     (setq VXCNT (1+ VXCNT))
		   )
		) ;_ end of if
	      ) ;_ end of lambda
	       PT
	     )
	   )
	 )
       )
     )
  )
  (princ)
)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 05.11.2012, 07:45
#6
reddiska


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


Не получается( Ничего не происходит
reddiska вне форума  
 
Непрочитано 05.11.2012, 14:18
#7
VVA

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


Цитата:
Сообщение от VVA Посмотреть сообщение
2. Программно, но нужно файл посмотреть.
покажи файл или фрагмент
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 16.08.2014, 19:37
#8
Аристарх Северный


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


Уважаемый VVA. Спасибо вам огромное за лисп PL-BLK. Чудо как хорош. Но у меня большая просьба: возможно ли доработать программу, чтобы новым вершинам можно было задавать те же значения Z, что и у точек, которые полилиния зацепила?
Аристарх Северный вне форума  
 
Непрочитано 16.08.2014, 21:43
#9
VVA

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


Аристарх Северный, Я так понимаю, что вопрос уже решен
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 16.08.2014, 21:51
#10
Аристарх Северный


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


Да. Зашел отписаться, что нашел. Спасибо вам за то, что вы делаете.
Аристарх Северный вне форума  
 
Непрочитано 10.07.2016, 08:39
#11
KaznaSpender


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


Выражаю благодарность VVA, очень помог данный макрос!
KaznaSpender вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как добавить вершины в полилинии в тех местах, где на не находятся блоки?

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Есть ли возможность вставить в вершины полилинии блоки? bimari AutoCAD 29 04.06.2021 14:49
Подскажите как добавить точьку/вершину к полилинии Serjik7 AutoCAD 21 23.10.2014 15:19
Как вставить блоки по направлению полилинии (VBA) dorofei Программирование 5 27.11.2006 06:50
Обрезка полилинии или отрезков в местах пересечения блоков Джек Программирование 7 17.09.2006 22:11
Как удалить вершины полилинии!!! игорёк Программирование 6 17.04.2006 07:29