Export Drawing to .dxf File Using NX Journal

Having engineering drawings in a.dxf file provides a universal exchange format for use in various cad programs. This program is designed to take a drawing and automate it into a .dxf file using NX Journal.

 

Journal Capabilities:

  • Journal automates exporting drawings first to a .cgm files and then to .dxf files.
  • The Journal will automatically iterate through all the sheets in a drawing and convert them to .dxf files.
  • The Journal also has the ability to browse for the output folder for the .dxf file (and its related log file(s)) rather than exporting to same folder as original file.
  • The new files will be output as the form [partname]_[sheet number].dxf; for example if your part is named '12345_dwg.prt' and includes 2 drawing sheets, the output files will be '12345_dwg_1.dxf' and '12345_dwg_2.dxf respectively'.

 

Journal Requirements:

  • Journal assumes you have access to the dxf translator.
  • Native: Journal assumes the new file "blank" template is available, highly customized environments may have removed or renamed this template in which case some modifications to the code will be required.
  • Teamcenter (TC): Create a dedicated dataset and part file for dxf export use, this file will be used to hold the imported cgm data. The dxf information will be exported from this file. Any users who will run this journal must have read/write access to this file. Modify the journal line: Const tempTCDXF = ... to point to this dedicated dataset file.
 
NX Journal: Converting a Drawing into a .dxf File
 

'NXJournaling.com
'NXdwg_to_dxf.vb
' purpose: this journal automates the tried and true method of exporting a dxf file: export cgm, import cgm, export dxf
'
' Requirements: This journal will work in Teamcenter (TC) or native environments.
' TC: Create a new dataset and file (in TC) dedicated to cgm import/dxf export, this file will be reused for each dxf export.
' All users who will be running this journal must have read/write access to this file.
' Modify the line: {Const tempTCDXF = "..."} in Sub Main() to point to this new file
' native: No special requirements, but highly customized environments may conflict with some settings in the journal.
' In particular, this journal uses the 'blank' template to create a temporary dxf export file;
' if this template file has been moved or renamed, errors may occur.
'
'revised on March 7, 2013: updated cgm import to use wrapped UF function rather than .NET version, which is creating a drawing sheet
' CGM import was flaky under NX8 and NX8.5, works fine with NX7.5 and below
' reference IR 6848806
'
' Please send comments, suggestions, and/or bug reports to info@nxjournaling.com

Option Strict Off
Imports System
Imports NXOpen
Imports NXOpen.UF
Imports System.IO
Imports System.Windows.Forms

Module NXJournal

Dim theSession As Session = Session.GetSession()
Dim workPart As Part = theSession.Parts.Work
Dim displayPart As Part = theSession.Parts.Display
Dim ufs As UFSession = UFSession.GetUFSession()
Dim dxfSettingsFile As String
Dim criticalError As Boolean = False
Dim lw As ListingWindow = theSession.ListingWindow
Dim lg As LogFile = theSession.LogFile

'**********************************************************

Sub Main()

Dim dwgs As Drawings.DrawingSheetCollection
dwgs = workPart.DrawingSheets
Dim sheet As Drawings.DrawingSheet
Dim i As Integer = 0
Dim n As Integer = 0
Dim tempCGMFile As String
Dim tempNewFile As String
Dim dxfFile As String
Dim currentPath As String
Dim currentFile As String
Dim originalFile As String
Dim originalPart As Part
Dim killList() As String
Dim partUnits As Integer
Dim strOutputFolder As String
Dim rsp
Dim strRevision As String
Dim exportFile As String
lw.Open()

'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
'if running Teamcenter, change this to point to your temp import/export dataset file
Const tempTCDXF = "@DB@123/dwg2dxf@A"
'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

lg.WriteLine("~ Start of drawing to DXF journal ~")

'Get UG install directory using NXOpen API
Dim DXFDWG_DIR As String = theSession.GetEnvironmentVariableValue("DXFDWG_DIR")
dxfSettingsFile = IO.Path.Combine(DXFDWG_DIR, "dxfdwg.def")
lg.WriteLine("looking for dxf settings file: " & dxfSettingsFile)
'check if the dxfSettingsFile exists
If Not File.Exists(dxfSettingsFile) Then
'file does not exist in default directory or user specified directory
lg.WriteLine("The dxf settings file was not found in the specified location: " & dxfSettingsFile)
MsgBox("The dxf settings file (dxfdwg.def) was not found." & vbCrLf & _
"This journal will now exit.", vbOKOnly + vbCritical, "Error")
Exit Sub
End If
lg.WriteLine("DXF settings file found: " & dxfSettingsFile)

