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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Работа с моделью цветов RGB

Работа с моделью цветов RGB

Ответ
Поиск в этой теме
Непрочитано 22.07.2010, 08:44 #1
Работа с моделью цветов RGB
slogos
 
Регистрация: 02.06.2009
Сообщений: 36

Подскажите пж-лста как решить следующую проблему. Есть текстовый файл с координатами и RGB индексами их цветов (x y z 125 140 150).
Пытаюсь придать цвет загруженным точкам примерно так
(vla-put-ColorMethod vla_col acColorMethodByRGB)
(vlax-dump-object vla_col)
;;(print (vlax-get-property vla_col 'Red))

(vlax-put-property vla_col 'Red 181)

ну и т.д

Но ActiveX дает ошибку.
Из дампа видно что как то это должно работать, раз есть разные цветовые модели!!
Моей признательности не будет нраниц в пределах разумного.
Можно на Email: logos@pirs.omsknet.ru
Просмотров: 4993
 
Непрочитано 22.07.2010, 09:21
#2
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


Свойство Red нельзя изменить - оно только для чтения.
Do$ вне форума  
 
Автор темы   Непрочитано 22.07.2010, 09:49
#3
slogos


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


Ваше сообщение не дает пути решения, к сожалению.
slogos вне форума  
 
Непрочитано 22.07.2010, 10:04
#4
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


Я бы мог ответить в тон, что, мол первое сообщение не дает достаточной информации для ответа, дающего путь к решению . Но попробую предложить менять цвета объектов с помощью vla-put-color или модифицируя 62 группу entget-листа объекта с помощью entmod. Примеров на форуме полно, надо воспользоваться поиском.
Do$ вне форума  
 
Автор темы   Непрочитано 22.07.2010, 10:21
#5
slogos


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


Прошу прощения за тон. И все же, либо я неверно задал вопрос, либо не понял ответ. Мне нужно придать цвет примитиву на основе имеющихся данных, а данные - это три числа RGB модели цветов (не индексной автокадовской от 0 до 256 !!). С помощью vla-put-Color невозможно это сделать т.к. это работает только с моделью 1-256. Так ведь?
slogos вне форума  
 
Непрочитано 22.07.2010, 10:41
#6
Кулик Алексей aka kpblc
Moderator

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


А если использовать vla-put-truecolor? Правда, там не все просто с представлением цветов, но это уже детали
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 22.07.2010, 11:04
#7
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


В коде 420 содержится информация вида: R*16^4+G*16^2+B.
К примеру, цвет 125 140 150 в 420 коде будет иметь значение: 125*65536+140*256+150=8227990
Простейший код для присвоения этого цвета выбранному объекту:
Код:
[Выделить все]
(entmod (append (vl-remove-if '(lambda (cg) (member (car cd) '(62 420))) (entget (car (entsel)))) '((420 . 8227990))))
Do$ вне форума  
 
Непрочитано 22.07.2010, 11:10
#8
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Вариант 1
Код:
[Выделить все]
(setq R 125 G 140 B 150)
(setq obj (vlax-ename->vla-object (car(entsel "\nВыберите объект для задания цвета: "))))      
(setq TrueColor (vla-get-TrueColor obj))
(vla-setRGB TrueColor R G B)     
(vla-put-TrueColor obj TrueColor)
Вариант 2 : модифицировать (добавлять) 420 группу entget-листа
Алгоритм пересчета из RGB в код поля 420


Полезные ссылки
Перевод цвета из одного номера другой
Управление видимостью слоев
RGB_color в OLE_color как это сделать?
Изменить цвет курсора
Автоматическое назначение цветов по градиенту на комплект слоев

PS С сайта caduser.ru: Как присвоить TrueColor примитиву?
Ф-ции Александра Ривиса
Код:
[Выделить все]
(defun GetRGB ( truecolor )
  ;;; (getrgb 8227990 )
(list
   (logand (lsh truecolor -16) 255) ;; R
   (logand (lsh truecolor -8) 255)  ;; G
   (logand truecolor 255)           ;; B
)
)
; TrueColor по R G B
(defun GetTrueColor ( r g b )
  ;;;  (GetTrueColor 125 140 150)
  (+ (lsh r 16) (lsh g 8)  b)
)
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 22.07.2010 в 11:26.
VVA вне форума  
 
Автор темы   Непрочитано 22.07.2010, 11:22
#9
slogos


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


Спасибо, все понятно. Разрешите последний вопрос. Как уживаются (62 ???) и (420 ???) в одном dxf списке или они вместе не живут?
slogos вне форума  
 
Непрочитано 22.07.2010, 12:03
#10
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


Если цвет объекта не по слою, то 62 группа всегда присутствует в dxf списке. 420 группа дополняет список, если цвет объекта не относится к индексированным (1-255). То есть, возможны три варианта: в списке нет групп с кодами 62 и 420 (цвет объекта "по слою"), в списке есть группа с кодом 62 (объект имеет индексированный цвет) и в списке есть группы с кодами 62 и 420 (цвет объекта не принадлежит к индексированным).
К примеру, если в свойствах объекта указан красный цвет, то его dxf список будет содержать (62 . 1).
Если в свойствах объекта цвет 125,140,150, то в списке будут присутствовать (62 . 252) и (420 . 8227990). 252 - это наиболее близкий индексированный цвет к 125,140,150. Как он вычисляется - для меня загадка, но если модифицировать 420 группу, 62 меняется сама.
Do$ вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Работа с моделью цветов RGB



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Интересная работа FOXAL Профессии и трудовые отношения 51 19.02.2010 11:59
Управление видимостью слоев Аshаs-ка Программирование 80 27.08.2008 14:30
Что вы делаете с 3D моделью? Jerald Разное 14 25.08.2007 16:09
Кодирование цветов AutoCAD'е и RGB Ренат AutoCAD 7 02.06.2006 11:23