VetCAD

LISP для замены высоты текста на чертеже

    2 оценки

Palka

размещено: 11 Ноября 2024
обновлено: 11 Ноября 2024
Всем привет.
Создал LISP для округления текста.
Суть такая:
по команде AdjustTextHeight он перебирает на чертеже весь текст и делает его кратным 0.5.
Программа может быть полезна для тех кто работает в Tekla Structure.
При выгрузке в dwg он текст выгружает с грязной высотой: 2.14343 или 3.23434.
LISP для замены высоты текста на чертеже1

Комментарии

Комментарии могут оставлять только зарегистрированные участники
Авторизоваться
Комментарии 1-8 из 8
Автон , 12 ноября 2024 в 02:54
#1
Спасибо! Отлично работает
Ingpro , 14 ноября 2024 в 09:57
#2
Спасибо, а как изменить лисп, чтобы округлить тексты 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]
На работоспособность не проверял.
zip

0.1 МБ

СКАЧАТЬ