Изменение ширины полилиний в блоке
(defun ru-block-lw-name (name pline_width scale / base)
;|
Создает имя, в которое входит базовое имя блока, ширина полилинии и масштаб
Может передаваться имя блока, в котором уже есть ширина - при редактировании
Пример:
Исходное имя К-50-80-160
После первого применения* (snvalid "RU-LW(К-50-80-160)50000-мм-1000") T
1. (ru-block-lw-name "К-50-80-160" 50.0 1)
"RU-LW(К-50-80-160)50000-мм-1000"
2. (ru-block-lw-name "RU-LW(К-50-80-160)50000-мм-1000" 50.0 1)
"RU-LW(К-50-80-160)50000-мм-1000"
3. (ru-block-lw-name "RU-LW(К-50-80-160)50000-мм-1000" 25.0 1)
"RU-LW(К-50-80-160)25000-мм-1000"
4. (ru-block-lw-name "RU-LW(К-50-80-160)50000-мм-1000" 25.0 0.5)
"RU-LW(К-50-80-160)25000-мм-500"
5. (ru-block-lw-name "RU-LW(К-50-80-160)50000-мм-1000" 25.0 0.5)
"RU-LW(К-50-80-160)25000-мм-500"
|;
(strcat "RU-LW("
(if (setq base (ru-string-word-or-nil
name
2
(list "(" ")")
) ;_ end of ru-string-word-or-nil
) ;_ end of setq
base
name
) ;_ end of if
")"
(itoa (fix (* pline_width 1000)))
"-"
(ru-unit-name)
"-"
(itoa (fix (* scale 1000))
) ;_ end of ru-string-word
) ;_ end of strcat
) ;_ end of defun
(defun ru-block-lw-change
(ent name ins_pnt ang
scale / do_insert pline_width
)
;|--------------------------------------------------------------------
Вычисляем требуемую ширину полилинй. Для этого извлекаем ВЕС линий своей
функцией ru-lw-current. Она возвращает результат в единицах LW.
Это число мы считаем за единицу рисунка, переводим в мм на бумаге,
а потом обратно в единицы для ширины полилиний.
Не забываем целое перевести в действительное число
---------------------------------------------------------------------|;
(setq
pline_width
(ru-conv-millimeter-in-paper-to-unit
(ru-conv-unit-to-millimeter-in-paper (* 1.0 (ru-lw-current)))
) ;_ end of ru-conv-millimeter-in-paper-to-unit
;|--------------------------------------------------------------------
Вычисляем требуемое имя блока, включающее параметры ширины, единиц и масштаба
---------------------------------------------------------------------|;
name (ru-block-lw-name name pline_width scale)
) ;_ end of setq
(if (tblsearch "BLOCK" name)
;|--------------------------------------------------------------------
Если блок с новым именем уже определен, стираем вставку прототипа
---------------------------------------------------------------------|;
(progn
(entdel ent)
(setq do_insert t)
) ;_ end of progn
(if
(ru-block-obj-make-def-from-insert
ent
name
(- ang)
"0"
acbyblock
aclnwtbylwdefault
pline_width
) ;_ end of ru-block-obj-make-def-from-insert
(setq do_insert t)
(princ (strcat "Не создан блок " name))
) ;_ end of if
) ;_ end of if
;; А вдруг есть атрибуты
(if do_insert
(ru-block-insert-attedit name ins_pnt scale scale scale ang)
) ;_ end of if
do_insert
) ;_ end of defun