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

29/01/2014

Как вставить растровое изображение с помощью .NET API?

Чтобы вставить растровое изображение необходимо сначала создать определение растрового изображения, так как растровое изображение – это только ссылка на определение растрового изображения. Следующий код показывает как открыть существующее определение изображения (т.е.. MY_IMAGE_NAME), а если его нет – создать его и затем создать ссылку на него.

Код - VB.NET: [Выделить]
  1. <CommandMethod("customRasterImage")> _
  2. Public Sub CmdInsertImage()
  3.   ' Константа имени определения изображения
  4.   Dim dictName As String = "MY_IMAGE_NAME"
  5.   Dim imageDef As RasterImageDef
  6.   Dim imageDefId As ObjectId
  7.  
  8.   Dim db As Database =
  9.     Application.DocumentManager.MdiActiveDocument.Database
  10.   Dim ed As Editor =
  11.     Application.DocumentManager.MdiActiveDocument.Editor
  12.   Using trans As Transaction = db.TransactionManager.StartTransaction
  13.     Try
  14.       Dim imageDictId As ObjectId =
  15.         RasterImageDef.GetImageDictionary(db)
  16.  
  17.       If imageDictId.IsNull Then
  18.         ' Если нет словаря – создадим его
  19.         imageDictId = RasterImageDef.CreateImageDictionary(db)
  20.       End If
  21.  
  22.       ' открываем словарь изображений
  23.       Dim imageDict As DBDictionary = trans.GetObject( _
  24.         imageDictId, OpenMode.ForRead)
  25.  
  26.       ' Смотрим есть ли наше определение изображения в этом словаре,
  27.       ' и если его нет - создаем
  28.       If imageDict.Contains(dictName) Then
  29.         ' Получаем определение растрового изображения
  30.         imageDefId = imageDict.GetAt(dictName)
  31.         imageDef = trans.GetObject(imageDefId, OpenMode.ForWrite)
  32.       Else
  33.         ' Создаем определение растрового изображения
  34.         ' Спрашиваем имя файла изображения
  35.         Dim fileDia As New Autodesk.AutoCAD.Windows.OpenFileDialog(
  36.           "Open an Image file", Nothing,
  37.           "jpg; gif; tif; bmp", "Image File",
  38.           Autodesk.AutoCAD.Windows.
  39.                 OpenFileDialog.OpenFileDialogFlags.NoUrls)
  40.  
  41.         ' Показываем диалог и проверяем результат
  42.         Dim res As System.Windows.Forms.DialogResult =
  43.           fileDia.ShowDialog()
  44.         If res <> System.Windows.Forms.DialogResult.OK Then Return
  45.  
  46.         ' Создаем определение изображения
  47.         imageDef = New RasterImageDef()
  48.         ' И устанавливаем источник изображения
  49.         imageDef.SourceFileName = fileDia.Filename()
  50.         ' Ну а теперь загружаем его
  51.         imageDef.Load()
  52.         imageDict.UpgradeOpen()
  53.         imageDefId = imageDict.SetAt(dictName, imageDef)
  54.         trans.AddNewlyCreatedDBObject(imageDef, True)
  55.       End If
  56.  
  57.       ' Теперь создаем растровое изображение, которое ссылается на наше определение
  58.       Dim image As New RasterImage()
  59.       image.ImageDefId = imageDefId
  60.  
  61.       ' Устанавливаем ориентацию
  62.       Dim uCorner As New Vector3d(1.5, 0, 0)
  63.       Dim vOnPlane As New Vector3d(0, 1, 0)
  64.       Dim coordinateSystem As New CoordinateSystem3d( _
  65.         Point3d.Origin, uCorner, vOnPlane)
  66.       image.Orientation = coordinateSystem
  67.  
  68.       ' И другие свойства…
  69.       image.ImageTransparency = True
  70.       image.ShowImage = True
  71.  
  72.       ' Добавляем растр к пространству модели
  73.       Dim bt As BlockTable = trans.GetObject( _
  74.         db.BlockTableId, OpenMode.ForRead)
  75.       Dim msBtr As BlockTableRecord = trans.GetObject( _
  76.         bt(BlockTableRecord.ModelSpace), _
  77.         OpenMode.ForWrite)
  78.       msBtr.AppendEntity(image)
  79.       trans.AddNewlyCreatedDBObject(image, True)
  80.  
  81.       ' Создаем реактор между растром и определением растра
  82.       ' чтобы избежать предупреждения об отсутствии ссылки в палитре
  83.       ' внешних ссылок
  84.       RasterImage.EnableReactors(True)
  85.       image.AssociateRasterDef(imageDef)
  86.  
  87.       trans.Commit()
  88.     Catch
  89.     End Try
  90.   End Using
  91. End Sub

 

Источник: http://adndevblog.typepad.com/autocad/2012/05/how-to-insert-a-rasterimage-using-the-net-api.html

 

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

Опубликовано 29.01.2014
Отредактировано 29.01.2014 в 18:32:04