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

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

Выполнить команду размер с назначенными цветами текста и линий и вернуться к предыдущим настройкам

Ответ
Поиск в этой теме
Непрочитано 27.04.2024, 10:31 #1
Выполнить команду размер с назначенными цветами текста и линий и вернуться к предыдущим настройкам
Ingpro
 
Регистрация: 11.07.2022
Сообщений: 756

Этот лисп проставляет размеры с изменёнными настройками (цвета текста и линий размеров), но не возвращает старые настройки. Как это можно исправить, плз...
Код:
[Выделить все]
 (defun C:DIMCOLOR ()
(vl-load-com)
(setvar "DIMCLRT" 22)
(setvar "DIMCLRD" 160)
(setvar "DIMCLRE" 94)
(vl-cmdf "_dimlinear")

;(setvar "DIMCLRT" 0); если раскомментировать, то размеры выполняются стандартными настройками
;(setvar "DIMCLRD" 0)
;(setvar "DIMCLRE" 0)

(princ)
)

Миниатюры
Нажмите на изображение для увеличения
Название: Image 1.png
Просмотров: 8
Размер:	3.7 Кб
ID:	262855  

Просмотров: 1207
 
Непрочитано 27.04.2024, 10:50
#2
Кулик Алексей aka kpblc
Moderator

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


