hexagon logo

Export generic .txt not showing all dimensions. PC-DMIS 2022.1

Hi, im using PC-DMIS 2022.1 SP4. Generating generic txt file with dimensions only shows simple dimensions like distances. Dimensions like positions, that have from with it are not showed when i export them with export -> generic -> txt. Why ?

  • Generic exports only support legacy dimensions, geometric tolerance commands do not support any type of plain-text output.

  • Hi Neil. This doesn't seem to be right. In reporting option there is Output -> Report and statistics -> There i can choose Both or Stats.
    Exporting .txt by generic option was working fine with PC-DMIS 2017 R1 that we also use. In newer version the same option of raporting and exporting seems to not work correctly. 

  • in 2017 R1 you did not have GeoTolerance commands, so all your reporting was as Neil said above in "Legacy". Where starting in 2020.2 they introduced GeoTol. Seeing as you have 2022.1, you have GeoTolerance now. There are ways to export the dimensions you seek with scripts and possibly other methods.

    Or you can simply go to Insert > DImension > Legacy dimensions to report the way you used to for GD&T

  • In 2017 there is XactMeasure GD&T, different option then legacy dimensions and still it was working well with exporting generic. No idea why they had to delete this in newer versions, just stupid.

    Either way. Thanks for response

  • Textual reporting / textual exports of XactMeasure commands were not fully supported either - they only exported the first feature of the first segment.  This means that is you had position of a pattern of holes or if you had a composite position or profile dimension, there would be data missing.

  • I ran into this issue as well whenever we upgraded to 2023 from 2017. Workaround I started using is create a generic feature to pull in the GD&T values from the Geotol callout. Example

     

               MOVE/CLEARPLANE
    PLANE1       =FEAT/CONTACT/PLANE/DEFAULT,POLAR,NONE,LEAST_SQR
                  THEO/<0,0,-0.0547>,<0,0,1>
                  ACTL/<0,0,-0.0547>,<0,0,1>
                  TARG/<0,0,-0.0547>,<0,0,1>
                  ANGLE VEC=<0.309017,-0.9510565,0>,RADIAL
                  SHOW FEATURE PARAMETERS=NO
                  SHOW CONTACT PARAMETERS=YES
                    NUMHITS=8,NUMRINGS=1
                    SPACER=5.668
                    AVOIDANCE MOVE=NO
                  SHOW HITS=NO
    FLAT1        =GEOMETRIC_TOLERANCE/STANDARD=ASME Y14.5,SHOWEXPANDED=YES,
                  DESCRIPTION=OFF,,
                  UNITS=IN,OUTPUT=BOTH,ARROWDENSITY=100,
                  SEGMENT_1,FLATNESS,0.0004,TOL_ZONE_MATH=DEFAULT,
                  TEXT=OFF,CADGRAPH=OFF,REPORTGRAPH=OFF,MULT=10,
                    MEASURED:
                      PLANE1:0.0000,
                  ADD
                  FEATURES/PLANE1,,
    F1           =GENERIC/POINT,DEPENDENT,CARTESIAN,$
                  NOM/XYZ,<0,0,0>,$
                  MEAS/XYZ,<FLAT1.MEAS,0,0>,$
                  NOM/IJK,<0,0,1>,$
                  MEAS/IJK,<0,0,1>
      DIM LOC1= LOCATION OF POINT F1  UNITS=IN ,$
      GRAPH=OFF  TEXT=OFF  MULT=10.00  OUTPUT=STATS  HALF ANGLE=NO
      AX       MEAS    NOMINAL       +TOL       -TOL        DEV     OUTTOL
      X       0.0000     0.0000     0.0004     0.0000     0.0000     0.0000 #---
      END OF DIMENSION LOC1

  • You can use something like this for reporting.

    Sub Main()
      ' writes Dimension-data To excel sheet
      ' the excel sheet must be saved manually
      ' SCRIPT IS Not 100% COMPLETE. MODIFIED ONLY WHAT WAS NEEDED #####################################################
      ' Dim Something
        Dim pcDMISApp As Object
        Set pcDMISApp = CreateObject("PCDLRN.Application")
        Dim pcDMISPart As Object
        Set pcDMISPart = pcDMISApp.ActivePartProgram
        Dim pcDMISCmds As Object
        Set pcDMISCmds = pcDMISPart.Commands
        Dim pcDMISCmd As Object
        Dim pcDMISDIMCmd As Object
      
        Dim objExcel As Object
        Dim objNewBook As Object
        
        Set objExcel = CreateObject("Excel.Application")
        Set objNewBook = objExcel.Workbooks.Add
        
        Dim sPath, sTemp, sTemp2 As String
        Dim iRowCount, iIndex, iType As Integer
        Dim dMeas, dTol, dMin, dMax, dDev, dNominal As Double
    
      ' Write excel heading
        objExcel.ScreenUpdating = False
        objNewBook.Sheets(1).Cells(1, 1).Value = "ID"
        objNewBook.Sheets(1).Cells(1, 2).Value = "Ref"
        objNewBook.Sheets(1).Cells(1, 3).Value = "AxisLetter"
        objNewBook.Sheets(1).Cells(1, 4).Value = "Nominal"    
        objNewBook.Sheets(1).Cells(1, 5).Value = "Measured"
        objNewBook.Sheets(1).Cells(1, 6).Value = "Plus"
        objNewBook.Sheets(1).Cells(1, 7).Value = "Minus"
        objNewBook.Sheets(1).Cells(1, 8).Value = "OutTol"
        objNewBook.Sheets(1).Cells(1, 9).Value = "Length"
        objNewBook.Sheets(1).Cells(1, 10).Value = "Deviation"
        objNewBook.Sheets(1).Cells(1, 11).Value = "Max"
        objNewBook.Sheets(1).Cells(1, 12).Value = "Min"
        objNewBook.Sheets(1).Cells(1, 13).Value = "X Geo Pos"
        objNewBook.Sheets(1).Cells(1, 14).Value = "Y Geo Pos"
        objNewBook.Sheets(1).Cells(1, 15).Value = "Z Geo Pos"
        objNewBook.Sheets(1).Cells(1, 16).Value = "Bonus"
        objNewBook.Sheets(1).Cells(1, 17).Value = "Units"
        objNewBook.Sheets(1).Cells(1, 18).Value = "Standard"
    
        objNewBook.Sheets(1).Range("C2:S500").NumberFormat = "0.0000"
        objNewBook.Sheets(1).Columns.ColumnWidth = 10
    
      ' search pcDMIS For Dimension command
        iRowCount = 2
        For Each pcDMISCmd In pcDMISCmds
          ' ### Get Command Type ###################################################
            iType = -1
            If (pcDMISCmd.IsDimension) Then iType = 1
            If (pcDMISCmd.Type = FEATURE_CONTROL_FRAME) Then iType = 2
            If (pcDMISCmd.Type = ISO_TOLERANCE_COMMAND) Or (pcDMISCmd.Type = ASME_TOLERANCE_COMMAND) Then iType = 3
            If (pcDMISCmd.Type = ISO_SIZE_COMMAND) Or (pcDMISCmd.Type = ASME_SIZE_COMMAND) Then iType = 4
            If iType = -1 Then GoTo nextLoopIndex
          
          ' ### Select Type ###################################################
            Select Case iType
              Case 1 'Dimension
                  If pcDMISCmd.Type = DATDEF_COMMAND Then GoTo nextLoopIndex
                  If pcDMISCmd.GetText(ID, 0) <> "" Then
                    If (pcDMISCmd.GetText(REF_ID, 2) <> pcDMISCmd.GetText(REF_ID, 1)) Then
                      sTemp = pcDMISCmd.GetText(ID, 0)
                      sTemp2 = pcDMISCmd.GetText(REF_ID, 1) + "; " + pcDMISCmd.GetText(REF_ID, 2)
                    Else
                      sTemp = pcDMISCmd.GetText(ID, 0)
                      sTemp2 = pcDMISCmd.GetText(REF_ID, 0)
                    End If
                  End If
    
                  If pcDMISCmd.Type = DIMENSION_START_LOCATION Then GoTo nextLoopIndex
                  If pcDMISCmd.Type = DIMENSION_END_LOCATION Then GoTo nextLoopIndex
                  If pcDMISCmd.Type = DIMENSION_START_LOCATION Then
                    sTemp = pcDMISCmd.GetText(ID, 0)
                    sTemp2 = pcDMISCmd.GetText(REF_ID, 0)
                    GoTo nextLoopIndex
                  End If
                  
                ' Get DimensionCommand
                  Set pcDMISDIMCmd = pcDMISCmd.DimensionCommand
              
                ' Write DimensionCommand data To Excel
                  objNewBook.Sheets(1).Cells(iRowCount, 1).Value = sTemp 'ID
                  objNewBook.Sheets(1).Cells(iRowCount, 2).Value = sTemp2 'ref-Feature ID
                  objNewBook.Sheets(1).Cells(iRowCount, 3).Value = pcDMISDIMCmd.AxisLetter
                  objNewBook.Sheets(1).Cells(iRowCount, 4).Value = pcDMISDIMCmd.Nominal
                  objNewBook.Sheets(1).Cells(iRowCount, 5).Value = pcDMISDIMCmd.Measured
                  objNewBook.Sheets(1).Cells(iRowCount, 6).Value = pcDMISDIMCmd.Plus
                  objNewBook.Sheets(1).Cells(iRowCount, 7).Value = pcDMISDIMCmd.Minus
                  objNewBook.Sheets(1).Cells(iRowCount, 8).Value = pcDMISDIMCmd.OutTol
                  objNewBook.Sheets(1).Cells(iRowCount, 9).Value = pcDMISDIMCmd.Length
                  objNewBook.Sheets(1).Cells(iRowCount, 10).Value = pcDMISDIMCmd.Deviation
                  objNewBook.Sheets(1).Cells(iRowCount, 11).Value = pcDMISDIMCmd.Max
                  objNewBook.Sheets(1).Cells(iRowCount, 12).Value = pcDMISDIMCmd.Min
                  objNewBook.Sheets(1).Cells(iRowCount, 16).Value = pcDMISDIMCmd.Bonus
                  If pcDMISDIMCmd.Units = 1 Then
                    objNewBook.Sheets(1).Cells(iRowCount, 17).Value = "MM"
                  Else
                    objNewBook.Sheets(1).Cells(iRowCount, 17).Value = "INCH"
                  End If
                  objNewBook.Sheets(1).Cells(iRowCount, 18).Value = ""
                  
                ' new Excel row
                  iRowCount = iRowCount + 1
                  
              Case 2 'FCF
                ' Write ExMeas-Command data To Excel
                  iIndex = 1
                  sTemp = pcDMISCmd.GetText(LINE2_FEATNAME, iIndex)
                  Do While sTemp <> ""
                
                    dMeas = pcDMISCmd.GetText(LINE2_MEAS, iIndex)
                    dDev = pcDMISCmd.GetText(LINE2_DEV, iIndex)
                    dNominal = pcDMISCmd.GetText(LINE2_NOMINAL, iIndex)
                    dMax = pcDMISCmd.GetText(LINE2_MAX, iIndex)
                    dMin = pcDMISCmd.GetText(LINE2_MIN, iIndex)
    
    
    
                    objNewBook.Sheets(1).Cells(iRowCount, 1).Value = pcDMISCmd.ID
                    objNewBook.Sheets(1).Cells(iRowCount, 2).Value = sTemp
                    objNewBook.Sheets(1).Cells(iRowCount, 3).Value = "FCF"  'AxisLetter
                    objNewBook.Sheets(1).Cells(iRowCount, 4).Value = dNominal 'Nominal
                    objNewBook.Sheets(1).Cells(iRowCount, 5).Value = dMeas 'Measured
                    objNewBook.Sheets(1).Cells(iRowCount, 6).Value = pcDMISCmd.GetText(LINE2_PLUSTOL, iIndex)   'Plus
                    objNewBook.Sheets(1).Cells(iRowCount, 7).Value = pcDMISCmd.GetText(LINE2_MINUSTOL, iIndex)  'Minus
                    objNewBook.Sheets(1).Cells(iRowCount, 8).Value = pcDMISCmd.GetText(LINE2_OUTTOL, iIndex)  'OutTol
                    objNewBook.Sheets(1).Cells(iRowCount, 9).Value = pcDMISCmd.GetText(MEAS_LENGTH, iIndex)   'Length
                    objNewBook.Sheets(1).Cells(iRowCount, 10).Value = dDev 'Deviation
                    objNewBook.Sheets(1).Cells(iRowCount, 11).Value = dMax'Max
                    objNewBook.Sheets(1).Cells(iRowCount, 12).Value = dMin 'Min                
                    objNewBook.Sheets(1).Cells(iRowCount, 13).Value = pcDMISCmd.GetText(LINE2_MEAS_X, iIndex)  'X VALUE                
    	    objNewBook.Sheets(1).Cells(iRowCount, 14).Value = pcDMISCmd.GetText(LINE2_MEAS_Y, iIndex)  'Y VALUE                
                    objNewBook.Sheets(1).Cells(iRowCount, 15).Value = pcDMISCmd.GetText(LINE2_MEAS_Z, iIndex)  'Z VALUE
                    objNewBook.Sheets(1).Cells(iRowCount, 16).Value = pcDMISCmd.GetText(LINE2_BONUS, iIndex)  'Bonus
                    objNewBook.Sheets(1).Cells(iRowCount, 17).Value = pcDMISCmd.GetText(UNIT_TYPE, 0)  'Units
                    objNewBook.Sheets(1).Cells(iRowCount, 18).Value = pcDMISCmd.GetText(STANDARD, 0)
                    objNewBook.Sheets(1).Cells(iRowCount, 19).Value = pcDMISCmd.GetText(THEO_X, iIndex)  'Theoretical X VALUE
                    objNewBook.Sheets(1).Cells(iRowCount, 20).Value = pcDMISCmd.GetText(THEO_Y, iIndex)  'Theoretical Y VALUE
                    objNewBook.Sheets(1).Cells(iRowCount, 21).Value = pcDMISCmd.GetText(THEO_Z, iIndex)  'Theoretical Z VALUE
                    
              
                  ' new GeoTol Row
                    iIndex = iIndex + 1
                    sTemp = pcDMISCmd.GetText(LINE2_FEATNAME, iIndex)
                    
                  ' new Excel row
                    iRowCount = iRowCount + 1
                  Loop
                  
              Case 3 'GEO
                ' Write GeoTol-Command data To Excel
                  iIndex = 1
                  sTemp = pcDMISCmd.GetText(REF_ID, iIndex)
                  Do While sTemp <> ""
                    objNewBook.Sheets(1).Cells(iRowCount, 1).Value = pcDMISCmd.ID
                    objNewBook.Sheets(1).Cells(iRowCount, 2).Value = sTemp
                    objNewBook.Sheets(1).Cells(iRowCount, 3).Value = "GEO"  'AxisLetter
              
                    dTol = pcDMISCmd.GetText(FORM_TOLERANCE, 1)
                    dMeas = pcDMISCmd.GetTextEx(DIM_DEVIATION, iIndex, "SEG=1")
    
                    objNewBook.Sheets(1).Cells(iRowCount, 4).Value = pcDMISCmd.GetTextEx(NOMINAL, iIndex, "SEG=1")    'Nominal
                    objNewBook.Sheets(1).Cells(iRowCount, 5).Value = pcDMISCmd.GetTextEx(DIM_MEAS, iIndex, "SEG=1")  'Measured
                    objNewBook.Sheets(1).Cells(iRowCount, 6).Value = pcDMISCmd.GetTextEx(F_PLUS_TOL, iIndex, "SEG=1") 'Plus
                    objNewBook.Sheets(1).Cells(iRowCount, 7).Value = pcDMISCmd.GetTextEx(F_MINUS_TOL, iIndex, "SEG=1")  'Minus
                    If dMeas > dTol Then
                      objNewBook.Sheets(1).Cells(iRowCount, 8).Value = dTol - dMeas  'OutTol
                    Else
                      objNewBook.Sheets(1).Cells(iRowCount, 8).Value = 0  'OutTol
                    End If
                    objNewBook.Sheets(1).Cells(iRowCount, 9).Value = 0   'Length
                    objNewBook.Sheets(1).Cells(iRowCount, 10).Value = pcDMISCmd.GetTextEx(DIM_DEVIATION, iIndex, "SEG=1")  'Deviation
                    objNewBook.Sheets(1).Cells(iRowCount, 11).Value = pcDMISCmd.GetTextEx(DIM_MAX, iIndex, "SEG=1")  'Max
                    objNewBook.Sheets(1).Cells(iRowCount, 12).Value = pcDMISCmd.GetTextEx(DIM_MIN, iIndex, "SEG=1")  'Min
                    objNewBook.Sheets(1).Cells(iRowCount, 13).Value = pcDMISCmd.GetTextEx(MEAS_X, iIndex, "SEG=1")  'X VALUE
    	    objNewBook.Sheets(1).Cells(iRowCount, 14).Value = pcDMISCmd.GetTextEx(MEAS_Y, iIndex, "SEG=1")  'Y VALUE
                    objNewBook.Sheets(1).Cells(iRowCount, 15).Value = pcDMISCmd.GetTextEx(MEAS_Y, iIndex, "SEG=1")  'Z VALUE
                    objNewBook.Sheets(1).Cells(iRowCount, 16).Value = pcDMISCmd.GetTextEx(DIM_BONUS, iIndex, "SEG=1")  'Bonus
                    objNewBook.Sheets(1).Cells(iRowCount, 17).Value = pcDMISCmd.GetText(UNIT_TYPE, 0)   'Units
                    objNewBook.Sheets(1).Cells(iRowCount, 18).Value = pcDMISCmd.GetText(STANDARD, 0)   'STANDARD
              
                  ' new GeoTol Row
                    iIndex = iIndex + 1
                    sTemp = pcDMISCmd.GetText(REF_ID, iIndex)
                    
                  ' new Excel row
                    iRowCount = iRowCount + 1
                  Loop
                  
              Case 4 'Size
                ' Write ToleranceCommand data To Excel
                  objNewBook.Sheets(1).Cells(iRowCount, 1).Value = pcDMISCmd.GetText(ID, 0)
                  objNewBook.Sheets(1).Cells(iRowCount, 2).Value = pcDMISCmd.GetText(REF_ID, 0)
                  objNewBook.Sheets(1).Cells(iRowCount, 3).Value = "SIZE"          
                  objNewBook.Sheets(1).Cells(iRowCount, 4).Value = pcDMISCmd.GetText(Nominal, 0)   'Nominal
                  objNewBook.Sheets(1).Cells(iRowCount, 5).Value = CDbl(pcDMISCmd.GetText(Nominal, 0)) + CDbl(pcDMISCmd.GetText(DIM_DEVIATION, 0)) 'Measured
                  objNewBook.Sheets(1).Cells(iRowCount, 6).Value = pcDMISCmd.GetText(UPPER_TOLERANCE, 0)   'Plus
                  objNewBook.Sheets(1).Cells(iRowCount, 7).Value = pcDMISCmd.GetText(LOWER_TOLERANCE, 0)  'Minus
                  objNewBook.Sheets(1).Cells(iRowCount, 8).Value = 0    'OutTol
                  objNewBook.Sheets(1).Cells(iRowCount, 9).Value = 0   'Length
                  objNewBook.Sheets(1).Cells(iRowCount, 10).Value = pcDMISCmd.GetText(DIM_DEVIATION, 0)  'Deviation
                  objNewBook.Sheets(1).Cells(iRowCount, 11).Value = 0  'Max
                  objNewBook.Sheets(1).Cells(iRowCount, 12).Value = 0  'Min
                  objNewBook.Sheets(1).Cells(iRowCount, 16).Value = 0  'Bonus
                  objNewBook.Sheets(1).Cells(iRowCount, 17).Value = pcDMISCmd.GetText(UNIT_TYPE, 0) 'Units
                  objNewBook.Sheets(1).Cells(iRowCount, 18).Value = pcDMISCmd.GetText(STANDARD, 0)
              
                ' new Excel row
                  iRowCount = iRowCount + 1
                  
            End Select
          
    nextLoopIndex:
        Next pcDMISCmd
        
        
    
        
      ' Close excel
        objExcel.ScreenUpdating = True
        objExcel.Visible = True
        sPath = "C:\CMM\TEST.XLSX"
        'REMOVE Commented SaveAs and quit below to automatically save
        'objNewBook.SaveAs sPath 
        'objExcel.Quit
    
      ' unDim Something
        Set objNewBook = Nothing
        Set objExcel = Nothing
        Set pcDMISCmd = Nothing
        Set pcDMISCmds = Nothing
        Set pcDMISPart = Nothing
        Set pcDMISApp = Nothing
    End Sub

    Here is an image of how it spits out into Excel.