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

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

Замыкание в контур двух полилиний

Ответ
Поиск в этой теме
Непрочитано 30.11.2014, 09:11 #1
Замыкание в контур двух полилиний
Neznayka
 
Регистрация: 24.03.2005
Сообщений: 320

Есть полилиния, есть вторая полилиния полученная от первой командой подобие. Необходимо соединить концы этих 2 плиний, и получить замкнутую фигуру для последующей штриховки
Просмотров: 4238
 
Непрочитано 30.11.2014, 12:39
#2
Кулик Алексей aka kpblc
Moderator

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


Ну так соединяй, в чем проблема?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 30.11.2014, 13:33
#3
off

геодезист
 
Регистрация: 11.11.2006
Ростов-на-Дону
Сообщений: 95
<phrase 1= Отправить сообщение для off с помощью Skype™


Видимо Neznayka хочет чтобы это делалось автоматом - нажал на линию, указал сторону смещения и получил замкнутую полилинию. Вручную это сделать просто когда полилиния короткая, а если длинная то приходится зуммировать туда-сюда. В общем это тех.задание ))
off вне форума  
 
Автор темы   Непрочитано 30.11.2014, 13:53
#4
Neznayka


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


Цитата:
В общем это тех.задание ))
Тех задание это слишком борзо, просто хотелось бы услышать совет, может у кого такая проблема встречалась. А линии действительно длиной многие метры.
Neznayka вне форума  
 
Непрочитано 30.11.2014, 14:37
#5
Хмурый


 
Регистрация: 29.10.2004
СПб
Сообщений: 16,379


off, я уже про это говорил, что зуммирование колесом уменьшает скорость работы. Некоторые из заслуженных форумчан были несогласны с этим.
Для быстрого зуммирования следует исследовать опции команды _zoom , особенно _zoom _Window
Хмурый вне форума  
 
Непрочитано 30.11.2014, 15:06
#6
off

геодезист
 
Регистрация: 11.11.2006
Ростов-на-Дону
Сообщений: 95
<phrase 1= Отправить сообщение для off с помощью Skype™


Цитата:
Сообщение от Хмурый Посмотреть сообщение
off, я уже про это говорил, что зуммирование колесом уменьшает скорость работы. Некоторые из заслуженных форумчан были несогласны с этим.
Для быстрого зуммирования следует исследовать опции команды _zoom , особенно _zoom _Window
Спасибо за наводку. Исследовал и нашел там подходящий для данной ситуации вариант Object. Масштабирует экран таким образом, что указанный объект умещается на нем целиком. Это позволит быстрее найти концы полилиний.
off вне форума  
 
Непрочитано 30.11.2014, 18:59
#7
skkkk


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


Цитата:
Сообщение от Хмурый Посмотреть сообщение
я уже про это говорил, что зуммирование колесом уменьшает скорость работы. Некоторые из заслуженных форумчан были несогласны с этим.
Очень интересно... А где это обсуждалось?

Цитата:
Сообщение от off Посмотреть сообщение
Это позволит быстрее найти концы полилиний.
Быстрее, чем выделить эту полилинию и пару раз крутануть колесо? Хм...
skkkk вне форума  
 
Непрочитано 30.11.2014, 20:19
#8
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Колесо заржавело и не крутится.
Profan вне форума  
 
Автор темы   Непрочитано 30.11.2014, 21:26
#9
Neznayka


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


хотелось бы даже команду похожую на ФАСКА, но которая умеет соединять концы параллельных линий
Neznayka вне форума  
 
Непрочитано 30.11.2014, 21:35
#10
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от Neznayka Посмотреть сообщение
умеет соединять концы параллельных линий
а) в каком месте их соединять?
б) насколько я знаю, штатных вариантов AutoCAD не представляет.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 30.11.2014, 22:56
#11
Neznayka


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


а) в каком месте их соединять?
в концах
б) насколько я знаю, штатных вариантов AutoCAD не представляет.
до последнего теплилась надежда, что эта возможность откроется в моих пробелах по знанию автокада
Neznayka вне форума  
 
Непрочитано 30.11.2014, 23:18
#12
off

