Тема: Разделить полилинию

Есть длиная полилиния мне надо разделить ее на 2 полилинии чтобы одна из них имела определеную длину которую надо задать

Re: Разделить полилинию

Alex GV пишет:

Есть длиная полилиния мне надо разделить ее на 2 полилинии чтобы одна из них имела определеную длину которую надо задать

Это довольно сложно сделать на VBA
Нужно использовать 2 классса: Vlax.cls и Curve.cls
(ищи в Google)
На лиспе это гораздо проще, кстати в этих классах
тоже используются лисп выражения
Если устроит лисп - могу написать

~'J'~

Re: Разделить полилинию

Напиши липс если не трудно

Re: Разделить полилинию

Скопируй код, вставь в блокнот и сохрани как pbreak.lsp

запуск будет осуществляться автоматически:

Используй Tools --> Autolisp --> Load Applications

;; pbreak.lsp

;; Разрыв полилинии в точке заданной по длине отсекаемой части

(defun pbreak  (/ cutpt dis endpt ent leng pickpt)

  (if

    (and

      (setq ent    (entsel
          "\n\t\t>> Выбрать полилинию ближе к нужному началу: "))

      (setq dis (getreal "\n\t\t>> Установить новую длину: ")))

     (progn


       (setq pickpt (cadr ent))

       (setq ent (car ent))

       (if (not (eq "LWPOLYLINE" (cdr (assoc 0 (entget ent)))))
     (progn
       (alert "Выбранный объект не является LWPOLYLINE")
       (exit)
       (princ)
       )
     )

       (setq leng
          (vl-catch-all-apply
        (function (lambda ()
                (vlax-curve-getdistatparam
                  ent
                  (- (vlax-curve-getendparam ent)
                 (vlax-curve-getstartparam ent)))))))

       (if (>= dis leng)
     (progn
       (alert "Новая длина превышает исходную")
       (exit)
       (princ)
       )
     )

       (princ (strcat "\nСуществующая длина = "
              (rtos leng 2 3)
              "; Новая длина = "
              (rtos dis 2 3))
          )

       (progn

     (if

       (not
         (vl-catch-all-error-p
           (setq cutpt (vl-catch-all-apply
                 (function (lambda ()
                     (vlax-curve-getclosestpointto
                       ent
                       (vlax-curve-getpointatdist ent dis))))))))

        (progn

          (if (> (-    (vlax-curve-getdistatpoint
              ent
              (vlax-curve-getclosestpointto ent pickpt)
              )
            (vlax-curve-getdistatparam
              ent
              (vlax-curve-getstartparam ent)
              )
            )

             (-    (vlax-curve-getdistatparam
              ent
              (vlax-curve-getendparam ent)
              )
            (vlax-curve-getdistatpoint
              ent
              (vlax-curve-getclosestpointto ent pickpt)
              )
            )
             )
        (progn

          (setq dis (- leng dis))

          (setq    cutpt (vl-catch-all-apply
                (function (lambda ()
                        (vlax-curve-getclosestpointto
                          ent
                          (vlax-curve-getpointatdist ent dis))))))
          )

        )
          (vla-startundomark
        (vla-get-activedocument
          (vlax-get-acad-object))
        )
          (command "_.break" ent "_non" cutpt "@")
          )
        )

     )
       )
     )
  (vla-endundomark
    (vla-get-activedocument
      (vlax-get-acad-object)))
  (princ)
  )

(prompt "\n   >>>   Разрыв полилинии в точке заданной по длине отсекаемой части   <<<")

(prin1)

(vl-load-com)

(pbreak)

~'J'~

Re: Разделить полилинию

у меня 2007 рус автокад вот че пишет
Команда: _appload pbreak.lsp успешно загружено.
Команда:
   >>>   Разрыв полилинии в точке заданной по длине отсекаемой части   <<<
   >> Выбрать полилинию ближе к нужному началу:
   >> Установить новую длину: 100
Существующая длина = 8532.094; Новая длина = 100.000_.break Выберите объект:
Первая точка разрыва: _non
Режим не определен для заданной точки.
Неверная точка.
; ошибка: Функция отменена
Первая точка разрыва:
Команда:

Re: Разделить полилинию

Alex GV, тебе же на DWG.ru уже писали код в твоей же теме Разделение полилинии и проблема не в коде, а в твоём AutoCAD-е, надо решать её, а не просить людей писать один и тот же код на разных форумах.

Re: Разделить полилинию

Alex GV пишет:

у меня 2007 рус автокад вот че пишет
Команда: _appload pbreak.lsp успешно загружено.
Команда:
>>> Разрыв полилинии в точке заданной по длине отсекаемой части <<<
>> Выбрать полилинию ближе к нужному началу:
>> Установить новую длину: 100
Существующая длина = 8532.094; Новая длина = 100.000_.break Выберите объект:
Первая точка разрыва: _non
Режим не определен для заданной точки.
Неверная точка.
; ошибка: Функция отменена
Первая точка разрыва:
Команда:

Попробуй убрать "_non" из тела команды
(У меня аглицкий Автокад)

~'J'~

Re: Разделить полилинию

fixo пишет:

Попробуй убрать "_non" из тела команды
(У меня аглицкий Автокад)

По идеи "_non" работает и в локализованных версиях, но может у Alex GV криво русифицированная, как вариант написать вместо "_non" "нич" - это русифицированный вариант.

Re: Разделить полилинию

Disney пишет:


Цитата   


fixo пишет:
Попробуй убрать "_non" из тела команды
(У меня аглицкий Автокад)
По идеи  "_non"  работает и в локализованных версиях, но может у  Alex GV  криво русифицированная, как вариант написать вместо  "_non" "нич"  - это русифицированный вариант.

"нич" это прикольно :)

~'J'~

Re: Разделить полилинию

все равно пишет тоже самое буду тогда переставлять автокад всем большое спасибо!!!!!

Re: Разделить полилинию

Alex GV пишет:

все равно пишет тоже самое буду тогда переставлять автокад всем большое спасибо!!!!!

Дай знать потом как будет работать и что надо изменить

~'J'~