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

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

Рисование полилинии по другому объекту с привязкой

Ответ
Поиск в этой теме
Непрочитано 26.03.2010, 09:48
Рисование полилинии по другому объекту с привязкой
jagr
 
Регистрация: 26.03.2010
Сообщений: 8

Здравствуйте!

Давно мучает вопрос: существует ли в AutoCAD 2008 (либо в другой версии) возможность рисования части полилинии по существующему объекту (например, по другой полилинии) с точным повторением контура существующего объекта (с привязкой к каждой точке), без указания каждой точки существующего объекта.

Работал с Панораммой и MapInfo, там эта функция реализована, в AutoCAD так найти и не смог. Для иллюстрации приведу пример того, как это реализовано в MapInfo: рисую линию 1, дохожу до точки на линии 2, привязываюсь к точке 2.1 на линии 2, зажимаю шифт и указываю точку 2.2 на линии 2 (между точками 2.1 и 2.2 может быть множество вершин линии 2), программа рисует мне линию 1 по линии 2 точно повторяя ее контур (все это время функция рисовки линии не прерывается). В Панорамме реализовано иначе, но надеюсь смысл вопроса уже понятен.

С уважением.

Последний раз редактировалось jagr, 26.03.2010 в 10:56.
Просмотров: 14670
 
Непрочитано 26.03.2010, 15:28
#21
Olga_@@@


 
Регистрация: 14.03.2008
Екатеринбург
Сообщений: 678
<phrase 1= Отправить сообщение для Olga_@@@ с помощью Skype™


АлексЮстасу, да, есть.
Disney, идея отличная, полезный был бы инструмент. Тоже попробовала, но у меня этот код не всегда срабатывает, и на замкнутых контурах выдает непредсказуемые результаты.
Olga_@@@ вне форума  
 
Непрочитано 26.03.2010, 16:07
#22
АлексЮстасу

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


Цитата:
Сообщение от Olga_@@@ Посмотреть сообщение
АлексЮстасу, да, есть.
Disney, идея отличная, полезный был бы инструмент. Тоже попробовала, но у меня этот код не всегда срабатывает, и на замкнутых контурах выдает непредсказуемые результаты.
Уж давно догадался, что у Вас Autocad Map 3D еще как есть
Имел в виду других участников.

У меня программка Disney просто пока никак не срабатывает. Да и хотелось узнать, что она, собственно, делает, и кто такие "Получатель"-"Даватель"?
АлексЮстасу вне форума  
 
Непрочитано 26.03.2010, 16:27
#23
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,826
<phrase 1=


Disney, Вот скажи мне в чем разница сего творения и работы стандартной команды _pline????
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Непрочитано 26.03.2010, 16:56
#24
АлексЮстасу

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


Цитата:
Сообщение от Olga_@@@ Посмотреть сообщение
Тем более, что предварительная чистка карты в значительной степени автоматизированна.
Все-таки решил добавить в "Баги и предложения" тему про Drawing Cleanup. Чтобы у всех пользователей базового Autocad была возможность пользоваться этим мощным инструментом.

Объясните, как этим лиспом пользоваться - у меня вообще ничего не получается.
АлексЮстасу вне форума  
 
Автор темы   Непрочитано 26.03.2010, 17:20
#25
jagr


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


Disney, решение выглядит очень интересно. К сожелению, пока нет возможности проверить работу лиспа; работает ли он для нескольких полилиний? По какому принципу происходит изменение полилинии, почему часть полилинии изменилась, а часть нет?

АлексЮстасу, я не картограф, просто был опыт работы в некоторых программах.
jagr вне форума  
 
Непрочитано 26.03.2010, 18:00
#26
АлексЮстасу

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


jagr, вариант с использованием штриховки не оптимален? Для замкнутых областей, конечно.
АлексЮстасу вне форума  
 
Автор темы   Непрочитано 26.03.2010, 18:05
#27
jagr


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


