Тема: Как сделать автоматическую нумерацию узловых точек полилиний?

Предупреждение! Название темы: "Помогите с простым LISPом ОЧЕНЬ НАДО!!!" -- Нужно задавать вопрос, а не клянчить халяву.
/Администратор./

Проблема вот какая: часто приходится на чертежах пронумеровывать углы точек полилиний, нумерация зашкаливает за 200 или 300 точек, вот и приходится текст копировать 200 раз и редактировать 200 раз, нельзя ли создать небольшой Lisp который мне бы помог. Хотелось бы чтобы нумерация осуществлялась след. образом: на точке круг диаметром 0,8 и справо от цифрового значения текстовое поле с номером точки (целое число) - стиль любой высотой 2,номер начин.с 1, следующая точка +1, т.е. 2,3,4 и т.д. Буду очень признателен

Re: Как сделать автоматическую нумерацию узловых точек полилиний?

> [Re:] vladant
Если совсем по простому то можно так:

(defun test (/ ent n lst_point)
  (setq sys_var (mapcar 'getvar '("osmode" "cmdecho")))
  (setvar "osmode" 0)
  (setvar "cmdecho" 0)
  (setq ent (car (entsel "\nВыберите полилинию: ")))
  (setq n 1)
  (setq    lst_point (mapcar 'cdr
              (vl-remove-if-not
                '(lambda (x) (= (car x) 10))
                (entget ent)
              ) ;_ end of vl-remove-if-not
          ) ;_ end of mapcar
  ) ;_ end of setq
  (mapcar '(lambda (x)
         (vl-cmdf "_circle" x "_d" 0.8)
         (vl-cmdf "_text" (polar x (/ pi 4) 1.) 2. 0 (rtos n 2))
         (setq n (1+ n))
       ) ;_ end of lambda
      lst_point
  ) ;_ end of mapcar
  (mapcar 'setvar '("osmode" "cmdecho") sys_var)
  (princ)
) ;_ end of defun
;;;(test)

Re: Как сделать автоматическую нумерацию узловых точек полилиний?

> CB
спасиб тестим

Re: Как сделать автоматическую нумерацию узловых точек полилиний?

> vladant
Если не пойдет, добавь в начало строчку

(vl-load-com)

Re: Как сделать автоматическую нумерацию узловых точек полилиний?

> VVA
И без этого пошло. СПАСИБО ТЕБЕ ОГРОМНОЕ

Re: Как сделать автоматическую нумерацию узловых точек полилиний?

> VVA
Упс небольшая просьба, а можно без 4-ех знаков после запятой, сейчас вид такой 1.0000, а нужно просто 1

Re: Как сделать автоматическую нумерацию узловых точек полилиний?

> vladant
да уж это глюк похоже только у меня, попробывали на другой машине там все нормально непонимаЮ!!!

Re: Как сделать автоматическую нумерацию узловых точек полилиний?

> vladant
Замените в коде:

(vl-cmdf "_text" (polar x (/ pi 4) 1.) 2. 0 (rtos n 2))

на:

(vl-cmdf "_text" (polar x (/ pi 4) 1.) 2. 0 (rtos n 2 0))

Re: Как сделать автоматическую нумерацию узловых точек полилиний?

> vladant
Два варианта:
1. Перед вызовом каманды LUPREC в нужное тебе кол-во символов. Или то же самео в команде _Units
2. В коде находишь строчку
(rtos n 2) и меняешь на
(rtos n 2 2) - 2 знака после запятой
(rtos n 2 3) - 3 - знака после запятой

Re: Как сделать автоматическую нумерацию узловых точек полилиний?

Да, там же номера, можно и так

(vl-cmdf "_text" (polar x (/ pi 4) 1.) 2. 0 (rtos n 2))

на

(vl-cmdf "_text" (polar x (/ pi 4) 1.) 2. 0 (itoa n))

Re: Как сделать автоматическую нумерацию узловых точек полилиний?

с командой LUPREC, все получилось,ВСЕМ СПАСИБО

Re: Как сделать автоматическую нумерацию узловых точек полилиний?

извините за наглость, столкнулся с проблемой: две полилинии не замкнутые первая нумеруются по узловым точкам нормально, а вот вторую хотелось бы продолжать нумеровать не с 1, а последняя точка первой полилинии+1.

Re: Как сделать автоматическую нумерацию узловых точек полилиний?

(defun C:Nvx (/ ent n lst_point sys_var)
  (setq sys_var (mapcar 'getvar '("osmode" "cmdecho")))
  (setvar "osmode" 0)
  (setvar "cmdecho" 0)
  (if (not (numberp *NPoint*))(setq *NPoint* 1))
  (princ "\nНачальный номер <")(princ *NPoint*)(princ ">: ")
  (if (null (setq n (getint)))(setq n *NPoint*))
  (and
  (setq ent (car (entsel "\nВыберите полилинию: ")))
  (= (cdr(assoc 0 (entget ent))) "LWPOLYLINE")
  (setq  lst_point (mapcar 'cdr
        (vl-remove-if-not
          '(lambda (x) (= (car x) 10))
          (entget ent)
        ) ;_ end of vl-remove-if-not
      ) ;_ end of mapcar
  ) ;_ end of setq
  (mapcar '(lambda (x)
       (vl-cmdf "_circle" x "_d" 0.8)
       (vl-cmdf "_text" (polar x (/ pi 4) 1.) 2. 0 (itoa n))
       (setq n (1+ n))
     ) ;_ end of lambda
    lst_point
  ) ;_ end of mapcar
  (setq *NPoint* n)
  (mapcar 'setvar '("osmode" "cmdecho") sys_var)
  )
  (princ)
) ;_ end of defun
(princ "\nНаберите Nvx в командной строке")

Re: Как сделать автоматическую нумерацию узловых точек полилиний?

тестируем

Re: Как сделать автоматическую нумерацию узловых точек полилиний?

а пред. LISP надо подгружать(test)? а то простоновка номеров почему то не происходит :((

Re: Как сделать автоматическую нумерацию узловых точек полилиний?

Спасибо большое за прогу! А как сделать чтобы точки не обводились кружками,но в вершинах полилинии ставился крест - X???

Re: Как сделать автоматическую нумерацию узловых точек полилиний?

вместо строки:

(vl-cmdf "_circle" x "_d" 0.8)

вставить строки:

(vl-cmdf "_line" (polar x (* 3 (/ pi 4)) 0.5)(polar x (- (/ pi 4)) 0.5) "")
(vl-cmdf "_line" (polar x (- (* 3 (/ pi 4))) 0.5) (polar x (/ pi 4) 0.5) "")

Re: Как сделать автоматическую нумерацию узловых точек полилиний?

Простите за дурацкий вопрос, но не работает. Выдает: "...Выберите полилинию: Неизвестная команда "1".  Для вызова справки нажмите F1.
Неизвестная команда "2".  Для вызова справки нажмите F1.
Неизвестная команда "3".  Для вызова справки нажмите F1...."

Re: Как сделать автоматическую нумерацию узловых точек полилиний?

> Antarius
Если ты про > VVA (2007-06-20 16:39:05), то в этом коде не обрабатывается случай, когда в текущем текстовом стиле задана высота, отличная от 0.
Установи высоту текста в текущем текстовом стиле 0

Re: Как сделать автоматическую нумерацию узловых точек полилиний?

VVA пишет:

Если ты про > VVA (2007-06-20 16:39:05), то в этом коде не обрабатывается случай, когда в текущем текстовом стиле задана высота, отличная от 0.

Вариант с учетом высоты текстового стиля, привязок, ПСК
Автоматическая нумерация поворотных точек участка