16/08/2013
Задание примитиву свойства прозрачности используя метод setAlphaPercent
Это пример на ObjectARX задающий примитиву прозрачность, используя метод "setAlphaPercent". Этот метод можно использовать вместо метода "setAlpha" если вы хотите задать альфа-значение в процентах.
Код - C++: [Выделить]
- ads_name ename;
- ads_point pickPt;
- int rc = acedEntSel(_T("\nВыберите объект: "), ename, pickPt);
- if (rc != RTNORM)
- return;
- AcDbObjectId entId = AcDbObjectId::kNull;
- acdbGetObjectId(entId, ename);
- AcDbEntity *pEntity = NULL;
- Acad::ErrorStatus es
- = acdbOpenAcDbEntity(pEntity, entId, AcDb::kForRead);
- AcCmTransparency trans = pEntity->transparency();
- Adesk::UInt8 value = trans.alpha();
- double percentage = value * 100.0 / 255.0;
- acutPrintf(_T("Значение прозрачности примитива : %d В процентах : %lf"),
- value, percentage);
- pEntity->upgradeOpen();
- int nAlphaPercent = 1;
- acedInitGet(RSG_NONULL + RSG_NONEG, NULL);
- // 100 % alpha – Совершенно непрозрачный
- // 0 % alpha – Полностью прозрачный
- rc = acedGetInt(_T("\nУкажите процент прозрачности (от 0 до 100):"), &nAlphaPercent);
- if (rc != RTNORM)
- return;
- AcCmTransparency transparency1;
- transparency1.setAlphaPercent(1.0 - (nAlphaPercent * 0.01));
- // Чтобы убедиться, что прозрачность изменилась
- pEntity->setColorIndex (pEntity->colorIndex());
- pEntity->setTransparency(transparency1);
- pEntity->close();
- acDocManager->sendStringToExecute(
- acDocManager->curDocument(), _T("_Regen "));
Примечание переводчика: Вместо использования асинхронного метода sendStringToExecute для запуска команды РЕГЕН (REGEN) я бы использовал функцию ads_regen(), которая выполняет регенерацию синхронно.
Источник: http://adndevblog.typepad.com/autocad/2013/02/setting-entity-transparency-using-setalphapercent.html
Обсуждение: http://adn-cis.org/forum/index.php?topic=183
Опубликовано 16.08.2013Отредактировано 21.08.2013 в 23:25:54