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

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

Изменить цвет в лиспе

Ответ
Поиск в этой теме
Непрочитано 22.03.2023, 15:39 #1
Изменить цвет в лиспе
Ingpro
 
Регистрация: 11.07.2022
Сообщений: 756

Помогите, пожалуйста изменить цвет в лиспе с зелёного на жёлтый. Лисп заменяет зелёный цвет МТекста на По слою.
Код с зелёным цветом работает
Код:
[Выделить все]
 ;;;Text Green ->Bylayer
(defun C:TGB ( / ss txt )
  (if (setq ss (ssget "_:L:S:E" '((0 . "*TEXT"))))
    (progn
      (setq txt (ssname ss 0))
      (if (= (cdr(assoc 62 (entget txt))) 3)
    (entmod
      (subst (cons 62 256)(assoc 62 (entget txt))(entget txt)))
    (entmod
      (if (assoc 62 (entget txt))
      (subst (cons 62 3)(assoc 62 (entget txt))(entget txt))
      (append (entget txt)(list(cons 62 3)))
        )
       )
     
    )
      )
    )
  (princ)
  )
Пытаюсь заменить на жёлтый, но что-то неправильно...
Код:
[Выделить все]
 ;;;Text Yellow ->Bylayer
(defun C:TYB ( / ss txt )
  (if (setq ss (ssget "_:L:S:E" '((0 . "*TEXT"))))
    (progn
      (setq txt (ssname ss 0))
      (if (= (cdr(assoc 62 (entget txt))) 2)
    (entmod
      (subst (cons 62 256)(assoc 62 (entget txt))(entget txt)))
    (entmod
      (if (assoc 62 (entget txt))
      (subst (cons 62 2)(assoc 60 (entget txt))(entget txt))
      (append (entget txt)(list(cons 62 2)))
        )
       )
     
    )
      )
    )
  (princ)
  )
Выбирает объект, но не перекрашивает по слою...

Последний раз редактировалось Ingpro, 22.03.2023 в 20:54.
Просмотров: 2097
 
Непрочитано 22.03.2023, 15:53
#2
Кулик Алексей aka kpblc
Moderator

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


Случайно текст не форматирован принудительно? Цвет там не назначен?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 22.03.2023, 16:29
#3
Ingpro


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Случайно текст не форматирован принудительно? Цвет там не назначен?
Да, заходишь в редактор МТекста и там установлен жёлтый, из-за этого не получается?
Куча таких текстов и программки по деформатированию не помогают...
Ingpro вне форума  
 
Непрочитано 22.03.2023, 16:31
| 1 #4
Кулик Алексей aka kpblc
Moderator

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


На форуме была тема по StripMText (прямо так колоти в поиск - найдешь). Практически уверен что она поможет.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 22.03.2023, 16:40
#5
Ingpro


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
На форуме была тема по StripMText
Да, спасибо, помогла. А код 2 из поста #1 с жёлтым цветом неправильный?

Последний раз редактировалось Ingpro, 22.03.2023 в 20:54.
Ingpro вне форума  
 
Непрочитано 22.03.2023, 16:49
#6
Кулик Алексей aka kpblc
Moderator

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


Советую найти DXF Reference для любой версии и посмотреть, за что и какой код отвечает. Масса вопросов снимется.
P.S. Код вообще не смотрел.
P.P.S. https://autolisp.ru/2019/05/07/dxf-reference/
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 22.03.2023, 16:55
#7
koMon


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


Ingpro,
если без внутреннего цветового форматирования, то мб проще так?

Код:
[Выделить все]
 (if (setq ss (ssget "_:L:S:E" '((0 . "*text"))))
	(vla-put-color (vlax-ename->vla-object (ssname ss 0)) 2)
)
__________________
K Lisp
koMon вне форума  
 
Автор темы   Непрочитано 23.03.2023, 09:27
#8
Ingpro


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


Цитата:
Сообщение от koMon Посмотреть сообщение
если без внутреннего цветового форматирования, то мб проще так?
Вообще-то, с внутренним. Наверное, в одном МТексте установили цвет на жёлтый и копировали 100 тыс. раз этот текст...
Ingpro вне форума  
 
Непрочитано 23.03.2023, 16:52
#9
koMon


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


Цитата:
Сообщение от Ingpro Посмотреть сообщение
Вообще-то, с внутренним.
я так-то читать умею))) and in english too)))

