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

08/06/2016

Как получить цвет солнца

Цвет солнца вычисляется по географическому положению, дате и времени дня.

Начиная с ObjectARX 2017 у нас есть API для получения цвета солнца как из палитры свойств солнца:

Код - C++: [Выделить]
  1. static void sunColor(void)
  2. {
  3.        /* Убеждаемся, что Солнце включено */
  4.        /* Устанавливаем SUNSTATUS в 1*/
  5.        AcDbObjectId curVportId = AcDbObjectId::kNull;
  6.        curVportId = acedActiveViewportId();
  7.        struct resbuf rb;
  8.        int rt = acedGetVar(_T("CVPORT"), &rb);
  9.        if (rt != RTNORM)
  10.        {
  11.              acutPrintf(_T("\nОшибка при получении значения \"CVPORT\"."));
  12.              return;
  13.        }
  14.        int vportNum = rb.resval.rint;
  15.  
  16.        AcDbObjectPointer<AcDbViewportTableRecord> curVTR(curVportId, AcDb::kForWrite);
  17.  
  18.        if (curVTR.openStatus() == Acad::eOk)
  19.        {
  20.              if (curVTR->sunId() != AcDbObjectId::kNull)
  21.              {
  22.                     /* Солнце есть, попробуем получить цвет Солнца в AutoCAD*/
  23.                     AcDbObjectPointer<AcDbSun> pSun(curVTR->sunId(), AcDb::kForRead);
  24.                     if (pSun.openStatus() == Acad::eOk)
  25.                     {
  26.                            const AcGiColorRGB& sunColor = pSun->sunColorPhotometric(1.0);
  27.                            double factor = 255.0;
  28.                            double r = sunColor.red * factor;
  29.                            double g = sunColor.green * factor;
  30.                            double b = sunColor.blue * factor;
  31.  
  32.                            acutPrintf(_T("R[%f],G[%f],B[%f]"), r, g, b);
  33.                     }
  34.              }
  35.        }
  36. }

 

Источник: http://adndevblog.typepad.com/autocad/2016/06/how-to-get-colors-of-sun.html

 

Автор перевода: Александр Ривилис

Обсуждение: http://adn-cis.org/forum/index.php?topic=

Опубликовано 08.06.2016