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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как в лисп PurgeFiles.lsp внедрить команду _.laydel, чтобы это работало

Как в лисп PurgeFiles.lsp внедрить команду _.laydel, чтобы это работало

Ответ
Поиск в этой теме
Непрочитано 04.03.2019, 17:29
Как в лисп PurgeFiles.lsp внедрить команду _.laydel, чтобы это работало
Чигинский Дмитрий
 
ГИП
 
Тула
Регистрация: 09.09.2006
Сообщений: 112

Здравствуйте, помогите, пожалуйста скрестить ежа с ужом, а именно, решить задачу удаления конкретного слоя (имеющегося во всех файлах) и очистки файлов в рамках иерархической структурой папок.

Исходные данные.
1. Имеется работающая функциональность удаления слоя "_Подписи" и очистки файла командой "SuperPurge" посредством кнопки на панели быстрого доступа в AutoCAD 2018 к которой привязан следующий макрос:
Код:
[Выделить все]
^C^C^R_laydel;_name;_Подписи;^C^C_-Purge;_All;;_No;^C^C_.audit;_y;_-Purge;_All;;_No;_-Purge;_All;;_No;
2. Всё устраивает пока файлов до 10 шт., но когда файлов кратно больше и они разложены по подпапкам хотелось бы процесс автоматизировать, пусть и под контролем человека.

3. Поиском были обнаружены следующие части мозайки:

3.1. Лисп, работающий, найдены здесь на форуме http://forum.dwg.ru/showpost.php?p=569996&postcount=13 и/или http://forum.dwg.ru/showpost.php?p=54725&postcount=3,
посредством которого происходит обход и очистка файлов, в том числе, по иерархической структуре папок.
Код:
[Выделить все]
 
;;;CADALYST 03/05 Tip2023: PurgeFiles.lsp	Directory Clean Up	(c) Andrzej Gumula


;;; [c]2004 Andrzej Gumula, Katowice, Poland
;;; e-mail: [email protected]
;;; This routine purge dwg files from selected folder


(vl-load-com)

