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

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

Как программно вынуть из чертежа информацию с нужных слоев и поместить ее в другой чертеж?

Ответ
Поиск в этой теме
Непрочитано 14.01.2016, 16:35 #1
Как программно вынуть из чертежа информацию с нужных слоев и поместить ее в другой чертеж?
Xara
 
Помидорка
 
Регистрация: 03.02.2012
Сообщений: 135

Всем привет!

Передо мной стоит достаточно необычная (и, на мой взгляд, сложная) задача, и что-то в голову совсем ничего не приходит, даже алгоритм для ее выполнения мне пока не сильно ясен...
Если кто-то сможет поделиться любыми соображениями/идеями - я был бы вам очень признателен!

Задача следующая (опишу условно):
Дано:
1. Есть чертеж, в нем есть слои 1,2,3,4,5,6,7,8.
2. Есть список выборки - 2,3,4,8.
Найти:
Надо взять из чертежа всю информацию, которая хранится в слоях 2,3,4,8 и сохранить именно ее в другой чертеж по указанному пути, т.е. в конечном чертеже должны быть слои 2,3,4,8 со всей информацией из исходного чертежа, а сам исходный чертеж должен оставаться без изменений.

Заранее спасибо всем откликнувшимся!
__________________
Боишься - не делай. Делаешь - не бойся.
Просмотров: 4597
 
Непрочитано 14.01.2016, 16:49
#2
v.psk

конструктор
 
Регистрация: 14.08.2014
Псков
Сообщений: 7,326


Мб неправильно понял, алгоритм вижу такой:
отключить ненужные слои, далее контрлЦ - контрлВ
v.psk вне форума  
 
Автор темы   Непрочитано 14.01.2016, 16:55
#3
Xara

Помидорка
 
Регистрация: 03.02.2012
Сообщений: 135


Цитата:
Сообщение от v.psk Посмотреть сообщение
Мб неправильно понял, алгоритм вижу такой:
отключить ненужные слои, далее контрлЦ - контрлВ
Все верно. Однако ключевое слово - программно
Т.е. автоматически, - нажал юзер кнопоньку - функция отработала, и нужную инфу с чертежа в соответствии со списком выдала в другой чертеж, в другое место.
__________________
Боишься - не делай. Делаешь - не бойся.
Xara вне форума  
 
Непрочитано 14.01.2016, 17:13
#4
Кулик Алексей aka kpblc
Moderator

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


Xara, так вопрос-то в разделе "AutoCAD", а не "Программирование"...

----- добавлено через 27 сек. -----
А так - см.команду _.-wblock с предварительным выбором.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 14.01.2016, 17:18
#5
Xara

Помидорка
 
Регистрация: 03.02.2012
Сообщений: 135


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Xara, так вопрос-то в разделе "AutoCAD", а не "Программирование"...
Ой, прошу прощения, не подумал)

Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
А так - см.команду _.-wblock с предварительным выбором.
О, точно, спасибо! Начну копать в этом направлении! Как-то я сразу про это не подумал...

Вот только есть сомнения, что QSELECT может работать в бездиалоговом режиме...
__________________
Боишься - не делай. Делаешь - не бойся.

Последний раз редактировалось Xara, 14.01.2016 в 17:29.
Xara вне форума  
 
Непрочитано 15.01.2016, 08:04
#6
trir


 
Регистрация: 18.12.2010
Сообщений: 5,107


на чём пищем?
trir вне форума  
 
Непрочитано 15.01.2016, 09:01
#7
Fogel

люблю мастерить
 
Регистрация: 21.01.2005
Челябинск
Сообщений: 10,332


Тупое решение: скопировал файл с нужным именем, вошел в него, убил все лишние слои Точно _вся_ информация из этих слоев перенесется
Fogel вне форума  
 
Автор темы   Непрочитано 15.01.2016, 09:43
#8
Xara

Помидорка
 
Регистрация: 03.02.2012
Сообщений: 135


Решил вопрос во как (тупо, без особых проверок, но скелет уже есть):
Код:
[Выделить все]
 (vl-load-com)
