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

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

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

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

Возможно ли курсору присвоить цвет текущего слоя? Это было бы удобно! Не нужно лишний раз переводить глаза на окошко слоев.
В опциях цвет курсора менять можно, но переменной такой, к сожалению, нет.
Просмотров: 30325
 
Непрочитано 14.07.2005, 13:42
#2
Torino


 
Регистрация: 21.08.2003
Штаб
Сообщений: 943
<phrase 1=


>>nikolaev
Интересная мысль!
Можно например повесить реактор на изменение текущего слоя.
А в функцию отклика добавить изменение цвета курсора.
Torino вне форума  
 
Непрочитано 14.07.2005, 14:02
#3
Кулик Алексей aka kpblc
Moderator

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


> Torino : надо постоянно писать и читать из реестра, ключ HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\R16.1\ACAD-301:409\Profiles\<<Unnamed Profile>>\Drawing Window\XHairPickboxEtc значение цвета курсора (по-моему, там меняется). Проблема в том, что значение там вида REG_DWORD, что осложняет чтение и запись, да и методика хранения там... В общем, я пас.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 14.07.2005, 15:33
#4
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


Думается мне из реестра автокад его читает только 1 раз за сеанс, при старте
zamtmn вне форума  
 
Непрочитано 14.07.2005, 15:39
#5
Кулик Алексей aka kpblc
Moderator

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


Не, ни фига. Специально менял цвет, значения этого ключа менялись моментально. Логично предположить, что и обратное срабатывает. Только надо не забыть, что ключ надо формировать динамически, используя cprofile. Но это-то не особо тяжело.
Мне не очень нравится, что придется выполнять дополнительную обработку по переводу цветовых индексов када в формат значений, которые хранятся в реестре. А ведь слои могут иметь и True Color, и Color Book... Задачка усложняется.
Да, и вот еще. Там REG_DWORD. Как туда записывать данные? Десятичным числом или шестнадцатиричным? Или и тем, и другим?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 14.07.2005, 15:43
#6
X-DeViL

Бизнес-шмизнес
 
Регистрация: 26.05.2004
Питер
Сообщений: 1,911


REG_DWORD вроде всю жисть было HEX
X-DeViL вне форума  
 
Непрочитано 14.07.2005, 15:47
#7
Кулик Алексей aka kpblc
Moderator

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


Не знаю, я сужу по тому, что видно через regedit на этот ключ по двойному щелчку.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 14.07.2005, 16:16
#8
Apelsinov

Проектировщик ВК. LISP-любитель.
 
Регистрация: 15.12.2003
Москва
Сообщений: 1,192
<phrase 1=


Чуть подправив обсуждавшееся тут http://www.autocad.ru/cgi-bin/f1/board.cgi?t=5445Tm
получил:
Код:
[Выделить все]
;;;---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---
;;; Функция извлечения цвета курсора пространства модели                           5 февраля 2003
;;;---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---
;;; Функция возвращает цвет курсора  в соответствии с заданным параметром flag
;;; flag может иметь значения "OLE" или "ACI"                                                 
;;; Вызов:                                                                                    
;;; (apel-cursor-get_color "OLE") или (apel-cursor-get_color "ACI")                             
;;; Возврат:                                                                                  
;;; целое число - цвет Windows (OLE) или AutoCAD Color Index (ACI)                            
(defun APEL-CURSOR-GET_COLOR (flag / var_color OLE_color)
  (setq var_color (vla-get-modelcrosshaircolor
                    (vla-get-display
                      (vla-get-preferences (APEL-ACAD_APPLICATION))
                    )
                  )
  )
  (setq OLE_color (vlax-variant-value
                    (vlax-variant-change-type var_color vlax-vblong)
                  )
  )
  (if (= flag "ACI")
    (APEL-OLE-TO-ACI-COLOR OLE_color)
    OLE_color
  )
)
Однако, функция преобразования "OLE" в "ACI" , названная тут APEL-OLE-TO-ACI-COLOR , и взятая оттуда-же, у меня не работает, и возвращает 0.

