Тема: Длинна полилинии

Нужна простенькая программа.
Суть вопроса:
Занимаюсь проектированием теплых полов. Нюанс - длинна проектируемого кабеля ограниченна!!! Нужен лисп, запуская который я мог бы рисовать полилинию и рядом с курсором видеть сколько уже "намотал" кабеля по "полу"...
Оптимально было бы иметь лисп, который использовал бы Автокадовский интерфейс и который можно было бы "навека" закинуть в автозагрузку.
Заранее спасибо...

Re: Длинна полилинии

А где готовая программа?

Re: Длинна полилинии

А сколько готов заплатить?

Re: Длинна полилинии

готов и заплатить разумные деньги - с предложениями на мыло: arsholod@yandex.ru

Re: Длинна полилинии

Рядом с курсором иметь маленькое окошечко, где отражалась бы текущая длина с учетом положения курсора (и ещё не построеного последнего сегмента) - это весьма непросто сделать.
А что, если слегка упростить задачу и заносить данные о суммарной длине уже построенных сегментов полилинии, скажем, в статусную строку (в секцию управляемую системной переменной modemacro. В такой постановке задача выглядит куда проще и вполне можно расчитывать на бесплатную помощь форума.

Re: Длинна полилинии

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

Re: Длинна полилинии

Что-то вроде, с выводом в командную строку (тряпками прошу не кидаться):

(defun c:cb (/ Cable Cable-len point)
  (setq point 0)
  (princ "\n Укажите точку 1:")
  (command "_.pline")
  (while (= (getvar "CMDACTIVE") 1)
    (setq point (+ 1 point))
    (if (> point 1)
      (progn
        (setq Cable (vlax-ename->vla-object (entlast)))
        (setq Cable-len (vlax-curve-getdistatparam Cable (vlax-curve-getendparam Cable)))
        (princ "\n")
        (princ (strcat "** Длина кабельной линии - " (rtos Cable-len) " ** Укажите точку " (rtos point) ":")
        ) ;_ end of princ
      ) ;_ end of progn
    ) ;_ end of if
    (command pause)
  ) ;_ end of while
) ;_ end of defun

Re: Длинна полилинии

Вполне не плохой вариант. Ожидания были оправданы... Спасибо автару.
Если кто-нить предложит альтернативный варинат - тоже будет не плохо...

Re: Длинна полилинии

Вариант, представленный выше, не позволяет использовать контекстное меню команды pline. Возможно это связано с печатью результата в ком. строку. На моем Acad2004 переключаться от построения прямолинейных сегментов на построение дуговых программа не позволяет.
Предлагаю свой вариант с печатью в левый угол статусной строки. Плюс сделана элементарная защита от нажатия esc и еще кое от чего.

(defun c:cb ()
  (vl-catch-all-apply
    (function
      (lambda ()
    (setvar 'modemacro "")
    (command "_.pline" pause)
    (while (= (getvar 'cmdactive) 1)
      (vl-catch-all-apply
        (function
          (lambda ( / leng)
        (command pause)
        (setq leng (vlax-get-property (vlax-ename->vla-object (entlast)) 'length))
        (setvar 'modemacro (strcat "Длина кабеля: "(rtos leng 2 0) " мм "))
           )
            )
      )
        ); end while.
      )
    )
  )
  (setvar 'modemacro ""); закомментируй эту строчку, если нужно сохранять вычисленную длину после завершения команды.
  (princ)
)
; Запуск: в командной строке набрать cb и нажать enter.

Вот так вот. А вы говорите "деньги платить".

Re: Длинна полилинии

> Пастух
Хорошо бы перед началом выполнения программы установить CMDECHO в 1, иначе в командной строке пусто и контекстного меню нет.

Re: Длинна полилинии

я пользуюсь 2009-м АС...
В первой программе все работает корректно, включая и рисование полилинией окружностей и т.д... т.е. менрю команд работает... а вот в последнем варианте - все рисует, но вывода длинны линии не наблюдается...

Re: Длинна полилинии

> Андрей
смотри не в командной а в статусной строке - это там, где координаты курсора и кнопки вкл/выкл режимов черчения

Re: Длинна полилинии

аха... нашел... не сразу понял только где это... тоже спасибо за лисп.
Единственный момент.. считать длинну кабеля в мм будет очень круто... что нужно в коде подправить что бы в м. выдавало сразу???

Re: Длинна полилинии

Исправил замечания.

(defun c:cb ()
  (vl-catch-all-apply
    (function
      (lambda ()
    (setvar 'cmdecho 1)
    (setvar 'modemacro "")
    (command "_.pline" pause)
    (while (= (getvar 'cmdactive) 1)
      (vl-catch-all-apply
        (function
          (lambda ( / leng)
        (command pause)
        (setq leng (vlax-get-property (vlax-ename->vla-object (entlast)) 'length))
        (setq leng (/ leng 1000)); удали эту строку, если единицы чертежа у тебя - метры.
        (setvar 'modemacro (strcat "Длина кабеля: "(rtos leng 2 2) " м "))
           )
            )
      )
        ); end while.
      )
    )
  )
  (setvar 'modemacro ""); закомментируй эту строчку, если нужно сохранять вычисленную длину после завершения команды.
  (princ)
)

Re: Длинна полилинии

izvinite za chainichestvo. a kuda etot kod voobshe pisat?? ;)