геодезист
 
Регистрация: 11.11.2006
Ростов-на-Дону
Сообщений: 95
<phrase 1= Отправить сообщение для off с помощью Skype™


Нужен лисп, который определяет координаты начала и конца начальной полилинии, то же самое для полилинии, образуемой сдвигом. Далее рисуются полилинии, соединяющие данные точки. Потом все объединяется. Жаль мой текст интерпретатор не понимает, а учить лисп нет времени.
off вне форума  
 
Непрочитано 01.12.2014, 00:24
#13
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Цитата:
Сообщение от Neznayka Посмотреть сообщение
хотелось бы даже команду похожую на ФАСКА, но которая умеет соединять концы параллельных линий
А в школе учили, что параллельные прямые не пересекаются...

Насколько понял, есть исходная полилиния, есть копия с нее. Сдвиг копии не обязательно ортогонален относительно исходной полилинии. Нужно дорисовать между концами два отрезка-полилинии и преобразовать в замкнутую полилинию?

Это задача программная скорее - выделить две полилинии, получить их вершины. Скорее всего (надо проверить) направление у исходной и полилинии-копии совпадает, поэтому формируете массив/список из координат оригинала, потом координат копии в обратном порядке (если направления совпадают), и рисуете новую замкнутую полилинию. В случае успешной операции - удаляете эти две полилинии исходные. Типа такого алгоритма.
Сергей812 вне форума  
 
Непрочитано 01.12.2014, 08:26
1 | #14
VVA

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


