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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как изменить цвет линии (LINE) с помощью макроса?

Как изменить цвет линии (LINE) с помощью макроса?

Ответ
Поиск в этой теме
Непрочитано 26.02.2019, 16:00 #1
Как изменить цвет линии (LINE) с помощью макроса?
aafeoktistov
 
Регистрация: 26.02.2019
Сообщений: 49

Приветствую всех! Возникла проблема, только недавно стал вникать в макросы автокад.

Суть такова. Есть чертеж состоящий из разноцветных линий.

Необходимо выбрать чертеж (вручную), затем выбрать 1 (один) цвет допустим синий (5), затем все линии которые не синие, перекрасить в черный, а те линии что были синие перекрасить в оранжевый.

Подскажите с помощью чего можно это реализовать и насколько это сложно.

Главный смысл в том чтобы изначальная линия стала оранжевой а все остальные линии (LINE) стали черными.

Заранее большое спасибо за помощь!
Просмотров: 5364
 
Непрочитано 26.02.2019, 16:06
#2
Кулик Алексей aka kpblc
Moderator

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


На каком языке пишешь? Так-то меняй свойство Color или 62 DXF-группу, и всего делов.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 26.02.2019, 16:41
#3
aafeoktistov


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


Пока я писал только макросы. И проблема в том что я не понимаю как выделить несколько объектов одновременно по цвету. Могу прописать только 1 через ssget. А мне надо либо что бы из набора исключался нужный цвет, ну и докучи еще изменение его свойств (цвета).

Понимаю что все можно сделать быстрым выбором, но я хочу уйти от множества операций, потому что данную процедуру приходится делать очень часто...
aafeoktistov вне форума  
 
Непрочитано 26.02.2019, 16:50
#4
Семёныч


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


Цитата:
Сообщение от aafeoktistov Посмотреть сообщение
Пока я писал только макросы.
Уточни, что ты понимаешь под "макросом". Некоторые этим термином называют программы на AutoLisp, что неправильно. Другие некоторые этим термином называют макросы меню, что как раз правильно.
Семёныч вне форума  
 
Автор темы   Непрочитано 26.02.2019, 17:24
#5
aafeoktistov


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


Я имею ввиду макросы меню, с LISP вообще дело не имел. Поэтому спрашиваю знающих людей как это можно реализовать и с помощью каких инструментов.
aafeoktistov вне форума  
 
Непрочитано 26.02.2019, 21:40
#6
Кулик Алексей aka kpblc
Moderator

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


Семёныч, для справки - в VBA тоже макросы.
Через макросы меню (как мне кажется) решать такую задачу смысла нет. Кстати, а что делать, если отрезок имеет свойство цвета "по слою", а слой как раз синий?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 26.02.2019, 22:02
#7
Семёныч


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Семёныч, для справки - в VBA тоже макросы
А есть ли в VBA функция ssget, о которой упоминает автор темы в #3? Если нет, то VBA тут ни при чем.
Однако, согласен с тобой, что сочинять макрос меню для такой задачи смысла нет.
Семёныч вне форума  
 
Непрочитано 26.02.2019, 22:22
#8
Кулик Алексей aka kpblc
Moderator

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


Offtop: В VBA другие методы выбора примитивов, но это уже детали...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 27.02.2019, 07:00
#9
Семёныч


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


Цитата:
Сообщение от aafeoktistov Посмотреть сообщение
а те линии что были синие перекрасить в оранжевый.
Оранжевый - какое обозначение по ICA или RGB?
Семёныч вне форума  
 
Автор темы   Непрочитано 27.02.2019, 08:11
#10
aafeoktistov


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


Оранжевый цвет 30 по автокадовской системе. Цвет по слою всегда "черный", так что с этим проблем как раз не должно быть...
aafeoktistov вне форума  
 
Непрочитано 27.02.2019, 08:35
1 | #11
Семёныч


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


Пример макроса меню для выбора отрезков с явно заданным цветом 5 (синий) и изменением цвета на 7 (белый):
Код:
[Выделить все]
^C^C_CHPROP;(ssget (list (cons 0 "LINE") (cons 62 5)));;_C;7;;
Здесь присутствует выражение AutoLisp. Макрос приведен исключительно для примера. Для выполнения всех условий необходимо написать программу
хотя бы на AutoLisp.
Семёныч вне форума  
 
Непрочитано 27.02.2019, 08:44
#12
trir


 
Регистрация: 18.12.2010
Сообщений: 5,047


а может проще выгрузить все данные в БД, а потом просто настроить стили...
trir вне форума  
 
Автор темы   Непрочитано 27.02.2019, 08:47
#13
aafeoktistov


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


Цитата:
Сообщение от Семёныч Посмотреть сообщение
Пример макроса меню для выбора отрезков с явно заданным цветом 5 (синий) и изменением цвета на 7 (белый):
Код:
[Выделить все]
^C^C_CHPROP;(ssget (list (cons 0 "LINE") (cons 62 5)));;_C;7;;
Здесь присутствует выражение AutoLisp. Макрос приведен исключительно для примера. Для выполнения всех условий необходимо написать программу
хотя бы на AutoLisp.
Большое спасибо! Т.е все что я описал можно сделать тоже только на AutoLisp?

А можете подсказать как исключить цвет из набора? Допустим с помощью ssget я выделяю все линии вообще, но потом убираю один конкретный цвет... это возможно?

В любом случае Вы мне очень помогли...
aafeoktistov вне форума  
 
Непрочитано 27.02.2019, 08:56
#14
Семёныч


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


На AutoLisp с применением циклов (repeat) и функции (if) это легко делается. В макросе все это громоздить нелепо.
Семёныч вне форума  
 
