Re: Замена чисел случайным образом в указанных пределах

> Donhuan
взорвать не проблема. Все равно приходится тупо копировать числа под размерную черту. Это полдня. А по поводу изучения - ну изучаю. Добралась до самостоятельной отрисовки рамки и углового штампа в ЛИСПе. А как посмотрю на тот или иной код Мастеров - голова крУгом идет. Мне до такого лет двести как минимум. Все эти car-ы, caddr-ы, vlax-ы... Жуть...
Ну помогите!

Re: Замена чисел случайным образом в указанных пределах

> Малявка
Какие у тебя dimension? Rotated или Aligned?
Под каким углом Text в размерах?

Re: Замена чисел случайным образом в указанных пределах

> Makson
Короче, всё перпендикулярно и параллельно. Элементарные прямоугольники-фундаменты с вложенными прямоугольниками-стаканами для будущих колонн.Всё это безобразие образмерено где только возможно.
Пока повернутых фундаментов не встречалось. Однако, если есть возможность, на будущее можно предусмотреть и это (хотя, с моей стороны, это уже наглость, прошу простить. А с другой стороны, действительно, может пригодиться повернутый размер).

Re: Замена чисел случайным образом в указанных пределах

текст в размерах прямой (а что, если наклонный, то уже пойдет усложнение кода?).
Обычно используем шрифт RUSS, редко STANDARD.

Re: Замена чисел случайным образом в указанных пределах

> Малявка
Помимо задумчивости есть еще и отпуск, лето, пляж, футбол и пиво :)

Наш геодезист совсем обнаглел — увидел, как я быстро справилась с предыдущим чертежом, так он на шею сел и ножки свесил — уже через шефа дал следующий чертеж безо всякой подготовки, как раньше сам делал.

Честно скажу, мне за тебя страшно. Это сколько работы можно еще повесить на хрупкие  плечи блондинки. :)
Команда DIMR
Обрабатывает Rotated или Aligned размеры.
Копирует размер на слой "Факт" и под чертой проставляет текст красного цвета с указанным отклонением.
Не обрабатывает размеры, у которых задано Textoverride. Т.е. размер должен вычисляться