Цитата:
Сообщение от off Посмотреть сообщение
Жаль мой текст интерпретатор не понимает, а учить лисп нет времени.
Держи. Особо не тестировал
Добавлено 2014-12-02
Исправил описку. Баг проявил бы себя в 2015 Автокаде при PEDITACCEPT=0
Добавил зуммирование по объекту
Код:
[Выделить все]
(defun C:4OFF ( / pl1 pl2)
  ;;;Объединение 2 полилиний
  (vl-load-com)
(setq pl1 (mip:entsel "\nВыберите 1-ю полилинию: " '("LWPOLYLINE" "POLYLINE") nil))
(redraw pl1 3) 
(setq pl2 (mip:entsel "\nВыберите 2-ю полилинию: " '("LWPOLYLINE" "POLYLINE") (list pl1)))
((lambda (p1s p1e p2s p2e / p1 p2 p3 p4)
   (if (< (distance p1s p2s)(distance p1s p2e))
     (setq p1 p1s p2 p2s)
     (setq p1 p1s p2 p2e)
     )
   (if (< (distance p1e p2e)(distance p1e p2s))
     (setq p3 p1e p4 p2e)
     (setq p3 p1e p4 p2s)
     )
   (setq e1 (Line p1 p2))
   (setq e2 (Line p3 p4))
(if (and (getvar "PEDITACCEPT") (= (getvar "PEDITACCEPT") 1))
  (if command-s
    (command-s "_pedit" "_Multiple" pl1 pl2 e1 e2 "" "_Join" 0 "")
    (vl-cmdf "_pedit" "_Multiple" pl1 pl2 e1 e2 "" "_Join" 0 "")
    )
  (if command-s
    (command-s "_pedit" "_Multiple" pl1 pl2 e1 e2 "" "_Y" "_Join" 0 "")
    (vl-cmdf "_pedit" "_Multiple" pl1 pl2 e1 e2 "" "_Y" "_Join" 0 "")
    )
  )
   (if (setq e1 (car (vl-remove-if '(lambda(x)(null(entget x))) (list pl1 pl2 e1 e2 (entlast)))))
   (if command-s
    (command-s "_ZOOM" "_O" e1 "")
    (vl-cmdf "_ZOOM" "_O" e1 "")
    )
     )
   (sssetfirst (ssadd (entlast))(ssadd (entlast)))
   )
  (vlax-curve-getStartPoint pl1)
  (vlax-curve-getEndPoint pl1)
  (vlax-curve-getStartPoint pl2)
  (vlax-curve-getEndPoint pl2)
  )
  (princ)
)
(defun Line (p1 p2)
  (entmakex (list (cons 0 "LINE")
                  (cons 10 p1)
                  (cons 11 p2))))
(defun mip:entsel (promt filter entlist / key n newentlist ent_point promt)

;;;Функция mip:entsel
;;;Единичный выбор объекта, замена функции entsel
;;;Возвращает entity name выбранного примитива или nil, точку указания запоминает в переменной LASTPOINT
;;;Параметры:
;;;promt - предложение выбрать объект (string)
;;;filter - фильтр объектов для выбора вида '("LINE" "LWPOLYLINE")
;;;entlist - список примитивов которые не надо выбирать (либо список entity name, либо PICKSET)
;;;
;;;Примеры:
;;;(mip:entsel "\nВыберите объекты" '("LINE" "LWPOLYLINE") nil)
;;;(mip:entsel "\nВыберите объекты" nil nil)
;;;(setq aa nil) (mip:entsel "\nВыберите объекты" '("LINE" "LWPOLYLINE") (while (setq a (car (entsel))) (setq aa (append aa (list a)))))
;;;(mip:entsel "\nВыберите объекты" '("LINE" "LWPOLYLINE") (ssget))
  (setq key T n 0 newentlist nil)
  (if (eq (type entlist) 'PICKSET)
    (progn
    	(while (setq a (ssname entlist n)) (setq newentlist (append newentlist (list a)) n (1+ n)))
    	(setq entlist newentlist)
    );progn
   );if
    (while key
    	(if (or (setq ent_point (entsel promt)) (= (getvar "ERRNO") 7))
	  	(if (or (eq (type ent_point) 'LIST) (not ent_point))
		  (if ent_point
		    (if (member (setq ent (car ent_point)) entlist)
		      (princ "\nПримитив уже выбран")
		      (if filter
			      (if (not (member (cdr (assoc 0 (entget ent))) filter))
				(progn (setq str "\nНе верный выбор, выберите: ")
				  (princ (substr (setq str (foreach n filter (setq str (strcat str n ", ")))) 1 (- (strlen str) 2)))
				);progn
				(setq key nil)
			      );if
				(setq key nil)
			);if
		    );if
		    (setq key T)
		  );if
	    	(setq key nil)
	    );if
	  (setq key nil)
      	);if
     );while
  (if (eq (type ent_point) 'LIST)
    (progn (setvar "LASTPOINT" (cadr ent_point)) ent)
    ent_point
  );if
)
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 02.12.2014 в 08:45.
VVA вне форума  
 
Непрочитано 01.12.2014, 08:51
#15
Deniska_che

Генпланист
 
Регистрация: 19.04.2013
St. Petersburg
Сообщений: 154


спасибо, работает))))

----- добавлено через ~18 мин. -----
Вопрос! А аналог этого лиспа только для штриховок можно где-то найти?
типа, запустил лисп - выбрал штриховки - лисп создал их контуры - удалил старые штриховки - создал новую общую штриховку - удалил контур.
Deniska_che вне форума  
 
Непрочитано 01.12.2014, 11:34
#16
VVA

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


Цитата:
Сообщение от Deniska_che Посмотреть сообщение
выбрал штриховки - лисп создал их контуры
Восстановление контура штриховки
HATCHB.LSP Recreates hatch boundary by selecting a hatch
Как преобразовать штриховку в полигон?
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 02.12.2014, 08:00
#17
Neznayka


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


VVA, огромное спс
Neznayka вне форума  
 
Непрочитано 02.12.2014, 08:46
#18
VVA

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


Исправил 1 баг в #14 + добавил зуммирование по объекту
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Замыкание в контур двух полилиний



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как получить точки пересечения двух полилиний? Mozgunov Программирование 42 03.09.2023 09:38
Соединение двух полилиний Тигра AutoCAD 55 29.11.2022 04:35
Точка пересечения двух полилиний, без учета координаты z Calibration AutoCAD 5 25.05.2013 16:11
Объединение двух 3D полилиний Рyslan AutoCAD 12 22.05.2008 13:14
Как создать и привязаться к линии пересечения двух граней 3Д тел? BM60 AutoCAD 3 29.02.2008 23:13