Установка величины прозрачности новому материалу с помощью .NET
Чтобы назначить величину прозрачности новому материалу в AutoCAD .NET API используется класс MaterialOpacityComponent. Следующий код добавляет новый материал в Библиотеку материалов с прозрачностью 90.
- [CommandMethod("AddMaterialToLibrary")]
- public static void AddMaterialToLibrary()
- {
- Document doc = Application.DocumentManager.MdiActiveDocument;
- String sMaterialName = "MyMaterial";
- String sTextureMapPath = @"C:\test.jpg";
- using (Transaction acTrans = doc.TransactionManager.StartTransaction())
- {
- // Получаем библиотеку материалов
- DBDictionary matLib =
- (DBDictionary)acTrans.GetObject(
- doc.Database.MaterialDictionaryId, OpenMode.ForRead);
- // Если материала в библиотеке нет
- if (matLib.Contains(sMaterialName) == false)
- {
- // Создаём изображение карты текстуры
- ImageFileTexture tex = new ImageFileTexture();
- tex.SourceFileName = sTextureMapPath;
- // Создаём карту материала
- double uScale = 15, vScale = 20;
- double uOffset = 25, vOffset = 30;
- Matrix3d mx = new Matrix3d(new double[]{
- uScale, 0, 0, uScale * uOffset,
- 0, vScale, 0, vScale * vOffset,
- 0, 0, 1, 0,
- 0, 0, 0, 1});
- Mapper mapper = new Mapper(
- Projection.Cylinder, Tiling.Tile, Tiling.Tile,
- AutoTransform.None, mx);
- MaterialMap map =
- new MaterialMap(Source.File, tex, 1.0, mapper);
- MaterialDiffuseComponent mdc =
- new MaterialDiffuseComponent(new MaterialColor(), map);
- MaterialRefractionComponent mrc =
- new MaterialRefractionComponent(2.0, map);
- // Устанавливаем непрозрачность
- MaterialOpacityComponent moc =
- new MaterialOpacityComponent(0.1, map);
- // Создаём новый материал
- Material mat = new Material();
- mat.Name = sMaterialName;
- mat.Diffuse = mdc;
- mat.Refraction = mrc;
- mat.Opacity = moc;
- mat.Mode = Mode.Realistic;
- mat.Reflectivity = 1.0;
- mat.IlluminationModel = IlluminationModel.BlinnShader;
- // Добавляем в библиотеку материалов
- matLib.UpgradeOpen();
- matLib.SetAt(sMaterialName, mat);
- acTrans.AddNewlyCreatedDBObject(mat, true);
- acTrans.Commit();
- }
- }
- }
Интересно, что в приведенном выше коде, параметр процент (percentage) MaterialOpacityComponent может быть установлен в значение от 0 до 1, где 0 указывает на «не ненепрозрачность» (полная прозрачность) и 1 указывает на полную непрозрачность («не прозрачность»). J
При редактировании нового материала средствами AutoCAD, мы видим слово «прозрачность» и его количество имеет значение от 0 до 100, где 0 означает отсутствие прозрачности (полностью непрозрачный) и 100 означает полностью прозрачный («не непрозрачный»).
Из-за этой особенности, например, если величина прозрачности 75, в коде процент непрозрачности должен быть установлен в 0.25.
Обсуждение: http://adn-cis.org/forum/index.php?topic=7112
Опубликовано 26.05.2016