Код:
[Выделить все]
;;; Функция преобразования номера цвета из OLE в ACI                            5 февраля 2003
;;; kos & ShaggyDoc (скопировано с sw-OLE-to-ACI-color)
;;; Функция преобразует заданный целым аргументом OLE_color номер цвета Windows в номер ACI   
;;; (AutoCAD Color Index)                                                                     
;;; Вызов:                                                                                    
;;; (APEL-OLE-TO-ACI-COLOR 12345678)                                                            
;;; Возврат:                                                                                  
;;; целое число                                                                               

(defun APEL-OLE-TO-ACI-COLOR (OLE_color / result)
  (if (not (setq result  (vl-position
        OLE_color
        '(0         255    65535       65280  16776960   16711680
          16711935   16777215    8421504    12632256  255     8421631
          166         5460902    128       4210816  76     2500172
          38         1250086    16639       8429567  10662     5466278
          8320       4214912    4940       2502732  2598     1251366
          33023      8437759    21414       5471398  16512     4219008
          9804       2505036    4902       1252646  49151     8445951
          31910      5476774    24704       4223104  14668     2507596
          7462       1253670    65535       8454143  42662     5482150
          32896      4227200    19532       2509900  9766     1254950
          65471      8454111    42620       5482129  32864     4227184
          19513      2509891    9757       1254945  65408     8454079
          42579      5482108    32832       4227168  19494     2509881
          9747       1254941    65344       8454047  42537     5482088
          32800      4227152    19475       2509872  9738     1254936
          65280      8454016    42496       5482067  32768     4227136
          19456      2509862    9728       1254931  4259584     10485632
          2729472    6858323    2129920    5275712  1264640     3165222
          665088     1582611    8453888    12582784  5481984     8169043
          4227072    6324288    2509824    3755046  1254912     1910291
          12582656   14679936    8168960    9545299  6324224     7372864
          3755008    4410406    1910272    2172435  16776960   16777088
          10921472   10921555    8421376    8421440  5000192     5000230
          2500096    2500115    16760576   16768896  10910720   10916179
          8413184    8417344    4995328    4997926  2497792     2498835
          16744448   16760704    10900224   10910803  8404992     8413248
          4990464    4995366    2495232    2497811  16728064   16752512
          10889472   10905683    8396800    8409152  4985600     4993062
          2492928    2496531    16711680   16744576  10878976   10900307
          8388608    8405056    4980736    4990502  2490368     2495251
          16711744   16744607    10879017   10900328  8388640     8405072
          4980755    4990512    2490378    2495256  16711808   16744639
          10879059   10900348    8388672    8405088  4980774     4990521
          2490387    2495261    16711871   16744671  10879100   10900369
          8388704    8405104    4980793    4990531  2490397     2495265
          16711935   16744703    10879142   10900390  8388736     8405120
          4980812    4990540    2490406    2495270  12517631   14647551
          8126630    9524134    6291584    7356544  3735628     4400716
          1900582    2167590    8388863    12550399  5439654     8147878
          4194432    6307968    2490444    3745356  1245222     1905446
          4194559    10453247    2687142    6837158  2097280     5259392
          1245260    3155532    655398     1577766  5526612     7763574
          10000536   12303291    14540253   16777215
         )
      ) 
     )
      ) 
    (setq result 0)
  )
  result
)
Так что, обломс!
Apelsinov вне форума  
 
Непрочитано 14.07.2005, 16:47
#9
Apelsinov

Проектировщик ВК. LISP-любитель.
 
Регистрация: 15.12.2003
Москва
Сообщений: 1,192
<phrase 1=


Кстати, для того чтобы поменять цвет курсора, достаточно выражения типа:

Код:
[Выделить все]
(vla-put-modelcrosshaircolor
  (vla-get-display
    (vla-get-preferences (APEL-ACAD_APPLICATION))
  )
65343
)
где 65343 - номер цвета в "OLE". Но чтобы как-то управлять этим надо знать соответствия "OLE" и "ACI", что у меня и не получается с помощью лиспа от kos.

PS/

Код:
[Выделить все]
(defun APEL-ACAD_APPLICATION ()
  (if (null *apel_acad_application*)
    (setq *apel_acad_application* (vlax-get-acad-object))
    *apel_acad_application*
  )
)
PPS/
интересно, между делом , сменить цвет курсора по OLE например на 0, он тогда сливается с фоном и его не видно вообще 8)
Apelsinov вне форума  
 
Непрочитано 14.07.2005, 17:07
#10
Кулик Алексей aka kpblc
Moderator

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


Странно, сейчас втупую скопировал код apel-ole-to-aci-color, запустил, все ок. Может, у тебя входящий параметр 0? От балды-то номер ole-цвета задавать нельзя...
Проверял, вызывая (apel-ole-to-aci-color 1250086)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 14.07.2005, 17:44
#11
Apelsinov

Проектировщик ВК. LISP-любитель.
 
Регистрация: 15.12.2003
Москва
Сообщений: 1,192
<phrase 1=


>kpblc
Дошло до меня наконец, этот список соответствий ACI to OLE не всегда попадает в цель при попытке найти ACI по OLE , (что у меня и происходило) , зато замечательно работает в обратную сторону! - что тут собсно и надо.
Вот функция для задания курсору цвета текущего слоя (для автоматизации надо еще написать реактор на смену слоев - но тут я пас, нифига в реакторах не смыслю):
Код:
[Выделить все]
;;;Функция присвоения курсору цвета по цвету текущего слоя
;;;Apelsinov
;;;14.07.05
(defun APEL-CURSOR-COLOR_BY_CURRENT_LAYER ()
  (APEL-CURSOR-PUT_COLOR
    (vla-get-color (vla-get-activelayer (APEL-ACTIVE_DOCUMENT)))
  )
)
;(APEL-CURSOR-COLOR_BY_CURRENT_LAYER)

;;;Присвоение курсору цвета
;;;Apelsinov
;;;14.07.05
;;;ACI_color - цвет из 256 по ACI
(defun APEL-CURSOR-PUT_COLOR (ACI_color /)
  (vla-put-modelcrosshaircolor
    (vla-get-display
      (vla-get-preferences (APEL-ACAD_APPLICATION))
    )
    (APEL-ACI-TO-OLE-COLOR ACI_color)
  )
)

;;; Функция преобразования номера цвета из OLE в ACI
;;;Apelsinov
;;;14.07.05
(defun APEL-ACI-TO-OLE-COLOR (ACI_color /)
  (nth ACI_color
       '(0          255        65535      65280      16776960   16711680   16711935   16777215   8421504    12632256   255
         8421631    166        5460902    128        4210816    76         2500172    38         1250086    16639      8429567
         10662      5466278    8320       4214912    4940       2502732    2598       1251366    33023      8437759    21414
         5471398    16512      4219008    9804       2505036    4902       1252646    49151      8445951    31910      5476774
         24704      4223104    14668      2507596    7462       1253670    65535      8454143    42662      5482150    32896
         4227200    19532      2509900    9766       1254950    65471      8454111    42620      5482129    32864      4227184
         19513      2509891    9757       1254945    65408      8454079    42579      5482108    32832      4227168    19494
         2509881    9747       1254941    65344      8454047    42537      5482088    32800      4227152    19475      2509872
         9738       1254936    65280      8454016    42496      5482067    32768      4227136    19456      2509862    9728
         1254931    4259584    10485632   2729472    6858323    2129920    5275712    1264640    3165222    665088     1582611
         8453888    12582784   5481984    8169043    4227072    6324288    2509824    3755046    1254912    1910291    12582656
         14679936   8168960    9545299    6324224    7372864    3755008    4410406    1910272    2172435    16776960   16777088
         10921472   10921555   8421376    8421440    5000192    5000230    2500096    2500115    16760576   16768896   10910720
         10916179   8413184    8417344    4995328    4997926    2497792    2498835    16744448   16760704   10900224   10910803
         8404992    8413248    4990464    4995366    2495232    2497811    16728064   16752512   10889472   10905683   8396800
         8409152    4985600    4993062    2492928    2496531    16711680   16744576   10878976   10900307   8388608    8405056
         4980736    4990502    2490368    2495251    16711744   16744607   10879017   10900328   8388640    8405072    4980755
         4990512    2490378    2495256    16711808   16744639   10879059   10900348   8388672    8405088    4980774    4990521
         2490387    2495261    16711871   16744671   10879100   10900369   8388704    8405104    4980793    4990531    2490397
         2495265    16711935   16744703   10879142   10900390   8388736    8405120    4980812    4990540    2490406    2495270
         12517631   14647551   8126630    9524134    6291584    7356544    3735628    4400716    1900582    2167590    8388863
         12550399   5439654    8147878    4194432    6307968    2490444    3745356    1245222    1905446    4194559    10453247
         2687142    6837158    2097280    5259392    1245260    3155532    655398     1577766    5526612    7763574    10000536
         12303291   14540253   16777215
        )
  )
)

