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

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

Изменить цвет курсора

Ответ
Поиск в этой теме
Непрочитано 14.07.2005, 12:12
Изменить цвет курсора
nikolaev
 
конструктор
 
Мос. область
Регистрация: 28.08.2003
Сообщений: 119

Возможно ли курсору присвоить цвет текущего слоя? Это было бы удобно! Не нужно лишний раз переводить глаза на окошко слоев.
В опциях цвет курсора менять можно, но переменной такой, к сожалению, нет.
Просмотров: 30305
 
Непрочитано 13.05.2010, 21:47
#41
mmax

Программист широкого профиля.
 
Регистрация: 08.09.2005
Челябинск
Сообщений: 722


to gomer в твоем коде нет ничего нового и даже не правильно.
Цвет для ModelCrosshairColor нужно переводить не из RGB, а из BGR, тоесть зачемто нужно переворачивать TrueColor.

Ну и по проблеме.
Во время выполнения команды которая генерируется палитрой, текущий слой временно меняется на тот который задан в свойствах.
Тоесть все логично - слой меняется и цвет курсора пытается стать равным цвету слоя прямо во время работы команды, но команда почемуто не хочет работать когда выполняются данные лиспы.

Я попробую выяснить на каком этапе это происходит. Если окажется что вылет происходит именно во время смены цвета курсора то ничего сделать нельзя.
mmax вне форума  
 
Непрочитано 13.05.2010, 23:03
#42
CAHTEXHuK

Инженер по теплоснабжению
 
Регистрация: 10.04.2010
РБ, г. Могилев
Сообщений: 25


Кулик Алексей aka kpblc, я кое-как освоил как использовать выложенный код, тут вопрос в другом, что исходные 8 файлов, а куда тот, что предложил gomer, я не понял.
mmax, мне остается только ждать и надеяться...
CAHTEXHuK вне форума  
 
Непрочитано 13.05.2010, 23:47
#43
mmax

Программист широкого профиля.
 
Регистрация: 08.09.2005
Челябинск
Сообщений: 722


К сожалению мне удалось выяснить что отмена происходит во время смены слоя в момент выполнения команды вставки блока. Так что в данном случае бессильны будут даже гуру.
Несовместимость называется.
Поэтому могу предложить:
  1. Заметил что при перетаскивании блока с палитры на экран сбоя не происходит, но при этом блок тупо перетаскивается без указания точки. Сбой происходит только если кликнуть по палитре.
  2. Ну или переключаться на нужный слой пред вставкой блоков.
  3. сделать панель инструментов с двумя кнопками которые будут вызывать команды clcoloron и clcoloroff и нажимать их перед работой с палитрой.
  4. Еще как вариант отказаться от моей программы.

Если не разбираешься как грузить 8 файлов используй вариант, предложенный тут, там же инструкции:
http://forum.dwg.ru/showpost.php?p=393497&postcount=26
Все что ниже этого поста исходники, предназначенные для программистов и ничего нового или представляющего интерес для непрограммиста в них нет.

То что предложил gomer никуда не надо вставлять, такая функция там уже есть.

Ну и еще у меня у самого будет вопрос к гуру:
можно ли в лиспе определить, что в данный момент выполняется команда с таким то именем?
напрмер в данном случае _executetool
mmax вне форума  
 
Непрочитано 14.05.2010, 01:05
#44
CAHTEXHuK

Инженер по теплоснабжению
 
Регистрация: 10.04.2010
РБ, г. Могилев
Сообщений: 25


Ну еще есть вариант... чтобы команды clcoloron и clcoloroff срабатывали вместе с открытием / закрытием палитры инструментов... или код проверял, открыта палитра или нет... не знаю насколько это реально сделать...
а насчет 8 лиспов - я же сделал, чтобы работали... но знания в этой области сияют пробелами...
CAHTEXHuK вне форума  
 
Непрочитано 14.05.2010, 10:03
#45
mmax

Программист широкого профиля.
 
Регистрация: 08.09.2005
Челябинск
Сообщений: 722


Все же рано оружие чехлить.
кажется я нашел очень неплохе решение
нужно только время для его воплощения

Уже потестил получается. Ждите выхода релиза

Последний раз редактировалось mmax, 14.05.2010 в 11:13.
mmax вне форума  
 
Непрочитано 14.05.2010, 16:08
#46
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