'determine if we are running under TC or native
Dim IsTcEng As Boolean = False
ufs.UF.IsUgmanagerActive(IsTcEng)
lg.WriteLine("TC running? " & IsTcEng)

originalPart = displayPart

If IsTcEng Then
lg.WriteLine("tempTCDXF: " & tempTCDXF)
currentFile = workPart.GetStringAttribute("DB_PART_NO")
strRevision = workPart.GetStringAttribute("DB_PART_REV")
originalFile = "@DB/" & currentFile & "/" & strRevision

currentFile = currentFile.Replace("/", "_")
currentFile = currentFile & "_" & strRevision

Else 'running in native mode
currentPath = Path.GetDirectoryName(workPart.FullPath)
currentFile = Path.GetFileNameWithoutExtension(workPart.FullPath)
originalFile = currentFile

Try
strRevision = workPart.GetStringAttribute("REVISION")
strRevision = Trim(strRevision)
Catch ex As NXOpen.NXException
If ex.ErrorCode = 512008 Then
lg.WriteLine("Revision attribute not found")
Else
lg.WriteLine("Error: " & ex.ErrorCode & " " & ex.GetType.ToString & " : " & ex.Message)
End If
strRevision = ""
End Try
If strRevision <> "" Then
currentFile = currentFile & "_" & strRevision
End If
End If
exportFile = currentFile

lg.WriteLine("workPart.FullPath: " & workPart.FullPath)
lg.WriteLine("currentFile: " & currentFile)
lg.WriteLine("strRevision: " & strRevision)
lg.WriteLine("originalFile: " & originalFile)
lg.WriteLine("originalPart: " & originalPart.FullPath)

partUnits = workPart.PartUnits
'0 = inch
'1 = metric

lg.WriteLine("Part units: " & workPart.PartUnits.ToString)

Dim FolderBrowserDialog1 As New FolderBrowserDialog

' Then use the following code to create the Dialog window
' Change the .SelectedPath property to the default location
With FolderBrowserDialog1
' Desktop is the root folder in the dialog.
.RootFolder = Environment.SpecialFolder.Desktop
' Select the C:\ directory on entry.
.SelectedPath = "C:\"
' Prompt the user with a custom message.
.Description = "Select the directory to export .dxf file(s)"
If .ShowDialog = DialogResult.OK Then
strOutputFolder = .SelectedPath
Else
Exit Sub
End If
End With

lg.WriteLine("Output folder: " & strOutputFolder)

For Each sheet In dwgs
i += 1

'in original file, export each drawing sheet as a .cgm file

'prepare for CGM export
tempCGMFile = Path.Combine(strOutputFolder, currentFile & "_" & i & ".cgm")
lg.WriteLine("Exporting temp CGM file: " & tempCGMFile)

If File.Exists(tempCGMFile) Then
lg.WriteLine(tempCGMFile & " already exists, deleting file before export")
Try
File.Delete(tempCGMFile)
Catch ex As UnauthorizedAccessException
lg.WriteLine("Unauthorized access exception, cannot delete file: " & tempCGMFile)
lg.WriteLine("Please check permissions on the file and folder(s) and try again")
lg.WriteLine("Drawing to DXF journal will now exit")
MsgBox("Error: cannot delete file: " & tempCGMFile, MsgBoxStyle.Critical, "Unauthorized access exception")
Exit Sub
Catch ex As ApplicationException
lg.WriteLine("Error occurred while attempting to delete file: " & tempCGMFile)
lg.WriteLine(ex.GetType.ToString & " : " & ex.Message)
MsgBox("Error occurred while attempting to delete file: " & tempCGMFile & vbCrLf & "Drawing to DXF journal will now exit", MsgBoxStyle.Critical, "Error")
End Try

End If

