| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Случайные числа в тексте

Случайные числа в тексте

Ответ
Поиск в этой теме
Непрочитано 06.10.2011, 13:54 #1
Случайные числа в тексте
gugaoy
 
Регистрация: 06.10.2011
Сообщений: 2

На плане нужно проставить большое число вертикальных отклонений. Они колеблются примерно в промежутке от -7 до +7. В общем,хорошо бы было чтобы я копировал текст(с заведомо заданной формулой),а значение было случайным в нужном мне промежутке. Я нашел код который добавил в AutoCad и теперь при введение команды (random 199 nil) он в командной строке выдает случайно число из промежутка с 1 по 199. Но как прикрутить это к тексту? Или может есть приложение для расширенной работы с текстом. Или какнеть привернуть формулы из ворда или икселя. Помогите ускорить рабочий процесс =)
Просмотров: 27627
 
Непрочитано 06.10.2011, 16:18
#2
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Код:
[Выделить все]
(defun C:TR1 ()(vk_EntNumSubst))
(defun vk_EntNumSubst (/ From To Diff SS Ent +Sign Num)
 ;;; url http://www.caduser.ru/forum/index.php?PAGE_NAME=message&FID=23&TID=32763&MID=187089#message187089
  (initget 0)
  (setq From (getint "From: "))
  (while (progn (initget 0) (not (> (setq To (getint "To: ")) From)))
  )
  (setq   +Sign (if (< From 0)
      "+"
      ""
         )
  )
  (setq Diff (- To From))
  (while (setq SS (ssget "_:S" (list (cons 0 "TEXT"))))
    (setq Num (- To (atoi (rtos (* Diff (vk_RandNum)) 2 0))))
    (setq Ent (entget (ssname SS 0)))
    (entmod
      (subst
   (cons 1
         (if (<= Num 0)
      (itoa Num)
      (strcat +Sign (itoa Num))
         )
   )
   (assoc 1 Ent)
   Ent
      )
    )
  )
  (princ)
)
(defun vk_RandNum (/ modulus multiplier increment random)
  (if (not *seed*)
    (setq *seed* (getvar "DATE"))
  )
  (setq   modulus      65536
   multiplier 25173
   increment  13849
   *seed*      (rem (+ (* multiplier *seed*) increment) modulus)
   random      (/ *seed* modulus)
  )
)


