Lisp-команда граммотного округления чисел (Текст, МТекст)? AutoCad.
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Lisp-команда граммотного округления чисел (Текст, МТекст)? AutoCad.

Lisp-команда граммотного округления чисел (Текст, МТекст)? AutoCad.

Ответ
Поиск в этой теме
Непрочитано 13.05.2011, 11:59 #1
Lisp-команда граммотного округления чисел (Текст, МТекст)? AutoCad.
UnAtom
 
Регистрация: 10.02.2007
Сообщений: 1,077

Собственно сабж.
Поиском пользовался, 2 часа жизни убил, того чего надо не нашёл.
Нужно чтоб команда (не функция, а именно defun c:<имя команды>)? выполняла округление простых чисел на чертеже с учётом 0.4 в меньшую сторону, 0.5 в большую, то есть по правилам округления.
Нашёл то, что мне подошло бы по функциональности (см. код ниже), но округляет не по тем правилам, которые описал выше. Помогите с кодом или ссылкой на нужную программу
Код:
[Выделить все]
 (defun c:ap_text (/ text_obj Obj)
  (VL-LOAD-COM)
  (prompt "\nSelect Text objects:")
  (if (ssget (list (cons 0 "*TEXT")))
    (progn
      (setq Objs (vla-get-ActiveSelectionSet
		   (vla-get-ActiveDocument (vlax-get-acad-object))
		 )
      )
      (vlax-for	text_obj Objs
	(if (vlax-property-available-p text_obj "TextString" T)
	  (vla-put-TextString
	    text_obj
	    (pl:round (atof (vla-get-TextString text_obj)) 1)
					; 1-кол-во знаков после запятой
	  )
	)
      )
    )
  )
(princ)
)
Просмотров: 11646
 
Непрочитано 13.05.2011, 14:55
#2
mamuk


 
Регистрация: 06.05.2010
Сургут
Сообщений: 248


я вот так делал
Код:
[Выделить все]
 
(defun c:okug (/)
(setq nom (car (entsel "\nУкажите текст: ")))
(setq kol_zn (getint "\nВведите количество знаков после запятой:"))
(setq okr_zn (cdr (assoc 1 (entget nom))))
(setq okr_zn1 (strcat (rtos (atof okr_zn) 2 kol_zn)))
(setq sp (entget nom))
(entmod (subst (cons 1 okr_zn1) (assoc 1 sp) sp)))
mamuk вне форума  
 
Непрочитано 13.05.2011, 14:59
#3
Лиспер


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


http://forum.dwg.ru/showthread.php?t=21977
__________________
(/= RegDate StartReadDate)
Лиспер вне форума  
 
Автор темы   Непрочитано 13.05.2011, 15:31
#4
UnAtom


 
Регистрация: 10.02.2007
Сообщений: 1,077


mamuk
Хорошо. но не поддерживает мультивыбора. То есть сразу 50 чисел выбрал и все как положено округлились бы.
Лиспер
Ткните в Лисп = # сообщения, который отвечал бы заявленным в первом моём сообщении требованиям.
UnAtom вне форума  
 
Непрочитано 13.05.2011, 15:41
#5
Лиспер


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


Код:
[Выделить все]
 (vl-load-com)

(defun c:ap_text (/ round text_obj obj)

  (defun round (value to)
    (if (zerop to)
      value
      (* (atoi (rtos (/ (float value) to) 2 0)) to)
      ) ;_ end of if
    ) ;_ end of defun

  (prompt "\nSelect Text objects:")
  (if (ssget "_:L" (list (cons 0 "*TEXT")))
    (progn
      (setq objs (vla-get-activeselectionset
                   (vla-get-activedocument (vlax-get-acad-object))
                   ) ;_ end of vla-get-ActiveSelectionSet
            ) ;_ end of setq
      (vlax-for text_obj objs
        (if (vlax-property-available-p text_obj "TextString" t)
          (vla-put-textstring
            text_obj
            (round (atof (vla-get-textstring text_obj)) 1)
            ) ;_ end of vla-put-TextString
          ) ;_ end of if
        ) ;_ end of vlax-for
      ) ;_ end of progn
    ) ;_ end of if
  (princ)
  ) ;_ end of defun
__________________
(/= RegDate StartReadDate)
Лиспер вне форума  
 
Непрочитано 13.05.2011, 16:29
#6
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Цитата:
Сообщение от UnAtom Посмотреть сообщение
(не функция, а именно defun c:<имя команды>)?
TOKR
Если задать "Количество знаков округления =0" то 10.4 округлиться до 10, а 10.5 до 11
А так же: Округление текста
Округление значения числа в TEXT
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 13.05.2011, 17:55
#7
UnAtom


 
Регистрация: 10.02.2007
Сообщений: 1,077