(if
  (setq Sset (ssget "_X" (list '(8 . "Layer2,Layer3,Layer5"))))
  (progn
    (setq Sset (vla-get-activeselectionset (vla-get-activedocument (vlax-get-acad-object))))
    (vla-wblock (vla-get-activedocument (vlax-get-acad-object))
      "d:\\testblock.dwg"
      Sset
      )
    )
  )
Цитата:
Сообщение от trir Посмотреть сообщение
на чём пищем?
лисп

Цитата:
Сообщение от Fogel Посмотреть сообщение
Тупое решение
Не столько тупое, сколько ни разу не программное))
__________________
Боишься - не делай. Делаешь - не бойся.
Xara вне форума  
 
Непрочитано 15.01.2016, 09:47
#9
Fogel

люблю мастерить
 
Регистрация: 21.01.2005
Челябинск
Сообщений: 10,332


Ну, могу и кодом такое решение обвесить
Fogel вне форума  
 
Непрочитано 15.01.2016, 10:05
#10
Кулик Алексей aka kpblc
Moderator

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


Xara, ты забыл про блоки, таблицы и размерные стили (в частности). Ну и еще наверняка что-то вылезет, так что думай хорошенько
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 15.01.2016, 10:12
#11
v.psk

конструктор
 
Регистрация: 14.08.2014
Псков
Сообщений: 7,326


Практическая польза от такой автоматизации сложнопредставима.
Все же надо иметь /или выбрать/ набор слоев; выбрать файл для экспорта; выбрать точку вставки.
Если это будет пакет документов? тогда стоит задуматься об изменении принципа работы с чертежом.
v.psk вне форума  
 
Автор темы   Непрочитано 15.01.2016, 10:38
#12
Xara

Помидорка
 
Регистрация: 03.02.2012
Сообщений: 135


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Xara, ты забыл про блоки, таблицы и размерные стили (в частности). Ну и еще наверняка что-то вылезет, так что думай хорошенько
Копируется объект по слою - копируется и объект, и слой, и все, что с этим объектом связано - и стили, и блоки, и все остальное - проверено - все, как надо!
Однако да, спасибо, я обязательно все тщательно проверю!

Цитата:
Сообщение от v.psk Посмотреть сообщение
Практическая польза от такой автоматизации сложнопредставима.
Все же надо иметь /или выбрать/ набор слоев; выбрать файл для экспорта; выбрать точку вставки.
Если это будет пакет документов? тогда стоит задуматься об изменении принципа работы с чертежом.
Польза вполне ощутима, когда проектировщик работает с локальным планом, и ему нужно, чтобы содержимое конкретных слоев всегда записывалось в конкретное место и хранилось там, и конечный чертеж далее будет вставлен внешней ссылкой в сводный план - и без мусора и прочей фигни (например, у проектировщика могут быть какие-то обозначения, которые на своднике вовсе не нужны).
Однако есть и там грабли - если проектировщик делает свою работу неправильно - например, в тех слоях, которые предназначены для экспорта в сводник, лежит какой-то хлам - но это уже вопрос совести и культуры проектирования))) Но, опять же, устранить это ничего не стоит - открыть снова чертеж, убрать ненужное со слоя и выполнить экспорт еще раз, после чего этот хлам пропадает из сводника.
Набор слоев уже есть, целый список, и работа там выполняется по СТП, где все слои четко регламентированы и выполняется проверка по электронному стандарту.
А точка вставки - 0, 0, 0 - надо, чтобы все было идентично - это же сводник.
Ну а вообще, ТЗ писал не я

Fogel, Я был бы очень благодарен!

