Сообщество программистов Autodesk в СНГ

ADN Club => VBA => Тема начата: Евгений89 от 04-06-2019, 16:31:01

Название: VBA. Как прочитать параметры цвета (RGB) у атрибута динамического блока
Отправлено: Евгений89 от 04-06-2019, 16:31:01
Добрый день.
Есть код VBA, который присваивает атрибуту цвет RGB.

Код - Visual Basic [Выбрать]
  1. Dim color As AcadAcCmColor
  2. Set color = AcadApplication.GetInterfaceObject("AutoCAD.AcCmColor.19")
  3.  
  4. If UserForm4.ComboBox13 = "1" Then
  5. color.SetRGB 15, 166, 7
  6. varAttributes(1).TrueColor = color
  7.  
  8. ElseIf UserForm4.ComboBox13 = "2" Then
  9. color.SetRGB 197, 188, 17
  10. varAttributes(1).TrueColor = color

Можно ли сделать обратное, узнать параметры цвета RGB атрибута?
ColorIndex = varAttributes(1).color показывает только номер цвета.

Я хочу сделать что-то типа такого:

Код - Visual Basic [Выбрать]
  1. If Color = RGB(197, 188, 17) Then
  2. UserForm4.ComboBox13 = "2"
Название: Re: VBA. Как прочитать параметры цвета (RGB) у атрибута динамического блока
Отправлено: Александр Ривилис от 04-06-2019, 16:50:32
Можно ли сделать обратное, узнать параметры цвета RGB атрибута?
ColorIndex = varAttributes(1).color показывает только номер цвета.
В VBA насколько я помню такой возможности для получения соответствия RGB<->ACI нет. Только в .NET и ObjectARX. Можно воспользоваться этой таблицей: http://gohtx.com/acadcolors.php
Но не уверен, что она на 100% актуальна в последних версиях AutoCAD.
Название: Re: VBA. Как прочитать параметры цвета (RGB) у атрибута динамического блока
Отправлено: Александр Ривилис от 04-06-2019, 16:56:01
Хотя можно попробовать вот такой вариант:
Код - Visual Basic [Выбрать]
  1. Dim col As New AcadAcCmColor
  2. Call col.SetRGB(197, 188, 17)
  3. MsgBox "RGB:" & col.Red & "," & col.Green & "," & col.Blue & " = " & vbCrLf & _
  4. "ACAD Color Index=" & col.ColorIndex & vbCrLf
Ну и отсюда: https://blog.jtbworld.com/2005/11/code-snippet-to-convert-rgb-to-aci.html
Код - Visual Basic [Выбрать]
  1. Function RGBtoACI(r As Long, g As Long, b As Long)
  2.   Dim color As New AcadAcCmColor
  3.   Call color.SetRGB(r, g, b)
  4.   RGBtoACI = color.ColorIndex
  5. End Function
Название: Re: VBA. Как прочитать параметры цвета (RGB) у атрибута динамического блока
Отправлено: Евгений89 от 04-06-2019, 17:16:52
Спасибо!
Название: Re: VBA. Как прочитать параметры цвета (RGB) у атрибута динамического блока
Отправлено: Александр Ривилис от 04-06-2019, 17:21:02
Евгений89,
Если что-то подошло - отмечай решение.