(defun c:PurgeFiles (/ FilesList DwgPath SubDir Files File)

(defun GetFolder (/ Dir Item Path)
 (cond
  ((setq Dir (vlax-invoke (vlax-get-or-create-object "Shell.Application") 'browseforfolder 0 "Выберите папку с DWG файлами:" 1 ""))
   (cond
    ((not (vl-catch-all-error-p (vl-catch-all-apply 'vlax-invoke-method (list Dir 'Items))))
     (setq Item (vlax-invoke-method (vlax-invoke-method Dir 'Items) 'Item))
     (setq Path (vla-get-path Item))
     (if (not (member (substr Path (strlen Path) 1) (list "/" "\\")))
      (setq Path (strcat Path "\\"))
     );end if
    )
   );end cond
  )
 );end cond
 Path
);end GetFolder


(defun vl-findfile (Location / DirList Path AllPath)
 (MakeDirList Location)
 (setq DirList (cons Location DirList))
 (foreach Elem DirList 
  (if (setq Path (vl-directory-files Elem "*.dwg"))
   (foreach Item Path (setq AllPath (cons (strcat Elem "/" Item)  AllPath)))
  );end if
 )
 (reverse AllPath)
);end vl-findfile

(defun MakeDirList (Arg / TmpList)
 (setq TmpList (cddr (vl-directory-files Arg nil -1)))
 (cond
  (TmpList
   (setq DirList (append DirList (mapcar '(lambda (z) (strcat Arg "/" z)) TmpList)))
   (foreach Item TmpList (MakeDirList (strcat Arg "/" Item)))
  )
 );end cond
);end MakeDirList

(if (not FileSystemObject)
  (setq FileSystemObject (vla-getInterfaceObject (vlax-get-acad-object) "Scripting.FileSystemObject"))
);end if

(cond
((= (getvar "SDI") 0)
(cond
 ((setq DwgPath (GetFolder))
  (initget "Yes No")
  (setq Subdir (cond ((getkword "\nИскать во вложенных папках? No,[Yes]: "))
		     (T "Yes")))
  (if (equal SubDir "Yes")
   (setq Files (vl-findfile (substr DwgPath 1 (1- (strlen DwgPath)))))
   (setq Files (mapcar '(lambda (x) (strcat dwgpath x))(vl-directory-files DwgPath "*.dwg" 1)))
  );end if
  (setq Files (mapcar 'strcase Files))
  (cond
    (Files
     (vlax-for & (vla-get-documents (vlax-get-acad-object )) (setq FilesList (cons (strcase (vla-get-fullname &)) FilesList)))
     (foreach & Files
      (cond
	((not (member & FilesList ))
         (cond
	  ((/= (logand (vlax-get-property (vlax-invoke-method FileSystemObject 'getfile &) 'Attributes) 1) 1)
	   (cond
	     ((setq File (vla-open (vla-get-documents (vlax-get-acad-object)) &))
	      (prompt (strcat "\nPurge " & ". Please wait..."))
              (vla-purgeall File)
	      (prompt (strcat "\nSave and close " &))
	      (vla-save File)
	      (vla-close File)
	      (vlax-release-object File)
	     )
	     (T (prompt (strcat "\nCannot open " & "\nDrawing file was created by an incompatible version. ")))
	   );end cond
	  )
	  (T (prompt (strcat & " is read-only. Purge canceled. ")))
	 );end cond
	)
	(T (prompt (strcat & " is open now. Purge canceled. ")))
      );end cond

     );end foreach
    )
    (T (prompt "\nNothing files found to purge. "))
  );end cond
 )
 (T (prompt "\nNothing selected. "))
);end cond
)
(T (prompt "\nThe routine is not available in SDI mode. "))
);end cond
(princ)
);end c:PurgeFile

(prompt "\nLoaded new command PurgeFiles. ")
(prompt "\n[c]2004 Andrzej Gumula. ")
(princ)
3.2. Команда на лисп http://www.arch-pub.com/Laydel-in-Lisp_10744991.html для удаления слоёв и всего, что в них содержится:
Код:
[Выделить все]
(command "_.laydel" "n" "_Подписи" "" "y")
Прошу подсказать каким образом можно совместить одно с другим, чтобы реализовать указанную выше задачу.

Заранее благодарю.
__________________
С уважением, Чигинский Дмитрий.
Просмотров: 7054
 
Автор темы   Непрочитано 07.03.2019, 13:11
#21
Чигинский Дмитрий

ГИП
 
Регистрация: 09.09.2006
Тула
Сообщений: 112
<phrase 1= Отправить сообщение для Чигинский Дмитрий с помощью Yahoo Отправить сообщение для Чигинский Дмитрий с помощью Skype™


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Блоки *D, *T - это соответственно блоки размеров и таблиц.
Если хочешь, повтори три раза строку с очисткой - уйдут.
Благодарю!

Цитата:
Сообщение от doctorraz Посмотреть сообщение
ну коль консольный АК не взлетел....
Спасибо за уточнение, теперь то что и было нужно.

Цитата:
Сообщение от Александр Ривилис Посмотреть сообщение
ExplodeProxyXXX.crx то загружается и работает.
Надо попробовать ExplodeProxyXXX встроить на досуге.
Как понимаю, будет тогда вообще шикарно.
__________________
С уважением, Чигинский Дмитрий.
Чигинский Дмитрий вне форума  
 
Непрочитано 07.03.2019, 14:09
#22
doctorraz

электрик
 
Регистрация: 19.02.2010
Волгоград
Сообщений: 2,293
Отправить сообщение для doctorraz с помощью Skype™


Цитата:
Сообщение от Чигинский Дмитрий Посмотреть сообщение
Надо попробовать ExplodeProxyXXX встроить на досуге.
никаких проблем его встроить...
скачиваешь, подгружаешь один раз в АК (можно просто мышкой *.arx перетащить в окно чертежа)), потом в скрипт добавляешь перед окончательной очисткой и аудитом
Код:
[Выделить все]
EXPLODEALLPROXY
REMOVEALLPROXY
__________________
Мастерская СПДС
doctorraz вне форума  
 
Непрочитано 07.03.2019, 14:43
#23
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,665


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Еще в 2005 году было обсуждение на другом форуме (caduser.ru) про скорость и особенности работы лиспа на неактивном документе.
пакетник для каждого файла условия каждый раз запускает акад (1), открывает файл (2), запускает команды из скрипта (3), которые в том числе содержат код лиспа, сохраняет файл (4), закрывает акад (5). и эти 5 операций будут производится для каждого файла!
если делать лисп по первоначальном варианту tc, то получим следующее. открываем акад (-2) однократно!, открываем какой-то dwg/создаём новый (-1) однократно!, загружаем лисп (0) однократно!, запускаем загруженную команду (1) для выбора группы файлов, обрабатываем файл (2, 3, 4).
то есть в этих двух вариантах действия пересекаются только в пунктах 2, 3, 4. во втором случае исключаются временные интервалы (1+5)*количество файлов. таким образом теоретически и я думаю практически скорость обработки группы файлов по второму сценарию будет всё-таки больше) да к тому же vla методы работают ГОРАЗДО быстрее нежели методы командные.
koMon вне форума  
 
Непрочитано 07.03.2019, 15:53
#24
frostmourn


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
koMon, я много раз пробовал провести аудит на нетекущем документе (вплоть до 2018 версии; на 2019 не проверял) - не работало. Как и vla-purgeall
Только что пробовал - работает.
frostmourn вне форума  
 
Непрочитано 07.03.2019, 15:57
#25
Кулик Алексей aka kpblc
Moderator

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


Уточнение: я документы открывал через ObjectDBX.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 07.03.2019, 16:16
#26
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,000


Цитата:
Сообщение от koMon Посмотреть сообщение
пакетник для каждого файла условия каждый раз запускает акад (1), открывает файл (2), запускает команды из скрипта (3), которые в том числе содержат код лиспа, сохраняет файл (4), закрывает акад (5). и эти 5 операций будут производится для каждого файла!
если делать лисп по первоначальном варианту tc, то получим следующее. открываем акад (-2) однократно!, открываем какой-то dwg/создаём новый (-1) однократно!, загружаем лисп (0) однократно!, запускаем загруженную команду (1) для выбора группы файлов, обрабатываем файл (2, 3, 4).
то есть в этих двух вариантах действия пересекаются только в пунктах 2, 3, 4. во втором случае исключаются временные интервалы (1+5)*количество файлов. таким образом теоретически и я думаю практически скорость обработки группы файлов по второму сценарию будет всё-таки больше) да к тому же vla методы работают ГОРАЗДО быстрее нежели методы командные.
Очень существенная разница между открытием чертежа в явном виде с его неизбежной активацией, регенерацией и т.д. - и открытием БД чертежа. Для пакетной обработки приемлю только последнее.
Offtop:
Кстати, привязкой к активному окну документа и тот же эксель страдает при выполнении кода VBA - ряд операций с группами ячеек (сортировка, ресайз) не на активном листе вызывает явления: от появления артефактов отображения до появления ошибки кода, а в особо тяжелых случаях - и вылета приложения.
Сергей812 вне форума  
 
Непрочитано 07.03.2019, 20:47
#27
doctorraz

электрик
 
Регистрация: 19.02.2010
Волгоград
Сообщений: 2,293
Отправить сообщение для doctorraz с помощью Skype™


извините, что вмешиваюсь в столь высокоинтелектуальный спор, без сомнения все эти технологии хороши, но я пока не увидел ни одной строчки высокого кода. по теме топа.. ну впрочем не об этом.. если скриптом удалять несуществующий слой, то все дело сразу стопорится..
учитывая, что ТС просил помощь, а все отписавшиеся тут де факто ее оказывают, ну и типо я тож помогаю, но в лиспе Е-10..уважаемые, коль отписались в теме.. может чтонить по теме сможете набросать коду кагонить легкоприменимого для ламеров мимоходом так

----- добавлено через ~4 мин. -----
насколько я понял не важно за сколько времени, важен результат
чреслами мериться тут мудрым мужам, да еще пред юнцами... ну вы поняли уважаемые..
__________________
Мастерская СПДС
doctorraz вне форума  
 
Непрочитано 07.03.2019, 21:00
#28
Кулик Алексей aka kpblc
Moderator

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


Если "нужен результат, по-быстрому и с минимальными затратами" - то scr, консольный acad и понеслась.
Если чистый лисп, то ситуация меняется очень сильно. И нарисовать код "на ура" вряд ли получится. По крайней мере у меня...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 07.03.2019, 22:01
#29
doctorraz

электрик
 
Регистрация: 19.02.2010
Волгоград
Сообщений: 2,293
Отправить сообщение для doctorraz с помощью Skype™


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
то scr, консольный acad и понеслась.
по опыту предыдущих стрельб убедились, что консоль много чо не может.. в т.ч. удалять слои((((
теесу вроде скорость не критична, но при удалении несуществующего слоя процесс останавливается..
в принципе маленький лисп проверки слоя перед удалением ему бы помог наверное, но возможно он уже все сделал руками, пока тут обсуждают какая технология работает эффективнее))

----- добавлено через ~12 ч. -----
Цитата:
Сообщение от Чигинский Дмитрий Посмотреть сообщение
Хотя возникает желание перед удалением слоя поставить условие-проверку о его наличии в файле)
Можно ли это организовать?
строчку в скрипте с удалением слоя меняем на эту
Код:
[Выделить все]
(if (/= (tblsearch "Layer" "_Подписи") nil) (command "_.laydel" "_n" "_Подписи" "" "_y"))
__________________
Мастерская СПДС

Последний раз редактировалось doctorraz, 08.03.2019 в 10:18. Причина: укоротил))
doctorraz вне форума  
 
Непрочитано 08.03.2019, 18:11
1 | #30
Кулик Алексей aka kpblc
Moderator

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


Или так:
Код:
[Выделить все]
(if (tblsearch "Layer" "_Подписи") (command-s "_.-laydel" "_n" "_Подписи" "" "_y"))
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 12.03.2019, 13:06
#31
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,665


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Уточнение: я документы открывал через ObjectDBX.
ну так это как бы совсем другое дело, а то, Алексей, вводишь людей в заблуждения, а они верют

----- добавлено через ~4 мин. -----
Цитата:
Сообщение от doctorraz Посмотреть сообщение
но я пока не увидел ни одной строчки высокого кода. по теме топа..
ну ежели по быренькому, на низком так сказать полёте, то можно, например, выполнить такой лисп, предварительно забив полный путь для обрабатываемой папки:
Код:
[Выделить все]
 
(setq work_directory "Диск:\\Рабочая папка\\")
(foreach dwg_file (vl-directory-files work_directory "*.dwg" 1)
	(princ (strcat "\nДокумент \"" (strcat work_directory dwg_file) "\" открыт"))
	(setq document_to_process (vla-open (vla-get-documents (vlax-get-acad-object)) (strcat work_directory dwg_file))
		  dwg_Layers_collection (vla-get-Layers document_to_process)
		  layer_to_delete_name "_Подписи"
	)
	(if (/= 'vl-catch-all-apply-error (type (setq layer_to_delete (vl-catch-all-apply 'vla-item (list dwg_Layers_collection layer_to_delete_name)))))
		(progn
			(princ (strcat "\nСлой \"" (vla-get-name layer_to_delete) "\" удалён"))
			(if (= 'vl-catch-all-apply-error (type (vl-catch-all-apply 'vla-delete (list layer_to_delete))))
				(progn
					(vla-put-activelayer document_to_process (vla-item dwg_Layers_collection "0"))
					(vla-delete layer_to_delete)
				)
			)
		)
		(princ (strcat "\nСлой \"" layer_to_delete_name "\" не найден"))
	)
	(princ (strcat "\n        Purging all..."))
	(vla-purgeall document_to_process)
	(princ (strcat "готово"))
	(princ (strcat "\n        Auditing..."))
	(vla-AuditInfo document_to_process :vlax-true)
	(princ (strcat "готово"))
	(vl-catch-all-apply 'vla-save (list document_to_process))
	(vla-close document_to_process)
	(princ (strcat "\nДокумент \"" (strcat work_directory dwg_file) "\" закрыт\n"))
)
(princ)

Последний раз редактировалось koMon, 12.03.2019 в 13:48.
koMon вне форума  
 
Непрочитано 14.07.2020, 10:06
#32
Sart


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


Точно такая же проблема как у ТС, долго искал подобный функционал. Отлично все работает (хоть и долго).
Для себя добавил в скрипт ссылку на лисп для внедрения xref.
Код:
[Выделить все]
 ;;Внедрение всех ссылок в чертеж

(defun C:vnedr ()
  (vl-load-com)
  (vlax-for i (vla-get-blocks
                (vla-get-activedocument (vlax-get-acad-object))
              ) ;_ end of vla-get-blocks
    (if (equal (vla-get-isxref i) :vlax-true)
      (vl-catch-all-apply 'vla-bind (list i :vlax-false))
    ) ;_ end of if
  ) ;_ end of vlax-for
  (princ)
) ;_ end 
По итогу скрипт выглядит так
Код:
[Выделить все]
(vl-cmdf "_-LAYER" "_u" "формат_роспись" "")
(vl-cmdf "CLAYER" "0")
(if (/= (tblsearch "Layer" "формат_роспись") nil) (command "_.laydel" "_n" "формат_роспись" "" "_y"))
(load "с:\\clean\\vnedr.LSP")
vnedr
(vl-cmdf "_-scalelistedit" "_r" "_y" "_e")
(vl-cmdf "_delconstraint" "_all" "")
(setvar "LAYEREVAL" 0)(setvar "LAYEREVALCTL" 0)(setvar "LAYERNOTIFY" 0)
(command "_.AUDIT" "_y")
(repeat 3 (vla-purgeall (vla-get-activedocument (vlax-get-acad-object))))
_qsave
_QUIT
Все работает но есть небольшой вопрос к знатокам.
Для сокращения времени на открытие автокада пробовал вместо команды _QUIT в конце команду _CLOSE. Команда работает с версиями автокада выше 2015 закрывая вкладку, но оставляя открытым сам автокад.
Только вот батник в данном случае не отрабатывает следующий файл, все заканчивается после обработки и закрытия первого файла. Можно это как то исправить?

P.S. Я по умолчанию не пользуюсь командной строкой, использую либо динамический ввод, либо если нужен лог текстовым окном которое открывается по F2.
При использовании данного скрипта автоматически появляется командная строка и лог работы ведется в ней. И затем по умолчанию автокад открывается всегда с командной строкой, каждый раз приходится закрывать ее.
Что можно сделать чтобы этого не происходило и лог при работе отображался именно в текстовом окне?

Последний раз редактировалось Sart, 14.07.2020 в 10:41. Причина: P.S.
Sart вне форума  
 
Непрочитано 14.07.2020, 11:39
#33
Кулик Алексей aka kpblc
Moderator

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


Попробуй использовать accoreconsole.exe
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 14.07.2020, 11:41
#34
Sart


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


В дополнение к предыдущему посту.
Нашел програмку AutoScript для запуска скриптов из окна автокада.
Описание http://imolodec.com/ace-articles/avt...riptov-chast-3
Ссылка на скачивание http://www.cadig.com/products/autocad-script-pro.php
Собственно она решает вопрос заданный в предыдущем посте.
В скрипте убираем две последние строки
_qsave
_QUIT
В настройках программы ставим галочки "Save the dravings..." и "Close the dravings..."
Запускаем скрипт из этой программы и тогда автокад не закрывается.

----- добавлено через ~1 мин. -----
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Попробуй использовать accoreconsole.exe
Из предыдущего обсуждения я так понял что с ней будут работать не все команды из скрипта, но сейчас попробую.

Последний раз редактировалось Sart, 14.07.2020 в 12:29.
Sart вне форума  
 
Непрочитано 14.07.2020, 12:02
#35
Кулик Алексей aka kpblc
Moderator

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


Я не очень понимаю, зачем внедрять ссылки. Тем не менее есть команда
Код:
[Выделить все]
_-.xref _bind *
которая выполнит внедрение всех ссылок.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 14.07.2020, 12:12
#36
Sart


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Попробуй использовать accoreconsole.exe
Не вышло
d:\Print>(
echo Processing d:\Print\399_1-Р-2-АТ-01.dwg
"c:\Program Files\Autodesk\AutoCAD 2020\accoreconsole.exe" /i "d:\Print\399_1-Р-2-АТ-01.dwg" /s "c:\clean\clean.scr" /l "en-US"
)
Processing d:\Print\399_1-Р-2-АТ-01.dwg
Redirect stdout (file: C:\Users\kulakov\AppData\Local\Temp\accc149162).
AcCoreConsole: StdOutConsoleMode: processed-output: enabled,auto
AutoCAD Core Engine Console - Copyright 2019 Autodesk, Inc. All rights reserved. (Q.111.0.0)

Execution Path:
c:\Program Files\Autodesk\AutoCAD 2020\accoreconsole.exe

Version Number: Q.111.0.0 (UNICODE)
Загружается модуль База AD...
Выполняется регенерация листов.
**** Системная переменная изменена ****
Отслеживаемым системным переменным (4) назначены значения, отличные от предпочтительных. Для просмотра изменений воспользуйтесь командой СИСТПЕРЕММОНИТОР.
Команда:
Команда:
Команда:
Команда: (vl-cmdf "_-LAYER" "_u" "формат_роспись" "")
Текущий слой: "формат_роспись"
Задайте параметр [?/Создать/Установить/Новый/ПЕРеименоватЬ/Вкл/Откл/Цвет/Тип/вЕс/пРозрачность/Материал/пеЧать/ПСтиль/Заморозить/РАзморозить/Блок/рАзблок/Конфигурация/опИсание/соГласовать/ВНешняя ссылка]: _u
Список имен слоев для разблокирования или <выбрать объекты>: формат_роспись Задайте параметр [?/Создать/Установить/Новый/ПЕРеименоватЬ/Вкл/Откл/Цвет/Тип/вЕс/пРозрачность/Материал/пеЧать/ПСтиль/Заморозить/РАзморозить/Блок/рАзблок/Конфигурация/опИсание/соГласовать/ВНешняя ссылка]:
Команда: (vl-cmdf "CLAYER" "0")
CLAYER
Новое значение CLAYER <"формат_роспись">: 0
Команда: (if (/= (tblsearch "Layer" "формат_роспись") nil) (command "_.laydel" "_n" "формат_роспись" "" "_y"))

d:\Print>(
echo Processing d:\Print\399_1-Р-2-АТ-02.dwg
"c:\Program Files\Autodesk\AutoCAD 2020\accoreconsole.exe" /i "d:\Print\399_1-Р-2-АТ-02.dwg" /s "c:\clean\clean.scr" /l "en-US"
)
Processing d:\Print\399_1-Р-2-АТ-02.dwg
Redirect stdout (file: C:\Users\kulakov\AppData\Local\Temp\accc471082).
AcCoreConsole: StdOutConsoleMode: processed-output: enabled,auto
AutoCAD Core Engine Console - Copyright 2019 Autodesk, Inc. All rights reserved. (Q.111.0.0)

Execution Path:
c:\Program Files\Autodesk\AutoCAD 2020\accoreconsole.exe

Version Number: Q.111.0.0 (UNICODE)
Загружается модуль База AD...
Выполняется регенерация листов.
Выполняется регенерация модели.
**** Системная переменная изменена ****
Отслеживаемым системным переменным (4) назначены значения, отличные от предпочтительных. Для просмотра изменений воспользуйтесь командой СИСТПЕРЕММОНИТОР.
Команда:
Команда:
Команда:
Команда: (vl-cmdf "_-LAYER" "_u" "формат_роспись" "")
Текущий слой: "СВЯЗЬ"
Задайте параметр [?/Создать/Установить/Новый/ПЕРеименоватЬ/Вкл/Откл/Цвет/Тип/вЕс/пРозрачность/Материал/пеЧать/ПСтиль/Заморозить/РАзморозить/Блок/рАзблок/Конфигурация/опИсание/соГласовать/ВНешняя ссылка]: _u
Список имен слоев для разблокирования или <выбрать объекты>: формат_роспись Задайте параметр [?/Создать/Установить/Новый/ПЕРеименоватЬ/Вкл/Откл/Цвет/Тип/вЕс/пРозрачность/Материал/пеЧать/ПСтиль/Заморозить/РАзморозить/Блок/рАзблок/Конфигурация/опИсание/соГласовать/ВНешняя ссылка]:
Команда: (vl-cmdf "CLAYER" "0")
CLAYER
Новое значение CLAYER <"СВЯЗЬ">: 0
Команда: (if (/= (tblsearch "Layer" "формат_роспись") nil) (command "_.laydel" "_n" "формат_роспись" "" "_y"))

d:\Print>pause
Для продолжения нажмите любую клавишу . . .


Цитата:
Я не очень понимаю, зачем внедрять ссылки
Требование заказчика
Не помню почему, но предложенная команда почему то не устраивала, давненько уже разбирался. Пришлось использовать именно данный лисп для внедрения.

Вспомнил почему не использую "_-.xref _bind *"
Данная команда не внедряет ссылки если есть проблемы со ссылками 2 уровня, т.е. вложенными в используемые ссылки. Если одна из подссылок неподгружена или удалена, данная команда выдает ошибку. А приложенный лисп игнорирует данные косяки и внедряет в любом случае.

Последний раз редактировалось Sart, 15.07.2020 в 05:14. Причина: Дополнение
Sart вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как в лисп PurgeFiles.lsp внедрить команду _.laydel, чтобы это работало

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать, чтобы ключевые слова отображались в менюшке? -mavlin- Программирование 3 06.05.2009 15:32
Задумал лисп для layout Red Nova LISP 40 05.06.2008 17:59
Нужен маленький лисп - для текста maksimys LISP 2 28.11.2007 08:51
Нужен лисп (пронизыватель лайаутов) dextron3 LISP 91 25.07.2007 07:37
Из лиспа в команду. Pave1 LISP 4 25.07.2005 16:08