Единственная загвоздка на данный момент - в случае, если файл открыт кем-то, то файл не перезаписывается... Т.е., другими словами, работает Вася, работает... Потом тык, сохранил, и работает дальше... А какая-то Маша уже открыла этот чертеж неделю назад, и забыла об этом, он у нее висит открытым и все... А файл не перезаписывается(( Вот как бы прикрутить проверку файла на предмет рид-онли?
__________________
Боишься - не делай. Делаешь - не бойся.
Xara вне форума  
 
Непрочитано 15.01.2016, 10:49
#13
Кулик Алексей aka kpblc
Moderator

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


Xara, ты проверь свой код: создай отрезок на слое "Layer2", загони его в блок, блок на слой "1234". И проверь, что будет в результирующем файле.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 15.01.2016, 10:56
#14
Xara

Помидорка
 
Регистрация: 03.02.2012
Сообщений: 135


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Xara, ты проверь свой код: создай отрезок на слое "Layer2", загони его в блок, блок на слой "1234". И проверь, что будет в результирующем файле.
Он не переносится - потому что не на том слое.
Совсем не важно, в каком слое изначально были созданы примитивы для этого блока, - важно, где находится объект, т.е. блок, и мне (точнее, юзеру) так и нужно
__________________
Боишься - не делай. Делаешь - не бойся.
Xara вне форума  
 
Непрочитано 15.01.2016, 10:58
#15
AlexZh


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


А может все таки проще воспользоваться "DESIGNCENTER" CTRL+2?
AlexZh вне форума  
 
Непрочитано 15.01.2016, 11:02
#16
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от Xara Посмотреть сообщение
Он не переносится - потому что не на том слое.
Усложним задачку: в блоке на слое "1234" лежат пара примитивов. Сам блок находится на слое "Layer2". Чего должно быть в результате?
Вспомни свой вопрос:
Цитата:
Сообщение от Xara Посмотреть сообщение
Надо взять из чертежа всю информацию, которая хранится в слоях 2,3,4,8 и сохранить именно ее в другой чертеж по указанному пути, т.е. в конечном чертеже должны быть слои 2,3,4,8 со всей информацией из исходного чертежа, а сам исходный чертеж должен оставаться без изменений.
Согласно этой логике, код должен показать и примитив на слое "Layer2" из #13, и блок из "усложненной" задачи. Правда, в результирующем файле вполне может оказаться тьма мусора.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 15.01.2016, 11:15
#17
Xara

Помидорка
 
Регистрация: 03.02.2012
Сообщений: 135


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Усложним задачку: в блоке на слое "1234" лежат пара примитивов. Сам блок находится на слое "Layer2". Чего должно быть в результате?
Вспомни свой вопрос:

Согласно этой логике, код должен показать и примитив на слое "Layer2" из #13, и блок из "усложненной" задачи. Правда, в результирующем файле вполне может оказаться тьма мусора.
Прекрасно понимаю тебя, Алексей, но в данном случае стандарт предприятия требует того, чтобы все блоки создавались в нулевом слое Стили тоже стандартизованы
А если юзер напортачил - то "сам дурак"
__________________
Боишься - не делай. Делаешь - не бойся.
Xara вне форума  
 
Непрочитано 15.01.2016, 11:29
#18
Кулик Алексей aka kpblc
Moderator

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


Тогда, конечно, проще... Только одно "но" - твой код еще и на листах объекты выделит, а не только в модели. Учти.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 15.01.2016, 12:19
#19
Xara

Помидорка
 
Регистрация: 03.02.2012
Сообщений: 135


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Тогда, конечно, проще... Только одно "но" - твой код еще и на листах объекты выделит, а не только в модели. Учти.
Алексей, а я что-то наблюдаю совсем иную картину.... Опишу:
В модели на слоях Layer1...5 есть различные объекты, в 1 листе есть объект из Layer1, во втором - из Layer3, в третьем - из Layer5 в коде выборка из Layer1, Layer3, Layer5.
- Нахожусь в модели, прогоняю код, - в конечном на модели все на месте, в листе пусто (при этом копируется ОДИН пустой лист, а не все, на которых есть объекты из нужных слоев);
- Нахожусь в листе, прогоняю код - так же картина...

Я в смятении...
__________________
Боишься - не делай. Делаешь - не бойся.
Xara вне форума  
 
Непрочитано 15.01.2016, 13:01
#20
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Вечно забывают люди (а может, и не знали никогда), что слой в AutoCAD'е - не информация для колпирования, а свойство объекта. Так что реально-то копируются не слои, а объекты со своими слоями (и другими свойствами).
Profan вне форума  
 
Непрочитано 15.01.2016, 14:32
#21
Кулик Алексей aka kpblc
Moderator

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


Xara, я говорил о выделении объектов. vla-wblock копирует, насколько я помню, только объекты из пространства модели. Но в набор попадают еще и объекты листов.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 16.01.2016, 00:13
#22
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Цитата:
Сообщение от Xara Посмотреть сообщение
всегда записывалось в конкретное место и хранилось там, и конечный чертеж далее будет вставлен внешней ссылкой в сводный план
Цитата:
Сообщение от Xara Посмотреть сообщение
А какая-то Маша уже открыла этот чертеж неделю назад, и забыла об этом, он у нее висит открытым и все
этот вопрос у нас решается так - сводный и все его части находятся на сетевом диске, который, при входе пользователя в свою учетную запись, подключается как диск O:
Доступ по умолчанию у всех "по чтению" кроме ведущего сводного. Пользователи делают "выжимку для сводного" на своей локальной машине. Отключают все слои, кроме слоев для сводного. При стандартизации это легко делается фильтрами слоев, которые настроены в шаблоне.
Дальше BGLAYDEL - Удаление выключенных и замороженных слоев с примитивами, файл "сохраняется как ..." и пересылается ведущему сводного по эл. почте. Этим преследуется еще одна цель - остается запись кто, когда и чего прислал.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Как программно вынуть из чертежа информацию с нужных слоев и поместить ее в другой чертеж?



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как перенести фильтры слоев в другой чертеж? remlin AutoCAD 18 25.03.2024 12:46
Для чего нужны фильтры слоев?Как ими пользоваться? Aysulu AutoCAD 43 17.04.2019 10:59
можно ли из одного чертежа в другой переносить группы слоев? stumpel AutoCAD 2 28.02.2008 12:27