|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Копирование блока на другой слой
Москва
Регистрация: 04.04.2008
Сообщений: 97
|
||
Просмотров: 6827
|
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
Если меняешь слой, то в DwgRuLispLib есть функция по замене DXF-бита. Если копируешь, то из списка исключай пары с кодами -1, 5, 330
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Код:
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Причем у Автокада есть такая фишка: Если слоя нет, то он создастся
Код:
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Регистрация: 04.04.2008
Москва
Сообщений: 97
|
не использовал функцию ENTMOD, так как нужно было не изменять существующий, а делать копию на другой слой.
Тогда попробую перед созданием удалить из списка ENT записи с кодами -1, 5 и 330. Попробовал - не получилось ![]() Последний раз редактировалось Mazai, 28.05.2008 в 16:59. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Код:
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
А если с атрибутами то посложнее:
Код:
Код:
Код:
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Регистрация: 04.04.2008
Москва
Сообщений: 97
|
Потестил - забавно выходит...
для VVA: создаётся новый слой, но на нём ничего не видно... наверное не копируются аттрибуты блока для Дима_: на новом слое создаются блоки в котором отображаются атрибуты, а элементы блока - не видно, пока с блоком не произойдут какие-нибудь изменениея, например пока сам блок не передвинешь. А после разбивки блока (Explode) получившиеся примитивы почему-то принадлежат изначальному слою из которого они были скопированы. Могу показать свои чудо блоки во вложении ![]() |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Варианты:
1. Использовать для расленения не _explode, а _Xplode 2. Задать в описании блока явно слой, но тогда после расчленения примитивы будут только на этом слое или см. п.1 3. Создать новый блок по содержимому идентичный старому, в котором сделать п.2 4. ???
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
А, понял, элеметны внутри блока всегда на 0 слое должны быть, тогда и отображаться они будут согласно слоя в котором лежит блок, в твоем случае надо все эл-ты сканировать и на ноль переносить внутри блока, ну или нового слоя - что по моему не есть правильно.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Регистрация: 04.04.2008
Москва
Сообщений: 97
|
Пытаюсь создать блок (INSERT) с помощью ENTMAKEX. Для этого создаю список DXF-кодов путём удаления записей с кодами -1, 5 и 330 из полученного ранее списка ENT и изменения в нём имени слоя. Получаеться такой список
Код:
|
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
А в поике по сайту набрать "BLOCK ENTMAKE"?
http://dwg.ru/f/showthread.php?t=5661 http://dwg.ru/f/showthread.php?t=309
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
block - это описание блока, то есть на рисунке его не видно он во внутренних таблицах распологаеться (tblnext "block"), а "insert" - вхождение блока в рисунок.
P.S. для создания вхождения минимум - (entmakex (list (cons 0 "insert") (cons 2 "Имя блока") (list 10 0 0 0)))
__________________
Когда в руках молоток все вокруг кажется гвоздями. Последний раз редактировалось Дима_, 29.05.2008 в 16:22. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
Вариант через ActiveX:
Код:
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Цитата:
P.S. - блин второй страницы не заметил.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Регистрация: 04.04.2008
Москва
Сообщений: 97
|
Простите мне мою настырность или тупость, но я так и не могу получить нужного результата.
Кулик Алексей aka kpblc, я потестил твои примеры и выяснил следующее: в варианте с ActivX'ом - копируется только вхождение в блок. То есть аттриуты и примитивы блока остаются принадлежать старому слою. Ожидалось, что если я оставлю включённым только новый слой, то я смогу увидеть скопированные блоки. Но на новом слое ничего не видно. Если пользоваться этим вариантом, то я хотел бы понять как копировать атрибуты и примитивы вместе с блоком (INSERT). Или это не обязательно для того что бы сам блок появился на новом слое? в варианте с EntmakeX - на выходе после команды (entmakeX ... ) - nil !!! Теоретически если бы блок создался, то я бы смог в него запихнуть и атрибуты и примитивы (как я понимаю для копируемых объектов надо было бы в DXF-код под номер 330 записать имя нового блока, которое выдала бы команда entmakeX, или я ошибаюсь?) И всё же как мне добиться того, что бы на новый слой именно сделать копию сущетвующих блоков? Так, что бы они на нём отобразились! Подскажите пожалуйста, в чём ошибка или не точность? |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
Нда, что-то про атрибуты я не подумавши... Сейчас запустить кад не могу - попозже сделаю. Хотя - посмотри на первой странице, там было вроде бы решение.
И, кстати, тут есть одна "непонятка": если атрибутам вручную изменен слой, то их копировать на новый слой или нет? А если слой при определении атрибута задан "не 0", то что тогда? Насчет entmakex и результата. Результат функции - nil, так и должно быть. Блок копируется (проверял на блоке без атрибутов, уж тут прости).
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 04.04.2008
Москва
Сообщений: 97
|
Как копировать аттрибуты с помощью ENTMAKE я понял - подсмотрел на первой страничке. Но примитивы блока на новом слое не видны. Сейчас пытаюсь понять как их перетащить.
Для меня осталась загадка, почему же он при создании блока с помощью entmakeX выдаёт nil - ведь объект же вроде как создаётся? (просто именно этот момент меня вводил вступор) Для расширения кругозора осталось ещё понять как это же сделать с помощью ActivX'а. Цитата:
Смысл всех манипуляций должен привести к тому, что бы на новом слое блоки выглядили как и на исходном. И по сути не важно на каком слое определены его объекты. Если они будут видны при включонном одном новом слое. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
Цитата:
Код:
Я сейчас тупой, поэтому пара вопросов:
И вот еще - подобные вещи я стараюсь делать через ActiveX, там лично мне проще работать. Так что с entmake[x]-кодами я в пролете...
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 04.04.2008
Москва
Сообщений: 97
|
Цитата:
2. подобные файлы мы получаем от заказчика - это геодезия, чертежи переведны в автокад из Крэдо. Как у них это получается вопрос не ко мне. Пробовал твои команды, и вторые атрибуты исчезают из видимости. 3. А в данном случае, не изменяя исходник, можно покряхтеть и всё-так получить желаемый результат? А как скопировать атрибуты с помощью ActivX я и не знаю. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
Ну увидеть-то не проблема - proxyshow в 1 и всех делов
![]() То, что вторые атрибуты исчезают - это как бы нормально: в описании-то блока один атрибут. То, что там есть второй атрибут - наверняка либо особенность Credo, либо последствия работы программы Alaspher'a по добавлению атрибутов во вхождение блока (ну или аналогичного функционала). Команды _.attsync и _.battman просто синхронизируют вхождения блоков с их описанием, так что результат был предсказуем. Насчет последнего - подумаю, но получится или нет - вилами на воде.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 04.04.2008
Москва
Сообщений: 97
|
Забавно в итоге получается. Собрал код, тестю на примере из #11 поста. Результат: создаётся блок на новом слое. При просмотре нового слоя отображаются только атрибуты блок, примитивов не видно. Только после попытки немного сместить блок они становятся видны. (Регенерация чертежа не помогает). Если побегать по листам, то при возращении на исходный лист примитивы блока опять пропадают.
Копировал я с помощью команды ENTMAKE. Интересно, если попробовать осуществить то же самое с помощью ActivX - результат будет такой же? Вот мой код на всяк случай: Код:
Последний раз редактировалось Mazai, 18.06.2008 в 10:50. Причина: добавил код |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
Я только сейчас добрался до задачки, и опять ни шиша не понял. Мой вариант по ActiveX из #21 корректно копирует твои блоки (несмотря на их "неправильность").
P.S. Попробуй не выключать слои, а замораживать их.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
вставка блока в текущий слой (проблема) | Serkonst | AutoCAD | 11 | 12.01.2008 16:49 |
Dim.В dim'e отсечки ставяться в другой слой(( | Xo66iT | AutoCAD | 11 | 03.04.2006 08:56 |
ACAD2005 Глюк при переносе блока(ов) на другой слой. | SergeiSPB | AutoCAD | 5 | 18.08.2005 08:27 |
Как обьект переместтить из одного в другой слой? | NTU | AutoCAD | 2 | 20.02.2005 16:20 |