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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Проверить свойства элемента внутри блока из изменить их

Проверить свойства элемента внутри блока из изменить их

Ответ
Поиск в этой теме
Непрочитано 22.07.2024, 19:00 #1
Проверить свойства элемента внутри блока из изменить их
olga87
 
Регистрация: 28.05.2007
Сообщений: 229

Здравствуйте Уважаемые специалисты AutoCAD!

Подскажите пожалуйста, как на lisp можно для выделенного блока изменить с проверкой: для каждого элемента внутри блока, если его цвет, тип линии и вес "По слою", то изменить на "По блоку"?
Блок может быть статическим или динамическим.

Есть такой код ниже, подскажите пожалуйста как можно его изменить для выполнения изменения с "По слою" на "По блоку" для выбранного блока:

Код:
[Выделить все]
 (defun C:changecol ( / c1 c2 ss n)
    (vl-load-com)
	(setq c1 (getint "\nКакой исходный цвет: ") c2 (getint "\nКакой новый цвет: "))
    (defun get-block-entity-list (ent / block_def block_cont res)
        (setq block_def (vla-item (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))
                                  (vla-get-effectivename ent)
                        )
        )
        (setq block_cont ((lambda (/ res)
                            (vlax-for sub block_def
                              (setq res (cons sub res))
                              )
                            (reverse res)
                            )
                          )
        )
        block_cont
    )
    (setq ss (ssget "_X" (list (cons 0 "INSERT")))
          n 0
    )
    (repeat (sslength ss)
        (mapcar (function (lambda (x) 
                                (cond
                                    ((= (vla-get-color x) c1)
                                        (vla-put-color x c2)
                                    )
                                    ((= (vla-get-objectname x) "AcDbBlockReference")
                                     (mapcar (function (lambda (y) (if (= (vla-get-color y) c1)(vla-put-color y c2)))) (get-block-entity-list x))
                                    )
                                )
                          )
                ) 
                (get-block-entity-list (vlax-ename->vla-object (ssname ss n)))
        )
        (setq n (1+ n))
    )
    (vla-regen (vla-get-activedocument (vlax-get-acad-object)) acAllViewports)
    (princ)
)

Заранее спасибо!

Последний раз редактировалось olga87, 22.07.2024 в 19:08.
Просмотров: 907
 
Непрочитано 22.07.2024, 19:45
#2
Кулик Алексей aka kpblc
Moderator

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


На форуме была тема "Нормализация блоков", советую там посмотреть.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 23.07.2024, 09:33
#3
olga87


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


Подскажите пожалуйста, почему кодом ниже меняется только цвет?


Код:
[Выделить все]
  (cond
    (
    (and (/= (vlax-get-property obj 'color) 1) (/= (vlax-get-property obj 'color) 5))
	  (progn
	    (vlax-put-property obj 'color acbyblock)
		(vlax-put-property obj 'linetype acbyblock)
		(vlax-put-property obj 'lineweight acbyblock)
	  )
    )
  )
olga87 вне форума  
 
Непрочитано 23.07.2024, 09:42
#4
Кулик Алексей aka kpblc
Moderator

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


(vlax-put-property obj 'linetype "ByBlock")
vlax-put-property obj 'lineweight acLnWtByBlock)


Пошаговая отладка иногда помогает, особенно с остановкой в случае ошибки. И не стоит сильно полагаться на ChatGPT. Работающих кодов на форуме полно.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 23.07.2024, 10:50
#5
olga87


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


Спасибо!
olga87 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Проверить свойства элемента внутри блока из изменить их



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменить вес выбранного элемента блока olga87 LISP 6 02.06.2022 10:37
Помогите разобраться с VBA в AutoCad (Изменить видимость блока) Slepovatiy Программирование 2 30.12.2021 18:57
VBA. Как в AutoCad создать всплывающее диалоговое окно, которое будет запрашивать свойства динамического блока перед его вставкой Jeneva Программирование 9 23.06.2017 19:28
Таблица внутри блока. Можно ли изменить текст в таблице? xag AutoCAD 5 07.11.2016 04:54
Как изменить атрибут предварительно выделеного блока VBA shprot Программирование 7 15.05.2012 14:25