Try
ExportCGM(sheet, tempCGMFile, partUnits)
Catch ex As Exception
MsgBox("Error occurred in CGM export" & vbCrLf & ex.GetType.ToString & " : " & ex.Message & vbCrLf & "journal exiting", vbCritical + vbOKOnly, "Error")
lg.WriteLine("Error occurred in CGM export: " & ex.GetType.ToString & " : " & ex.Message)
Exit Sub
End Try

'import .cgm file to temporary file in preparation for .dxf export
If IsTcEng Then
Dim partLoadStatus1 As PartLoadStatus

Try
lg.WriteLine("theSession.Parts.SetNonmasterSeedPartData(" & tempTCDXF & ")")
theSession.Parts.SetNonmasterSeedPartData(tempTCDXF)

Dim basePart1 As BasePart
lg.WriteLine("Opening part: " & tempTCDXF)

basePart1 = theSession.Parts.OpenBaseDisplay(tempTCDXF, partLoadStatus1)
lg.WriteLine(tempTCDXF & " load status: " & partLoadStatus1.ToString)

Catch ex As Exception
MsgBox("An error occurred while opening the temp dxf import part" & vbCrLf & ex.GetType.ToString & " : " & ex.Message, vbCritical + vbOKOnly, "Error")
lg.WriteLine(tempTCDXF & " load status: " & partLoadStatus1.ToString)
lg.WriteLine("An error occurred while opening: " & tempTCDXF & " " & ex.GetType.ToString & " : " & ex.Message)
Exit Sub
Finally
partLoadStatus1.Dispose()
End Try

Else
'create a new file to import the CGM
tempNewFile = strOutputFolder & "\" & currentFile & "_" & i & ".prt"

lg.WriteLine("tempNewFile: " & tempNewFile)

If File.Exists(tempNewFile) Then
lg.WriteLine("tempNewFile already exists: " & tempNewFile)
rsp = MsgBox("The file: '" & tempNewFile & "' already exists; overwrite?", vbYesNo + vbQuestion, "File exists")
If rsp = vbYes Then
lg.WriteLine("user has chosen to overwrite: " & tempNewFile)
Try
lg.WriteLine("attempting to delete: " & tempNewFile)
File.Delete(tempNewFile)
Catch ex As UnauthorizedAccessException
lg.WriteLine("Unauthorized access exception, check permissions on: " & tempNewFile & " and try again")
MsgBox("Unable to delete file: " & tempNewFile & vbCrLf & "Drawing to DXF journal will now exit", MsgBoxStyle.Critical, "Unauthorized Access Exception")
Exit Sub
Catch ex As ApplicationException
lg.WriteLine("An exception occurred while attempting to delete file: " & tempNewFile)
lg.WriteLine(ex.GetType.ToString & " : " & ex.Message)
lg.WriteLine("Drawing to DXF journal will now exit")
MsgBox("An exception occurred while attempting to delete file: " & tempNewFile & vbCrLf & "Drawing to DXF journal will now exit", MsgBoxStyle.Critical, "Error")
Exit Sub
End Try

Else
lg.WriteLine("User chose not to overwrite the existing file: " & tempNewFile)
lg.WriteLine("Drawing to DXF journal will now exit")
MsgBox("journal exiting", vbOKOnly, "Export cancelled")
Exit Sub
End If
End If
Try
lg.WriteLine("Attempting to create temporary cgm import file: " & tempNewFile)
NewFile(tempNewFile, partUnits)
Catch ex As Exception
lg.WriteLine("Error in temporary cgm import file creation: " & tempNewFile)
lg.WriteLine(ex.GetType.ToString & " : " & ex.Message)
lg.WriteLine("Drawing to DXF journal will now exit")
MsgBox("Error occurred in new file creation" & vbCrLf & ex.Message & vbCrLf & "journal exiting", vbCritical + vbOKOnly, "Error")
Exit Sub
End Try

End If

'now in temporary dxf import file

workPart = theSession.Parts.Work
displayPart = theSession.Parts.Display
lg.WriteLine("work part: " & theSession.Parts.Work.FullPath)

