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

12/01/2015

Прозрачность слоев в ObjectARX

Следующий код показывает процедуру изменения «прозрачности» слоя при помощи ObjectARX. Он устанавливает слою 0 прозрачность 60%. Чтобы на экране отобразились изменения требуется регенерация.

Код - C++: [Выделить]
  1. void transparency()
  2. {
  3.     AcDbDatabase *pDb =
  4.       acdbHostApplicationServices()->workingDatabase();
  5.  
  6.     AcDbLayerTable *pLayerTblSrc = NULL;
  7.     AcDbLayerTableRecord *pLayerTblRcdSrc;
  8.     AcDbObjectId layerId;
  9.  
  10.     Acad::ErrorStatus es =
  11.         pDb->getLayerTable(pLayerTblSrc,AcDb::kForRead);
  12.  
  13.     if(es != Acad::eOk)
  14.      return;
  15.  
  16.     pLayerTblSrc->getAt(_T("0"), pLayerTblRcdSrc,AcDb::kForRead);
  17.     pLayerTblSrc->close();
  18.  
  19.     AcCmTransparency trans = pLayerTblRcdSrc->transparency();
  20.  
  21.     Adesk::UInt8 value = trans.alpha();
  22.     int percentage = (int)(((255 - value) * 100) / 255);
  23.  
  24.     acutPrintf(_T("Прозрачность слоя 0 равна %d"), percentage);
  25.  
  26.     pLayerTblRcdSrc->upgradeOpen();
  27.  
  28.     //60%
  29.     Adesk::UInt8 alpha = (255 * (100 - 60) / 100);
  30.     AcCmTransparency newTrans(alpha);
  31.     pLayerTblRcdSrc->setLineWeight(pLayerTblRcdSrc->lineWeight());
  32.     pLayerTblRcdSrc->setTransparency(newTrans);
  33.  
  34.     pLayerTblRcdSrc->close();
  35.  
  36.     acDocManager->sendStringToExecute(acDocManager->curDocument(),
  37.                                                     _T("_Regen "));
  38. }

 

Источник: http://adndevblog.typepad.com/autocad/2012/07/layer-transparency-using-objectarx.html

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

Опубликовано 12.01.2015
Отредактировано 13.01.2015 в 00:23:30