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

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

Как соединить начало и конец полилинии или сплайна в готовой фигуре?

Ответ
Поиск в этой теме
Непрочитано 31.01.2016, 08:24 #1
Как соединить начало и конец полилинии или сплайна в готовой фигуре?
Godik
 
Регистрация: 23.12.2015
Сообщений: 13

Как соединить начало и конец линии (полилинии или сплайна) в готовой фигуре, если они не пересекаются или наоборот пересекаются. Нужна команда, чтоб объединять сразу несколько фигур, тк фигур очень много. Это нужно для того чтоб фреза по камню начинала в одной точке и заканчивала в этой же самой.

----- добавлено через ~26 мин. -----
небольшая поправка: нужна команда, чтоб объединять начала и концы у нескольких фигур одновременно.
Просмотров: 3331
 
Непрочитано 31.01.2016, 11:08
#2
VoVoRoNaLe

Конструктор
 
Регистрация: 29.10.2007
Сообщений: 157


Щодо полілінії то в властивостях поле Closed -> Yes.
Сплайн можна перевести в полілінію. З пам'яті не скажу чи в сплайні є властивість Closed.
google translate
По полилинии то в свойствах поле Closed -> Yes.
Сплайн можно перевести в полилинию. Из памяти не скажу есть ли в сплайне есть свойство Closed.
VoVoRoNaLe вне форума  
 
Непрочитано 31.01.2016, 11:33
#3
Сергей812


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


Цитата:
Сообщение от Godik Посмотреть сообщение
небольшая поправка: нужна команда, чтоб объединять начала и концы у нескольких фигур одновременно.
может, все таки объединение начала и конца каждой фигуры у группы фигур? Это все решается тем же лиспом - поэтому думайте и приходите со своими наработками в эту ветку форума или, если не хотите тратить время - то в эту ветку форума.
Сергей812 вне форума  
 
Непрочитано 31.01.2016, 15:46
#4
kp+

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


Для полилиний все очень просто - выделить все нужные и выставить свойство "замкнуто" в панели свойств.
Цитата:
Сообщение от VoVoRoNaLe Посмотреть сообщение
Из памяти не скажу есть ли в сплайне есть свойство Closed.
Есть, но не доступно для редактирования из панели свойств, только командой _splinedit. К сожалению, она не поддерживает одновременное редактирование нескольких сплайнов сразу.
Можно предложить такой код (без проверок и прочих атрибутов высокого штиля):
Код:
[Выделить все]
 
