| |
BIGLIB |
| большущая библиотека (9812 книг), можно не только прочитать но и скачать бесплатно |
|
| |
ФАНТАСТИКА |
| фентези,
фантастика, фантастические повести |
|
| |
ФИЛОСОФИЯ |
книги, которые заставляют
задуматься над окружающим тебя миром.
|
|
| |
МЕДИЦИНА |
медицинские книги,
методички,
народные лечебники |
|
| |
КУЛИНАРИЯ |
рецепты
тортов, консервирование,
все о спиртных
напитках. |
|
| |
СТИХИ |
| стихи популярных
и не очень авторов |
|
| |
ТВОРЧЕСТВО |
| народное творчество,
стихи, песни и т.д. |
|
| |
ЮМОР |
| анекдоты, приколы,
смешные истории |
|
| |
ЭРОТИКА |
| эротические рассказы,
книги о технике секса,
кама-сутра и др. |
|
|
| |
 |
щий цвет, тип линии, возвышение или толщину этих специфицируемых объе- :
ктов. :
:
:
5. 8. 3. Изменение уровня примитива
Это вариации команды SETLAYER , приведенной выше. Лучше, чем ус- :
тановление текущего уровня , эта команда изменяет выбранные объекты, :
для того чтобы иметь тот же самый уровень , как и у другого выбранного :
объекта. :
:
(defun C:CHGLAYER (/ ss e n) :
(princ "Select objects to be change ...\n") :
- 79 -
Руководство пользователя по АВТОЛИСПу
:
; Основной набор выбора (selection-set) :
(setq ss(ssget)) :
:
:
:
;Если любые выбранные объекты.... :
(if ss (progn :
(setq e (car (entsel "Pick an object on the desired :
layer: "))) :
:
; Если объект был выбран... :
(if e (progn :
:
; Перейди на эту группу данных :
(setq e (entget e)) :
:
; Группа 8 - это имя уровня :
(setq n (cdr (assoc 8 e))) :
(command "CHANGE" SS "" "PROP" "LAYER" n "") :
)) :
)) :
) :
:
В этом примере наборы выбора ( selection - set) объектов , кото-:
рые можно изменить , устанавливаются символом SS. Можно применять однаж-:
ды установленное имя уровня ( из 8 группы выбранного объекта), выбор :
набора ( selection - set ) SS проходит к команде "CHANGE Properties" :
( изменение собственности) , чтобы вызвать эффект желаемого изменения. :
:
5. 8. 4. Текстовый редактор
Программа, приведенная ниже , выполняет команду CHGTEXT для ос-
новного редактирования текстов. Она допускает, что вы обозначаете
"new string" (новая строка), чтобы ею заменить в каждом случае ста-
рую строку ("old string"), которая обнаружена в выбранном тексте.
Вы можете легко расширять это , чтобы любой текст по вашему желанию ре-
дактировался .
; Изменение подстроки в выбранном текстовом примитиве
(defun C:CHGTEXT (/ p l n e os as ns s nsl osl sl si chf chm)
(setq p (ssget)) ; Выберите объекты
(if p (progn ; Если любые объекты выбраны...
(setq osl (strlen (setq os (getstring "\nOld string: "t))))
(setq nsl (strlen (setq ns (getstring "\nNew string: "t))))
(setq l 0 chm 0 n (sslength p))
(while (< l n) ; Для каждого выбранного объекта...
(if (= "TEXT" ; Смотри тип примитива ТЕКСТ (группа 0)
(cdr (assoc 0 (setq e (entget (ssname p l))))))
(progn ; Обнаружен один... смотри старую строку
(setq chf nil si 1)
(setq s (cdr (setq as (assoc 1 e))))
(while (= osl (setq sl (strlen
(setq st (substr s si osl)))))
- 80 -
Руководство пользователя по АВТОЛИСПу
(if (= st os) (progn
(setq s (strcat (substr s 1 (1 si)) ns
(substr s (+ si ost))))
(setq chf t) ; Обнаружена старая строка
))
(setq si (1+ si))
)
(if chf (progn ; Заменитель новой строки на старую
(setq e (subst (cons 1 s) as e))
(entmod e) ; Текстовый примитив
(setq chm (1+ chm))
))
)
)
(setq l (1+ l))
)
))
(princ "Changed") ; Печать полностью измененных линий
(princ chm)
(princ " text lines.")
(terpri)
)
Здесь, набор выбора Р (selесtion -set P) исследуется для примити-
вов текста , содержащих в себе специфицируемую старую строку( "old
string"). Для каждого подобранного примитива текста, функции STRCAT и
SUBSTR обычно формируют новую текстовую строку, которая во всех случаях
заменяет старую строку (old string) на новую строку ( new string). Испо-
льзуя SUBST,вы построите новую строку, заменяющую группу 1 в текстовом
примитиве, и затем обычно ENTMOD откорректирует примитив в базе данных
чертежа и на экране.
5. 8. 5. Обновление данных
Считайте, по соглашению ,что вы вставляете блок, называемый
"TITLE", в каждый чертеж и , что этот блок имеет аттрибуты , называемые
"REVDATE",которые означают данные последней ревизии. Следующая программа
выполняет команду REVISE, которая обнаруживает этот блок и корректирует
его аттрибуты. Сначала определяется пара функциональных утилит.
; Ввод текущих данных в формате MM/DD/YY
(defun mmddyy (/ x)
(setq x (getvar "CDATE")) ; Текущие данные
(setq x (rtos x 2 0)) ; Обращение к строке
(setq date (strcat (substr x 5 2) "/" ;MM
(substr x 7 2) "/" ;DD
(substr x 3 2))) ;YY
)
; Возврат содержания примитива поля "num"
(defun fld (num)
(cdr (assoc num d))
)
- 81 -
Руководство пользователя по АВТОЛИСПу
; Поиск аттрибутов REVDATE в блоке TITLE и обновление
(defun C:REVISE (/ e d date done)
(setq done nil)
(setq e (entnext) ; Первый объект в чертеже
(while e
(setq d (entget e) ; Получение групп данных
; примитива
(if (and (= (fld 0) "INSERT") ; Имеется ли INSERT ?
(= (fld 2) "TITLE") ; ... имя TITLE?
(= (fld 66) 1)) ; ... АТТРИбУТЫ?
(progn
(setq e (entnext e)) ; Получение подпримитива
(аттрибута)
(while e
(setq d (entget e)) ; Получение подпримитивов
; групп данных
(cond ((and (= (fld 0) "ATTRIB") ; Искать
(= (fld 2) "REVDATE")) ; Аттрибуты
; REVDATE
(mmddyy)
(setq d (subst (cons 1 date) (assoc 1 d))
; Новые данные
(entmod d) ; Изменение аттрибутов
; переменных
(entupd e) ; Регенерация блока
(setq e nil done T)) ; Были выполнены
((= (fld 0) "ENDSEQ")
(setq e nil)) ; Нет аттрибутов REVDATE;
; останов сканирования
(T (setq e (entnext e))) ; Ввод следующего
; подпримитива
)
)
)
(setq e (entnext e)) ;Нет блока TITLE, вход
; следующего примитива
)
)
(if done "Revision date updated" "No REVDATE attribute found")
)
Команда REVISE проверяет группу 0 ( тип примитива) каждого прими-
тива в чертеже , просматривая упоминаемый блок ( фцнкция INSERT), кото-
рый назван " TITLE". Затем она сканирует подпримитивы этого блока (его
|
adfun.ru
|
|
|
|