vb.net saveas raster

vb.net saveas raster

Jedimaster
Collaborator Collaborator
502 Views
2 Replies
Message 1 of 3

vb.net saveas raster

Jedimaster
Collaborator
Collaborator

I have a VB.net routine that batch renames drawing files.The routine opens the file does a saveas. It works well except when it comes to external  references. I can live with the drawing references breaking. I am trying to do a ISAVEAS for the Raster Images. Cannot disable the file dialog. If Change the image name and imagedef files it insert the file unrotated  and unscaled.

0 Likes
Accepted solutions (1)
503 Views
2 Replies
Replies (2)
Message 2 of 3

Jedimaster
Collaborator
Collaborator

Sorry I did not think of -IMAGE command.

0 Likes
Message 3 of 3

Jedimaster
Collaborator
Collaborator
Accepted solution

Here is my solution

' Get old raster name

Sub GetRaster()
Dim CurrentSaveAsDrawing As String = Interaction.GetSetting("Autodesk Applications", My.Application.Info.Title, "CurrentSaveAsDrawing")
Dim ActiveDrawing As Autodesk.AutoCAD.ApplicationServices.Document = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument
ActiveDrawing.LockDocument()
Dim acTypValAr(0) As Autodesk.AutoCAD.DatabaseServices.TypedValue
acTypValAr.SetValue(New Autodesk.AutoCAD.DatabaseServices.TypedValue(Autodesk.AutoCAD.DatabaseServices.DxfCode.Start, "IMAGE"), 0)
Dim acSelFtr As Autodesk.AutoCAD.EditorInput.SelectionFilter = New Autodesk.AutoCAD.EditorInput.SelectionFilter(acTypValAr)
Dim ed As Autodesk.AutoCAD.EditorInput.Editor = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor
Dim acSSPrompt As Autodesk.AutoCAD.EditorInput.PromptSelectionResult
acSSPrompt = ed.SelectAll(acSelFtr)
If acSSPrompt.Status = Autodesk.AutoCAD.EditorInput.PromptStatus.OK Then
Dim acSSet As Autodesk.AutoCAD.EditorInput.SelectionSet = acSSPrompt.Value
Using Trans As Autodesk.AutoCAD.DatabaseServices.Transaction = ActiveDrawing.Database.TransactionManager.StartTransaction
For Each selObj In acSSet
Dim MyImage As Autodesk.AutoCAD.DatabaseServices.RasterImage = Trans.GetObject(selObj.ObjectId, Autodesk.AutoCAD.DatabaseServices.OpenMode.ForWrite, False, True)
Dim MyImageDef As Autodesk.AutoCAD.DatabaseServices.RasterImageDef = Trans.GetObject(MyImage.ImageDefId, Autodesk.AutoCAD.DatabaseServices.OpenMode.ForWrite, False, True)
Dim OriginalName As String = MyImage.Name
Dim OriginalActiveFileName As String = MyImageDef.ActiveFileName
Dim OriginalSourceFileName As String = MyImageDef.SourceFileName
Dim ImageExtension As String = System.IO.Path.GetExtension(OriginalActiveFileName)
Dim DestinationFile As String = Replace(CurrentSaveAsDrawing, ".dwg", ImageExtension, 1, -1, CompareMethod.Text)
System.IO.File.Copy(OriginalActiveFileName, DestinationFile, True)
Interaction.SaveSetting("Autodesk Applications", My.Application.Info.Title, "SaveAsImageFile", DestinationFile)
Next
End Using
End Sub

' Apply new raster name
Sub Raster_Update()
Dim SaveAsImageFile As String = Interaction.GetSetting("Autodesk Applications", My.Application.Info.Title, "SaveAsImageFile")
Dim ACADApp As Autodesk.AutoCAD.Interop.AcadApplication = Autodesk.AutoCAD.ApplicationServices.Application.AcadApplication
ActiveDrawing.LockDocument()
Dim acTypValAr(0) As Autodesk.AutoCAD.DatabaseServices.TypedValue
acTypValAr.SetValue(New Autodesk.AutoCAD.DatabaseServices.TypedValue(Autodesk.AutoCAD.DatabaseServices.DxfCode.Start, "IMAGE"), 0)
Dim acSelFtr As Autodesk.AutoCAD.EditorInput.SelectionFilter = New Autodesk.AutoCAD.EditorInput.SelectionFilter(acTypValAr)
Dim ed As Autodesk.AutoCAD.EditorInput.Editor = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor
Dim acSSPrompt As Autodesk.AutoCAD.EditorInput.PromptSelectionResult
acSSPrompt = ed.SelectAll(acSelFtr)
If acSSPrompt.Status = Autodesk.AutoCAD.EditorInput.PromptStatus.OK Then
Dim acSSet As Autodesk.AutoCAD.EditorInput.SelectionSet = acSSPrompt.Value
Using Trans As Autodesk.AutoCAD.DatabaseServices.Transaction = ActiveDrawing.Database.TransactionManager.StartTransaction
For Each selObj In acSSet
Dim MyImage As Autodesk.AutoCAD.DatabaseServices.RasterImage = Trans.GetObject(selObj.ObjectId, Autodesk.AutoCAD.DatabaseServices.OpenMode.ForWrite, False, True)
Dim MyImageDef As Autodesk.AutoCAD.DatabaseServices.RasterImageDef = Trans.GetObject(MyImage.ImageDefId, Autodesk.AutoCAD.DatabaseServices.OpenMode.ForWrite, False, True)
MyImage.Name = System.IO.Path.GetFileNameWithoutExtension(SaveAsImageFile)
MyImageDef.SourceFileName = System.IO.Path.GetFileName(SaveAsImageFile)
MyImageDef.ActiveFileName = SaveAsImageFile
Next
Trans.Commit()
ACADApp.ActiveDocument.SendCommand("-IMAGE" & vbCr & "R" & vbCr & "*" & vbCr)
End Using
End If
End Sub

0 Likes