(defun c:closeSplines ( / ss spline_list)
  (vla-startUndoMark (vla-get-ActiveDocument (vlax-get-acad-object)))
  (setq ss (ssget '((0 . "SPLINE"))));выбор сплайнов

(if ss
	(PROGN
	 (setq spline_list (ssnamex ss));преобразование набора в список
	 (setq ss nil)
	 (setq spline_list (mapcar 'cadr spline_list));выкидывание номеров набора из списка
	 (setq spline_list (vl-remove-if-not '(lambda (x) (eq (type x) 'ENAME)) spline_list))
	 (foreach x spline_list
	    (vl-cmdf "_splinedit" x "_c" "")
	 )
	)
)
(vla-endUndoMark (vla-get-ActiveDocument (vlax-get-acad-object)))  
) 
kp+ вне форума  
 
Непрочитано 31.01.2016, 17:34
#5
Кулик Алексей aka kpblc
Moderator

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


Можно и без привлечения команд:
Код:
[Выделить все]
 (vl-load-com)

(defun c:close-splines (/ adoc selset)

  (if (= (type (setq selset (vl-catch-all-apply
                              (function
                                (lambda ()
                                  (ssget "_:L" '((0 . "SPLINE")))
                                  ) ;_ end of lambda
                                ) ;_ end of function
                              ) ;_ end of vl-catch-all-apply
                     ) ;_ end of setq
               ) ;_ end of type
         'pickset
         ) ;_ end of =
    (progn
      (vla-startundomark (setq adoc (vla-get-activedocument (vlax-get-acad-object))))
      (foreach ent (mapcar (function vlax-ename->vla-object)
                           ((lambda (/ tab item)
                              (repeat (setq tab  nil
                                            item (sslength selset)
                                            ) ;_ end setq
                                (setq tab (cons (ssname selset (setq item (1- item))) tab))
                                ) ;_ end of repeat
                              tab
                              ) ;_ end of lambda
                            )
                           ) ;_ end of mapcar
        (if (equal (vla-get-closed ent) :vlax-false)
          (foreach pr '("closed" "closed2")
            (vl-catch-all-apply
              (function
                (lambda ()
                  (vlax-put-property ent pr :vlax-true)
                  ) ;_ end of lambda
                ) ;_ end of function
              ) ;_ end of vl-catch-all-apply
            ) ;_ end of foreach
          ) ;_ end of if
        ) ;_ end of foreach
      (vla-endundomark adoc)
      ) ;_ end of progn
    ) ;_ end of if
  (princ)
  ) ;_ end of defun
Код особо не тестировал.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 31.01.2016, 18:07
#6
kp+

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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Код особо не тестировал.
Не работает Ошибки не вываливаются, т.к. все "отловлены", но свое дело код не делает
Видимо потому, что для сплайнов (только для сплайнов!) свойство closed по неведомым причинам сделано только для чтения. И ни vla-put-closed, ни (vlax-put-property ent "closed" :vlax-true) не помогут Только командные методы или перекомпоновка вершин сплайна, только хардкор!

Добавлено:

И кстати, что за свойство "closed2"? Недокументированное или привет из новейших версий? (сам застрял в 2010)

Последний раз редактировалось kp+, 31.01.2016 в 18:44.
kp+ вне форума  
 
Непрочитано 31.01.2016, 20:42
#7
Кулик Алексей aka kpblc
Moderator

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


Код писал для 2016 версии, в ней сработало. Я ж говорю, что полного тестирования не проводил.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 01.02.2016, 08:04
#8
Хмурый


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


в 2014-ом в свойствах для всех сплайнов одновременно можно поменять незамкнутость на замкнутость
Миниатюры
Нажмите на изображение для увеличения
Название: Безымянный.jpg
Просмотров: 20
Размер:	204.5 Кб
ID:	164539  Нажмите на изображение для увеличения
Название: Безымянный1.jpg
Просмотров: 19
Размер:	134.5 Кб
ID:	164540  
Хмурый вне форума  
 
Автор темы   Непрочитано 02.02.2016, 15:34
#9
Godik


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


всем спасибо, выручили) еще мне вариант подсказали, сначала сплайн переводим в полилинию ч/з ПОЛРЕД, а потом также через ПОЛРЕД замкнуть концы.

----- добавлено через ~3 ч. -----
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
может, все таки объединение начала и конца каждой фигуры у группы фигур? Это все решается тем же лиспом - поэтому думайте и приходите со своими наработками в эту ветку форума или, если не хотите тратить время - то в эту ветку форума.
да, все таки у группы фигур, вы правы
Godik вне форума  
 
Непрочитано 02.02.2016, 19:13
#10
kp+

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


Цитата:
Сообщение от Godik Посмотреть сообщение
сначала сплайн переводим в полилинию ч/з ПОЛРЕД
не знаю, что у Вас за фигуры, но может получиться с заметными искажениями.
kp+ вне форума  
 
Непрочитано 03.02.2016, 07:53
#11
Хмурый


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


группы разъединяются после нажатия Ctrl+H (при условии, что клавиши не переопределены), и воссоздаются при следующем нажатии.
PS изменяем значение переменной PICKSTYLE

Последний раз редактировалось Хмурый, 03.02.2016 в 08:14.
Хмурый вне форума  
 
Непрочитано 03.02.2016, 13:13
#12
Кулик Алексей aka kpblc
Moderator

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


Небольшое уточнение: группы не разъединяются, меняется режим выбора объектов, входящих в группу.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 03.02.2016, 15:23
#13
Хмурый


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Небольшое уточнение: группы не разъединяются, меняется режим выбора объектов, входящих в группу.
Да. Это-то я и имел в виду. Написал, что разъединяются, а не расчленяются(разбиваются)
Хмурый вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Как соединить начало и конец полилинии или сплайна в готовой фигуре?

Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Линии электрических соединений Shoorup Программирование 23 07.02.2015 15:13
Как поменять местами начало и конец полилинии? reddiska Программирование 2 30.10.2012 17:28
LISP. Как найти точку пересечения полилинии и сплайна или другой полилинии? LastGraff LISP 11 09.09.2011 13:23
Печать под блоком Des501 AutoCAD 20 13.10.2010 15:59
как часто вы ходите в театр? Jоhnny Разное 61 15.06.2009 13:19