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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Готовые программы > LISP. Подготовка подосновы

LISP. Подготовка подосновы

Ответ
Поиск в этой теме
Непрочитано 13.04.2011, 20:25 24 |
LISP. Подготовка подосновы
VVA
 
Инженер LISP
 
Минск
Регистрация: 11.05.2005
Сообщений: 6,990

Набор команд, опубликованных в теме Подоснова
Желательно ознакомиться с указанной темой или как минимум с описанием
Описание команд
Код:
[Выделить все]
BGLAYDEL - Удаление выключенных и замороженных слоев с примитивами
BG1BLEXP - Взрывает блоки, состоящие из одного примитива (возможно другого блока)
BGBLEXP  - Взрывает блок и все блоки, входящие в него, превращая видимые атрибуты в текст
BGBLEXP1 - Взрывает блоки 1-го уровня, превращая видимые атрибуты в текст
BGBLDYNEXP1 - Взрывает динамические блоки 1-го уровня, превращая видимые атрибуты в текст
BGBLEXP1NOATT - Взрывает блоки 1-го уровня, у которых нет видимых атрибутов
BGBLXCLIP - Показывает подрезанные блоки
BGBLDYN2A - Преобразовывает динамические блоки в анонимные
BGBLDYN2S - Преобразовывает динамические блоки в статические
BGBLALLDYN2A - Преобразовывает ВСЕ динамические блоки в анонимные    
BGBLALLDYN2S - Преобразовывает ВСЕ динамические блоки в статические  
BGBLXCLIPEXP - взорвать подрезанный блок
BGCB - копирует одно из вхождений блока в блок с новым именем 
BGRB - переименовывает одно из вхождений блока в блок с новым именем
M2U - Преобразовать MINSERT в Unnamed блок
M2B - Преобразовать MINSERT в блок
U2B - Преобразовать UNNAMED в блок
U2BM - Преобразовать UNNAMED в блок множественный выбор
UX - Взорвать UNNAMED блок
=======================================
BGRGB2ACI - Изменяет цвет с RGB на ACI
BGAll2RGB - Изменяет ACI цвет в его RGB эквивалент
BGCOLOR - Задает выбранный цвет всем объектам
BGCOLORCMD - Задает выбранный цвет всем объектам с запросом в командной строке
BGCOLORXREF - Меняет цвет выбранных внешних сылок (только в текушем сеансе)
BGCOLBL - Установка "послою" цвета примитивов подосновы. Если цвет задан явно- создается новый слой !Новое с версии 3.0
BGResetXRef -Сброс настроек слоев выбранных внешних ссылок на установленные в исходном файле
BGBLCC - Изменяет цвет выбранных блоков
BGENCC - Изменяет цвет выбранного элемента блока
BGCATT - Изменяет цвет атрибутов выбранных блоков
BGCBL2 - Изменяет цвет в блоках 2 и более уровня (вложенных блоках)
BGBLFIX - Нормализация блоков (цвет, слой, взрываемость и т.п.)
BGCFT   - Конвертирует все поля в обычный текст
BGCFTSEL - конвертирование полей в обычный текст в выбранных примитивах
BGHATCHDEL - Удаление штриховки
Текущая версия 3.13a
Отличие версий 3.3 и 3.6 и выше - переписана функция взрыва блоков (команды BGBLEXP...)
В версии 3.3 - вариант из expresstools. Сохраняются поля при взрыве. Медленная обработка при большом количестве блоков
В версии 3.6 функция bg:BURST-ONE заменена функцией Lee Mac LM:burst. На порядок быстрее, если атрибут многострочный и включена маскировка - получаем маскированный мтест.
Поля не сохраняются.