'turn off the display of the drawing sheet, some users report errors if the sheet is displayed when the view is replaced
'1 = Modeling view
'2 = Drawing view
ufs.Draw.SetDisplayState(1)
'replace view to "TOP" before importing the CGM
'this gives better results with fixed view drawing viewers such as edrawings
Dim layout1 As Layout = CType(theSession.Parts.Work.Layouts.Current, Layout)
lg.WriteLine("current layout: " & layout1.Name)
Dim modelingView1 As ModelingView = CType(theSession.Parts.Work.ModelingViews.FindObject("TOP"), ModelingView)
lg.WriteLine("modelingView1: " & modelingView1.Name)
layout1.ReplaceView(theSession.Parts.Work.ModelingViews.WorkView, modelingView1, True)

'Call the ImportCGM subroutine
workPart.Layers.WorkLayer = 1
lg.WriteLine("Calling the ImportCGM(" & tempCGMFile & ")")
ImportCGM(tempCGMFile)
lg.WriteLine("Saving temporary cgm import file: " & tempCGMFile)
workPart.Save(BasePart.SaveComponents.False, BasePart.CloseAfterSave.False)

If IsTcEng Then
ReDim Preserve killList(i)
killList(i) = tempCGMFile
lg.WriteLine("Adding file to kill list: " & tempCGMFile)
Else
'add the temp files to the kill list
ReDim Preserve killList(i * 2)
killList(i * 2 - 1) = tempCGMFile
killList(i * 2) = tempNewFile
lg.WriteLine("Adding file to kill list: " & tempCGMFile)
lg.WriteLine("Adding file to kill list: " & tempNewFile)

End If

dxfFile = Path.Combine(strOutputFolder, currentFile & "_" & i & ".dxf")
lg.WriteLine("DXF file: " & dxfFile)

If File.Exists(dxfFile) Then
rsp = MsgBox("The file: '" & dxfFile & "' already exists; overwrite?", vbYesNo + vbQuestion, "File exists")
lg.WriteLine("The specified DXF output file already exists")
If rsp = vbYes Then
lg.WriteLine("user has chosen to overwrite the existing DXF file")
Try
File.Delete(dxfFile)
Catch ex As UnauthorizedAccessException
lg.WriteLine("Unauthorized access exception, cannot delete file: " & dxfFile)
lg.WriteLine("Please check permissions on the file and folder(s) and try again")
lg.WriteLine("Drawing to DXF journal will now exit")
MsgBox("Error: cannot delete file: " & dxfFile & vbCrLf & "Please check permissions on the file and try again", MsgBoxStyle.Critical, "Unauthorized access exception")
Exit Sub
Catch ex As ApplicationException
lg.WriteLine("Error occurred while attempting to delete file: " & dxfFile)
lg.WriteLine(ex.GetType.ToString & " : " & ex.Message)
MsgBox("Error occurred while attempting to delete file: " & dxfFile & vbCrLf & "Drawing to DXF journal will now exit", MsgBoxStyle.Critical, "Error")
End Try
Else
lg.WriteLine("user chose not to overwrite existing DXF file")
lg.WriteLine("Drawing to DXF journal will now exit")
MsgBox("Journal will now exit", MsgBoxStyle.Exclamation, "Export cancelled")
Exit Sub
End If
End If

Try
'Call ExportDXF subroutine
lg.WriteLine("Calling export DXF routine")
If IsTcEng Then
lg.WriteLine("ExportDXF(" & tempTCDXF & ", " & dxfFile & ")")
ExportDXF(tempTCDXF, dxfFile)
Else
lg.WriteLine("ExportDXF(" & tempNewFile & ", " & dxfFile & ")")
ExportDXF(tempNewFile, dxfFile)
End If

lg.WriteLine("Waiting on creation of DXF file...")
While Not File.Exists(dxfFile)
Application.DoEvents()
End While
lg.WriteLine("DXF file created: " & dxfFile)

Catch ex As Exception
MsgBox("Error occurred in DXF export" & vbCrLf & ex.Message & vbCrLf & "journal exiting", vbCritical + vbOKOnly, "Error")
lg.WriteLine("Error in DXF export: " & ex.GetType.ToString & " : " & ex.Message)
lg.WriteLine("Drawing to DXF journal will now exit")
Exit Sub
Finally
lg.WriteLine("deleting temporary objects from: " & workPart.FullPath)
Dim markId1 As Session.UndoMarkId
markId1 = theSession.SetUndoMark(Session.MarkVisibility.Invisible, "Start")
'delete all imported objects (all objects on layer 1)
Dim importEntities() As NXObject
importEntities = workPart.Layers.GetAllObjectsOnLayer(1)
Dim nErrs1 As Integer
nErrs1 = theSession.UpdateManager.AddToDeleteList(importEntities)
Dim nErrs2 As Integer
nErrs2 = theSession.UpdateManager.DoUpdate(markId1)
'close the temporary DXF file
lg.WriteLine("Closing the temporary dxf file")
workPart.Save(BasePart.SaveComponents.False, BasePart.CloseAfterSave.True)
End Try

