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

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

Разделение полилинии

Ответ
Поиск в этой теме
Непрочитано 08.02.2010, 12:40
Разделение полилинии
ALEXGVOZ
 
Регистрация: 23.08.2008
Сообщений: 38

У меня есть полилиния которую надо поделить на 2 полилинии причем первая полилиния должна иметь заданую длину подскажите есть такая команда в автокаде 2007? если нет то подскажите как это сделать
Просмотров: 11720
 
Непрочитано 08.02.2010, 21:14
#21
Кулик Алексей aka kpblc
Moderator

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


У меня ощущение, что неверно срабатывают vlax-curve-* функции. Или русификатор хамит.
> zenon: У меня единственный момент, где могла бы быть критичной локализация - это использование командных методов (см. vl-cmdf), а там все нормально.
LSN, а если сделать полилинию 104.65, а "делить" на расстоянии, например, 6.32? Чего получится в результате? Я спрашиваю потому, что у меня pl-tools не установлены (не требуются как-то в повседневной жизни...)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 09.02.2010, 08:42
#22
Disney

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


Мне всё же кажется причина в
Цитата:
Сообщение от ALEXGVOZ Посмотреть сообщение
_none
Режим не определен для заданной точки
Если отключить привязку не через "_none" а через OSMODE?
Или разрывать не командно,
  • найти t1-точку разрыва, допустим лежащие между 5 и 6 вершиной полилинии,
  • создать копии полилинии
  • в 1-ой полилинии удалить все вершины после 5 и добавить в конце t1
  • во 2-ой полилинии удалить все до 6 и добавить в начале t1
__________________
Почему все вдруг становятся умными, когда уже не надо?

Последний раз редактировалось Disney, 09.02.2010 в 08:50.
Disney вне форума  
 
Непрочитано 09.02.2010, 09:52
#23
LSN


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


Кулик Алексей aka kpblc Получается 16 частей по 6.32 и один 3.53.
Кстати разрыв в этом случае не происходит, эта команда просто разбивает полилинию на n частей.
LSN вне форума  
 
Непрочитано 09.02.2010, 13:32
#24
Кулик Алексей aka kpblc
Moderator

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


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

(defun c:break-at-dist (/          adoc       *error*    sysvar_lst
                        ent        pt         dist       start
                        end        len_pt_start          len_pt_end
                        break_point
                        )

  (defun *error* (msg)
    (foreach item sysvar_lst
      (setvar (car item) (cdr item))
      ) ;_ end of foreach
    (vla-endundomark adoc)
    (princ msg)
    (princ)
    ) ;_ end of defun

  (vla-startundomark
    (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
    ) ;_ end of vla-startundomark
  (if
    (and
      (= (type
           (setq
             ent (vl-catch-all-apply
                   (function
                     (lambda ()
                       (entsel
                         "\nВыберите полилинию или отрезок <Отмена> : "
                         ) ;_ end of entsel
                       ) ;_ end of lambda
                     ) ;_ end of function
                   ) ;_ end of vl-catch-all-apply
             ) ;_ end of setq
           ) ;_ end of type
         'list
         ) ;_ end of =
      (wcmatch (cdr (assoc 0 (entget (car ent)))) "*LINE")
      (= (type
           (setq
             dist
              (vl-catch-all-apply
                (function
                  (lambda ()
                    (initget 7)
                    (getdist "\nВведите длину сегмента <Отмена> : ")
                    ) ;_ end of lambda
                  ) ;_ end of function
                ) ;_ end of vl-catch-all-apply
             ) ;_ end of setq
           ) ;_ end of type
         'real
         ) ;_ end of =
      (setq pt           (cadr ent)
            ent          (car ent)
            pt           (vlax-curve-getclosestpointto ent pt)
            start        (vlax-curve-getstartpoint ent)
            end          (vlax-curve-getendpoint ent)
            len          (vlax-curve-getdistatpoint ent end)
            len_pt_start (vlax-curve-getdistatpoint ent pt)
            len_pt_end   (- len (vlax-curve-getdistatpoint ent pt))
            ) ;_ end of setq
      (<= dist len)
      (= (type (setq break_point
                      (cond
                        ((equal len_pt_end len_pt_start 1e-3)
                         (princ
                           "\nВы попали точно на середину объекта! Вызовите команду еще раз и укажите другую точку."
                           ) ;_ end of princ
                         )
                        ((< len_pt_start len_pt_end)
                         (vlax-curve-getpointatdist ent dist)
                         )
                        (t (vlax-curve-getpointatdist ent (- len dist)))
                        ) ;_ end of cond
                     ) ;_ end of setq
               ) ;_ end of type
         'list
         ) ;_ end of =
      ) ;_ end of and
     (vl-catch-all-apply
       (function
         (lambda (/)
           (setq sysvar_lst
                  (mapcar
                    (function
                      (lambda (x / tmp)
                        (setq tmp (cons (car x) (getvar (car x))))
                        (setvar (car x) (cdr x))
                        tmp
                        
                        ) ;_ end of lambda
                      ) ;_ end of function
                    '(("cmdecho" . 0)
                      ("nomutt" . 1)
                      ("menuecho" . 0)
                      ("osmode" . 0)
                      )
                    ) ;_ end of mapcar
                 ) ;_ end of setq
           (vl-cmdf "_.break" ent break_point break_point)
           (foreach item sysvar_lst
             (setvar (car item) (cdr item))
             ) ;_ end of foreach
           ) ;_ end of lambda
         ) ;_ end of function
       ) ;_ end of vl-catch-all-apply
     ) ;_ end of if
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
"Разрывать не командно"? Это сильно. А если учесть, что точка разрыва может попасть на дуговой сегмент с переменной шириной? Или полилиния будет сглаженная? Или и то, и другое? Помрешь делавши! Куда проще сделать вызов команды - и все.
P.S. Код не проверял ни разу.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.

Последний раз редактировалось Кулик Алексей aka kpblc, 09.02.2010 в 19:09.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 09.02.2010, 14:26
#25
Disney

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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Disney, посмотри - команда выполняется в стандартном режиме
Да я и не спорю, код программы абсолютно корректен (хотя я его не проверял, т.к. мне такая команда не к чему), это у ALEXGVOZа какие-то проблемы с AutoCADом, но в аналогичной теме на Caduserе, он вроде пообещал его переустановить.
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Можно, конечно, переделать для osmode,
Но "_none" то так и не убрал, хотя проблема может и не в них, но мне почему-то всё же кажется...
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
"Разрывать не командно"? Это сильно. А если учесть, что точка разрыва может попасть на дуговой сегмент с переменной шириной? Или полилиния будет сглаженная? Или и то, и другое? Помрешь делавши!
Ну да, согласен, не вариант.
__________________
Почему все вдруг становятся умными, когда уже не надо?
Disney вне форума  
 
Непрочитано 09.02.2010, 19:09
#26
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от Disney Посмотреть сообщение
"_none" то так и не убрал
Исправился. Что значит copy-paste...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Разделение полилинии

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Новые команды для работы с полилинией VVA Программирование 647 18.09.2023 11:16
Интерполяция отметок вершин полилинии между двумя заданными точками Кочетков Андрей Программирование 7 22.07.2019 20:14
lisp: Длина по полилинии до точки vosh LISP 19 15.07.2013 15:10
выноски к полилинии gizmo_zx Программирование 6 01.03.2010 12:17
Поворот полилинии krusty AutoCAD 9 10.11.2009 15:28