Код:
[Выделить все]
;;;	Версии:
;;;	1.0 - исправлены ошибки burst - при наследовании типа линии поблоку, показ скрытых атрибутов и наследования типа линии блока
;;;	                                если в блок примитив входил не на 0 слое, тип линии поблоку.
;;;	      добавлена обработка Burst LineWeight
;;;	1.1  изменение цвета блока при наличии атрибутов (см ;;; Change VVA 12.09.2008)
;;;	...
;;;	1.4  Обработка стилей мультилиний
;;;	1.11 ChangeAllObjectsColor - Обработка размеров, leader и mtext с явным заданием цвета.
;;;	     BGBLEXP - обработка видимостей динамических блоков (если в видимости включены атрибуты)
;;;	     BG1BLEXP - Обабатываются блоки, состоящие из одного элемента и
;;;	     - имя блока A$C*
;;;	     - или любое другое имя и этот один элемент другой блок
;;;	1.12 - Не удаляет блоки, расположенные на выключенном/ замороженном слое
;;;	       и имеющие хотя бы 1 примитив на включенном слое, отличном от "0"
;;;	2.0  - BGBLEXP - исправлена ошибка со списком
;;;	2.1  - обработка блоков внешних ссылок ChangeXrefAllObjectsColor
;;;	2.2  - команда BGCFT
;;;	2.3  - add BGCOLORXREF and BGRGB2ACI
;;;	2.4  - Обработка многострочных атрибутов
;;;     2.5  - Добавленна gc:FieldCode ChangeAllObjectsColor ChangeXrefAllObjectsColor - обработка Unicode символов
;;;     2.6  - Добавленны команды BGBLDYN2A BGBLDYN2S
;;;     2.7  - Добавлена обработка предварительного выбора
;;;     2.8  - Баги с обработкой атрибутов и visibility
;;;     2.9 - Команда BGBLDYNEXP1 
;;;     2.9.1 - добавлена ф-ция bg:massoc
;;;     2.10  - Конвертация динамических блоков  bg:DynToStatic. Сохранение и восстановление значений атрибутов
;;;     2.11 - Изменения в bg:get-all-atts (обработка UNICOD символов в значениях атрибутов)
;;;              добавлена команда BGHATCHDEL
;;;             ChangeAllObjectsColor - change table text and grid color
;;;    2.12  - Учтен lineweight для атрибутов. Изменен BgBlFIX
;;;    2.13  - Добавлена функция BG:GET-TEXTSTRING (как замена vla-get-textstring. Т.к. неверно возвращает строку при наличии юникод символов)
;;;    2.14  - Добавлена команда BGAll2RGB Изменена ClearFieldInAllObjects
;;;    2.15  - Небольшие изменения в BGAll2RGB. добавлены BGCB и BGRB
;;;;   2.16  - BGCBL2 теперь работает с RGB и ACI цветами
;;;;   2.17  - BGBLCC  теперь работает с RGB и ACI цветами + мелкие изменения
;;;;   2.18  - Учтено предложение http://forum.dwg.ru/showpost.php?p=949149&postcount=102
;;;;           Добавлена команда BGBLXCLIPEXP
;;;;   2.19  - Команда BGBLFIX. Добавлена опция игнорирования блокированных слоев
;;;    2.22  - Добавлены опции Одинаковые масштабы и Разрешить расчленение
;;;    2.23 - Внесены изменения в команду BGBLXCLIPEXP
;;;    2.24  - Отредактирована команда UX (вложенность анонимных блоков)
;;;    2.25  - Fix BGBLCC и BGCBL2 command. Add BGCFTSEL
;;;    2.26  - BGCFT - добавлена обработка формата текста в таблице. Добавлены команды BGBLALLDYN2A и BGBLALLDYN2S
;;;    2.27  - в командах U2B ,UX добавлена обработка блоков с именем *E
;;;    2.28  - BGCFT - исправлена ошибка + изменения в function bg:DynToStatic
;;;    2.29  - Исправлен недочет ClearFieldInThisObject
;;;    2.30    Fixed minor bugs in function ClearFieldInThisObject   http://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/vla-get-textstring-u-symbols/td-p/4365165
;;;    2.31    BGCFT добавлена очистка полей в размерах  ( http://forum.dwg.ru/showthread.php?p=1335110#post1335110 )
;;;    2.32    изменения в bg:get-TextString (http://forum.dwg.ru/showpost.php?p=1386990&postcount=235)
;;;    2.33    изменения в bg:get-TextString (http://forum.dwg.ru/showpost.php?p=1386990&postcount=252) 
;;;    2.34    BGBLFIX обработка именованных стилей печати
;;;    2.35    BGBLEXP изменения
;;;    2.36    изменения в команде UX http://forum.dwg.ru/showthread.php?p=1421560#post1421560
;;;    2.37    BGCFT исправлена ошибка при обработке заблокированных ячеек таблицы
;;;    2.38    BGLAYDEL исправлена ошибка с востановлением слоев
;;;    2.40    Изменения в ф-ции bg:FieldCode. Добавлена ф-ция bg:GetObjectIDString mark VVA 2015-12-07
;;;    2.41    Изменения в ф-ции ClearFieldInThisObject. Обработка значений размеров над и под размерной линией. Mark VVA 2016-01-04
;;;    3.0    Добавлена команда BGCOLBL
;;;            Установка послою цвета примитивов подосновы. Если цвет задан явно- создается новый слой
;;;    3.1    BGBLEXP - сохранение полей в атрибутах
;;;   3.2    BGCFT игнор
;;;   3.3    Исправление в команде M2B
;;;   3.4    Исправление fix bg:explode-block (исключение обработки внешних ссылок)
;;;   3.5    BG:BURST-ONE измененая для сохранения постоянных атрибутов
;;;   3.6    добавлено bg:del-constraint в BGBLEXP
;;;   3.7    изменения в команде M2B
;;;   3.8    Изменения в bg:FieldCode (http://forum.dwg.ru/showpost.php?p=1754063&postcount=467)
;;;   3.9    Изменения BGLAYDEL. Слои удаляются командой _-LAYDEL
;;;   3.10   Добавлена команда BGCOLORCMD
;;;;  3.11   Изменения BGLAYDEL
;;;;  3.12   Изменения в функции mip_MTEXT_Unformat (VVA 2021-12-24)
;;;;          https://forum.dwg.ru/showthread.php?p=1975506#post1975506
;;;;   3.12a   Изменения в функции bg:hatch-delete-form-Block (VVA 2022-05-13)
;;;;            https://forum.dwg.ru/showpost.php?p=1991289&postcount=624

Полезные ссылки
C2L - Color to Layer или еще здесь
COLORFL - Color From Layer
PFL - Properties From Layer

Вложения
Тип файла: zip bgtools 3.3.zip (53.6 Кб, 6481 просмотров)
Тип файла: zip bgtools3.13b.zip (57.3 Кб, 205 просмотров)

__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 29.01.2024 в 16:36. Причина: См историю изменений
Просмотров: 411531
 
Непрочитано 29.04.2022, 10:40
#621
Composter

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


Добрый день. подскажите почему BG1BLEXP не взрывает блок из 1 элемента. файл прикладываю.
Вложения
Тип файла: dwg
DWG 2018
111.dwg (105.3 Кб, 33 просмотров)
Composter вне форума  
 
Непрочитано 29.04.2022, 10:56
#622
csi


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


Возможно, потому что нет такой команды.
BGBLEXP и BGBLEXP1 взрывают.

ADD: Да, проглядел... Подтверждаю поведение команды для данного файла/блока.

Последний раз редактировалось csi, 29.04.2022 в 11:38.
csi вне форума  
 
Непрочитано 29.04.2022, 11:11
#623
Composter

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


Цитата:
Сообщение от csi Посмотреть сообщение
Возможно, потому что нет такой команды.
BGBLEXP и BGBLEXP1 взрывают.
Ну воп первых она срабатывает только пишет
Exploded 0 blocks with one element. Found 0 blocks has xclip boundary.

А во вторых если открыть шапку темы , то это вторая команда сверху. Вы возможно темой ошиблись?
Composter вне форума  
 
Непрочитано 04.05.2022, 15:48
#624
Alexey_02


 
Регистрация: 23.05.2007
Москва
Сообщений: 97


BGHATCHDEL - Удаление штриховки
Команда спрашивает "Удалять штриховку с заблокированных или замороженных слоев?"
При нажатии кнопки "Нет" всё равно штриховку (штриховка в блоках и просто штриховка) удаляет с выключенных и/или замороженных слоёв. Штриховку на блокированном слое, при нажатии кнопки "Нет" оставляет.
По смыслу должна не трогать штриховки, на замороженном слое? Следовательно не правильно что-то. Хотелось бы еще, чтобы учитывала "выключенный" слой.
Проверял на "bgtools 3.3" и "bgtools 3.12". AutoCAD 2018ru
__________________
Вот так вот, ...
Alexey_02 вне форума  
 
Автор темы   Непрочитано 13.05.2022, 12:54
1 | #625
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Цитата:
Сообщение от Alexey_02 Посмотреть сообщение
Следовательно не правильно что-то
Поправил. Обновил #1
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 18.05.2022, 15:03
#626
Alexey_02


 
Регистрация: 23.05.2007
Москва
Сообщений: 97


Цитата:
Сообщение от VVA Посмотреть сообщение
Поправил. Обновил #1
Благодарю. Теперь BGHATCHDEL работает как написано.
__________________
Вот так вот, ...
Alexey_02 вне форума  
 
Непрочитано 28.05.2022, 16:23
#627
crosandr

Инженер-строитель
 
Регистрация: 09.07.2010
Санкт-Петербург
Сообщений: 1,988


Можно как-то массово переименовать безымянные блоки *U... и блоки типа U... ? В чертеж многократно копировалась информация из файлов компаса и эти блоки засели неизвестно где, их никак не отловить и не удалить. При новой вставке получается конфликт имен, соответственно вставляется совсем не то, что в исходнике.
crosandr вне форума  
 
Автор темы   Непрочитано 13.06.2022, 14:22
1 | #628
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Цитата:
Сообщение от crosandr Посмотреть сообщение
Можно как-то массово переименовать безымянные блоки *U... и блоки типа U... ? В чертеж многократно копировалась информация из файлов компаса и эти блоки засели неизвестно где, их никак не отловить и не удалить. При новой вставке получается конфликт имен, соответственно вставляется совсем не то, что в исходнике.
U2BM - Преобразовать UNNAMED в блок множественный выбор
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 06.07.2022, 09:15
#629
Sergi


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


Народ подскажите.
M2B отрабатывает(взрывает МН-блок до простого блока) если МН-блок больше чем 1х1.
Если блок 1х1 - М2В не работает.
BG1BLEXP
U2B
UX
Эти команды тоже не работают.

MH_1x1.dwg

Последний раз редактировалось Sergi, 06.07.2022 в 09:54.
Sergi вне форума  
 
Непрочитано 06.07.2022, 12:21
#630
ksumatokhin


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


Здравствуйте,
А можно ли добавить функцию BGCOLLTLWBL, которая помимо цвета разбирала бы и на толщину и на тип линий?
Может быть интересна была бы функция, в которой параметры COL LT LW можно было бы включать и выключать по необходимости.
Ведь бывают подосновы, которые вообще все на 2-х слоях нарисованы...
ksumatokhin вне форума  
 
Непрочитано 07.07.2022, 16:00
1 | #631
ksumatokhin


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


Здравствуйте,
Предлагаю для функции BGCOLLTLWBL на основе BGCOLBL участок кода с перебором примитивов заменить на что то подобное:
Код:
[Выделить все]
 (vlax-for item (vla-get-modelspace doc)

  (if (and (vlax-write-enabled-p item)
	   (vlax-property-available-p item 'Color)
      )
    (vl-catch-all-apply
      'vla-put-color
      (list item (vla-get-color item))
    )
  )

  (setq Lay (vla-get-layer item))
  (if (not (wcmatch Lay "*|*"))
    (progn
      (setq val
	     (mapcar
	       '(lambda	(par / a b)
		  (setq	a (vlax-get item par)
			b (vlax-get (vla-item (vla-get-layers doc) Lay) par)
		  )
		  (cond
		    ((= par 'Color)
		     (cond ((= a 256) nil)
			   ((= a b)
			    (vl-catch-all-apply 'vlax-put (list item par acbylayer))
			    nil
			   )
			   ((and (= a 0) (= b 7))
			    (vl-catch-all-apply 'vlax-put (list item par acbylayer))
			    nil
			   )
			   (t a)
		     )
		    )
		    ((= par 'Lineweight)
		     (cond ((= a -1) nil)
			   ((or (= a -2) (= a -3)) (getvar "LWDEFAULT"))
			   (t a)
		     )
		    )
		    ((= par 'Linetype)
		     (cond ((= a "ByLayer") nil)
			   ((and (= a "ByBlock") (= b "Continuous"))
			    (vl-catch-all-apply 'vlax-put (list item par "ByLayer"))
			    nil
			   )
			   ((= a "ByBlock") "Continuous")
			   (t a)
		     )
		    )
		  )
		)
	       '(Color Lineweight Linetype)
	     )
      )
      ; Создаем слой
      (setq tmp (mapcar '(lambda (a) (if (= (type a) 'INT) (itoa a) a)) val))
      (and (setq name (mapcar '(lambda (a b) (if a (strcat b a))) tmp '("_C_" "_LW_" "_LT_")))
	   (setq name (vl-remove-if 'null name))
	   (setq name (apply 'strcat name))
	   (setq tmp (vla-item (vla-get-layers doc) Lay))
	   (setq tmp
		  (bg:layer-create
		    (list
                      (cons "name" (setq name (strcat Lay name)))
                      (cons "color" (if (nth 0 val) (nth 0 val) (vla-get-color tmp)))
                      (cons "lw" (if (nth 1 val) (nth 1 val) (vla-get-lineweight tmp)))
                      (cons "lt" (if (nth 2 val) (nth 2 val) (vla-get-linetype tmp)))
                      (cons "plot" (if (eq (vla-get-plottable tmp) :vlax-true) "y" "n")) 
                    ) 
                  ) 
            )
	   (mapcar '(lambda (par val) (vl-catch-all-apply 'vlax-put (list item par val))) '(Color Lineweight Linetype Layer) (list 256 -1 "ByLayer" name))
	   )
    )
  )
)
----- добавлено через ~47 мин. -----
Так же можно пройтись и по блокам:
Код:
[Выделить все]
 (vlax-for item (vla-get-blocks doc)
    (if (and
          (eq (vla-get-islayout item) :vlax-false) ;_ не листы
          (eq (vla-get-isxref item) :vlax-false) ;_ не внешние ссылки
          (not (wcmatch (vla-get-name item) "*|*"))
        ) ;_ end of and
      (progn
        (vlax-for sub_item item
          (vl-catch-all-apply
            '(lambda ()
                     (setq Lay (vla-get-layer sub_item))
               (if (not (wcmatch Lay "*|*"))  ;_пропускаем внешние ссылки
                 (progn
                   (setq val
                         (mapcar
                           '(lambda (par / a b)
                                    (setq a (vlax-get sub_item par)
                                          b (vlax-get (vla-item (vla-get-layers doc) Lay) par)
                                    )
                              (cond
                                ((= par 'Color)
                                  (cond
                                    ((= a 256) nil)
                                    ((= a b)
                                        (vl-catch-all-apply 'vlax-put (list sub_item par acbylayer))
                                        nil
                                    )
                                    ((= a 0) nil)
                                    (t a)
                                  )
                                )
                                ((= par 'Lineweight)
                                  (cond
                                    ((= a -1) nil)
                                    ((= a -2) nil)
                                    ((= a -3) (getvar "LWDEFAULT"))
                                    (t a)
                                  )
                                )
                                ((= par 'Linetype)
                                  (cond
                                    ((= a "ByLayer") nil)
                                    ((= a "ByBlock") nil)
                                    (t a)
                                  )
                                )
                              )
                            )
                                 '(Color Lineweight Linetype)
                         )
                   )
                   ; Создаем слой
                   (setq tmp (mapcar '(lambda (a) (if (= (type a) 'INT) (itoa a) a)) val))
                   (and (setq name (mapcar '(lambda (a b) (if a (strcat b a))) tmp '( "_C_" "_LW_" "_LT_")))
                        (setq name (vl-remove-if 'null name))
                        (setq name (apply 'strcat name))
                        (setq tmp (vla-item (vla-get-layers doc) Lay))
                        (setq tmp
                              (bg:layer-create
                                (list
                                  (cons "name" (setq name (strcat Lay name)))
                                  (cons "color" (if (nth 0 val) (nth 0 val) (vla-get-color tmp)))
                                  (cons "lw" (if (nth 1 val) (nth 1 val) (vla-get-lineweight tmp)))
                                  (cons "lt" (if (nth 2 val) (nth 2 val) (vla-get-linetype tmp)))
                                  (cons "plot" (if (eq (vla-get-plottable tmp) :vlax-true) "y" "n"))
                                )
                              )
                        )
                        (mapcar '(lambda (par val) (vl-catch-all-apply 'vlax-put (list sub_item par val))) '(Color Lineweight Linetype Layer) (list 256 -1 "ByLayer" name))
                   )
                 )
               )
             )
          )
        )
      )
    )
  )
Если красиво обернуть запрос пользователя на параметры: Цвет Толщина и Тип линии, то можно получать список параметров типа '(Color Lineweight Linetype) или только '(Color). Программа сможет на основе этого списка сортировать элементы. Так же на мой взгляд можно добавить переключатель: обрабатывать блоки или нет.

Уважаемые авторы программы как вам такая идея?

----- добавлено через ~21 ч. -----
Вот, что в итоге у меня получилось. Без переключателя на обработку блоков:
Код:
[Выделить все]
 (load "bgtools 3.12a.lsp")

(defun c:BGCOLLTLWBL (/ doc GPAR item Lay val tmp name sub_item)

  (vl-load-com)
  (setq doc (vla-get-activedocument (vlax-get-acad-object)))
  (initget 6)
  (setq GPAR (if (null (setq GPAR (getint "\nВведите бит где 1-COL, 2-LW, 4-LT <7>: "))) 7 GPAR))
  (setq GPAR
        (list
          (if (/= 0 (logand 1 GPAR)) 'Color nil)
          (if (/= 0 (logand 2 GPAR)) 'Lineweight nil)
          (if (/= 0 (logand 4 GPAR)) 'Linetype nil)
        )
  )

  (vlax-for item (vla-get-modelspace doc)

    (if (and (vlax-write-enabled-p item)
             (vlax-property-available-p item 'Color)
        )
      (vl-catch-all-apply
        'vla-put-color
        (list item (vla-get-color item))
      )
    )

    (setq Lay (vla-get-layer item))
    (if (not (wcmatch Lay "*|*"))
      (progn
        (setq val
              (mapcar
                '(lambda (par / a b)
                   (if par
                     (progn
                       (setq a (vlax-get item par)
                             b (vlax-get (vla-item (vla-get-layers doc) Lay) par)
                       )
                       (cond
                         ((= par 'Color)
                           (cond
                             ((= a 256) nil)
                             ((= a b)
                                 (vl-catch-all-apply 'vlax-put (list item par acbylayer))
                                 nil
                             )
                             ((and (= a 0) (= b 7))
                                   (vl-catch-all-apply 'vlax-put (list item par acbylayer))
                                   nil
                             )
                             (t a)
                           )
                         )
                         ((= par 'Lineweight)
                           (cond
                             ((= a -1) nil)
                             ((or (= a -2) (= a -3)) (getvar "LWDEFAULT"))
                             (t a)
                           )
                         )
                         ((= par 'Linetype)
                           (cond
                             ((= a b) nil)
                             ((= a "ByLayer") nil)
                             ((and (= a "ByBlock") (= b "Continuous"))
                                   (vl-catch-all-apply 'vlax-put (list item par "ByLayer"))
                                   nil
                             )
                             ((= a "ByBlock") "Continuous")
                             (t a)
                           )
                         )
                       )
                     )
                   )
                 )
                      GPAR
              )
        )
        ; Создаем слой
        (setq tmp (mapcar '(lambda (a) (if (= (type a) 'INT) (itoa a) a)) val))
        (and (setq name (mapcar '(lambda (a b) (if a (strcat b a))) tmp '( "_C_" "_LW_" "_LT_")))
             (setq name (vl-remove-if 'null name))
             (setq name (apply 'strcat name))
             (setq tmp (vla-item (vla-get-layers doc) Lay))
             (setq tmp
                   (bg:layer-create
                     (list
                       (cons "name" (setq name (strcat Lay name)))
                       (cons "color" (if (nth 0 val) (nth 0 val) (vla-get-color tmp)))
                       (cons "lw" (if (nth 1 val) (nth 1 val) (vla-get-lineweight tmp)))
                       (cons "lt" (if (nth 2 val) (nth 2 val) (vla-get-linetype tmp)))
                       (cons "plot" (if (eq (vla-get-plottable tmp) :vlax-true) "y" "n"))
                     )
                   )
             )
             (mapcar '(lambda (par val) (if par (vl-catch-all-apply 'vlax-put (list item par val)))) (append GPAR '(Layer)) (list 256 -1 "ByLayer" name))
        )
      )
    )
  )
;;; Проходимся по блокам
  (vlax-for item (vla-get-blocks doc)
    (if (and
          (eq (vla-get-islayout item) :vlax-false) ;_ не листы
          (eq (vla-get-isxref item) :vlax-false) ;_ не внешние ссылки
          (not (wcmatch (vla-get-name item) "*|*"))
        ) ;_ end of and
      (progn
        (vlax-for sub_item item
          (vl-catch-all-apply
            '(lambda ()
                     (setq Lay (vla-get-layer sub_item))
               (if (not (wcmatch Lay "*|*"))  ;_пропускаем внешние ссылки
                 (progn
                   (setq val
                         (mapcar
                           '(lambda (par / a b)
                              (if par
                                (progn
                                  (setq a (vlax-get sub_item par)
                                        b (vlax-get (vla-item (vla-get-layers doc) Lay) par)
                                  )
                                  (cond
                                    ((= par 'Color)
                                      (cond
                                        ((= a 256) nil)
                                        ((= a b)
                                            (vl-catch-all-apply 'vlax-put (list sub_item par acbylayer))
                                            nil
                                        )
                                        ((= a 0) nil)
                                        (t a)
                                      )
                                    )
                                    ((= par 'Lineweight)
                                      (cond
                                        ((= a -1) nil)
                                        ((= a -2) nil)
                                        ((= a -3) (getvar "LWDEFAULT"))
                                        (t a)
                                      )
                                    )
                                    ((= par 'Linetype)
                                      (cond
                                        ((= a b) nil)
                                        ((= a "ByLayer") nil)
                                        ((= a "ByBlock") nil)
                                        (t a)
                                      )
                                    )
                                  )
                                )
                              )
                            )
                                 GPAR
                         )
                   )
                   ; Создаем слой
                   (setq tmp (mapcar '(lambda (a) (if (= (type a) 'INT) (itoa a) a)) val))
                   (and (setq name (mapcar '(lambda (a b) (if a (strcat b a))) tmp '( "_C_" "_LW_" "_LT_")))
                        (setq name (vl-remove-if 'null name))
                        (setq name (apply 'strcat name))
                        (setq tmp (vla-item (vla-get-layers doc) Lay))
                        (setq tmp
                              (bg:layer-create
                                (list
                                  (cons "name" (setq name (strcat Lay name)))
                                  (cons "color" (if (nth 0 val) (nth 0 val) (vla-get-color tmp)))
                                  (cons "lw" (if (nth 1 val) (nth 1 val) (vla-get-lineweight tmp)))
                                  (cons "lt" (if (nth 2 val) (nth 2 val) (vla-get-linetype tmp)))
                                  (cons "plot" (if (eq (vla-get-plottable tmp) :vlax-true) "y" "n"))
                                )
                              )
                        )
                        (mapcar '(lambda (par / val)
                                   (if par
                                     ;(setq val (vlax-get sub_item par))
                                     (cond
                                       ((= par 'Color)
                                           (setq val (if (= (vlax-get sub_item par) 0) 0 256))
                                           (vl-catch-all-apply 'vlax-put (list sub_item par val))
                                       )
                                       ((= par 'Lineweight)
                                           (setq val (if (= (vlax-get sub_item par) -2) -2 -1))
                                           (vl-catch-all-apply 'vlax-put (list sub_item par val))
                                       )
                                       ((= par 'Linetype)
                                           (setq val (if (= (vlax-get sub_item par) "ByBlock") "ByBlock" "ByLayer"))
                                           (vl-catch-all-apply 'vlax-put (list sub_item par val))
                                       )
                                       ((= par 'Layer)
                                           (vl-catch-all-apply 'vlax-put (list sub_item par name))
                                       )
                                     )
                                   )
                                 )
                                (append GPAR '(Layer))
                        )
                   )
                 )
               )
             )
          )
        )
      )
    )
  )
)
ksumatokhin вне форума  
 
Непрочитано 14.09.2022, 01:26
#632
engngr

сети
 
Регистрация: 03.11.2008
Московия*
Сообщений: 5,767


Пробую пофиксить стили печати всех блоков на "по слою":
Command: _BGBLFIX
; error: Automation Error. The drawing is in color dependent plot style mode
Command:
Command: _PSTYLEMODE
PSTYLEMODE = 0 (read only)

Версия autocad 2022, версия bgtools 3.12a, файл могу отправить в приватном порядке. По возможности прошу посмотреть, что не так, и исправить.
engngr на форуме  
 
Непрочитано 14.09.2022, 07:48
#633
Кулик Алексей aka kpblc
Moderator

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


Может, _.convertpstyles сработает?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 14.09.2022, 09:50
#634
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


engngr, Вышли файл. Уже сталкивался с тем, что Автодеск начиная с 2021 Автокада изменил работу некоторых методов, например vla-put-ColorMethod. Приходится проверять версию Автокада
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 15.09.2022, 16:53
1 | #635
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Цитата:
Сообщение от engngr Посмотреть сообщение
Версия autocad 2022, версия bgtools 3.12a, файл могу отправить в приватном порядке. По возможности прошу посмотреть, что не так, и исправить.
Обновил до версии 3.13
Короче там ошибка выскакивала при попытке получить описание анонимного блока [(vla-item (vla-get-blocks adoc) bname))]
Поставил отлов ошибок. Проверяй
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 06.10.2022, 09:39
#636
posetitel


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


скажите, а есть одна общая команда, чтобы запустил и все вышеперечисленные команды сразу выполнились, т.е. подоснову взорвали-расчленили-удалили лишнее? не нашел в теме, может уже спрашивали
posetitel вне форума  
 
Непрочитано 06.10.2022, 10:08
#637
RNB

Проектирование мостов
 
Регистрация: 29.01.2014
Новосибирск
Сообщений: 433


Цитата:
Сообщение от posetitel Посмотреть сообщение
скажите, а есть одна общая команда, чтобы запустил и все вышеперечисленные команды сразу выполнились, т.е. подоснову взорвали-расчленили-удалили лишнее? не нашел в теме, может уже спрашивали
Offtop: а еще сварила кофе и испекла круассан
Команда, которая всё взорвет здесь есть. А вот по поводу удалить лишнее - это же настолько индивидуальное понятие - "лишнее", у кого-то полчертежа, у кого-то 2 примитива...
RNB вне форума  
 
Непрочитано 09.02.2023, 06:26
#638
mogulfx

инженер
 
Регистрация: 11.08.2017
Сообщений: 13


День добрый! Извиняюсь за глупый вопрос, но как в теле своего лиспа применить команду BGBLEXP1 к набору, созданному через ssget по координатам? Чтобы не руками выбирать
mogulfx вне форума  
 
Автор темы   Непрочитано 10.02.2023, 17:17
#639
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Команда обрабатывает предварительный выбор. Функция SSSETFIRST "подсветит" набор. Пример ниже
Пусть набор будет сохранен в переменную ss
Код:
[Выделить все]
(SSSETFIRST ss ss)
(C:BGBLEXP1)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 14.02.2023, 06:33
#640
mogulfx

инженер
 
Регистрация: 11.08.2017
Сообщений: 13


Не получается. Всё равно выходит запрос на выбор объектов руками.
Предварительный набор по координатам
Код:
[Выделить все]
 (setq ss2 (ssget "_C" minpt maxpt'((0 . "INSERT"))))
mogulfx вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Готовые программы > LISP. Подготовка подосновы

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Научите лиспу на примере (или как kpblc, VVA и компания пытаются обучить чайника лиспу) Red Nova LISP 4555 24.03.2024 13:44
{Конкурс} Lisp. Задачки для студентов gomer LISP 10 05.01.2011 16:33
LISP на команду 3dcorbit Малюк LISP 2 30.09.2009 14:18
Запуск Lisp команды в новом документе BlackHarp LISP 1 26.03.2009 23:06
загрузка DOS прог через LISP Gaa LISP 15 12.08.2005 19:19