(изменено: Лев Громов, 25 февраля 2016г. 09:45:19)

Тема: Требуется лисп

Лисп найден (разработан добрым человеком). Считает сумму значения текста и проставленного значения! Может кому пригодиться!

(defun c:ОО (/ r txt1 txt2)
  (prompt "\n Выберите текст")
  (setq   r    (entsel)
   txt1 (atof (cdr (assoc 1 (entget (car r)))))
  ) ;_ конец setq
  (prompt "\n Выберите размер")
  (setq   r    (entsel)
   txt2 (cdr (assoc 42 (entget (car r))))
   txt1 (+ txt1 txt2)
  ) ;_ конец setq
  (command "_.TEXT" '(0 0 0) "0.5" 0 (rtos txt1 2 2))
  (setvar "orthomode" 0)
  (command "_.MOVE" (entlast) "" '(0 0 0))
) ;_ конец defun
(print "Наберите в комстроке - ОО")

Re: Требуется лисп

ЛИСП для первой задачи.
Без ВСЕХ проверок (на промах и неправильные указания, ESC и т.д.

(prompt "\n Выберите текст")
(setq r       (entsel)
      txt1 (atof (cdr (assoc 1 (entget (car r)))))
) ;_ конец setq
(prompt "\n Выберите размер")
(setq r       (entsel)
      txt2 (cdr (assoc 42 (entget (car r))))
      txt1 (+ txt1 txt2)
) ;_ конец setq
(command "_.TEXT" '(0 0 0) "2.5" 0 (rtos txt1 2 3))
(command "_.MOVE" (entlast) "" '(0 0 0))

Вторую решать не буду

Re: Требуется лисп

Alan aka Александр Назаров пишет:

ЛИСП для первой задачи.

Без ВСЕХ проверок (на промах и неправильные указания, ESC и т.д.

(prompt "\n Выберите текст")

(setq r      (entsel)

      txt1 (atof (cdr (assoc 1 (entget (car r)))))

) ;_ конец setq

(prompt "\n Выберите размер")

(setq r      (entsel)

      txt2 (cdr (assoc 42 (entget (car r))))

      txt1 (+ txt1 txt2)

) ;_ конец setq

(command "_.TEXT" '(0 0 0) "2.5" 0 (rtos txt1 2 3))

(command "_.MOVE" (entlast) "" '(0 0 0))

Вторую решать не буду

Спасибо, а какая команда для запуска этого лиспа?

(изменено: Лев Громов, 24 февраля 2016г. 13:33:40)

Re: Требуется лисп

Вот нашел в нете нужную программу по 1-й задаче, только она суммирует по отдельности (т.е. выбираешь, что суммировать) размеры, тексты или длины линий! Может кто подшаманить, чтоб можно было суммировать размеры с текстом!
http://forum.dwg.ru/showthread.php?t=65565

Re: Требуется лисп

Вот еще раскопал, практически то что нужно, но тут только суммируется текст!


(defun c:66 (/ value ent obj ss)
(vl-load-com)
(princ
"\nВыберите текстовые объекты среди которых будет произведененна калькуляция"
) ;_ princ
(setq ss (ssget '((0 . "TEXT,MTEXT"))))
(if (not ss)
(princ "Не выбраны объекты")
(progn
(setq
value (rtos
(apply
(function +)
(mapcar
(function
(lambda (a)
(atof
(vl-string-trim
"%Uu {\\Ll}"
(vl-string-subst
"."
","
(cdr (assoc 1 (entget a)))
) ;_ vl-string-subst
) ;_ vl-string-trim
) ;_ atof
) ;_ lambda
) ;_ function
(vl-remove-if
(function listp)
(mapcar (function cadr)
(ssnamex ss)
) ;_ mapcar
) ;_ vl-remove-if
) ;_ mapcar
) ;_ apply
) ;_ rtos
) ;_ setq
(if (vl-string-position (ascii ".") value)
(setq value (vl-string-right-trim ".0" value))
) ;_ if
(setq value (vl-string-subst "," "." value))
(princ (strcat "\n Сумма = " value))
(alert (strcat "Сумма = " value "\nУкажите точку вставки "))
(setvar "ERRNO" 0)
(if (and ent
(vlax-property-available-p
(setq obj (vlax-ename->vla-object ent))
'TextString
) ;_ vlax-property-available-p
) ;_ and
(progn
(vlax-put-property obj 'TextString value)
(vlax-release-object obj)
) ;_ progn
) ;_ if
) ;_ progn
) ;_ if


(setq pt2 (getpoint))
(setq r (* (getvar "DIMSCALE") (getvar "DIMTXT")))
(command "_text" pt2 r 0 value)

(princ)
) ;_ defun

Re: Требуется лисп

Лев Громов пишет:

а какая команда для запуска этого лиспа?

Оформите текст в виде файла, например, ZummaTxDi.lsp и загрузите его.

Re: Требуется лисп

Alan aka Александр Назаров пишет:
Лев Громов пишет:

а какая команда для запуска этого лиспа?

Оформите текст в виде файла, например, ZummaTxDi.lsp и загрузите его.

Загрузить то его я загрузил, а как вызвать команду?

(изменено: Alan aka Александр Назаров, 24 февраля 2016г. 13:49:03)

Re: Требуется лисп

Лев Громов пишет:

Загрузить то его я загрузил, а как вызвать команду?

После загрузки в командной строке появится:

Команда:
Выберите текст
Выберите объект:

Выбираете ТЕКСТ

Выберите размер
Выберите объект:

Выбираете РАЗМЕР
указываешь точку вставки СУММЫ

Ну или вот оформлено командой zummatxdi

(defun c:zummatxdi (/ r txt1 txt2)
  (setvar "osmode" 0)
  (prompt "\n Выберите текст")
  (setq    r    (entsel)
    txt1 (atof (cdr (assoc 1 (entget (car r)))))
  ) ;_ конец setq 
  (prompt "\n Выберите размер")
  (setq    r    (entsel)
    txt2 (cdr (assoc 42 (entget (car r))))
    txt1 (+ txt1 txt2)
  ) ;_ конец setq 
  (command "_.TEXT" '(0 0 0) "2.5" 0 (rtos txt1 2 3))
  (command "_.MOVE" (entlast) "" '(0 0 0))
) ;_ конец defun
(print "Наберите в комстроке - ZummaTxDi")

Re: Требуется лисп

Alan aka Александр Назаров пишет:
Лев Громов пишет:

Загрузить то его я загрузил, а как вызвать команду?

После загрузки в командной строке появится:

Команда:

Выберите текст

Выберите объект:

Выбираете ТЕКСТ

Выберите размер

Выберите объект:

Выбираете РАЗМЕР

указываешь точку вставки СУММЫ



Ну или вот оформлено командой  zummatxdi

(defun c:zummatxdi (/ r txt1 txt2)

  (setvar "osmode" 0)

  (prompt "\n Выберите текст")

  (setq   r    (entsel)

   txt1 (atof (cdr (assoc 1 (entget (car r)))))

  ) ;_ конец setq 

  (prompt "\n Выберите размер")

  (setq   r    (entsel)

   txt2 (cdr (assoc 42 (entget (car r))))

   txt1 (+ txt1 txt2)

  ) ;_ конец setq 

  (command "_.TEXT" '(0 0 0) "2.5" 0 (rtos txt1 2 3))

  (command "_.MOVE" (entlast) "" '(0 0 0))

) ;_ конец defun

(print "Наберите в комстроке - ZummaTxDi")

Спасибо большое! Только, когда указываешь точку вставки СУММЫ, значение не появляется там, а появляется хз где. Поэтому я в момент, когда указываешь точку вставки СУММЫ, включаю объектную привязку (которая в момент использования этой функции всегда почему-то выключается) и привязываю к объекту, вот только тогда появляется! Можно это как изменить?

(изменено: Alan aka Александр Назаров, 24 февраля 2016г. 14:54:49)

Re: Требуется лисп

Не надо вставлять в цитату текст программы...
Мешало простановке не привязка, а ортогональность. Убрал в 0, назад не возвращал.

(defun c:zummatxdi (/ r txt1 txt2)
  (prompt "\n Выберите текст")
  (setq    r    (entsel)
    txt1 (atof (cdr (assoc 1 (entget (car r)))))
  ) ;_ конец setq 
  (prompt "\n Выберите размер")
  (setq    r    (entsel)
    txt2 (cdr (assoc 42 (entget (car r))))
    txt1 (+ txt1 txt2)
  ) ;_ конец setq 
  (command "_.TEXT" '(0 0 0) "2.5" 0 (rtos txt1 2 3))
  (setvar "orthomode" 0)
  (command "_.MOVE" (entlast) "" '(0 0 0))
) ;_ конец defun 
(print "Наберите в комстроке - ZummaTxDi")

PS. Еще раз повторяю "Без ВСЕХ проверок (на промах и неправильные указания, ESC и т.д."
- как для студенческой работы по ЛИСП, чтобы было где преподу порезвиться :D

Re: Требуется лисп

Спасибо огромное! Сейчас то что нужно! Название команды я переправил, высоту текста изменил, единственное - не подскажите как сделать, чтоб было 2 знака после запятой (шайтанил, что-то не получилось :D )?

(изменено: Alan aka Александр Назаров, 24 февраля 2016г. 15:31:23)

Re: Требуется лисп

(command "_.TEXT" '(0 0 0) "2.5" 0 (rtos txt1 2 3)) 

сделать (rtos txt1 2 2)

шайтанил, что-то не получилось

Учи лучше ЛИСП :idea:

Re: Требуется лисп

Alan aka Александр Назаров пишет:
(command "_.TEXT" '(0 0 0) "2.5" 0 (rtos txt1 2 3)) 

сделать (rtos txt1 2  2 )

шайтанил, что-то не получилось

Учи лучше ЛИСП

Спасибо сенсэй!

Re: Требуется лисп

Лев Громов пишет:

шайтанил, что-то не получилось

А с бубном не пробовал наяривать?   :)

(изменено: Лев Громов, 5 марта 2016г. 11:19:42)

Re: Требуется лисп

Разобрался!