АлексЮстасу, достаточно много приходится работать с заливками и для сложных замкнутых областей делать заливки занятие не из приятных, к сожалению =(
jagr вне форума  
 
Непрочитано 26.03.2010, 18:12
#28
АлексЮстасу

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


Цитата:
Сообщение от jagr Посмотреть сообщение
АлексЮстасу, достаточно много приходится работать с заливками и для сложных замкнутых областей делать заливки занятие не из приятных, к сожалению =(
Это я знаю. Но при трассировке линий все равно их нужно обойти все-каждую. А в режиме указания всех линий границы области штриховки работают надежно.
АлексЮстасу вне форума  
 
Непрочитано 26.03.2010, 18:58
1 | #29
Disney

Геодезист
 
Регистрация: 12.03.2009
Сибирь (где медведи по улицам ходят)
Сообщений: 860
Отправить сообщение для Disney с помощью Skype™


Цитата:
Сообщение от АлексЮстасу Посмотреть сообщение
Disney - "Получатель"-"Даватель" - это что?
Акцептор и Донор тебя устроит?

Цитата:
Сообщение от Olga_@@@ Посмотреть сообщение
Disney, идея отличная, полезный был бы инструмент. Тоже попробовала, но у меня этот код не всегда срабатывает, и на замкнутых контурах выдает непредсказуемые результаты.
Немного подправил, теперь должен всегда срабатывать, а с замкнутыми ни как не угадаешь, толи как по не замкнутой пройти, толи через начально-конечную

Цитата:
Сообщение от zenon Посмотреть сообщение
Disney, Вот скажи мне в чем разница сего творения и работы стандартной команды _pline????

[IMG]http://s002.***********/i197/1003/8f/3d1224058e68.gif[/IMG]

Код:
[Выделить все]
(defun c:test (/ first second F_v a b flag)
  (setq	first  (entget
		 (geo_vibor "\nПолилиния акцептор: " "LWPOLYLINE" nil)
	       )
	second (entget (geo_vibor "\nПолилиния донор: " "LWPOLYLINE" nil))
	F_v    (vl-remove-if-not '(lambda (x) (= (car x) 10)) first)
	flag   t
  )
  (if (not (eq (cdar first) (cdar second)))
    (progn
      (repeat (length F_v)
	(if (and (setq a (vl-position (car f_v) second))
		 (setq b (vl-position (cadr f_v) second))
	    )
	  (setq
	    first
	     (if (< a b)
	       (append
		 (trim_list first 0 (vl-position (car f_v) first))
		 (trim_list second a b)
		 (trim_list first
			    (vl-position (cadr f_v) first)
			    (length first)
		 )
	       )
	       (append
		 (trim_list first
			    0
			    (+ (vl-position (car f_v) first) 5)
		 )
		 (mapcar '(lambda (i)
			    (if	(= (car i) 42)
			      (cons 42 (* -1 (cdr i)))
			      i
			    )
			  )
			 (reverse (trim_list second a b))
		 )
		 (trim_list first
			    (+ (vl-position (cadr f_v) first) 5)
			    (length first)
		 )
	       )
	     )
	    flag nil
	  )
	)
	(setq f_v (cdr f_v))
      )
      (entmod
	(subst
	  (cons	90
		(length
		  (vl-remove-if-not '(lambda (x) (= (car x) 10)) first)
		)
	  )
	  (assoc 90 first)
	  first
	)
      )
      (if flag
	(alert
	  "\nНе найдено ни одних, двух \nпоследовательных вершин акцептора \nсовпадающих с вершинами донора"
	)
      )
    )
  )
)

(defun trim_list (spis a b / c x)
  (setq c (- (min a b) 1))
  (reverse (repeat (- (max a b) c 1)
	     (setq x (cons (nth (setq c (1+ c)) spis) x))
	   )
  )
)


(defun geo_vibor (zap ;_Запрос 
		  tip ;_Тип запрашиваемых примитивов 
		  enter ;_Выход при пустом вводе 
		  / flag name)
  (setq Flag2 t)
  (setvar "ERRNO" 0)
  (while Flag2
    (cond
      ((and
	 (setq name
		(car (entsel zap))
	 )
	 (wcmatch (cdr (assoc 0 (entget name))) tip)
       )
       (setq Flag2 nil
	     name name
       )
      )
      ((and (= (getvar "ERRNO") 52) enter)
       (setq Flag2 nil)
      )
      (name (princ (strcat "\nВыбранный объект не " tip)))
      (t (princ "\nМимо"))
    )
  )
)
__________________
Почему все вдруг становятся умными, когда уже не надо?
Disney вне форума  
 
Непрочитано 26.03.2010, 19:20
#30
Olga_@@@


 
Регистрация: 14.03.2008
Екатеринбург
Сообщений: 678
<phrase 1= Отправить сообщение для Olga_@@@ с помощью Skype™


Disney, спасибо огромное получилось
Olga_@@@ вне форума  
 
Непрочитано 26.03.2010, 21:28
#31
АлексЮстасу

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


Цитата:
Сообщение от Disney Посмотреть сообщение
Акцептор и Донор тебя устроит?
Для непонятливых и криворуких можно?
Что нужно иметь до начала запуска проги? Какова последовательность действий? Что на выходе?

Правильно понимаю, что необходимо иметь либо область ограниченную несколькими элементами, либо цепочку из соединенных-пересекающихся элементов?
И нужно создать одну замкнутую полининию, совпадающую со всеми вершинами ограничивающих область элементов? Либо одну полилинию, повторяющую все вершины цепочки элементов?
Я думал, что нужно просто указать все эти элементы, и на выходе получить эту самую единую полилинию.
АлексЮстасу вне форума  
 
Непрочитано 27.03.2010, 15:36
#32
Disney

Геодезист
 
Регистрация: 12.03.2009
Сибирь (где медведи по улицам ходят)
Сообщений: 860
Отправить сообщение для Disney с помощью Skype™


Цитата:
Сообщение от Olga_@@@ Посмотреть сообщение
на замкнутых контурах выдает непредсказуемые результаты.
[IMG]http://i021.***********/1003/d7/4b20dbbe61cc.gif[/IMG]

Цитата:
Сообщение от jagr Посмотреть сообщение
работает ли он для нескольких полилиний?
[IMG]http://i080.***********/1003/cd/c61bca9dab97.gif[/IMG]

Цитата:
Сообщение от jagr Посмотреть сообщение
По какому принципу происходит изменение полилинии,
Как по какому? по тобой описанному, только не в процессе построения полилинии, а уже после.
Цитата:
Сообщение от jagr Посмотреть сообщение
почему часть полилинии изменилась, а часть нет?
Изменяется та часть полилинии, 2(3) последовательные вершины которой совпадают с вершинами донора.
АлексЮстасу, если ещё вопросы остались спрашивай
Вложения
Тип файла: lsp Bypass_Polyline.LSP (3.8 Кб, 143 просмотров)
__________________
Почему все вдруг становятся умными, когда уже не надо?
Disney вне форума  
 
Непрочитано 27.03.2010, 17:53
#33
АлексЮстасу

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


Цитата:
Сообщение от Disney Посмотреть сообщение
Изменяется та часть полилинии, 2(3) последовательные вершины которой совпадают с вершинами донора.
АлексЮстасу, если ещё вопросы остались спрашивай
У меня получилось, но пока только с одной полилинией. У меня прогресс

По-моему, в изложенной jagr задаче цель довести полилинию до какой-то абстрактной точки на другом элементе - совсем не главная. Почти всегда это либо конец, либо место пересечения с другим элементом.

Все-таки: задача у jagr заключается в получении новой полилинии, точно повторяющей форму цепочки полилиний, дуг и т.п. (Новую полилинию, которой хотелось бы все обвести, тоже можно рассматривать как существующую). Соответственно, чтобы получить эту общую полининию, достаточно указать последовательно все элементы цепочки, которые хотелось бы обвести (начиная с этой "новой"). Так можно сделать?
Т.е. человек сначала рисует к существующему набору примыкающих/перескающихся элементов нужное число примыкающих линий, потом вызвает Ваш лисп (предлагаю назвать его ближе к сути, например "trasser"), и указывает нужные элементы. На выходе - новая полилиния.

Последний раз редактировалось АлексЮстасу, 27.03.2010 в 18:17.
АлексЮстасу вне форума  
 
Непрочитано 27.03.2010, 18:57
#34
Disney

Геодезист
 
Регистрация: 12.03.2009
Сибирь (где медведи по улицам ходят)
Сообщений: 860
Отправить сообщение для Disney с помощью Skype™


Цитата:
Сообщение от АлексЮстасу Посмотреть сообщение
точно повторяющей форму цепочки полилиний, дуг и т.п..
Для этого уже есть решения:
  1. [IMG]http://i074.***********/1003/84/013ecfaa1fa9.gif[/IMG]
    из Pltools
  2. Метод интеллектуального преобразования объектов в полилинии.
    из TotalPurge
Цитата:
Сообщение от АлексЮстасу Посмотреть сообщение
Т.е. человек сначала рисует к существующему набору примыкающих/перескающихся элементов нужное число примыкающих линий, и указывает нужные элементы. На выходе - новая полилиния.
В простом варианте если контур в итоге замкнут, то есть в AutoCADе команда
[IMG]http://i027.***********/1003/dd/687104bf8105.gif[/IMG]

В сложном случаи, уже много желающих... Определение комнаты, определение границ области (AutoCAD & lisp)
__________________
Почему все вдруг становятся умными, когда уже не надо?
Disney вне форума  
 
Непрочитано 28.03.2010, 03:39
#35
АлексЮстасу

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


Цитата:
Сообщение от Disney Посмотреть сообщение
Для этого уже есть решения:
  1. команда PL-CSE
  2. В простом варианте если контур в итоге замкнут, то есть в AutoCADе команда "_BOUNDARY (Контур)"
Увы, но без Ваших трудов тут не обойтись:

1. PL-CSE - замечательная. Только она не делает две искомых вещи: не сохраняет старые линии (а задача была - новую добавить), и не обрабатывает фрагменты между пересечениями - а только совпадающие концами элементы. И результат ее работы может быть малопредсказуем, если к полилиниям цепочки примыкают другие элементы.

2. С TotalPurge примерно та же история.

3. _BOUNDARY - очень нужная и очень востребованная команда. Иногда даже работает. Но про плохую дееспособность _BOUNDARY на разных форумах говорится уже лет десять - не меньше. См. и мои свежие пять копеек: http://forum.dwg.ru/showthread.php?t=49256

Может, кстати, подскажете: в архиве Pltools не оказалось pltools.cui -- "меню для подгрузки в AutoCAD с 2006 включительно". А хотелось бы поставить нормально - с меню к моему 2008.

Последний раз редактировалось АлексЮстасу, 28.03.2010 в 05:02.
АлексЮстасу вне форума  
 
Непрочитано 28.03.2010, 20:21
#36
Кулик Алексей aka kpblc
Moderator

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


По-моему, в pltools был включен файл *.mnu. Загружается в любую версию AutoCAD через команду _.menuload
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 28.03.2010, 22:28
#37
АлексЮстасу

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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
По-моему, в pltools был включен файл *.mnu. Загружается в любую версию AutoCAD через команду _.menuload
Спасибо, получилось.
Еще с большим удовольствием пробежался по возможностям Pltools - до решения нашей задачи просто рукой подать
АлексЮстасу вне форума  
 
Непрочитано 03.05.2021, 17:23
2 | #38
АлексЮстасу

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


Цитата:
Сообщение от jagr Посмотреть сообщение
Давно мучает вопрос: существует ли в AutoCAD 2008 (либо в другой версии) возможность рисования части полилинии по существующему объекту (например, по другой полилинии) с точным повторением контура существующего объекта (с привязкой к каждой точке), без указания каждой точки существующего объекта.
Через 11 лет и три дня появился такой лисп от француза - fsg.lsp.
Чертим полилинию или 3дполилинию, вводим прозрачную команду 'fsg (с апострофом), указываем первую и вторую точку на существующей полилинии, и чертим свою полилинию дальше. Получается новая полилиния, примыкающая к существующей, и полностью повторяющая часть существующей - от ближайшей вершины к первой указанной точке до ближайшей вершины ко второй указанной точке.
При черчении следующих полилиний команда будет доступна в списке на правой кнопке в Последний ввод (Recent input).
Вложения
Тип файла: lsp fsg.lsp (2.7 Кб, 16 просмотров)
__________________
количество моих сообщений не говорит о знании Автокада

Последний раз редактировалось АлексЮстасу, 06.05.2021 в 18:14.
АлексЮстасу вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Рисование полилинии по другому объекту с привязкой

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

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