29/01/2014
Как вставить растровое изображение с помощью .NET API?
Чтобы вставить растровое изображение необходимо сначала создать определение растрового изображения, так как растровое изображение – это только ссылка на определение растрового изображения. Следующий код показывает как открыть существующее определение изображения (т.е.. MY_IMAGE_NAME), а если его нет – создать его и затем создать ссылку на него.
Код - VB.NET: [Выделить]
- <CommandMethod("customRasterImage")> _
- Public Sub CmdInsertImage()
- ' Константа имени определения изображения
- Dim dictName As String = "MY_IMAGE_NAME"
- Dim imageDef As RasterImageDef
- Dim imageDefId As ObjectId
- Dim db As Database =
- Application.DocumentManager.MdiActiveDocument.Database
- Dim ed As Editor =
- Application.DocumentManager.MdiActiveDocument.Editor
- Using trans As Transaction = db.TransactionManager.StartTransaction
- Try
- Dim imageDictId As ObjectId =
- RasterImageDef.GetImageDictionary(db)
- If imageDictId.IsNull Then
- ' Если нет словаря – создадим его
- imageDictId = RasterImageDef.CreateImageDictionary(db)
- End If
- ' открываем словарь изображений
- Dim imageDict As DBDictionary = trans.GetObject( _
- imageDictId, OpenMode.ForRead)
- ' Смотрим есть ли наше определение изображения в этом словаре,
- ' и если его нет - создаем
- If imageDict.Contains(dictName) Then
- ' Получаем определение растрового изображения
- imageDefId = imageDict.GetAt(dictName)
- imageDef = trans.GetObject(imageDefId, OpenMode.ForWrite)
- Else
- ' Создаем определение растрового изображения
- ' Спрашиваем имя файла изображения
- Dim fileDia As New Autodesk.AutoCAD.Windows.OpenFileDialog(
- "Open an Image file", Nothing,
- "jpg; gif; tif; bmp", "Image File",
- Autodesk.AutoCAD.Windows.
- OpenFileDialog.OpenFileDialogFlags.NoUrls)
- ' Показываем диалог и проверяем результат
- Dim res As System.Windows.Forms.DialogResult =
- fileDia.ShowDialog()
- If res <> System.Windows.Forms.DialogResult.OK Then Return
- ' Создаем определение изображения
- imageDef = New RasterImageDef()
- ' И устанавливаем источник изображения
- imageDef.SourceFileName = fileDia.Filename()
- ' Ну а теперь загружаем его
- imageDef.Load()
- imageDict.UpgradeOpen()
- imageDefId = imageDict.SetAt(dictName, imageDef)
- trans.AddNewlyCreatedDBObject(imageDef, True)
- End If
- ' Теперь создаем растровое изображение, которое ссылается на наше определение
- Dim image As New RasterImage()
- image.ImageDefId = imageDefId
- ' Устанавливаем ориентацию
- Dim uCorner As New Vector3d(1.5, 0, 0)
- Dim vOnPlane As New Vector3d(0, 1, 0)
- Dim coordinateSystem As New CoordinateSystem3d( _
- Point3d.Origin, uCorner, vOnPlane)
- image.Orientation = coordinateSystem
- ' И другие свойства…
- image.ImageTransparency = True
- image.ShowImage = True
- ' Добавляем растр к пространству модели
- Dim bt As BlockTable = trans.GetObject( _
- db.BlockTableId, OpenMode.ForRead)
- Dim msBtr As BlockTableRecord = trans.GetObject( _
- bt(BlockTableRecord.ModelSpace), _
- OpenMode.ForWrite)
- msBtr.AppendEntity(image)
- trans.AddNewlyCreatedDBObject(image, True)
- ' Создаем реактор между растром и определением растра
- ' чтобы избежать предупреждения об отсутствии ссылки в палитре
- ' внешних ссылок
- RasterImage.EnableReactors(True)
- image.AssociateRasterDef(imageDef)
- trans.Commit()
- Catch
- End Try
- End Using
- 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