(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)
)
)
;;https://www.caduser.ru/forum/topic42654.html
(defun c:DIMR (/ *actdoc* selset item temp_text i To From +Sign Diff Num)
  (vl-load-com)
  (setq *actdoc* (vla-get-activedocument (vlax-get-acad-object)))
  (vla-startundomark *actdoc*)
(initget 5)
(setq To (getint "Max величина разброса значений: "))
(setq From (- 0 To))
(setq +Sign (if (< From 0)
"+"
""
)
)
(setq Diff (- To From))
  (setq selset (ssget "_:L" '((0 . "DIMENSION"))) i '-1)
  (while (and selset
          (setq item (ssname selset (setq i (1+ i))))
          ) ;_ end of and
    (if    (and (member '(100 . "AcDbAlignedDimension") (entget item))
      (setq item (vlax-ename->vla-object item))
      (member (vla-get-textoverride item) '("" "<>"))
         )    
      (progn
    (setq dmob (vla-copy item))
    (vlax-put-property dmob "textcolor" 1)
    (setq dimtext
    (rtos (vla-get-measurement dmob)
        (vla-get-UnitsFormat dmob) (vla-get-PrimaryUnitsPrecision dmob)))
    (setq dimtext (atof dimtext))
        (setq Num (- To (* Diff (vk_RandNum))))
    (setq dimtext (+ dimtext Num))
    (setq dimtext (rtos dimtext
        (vla-get-UnitsFormat dmob) (vla-get-PrimaryUnitsPrecision dmob)))
    (if (/= (vla-get-DecimalSeparator dmob) ".")
      (setq dimtext
         (vl-string-subst (vla-get-DecimalSeparator dmob) "."  dimtext)
        )
      )
    (vla-put-TextOverride dmob (strcat "\\X" dimtext))
    (entmod
      (subst (cons 8 "ФАКТ")
         (assoc 8 (setq item (entget(vlax-vla-object->ename dmob))))
         item)
      )
    ) ;_ end of progn
      ) ;_ end of if
    ) ;_ end of while
  (vla-endundomark *actdoc*)
  (princ)
  ) ;_ end of defun

Re: Замена чисел случайным образом в указанных пределах

> VVA
Кр...кр..кр...круууто....
Я аж заикаться стала. Спасибо огромное! Чмоки тя куда только хочешь.А про блондинку - так не блондинка я. Просто прикалываюсь так. И немножечко им (блондинкам) завидую.
Еще раз спасибо!!!

Re: Замена чисел случайным образом в указанных пределах

VVA пишет:

(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)
)
)
;;https://www.caduser.ru/forum/topic42654.html
(defun c:DIMR (/ *actdoc* selset item temp_text i To From +Sign Diff Num)
  (vl-load-com)
  (setq *actdoc* (vla-get-activedocument (vlax-get-acad-object)))
  (vla-startundomark *actdoc*)
(initget 5)
(setq To (getint "Max величина разброса значений: "))
(setq From (- 0 To))
(setq +Sign (if (< From 0)
"+"
""
)
)
(setq Diff (- To From))
  (setq selset (ssget "_:L" '((0 . "DIMENSION"))) i '-1)
  (while (and selset
         (setq item (ssname selset (setq i (1+ i))))
         ) ;_ end of and
    (if   (and (member '(100 . "AcDbAlignedDimension") (entget item))
     (setq item (vlax-ename->vla-object item))
     (member (vla-get-textoverride item) '("" "<>"))
        )   
      (progn
   (setq dmob (vla-copy item))
   (vlax-put-property dmob "textcolor" 1)
   (setq dimtext
   (rtos (vla-get-measurement dmob)
      (vla-get-UnitsFormat dmob) (vla-get-PrimaryUnitsPrecision dmob)))
   (setq dimtext (atof dimtext))
        (setq Num (- To (* Diff (vk_RandNum))))
   (setq dimtext (+ dimtext Num))
   (setq dimtext (rtos dimtext
      (vla-get-UnitsFormat dmob) (vla-get-PrimaryUnitsPrecision dmob)))
   (if (/= (vla-get-DecimalSeparator dmob) ".")
     (setq dimtext
       (vl-string-subst (vla-get-DecimalSeparator dmob) "."  dimtext)
      )
     )
   (vla-put-TextOverride dmob (strcat "\\X" dimtext))
   (entmod
     (subst (cons 8 "ФАКТ")
       (assoc 8 (setq item (entget(vlax-vla-object->ename dmob))))
       item)
     )
   ) ;_ end of progn
      ) ;_ end of if
    ) ;_ end of while
  (vla-endundomark *actdoc*)
  (princ)
  ) ;_ end of defun

подскажите как его ставить

Re: Замена чисел случайным образом в указанных пределах

работает но не хочет выбирать обьект, помогите

Re: Замена чисел случайным образом в указанных пределах

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

Re: Замена чисел случайным образом в указанных пределах

Нужно, чтобы случайные числа генерировались в пределах от -0,002 до +0,002 с шагом в 0,001. Возможно ли это?

Re: Замена чисел случайным образом в указанных пределах

Шелдон Шелдон пишет:

работает но не хочет выбирать обьект, помогите

В посте #30 есть пояснение к коду

Обрабатывает Rotated или Aligned размеры.

Скорее всего у тебя линейный горизонтальный или вертикальный размер

(изменено: g1kon, 27 апреля 2023г. 09:26:31, причина: ошибка)

Re: Замена чисел случайным образом в указанных пределах

Малявка пишет:

(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:tr (/ From To Diff SS Ent +Sign Num)
(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)
)
)

Подскажите пожалуйста как сделать так, чтобы это работало, или может быть есть альтернативный способ. AUTOCAD 2017.
Выдает ошибку:
Команда: TR
From: -3
To: 3
; ошибка: неверная строка режима ssget

Делаю следующее: выбираю текстовые значения, ввожу команду TR, from = -3, to = 3, ошибка

Задача точно такая же как и у топикстартера, есть много текстовых цифровых значений (разных), нужно изменить скриптом эти значения относительно исходных в пределах +/- 3 мм. Из-за того, что исходные значения слишком разные, генераторы в духе изменения чисел в рамках диапазона не подходят. Нужно, чтобы значение менялось именно относительно существующего значения в пределах +/- 3 мм.