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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Lisp. Объединение слоев.

Lisp. Объединение слоев.

Ответ
Поиск в этой теме
Непрочитано 26.07.2016, 13:41 #1
Lisp. Объединение слоев.
Composter
 
Отопление и вентиляция
 
Москва
Регистрация: 31.10.2008
Сообщений: 445

Добрый день. Написал небольшой лисп для объединения слоев. А то после x-ref остается много одинковых, но в имени немного различаются.
Вопрос можно ли чем нибудь заменить VL-CMDF "_.-LAYMRG"
Код:
[Выделить все]
 ;Убирает в названиях слоев все слева до символов $0$
(defun Zd131 (  / newnamelayer  posit_1 poisk_simv layer_name02)
(princ "\n Убирает в названиях слоев все слева до символов $0$")
(setq poisk_simv "$0$")
(vlax-for layer_name01 (vla-get-layers(vla-get-activedocument(vlax-get-acad-object)))
	(if	(setq posit_1(vl-string-search poisk_simv (vla-get-name layer_name01)))
		(if (vl-catch-all-error-p(vl-catch-all-apply 'vla-item(list (vla-get-layers(vla-get-activedocument(vlax-get-acad-object))) (setq layer_name02(substr (vla-get-name layer_name01) (+ 4 posit_1))))))
			(vl-catch-all-apply 'vla-put-Name(list layer_name01 layer_name02))
			(VL-CMDF "_.-LAYMRG" "_Name"(vla-get-name layer_name01)"" "_Name" layer_name02 "_Yes")
		)
	)
);_end_of_vlax-for
(princ)
)
(defun C:Zd131()(Zd131))
Просмотров: 1870
 
Непрочитано 26.07.2016, 14:07
#2
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,095


Цитата:
Сообщение от Composter Посмотреть сообщение
Вопрос можно ли чем нибудь заменить VL-CMDF "_.-LAYMRG"
Поискать старую версию Express, эта команда перешла в базовую комплектацию Акада именно оттуда. Там это все было реализовано именно на LISP.
Другой вариант - написать собственный вариант на базе ssget и vla-put-layer. Но там можно задолбаться в обработке хитровмазанных вариантов и исключений типа "атрибут динамического блока вложенного в безымянный блок вложенный в обычный блок".
Offtop: Вопрос "а надо ли уходить от "командного" метода для такой простой задачи" не задаю

Последний раз редактировалось kp+, 26.07.2016 в 14:16.
kp+ вне форума  
 
Непрочитано 26.07.2016, 14:12
#3
Кулик Алексей aka kpblc
Moderator

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


Технически можно: получаешь новое имя слоя, проверяешь - если слоя с таким именем нет, то просто задаешь ему новое имя. Если есть, то проходишь по всей коллекции блоков и их составляющих и меняешь имя слоя.
Несколько подводных камней:
1. Состояние слоев придется запоминать, потом их разблокировать и размораживать, а в конце восстанавливать исходное состояние
2. На слои могут быть ссылки в расширенных данных и/или словарях.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 26.07.2016, 14:42
#4
Composter

Отопление и вентиляция
 
Регистрация: 31.10.2008
Москва
Сообщений: 445


я не хочу полнстью переписывать это комманду, просто есть функции тиапа ACET-LIST-TO-SS, ACET-CURRENTVIEWPORT-ENAME о которых фиг найдешь информациюю. Вот я и спрашиваю мож есть есть простой способ о котором я не знаю.
Composter вне форума  
 
Непрочитано 04.10.2016, 10:33
#5
RAD24


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


Расшифруйте пожалуйста как пользоваться приведенным кодом. Куда вписывать слои. Не получается заменить свои слои.

----- добавлено через ~2 ч. -----
Все, разобрался
RAD24 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Lisp. Объединение слоев.

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LISP Объединение нескольких объектов многострочного текста в один Cren LISP 8 26.02.2016 08:57
Lisp. Объединение двух 3D тел Golem-iq LISP 2 03.09.2013 13:30
LISP. Пакетный экспорт настроек слоев TararykovDG Готовые программы 4 03.04.2012 10:03
Объединение подсписков в lisp Лиспер LISP 12 29.10.2010 11:20
lisp и фильтры слоев Mikka LISP 6 22.10.2010 11:49