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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как программно прочитать цвет слоя, если он задан в формате RGB?

Как программно прочитать цвет слоя, если он задан в формате RGB?

Ответ
Поиск в этой теме
Непрочитано 28.02.2017, 03:39 #1
Как программно прочитать цвет слоя, если он задан в формате RGB?
480725
 
Москва
Регистрация: 06.10.2007
Сообщений: 132

Имеется чертеж, в котором много примитивов ( ~ 7000, но не все) имеют цвет ПОСЛОЮ и расположены на слоях с цветом 0,0,0
При работе на черном фоне эти примитивы не видны.
Функции TBLSEARCH и TBLNEXT показывают, что слои с цветом 0,0,0 имеют цвет 18 (он как раз на черном фоне виден).
М.б. через объектную модель можно правильно прочитать истинный цвет слоя, подскажите как!

Еще проблема. Если RGB цвет назначен примитиву, то он не читается через ENTGET, тоже получается число вместо списка.

Последний раз редактировалось 480725, 28.02.2017 в 04:32.
Просмотров: 2619
 
Непрочитано 28.02.2017, 08:37
#2
Кулик Алексей aka kpblc
Moderator

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


RGB цвет хранится не в 62 группе, а в 420. Функции преобразования соответствующего значения в список red-green-blue на форуме были (см.поиск: https://dwg.ru/cse?q=rgb%20%D0%B2%20aci)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 28.02.2017, 10:22
#3
480725


 
Регистрация: 06.10.2007
Москва
Сообщений: 132


По примитивам - спасибо, по слоям где искать цвет непонятно:
Для слоя с цветом 0,0,0
Команда: (tblsearch "LAYER""00") даёт
((0 . "LAYER") (2 . "00") (70 . 0) (62 . 18) (6 . "Continuous"))
Т.е. код 420 отсутствует и отличить RGB 0,0,0 от ACI 18 не получается.
Поиск, на который дана ссылка, не соответствует основному вопросу поднятому в теме КАК ПРОГРАММНО УЗНАТЬ RGB ЦВЕТ НАЗНАЧЕННЫЙ СЛОЮ.
Основные статьи из него я уже смотрел - в моем ключе там проблему не рассматривают, если где-то внутри программ не акцентируя читают цвет слоя в RGB, то найти это мне не удалось, поэтому вопрос и поставлен конкретно именно в таком ключе. Кстати, цвету RGB 0,0,0 нет аналога в кодировке Автокада, т.к. он черный не только на белом но и на черном фоне, т.е. надо ловить именно RGB кодировку.
480725 вне форума  
 
Непрочитано 28.02.2017, 10:27
#4
Кулик Алексей aka kpblc
Moderator

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


(entget (tblobjname "layer" "00") '("*"))
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 28.02.2017, 10:41
#5
480725


 
Регистрация: 06.10.2007
Москва
Сообщений: 132


Огромное спасибо! Не могу удержаться и не процитировать моего любимого детского поэта:

Вот теперь тебя люблю я
Вот теперь тебя хвалю я
Наконец-то ты чистюля
Мойдодыру угодил!
480725 вне форума  
 
Непрочитано 28.02.2017, 12:03
#6
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Еще ссылка на функции конвертирования цвета Colour Conversion Functions

Цитата:
Сообщение от 480725 Посмотреть сообщение
М.б. через объектную модель можно правильно прочитать истинный цвет слоя, подскажите как!
Примерно так
Код:
[Выделить все]
(setq lay (vla-item (vla-get-layers (vla-get-activedocument (vlax-get-acad-object))) "0"))
(setq TrueColor (vla-get-TrueColor lay))
(setq ColorMethod (vla-get-ColorMethod TrueColor))
(cond
  ((eq ColorMethod acColorMethodByACI)
   (alert (strcat "Использован ACI метод\nЦвет = " (itoa(vla-get-ColorIndex TrueColor))))
   )
  ((eq ColorMethod acColorMethodByRGB)
   (alert (strcat "Использован RGB метод\nЦвет (R G B) = " (itoa(vla-get-Red TrueColor)) "," (itoa(vla-get-Green TrueColor)) "," (itoa(vla-get-Blue TrueColor))))
   )
  (t nil)
  )
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 28.02.2017, 14:39
#7
480725


 
Регистрация: 06.10.2007
Москва
Сообщений: 132


Спасибо. Я прямо сейчас пытался подобрать алгоритм вычисления после невнятного описания у Полещука "в подлиннике Автокад 2008", теперь буду уметь!
480725 вне форума  
 
Непрочитано 09.03.2017, 12:01
#8
power85


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


Цитата:
Сообщение от VVA Посмотреть сообщение
Еще ссылка на функции конвертирования цвета Colour Conversion Functions
Спасибо за ссылку. Давно это искал.
power85 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как программно прочитать цвет слоя, если он задан в формате RGB?

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Какой ГОСТ на песчаную подушку для балластного слоя железных дорог? ГиТ14 Автомобильные и железные дороги, мосты, тоннели и организация движения 11 26.02.2015 16:02
Ремонт бетонных конструкций и восстановление защитного слоя Glorius Железобетонные конструкции 63 18.01.2012 10:40
Как программно изменить цвет заднего фона (вкладка Модель)? mmmx Программирование 8 27.04.2011 20:45
Можно ли использовать буроопускные сваи при проектировании по принципу II, если свая опирается на скальный грунт, а деятельный слой - пучинистый vlasctelin Основания и фундаменты 6 04.03.2011 04:01
VBA. Размораживание слоя, построение объекта в нем, замораживание слоя = ошибка Alexey_02 Программирование 3 06.03.2009 22:33