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

26/05/2016

Установка величины прозрачности новому материалу с помощью .NET

Чтобы назначить величину прозрачности новому материалу в AutoCAD .NET API используется класс MaterialOpacityComponent. Следующий код добавляет новый материал в Библиотеку материалов с прозрачностью 90.

Код - C#: [Выделить]
  1. [CommandMethod("AddMaterialToLibrary")]
  2. public static void AddMaterialToLibrary()
  3. {
  4.   Document doc = Application.DocumentManager.MdiActiveDocument;
  5.   String sMaterialName = "MyMaterial";
  6.   String sTextureMapPath = @"C:\test.jpg";
  7.   using (Transaction acTrans = doc.TransactionManager.StartTransaction())
  8.   {
  9.     // Получаем библиотеку материалов
  10.     DBDictionary matLib =
  11.      (DBDictionary)acTrans.GetObject(
  12.       doc.Database.MaterialDictionaryId, OpenMode.ForRead);
  13.  
  14.     // Если материала в библиотеке нет
  15.     if (matLib.Contains(sMaterialName) == false)
  16.     {
  17.       // Создаём изображение карты текстуры
  18.       ImageFileTexture tex = new ImageFileTexture();
  19.       tex.SourceFileName = sTextureMapPath;
  20.  
  21.       // Создаём карту материала
  22.       double uScale = 15, vScale = 20;
  23.       double uOffset = 25, vOffset = 30;
  24.       Matrix3d mx = new Matrix3d(new double[]{
  25.              uScale, 0, 0, uScale * uOffset,
  26.              0, vScale, 0, vScale * vOffset,
  27.              0, 0, 1, 0,
  28.              0, 0, 0, 1});
  29.  
  30.       Mapper mapper = new Mapper(
  31.         Projection.Cylinder, Tiling.Tile, Tiling.Tile,
  32.         AutoTransform.None, mx);
  33.  
  34.       MaterialMap map =
  35.        new MaterialMap(Source.File, tex, 1.0, mapper);
  36.  
  37.  
  38.       MaterialDiffuseComponent mdc =
  39.        new MaterialDiffuseComponent(new MaterialColor(), map);
  40.       MaterialRefractionComponent mrc =
  41.        new MaterialRefractionComponent(2.0, map);
  42.  
  43.       // Устанавливаем непрозрачность
  44.       MaterialOpacityComponent moc =
  45.        new MaterialOpacityComponent(0.1, map);
  46.  
  47.       // Создаём новый материал
  48.       Material mat = new Material();
  49.       mat.Name = sMaterialName;
  50.       mat.Diffuse = mdc;
  51.       mat.Refraction = mrc;
  52.       mat.Opacity = moc;
  53.       mat.Mode = Mode.Realistic;
  54.       mat.Reflectivity = 1.0;
  55.       mat.IlluminationModel = IlluminationModel.BlinnShader;
  56.  
  57.       // Добавляем в библиотеку материалов
  58.       matLib.UpgradeOpen();
  59.       matLib.SetAt(sMaterialName, mat);
  60.       acTrans.AddNewlyCreatedDBObject(mat, true);
  61.       acTrans.Commit();
  62.     }
  63.   }
  64. }

Интересно, что в приведенном выше коде, параметр процент (percentage) MaterialOpacityComponent может быть установлен в значение от 0 до 1, где 0 указывает на «не ненепрозрачность» (полная прозрачность) и 1 указывает на полную непрозрачность («не прозрачность»). J

При редактировании нового материала средствами AutoCAD, мы видим слово «прозрачность» и его количество имеет значение от 0 до 100, где 0 означает отсутствие прозрачности (полностью непрозрачный) и 100 означает полностью прозрачный («не непрозрачный»).

 

Из-за этой особенности, например, если величина прозрачности 75, в коде процент непрозрачности должен быть установлен в 0.25.

Источник: http://adndevblog.typepad.com/autocad/2016/05/setting-transparency-amount-of-a-newly-created-material-using-net.html

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

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

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