размещено: 11 Ноября 2024 обновлено: 11 Ноября 2024
Всем привет.
Создал LISP для округления текста.
Суть такая:
по команде AdjustTextHeight он перебирает на чертеже весь текст и делает его кратным 0.5.
Программа может быть полезна для тех кто работает в Tekla Structure.
При выгрузке в dwg он текст выгружает с грязной высотой: 2.14343 или 3.23434.
Комментарии
Комментарии могут оставлять только зарегистрированные
участники Авторизоваться
Спасибо, а как изменить лисп, чтобы округлить тексты 256, 347, 450.32...
до 250, 350, 450 соответственно?
Palka
, 14 ноября 2024 в 17:24
#3
Цитата:
Сообщение #2 от Ingpro
Спасибо, а как изменить лисп, чтобы округлить тексты 256, 347, 450.32...
до 250, 350, 450 соответственно?
Хм, попробуйте в формулах 0.5 заменить на 5. Если честно некогда проверять. Мб позже попробую написать.
Ingpro
, 14 ноября 2024 в 18:38
#4
Цитата:
Сообщение #3 от Palka попробуйте в формулах 0.5 заменить на 5
Не получается не 5, не 10...
Автон
, 15 ноября 2024 в 03:20
#5
Цитата:
Сообщение #2 от Ingpro
Спасибо, а как изменить лисп, чтобы округлить тексты 256, 347, 450.32...
до 250, 350, 450 соответственно?
Попробуйте третью строку заменить на
(* 100 (* 0.5 (fix (+ 0.5 (/ (/ val 100) 0.5)))))
Ingpro
, 16 ноября 2024 в 11:58
#6
Цитата:
Сообщение #5 от Автон Попробуйте третью строку заменить на
(* 100 (* 0.5 (fix (+ 0.5 (/ (/ val 100) 0.5)))))
С этой строкой код не запускается...
Palka
, 24 декабря 2024 в 18:27
#7
Цитата:
Сообщение #6 от Ingpro
Цитата:Сообщение #5 от АвтонПопробуйте третью строку заменить на
(* 100 (* 0.5 (fix (+ 0.5 (/ (/ val 100) 0.5)))))
С этой строкой код не запускается...
Добрый вечер, только добрался.
Замените код в двух местах на:
(defun round-to-nearest-10 (val)
;; Функция округления до ближайшего кратного 10
(* 10 (fix (+ 0.5 (/ val 10))))
)
.....
;; Рассчитываем новую высоту текста, кратную 10
(setq newHeight (round-to-nearest-10 textHeight))
zvezdochiot
, 17 февраля 2025 в 23:13
#8
Цитата:
Сообщение #7 от Palka Замените код
А ежели так?:
[code]
(defun round-to-nearest (val base)
;; Функция округления до ближайшего кратного 0.5
(* base (fix (+ 0.5 (/ val base))))
)
(defun c:AdjustTextHeight (base / ss i ent textHeight newHeight)
(setq ss (ssget "X" '((0 . "TEXT,MTEXT")))) ; Получаем все текстовые объекты
(if ss
(progn
(setq i 0)
(while (< i (sslength ss))
(setq ent (ssname ss i)) ; Получаем объект текста
(setq textHeight (cdr (assoc 40 (entget ent)))) ; Текущая высота текста
;; Рассчитываем новую высоту текста, кратную base
(setq newHeight (round-to-nearest textHeight base))
;; Обновляем высоту текста, если она отличается
(if (/= textHeight newHeight)
(progn
(entmod (subst (cons 40 newHeight) (assoc 40 (entget ent)) (entget ent)))
(entupd ent)
)
)
(setq i (1+ i))
)
(princ "\nВысота текста обновлена для всех объектов.")
)
(princ "\nНет текстовых объектов на чертеже.")
)
(princ)
)
[/code]
На работоспособность не проверял.
Комментарии
Авторизоваться
до 250, 350, 450 соответственно?
Спасибо, а как изменить лисп, чтобы округлить тексты 256, 347, 450.32...
до 250, 350, 450 соответственно?
Хм, попробуйте в формулах 0.5 заменить на 5. Если честно некогда проверять. Мб позже попробую написать.
попробуйте в формулах 0.5 заменить на 5
Не получается не 5, не 10...
Спасибо, а как изменить лисп, чтобы округлить тексты 256, 347, 450.32...
до 250, 350, 450 соответственно?
Попробуйте третью строку заменить на
(* 100 (* 0.5 (fix (+ 0.5 (/ (/ val 100) 0.5)))))
Попробуйте третью строку заменить на
(* 100 (* 0.5 (fix (+ 0.5 (/ (/ val 100) 0.5)))))
С этой строкой код не запускается...
Цитата:Сообщение #5 от АвтонПопробуйте третью строку заменить на
(* 100 (* 0.5 (fix (+ 0.5 (/ (/ val 100) 0.5)))))
С этой строкой код не запускается...
Добрый вечер, только добрался.
Замените код в двух местах на:
(defun round-to-nearest-10 (val)
;; Функция округления до ближайшего кратного 10
(* 10 (fix (+ 0.5 (/ val 10))))
)
.....
;; Рассчитываем новую высоту текста, кратную 10
(setq newHeight (round-to-nearest-10 textHeight))
Замените код
А ежели так?:
[code]
(defun round-to-nearest (val base)
;; Функция округления до ближайшего кратного 0.5
(* base (fix (+ 0.5 (/ val base))))
)
(defun c:AdjustTextHeight (base / ss i ent textHeight newHeight)
(setq ss (ssget "X" '((0 . "TEXT,MTEXT")))) ; Получаем все текстовые объекты
(if ss
(progn
(setq i 0)
(while (< i (sslength ss))
(setq ent (ssname ss i)) ; Получаем объект текста
(setq textHeight (cdr (assoc 40 (entget ent)))) ; Текущая высота текста
;; Рассчитываем новую высоту текста, кратную base
(setq newHeight (round-to-nearest textHeight base))
;; Обновляем высоту текста, если она отличается
(if (/= textHeight newHeight)
(progn
(entmod (subst (cons 40 newHeight) (assoc 40 (entget ent)) (entget ent)))
(entupd ent)
)
)
(setq i (1+ i))
)
(princ "\nВысота текста обновлена для всех объектов.")
)
(princ "\nНет текстовых объектов на чертеже.")
)
(princ)
)
[/code]
На работоспособность не проверял.