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

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

Необходимо каждый слой модели переместить на новый лист с тем же именем

Ответ
Поиск в этой теме
Непрочитано 24.08.2011, 13:24 #1
Необходимо каждый слой модели переместить на новый лист с тем же именем
dallaskassel
 
Регистрация: 28.10.2010
Сообщений: 18

День добрый. имеется файл, экспортированный из Corel Draw в DWG. в кореле он имеет почти 300 страниц, в автокаде он имеет 300 слоёв. необходимо всё с каждого слоя вырезать и переместить на вновь создаваемый слой с тем же именем.
вообще, есть векторный файл pdf, который открывается в кореле. все программы, на которые ссылались на форуме, его экспортируют в dwg, но текст или отсутствует полностью, или крякозябры под углом, хотя экспорт правильный, в листы.
Просмотров: 7674
 
Непрочитано 24.08.2011, 15:59
#2
AlexV

Инженер
 
Регистрация: 02.10.2008
С-Пб
Сообщений: 3,685


Цитата:
Сообщение от dallaskassel Посмотреть сообщение
...необходимо всё с каждого слоя вырезать и переместить на вновь создаваемый слой с тем же именем...
Странная задачка!
Или имеется в виду, объекты с каждого слоя переместить из модели в создаваемый лист с аналогичным именем?
__________________
...Не пытайся гнуть ты ложку,
Не вяжи её узлом.
Ложка - ложка понарошку,
А по правде, - это лом!
AlexV вне форума  
 
Непрочитано 24.08.2011, 15:59
#3
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 571


dallaskassel, надо бы поподробней разъяснить задачу. Что если например, на каком-нибудь слое нечего нет? создавать пустой лист или не создовать вообще. А парамерты каждого создаваемого листа делать одни и теже или нет?
А лучше всего выложить чертеж (желательно в версии не старше ACAD2008) для примера (можно не весь Ваш рабочий файл, а только его часть с несколькими слоями)
__________________
cadtools
TararykovDG вне форума  
 
Автор темы   Непрочитано 24.08.2011, 18:23
#4
dallaskassel


 
Регистрация: 28.10.2010
Сообщений: 18


подробно: имеем многостраничный файл PDF. 300 листов. векторный. надо его конвертнуть в DWG, многостраничный. открываем PDF в Corel - имеем многостраничный документ, с нормальными шрифтами. сохраняем его в DWG, имеем многослойный документ, где все слои лежат в модели. надо или lisp, который создаст число листов по числу слоёв, и распихает это всё добро, т.е. каждый слой на свой отдельный лист, в идеале и нормализует (всё на один слой).
попытка перевести PDF сразу в DWG конвертерами приводит к двум вариантам: многостраничный документ без текста и многостраничный документ с крякозябрами вместо текста, да ещё и под углом градусов в 25. документ выложить не могу, к сожалению, военная тайна.
dallaskassel вне форума  
 
Непрочитано 24.08.2011, 19:11
#5
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 571


Цитата:
Сообщение от dallaskassel Посмотреть сообщение
подробно: имеем многостраничный файл PDF. 300 листов. векторный. надо его конвертнуть в DWG, многостраничный. открываем PDF в Corel - имеем многостраничный документ, с нормальными шрифтами. сохраняем его в DWG, имеем многослойный документ, где все слои лежат в модели. надо или lisp, который создаст число листов по числу слоёв, и распихает это всё добро, т.е. каждый слой на свой отдельный лист, в идеале и нормализует (всё на один слой).
попытка перевести PDF сразу в DWG конвертерами приводит к двум вариантам: многостраничный документ без текста и многостраничный документ с крякозябрами вместо текста, да ещё и под углом градусов в 25. документ выложить не могу, к сожалению, военная тайна.
Предыстория получения dwg файла была необязательна. Лично мне не понятно что в конце концов нужно сделать с полученным чертежом, раз уж Ваш является военной тайной, то покажите на моем (см. вложения). Там 4 слоя: 0, 1, 2, 3. На каждом соответственно по одному объекту: круг, прямоугольник, полилиния и отрезок. Скачайте файл и вручную (не так уж долго) создайте литсы и разнесите объекты по листам и выложите обратно, а мы посмотрим и однозначным образом поймем как Вам помочь, автоматизировав данный процесс для рабочего чертежа. Подобная просьба не спроста, потому что можно просто перенести объект из пространства модели в пространство соответствующего листа, а можно, например, на каждом листе просто заморозить определенные слои для данного видового экрана.

