Лисп, который присваивает определенные свойства определенному слою, а при необходимости создает его
Реклама i
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Лисп, который присваивает определенные свойства определенному слою, а при необходимости создает его

Лисп, который присваивает определенные свойства определенному слою, а при необходимости создает его

Ответ
Поиск в этой теме
Непрочитано 08.10.2010, 17:34 #1
Лисп, который присваивает определенные свойства определенному слою, а при необходимости создает его
Shish
 
Руководитель проектной организации
 
Москва
Регистрация: 15.09.2009
Сообщений: 90

Абсолютно в каждом файле, с которым приходится работать, рано или поздно для размещения видовых экранов я создаю слой defpoints (если таковой отсутствует) и делаю его желтого цвета. Было бы очень удобно, если бы за меня это делал LISP при первом же открытии файла.
Помогите сэкономить время, буду очень признателен!
Заранее спасибо!
Просмотров: 3007
 
Непрочитано 08.10.2010, 17:42
#2
Хмурый


 
Регистрация: 29.10.2004
СПб
Сообщений: 16,379


открой шаблон *.dwt с которого стартуют твои новые файлы. (как правило это acadiso.dwt), создай там новый слой Vports, назначь ему жёлтый цвет и запрети печать для него. Сохрани шаблон. Всё.
Видовые экраны будешь располагать на этом слое.
PS для того, чтобы создать слой defpoints достаточно проставить какой-нибудь размер...
Хмурый вне форума  
 
Автор темы   Непрочитано 08.10.2010, 17:56
#3
Shish

Руководитель проектной организации
 
Регистрация: 15.09.2009
Москва
Сообщений: 90


Шаблон *.dwt неплохой вариант для новых файлов, только я с чистого листа вообще никогда не работаю. Кроме того, у меня лисп с purge-ем в автозагрузке. А если создать размер, то цвет defpoints все равно придется менять.
Shish вне форума  
 
Непрочитано 08.10.2010, 21:07
#4
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,431


dws в руки и вперед
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 08.10.2010, 22:21
#5
twilight


 
Регистрация: 17.10.2009
Сообщений: 1,108


Цитата:
Сообщение от Shish Посмотреть сообщение
Шаблон *.dwt неплохой вариант для новых файлов, только я с чистого листа вообще никогда не работаю. Кроме того, у меня лисп с purge-ем в автозагрузке. А если создать размер, то цвет defpoints все равно придется менять.
http://cadtips.cadalyst.com/content/...-layer-creator
twilight вне форума  
 
Непрочитано 08.10.2010, 22:29
#6
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,431


Ну раз так, то конечно...
Код в автозагрузку:
Код:
[Выделить все]
(vl-load-com)
(vla-put-color (vla-add (vla-get-layers (vla-get-ActiveDocument (vlax-get-acad-object))) "defpoints") 2)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 08.10.2010, 22:50
#7
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


Цитата:
Сообщение от Shish Посмотреть сообщение
для размещения видовых экранов я создаю слой defpoints
Цитата:
Сообщение от Хмурый Посмотреть сообщение
создай там новый слой Vports, назначь ему жёлтый цвет и запрети печать для него.
Spish, данный тебе совет лучше твоего варианта. Прежде чем возразить, найди расшифровку сокращения Defpoints и прикинь, для чего слой предназначен
Vova вне форума  
 
Автор темы   Непрочитано 11.10.2010, 08:15
#8
Shish

Руководитель проектной организации
 
Регистрация: 15.09.2009
Москва
Сообщений: 90


Спасибо, kpblc! То, что надо!

Vova, я читал твою статью про пространство листа. Более того, именно с нее началась моя осмысленная работа с листами. Но использовать слой defpoints для видовых экранов я привык еще до нее...
Shish вне форума  
 
Непрочитано 11.10.2010, 08:56
#9
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,431


Shish, если бы это было в моей власти, я бы сделал так:
Код:
[Выделить все]
(vl-load-com)

(defun dwgru-put-viewports-on-layer (name / adoc layers status_lst vp_lst err final_layer)
                                    ;|
*    Помещает все видовые экраны на слой name
*    Параметры вызова:
	name		Имя слоя. Строка. nil недопустим
|;
  (vla-startundomark (setq adoc (vla-get-activedocument (vlax-get-acad-object))))
  (setq layers      (vla-get-layers adoc)
        final_layer (if (vl-catch-all-error-p
                          (vl-catch-all-apply
                            (function
                              (lambda ()
                                (vla-item layers name)
                                ) ;_ end of lambda
                              ) ;_ end of function
                            ) ;_ end of vl-catch-all-apply
                          ) ;_ end of vl-catch-all-error-p
                      (vla-add layers name)
                      (vla-item layers name)
                      ) ;_ end of if
        ) ;_ end of setq
  ;; Установка настроек для слоя ВЭ
  (vla-put-color final_layer 2)
  (vla-put-plottable final_layer :vlax-false)
  (vla-put-lock final_layer :vlax-false)
  (vla-put-layeron final_layer :vlax-true)
  (vlax-for item layers
    (setq status_lst (cons
                       (list item
                             (cons "freeze" (vla-get-freeze item))
                             (cons "lock" (vla-get-lock item))
                             ) ;_ end of list
                       status_lst
                       ) ;_ end of cons
          ) ;_ end of setq
    (foreach prop '("freeze" "lock")
      (vl-catch-all-apply
        (function
          (lambda ()
            (vlax-put-property item prop :vlax-false)
            ) ;_ end of lambda
          ) ;_ end of function
        ) ;_ end of vl-catch-all-apply
      ) ;_ end of foreach
    ) ;_ end of vlax-for
  (foreach vp (mapcar (function vlax-ename->vla-object)
                      ((lambda (/ selset _item tab)
                         (setq selset (ssget "_X" '((0 . "VIEWPORT"))))
                         (repeat (setq tab   nil
                                       _item (sslength selset)
                                       ) ;_ end setq
                           (setq tab (cons (ssname selset (setq _item (1- _item))) tab))
                           ) ;_ end repeat
                         ) ;_ end of lambda
                       )
                      ) ;_ end of mapcar
    (vla-put-layer vp name)
    ) ;_ end repeat
  (vla-endundomark adoc)
  (foreach item status_lst
    (foreach prop (cdr item)
      (vl-catch-all-apply
        (function
          (lambda ()
            (vlax-put-property (car item) (car prop) (cdr prop))
            ) ;_ end of lambda
          ) ;_ end of function
        ) ;_ end of vl-catch-all-apply
      ) ;_ end of foreach
    ) ;_ end of foreach
  (princ)
  ) ;_ end of defun
Поудобнее будет ИМХО...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 11.10.2010, 09:35
#10
Shish

Руководитель проектной организации
 
Регистрация: 15.09.2009
Москва
Сообщений: 90


Команда: (DWGRU-PUT-VIEWPORTS-ON-LAYER vp)
; ошибка: ActiveX Server возвратил ошибку: Параметр является обязательным

Со слоями, в названиях которых только цифры, работает. Причем желтым делает только слой "0".

Разобрался сам, надо имя слоя задавать в кавычках, это ж строка

Последний раз редактировалось Shish, 11.10.2010 в 10:46.
Shish вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Лисп, который присваивает определенные свойства определенному слою, а при необходимости создает его



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
описывать свойства элементов по слою (bylayer) или прямо АлексЮстасу AutoCAD 110 13.03.2010 03:51