| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für NX |
Autor
|
Thema: JPG mittels Journal speichern (1951 / mal gelesen)
|
felixh1 Mitglied
Beiträge: 6 Registriert: 11.04.2017
|
erstellt am: 08. Mai. 2017 09:59 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich möchte mit folgendem Code automatisch einen Screenshot an einen bestimmten Pfad speichern. Der Code, den ich bekommen habe, fragt allerdings den Benutzer unter welchem Pfad er das Bild speichern möchte (siehe Bild im Anhang). Was muss ich ändern, damit das Bild automatisch an einem von mir festgelegten Pfad speichert? Code: Option Strict Off Imports System Imports System.IO Imports System.Windows.Forms Imports NXOpen Imports NXOpen.UF Imports NXOpen.Assemblies Imports NXOpen.Utilities Imports NXOpen.Layer Module Module1 Sub Main() Dim theSession As Session = Session.GetSession() Dim ufs As UFSession = UFSession.GetUFSession() Dim workPart As Part = theSession.Parts.Work Dim partName As String = Path.GetFileNameWithoutExtension(workPart.FullPath) 'turn triad off theSession.Preferences.ScreenVisualization.TriadVisibility = 0 'directory to output jpegs, change as needed 'Change the directory to where you would like the picture for now 'the next update will feature automatic storing into Vantage folders for that job Dim folderName As String = "C:" 'C:\xampp\htdocs\NX_schluesselanhaenger 'assign output folder to workpart folder folderName = Path.GetDirectoryName(workPart.FullPath) 'get parent folder (up a level) Dim directoryInfo As DirectoryInfo directoryInfo = Directory.GetParent(folderName) 'assign the parent folder to folderName folderName = directoryInfo.FullName Dim strPartJpg As String = "" Dim strCurrentDate As String = Format(Today, "dd.MM.y") Dim ui As UI = UI.GetUI() Dim folderBrowserDialog1 As New FolderBrowserDialog With folderBrowserDialog1 .Description = "Specify folder for screenshot output" .ShowNewFolderButton = False .RootFolder = Environment.SpecialFolder.Desktop 'use folderName as default directory .SelectedPath = folderName End With Dim result As DialogResult = folderBrowserDialog1.ShowDialog() If (result = DialogResult.OK) Then folderName = folderBrowserDialog1.SelectedPath Else 'user pressed cancel, exit the journal Exit Sub End If If Not Directory.Exists(folderName) Then MsgBox("The specified directory does not exist, journal will now exit", MsgBoxStyle.Exclamation, folderName & " not found") Exit Sub End If strPartJpg = Path.GetFileNameWithoutExtension(workPart.FullPath) & ".jpg" strPartJpg = Path.Combine(folderName, strPartJpg) ufs.Disp.CreateImage(strPartJpg, UFDisp.ImageFormat.Jpeg, UFDisp.BackgroundColor.Original) 'turn triad on theSession.Preferences.ScreenVisualization.TriadVisibility = 1 End Sub Public Function GetUnloadOption(ByVal dummy As String) As Integer 'Unloads the image when the NX session terminates GetUnloadOption = NXOpen.Session.LibraryUnloadOption.AtTermination End Function End Module Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
felixh1 Mitglied
Beiträge: 6 Registriert: 11.04.2017
|
erstellt am: 08. Mai. 2017 13:03 <-- editieren / zitieren --> Unities abgeben:
Okay, ich habe es jetzt geschafft. Allerdings bekomme ich beim Ausführen mittels run_journal.exe die Fehlermeldung, dass UI nicht definiert ist. Es handelt sich also um diese Zeile: Dim ui As UI = UI.GetUI() Weiß jemand wie ich das lösen kann? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Poseida Mitglied Maschinebautechniker, Konstrukteur
Beiträge: 94 Registriert: 15.12.2010 Moldex 3D R13 NX 10 TC 11
|
erstellt am: 08. Mai. 2017 14:45 <-- editieren / zitieren --> Unities abgeben: Nur für felixh1
|
| Senior BIM-Manager (m/w/d) für ÖPP-Projekte | VINCI Energies liefert maßgeschneiderte Komplettlösungen auf dem Gebiet der Building Solutions. Unsere Unternehmen erbringen Leistungen in den Bereichen Design & Build, technische Instandhaltung sowie Gebäudemanagement und decken somit den gesamten Lebenszyklus eines Gebäudes ab. VINCI Facilities Solutions ist Teil dieses Netzwerkes. Wir bieten unseren Kunden das komplette Dienstleistungsportfolio an, sei es für den öffentlichen Sektor (ÖPP) oder den Privatbereich.... | Anzeige ansehen | Feste Anstellung |
|
Big King Ehrenmitglied NX/Tc Admin
Beiträge: 1953 Registriert: 06.12.2010
|
erstellt am: 09. Mai. 2017 07:50 <-- editieren / zitieren --> Unities abgeben: Nur für felixh1
oder du nimmst den code: Code: 'Export a screenshot from NX with a white background 'place the image data on the Windows clipboard so you can immediately '"paste" the image to a new location (email, powerpoint, etc). 'This version will crop the image and provide a user supplied amount of "whitespace" on each side of the image. Option Strict Off Imports System Imports System.Drawing Imports System.Windows.Forms Imports NXOpen Imports NXOpen.UF Module Module2 Dim theSession As Session = Session.GetSession() Dim theUfSession As UFSession = UFSession.GetUFSession() Sub Main() If IsNothing(theSession.Parts.BaseWork) Then 'active part required Return End If Dim lw As ListingWindow = theSession.ListingWindow lw.Open() Dim tempScreenshot As String Dim tempLocation As String = IO.Path.GetTempPath tempScreenshot = IO.Path.Combine(tempLocation, "NXscreenshot.png") Try ExportScreenshot(tempScreenshot) Catch ex As Exception lw.WriteLine("Error: " & ex.Message) Return End Try 'crop the screenshot (filename, amount of whitespace on each side of image [integer value, number of pixels]) CropScreenshot(tempScreenshot, 5) 'copy image to clipboard Dim theImage As Bitmap = CType(Image.FromFile(tempScreenshot), Bitmap) Clipboard.SetImage(theImage) lw.Close() End Sub Sub ExportScreenshot(ByVal filename As String) 'save user preference for visibility of WCS, triad, view name, and view border Dim wcsVisible As Boolean = theSession.Parts.BaseDisplay.WCS.Visibility Dim triadVisible As Integer = theSession.Preferences.ScreenVisualization.TriadVisibility Dim displayModelViewNames As Boolean = theSession.Parts.BaseDisplay.Preferences.NamesBorderVisualization.ShowModelViewNames Dim displayModelViewBorders As Boolean = theSession.Parts.BaseDisplay.Preferences.NamesBorderVisualization.ShowModelViewBorders 'turn off the WCS, triad, view name, and view border theSession.Parts.BaseDisplay.WCS.Visibility = False theSession.Preferences.ScreenVisualization.TriadVisibility = 0 theSession.Parts.BaseDisplay.Preferences.NamesBorderVisualization.ShowModelViewBorders = False theSession.Parts.BaseDisplay.Preferences.NamesBorderVisualization.ShowModelViewNames = False Try theUfSession.Disp.CreateImage(filename, UFDisp.ImageFormat.Png, UFDisp.BackgroundColor.White) Catch ex As Exception MsgBox(ex.Message & ControlChars.NewLine & _ "'" & filename & "' could not be created") Throw New Exception("Screenshot could not be created") Finally 'reset visibility of WCS, triad, view name, and view border to user's preference theSession.Parts.BaseDisplay.WCS.Visibility = wcsVisible theSession.Preferences.ScreenVisualization.TriadVisibility = triadVisible theSession.Parts.BaseDisplay.Preferences.NamesBorderVisualization.ShowModelViewBorders = displayModelViewBorders theSession.Parts.BaseDisplay.Preferences.NamesBorderVisualization.ShowModelViewNames = displayModelViewNames End Try End Sub Sub CropScreenshot(ByVal theImageFile As String, ByVal borderWidth As Integer) 'borderWidth = whitespace to leave around the border of the image Dim original As New Bitmap(theImageFile) Dim JPGminX As Integer = original.Width Dim JPGminY As Integer = original.Height Dim JPGmaxX As Integer = 0 Dim JPGmaxY As Integer = 0 Dim bckgrndColor As Color = Color.White For y As Integer = 0 To original.Height - 1 For x As Integer = 0 To original.Width - 1 If original.GetPixel(x, y).ToArgb <> bckgrndColor.ToArgb Then If x < JPGminX Then JPGminX = x ElseIf x > JPGmaxX Then JPGmaxX = x End If If y < JPGminY Then JPGminY = y ElseIf y > JPGmaxY Then JPGmaxY = y End If End If Next Next Dim rect As New Rectangle(JPGminX, JPGminY, JPGmaxX - JPGminX, JPGmaxY - JPGminY) Dim cropped As Bitmap = original.Clone(rect, original.PixelFormat) 'create new image sized to add border around cropped image Dim border As New Bitmap(cropped.Width + (2 * borderWidth), cropped.Height + (2 * borderWidth), cropped.PixelFormat) 'create a new graphics object Dim g As Graphics = Graphics.FromImage(border) 'fill the graphics object with white color (for background) Using myBrush As Brush = New SolidBrush(Color.White) g.FillRectangle(myBrush, 0, 0, border.Width, border.Height) End Using 'calculate position to place cropped image onto background image Dim xImage As Integer = border.Width - cropped.Width - borderWidth Dim yImage As Integer = border.Height - cropped.Height - borderWidth 'draw cropped image onto white background g.CompositingMode = Drawing2D.CompositingMode.SourceOver g.DrawImage(cropped, New Drawing.Point(xImage, yImage)) 'dispose of unneeded graphics objects original.Dispose() cropped.Dispose() g.Dispose() 'save our finished graphics file border.Save(theImageFile, Imaging.ImageFormat.Png) End Sub Public Function GetUnloadOption(ByVal dummy As String) As Integer 'Unloads the image immediately after execution within NX GetUnloadOption = NXOpen.Session.LibraryUnloadOption.Immediately End Function End Module
------------------ “Vision without action is a daydream. Action without vision is a nightmare.” Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|