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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Перенос объектов из Модели в Лист

Перенос объектов из Модели в Лист

Ответ
Поиск в этой теме
Непрочитано 18.01.2006, 05:57 #1
Перенос объектов из Модели в Лист
===AAA===
 
г. Норильск
Регистрация: 15.08.2005
Сообщений: 470

Всем привет!

Возникла задача программно перенести примитивы
из пространства "Модели" в пространство "Листа".

Теоретически я знаю 2 способа:

1. БПЛОК -> ВСТАВЬ
2. CUT -> PASTE

Разумеется всякие там фенечки по поводу выбора
объектов, перехода на нужный "Лист" напишу, не
проблема.

Мне просто не нравятся оба эти способа. Нет ли
чего поизящнее. Всего-то и надо, что у всех
выбранных объектов изменить группу 410 с
"Model' на "ЛИСТ-XXX".

Можно ли это сделать, если да, то как?
__________________
Счастливо, Алексей!
Просмотров: 7331
 
Автор темы   Непрочитано 18.01.2006, 07:02
#2
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 470


Пока отбой, поскольку нашел тему:

http://www.autocad.ru/cgi-bin/f1/board.cgi?t=16233vh

Буду посмотреть, если появятся вопросы - напишу.

Сорри за беспокойство.
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Автор темы   Непрочитано 18.01.2006, 13:11
#3
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 470


Всем привет еще раз!

Рановато дал отбой. :-)

Эти функции копируют объекты из Модели в Лист, а мне
надо _перенос_. Конечно, я могу потом банально удалить
объекты из Модели через (command "_erase"), но выплывают
всякие проверки на заблокированные слои и т.п.

"Не будет ли любезен Многоуважаемый Джин" :-) просто
наваять мне маленькую функцию. Ну, не силен я в этих vla-... :-(((
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 18.01.2006, 13:18
#4
Кулик Алексей aka kpblc
Moderator

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


chspace из Express Tools выполняет, по-моему, именно то, что надо.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 18.01.2006, 13:26
#5
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 470


Возможно, но не могу же я встроить это дело в виде
маленькой подпрограмы в свою. Нужна автономная
функция. :-(
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 18.01.2006, 13:37
#6
Кулик Алексей aka kpblc
Moderator

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


Погоди, открой файл chspace.lsp из каталога c:\program files\autocad 200x\express, просмотри там код на предмет вызова сторонних функций (их там не так уж и много) и вставляй в свое.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 18.01.2006, 13:50
#7
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 470


Хорошо, погляжу.

Только что заметил твою расшифровку ника.
А до этого так и читал - "KPBLC" :-)
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 18.01.2006, 13:54
#8
Кулик Алексей aka kpblc
Moderator

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


Хехехехе, я ее только сегодня присобачил
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 18.01.2006, 15:50
#9
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 470


Привет!

Посмотрел. Не смог разобраться детально, т.к. там полно всяких
(acet-....) функций, а у меня экспресс не установлен, брал файл
на другой машине, но главное не это.

Как мне показалось там используется метод выбора всех объектов
модели в БЛОК с последующей вставкой его в пространство Листа.
Плюс всякие проверочки и масштабирование...

Т.е. возвращаюсь к своему первому посту - мне такой метод не
симпатичен. Поизящнее бы, через (vl-...) :-)

Запускаться эта штука будет только тогда, когда на Листе пусто.
Лимиты Листа установлю по Модели, системные переменные тоже.
Видовые экраны - нафиг, ликвидировать, как класс. Вот такой
вот частный случай.
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 18.01.2006, 16:47
#10
Эдуард

строительство
 
Регистрация: 16.01.2004
Петербург
Сообщений: 165
<phrase 1=


Помоему ничего сложного нет.
Код:
[Выделить все]
(defun chspace_new (layout / copy_obj act_doc new_owner ms)
  (if
    (and
      (member layout (layoutlist))
      (setq copy_obj (ssget))
    )
     (progn
       (setq act_doc	(vla-get-ActiveDocument (vlax-get-acad-object))
	     act_layout	(vla-put-ActiveLayout
			  act_doc
			  (vla-item (vla-get-layouts act_doc) layout)
			)
       )
       (setq new_owner (vla-get-paperspace act_doc)

	     copy_obj  (mapcar 'vlax-ename->vla-object
			       (vl-remove-if
				 'listp
				 (mapcar 'cadr
					 (ssnamex copy_obj)
				 )
			       )
		       )
	     ms	       (vlax-make-safearray
			 vlax-vbObject
			 (cons 0 (1- (length copy_obj)))
		       )
       )
       (vlax-safearray-fill ms copy_obj)
       (vla-copyobjects
	 (vla-get-ActiveDocument (vlax-get-acad-object))
	 ms
	 new_owner
       )
       (mapcar 'vla-delete copy_obj)
     )
  )
  (princ)
)
Пример вызова (chspace_new "layout2")
Эдуард вне форума  
 
Автор темы   Непрочитано 19.01.2006, 07:05
#11
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 470


Привет!

Действительно, все работает, как надо - спасибо огромное.

Правда, перед вызовом функции нужно делать проверку на
наличие "заблокированных" слоев, разблокировать их, а
затем блокировать обратно - иначе эта функция дает ошибку.

Ну да эти проверочки я и сам напишу по-старинке на обычном
AutoLISPe. Возможно, еще чего-нибудь проверить понадобится.

Еще раз - спасибочки!
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 19.01.2006, 13:09
#12
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,992
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Ну зачем же по старинке
Код:
[Выделить все]
(defun chspace_new (layout / copy_obj act_doc new_owner ms lays lay lock act_layout)
   (defun *error* (msg) 
    (princ msg)
    (vla-endundomark act_doc)
    (princ) 
    ) ;_ end of defun
  (if 
    (and 
      (member layout (layoutlist)) 
      (setq copy_obj (ssget)) 
    ) 
     (progn 
       (setq act_doc   (vla-get-ActiveDocument (vlax-get-acad-object)) 
        act_layout   (vla-put-ActiveLayout 
           act_doc 
           (vla-item (vla-get-layouts act_doc) layout) 
         )
	 lays (vla-get-layers act_doc)
       )
       (vla-startundomark act_doc)  
       (setq new_owner (vla-get-paperspace act_doc) 

        copy_obj  (mapcar 'vlax-ename->vla-object 
                (vl-remove-if 
             'listp 
             (mapcar 'cadr 
                (ssnamex copy_obj) 
             ) 
                ) 
             ) 
        ms          (vlax-make-safearray 
          vlax-vbObject 
          (cons 0 (1- (length copy_obj))) 
             ) 
       )
       (foreach x copy_obj
	 (setq lay (vla-item lays (vla-get-layer x)))
         (if (= (vla-get-lock lay) :vlax-true)
	   (progn (vla-put-lock lay :vlax-false) (setq lock (cons lay lock))))
	 )
       (vlax-safearray-fill ms copy_obj) 
       (vla-copyobjects 
            act_doc
            ms 
            new_owner 
       ) 
       (mapcar 'vla-delete copy_obj) 
     ) 
  )
  (if lock (foreach x lock (vla-put-lock x :vlax-true)))
  (vla-endundomark act_doc)
  (princ) 
)
VVA вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Перенос объектов из Модели в Лист

Размещение рекламы