>mmax: Еще раз проверил - работает функция нормально, цвет правильный выставляет))) (16.0)
>остальным: Да, не надо вставлять никуда... нового нет, не спорю, просто короче и понятней
Еще не понятно, если текущий цвет не соответствует цвету текущего слоя... посмотрел, например на курсор, он синий, а линии красным рисуются, вот досада...
Остается вопрос, заданный apelsinov: куда девать реактор системных переменных, если он уже загружен...
После выгрузки реактора от mmax вообще ничего не останется... я так понимаю...

Последний раз редактировалось gomer, 14.05.2010 в 16:25.
gomer вне форума  
 
Непрочитано 14.05.2010, 16:27
#47
mmax

Программист широкого профиля.
 
Регистрация: 08.09.2005
Челябинск
Сообщений: 722


Ну вот собственно и все.
Просто скопируйте файлы из архива в папку установки Автокада. Ничего загружать не надо все само загрузится.
Для загрузки используются файл acaddoc.lsp и в нем функция s::startup. Нужно учесть этот момент, если вы используете другие приложения.

Исходники для програмистов:

1. Файл который должен загрузиться функцией s::startup
Код:
[Выделить все]
;******************************************************************************************************
;Бибилиотечные функции

(vl-load-com)
;Чтение раздела и параметра реестра
;если чтото отсутствует то данный раздел и параметр добавляются
;если все наместе возвращает значение ничего неменяя
;Возвращаемое значение - значение параметра
;;;;;Аргументы
;;;;;razdel-Имя раздела
;;;;;parametr-Имя параметра
;;;;;value-значение параметра(строковое)


(defun reg-riad-or-write-samocad (razdel parametr value / osiv_ss *error*)

  (defun *error* (msg)
   (princ "\nОшибка : нет доступа к реестру ")
    (princ msg)
   (princ)
   )

  (setq osiv_ss (vl-registry-read
                   razdel
                   parametr)
      );setq


(if (null osiv_ss)
  (setq osiv_ss 
  (vl-registry-write
  razdel parametr
  value)
  );setq
  (princ )
  )

osiv_ss
    )


(defun rgb->ole-samocad (R G B)
  (+ (* B (expt 16 4)) (* G (expt 16 2)) R)
  )

(defun all-layers-obj-samocad (ename=nil-vla=t / objlist)

(setq objlist
(mapcar
  (function
    (lambda (a)
      (vla-item
	(vla-get-layers
	  (vla-get-activedocument
	    (vlax-get-acad-object))
	  ) a)))
  ( layers-name-list-samocad)))

(if ename=nil-vla=t
  (princ)
  (setq objlist
	 (mapcar (function (lambda (b)
			     (vlax-vla-object->ename b)))
		 objlist)))
  objlist
  );(all-layers-obj-samocad t) (all-layers-obj-samocad nil)

;Возвращает список всех слоев
(defun layers-name-list-samocad (/ samo_layers_lst_s) 
  (vlax-for i 
         (vla-get-layers 
      (vla-get-ActiveDocument (vlax-get-acad-object)) 
         ) 
    (setq samo_layers_lst_s (cons (vla-get-name i) samo_layers_lst_s)) 
  ) 
  (reverse samo_layers_lst_s)
  )

(defun acad-objects-samocad (obj / ob)

  (if (= obj 1)
  (setq ob (vlax-get-acad-object))
        )
  
  (if (= obj 2)
  (setq ob (vla-get-activedocument (vlax-get-acad-object)))
        )
  
  (if (= obj 3)
  (setq ob (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object))))
        )
  
  (if (= obj 4)
  (setq ob (vla-get-paperspace (vla-get-activedocument (vlax-get-acad-object))))
        )

  (if (= obj 5)
  (setq ob (vla-get-utility (vla-get-activedocument (vlax-get-acad-object))))
        )

  (if (= obj 6)
  (setq ob (vla-get-Layers (vla-get-activedocument (vlax-get-acad-object))))
        )
  ob
    );(acad-objects-samocad 2) 


;Пустые временные функции для реакторов

(defun layer_color=cursor_color_ObjectReactorFuntion-samocad ()
  (princ)
  )

(defun layer_color=cursor_color_SysvarReactorFuntion-samocad ()
  (princ)
  )

(defun clayercoloroff (a b)
 (princ)
  )

(defun clayercoloron (a b)
  (princ)
  )


