Реклама / ООО «ИЗОЛПРОЕКТ» / ИНН: 7725566484 | ERID: 2Vtzqx6kV7S
IPB IPB
Проектирование, монтаж, наладка, сервис


Здравствуйте, гость ( Вход | Регистрация )

- Стандарт НП «АВОК» 7.11-2024
«Рекомендации по проектированию инженерных систем
дошкольных образовательных организаций»

АВОК в соц. сетях
ИНН: 7714824045 | erid: 2VtzqwzKQiU
 
Добавить ответ в эту темуОткрыть тему
> Лисп. Заменитель функции entmode, Лисп. Заменитель функции entmode
Алекс_Глoz
сообщение 26.7.2010, 10:24
Сообщение #1





Группа: Участники форума
Сообщений: 157
Регистрация: 10.5.2005
Из: Тель Авив
Пользователь №: 755



здравствуйте.
Кто может ответить - на какую функцию заменили entmode ?
Есть ли у кого готовая программа замены layers на другие (сразу нескольких).
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kpblc
сообщение 26.7.2010, 19:53
Сообщение #2


CAD Developer


Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062



Ну, entmod как была, так и осталась. А что там со слоями? Поподробнее бы...
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Алекс_Глoz
сообщение 27.7.2010, 21:54
Сообщение #3





Группа: Участники форума
Сообщений: 157
Регистрация: 10.5.2005
Из: Тель Авив
Пользователь №: 755



Допустим мы запроектировали проект. Вдруг заказчик требует заменить наши слои на определенные им.Чтобы сделать разом на каждом файле а не по слою. Попробовал написать лисп с помощью функций entnext, entget, entmode. Получаю сообщение Функция entmode не определена. не обращайте внимание на текст - писал быстро.