Код:
[Выделить все]
;;; ************************************************************************
;;; * Библиотека DWGruLispLib Copyright ©2007  DWGru Programmers Group
;;; *
;;; *http://dwg.ru/f/showthread.php?p=218772
;;; *
;;; * _dwgru-random
;;; *
;;;  На основе vk_RandNum
;;;  http://www.caduser.ru/forum/index.php...&TID=32763
;;; *
;;; *
;;; * 07/12/2007 Версия 0001.  Редакция Владимир Азарко (VVA)
;;; ************************************************************************
(defun _dwgru-random (/ modulus multiplier increment)
;;; Генерирует случайное вещественное число в диапазоне от 0 до 1
;;; Используется глобальная переменная *DWGRU_SEED*
  (if (not *DWGRU_SEED*)
    (setq *DWGRU_SEED* (getvar "DATE"))
  )
  (setq  modulus     65536
  multiplier 25173
  increment  13849
  *DWGRU_SEED*     (rem (+ (* multiplier *DWGRU_SEED*) increment) modulus))
  (/ *DWGRU_SEED* modulus)
)
;;; ************************************************************************
;;; * Библиотека DWGruLispLib Copyright ©2007  DWGru Programmers Group
;;; *
;;; * dwgru-random-range
;;; *
;;; *http://dwg.ru/f/showthread.php?p=218772
;;; *
;;; * 07/12/2007 Версия 0001.  Редакция Владимир Азарко (VVA)
;;; ************************************************************************
(defun dwgru-random-range (Minnum Maxnum )
;;; Генерирует случайное число из указанного диапазона целых чисел
;;; Использует функцию библиотеки
    ;;;                 _dwgru-random
    ;;; Параметры:
    ;;; Minnum - минимальное целое число
    ;;; Maxnum - максимальное целое число
    ;;; Возврат:
    ;;;   целое число из указанного диапазона
    ;;; Пример:
  ;|
  (DWGRU-NUM-RANDOM-RANGE 1 15) ;_Результат 3
  (DWGRU-NUM-RANDOM-RANGE 1 15) ;_Результат 10
  |;
;(- Maxnum (atoi (rtos (* (- Maxnum Minnum) (_dwgru-num-random)) 2 0))) ;_Comment VVA 07.12.2007 Было так
(- Maxnum (fix (* (- Maxnum Minnum) (_dwgru-random)))) ;_Add VVA 07.12.2007 Так наверное быстрее
)
;;Text Random number
;;http://www.caduser.ru/forum/index.php...&TID=37867
(defun c:TR (/ From To SS Ent Num i)
(initget 1)
(setq From (getint "Укажите диапазон. Минимум: "))
(while
  (progn
    (initget 1)
    (not (> (setq To (getint "Укажите диапазон. Максимум: ")) From))
    )
)
(and
(setq SS (ssget "_:L" '((0 . "*TEXT"))))
(repeat (setq i (sslength SS)) ;_ end setq
  (setq Ent (entget (ssname SS (setq i (1- i)))))
  (setq Num (dwgru-random-range From To))
  (entmod (subst (cons 1 (if (<= Num 0)(itoa Num)
                           (strcat "+" (itoa Num))))
                 (assoc 1 Ent)
                 Ent
                 )
          )
) ;_ end repeat
)
(princ)
)

Замена имеющегося числа - случайным
генератор случайных чисел ОЧЕНЬ НУЖЕН
Отклонения в исполнительных семах (строительство)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 06.10.2011, 21:42
#3
gugaoy


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


Спасибо!!!!!!!!!! Просто огромное спасибо!!!!!!!!
gugaoy вне форума  
 
Непрочитано 10.09.2013, 16:30
#4
white_cat


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


Может, поможет мне кто с решением моего вопроса.
Нужно, чтобы случайные числа генерировались в пределах от -0,002 до +0,002 с шагом в 0,001. Возможно ли это? Причем знаки + и - тоже должны ставиться, а если будет попадать на 0,000 то без знака. Заранее благодарен.
white_cat вне форума  
 
Непрочитано 10.09.2013, 16:41
#5
twilight


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


Цитата:
Сообщение от white_cat Посмотреть сообщение
Может, поможет мне кто с решением моего вопроса.
Нужно, чтобы случайные числа генерировались в пределах от -0,002 до +0,002 с шагом в 0,001. Возможно ли это? Причем знаки + и - тоже должны ставиться, а если будет попадать на 0,000 то без знака. Заранее благодарен.
Это к геодезистам.
twilight вне форума  
 
Непрочитано 10.09.2013, 16:44
#6
Bull

Конструктор по сути (машиностроитель)
 
Регистрация: 10.10.2005
Набережные Челны (это где КамАЗ)
Сообщений: 11,391


Это вообще к программистам на бейсике (без описания ситуации в АКАД)
__________________
Век живи, век учись - ...
Bull вне форума  
 
Непрочитано 10.09.2013, 17:25
#7
twilight


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


Цитата:
Сообщение от Bull Посмотреть сообщение
Это вообще к программистам на бейсике (без описания ситуации в АКАД)
Не. Тема постоянно всплывает в свете выдать липовую исполнительную.
Неоднократно видел с решениями и здесь и не здесь.
twilight вне форума  
 
Непрочитано 10.09.2013, 17:26
#8
white_cat


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


Цитата:
Сообщение от twilight Посмотреть сообщение
Не. Тема постоянно всплывает в свете выдать липовую исполнительную.
Неоднократно видел с решениями и здесь и не здесь.
Это не липовая исполнительная. Это обычное состояние исполнительной
white_cat вне форума  
 
Непрочитано 10.09.2013, 19:33
1 | #9
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Цитата:
Сообщение от white_cat Посмотреть сообщение
Может, поможет мне кто с решением моего вопроса.
Нужно, чтобы случайные числа генерировались в пределах от -0,002 до +0,002 с шагом в 0,001. Возможно ли это? Причем знаки + и - тоже должны ставиться, а если будет попадать на 0,000 то без знака. Заранее благодарен.
Указываешь диапазон минимум = -2
максимум=2
делитель = 1000
Код:
[Выделить все]
;;; ************************************************************************
;;; * Библиотека DWGruLispLib Copyright ©2007  DWGru Programmers Group
;;; *
;;; *http://dwg.ru/f/showthread.php?p=218772
;;; *
;;; * _dwgru-random
;;; *
;;;  На основе vk_RandNum
;;;  http://www.caduser.ru/forum/index.php...&TID=32763
;;; *
;;; *
;;; * 07/12/2007 Версия 0001.  Редакция Владимир Азарко (VVA)
;;; ************************************************************************
(defun _dwgru-random (/ modulus multiplier increment)
;;; Генерирует случайное вещественное число в диапазоне от 0 до 1
;;; Используется глобальная переменная *DWGRU_SEED*
  (if (not *DWGRU_SEED*)
    (setq *DWGRU_SEED* (getvar "DATE"))
  )
  (setq  modulus     65536
  multiplier 25173
  increment  13849
  *DWGRU_SEED*     (rem (+ (* multiplier *DWGRU_SEED*) increment) modulus))
  (/ *DWGRU_SEED* modulus)
)
;;; ************************************************************************
;;; * Библиотека DWGruLispLib Copyright ©2007  DWGru Programmers Group
;;; *
;;; * dwgru-random-range
;;; *
;;; *http://dwg.ru/f/showthread.php?p=218772
;;; *
;;; * 07/12/2007 Версия 0001.  Редакция Владимир Азарко (VVA)
;;; ************************************************************************
(defun dwgru-random-range (Minnum Maxnum )
;;; Генерирует случайное число из указанного диапазона целых чисел
;;; Использует функцию библиотеки
    ;;;                 _dwgru-random
    ;;; Параметры:
    ;;; Minnum - минимальное целое число
    ;;; Maxnum - максимальное целое число
    ;;; Возврат:
    ;;;   целое число из указанного диапазона
    ;;; Пример:
  ;|
  (DWGRU-NUM-RANDOM-RANGE 1 15) ;_Результат 3
  (DWGRU-NUM-RANDOM-RANGE 1 15) ;_Результат 10
  |;
;(- Maxnum (atoi (rtos (* (- Maxnum Minnum) (_dwgru-num-random)) 2 0))) ;_Comment VVA 07.12.2007 Было так
(- Maxnum (fix (* (- Maxnum Minnum) (_dwgru-random)))) ;_Add VVA 07.12.2007 Так наверное быстрее
)
;;Text Random number
;;http://forum.dwg.ru/showthread.php?t=73576
(defun c:TRN (/ From To SS Ent Num i Kf dz)
(initget 1)
(setq From (getint "Укажите диапазон. Минимум: "))
(while
  (progn
    (initget 1)
    (not (> (setq To (getint "Укажите диапазон. Максимум: ")) From))
    )
)
  (initget 3)
(setq Kf (getdist "\nУкажите делитель: "))  
(and
(setq SS (ssget "_:L" '((0 . "*TEXT"))))
(setq dz (getvar "DIMZIN"))
(setvar "DImZIN" 0)
(repeat (setq i (sslength SS)) ;_ end setq
  (setq Ent (entget (ssname SS (setq i (1- i)))))
  (setq Num (dwgru-random-range From To))
  (entmod (subst (cons 1
                       (cond ((zerop Num)(rtos (/ Num Kf) 2 3))
                             ((minusp NUM)(rtos (/ Num Kf) 2 3))
                             (t (strcat "+" (rtos (/ Num Kf) 2 3)))
                             )
                       )
                 (assoc 1 Ent)
                 Ent
                 )
          )
) ;_ end repeat
(setvar "DImZIN" dz)
)
(princ)
)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 10.09.2013, 19:45
#10
white_cat


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


Цитата:
Сообщение от VVA Посмотреть сообщение
Указываешь диапазон минимум = -2
максимум=2
делитель = 1000
Код:
[Выделить все]
;;; ************************************************************************
;;; * Библиотека DWGruLispLib Copyright ©2007  DWGru Programmers Group
;;; *
;;; *http://dwg.ru/f/showthread.php?p=218772
;;; *
;;; * _dwgru-random
;;; *
;;;  На основе vk_RandNum
;;;  http://www.caduser.ru/forum/index.php...&TID=32763
;;; *
;;; *
;;; * 07/12/2007 Версия 0001.  Редакция Владимир Азарко (VVA)
;;; ************************************************************************
(defun _dwgru-random (/ modulus multiplier increment)
;;; Генерирует случайное вещественное число в диапазоне от 0 до 1
;;; Используется глобальная переменная *DWGRU_SEED*
  (if (not *DWGRU_SEED*)
    (setq *DWGRU_SEED* (getvar "DATE"))
  )
  (setq  modulus     65536
  multiplier 25173
  increment  13849
  *DWGRU_SEED*     (rem (+ (* multiplier *DWGRU_SEED*) increment) modulus))
  (/ *DWGRU_SEED* modulus)
)
;;; ************************************************************************
;;; * Библиотека DWGruLispLib Copyright ©2007  DWGru Programmers Group
;;; *
;;; * dwgru-random-range
;;; *
;;; *http://dwg.ru/f/showthread.php?p=218772
;;; *
;;; * 07/12/2007 Версия 0001.  Редакция Владимир Азарко (VVA)
;;; ************************************************************************
(defun dwgru-random-range (Minnum Maxnum )
;;; Генерирует случайное число из указанного диапазона целых чисел
;;; Использует функцию библиотеки
    ;;;                 _dwgru-random
    ;;; Параметры:
    ;;; Minnum - минимальное целое число
    ;;; Maxnum - максимальное целое число
    ;;; Возврат:
    ;;;   целое число из указанного диапазона
    ;;; Пример:
  ;|
  (DWGRU-NUM-RANDOM-RANGE 1 15) ;_Результат 3
  (DWGRU-NUM-RANDOM-RANGE 1 15) ;_Результат 10
  |;
;(- Maxnum (atoi (rtos (* (- Maxnum Minnum) (_dwgru-num-random)) 2 0))) ;_Comment VVA 07.12.2007 Было так
(- Maxnum (fix (* (- Maxnum Minnum) (_dwgru-random)))) ;_Add VVA 07.12.2007 Так наверное быстрее
)
;;Text Random number
;;http://forum.dwg.ru/showthread.php?t=73576
(defun c:TRN (/ From To SS Ent Num i Kf dz)
(initget 1)
(setq From (getint "Укажите диапазон. Минимум: "))
(while
  (progn
    (initget 1)
    (not (> (setq To (getint "Укажите диапазон. Максимум: ")) From))
    )
)
  (initget 3)
(setq Kf (getdist "\nУкажите делитель: "))  
(and
(setq SS (ssget "_:L" '((0 . "*TEXT"))))
(setq dz (getvar "DIMZIN"))
(setvar "DImZIN" 0)
(repeat (setq i (sslength SS)) ;_ end setq
  (setq Ent (entget (ssname SS (setq i (1- i)))))
  (setq Num (dwgru-random-range From To))
  (entmod (subst (cons 1
                       (cond ((zerop Num)(rtos (/ Num Kf) 2 3))
                             ((minusp NUM)(rtos (/ Num Kf) 2 3))
                             (t (strcat "+" (rtos (/ Num Kf) 2 3)))
                             )
                       )
                 (assoc 1 Ent)
                 Ent
                 )
          )
) ;_ end repeat
(setvar "DImZIN" dz)
)
(princ)
)
Это именно то, что мне нужно спасибо огромное! Но появился еще один вопрос как сделать случайные числа от -0,020 до +0,020 с шагом в 0,005?

Последний раз редактировалось white_cat, 11.09.2013 в 14:43.
white_cat вне форума  
 
Непрочитано 17.05.2016, 13:26
#11
Fiz


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


Подскажите как доработать чтобы он вставлял числа в таблицы Autocad в указанном диапазоне ячеек.
Fiz вне форума  
 
Непрочитано 28.04.2017, 09:28
#12
Sobir


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


Цитата:
Сообщение от white_cat Посмотреть сообщение
Это именно то, что мне нужно спасибо огромное! Но появился еще один вопрос как сделать случайные числа от -0,020 до +0,020 с шагом в 0,005?
какой командой запускается этот лисп?
Sobir вне форума  
 
Непрочитано 28.04.2017, 21:14
#13
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Цитата:
Сообщение от Sobir Посмотреть сообщение
какой командой запускается этот лисп?
Красной
Цитата:
...
;Text Random number
;;http://forum.dwg.ru/showthread.php?t=73576
(defun c:TRN (/ From To SS Ent Num i Kf dz)
...
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 29.04.2017, 11:23
#14
Sobir


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


Цитата:
Сообщение от VVA Посмотреть сообщение
Красной
ОГРОМНЕЙШЕЕ СПАСИБО.
Sobir вне форума  
 
Непрочитано 29.11.2017, 19:15
#15
silverwind


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


Цитата:
Сообщение от VVA Посмотреть сообщение
Указываешь диапазон минимум = -2
максимум=2
делитель = 1000
Код:
[Выделить все]
;;; ************************************************************************
;;; * Библиотека DWGruLispLib Copyright ©2007  DWGru Programmers Group
;;; *
;;; *http://dwg.ru/f/showthread.php?p=218772
;;; *
;;; * _dwgru-random
;;; *
;;;  На основе vk_RandNum
;;;  http://www.caduser.ru/forum/index.php...&TID=32763
;;; *
;;; *
;;; * 07/12/2007 Версия 0001.  Редакция Владимир Азарко (VVA)
;;; ************************************************************************
(defun _dwgru-random (/ modulus multiplier increment)
;;; Генерирует случайное вещественное число в диапазоне от 0 до 1
;;; Используется глобальная переменная *DWGRU_SEED*
  (if (not *DWGRU_SEED*)
    (setq *DWGRU_SEED* (getvar "DATE"))
  )
  (setq  modulus     65536
  multiplier 25173
  increment  13849
  *DWGRU_SEED*     (rem (+ (* multiplier *DWGRU_SEED*) increment) modulus))
  (/ *DWGRU_SEED* modulus)
)
;;; ************************************************************************
;;; * Библиотека DWGruLispLib Copyright ©2007  DWGru Programmers Group
;;; *
;;; * dwgru-random-range
;;; *
;;; *http://dwg.ru/f/showthread.php?p=218772
;;; *
;;; * 07/12/2007 Версия 0001.  Редакция Владимир Азарко (VVA)
;;; ************************************************************************
(defun dwgru-random-range (Minnum Maxnum )
;;; Генерирует случайное число из указанного диапазона целых чисел
;;; Использует функцию библиотеки
    ;;;                 _dwgru-random
    ;;; Параметры:
    ;;; Minnum - минимальное целое число
    ;;; Maxnum - максимальное целое число
    ;;; Возврат:
    ;;;   целое число из указанного диапазона
    ;;; Пример:
  ;|
  (DWGRU-NUM-RANDOM-RANGE 1 15) ;_Результат 3
  (DWGRU-NUM-RANDOM-RANGE 1 15) ;_Результат 10
  |;
;(- Maxnum (atoi (rtos (* (- Maxnum Minnum) (_dwgru-num-random)) 2 0))) ;_Comment VVA 07.12.2007 Было так
(- Maxnum (fix (* (- Maxnum Minnum) (_dwgru-random)))) ;_Add VVA 07.12.2007 Так наверное быстрее
)
;;Text Random number
;;http://forum.dwg.ru/showthread.php?t=73576
(defun c:TRN (/ From To SS Ent Num i Kf dz)
(initget 1)
(setq From (getint "Укажите диапазон. Минимум: "))
(while
  (progn
    (initget 1)
    (not (> (setq To (getint "Укажите диапазон. Максимум: ")) From))
    )
)
  (initget 3)
(setq Kf (getdist "\nУкажите делитель: "))  
(and
(setq SS (ssget "_:L" '((0 . "*TEXT"))))
(setq dz (getvar "DIMZIN"))
(setvar "DImZIN" 0)
(repeat (setq i (sslength SS)) ;_ end setq
  (setq Ent (entget (ssname SS (setq i (1- i)))))
  (setq Num (dwgru-random-range From To))
  (entmod (subst (cons 1
                       (cond ((zerop Num)(rtos (/ Num Kf) 2 3))
                             ((minusp NUM)(rtos (/ Num Kf) 2 3))
                             (t (strcat "+" (rtos (/ Num Kf) 2 3)))
                             )
                       )
                 (assoc 1 Ent)
                 Ent
                 )
          )
) ;_ end repeat
(setvar "DImZIN" dz)
)
(princ)
)
Огромное спасибо за этот лисп!
А как его оптимизировать, чтобы числа округлялись до целых? (сейчас округляет до 0.000(
спасибо1
silverwind вне форума  
 
Непрочитано 30.11.2017, 12:01
#16
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


silverwind, Заменить в строчках
Цитата:
(rtos (/ Num Kf) 2 3)
Цифру 3 (округлять до 3-х знаков) на 0
Цитата:
(rtos (/ Num Kf) 2 0)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 12.10.2018, 13:29
#17
Gore14


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


Круто! А есть то же самое, только для атрибутов блоков или мультивыносок?
Gore14 вне форума  
 
Непрочитано 17.10.2018, 09:09
#18
Gore14


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


У меня при работе этого LISPа, минимальное значение работает немного некорректно. Например, при диапазоне -2:+2, Получившиеся значения будут: -1, 0, +1, +2
То есть, мне нужно ставить диапазон от -3 до +2
Gore14 вне форума  
 
Непрочитано 04.03.2021, 16:23
1 | #19
v.psk

конструктор
 
Регистрация: 14.08.2014
Псков
Сообщений: 7,096


подскажите пожалуйста
появилась потребность использовать лисп, который добавляет к множеству объектов "текст" в автокаде случайное вещественное число.
то есть, например при вводе амплитуды 1.5 и шага 0.1, к выбранной куче текста добавляется или вычитается случайное и разное число от 0 до 1.5 с шагом 0.1.
как образец взял код из №14 отсюда
https://www.caduser.ru/forum/topic42654.html
вроде бы работает как и должен, но не догадался как переделать под числа с двумя разрядами
... Offtop: интуитивно догадываюсь что надо влезть в initget, и конвертацию atoi, itoa и т.п., но код так и не заработал
спасибо
Код:
[Выделить все]
 
(defun vk_RandNum (/ modulus multiplier increment random)
(if (not *seed*)
(setq *seed* (getvar "DATE"))
)
(setq modulus 65536
multiplier 25173
increment 13849
*seed* (rem (+ (* multiplier *seed*) increment) modulus)
random (/ *seed* modulus)
)
)
(defun c:tr2 (/ From To Diff SS Ent +Sign Num lst i)
(initget 5)
(setq To (getint "Max величина разброса значений: "))
(setq From (- 0 To))
(setq +Sign (if (< From 0)
"+"
""
)
)
(setq Diff (- To From))
(while (setq SS (ssget "_:S:L" (list (cons 0 "TEXT"))))
(setq Num (- To (atoi (rtos (* Diff (vk_RandNum)) 2 0))))
(setq i '-1)
(while (< (setq i (1+ i))(sslength SS))
  (setq Ent (entget (ssname SS i)))
  (setq Ent
(if (assoc 62 Ent)
  (subst
    (cons 62 3) ;_ 3 - зеленый цвет
    (assoc 62 Ent)
    Ent
    )
    (append Ent
    (list
      (cons 62 3) ;_ 3 - зеленый цвет
      )
      )
  )
      )
(entmod
(subst
(cons 1
      (itoa (+ (atoi(cdr(assoc 1 Ent))) Num))
)
(assoc 1 Ent)
Ent
)
)
  )
)
(princ)
)
v.psk вне форума  
 
Непрочитано 05.03.2021, 10:28
1 | #20
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,665


Код:
[Выделить все]
 
;*********************************************************************************************************************************************************

(vl-load-com)

;*********************************************************************************************************************************************************

(defun c:tr2 (/ text_index init max_value ignore_empty_sset text_sset text_object text_entity 3_aci_color_object)

	;******************************************************************************

	(defun vk_RandNum (/ modulus multiplier increment random)
		(if (not *seed*)
			(setq *seed* (getvar "DATE"))
		)
		(setq modulus 65536
			  multiplier 25173
		  	  increment 13849
			  *seed* (rem (+ (* multiplier *seed*) increment) modulus)
			  random (/ *seed* modulus)
		)
	)

	;******************************************************************************

	(defun random_sign (random_value /)
		(/ random_value (abs random_value))
	)

	;******************************************************************************

	(vla-startundomark (vla-get-activedocument (vlax-get-acad-object)))
	(repeat (sslength (setq text_index -1
			  				init (initget 7)
			  				max_value (getreal "Max величина разброса значений: ")
			  				init (initget 7)
							number_after_point (getint "Количество знаков после запятой: ")
							ignore_empty_sset (while (null (setq text_sset (vl-catch-all-apply 'ssget (list "_:L" '((0 . "*text")))))))
							text_sset (cond
											(
												(vl-catch-all-error-p text_sset)
													(princ "\nОтмена команды")
													(ssadd)
											)
											(
												t
													text_sset
											)
									  )
					  )
			)
		(setq text_object (vlax-ename->vla-object (setq text_entity (ssname text_sset (setq text_index (1+ text_index))))))
		(vla-put-textstring text_object (rtos (+ (atof (vla-get-textstring text_object)) (atof (rtos (* max_value (vk_RandNum) (random_sign (sin (* 2 pi (vk_RandNum))))) 2 number_after_point)))))
		(setq 3_aci_color_object (vlax-create-object (strcat "AutoCAD.AcCmColor." (substr (getvar 'acadver) 1 2))))
		(vla-put-colormethod 3_aci_color_object acColorMethodByACI)
		(vla-put-colorindex 3_aci_color_object 3)
		(vla-put-truecolor text_object 3_aci_color_object)
	)
	(vla-endundomark (vla-get-activedocument (vlax-get-acad-object)))
	(princ)
)

;*********************************************************************************************************************************************************

Последний раз редактировалось koMon, 05.03.2021 в 14:46.
koMon вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Случайные числа в тексте

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание автоматически обновляемых номеров таблиц в Word и сылок на эти таблицы в тексте МишаИнженер Прочее. Программное обеспечение 11 11.11.2016 14:05
размеры - числа после запятой soulkeeper AutoCAD 9 11.03.2008 11:17
Случайные динамические нагрузки loje4ka Конструкции зданий и сооружений 10 25.01.2008 09:04