;;;Apelsinov
;;;13.05.05
(defun APEL-ACAD_APPLICATION ()
  (if (null *apel_acad_application*)
    (setq *apel_acad_application* (vlax-get-acad-object))
    *apel_acad_application*
  )
)

;;;Apelsinov
;;;18.05.05
(defun APEL-ACTIVE_DOCUMENT ()
  (if (null *apel_active_document*)
    (setq *apel_active_document*
	   (vla-get-activedocument
	     (APEL-ACAD_APPLICATION)
	   )
    )
    *apel_active_document*
  )
)
Apelsinov вне форума  
 
Непрочитано 15.07.2005, 17:26
#12
Apelsinov

Проектировщик ВК. LISP-любитель.
 
Регистрация: 15.12.2003
Москва
Сообщений: 1,192
<phrase 1=


>All
:? вот, тут такая дискуссия была....а я вперся, и всем не интересно что-ли стало?

ладно , буду тут один выеживаться
:roll:

Вот вымучил реактор, чтобы все работало надо эту функцию добавить к тем что выше,и загрузить все это хозяйство. теперь после вызова функции
Код:
[Выделить все]
 (APEL-REACTOR-CURSOR_BY_CURRENT_LAYER nil nil)
- реактор вступает в силу.
Соответственно, можно все это дело пнуть в автозагрузку, и записать где нибудь (например acad.lsp) это же выражение
Код:
[Выделить все]
(APEL-REACTOR-CURSOR_BY_CURRENT_LAYER nil nil)
и теперь завсегда цвет курсора будет меняться в соотв. с текущим слоем. Насколько это приятно, я и сам еще не понял, но а вдруг?!

PS/ Я в реакторах как свинья в апельсинах :shock: поэтому могут быть мааааленькие бяки, например, если уже есть реактор на изменение системных переменных.....или я че-то не догоняю, эй гуры, кто в теме, уважаемые - ау! Помогите советом! [sm804]