'make the original part the displayed part
Dim partLoadStatus2 As PartLoadStatus
Dim status1 As PartCollection.SdpsStatus
status1 = theSession.Parts.SetDisplay(originalPart, False, True, partLoadStatus2)
lg.WriteLine("make original part the displayed part")
lg.WriteLine("status1: " & status1.ToString)
workPart = theSession.Parts.Work
displayPart = theSession.Parts.Display
partLoadStatus2.Dispose()
lg.WriteLine("current display part: " & displayPart.FullPath)

Next

If i = 0 Then
lg.WriteLine("This part has no drawing sheets to export")
MsgBox("This part has no drawing sheets to export", MsgBoxStyle.Exclamation, "Huh?")
Else
'cleanup temp files
lg.WriteLine("Cleaning up temporary files")
Dim j As Integer
j = 1
If IsTcEng Then
For j = 1 To i
File.Delete(killList(j))
lg.WriteLine("File deleted: " & killList(j))
Next
Else
For j = 1 To i * 2
File.Delete(killList(j))
lg.WriteLine("File deleted: " & killList(j))
Next

End If
MsgBox("Exported: " & i & " sheets as dxf files", vbOKOnly + vbInformation, "Success!")
lg.WriteLine("Exported: " & i & " sheets as dxf files")
End If

lg.WriteLine("~ End of drawing to DXF export journal ~")

lw.Close()

End Sub

'**********************************************************
Sub ExportCGM(ByVal dwg As Drawings.DrawingSheet, ByVal outputFile As String, ByVal units As Integer)

Dim filenames1(0) As String
Dim objCGM As CGMBuilder
objCGM = theSession.Parts.Work.PlotManager.CreateCgmBuilder()

objCGM.Action = CGMBuilder.ActionOption.FileBrowser

objCGM.OutputText = CGMBuilder.OutputTextOption.Polylines
If units = 0 Then
objCGM.Units = CGMBuilder.UnitsOption.English
Else
objCGM.Units = CGMBuilder.UnitsOption.Metric
End If
objCGM.XDimension = dwg.Height
objCGM.YDimension = dwg.Length
objCGM.VdcCoordinates = CGMBuilder.Vdc.Real
objCGM.RasterImages = True

Dim sheets1(0) As NXObject
sheets1(0) = dwg
objCGM.SourceBuilder.SetSheets(sheets1)

filenames1(0) = outputFile
objCGM.SetFilenames(filenames1)

Try
Dim nXObject1 As NXObject
nXObject1 = objCGM.Commit()
Catch ex As Exception
lg.WriteLine("Error in ExportCGM subroutine: " & ex.GetType.ToString & " : " & ex.Message)
Finally
objCGM.Destroy()
End Try

End Sub

'**********************************************************
Sub ExportDXF(ByVal inputFile As String, ByVal outputFile As String)

Dim dxfdwgCreator1 As DxfdwgCreator
dxfdwgCreator1 = theSession.DexManager.CreateDxfdwgCreator()
dxfdwgCreator1.SettingsFile = dxfSettingsFile
dxfdwgCreator1.InputFile = inputFile
dxfdwgCreator1.OutputFile = outputFile
dxfdwgCreator1.FileSaveFlag = False
dxfdwgCreator1.ObjectTypes.Curves = True
dxfdwgCreator1.ObjectTypes.Annotations = True
dxfdwgCreator1.ObjectTypes.Structures = True
'next line controls dxf file version
dxfdwgCreator1.AutoCADRevision = DxfdwgCreator.AutoCADRevisionOptions.R2004
dxfdwgCreator1.FlattenAssembly = False
dxfdwgCreator1.ViewEditMode = True
dxfdwgCreator1.LayerMask = "1-256"
dxfdwgCreator1.DrawingList = ""
dxfdwgCreator1.ViewList = "TOP,FRONT,RIGHT,BACK,BOTTOM,LEFT,TFR-ISO,TFR-TRI"
'dxfdwgCreator1.SetUserCredential("", "", "")