Лиспер
Благодарю сердечно. Практически то, что мне было нужно. Спасибо за труды.
VVA
Как-то скачивал уже набор ваших программ и почему не помню, но не получилось запустить команду TOKR. Сейчас загрузилась, также подходит под мои заданные параметры + расширенные возможности по кол-ву знаком после запятой и др. Спасибо!
Функциями не люблю пользоваться, так как почти всё черчу мышкой...к клавиатуре не притрагиваюсь . И поэтому набирать названия функций, значения аргументов и прочее напрягает. Большинство Лиспов загнал на кнопки, поэтому и нужна была именно команда и без дополнительных нажатий на клавиатуру.
UnAtom вне форума  
 
Непрочитано 13.05.2011, 22:19
#8
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811


Я сторонник встроенных функций Автокада
Например:
Код:
[Выделить все]
  (defun c:bla (/ adoc dblnum dbltext  pfset precison rndtext unit util)
 (vl-load-com)
 (setq adoc  (vla-get-activedocument
	       (vlax-get-acad-object))
       pfset (vla-get-pickfirstselectionset adoc)
       )
 (setq util (vla-get-utility adoc))
 (vla-clear pfset)
 (setq unit acDecimal
       precison	1)
 (prompt "\nSelect text objects:")
 (vla-selectonscreen
   pfset
   (vlax-safearray-fill
     (vlax-make-safearray vlax-vbinteger '(0 . 0))
     '(0))
   (vlax-safearray-fill
     (vlax-make-safearray vlax-vbvariant '(0 . 0))
     '("TEXT")
     )
   )
 (if (not (zerop (vla-get-count pfset)))
   (progn
     (vlax-for objtext	pfset
       (setq dbltext (vlax-get objtext 'textstring))
     (if (not
	   (vl-catch-all-error-p
	     (vl-catch-all-apply
	       '(lambda	()
		  (setq dblnum (vla-distancetoreal util dbltext unit))))))
       (progn
	 (setq rndtext (vla-RealToString util dblnum unit precison))
	 (princ "\n")(princ (vl-princ-to-string rndtext))
	 (vl-catch-all-apply
	   'vla-put-textstring (list objtext rndtext)))))))
 (vlax-release-object util)
(princ)
)
Олег (jr.) вне форума  
 
Непрочитано 16.05.2011, 03:22
#9
KAI

геологоразведка, строительство
 
Регистрация: 14.10.2003
Магадан
Сообщений: 311


А если по округлять по правилам статистики, а не по правилам AutoCAD, то:
http://geol-dh.ru/spds/func-rtos-round-stat.html

p.s. Ссылку поправил.
__________________
Лень - великий двигатель прогресса!

Последний раз редактировалось KAI, 17.05.2011 в 01:10.
KAI вне форума  
 
Непрочитано 16.05.2011, 08:34
#10
Кулик Алексей aka kpblc
Moderator

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


KAI, ссылку подправь - в имеющемся виде она не работает.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 16.05.2011, 11:20
#11
UnAtom


 
Регистрация: 10.02.2007
Сообщений: 1,077


Олег (jr.)
А что делает Ваш Lisp? Запускаю, выделяю текст с числами и ничего не происходит...

KAI
По ссылке находил этот Лисп. Не подошло. Это функция...мне нужна команда.
То есть набрал название команды, выделил тексты с числами для округления, нажал Ентер, и они округлились бы до целого числа. При этом напр. 54,9 стало 55, а 23,4 стало 23. Можете что-то такое предложить?

Последний раз редактировалось UnAtom, 16.05.2011 в 13:28.
UnAtom вне форума  
 
Непрочитано 16.05.2011, 18:39
#12
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811


Цитата:
Сообщение от UnAtom Посмотреть сообщение
Олег (jr.)
А что делает Ваш Lisp? Запускаю, выделяю текст с числами и ничего не происходит...
Нажми Enter как положено после выбора объектов
Олег (jr.) вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Lisp-команда граммотного округления чисел (Текст, МТекст)? AutoCad.



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LISP. Вставка в таблицу поля, соотвествующего площади примитива Profan Готовые программы 272 06.06.2021 23:12
запуск программы из AutoCADа kminas Программирование 19 15.06.2012 13:42
lisp, AutoCAD Architecture 2008. Стандартная команда не воспринимает опцию в виде строки молодой человек LISP 17 15.05.2011 15:59
В русской версии AutoCAD 2010 SP1 32-bit файл Acad.PGP содержит ошибки. hwd Баги и пожелания в Autodesk 21 21.04.2010 20:27
Информация по идентификационным кодам программ в сетевых лицензиях Autodesk KSI AutoCAD 1 14.09.2009 15:59