(defun C:CHLAY_ich () ;(/ SS i spl name ceva)
(setq *ERROR* STOP)
(princ "\nSelect Objects to be Changed...")
(initget 1)
(ustmla "HVAC_CHNL_OAIR" 6)
(ustmla "HVAC_CHNL_SPLY" 4)
(ustmla "HVAC_CHNL_EXH" 5)
(ustmla "HVAC_CHNL_FC" 4)
(ustmla "HVAC_CHNL_RA" 3)
(ustmla "HVAC_CHNL_SMOK" 5)
(ustmla "HVAC_CWS" 4)
(ustmla "HVAC_CWR" 4)
(ustmla "HVAC_HWS" 5)
(ustmla "HVAC_HWR" 5)
(ustmla "HVAC_CHWS" 3 )
(ustmla "HVAC_CHWR" 3)
(setq en (entnext))
(setq ed (entget en) spl ed)
; (setq ss (ssadd))
; (ssadd e1 ss)
(setq SS (ssget) lnab (sslength ss))
; (if SS
; (progn
; (setq oll (if (= (sslength ss) 1)
; (cdr (assoc 8 (entget(ssname ss 0))))
; "varies"))
(setq i 0 j 0)
(while (< i lnab)
; (setq spl (entget (ssname ss i)))
; (setq en (entnext))


(if ( = (cdr (assoc 8 spl)) "dfa")
(progn
(setq spl (subst (cons 8 "HVAC_CHNL_OAIR") (assoc 8 spl) spl ))
(entmode spl)
)
)
(if ( = (cdr (assoc 8 spl)) "ds")
(progn
(setq spl (subst (cons 8 "HVAC_CHNL_SPLY") (assoc 8 spl) spl ))
(entmode spl)
)
)
(if ( = (cdr (assoc 8 spl)) "dr")
(progn
(setq spl (subst (cons 8 "HVAC_CHNL_RA") (assoc 8 spl) spl ))
(entmode spl)
)
)

(if ( = (cdr (assoc 8 spl)) "dv")
(progn
(setq spl (subst (cons 8 "HVAC_CHNL_EXH") (assoc 8 spl) spl ))
(entmode spl)
)
)
(if ( = (cdr (assoc 8 spl)) "hws")
(progn
(setq spl (subst (cons 8 "HVAC_CHWS") (assoc 8 spl) spl ))
(entmode spl)
)
)
(if ( = (cdr (assoc 8 spl)) "hwr")
(progn
(setq spl (subst (cons 8 "HVAC_CHWR") (assoc 8 spl) spl ))
(entmode spl)
)
)
(if ( = (cdr (assoc 8 spl)) "cws")
(progn
(setq spl (subst (cons 8 "HVAC_CWS") (assoc 8 spl) spl ))
(entmode spl)
)
)
(if ( = (cdr (assoc 8 spl)) "cwr")
(progn
(setq spl (subst (cons 8 "HVAC_CWR") (assoc 8 spl) spl ))
(entmode spl)
)
)


(setq i (+ 1 i) j (+ 1 j))

; )
)
(setq en (entnext))
wink.gif
(princ)
;*************************************************
)
(defun ustmla (mla ceva )
(if (= nil (tblsearch "Layer" mla))
(progn
(command "Layer" "m" mla "")
(command "Layer" "c" ceva "")
(command "")
)
(command "Layer" "s" mla "")
)
)
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kpblc
сообщение 28.7.2010, 0:11
Сообщение #4


CAD Developer


Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062



Правильно. Есть функция entmod, но никто не говорил про entmode...
---
Добавлено:
В качестве первичных прикидок:
Код
(vl-load-com)

(defun c:change-layers-ent (/ adoc selset)

  (vla-startundomark (setq adoc (vla-get-activedocument (vlax-get-acad-object))))
  (if (= (type (setq selset (vl-catch-all-apply
                              (function
                                (lambda ()
                                  (ssget "_:L")
                                  );_ end of lambda
                                );_ end of function
                              );_ end of vl-catch-all-apply
                     );_ end of setq
               );_ end of type
         'pickset
         );_ end of =
    (progn
      (foreach ent (mapcar
                     (function (lambda (x)
                                 (cons x (strcase (cdr (assoc 8 (entget x))) t))
                                 );_ end of lambda
                               );_ end of function
                     ((lambda (/ tab item)
                        (repeat (setq tab  nil
                                      item (sslength selset)
                                      );_ end setq
                          (setq tab (cons (ssname selset (setq item (1- item))) tab))
                          );_ end of repeat
                        );_ end of lambda
                      )
                     );_ end of mapcar
        (vl-catch-all-apply
          (function
            (lambda ()
              (entmod
                (subst
                  (cons 8
                        (cond
                          ((= (cdr ent) "dfa") "HVAC_CHNL_OAIR")
                          ((= (cdr ent) "ds") "HVAC_CHNL_SPLY")
                          ((= (cdr ent) "dr") "HVAC_CHNL_RA")
                          ((= (cdr ent) "dv") "HVAC_CHNL_EXH")
                          ((= (cdr ent) "hws") "HVAC_CHWS")
                          ((= (cdr ent) "hwr") "HVAC_CHWR")
                          ((= (cdr ent) "cws") "HVAC_CWS")
                          ((= (cdr ent) "cwr") "HVAC_CWR")
                          );_ end of cond
                        );_ end of cons
                  (assoc 8 (entget (car ent)))
                  (entget (car ent))
                  );_ end of subst
                );_ end of entmod
              (entupd (car ent))
              );_ end of lambda
            );_ end of function
          );_ end of vl-catch-all-apply
        );_ end of foreach
      );_ end of progn
    );_ end of if
  (vla-endundomark adoc)
  (princ)
  );_ end of defun


Сообщение отредактировал kpblc - 28.7.2010, 0:24
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Алекс_Глoz
сообщение 28.7.2010, 19:18
Сообщение #5





Группа: Участники форума
Сообщений: 157
Регистрация: 10.5.2005
Из: Тель Авив
Пользователь №: 755



Спасибо. На самом деле просто неправильно написал функцию. А если теперь задачу усложнить: если в этих слоях установлены блоки и нужно заменить уровни во вложенных блоках и у атрибутов на новые?
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kpblc
сообщение 28.7.2010, 20:56
Сообщение #6


CAD Developer


Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062



Если блоки сделаны "нормально" (то есть все их примитивы на слое "0", и слои атрибутов не переназначались принудительно), то код и так нормально обработает вхождения этих блоков.

Сообщение отредактировал kpblc - 28.7.2010, 20:57
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Алекс_Глoz
сообщение 29.7.2010, 7:35
Сообщение #7





Группа: Участники форума
Сообщений: 157
Регистрация: 10.5.2005
Из: Тель Авив
Пользователь №: 755



А если блоки создавались програмно и в слоях например DS включая атрибуты в этих же слоях. Это было сделано специально чтобы блоки (например отвод воздуховода) имел тот же слой что и сам воздуховод.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kpblc
сообщение 29.7.2010, 21:48
Сообщение #8


CAD Developer


Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062



Странноватая немного логика ИМХО... Кто мешает сделать все примитивы блока в слое "0", со свойствами "ByBlock", а помещать вхождение блока уже на слой воздуховода (или кого-то там еще)? Это, мне кажется, сделает всю работу намного более гибкой и универсальной. Сейчас код писать не получается, но в качестве идеи:
1. Разблокировать и разморозить все слои, запомнив их начальное состояние
2. Создать недостающие слои
3. Пройтись по всем описаниям блоков текущего файла, исключая блоки внешних ссылок
4. Внутри каждого блока пройтись по всем примитивам, переназначая им слой
5. Восстановить начальное состояние слоев.
P.S. Решение на ActiveX получается достаточно простое, хотя и (если смотреть на размер кода) громоздкое...
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения

Добавить ответ в эту темуОткрыть тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

Реклама
ООО «Арктика групп» ИНН: 7713634274



ООО "Русич" ИНН 9721068883 / ЕРИД 2VtzqvMjLF8


ООО «УНИСПЛИТ» ИНН: 6453155081 erid:2VtzqxXgvJi

Реклама: ООО «СибСтронг» | ИНН 6670013662 | ERID: 2VtzqwyM2dc

Последние сообщения Форума






RSS Текстовая версия Сейчас: 17.7.2025, 4:25
Политика ООО ИИП «АВОК-ПРЕСС» в отношении обработки персональных данных