Код:
[Выделить все]
;;;Apelsinov
;;;15.07.05
;;;Реактор на соответствие цвета курсора цвету текущего слоя
(defun APEL-REACTOR-CURSOR_BY_CURRENT_LAYER (A B /)
  (if (null *apel-reactor-setvar*)
    (setq *apel-reactor-setvar*
           (vlr-sysvar-reactor
             nil
             '((:vlr-sysvarchanged . APEL-REACTOR-CURSOR_BY_CURRENT_LAYER))
           )
    )

  )
  (if (or (equal B '("CLAYER" t)) (and (null A) (null B)))
    (APEL-CURSOR-COLOR_BY_CURRENT_LAYER)
  )
)
Apelsinov вне форума  
 
Непрочитано 08.09.2005, 18:42
#13
mmax

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


Все конечно очень классно
Но вот беда,
использую белый экран и по умолчанию в слое 0 стоит белый цвет и курсора не видно. С линиями все нормально Акад сам все делает -- если экран черный то линии белые если белый то линии черные а курср белый в любой ситуации.
Сам я в программировании не силен
так подскажите пожалуйста как сделать так чтобы при запуске Акада слой 0 по умолчанию имел черный цвет для всех шаблонов не только для Acadiso.dwt

А вообще идея цвета курсора просто отличная вещь.
Огромное спасибо Apelsinovу
mmax вне форума  
 
Непрочитано 14.09.2005, 08:40
#14
4eh


 
Регистрация: 07.09.2005
Сообщений: 97
<phrase 1=


Люди, подскажите, пжлста, а куда это (и что конкретнно) вставлять?
И если продолжать тему, может и тип линии туда же?
4eh вне форума  
 
Непрочитано 14.09.2005, 09:04
#15
Кулик Алексей aka kpblc
Moderator

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


> mmax : Попробуй засунуть в автозагрузку следующий лисп:
Код:
[Выделить все]
(defun kpblc-layer-0 (/ layer0)
  (vl-load-com)
  (vlax-put-property (vlax-ename->vla-object (tblobjname "layer" "0")) 'color 250)
  ) ;_ end of defun

(kpblc-layer-0)
И можно в acaddoc.lsp дополнительно прописать в принципе вызов (kpblc-layer-0).
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 15.09.2005, 06:22
#16
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 470


Всем привет!

Можно, я тоже одну мысль выскажу? :-)

Вспоминаю, как в свое время мучительно "выеживался",
играясь со цветом курсора. Было такое время, когда
его ярко-белый цвет мне не нравился.

Так вот, я так и не смог подобрать для себя его приемлимый
цвет, поскольку цвет курсора вычитается из попадающих
"под него" объектов. А поскольку у меня курсор 100%, то
постоянно "пропадающие" или дико меняющие цвет
ортогональные линии бесили просто ужасно...

В итоге - вернулся к "классике"... Это так, подумалось просто. :-)
__________________
Счастливо, Алексей!
===AAA=== на форуме  
 
Непрочитано 17.09.2005, 03:29
#17
mmax

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


Цитата:
Сообщение от 4eh
И если продолжать тему, может и тип линии туда же?
Вообщето штрихпунктирный курсор будет выглядеть не очень красиво
mmax вне форума  
 
Непрочитано 19.09.2005, 11:07
#18
Apelsinov

Проектировщик ВК. LISP-любитель.
 
Регистрация: 15.12.2003
Москва
Сообщений: 1,192
<phrase 1=


>4eh, mmax.
Вообще-то поменять тип линии курсора лиспом не получится, и плюс неувязки с масштабом линии. Поэтому тут и обсуждать нечего.
Apelsinov вне форума  
 
Непрочитано 19.09.2005, 17:49
#19
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Цитата:
Сообщение от Apelsinov
PS/ Я в реакторах как свинья в апельсинах :shock: поэтому могут быть мааааленькие бяки, например, если уже есть реактор на изменение системных переменных.....или я че-то не догоняю, эй гуры, кто в теме, уважаемые - ау! Помогите советом! [sm804]
Будут отрабатывать все которые есть. Ну по крайней мере должны отрабатывать. Если глючить будет - то на VBA переписывать придется
vk вне форума  
 
Непрочитано 19.09.2005, 21:14
#20
mmax

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


Цитата:
Сообщение от Apelsinov
>4eh, mmax.
Вообще-то поменять тип линии курсора лиспом не получится, и плюс неувязки с масштабом линии. Поэтому тут и обсуждать нечего.
Вот и я про то же

Но скорее всего человек имел в виду вес курсора
Это уже лучше
Стоит ли открывать такую тему или здесь обсудим?
mmax вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Изменить цвет курсора

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