Try
Dim nXObject1 As NXObject
nXObject1 = dxfdwgCreator1.Commit()
Catch ex As Exception
MsgBox("Error in DXF export subroutine" & vbCrLf & ex.GetType.ToString & " : " & ex.Message, MsgBoxStyle.Critical + MsgBoxStyle.OkOnly, "DXF export error")
lg.WriteLine("Error in ExportDXF subroutine: " & ex.GetType.ToString & " : " & ex.Message)
Finally
dxfdwgCreator1.Destroy()
End Try

End Sub

'**********************************************************
Sub NewFile(ByVal fullpath As String, ByVal units As Integer)

Dim fileNew1 As FileNew
fileNew1 = theSession.Parts.FileNew()

'fileNew1.TemplateFileName = "Blank"
fileNew1.Application = FileNewApplication.Gateway
If units = 0 Then
fileNew1.Units = Part.Units.Inches
Else
fileNew1.Units = Part.Units.Millimeters
End If
fileNew1.NewFileName = fullpath
'fileNew1.MasterFileName = ""
fileNew1.UseBlankTemplate = True
fileNew1.MakeDisplayedPart = True

Try
Dim nXObject2 As NXObject
nXObject2 = fileNew1.Commit()
Catch ex As Exception
lg.WriteLine("Error in NewFile subroutine: " & ex.GetType.ToString & " : " & ex.Message)
Finally
workPart = theSession.Parts.Work
displayPart = theSession.Parts.Display
fileNew1.Destroy()
End Try

End Sub

'**********************************************************
Sub ImportCGM(ByVal cgmFile As String)

' The .NET function for cgm import changed in NX8
' reference IR 6848806
'
' Dim importer1 As Importer
' importer1 = theSession.Parts.Work.ImportManager.CreateCgmImporter()
' importer1.FileName = cgmFile
' Try
' Dim nXObject3 As NXObject
' nXObject3 = importer1.Commit()
' Catch ex As Exception
' lg.WriteLine("Error in ImportCGM subroutine: " & ex.GetType.ToString & ex.Message)
' Finally
' importer1.Destroy()
' End Try

Dim import_options As UFCgm.ImportOptions
ufs.Cgm.InitImportOptions(import_options)
import_options.allow_new_drawing = false
Try
ufs.Cgm.ImportCgm(cgmFile, import_options )
Catch ex As Exception
lg.WriteLine("Error in ImportCGM subroutine: " & ex.GetType.ToString & ex.Message)
End Try

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

Comments

Hi,
is it possible to export only a one sheet according to the sheet name?

Yes
You will have to modify the code. Instead of iterating through the sheet collection and passing each on to the export routines, iterate until you find the sheet with the name of interest and only pass that one to the export routines.

Hello
Is it possible to create a Loop to run the journal through all drawings on a folder.
Thanks,
 
 

I am trying to use Drawing to DXF and it is locking up after the cgm is imported into the dwg2dxf part file. I see in the code lines of text being written to a log file. I can't seem to find where the file is located to view it. Is it a text file?

Thanks,
Seal Artist

I forgot to add. I only have the locking up problem with Team Center. It works fine with Native.

Thanks,
Seal Artist

In the NX menu, go to Help -> Log file.

The journal doesn't work with my system. It makes the cgm, then it freeze.
I work with an third party PLM System. So it's not possible to make the new Part this way.
How can I write the path of a template part in the journal?

I would suggest that you record a journal while creating a new part in your system. If the returned code successfully creates a new part on replay, you can replace the "new part" code in the DXF journal with your own.

Is it necessary to first convert it to CGM and export it to DXF. Will directly converting to DXF using NXOpen.DxfdwgCreator will cause any problem? Please let me know. I have tried to export MBD views in the display part to DXF and i did not find any issue...

The short answer is, no, you probably don't need to convert to CGM first any longer.

In the days when it was still known as UG, converting to CGM first was the only way to get consistent output with the DXF translator. Improvements were made with each release but DXF export was still spotty until around NX 8, IIRC. This is an older journal of mine and should probably be updated to use the latest methods.

Also my tool is not working in teamcenter environment,