P. S.
Цитата:
Сообщение от dallaskassel Посмотреть сообщение
в идеале и нормализует (всё на один слой).
Ну так выберете все Ctrl+A и в окне свой укажите все объектам один слой.
Вложения
Тип файла: dwg
DWG 2000
Чертеж1.dwg (81.5 Кб, 1461 просмотров)
__________________
cadtools
TararykovDG вне форума  
 
Автор темы   Непрочитано 24.08.2011, 19:47
#6
dallaskassel


 
Регистрация: 28.10.2010
Сообщений: 18


нужно: перенести объекты со слоя в лист, нормализовать (на слой 0, цвет по умолчанию). чертёж содержит линии, поллинии, окружности, текст. видовые экраны использовать не надо, мне нужно редактировать отдельные листы.

Цитата:
Ну так выберете все Ctrl+A и в окне свой укажите все объектам один слой.
и так для всех трёхсот листов
Вложения
Тип файла: dwg
DWG 2004
Чертеж1.dwg (57.6 Кб, 1467 просмотров)
dallaskassel вне форума  
 
Непрочитано 24.08.2011, 22:35
#7
Oliver_88

"ценный кадр"
 
Регистрация: 02.12.2010
Сообщений: 115
<phrase 1=


Код:
[Выделить все]
 (defun test ( / name ssl lst col paper)
  (vl-load-com)
  (vla-StartUndoMark active_document)
  (setq acad_application (vlax-get-acad-object))
  (setq active_document (vla-get-activedocument (vlax-get-acad-object)))
  (setq model_space (vla-get-ModelSpace active_document))
  (vlax-map-collection (vla-get-Layers active_document)
    (function
      (lambda (x)
	(setq name (vla-get-Name x))
	(setq ssl (vla-get-ActiveSelectionSet active_document))
	(vla-Clear ssl)
	(vla-Select ssl acSelectionSetAll nil nil
	  (vlax-safearray-fill (vlax-make-safearray vlax-vbInteger '(0 . 1)) (list 67 8))
	  (vlax-safearray-fill (vlax-make-safearray vlax-vbVariant '(0 . 1)) (list 0 name))
	  )
	(vlax-map-collection ssl
	  (function
	    (lambda (d)
	      (setq lst (cons d lst))
	      )
	    )
	  )
	(if (/= 0 (length lst))
	  (vla-CopyObjects active_document
	    (vlax-make-variant
	      (vlax-safearray-fill (vlax-make-safearray vlax-vbObject (cons 0  (1- (length lst))));(cons 0  (1- (length lst)))
		lst
		)
	      )
	    (setq paper (vla-get-Block (vla-Add (vla-get-Layouts active_document) name)))
	    )
	  )
	(vlax-map-collection paper
	  (function
	    (lambda (d)
	      (vla-put-Layer d "0")
	      (setq col (vla-get-TrueColor d))
	      (vla-put-ColorMethod col 192)
	      (vla-put-TrueColor d col)
	      )
	    )
	  )
	(setq lst nil)
	(vla-put-ActiveLayout active_document (vla-Item (vla-get-Layouts active_document) name))
	(vla-ZoomAll acad_application)
	)
      )
    )
  (vla-put-ActiveLayout active_document (vla-Item (vla-get-Layouts active_document) "Model"))
  (vla-EndUndoMark active_document)
  )
Oliver_88 вне форума  
 
Автор темы   Непрочитано 25.08.2011, 08:31
#8
dallaskassel


 
Регистрация: 28.10.2010
Сообщений: 18


Команда: (LOAD test.lsp") ; ошибка:
лишняя закрывающая скобка на входе
dallaskassel вне форума  
 
Непрочитано 25.08.2011, 09:06
#9
Кулик Алексей aka kpblc
Moderator

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


А чего там одни кавычки делают? Может, их все же длжно быть двое?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 25.08.2011, 09:32
#10
dallaskassel


 
Регистрация: 28.10.2010
Сообщений: 18


а файл я просто кидаю в автокад
хорошо, вот полностью:
Команда: (LOAD "D:/Мои Документы/Dropbox/!Acad/перемещение.lsp") ; ошибка:
лишняя закрывающая скобка на входе
dallaskassel вне форума  
 
Непрочитано 25.08.2011, 10:07
#11
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 571


dallaskassel, попробуй так
Код:
[Выделить все]
 
; Вызов: Layers->Layouts
(defun c:Layers->Layouts()
  (vl-load-com)
  ((lambda(layer_name actdoc)
     (vla-startundomark actdoc)
     (while layer_name
       (if (vl-cmdf "_.-layout" "_new" layer_name)
         ((lambda(nbr)
            (if (and nbr
                     (vl-cmdf "_.-layout" "_set" layer_name)
                     )
              (foreach item (vl-remove-if 'listp (mapcar 'cadr (ssnamex nbr)))
                ((lambda(ed)
                   (setq ed (subst (cons 410 layer_name) (assoc 410 ed) ed)
                         ed (subst (cons 67 1) (assoc 67 ed) ed)
                         ed (subst (cons 8 "0") (assoc 8 ed) ed)
                         ed (if (assoc 62 ed)
                              (subst (cons 62 256) (assoc 62 ed) ed)
                              )
                         )
                   (entmod ed)
                   (entupd item)
                   )
                  (entget item)
                  )
                )
              )
            ((lambda(nbr_vw) (if nbr (vl-cmdf "_.erase" nbr_vw ""))) (ssget "_X" (list (cons 0 "VIEWPORT"))))
            (vl-cmdf "_.zoom" "_all")
            )
           (ssget "_X" (list (cons 67 0) (cons 410 "Model") (cons 8 layer_name)))
           )
         )
       (setq layer_name (cdr (assoc 2 (tblnext "LAYER"))))
       )
     (vl-cmdf "_.-purge" "_layers" "" "_No")
     (vla-endundomark actdoc)
     )
    (cdr (assoc 2 (tblnext "LAYER" t)))
    (vla-get-activedocument (vlax-get-acad-object))
    )
  (princ)
  ); end c:Layers->Layouts
Цитата:
День добрый. имеется файл, экспортированный из Corel Draw в DWG. в кореле он имеет почти 300 страниц, в автокаде он имеет 300 слоёв. необходимо всё с каждого слоя вырезать и переместить на вновь создаваемый слой с тем же именем.
P. S. ВАЖНО: Не знаю как в других версиях, а в AutoCAD2008 есть ограничения. Максимальное количество листов - 255
__________________
cadtools

Последний раз редактировалось TararykovDG, 25.08.2011 в 10:53.
TararykovDG вне форума  
 
Автор темы   Непрочитано 25.08.2011, 10:18
#12
dallaskassel


 
Регистрация: 28.10.2010
Сообщений: 18


попробовал на файле с 21-м слоем. получился документ, содержащий 21 лист, "0", "layer 1" и так далее. на каждом листе есть вьюпорт, в котором видны все слои документа. уже полдела есть.
а можно, чтоб он каждый слой копировал с привязкой к нулевой точке, вставлял на новый лист с привязкой к нулевой точке, без вьюпортов, которые мне не нужны в принципе, ибо неудобно их редактировать?
autocad 2010 RUS. а разбить на два документа труда не составит.
dallaskassel вне форума  
 
Непрочитано 25.08.2011, 10:53
#13
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 571


Цитата:
Сообщение от dallaskassel Посмотреть сообщение
без вьюпортов, которые мне не нужны в принципе, ибо неудобно их редактировать?
Поправил код в посте #11 так, чтобы удалялись видовые экраны.


Цитата:
Сообщение от dallaskassel Посмотреть сообщение
а можно, чтоб он каждый слой копировал с привязкой к нулевой точке, вставлял на новый лист с привязкой к нулевой точке
Вот это не понял. Как у слоя может быть привязка к какой-либо точке? Слои это неграфический объект, а объекты, в моем коде с каждого слоя переносятся на листы с сохранением их местоположения в модели.
__________________
cadtools
TararykovDG вне форума  
 
Автор темы   Непрочитано 25.08.2011, 11:06
#14
dallaskassel


 
Регистрация: 28.10.2010
Сообщений: 18


Цитата:
объекты, в моем коде с каждого слоя переносятся на листы с сохранением их местоположения в модели.
всё правильно, так и должно быть. только с одной поправкой - объекты не переносятся. созданные листы девственно чисты. а все объекты находятся на листе модели в своих слоях.
dallaskassel вне форума  
 
Непрочитано 25.08.2011, 12:04
#15
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 571


Цитата:
Сообщение от dallaskassel Посмотреть сообщение
объекты не переносятся. созданные листы девственно чисты. а все объекты находятся на листе модели в своих слоях.
У меня AutoCAD2008 и вроде как объекты переносятся на созданные листы. Вечером попробую дома установить ACAD2010 и посмотреть что там получается
__________________
cadtools
TararykovDG вне форума  
 
Непрочитано 25.08.2011, 12:25
#16
Oliver_88

"ценный кадр"
 
Регистрация: 02.12.2010
Сообщений: 115
<phrase 1=


dallaskassel, попробуй вложение подгрузить. Код слегка подправил. Вызывать (test) вместе со скобками.
Вложения
Тип файла: lsp test.LSP (1.6 Кб, 48 просмотров)
Oliver_88 вне форума  
 
Автор темы   Непрочитано 25.08.2011, 12:35
#17
dallaskassel


 
Регистрация: 28.10.2010
Сообщений: 18


Команда: (LOAD "D:/2/test.LSP") TEST
Команда: (test)
; ошибка: неверный тип аргумента: VLA-OBJECT nil
dallaskassel вне форума  
 
Непрочитано 25.08.2011, 13:15
#18
Oliver_88

"ценный кадр"
 
Регистрация: 02.12.2010
Сообщений: 115
<phrase 1=


Цитата:
Команда: (LOAD "D:/2/test.LSP") TEST
Команда: (test)
; ошибка: неверный тип аргумента: VLA-OBJECT nil
Ну хоть загрузилось нормально. Исправил (см.вложение).
---------
В 2012 тоже ограничение. Ну все равно должно их перекопировать, а потом выпадет.
Вложения
Тип файла: lsp test.LSP (1.6 Кб, 46 просмотров)

Последний раз редактировалось Oliver_88, 25.08.2011 в 13:35.
Oliver_88 вне форума  
 
Автор темы   Непрочитано 25.08.2011, 13:36
#19
dallaskassel


 
Регистрация: 28.10.2010
Сообщений: 18


на файле из 20-ти листов работает! спасибо большое! надеюсь, к вечеру доберусь до целого файла и проверю!
Offtop: блин, уважаю специалистов. самому LISP учить некогда..
dallaskassel вне форума  
 
Непрочитано 28.08.2011, 19:26
#20
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от dallaskassel Посмотреть сообщение
имеется файл, экспортированный из Corel Draw в DWG. в кореле он имеет почти 300 страниц, в автокаде он имеет 300 слоёв. необходимо всё с каждого слоя вырезать и переместить на вновь создаваемый слой с тем же именем.
Ну зачем эта дрянь? надо печатать - выключили ненужное, напечатали... Надо редактировать - изолировали нужные слои... работайте...
gomer вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Необходимо каждый слой модели переместить на новый лист с тем же именем

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ищу листы Специальной карты Европейской России М:1дюйм-10верст KSI Поиск литературы, чертежей, моделей и прочих материалов 6 19.04.2009 12:04