Перед восстановлением не помешает убедиться, что команда _.dimlinear закончила свою деятельность. cmdactive в помощь. И ключевое слово pause
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 27.04.2024, 11:22
#3
Ingpro


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Перед восстановлением не помешает убедиться, что команда _.dimlinear закончила свою деятельность. cmdactive в помощь. И ключевое слово pause
Код:
[Выделить все]
 (defun C:DIMCOLOR1 ()
(vl-load-com)
(setvar "DIMCLRT" 22)
(setvar "DIMCLRD" 160)
(setvar "DIMCLRE" 94)
(vl-cmdf "_.dimlinear")
(while (> (getvar 'CmdActive) 0) (command pause))

(setvar "DIMCLRT" 0)
(setvar "DIMCLRD" 0)
(setvar "DIMCLRE" 0)
(princ)
)
Вот так получилось, спасибо, Алексей.

Последний раз редактировалось Ingpro, 27.04.2024 в 12:20.
Ingpro вне форума  
 
Непрочитано 27.04.2024, 12:15
#4
Кулик Алексей aka kpblc
Moderator

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


Примерно так, код не проверял:
Код:
[Выделить все]
 (defun C:DIMCOLOR (/ adoc sysvar) 
  (vl-load-com)
  (vla-startundomark (setq adoc (vla-get-activedocument (vlax-get-acad-object))))
  (setq sysvar (mapcar 
                 (function 
                   (lambda (x / temp) 
                     (setq temp (getvar (car x)))
                     (setvar (car x) (cdr x))
                     (cons (car x) temp)
                   )
                 )
                 '(("dimclrt" . 22)
                   ("dimclrd" . 160)
                   ("dimclre" . 94)
                  )
               )
  )
  (vl-catch-all-apply 
    (function 
      (lambda () 

        (vl-cmdf "_dimlinear")
        (while (/= (getvar "cmdactive") 0) 
          (vl-cmdf pause)
        )
      )
    )
  )
  (foreach item sysvar 
    (setvar (car item) (cdr item))
  )
  (vla-endundomark adoc)
  (princ)
)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 27.04.2024, 12:23
#5
Ingpro


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Примерно так, код не проверял:
Этот код тоже работает, спасибо!
А как можно подправить, чтобы с этими цветами изменить существующие размеры?
Ingpro вне форума  
 
Непрочитано 27.04.2024, 12:34
#6
Кулик Алексей aka kpblc
Moderator

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


Я вижу только один вариант - по каждому из размеров получать его DXF представление и менять соответсвующие группы. Ну или через ActiveX проворачивать примерно то же самое.
Сейчас запарка перед выходными, код будет достаточно длинным, и я навскидку не помню DXF-представления для размеров.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 27.04.2024, 12:50
#7
Ingpro


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Я вижу только один вариант - по каждому из размеров получать его DXF представление и менять соответсвующие группы.
А может можно попроще?
Код:
[Выделить все]
 ;; Изменить цвета для существующих размеров в соответствии с DIMCLRT, DIMCLRD и DIMCLRE
(defun C:DIMCOLCHANGE ()
(vl-load-com)
(setvar "DIMCLRT" 22)
(setvar "DIMCLRD" 160)
(setvar "DIMCLRE" 94)
(vl-cmdf "_.change" (ssget (quote ((0 . "DIMENSION")))) ""))
(princ)
)
Пишет в ком. строке
"Выберите объекты: Точка изменения или [Свойства]: T
Точка изменения или [Свойства]: Не выбрано ни одного изменяемого объекта"
Как указать, что надо изменить цвета в соответствии с DIMCLRT, DIMCLRD и DIMCLRE?

Последний раз редактировалось Ingpro, 27.04.2024 в 12:59.
Ingpro вне форума  
 
Непрочитано 27.04.2024, 13:58
#8
name02


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


Через командный метод не получится отдельно задать разные цвета текста, выносных и размерных линий размеров.
Вот так делает, то что тебе нужно:
Код:
[Выделить все]
 (defun C:DIMCOLCHANGE (/ int sel ent obj DimTextColor DimExtLines_color	DimLines_color)

  (vl-load-com)
  (setq	DimTextColor	  22 ;номер цвета текста
	DimExtLines_color 94 ;номер цвета выносных линий
	DimLines_color	  160 ;номер цвета размерных линий
  ) ;_ end of setq

;;; Нужно ли это тебе не знаю - раскомментируй, если нужно
;;;  (setvar "DIMCLRT" DimTextColor)
;;;  (setvar "DIMCLRD" DimExtLines_color)
;;;  (setvar "DIMCLRE" DimLines_color)

  (and (setq int -1
	     sel (ssget '((0 . "*DIMENSION")))
       ) ;_ end of setq
       (while (setq int	(1+ int)
		    ent	(ssname sel int)
	      ) ;_ end of setq
	 (setq obj (vlax-ename->vla-object ent))

	 (vla-put-TextColor obj DimTextColor) ;номер цвета текста
	 (vla-put-ExtensionLineColor obj DimExtLines_color) ;номер цвета выносных линий
	 (vla-put-DimensionLineColor obj DimLines_color) ;номер цвета размерных линий
       ) ;_ end of while
  ) ;_ end of and
  (princ)
) ;_ end of defun
Нашел в третьей ссылке в гугле по запросу "autocad lisp change dim colors according to DIMCLRD" и подправил под твои нужды код из поста
Все-таки решения по программированию лучше искать в англоязычном поисковике
name02 вне форума  
 
Автор темы   Непрочитано 27.04.2024, 14:11
#9
Ingpro


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


Цитата:
Сообщение от name02 Посмотреть сообщение
Через командный метод не получится отдельно задать разные цвета текста, выносных и размерных линий размеров.
Вот так делает, то что тебе нужно:
Спасибо. Да, так изменяет выбранные размеры, но потом если вызвать команду "Размер", проставляет размеры изменёнными цветами, а это как-бы не надо...
Если добавить после 26 строки в лисп #8
Код:
[Выделить все]
 (setvar "DIMCLRT" 0)
(setvar "DIMCLRD" 0)
(setvar "DIMCLRE" 0)
то происходит возврат к исходным свойствам...

Последний раз редактировалось Ingpro, 27.04.2024 в 14:16.
Ingpro вне форума  
 
Непрочитано 27.04.2024, 14:19
#10
name02


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


В приведенном мною коде цвета меняются у конкретно выбранных размеров. Системные переменные не меняются - строки 10-12 закомментированы.
Для чего тебе вообще понадобилось изменять DIMCLRT, DIMCLRD и DIMCLRE?
name02 вне форума  
 
Автор темы   Непрочитано 27.04.2024, 14:27
#11
Ingpro


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


Цитата:
Сообщение от name02 Посмотреть сообщение
В приведенном мною коде цвета меняются у конкретно выбранных размеров. Системные переменные не меняются - строки 10-12 закомментированы.
Это понятно, просто было интересно, возможно ли изменить свойства, только изменив Системные переменные.
Чаще всего нужно изменить цвет текста для выбранных размеров, изменение цвета линий добавлены для информации...
Ingpro вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Выполнить команду размер с назначенными цветами текста и линий и вернуться к предыдущим настройкам



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как изменить размер текста во всех блоках с одинаковым имене red AutoCAD 78 28.03.2022 08:07
Макрос VBA Excel для извлечения таблиц из линий, полилиний, текста из DWG файлов в Excel с помощью NanoCAD/AutoCAD JZY Готовые программы 8 14.07.2016 06:31
Толщина линий и размер чертежа Sleeve AutoCAD 21 10.05.2008 03:07
как изменить размер текста на DIMENSION line elias AutoCAD 5 08.11.2007 08:37
Размер и выравнивание по линии вставляемого текста Бродяга AutoCAD 4 23.08.2006 07:34