I have tried changing input file to

dxfdwgCreator1.InputFile="@DB/"+displayPart.Leaf;

The export window is running, but there is no DXF files created in the desired location...Please clarify.

"The export window is running, but there is no DXF files created in the desired location."

Are you exporting to the file system (outside of TC) or to somewhere inside of TC? Do you have write permission on the target location?

Thanks for the response. It is working fine now..

I made a mistake in not converting the "/" in TC name to "_" before. So the windows did not recognize the output file.

string newfilename;
if (displayPart.Leaf.Contains("/") == true)
{

newfilename = displayPart.Leaf.Replace("/", "_");
lw.WriteLine("name replaced");

}
else
{

newfilename = displayPart.Leaf;

}

//lw.WriteLine("new filename is "+newfilename);

dxfdwgCreator1.OutputFileType = NXOpen.DxfdwgCreator.OutputFileTypeOption.Dxf;
dxfdwgCreator1.OutputFile = location + "\\" + newfilename + "_" + view.Name + ".dxf";

Can this journal be modified to export splines as 2D polylines?

The exporter object does have a .ExportSplinesAs option that looks promising. I ran a quick test, but I'm not sure it is going to output what you are looking for. To try it out yourself, add the following line in the ExportDXF subroutine before the call to .Commit.

dxfdwgCreator1.ExportSplinesAs = DxfdwgCreator.ExportSplinesAsOptions.Polyline2D

That is it, thanks so much!

So I find all the drawing files to be bigger with the 2D polylines, what controls all drawing sheets being exported? Could it be set to only current sheet?

In Sub Main, there is a loop that iterates through all the drawing sheets:

For Each sheet In dwgs
...

You can comment out the loop statements and just pass in the current drawing sheet, if that is what you want.

I should also reiterate one of my recent comments:
http://www.nxjournaling.com/comment/5304#comment-5304
This journal uses a method that would get consistent DXF output from UG/NX before the translators were improved. If you are using a recent version of NX, I'd suggest using a straight DXF translation and skipping the CGM export/import step.

Thank you!

Hi,
Amazing Journal which works good and time saving.
Thank you
I have a doubt
Hope to get an idea !
Can i get a VB code to select displayed curves from handpicked sketch in a part file in order to avoid "SELECTION STICKINESS"(Instead to reading individual arcs\lines)

Thanks in advance
Regards,
Nagaraj

Nagaraj Deshpande

Do you want to process all the geometry in a given sketch? If so, you can use the sketch object's .GetAllGeometry method to return all the points and curves in the sketch

Do you want the user to interactively select curves? If so, the following 2 articles show how to add a selection routine to your journal.

http://nxjournaling.com/content/adding-interactive-selection-routine-usi...

http://nxjournaling.com/content/using-mask-triples-selectobject-routine

If the above does not cover what you would like to do, please post some more detail of your desired workflow.

What needs to be commented out besides:
'For Each sheet In dwgs
'…
to get only the current sheet? Thank you.

The easy way to get what you want is to leave the For loop there, but change it as below:

For Each sheet In {theSession.Parts.Work.DrawingSheets.CurrentDrawingSheet}

The curly braces will convert the current drawing sheet into an array (an array that contains a single object), so the For loop will only run once.

Maybe one of these days I'll refactor and clean up that old code...

Thanks so much, that is much easier and it works great.

Has this journal been updated or does it need to be updated to run in NX2008?

It seems to hang up after the CGM export, works if part has not been saved but deletes all on sheet.

I opened a small drawing in NX 2019 and ran the journal. It completed successfully, but it took longer than expected, the resulting DXF file size was larger than expected, and some of the line widths in the DXF were wider than I expected. I'll need to check the code to make sure it is not using deprecated functions. Some updating will probably be necessary.

However, this code was written at a time when it was very difficult to get a clean DXF out of NX. The export DWG/DXF tools in NX have been improved since then; this journal might not be necessary. Please try the NX export tools.

We use the DXF files we kick out of NX for programming such things as laser artwork on the parts and unfortunately the DXF tools in NX will not let you export the text as polylines but only as text. The laser software programming works best with text as polylines not as a line of text. I have submitted an ER request to Siemens to ask for the DXF out to have an option like CGM out where you can select if you want the text as as text or polylines.