12/01/2015
Прозрачность слоев в ObjectARX
Следующий код показывает процедуру изменения «прозрачности» слоя при помощи ObjectARX. Он устанавливает слою 0 прозрачность 60%. Чтобы на экране отобразились изменения требуется регенерация.
Код - C++: [Выделить]
- void transparency()
- {
- AcDbDatabase *pDb =
- acdbHostApplicationServices()->workingDatabase();
- AcDbLayerTable *pLayerTblSrc = NULL;
- AcDbLayerTableRecord *pLayerTblRcdSrc;
- AcDbObjectId layerId;
- Acad::ErrorStatus es =
- pDb->getLayerTable(pLayerTblSrc,AcDb::kForRead);
- if(es != Acad::eOk)
- return;
- pLayerTblSrc->getAt(_T("0"), pLayerTblRcdSrc,AcDb::kForRead);
- pLayerTblSrc->close();
- AcCmTransparency trans = pLayerTblRcdSrc->transparency();
- Adesk::UInt8 value = trans.alpha();
- int percentage = (int)(((255 - value) * 100) / 255);
- acutPrintf(_T("Прозрачность слоя 0 равна %d"), percentage);
- pLayerTblRcdSrc->upgradeOpen();
- //60%
- Adesk::UInt8 alpha = (255 * (100 - 60) / 100);
- AcCmTransparency newTrans(alpha);
- pLayerTblRcdSrc->setLineWeight(pLayerTblRcdSrc->lineWeight());
- pLayerTblRcdSrc->setTransparency(newTrans);
- pLayerTblRcdSrc->close();
- acDocManager->sendStringToExecute(acDocManager->curDocument(),
- _T("_Regen "));
- }
Источник: 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