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

Вернуться   Форум 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 со всей информацией из исходного чертежа, а сам исходный чертеж должен оставаться без изменений.

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

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


Мб неправильно понял, алгоритм вижу такой:
отключить ненужные слои, далее контрлЦ - контрлВ
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
С.-Петербург
Сообщений: 39,789


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,047


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

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


Тупое решение: скопировал файл с нужным именем, вошел в него, убил все лишние слои Точно _вся_ информация из этих слоев перенесется
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
Челябинск
Сообщений: 9,903


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

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


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

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


Практическая польза от такой автоматизации сложнопредставима.
Все же надо иметь /или выбрать/ набор слоев; выбрать файл для экспорта; выбрать точку вставки.
Если это будет пакет документов? тогда стоит задуматься об изменении принципа работы с чертежом.
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
С.-Петербург
Сообщений: 39,789


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
Сообщений: 146


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

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


Цитата:
Сообщение от 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
С.-Петербург
Сообщений: 39,789


Тогда, конечно, проще... Только одно "но" - твой код еще и на листах объекты выделит, а не только в модели. Учти.
__________________
Моя библиотека 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 вне форума  
Ответ
Вернуться   Форум 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