для выбранных мтекстов с внутренним цветовым форматированием - удаление цветового форматирования и назначение индексного цвета 2.

Код:
[Выделить все]
 
(defun c:de_color_mtext_2 (/ mtext_list mtext_string coloring_found color_pos)
	(vla-startundomark (vla-get-activedocument (vlax-get-acad-object)))
	(setq mtext_list (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget ":L" '((0 . "mtext")))))))
	(foreach mtext mtext_list 
		(setq mtext_string (cdr (assoc 1 (entget mtext)))
			  coloring_found nil
		)
		(while (or 
					(setq color_pos (vl-string-search "\c" mtext_string))
					(setq color_pos (vl-string-search "\C" mtext_string))
					(null (setq coloring_found t)) 
			   )
					(setq mtext_string (strcat (substr mtext_string 1 (1- color_pos))
											   (substr mtext_string (+ 2 (vl-string-search ";" mtext_string color_pos)))
									   )
					)
					(if (null coloring_found) (setq coloring_found t))
		)
		(if coloring_found 
			(vla-put-textstring (vlax-ename->vla-object mtext) mtext_string)
		)
		(vla-put-color (vlax-ename->vla-object mtext) 2)  
	)
	(vla-endundomark (vla-get-activedocument (vlax-get-acad-object)))
	(princ)
)
__________________
K Lisp

Последний раз редактировалось koMon, 23.03.2023 в 17:05.
koMon вне форума  
 
Автор темы   Непрочитано 23.03.2023, 19:11
#10
Ingpro


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


Цитата:
Сообщение от koMon Посмотреть сообщение
для выбранных мтекстов с внутренним цветовым форматированием - удаление цветового форматирования и назначение индексного цвета 2.
Спасибо, koMon, Я, наверное, как-то не так объясняю... Приходится работать с большим количеством чужих файлов, где все МТексты перекрашены в редакторе текста в жёлтый цвет, т.е. нужна обратная функция - все эти желтые тексты сделать по слою. В первом лиспе из поста #1, тексты перекрашиваются с зеленого цвета на "по слою", хотелось такое же сделать, но для желтого цвета... Во втором лиспе из поста #1 устанавливаю цвет 2 вместо 3, но программа не работает, интересно, почему?

Последний раз редактировалось Ingpro, 23.03.2023 в 19:31.
Ingpro вне форума  
 
Непрочитано 23.03.2023, 20:42
#11
Кулик Алексей aka kpblc
Moderator

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


Тебе тему про stripmtext не найти?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 23.03.2023, 21:58
#12
Ingpro


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


Вопрос, вообще-то, был, как заменить цвет в лиспе с зеленого на желтый...
Ingpro вне форума  
 
Непрочитано 23.03.2023, 22:02
#13
Кулик Алексей aka kpblc
Moderator

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


А выяснилось, что простая замена цвета не срабатывает. Ты ищешь причину - и ты ее нашел. Но пути решения одни и те же - снимать принудительное форматирование текста. Вариантов тебе уже накидали, но как-то не ощущается, что ты их применяешь.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 23.03.2023, 22:10
#14
koMon


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


Ingpro, итогхо чего надо? все мтексты с принудительным окрашиванием установить в послою или чего-то другого, волшебного?
__________________
K Lisp
koMon вне форума  
 
Автор темы   Непрочитано 23.03.2023, 22:27
#15
Ingpro


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


Цитата:
Сообщение от koMon Посмотреть сообщение
все мтексты с принудительным окрашиванием установить в послою
Да, именно так, но и хотелось бы узнать достаточно ли в программе из #1 заменить цвет 3 (зеленый) на 2 (желтый)?
Ingpro вне форума  
 
Непрочитано 24.03.2023, 11:40
#16
koMon


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


достаточно
__________________
K Lisp
koMon вне форума  
 
Автор темы   Непрочитано 24.03.2023, 14:24
#17
Ingpro


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


Всем спасибо за помощь... без вас никак...
Ingpro вне форума  
 
Непрочитано 24.03.2023, 15:04
1 | #18
koMon


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


если что, то оптом текст/мтекст (в том числе с принудительной колоризацией) в цвет bylayer можно этим

Код:
[Выделить все]
 
(defun c:de_color_m_text_bylayer (/ mtext_list mtext_string coloring_found color_pos)
	(vla-startundomark (vla-get-activedocument (vlax-get-acad-object)))
	(setq mtext_list (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget ":L" '((0 . "*text")))))))
	(foreach mtext mtext_list 
		(setq mtext_string (cdr (assoc 1 (entget mtext)))
			  coloring_found nil
		)
		(while (or 
					(setq color_pos (vl-string-search "\c" mtext_string))
					(setq color_pos (vl-string-search "\C" mtext_string))
			   )
					(setq mtext_string (strcat (substr mtext_string 1 (1- color_pos))
											   (substr mtext_string (+ 2 (vl-string-search ";" mtext_string color_pos)))
									   )
					      coloring_found (if (null coloring_found) t) 
					)
		)
		(if coloring_found 
			(vla-put-textstring (vlax-ename->vla-object mtext) mtext_string)
		)
		(if (/= 256 (vla-get-color (vlax-ename->vla-object mtext))) (vla-put-color (vlax-ename->vla-object mtext) 256))  
	)
	(vla-endundomark (vla-get-activedocument (vlax-get-acad-object)))
	(princ)
)
__________________
K Lisp

Последний раз редактировалось koMon, 26.03.2023 в 07:48.
koMon вне форума  
 
Автор темы   Непрочитано 24.03.2023, 16:43
#19
Ingpro


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


Цитата:
Сообщение от koMon Посмотреть сообщение
если что, то оптом текст/мтекст (в том числе с принудительной колоризацией) в цвет bylayer можно этим
Это просто супер, отлично работает! Не надо возиться с цветом, все цвета переводит в bylayer.
koMon, как всегда, замечательная программа, thank you very much! I'm a fan of yours!

Последний раз редактировалось Ingpro, 24.03.2023 в 16:52.
Ingpro вне форума  
 
Непрочитано 24.03.2023, 21:53
#20
StupidDuck


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


Код:
[Выделить все]
 (defun c:de_color_m_text_bylayer (/ mtext_list mtext_string coloring_found color_pos selection)
	(vla-startundomark (vla-get-activedocument (vlax-get-acad-object)))
  (cond
    ((and (setq selection (ssget ":L" '((0 . "*text"))))
	(setq mtext_list (vl-remove-if 'listp (mapcar 'cadr (ssnamex selection))))
	  )
	(foreach mtext mtext_list 
		(setq mtext_string (cdr (assoc 1 (entget mtext)))
			  coloring_found nil
		)
		(while (or 
					(setq color_pos (vl-string-search "\c" mtext_string))
					(setq color_pos (vl-string-search "\C" mtext_string))
					(null (setq coloring_found t)) 
			   )
					(setq mtext_string (strcat (substr mtext_string 1 (1- color_pos))
											   (substr mtext_string (+ 2 (vl-string-search ";" mtext_string color_pos)))
									   )
					)
					(if (null coloring_found) (setq coloring_found t))
		)
		(if coloring_found 
			(vla-put-textstring (vlax-ename->vla-object mtext) mtext_string)
		)
		(vla-put-color (vlax-ename->vla-object mtext) 256)  
	)
     )
    (T (princ "\nНичего не выбрано]..."))
    )
	(vla-endundomark (vla-get-activedocument (vlax-get-acad-object)))
	(princ)
)
koMon, немного добавил пустой ввод. если для Ingpro будет полезно.
StupidDuck вне форума  
 
Автор темы   Непрочитано 25.03.2023, 08:19
#21
Ingpro


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


Цитата:
Сообщение от StupidDuck Посмотреть сообщение
koMon, немного добавил пустой ввод. если для Ingpro будет полезно
StupidDuck, спасибо, поясните, пожалуйста, для чего. Просто разницы в работе программ из #18 и #20 не заметно...
Я так понимаю, если промахнулся, ничего не выбрал или выбрал не текст...

Последний раз редактировалось Ingpro, 25.03.2023 в 09:16.
Ingpro вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Изменить цвет в лиспе



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как изменить цвет ручек? Lens82 AutoCAD 3 02.10.2020 11:09
Как в AutoCAD Mechanical изменить цвет обозначения типа неразъемного обозначения? ViKo$ Вертикальные решения на базе AutoCAD 11 18.11.2019 09:13
Как изменить цвет для будущих объектов на слое? iskatel111 .NET 7 09.07.2019 08:13
Изменить цвет всех элементов AcadText в пространстве чертежа ivan.smolenkov .NET 9 25.04.2016 23:36
Изменить цвет фона редактора мультитекста Torino AutoCAD 8 02.11.2004 18:45