Автор темы   Непрочитано 27.02.2019, 09:06
#15
aafeoktistov


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


Цитата:
Сообщение от Семёныч Посмотреть сообщение
На AutoLisp с применением циклов (repeat) и функции (if) это легко делается. В макросе все это громоздить нелепо.
Тогда такой алгоритм?

1. Добавляю все линии в набор.
2. Присваиваю набору имя.
3. Убираю линию нужного цвета из набора (подскажите пожалуйста какая команда)...
4. Все оставшиеся линии перекрашиваю в черный.
5. Опять выбираю нужную линию и перекрашиваю в цвет 30 (оранжевый).

P.S. извините что я такой чайник, просто сейчас к сожалению поверхностно изучил вопрос, но очень хочу результат
aafeoktistov вне форума  
 
Непрочитано 27.02.2019, 10:06
#16
Сергей812


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


Цитата:
Сообщение от aafeoktistov Посмотреть сообщение
Тогда такой алгоритм?

1. Добавляю все линии в набор.
2. Присваиваю набору имя.
3. Убираю линию нужного цвета из набора (подскажите пожалуйста какая команда)...
4. Все оставшиеся линии перекрашиваю в черный.
5. Опять выбираю нужную линию и перекрашиваю в цвет 30 (оранжевый).

Лишние телодвижения в макросе:
1. Выбираются объекты для обработки (отрезки, полилинии и т.п.).
2. Проход по набору: если встретился объект нужного цвета, то его в оранжевый цвет. Иначе - в черный.
Сергей812 вне форума  
 
Автор темы   Непрочитано 27.02.2019, 10:53
#17
aafeoktistov


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


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
2. Проход по набору: если встретился объект нужного цвета, то его в оранжевый цвет. Иначе - в черный.
Спасибо за совет! А проход по "набору" это как можно реализовать? Просто я пока не нашел даже как через ssget добавить цвета кроме какого то определенного к примеру 2 (желтый)... Или как удалить цвет из набора потому что название присваивается в случайном порядке.
aafeoktistov вне форума  
 
Непрочитано 27.02.2019, 16:01
#18
Семёныч


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


Рабочая программа:
Код:
[Выделить все]
(defun C:CHCL ( / ssl lssl n sl cl)
(setq ssl (ssget (list (cons 0 "LINE"))) lssl (sslength ssl) n 0)
(repeat lssl
        (setq sl (ssname ssl n) cl (cdr (assoc 62 (entget sl))))
        (if (= cl 5) (vl-cmdf "_CHPROP" sl "" "_C" "7" ""))
        (if (and (/= cl nil) (/= cl 5)) (vl-cmdf "_CHPROP" sl "" "_C" "30" ""))
        (setq n (+ n 1))
)
(princ)
)
Любым способом выбираются объекты-отрезки, из которых создается набор ssl и вычисляется его длина lssl. Далее в цикле из набора последовательно извлекаются отрезки и определяются их цвета.
Для объектов с цветом "ПоСлою" ("ByLayer") переменная cl равна nil.
Файл программы с именем, например, chcl.lsp должен находится на пути доступа AutoCAD к файлам поддержки. При этом макрос меню для запуска программы может иметь вид:
Код:
[Выделить все]
^C^C^P(if (not C:CHCL) (load "chcl")) CHCL
Семёныч вне форума  
 
Автор темы   Непрочитано 27.02.2019, 17:57
#19
aafeoktistov


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


Цитата:
Сообщение от Семёныч Посмотреть сообщение
Рабочая программа:
Код:
[Выделить все]
(defun C:CHCL ( / ssl lssl n sl cl)
(setq ssl (ssget (list (cons 0 "LINE"))) lssl (sslength ssl) n 0)
(repeat lssl
        (setq sl (ssname ssl n) cl (cdr (assoc 62 (entget sl))))
        (if (= cl 5) (vl-cmdf "_CHPROP" sl "" "_C" "7" ""))
        (if (and (/= cl nil) (/= cl 5)) (vl-cmdf "_CHPROP" sl "" "_C" "30" ""))
        (setq n (+ n 1))
)
(princ)
)
Любым способом выбираются объекты-отрезки, из которых создается набор ssl и вычисляется его длина lssl. Далее в цикле из набора последовательно извлекаются отрезки и определяются их цвета.
Для объектов с цветом "ПоСлою" ("ByLayer") переменная cl равна nil.
Файл программы с именем, например, chcl.lsp должен находится на пути доступа AutoCAD к файлам поддержки. При этом макрос меню для запуска программы может иметь вид:
Код:
[Выделить все]
^C^C^P(if (not C:CHCL) (load "chcl")) CHCL
Огромное ВАМ человеческое СПАСИБИЩЕ!!! Это просто супер круто!!! Теперь только осталось прикрутить выбор цвета, который станет оранжевы с клавиатуры и будет готовая программа.

Я прям в эйфории ))) еще раз спасибо!
aafeoktistov вне форума  
 
Непрочитано 15.03.2019, 11:23
#20
CalcProg


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


эйфория, как правило быстро проходит. остаётся только рутина.
CalcProg вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как изменить цвет линии (LINE) с помощью макроса?

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему не ставится цвет и тип линии по слою при экспорте? Alextururu Revit 1 24.04.2017 11:13
Фон под листом в автокаде, как изменить цвет? dextron3 AutoCAD 9 10.11.2016 17:01
Возможно ли изменить в одно действие цвет, тип и вес линии? Pavel Samofalov AutoCAD 10 20.06.2008 02:31
Открывание и закрывание панелей иснтрументов с помощью макроса dextron3 Программирование 4 03.01.2008 15:46
Загрузка типа линии из макроса Кулик Алексей aka kpblc Программирование 4 24.01.2005 14:57