;******************************************************************************************************
;реактор объектов слоев
(setq layer_color=cursor_color_ObjectReactor-samocad
       (vlr-object-reactor (all-layers-obj-samocad t) nil
	 (list (cons :vlr-modified 'layer_color=cursor_color_ObjectReactorFuntion-samocad))))
;******************************************************************************************************

;******************************************************************************************************
;реактор системных переменных
(setq layer_color=cursor_color_sysvarreactor-samocad
       (vlr-sysvar-reactor
       nil (list (cons :vlr-sysvarchanged 'layer_color=cursor_color_SysvarReactorFuntion-samocad))))
;******************************************************************************************************

;******************************************************************************************************





(vlr-remove layer_color=cursor_color_ObjectReactor-samocad)
(vlr-remove layer_color=cursor_color_sysvarreactor-samocad)

(load "LayerColor-CursorColorSamoCAD.fas")


(if (eq
      (reg-riad-or-write-samocad
	"HKEY_CURRENT_USER\\Software\\MaksCAD Soft\\SamoCAD\\AutoCAD\\Interfase"
	"layercolor=cursorcolor"
	"1") "1")
  (progn
    (vlr-add layer_color=cursor_color_ObjectReactor-samocad)
    (vlr-add layer_color=cursor_color_sysvarreactor-samocad)
    (clayer_color=cursor_color-samocad)
    )
  (princ)
  )
2. Файл который не надо загружать. Он грузится функцией load в предыдущем файле.
Код:
[Выделить все]
;SamoCAD
;Цвет курсора равен цвету слоя

;;;(vla-get-ModelCrosshairColor(vla-get-Display(vla-get-Preferences (vlax-get-acad-object))))
;;;(vla-put-ModelCrosshairColor(vla-get-Display(vla-get-Preferences (vlax-get-acad-object)))3408653) 
;Получим цветовые характеристики слоя

(defun clayer_color=cursor_color-samocad ( /
					  BLUELAYER
					  GREENLAYER
					  LAYOUT_COLOR
					  LAYOUT_CUR_COLOR
					  MODEL_COLOR
					  MODEL_CUR_COLOR
					  REDLAYER
					  )

  

(setq Redlayer (vla-get-Red (vla-get-TrueColor (vla-get-ActiveLayer (acad-objects-samocad 2)))))
(setq Greenlayer (vla-get-Green (vla-get-TrueColor (vla-get-ActiveLayer (acad-objects-samocad 2)))))
(setq Bluelayer (vla-get-Blue (vla-get-TrueColor (vla-get-ActiveLayer (acad-objects-samocad 2)))))

(setq model_color (vlax-variant-value
		   (vlax-variant-change-type
		   (vla-get-GraphicsWinModelBackgrndColor
		    (vla-get-Display
                      (vla-get-Preferences
                         (vlax-get-acad-object))))3)))

(setq layout_color (vlax-variant-value
		   (vlax-variant-change-type
		   (vla-get-GraphicsWinLayoutBackgrndColor
		    (vla-get-Display
                      (vla-get-Preferences
                         (vlax-get-acad-object))))3)))
  
(vla-put-ModelCrosshairColor
  (vla-get-Display
    (vla-get-Preferences
      (vlax-get-acad-object)))
  (rgb->ole-samocad Redlayer Greenlayer Bluelayer)
    )
(vla-put-LayoutCrosshairColor
  (vla-get-Display
    (vla-get-Preferences
      (vlax-get-acad-object)))
  (rgb->ole-samocad Redlayer Greenlayer Bluelayer)
    )

(setq model_cur_color (vlax-variant-value
		        (vlax-variant-change-type
			  (vla-get-ModelCrosshairColor
                             (vla-get-Display
                               (vla-get-Preferences
                                   (vlax-get-acad-object)))) 3)))

(setq Layout_cur_color (vlax-variant-value
		        (vlax-variant-change-type
			  (vla-get-LayoutCrosshairColor
                             (vla-get-Display
                               (vla-get-Preferences
                                   (vlax-get-acad-object)))) 3)))

(if (= model_color model_cur_color 0)

 (vla-put-ModelCrosshairColor
   (vla-get-Display
    (vla-get-Preferences
      (vlax-get-acad-object)))
  16777215
    )(princ))

(if (= model_color model_cur_color 16777215)

 (vla-put-ModelCrosshairColor
   (vla-get-Display
    (vla-get-Preferences
      (vlax-get-acad-object)))
  0
    )(princ))

(if (= layout_color Layout_cur_color 16777215)
 (vla-put-LayoutCrosshairColor
   (vla-get-Display
    (vla-get-Preferences
      (vlax-get-acad-object)))
  0
    )(princ))
(if (= layout_color Layout_cur_color 0)
 (vla-put-LayoutCrosshairColor
   (vla-get-Display
    (vla-get-Preferences
      (vlax-get-acad-object)))
  16777215
    )(princ))

  (princ)
					      
  );(clayer_color=cursor_color-samocad)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;SamoCAD


;Функция реактора системных переменных
(defun layer_color=cursor_color_SysvarReactorFuntion-samocad (a b)
  (setq c  a
	d b)
  (if (and (eq (nth 0 b) "CLAYER")
	   (nth 1 b));and
    (progn
      (clayer_color=cursor_color-samocad)
      (layer_color=cursor_color_ChangObjectsForObjectReactor-samocad)
      );T
    (princ);nil
    );if
  (princ)
  )



;Функция реактора объектов(слоев)

(defun layer_color=cursor_color_ObjectReactorFuntion-samocad (a b c)
  (clayer_color=cursor_color-samocad)
  (princ)
  )

;Функция замены объектов для реактора объектов

(defun layer_color=cursor_color_ChangObjectsForObjectReactor-samocad (/ obj_layers_list)
  
;удаление владельцев
  
(mapcar (function (lambda (a)
		    (vlr-owner-remove layer_color=cursor_color_ObjectReactor-samocad
		      a ))) (vlr-owners layer_color=cursor_color_ObjectReactor-samocad))

;Добавление владельцев
  
(mapcar (function (lambda (b)
		    (vlr-owner-add layer_color=cursor_color_ObjectReactor-samocad b)))
	(all-layers-obj-samocad t))
  (princ)
  )


;Включение
(defun c:clcoloron ()
  (if (and
	(null (vlr-added-p layer_color=cursor_color_ObjectReactor-samocad))
	(null (vlr-added-p layer_color=cursor_color_sysvarreactor-samocad))
	);and
    (progn
    (vlr-add layer_color=cursor_color_ObjectReactor-samocad)
    (vlr-add layer_color=cursor_color_sysvarreactor-samocad)
    (vl-registry-write
  "HKEY_CURRENT_USER\\Software\\MaksCAD Soft\\SamoCAD\\AutoCAD\\Interfase"
	"layercolor=cursorcolor" "1")
    (clayer_color=cursor_color-samocad)
    )
    (princ)
    );if
  (princ)
  )


(defun c:clcoloroff ()
  (if (and
	(null (vlr-added-p layer_color=cursor_color_ObjectReactor-samocad))
	(null (vlr-added-p layer_color=cursor_color_sysvarreactor-samocad))
	);and
    (princ)
    (progn
    (vlr-remove layer_color=cursor_color_ObjectReactor-samocad)
    (vlr-remove layer_color=cursor_color_sysvarreactor-samocad)
    (vl-registry-write
  "HKEY_CURRENT_USER\\Software\\MaksCAD Soft\\SamoCAD\\AutoCAD\\Interfase"
	"layercolor=cursorcolor" "0")    
    )
    
    );if
  (princ)
  )

(defun clayercoloroff (a b)
  (if (eq
      (reg-riad-or-write-samocad
	"HKEY_CURRENT_USER\\Software\\MaksCAD Soft\\SamoCAD\\AutoCAD\\Interfase"
	"layercolor=cursorcolor"
	"1") "1")
  (progn
  (if (and
	(null (vlr-added-p layer_color=cursor_color_ObjectReactor-samocad))
	(null (vlr-added-p layer_color=cursor_color_sysvarreactor-samocad))
	);and
    (princ)
    (progn
    (vlr-remove layer_color=cursor_color_ObjectReactor-samocad)
    (vlr-remove layer_color=cursor_color_sysvarreactor-samocad)
        
    )
    
    );if
  )
    (princ "И так выключено")
    )
  (princ)
  )



(defun clayercoloron (a b)
  (if (eq
      (reg-riad-or-write-samocad
	"HKEY_CURRENT_USER\\Software\\MaksCAD Soft\\SamoCAD\\AutoCAD\\Interfase"
	"layercolor=cursorcolor"
	"1") "1")
  (progn
  (if (and
	(null (vlr-added-p layer_color=cursor_color_ObjectReactor-samocad))
	(null (vlr-added-p layer_color=cursor_color_sysvarreactor-samocad))
	);and
    (progn
    (vlr-add layer_color=cursor_color_ObjectReactor-samocad)
    (vlr-add layer_color=cursor_color_sysvarreactor-samocad)
    (clayer_color=cursor_color-samocad)
    )
    (princ)
    );if
    )
  (princ)
    )
  (princ)
  )

;реакторы команд
(setq layer_color=cursor_color_commandreactor-startcommand-samocad
       (vlr-command-reactor nil (list '(:vlr-commandwillstart . clayercoloroff))))

(setq layer_color=cursor_color_commandreactor-endcommand-samocad
       (vlr-command-reactor nil (list '(:vlr-commandended . clayercoloron))))
Вложения
Тип файла: rar clcolor.rar (5.0 Кб, 69 просмотров)
mmax вне форума  
 
Непрочитано 14.05.2010, 16:37
#48
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Ох уж эти студенты
gomer вне форума  
 
Непрочитано 14.05.2010, 17:02
#49
mmax

Программист широкого профиля.
 
Регистрация: 08.09.2005
Челябинск
Сообщений: 722


Если вы заметили разницу в цветах слоя и курсора, это не ошибка, а так называемый баг Windows, монитора и видеокарты.

Напомню что разные люди воспринимают цвета по разному. Есть еще дальтоники. В данной ситуации программа не смотрит на цвет глазами, она оперирует их номерами, поэтому то что мы видим глазами программу не интересует.

Для примера.
Сделаем цвет слоя 52
Смотрим что цвет курсора визуально не равен цвету слоя.
Слой имеет темный цвет то ли коричневый то ли зеленый (типа хаки), курсор при этом имеет яркий коричневый цвет почти желтый.
[IMG]http://i069.***********/1005/7f/994baf3b221f.jpg[/IMG]

Смотрим какой RGB у цвета 52 (получается 165 165 0):

[IMG]http://s49.***********/i126/1005/b5/ec42fc345133.jpg[/IMG]

идем уже в настройки рабочего пространства (там где цвет курсора руками меняется):

[IMG]http://s48.***********/i120/1005/12/4b5b055b520b.jpg[/IMG]

цвет курсора 52. Совпадает.

Смотрим какой RGB у курсора получился:

[IMG]http://s61.***********/i173/1005/f8/c99435630925.jpg[/IMG]

Снова все совпадает, но визуально чувствуется разница.
Программа тут ни при чем. Разница в цветах вас ждет даже если вы будете задавать вручную цвет курсора.

Альбомами цветов программа не оперирует, но у каждого альбомного цвета есть аналог в RGB который берется за основу в программе.

Цветов, которые визуально совпадают намного больше, чем тех которые не совпадают, даже если вы используете альбомные цвета, которыми программа не оперирует но преобразует правильно.
Если в вашей коллекции слоев есть не совпадающие цвета, то придется вам их сменить.

Последний раз редактировалось mmax, 16.05.2010 в 22:45.
mmax вне форума  
 
Непрочитано 14.05.2010, 18:27
#50
CAHTEXHuK

Инженер по теплоснабжению
 
Регистрация: 10.04.2010
РБ, г. Могилев
Сообщений: 25


mmax, спасибо, вроде так шустро потестил... все работает...
CAHTEXHuK вне форума  
 
Непрочитано 15.05.2010, 09:34
#51
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


>mmax: наши функции делают одно и тоже, в чем ошибка? Превод цвета: 52->52... нормально? Откуда BGR не понимаю.
Цитата:
Сообщение от mmax Посмотреть сообщение
(defun rgb->ole-samocad (R G B)
(+ (* B (expt 16 4)) (* G (expt 16 2)) R)
)
А понял все!!! R в степени 0 B в степени 4 B (G в степени 2) а от перемены мест слагаемых сумма не меняется Не путай народ! И без ошибок пиши А так респект и уважуха...
gomer вне форума  
 
Непрочитано 15.05.2010, 14:07
#52
superkot007


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


Цитата:
Сообщение от mmax Посмотреть сообщение
Ну вот собственно и все.
Просто скопируйте файлы из архива в папку установки Автокада. Ничего загружать не надо все само загрузится.
А если не "в папку установки Автокада" - то достаточно прописать путь к папке (Настройка - Файлы - Путь к вспомогательным файлам) и всё ?
superkot007 вне форума  
 
Непрочитано 15.05.2010, 16:56
#53
mmax

Программист широкого профиля.
 
Регистрация: 08.09.2005
Челябинск
Сообщений: 722


Кстати. Я тут подумал, да и gomer намекал на это дело, но я сначала не въехал о чем речь.
А не логичнее бы было сделать привязку цвета курсора вот к этой пнельке.
Тогда цвет курсора будет равен цвету вновь рисуемых линий.
[IMG]http://s51.***********/i133/1005/81/7d5e49365178.jpg[/IMG]
Ну и соответственно в этой ситуации будет присутствовать частный случай когда цвет будет ПОСЛОЮ.

to superkot007 ты сам ответил на свой вопрос.
mmax вне форума  
 
Непрочитано 16.05.2010, 21:14
#54
CAHTEXHuK

Инженер по теплоснабжению
 
Регистрация: 10.04.2010
РБ, г. Могилев
Сообщений: 25


mmax, если честно, такой вариант и мне приходил в голову, но потом решил, что когда цвет равет цвету слоя - тогда сразу видно, когда после каких либо действий начинаешь рисовать цветом не по слою... да и привыкаешь, к цвету прицела, если работаешь постоянно в одних и тех же слоях... и при попытке что-то рисануть в левом слое - сразу глаза режет... хотя может кому-то и пригодится...
CAHTEXHuK вне форума  
 
Непрочитано 16.05.2010, 23:03
#55
grachev.p

конструктор мебели
 
Регистрация: 28.02.2010
г. Гатчина
Сообщений: 27


>mmax, заметил такую вещь.

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

То есть получается так.

Код:
[Выделить все]
Command: _dimaligned
Specify first extension line origin or <select object>: *Cancel*
Хотя команду я не отменяю.

Ни у кого больше подобного не происходит?

PS. AutoCAD 2011 ENG
grachev.p вне форума  
 
Непрочитано 16.05.2010, 23:04
#56
mmax

Программист широкого профиля.
 
Регистрация: 08.09.2005
Челябинск
Сообщений: 722


Я тут поправил пост 49, там рассказывается про визуальную разницу цветов. В Автокад 2011 с этим делом ситуация вообще аховая. Не смотря на то что цвета совпадают по номерам, у некоторых цветов визуальная разница просто огромная.

Цитата:
С использованием лиспа, который переносит размеры и прочее на соответствующий слой не очень корректно работает смена цвета курсора, точнее смена цвета происходит, но приходится два раза нажимать на соответствующую кнопку размера.
укажи какой конкретно лисп используешь&

проверил иногда конфликтует.

Надо разбираться. Плохо что нет стандартов на использование реакторов. Все их пользуют как хотят

Последний раз редактировалось mmax, 17.05.2010 в 00:29.
mmax вне форума  
 
Непрочитано 17.05.2010, 00:40
#57
grachev.p

конструктор мебели
 
Регистрация: 28.02.2010
г. Гатчина
Сообщений: 27


mmax, лисп использую вот этот.

Код:
[Выделить все]
(vl-load-com)
(setq *OldLayer* (getvar "CLAYER"))
(vl-cmdf "_layer" "_make" "Размеры" "_color" 142 "" "") ;_Создаем слой размеры и задаем цвет 142 ...
(vl-cmdf "_layer" "_make" "Штриховка" "_color" 5 "" "") ;_Создаем слой штриховка и задаем цвет 5
(vl-cmdf "_layer" "_make" "Текст" "_color" 126 "" "") ;_Создаем слой текст и задаем цвет 126
(vl-cmdf "_layer" "_make" "Таблицы" "_color" 126 "" "") ;_Создаем слой таблицы и задаем цвет 126
(vl-cmdf "_layer" "_make" "Выноски" "_color" 126 "" "") ;_Создаем слой выноски и задаем цвет 126
(setvar "clayer" *OldLayer*)
(setq *OldLayer* nil)
;;;;;;По аналогии добавить создание своего слоя
;;; ...
;;;;;;
;;;;;;-------------------------------------------------------------
(if *vlr-cmd*
  (progn
    (setq *vlr-cmd* nil)
    (vlr-remove-all :vlr-command-reactor)
  ) ;_ end of progn
) ;_ end of if
(if (not *vlr-cmd*)
  (setq	*vlr-cmd* (vlr-command-reactor
		    "cmd"
		    '((:vlr-commandwillstart . cmd-start)
		      (:vlr-commandended . cmd-end)
		      (:vlr-commandcancelled . cmd-end)
		      (:vlr-commandfailed . cmd-end)
		     )
		  )
  )
)
;;;;;;-------------------------------------------------------------
(defun cmd-start (calling-reactor startcommandInfo / thecommandstart)
  (setq thecommandstart (nth 0 startcommandInfo))
  (if (null *OldLayer*)
    (setq *OldLayer* (getvar "CLAYER"))
  )
  (cond
;;;_Реакция на начало команды DIM* (DIMALIGNED DIMLINEAR и все что начинается с DIM)
    ((wcmatch thecommandstart "DIM*") ;_Если выполняется команда DIM*
     (setvar "clayer" "размеры") ;_Слой размеры должен быть создан выше (vl-cmdf "_layer" ...
    )
;;; Конец реакции на DIM*
    ((wcmatch thecommandstart "*HATCH*") ;_Если выполняется команда *HATCH*
     (setvar "clayer" "штриховка")
    )
    ((wcmatch thecommandstart "*TEXT") ;_Если выполняется команда *TEXT (TEXT DTEXT)
     (setvar "clayer" "Текст")
    )
    ((wcmatch thecommandstart "*TABLE") ;_Если выполняется команда *TABLE
     (setvar "clayer" "Таблицы")
    )
    ((wcmatch thecommandstart "*LEADER") ;_Если выполняется команда *QLEADER MLEADER
     (setvar "clayer" "Выноски")
    )
    (t (setq *OldLayer* nil))
    ;;_Если не наша команда, чистим список текущих слоев
;;;См http://forum.dwg.ru/showpost.php?p=318806&postco...
;;;и http://forum.dwg.ru/showpost.php?p=318806&postco...
  )
  (princ)
)
;;;-------------------------------------------------------------
(defun cmd-end (calling-reactor cmd / cmd_name)
  (setq cmd_name (strcase (car cmd)))
  (if (or
	(wcmatch cmd_name "*HATCH*") ;_Если выполняется команда DIM*
	(wcmatch cmd_name "DIM*") ;_Если выполняется команда *HATCH*
	(wcmatch cmd_name "*TEXT") ;_Если выполняется команда *TEXT (TEXT DTEXT)
	(wcmatch cmd_name "*TABLE") ;_Если выполняется команда ТАБЛИЦА
	(wcmatch cmd_name "*LEADER") ;_Если выполняется команда *QLEADER или MLEADER
      )
    (progn
      (if *OldLayer*
	(setvar "clayer" *OldLayer*)
      )
      (setq *OldLayer* nil)
    )
  )
  (princ)
)
grachev.p вне форума  
 
Непрочитано 17.05.2010, 10:14
#58
CAHTEXHuK

Инженер по теплоснабжению
 
Регистрация: 10.04.2010
РБ, г. Могилев
Сообщений: 25


Тут такое дело... Выявился еще один неприятный момент... видима из той же оперы что и размеры у grachev.p При желании перетащить группу объектов или объект на неактивном слое за ручку и нажатии на пробел, чтобы активировать Перемещение... команда отменяется...
Автокад по прежнему 2008 рус
CAHTEXHuK вне форума  
 
Непрочитано 17.05.2010, 22:58
#59
mmax

Программист широкого профиля.
 
Регистрация: 08.09.2005
Челябинск
Сообщений: 722


Значит так.
Все команды прерываются если цвет курсора сменился прямо во время выполнения команды. Это может произойти если слой сменился во время работы команды. Некоторые команды в процессе своей работы временно меняют слой и восстанавливают предыдущий при завершении своей работы.

В случае с перемещением можно что-то придумать, а вот в с размерами неизвестно.
mmax вне форума  
 
Непрочитано 17.05.2010, 23:19
#60
grachev.p

конструктор мебели
 
Регистрация: 28.02.2010
г. Гатчина
Сообщений: 27


Цитата:
Сообщение от mmax Посмотреть сообщение
В случае с перемещением можно что-то придумать, а вот в с размерами неизвестно.
А возможно ли убрать обработку размеров вообще.То есть создать еще один командный реактор, который отменяет смену цвета курсора при выполнении команды размеров. Ведь размеры и так на нужный слой переносятся.

Хотя тоже не вариант, не все пользуются тем лиспом.
grachev.p вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Изменить цвет курсора

Размещение рекламы