' DXF2XYZ.BAS is a port from QBASIC to Surfer Scripter BASIC. (TB - 19 Jun 95) ' Original from USGS with Z capability added by Juan Carlos Colichon, Lima Peru Set Srf = CreateObject("Surfer.App") BEGINNING: ' (JCC changed BLN to DAT) COUNT=0 PRINT " THIS PROGRAM PRODUCES XYZ DATA FROM AUTOCAD POLYLINES" PRINT " IT EXPECTS THE .DXF FILE FOR INPUT" PRINT " IT PRODUCES THE .DAT FILE AS OUTPUT" PRINT FILEIN$=InputBox$("Enter the path and filename of the DXF file, including the DXF extension. Leave blank to exit script.", "Input DXF name") if FileIn$="" then end OPEN FILEIN$ for input as #1 FileOut$=InputBox$("Enter the path and filename of the DAT file, including the DAT extension. Leave blank to exit script.", "Input DAT name") if FileOut$="" then end Open FileOut$ for output as #3 OPEN "x.TMP" for output as #2 ' *** BEGIN SECTION TO SKIP HEADER DATA POLYCOUNT=1 BEGINPOLYLINE:' LOOK FOR POLYLINE BEGINNING IN THE FILE IF EOF(1) = -1 THEN END LINE INPUT #1, LI$ GOSUB PRINTLINE POLYLINE$=MID$(LI$,1,8) IF POLYLINE$<>"POLYLINE" THEN goto BEGINPOLYLINE ' LOOP UNTIL FIND A POLYLINE PRINT "WORKING ON POLYLINE NUMBER: ";POLYCOUNT LOOKFORLAYERFLAG:' LOOK FOR THE LAYER FLAG LINE INPUT #1, LI$ ' SKIP THIS LINE (SHOULD BE LAYERFLAG "8") LINE INPUT #1, LI$ LAYERNAME$=LEFT$(LI$,30) PRINT "PROCESSING POLYLINE ON LAYER: ";LAYERNAME$ BEGINVERTEX:' LOOK FOR BEGINNING VERTEX AFTER FINDING POLYLINE LINE INPUT #1,LI$ GOSUB PRINTLINE VERTEX$=LEFT$(LI$,6) IF VERTEX$<>"VERTEX" THEN goto BEGINVERTEX VERTEXCOUNT=0 ' START COUNTING VERTEXES (VERTICES) DOCOORDS:' BEGINNING OF SECTION TO DO X,Y,Z COORDS VERTEXCOUNT=VERTEXCOUNT+1 PRINT "PROCESSING VERTEX NUMBER: ";VERTEXCOUNT DOXCOORD: LINE INPUT #1,LI$ GOSUB PRINTLINE LOOKFORXCOORDFLAG: ' LOOK FOR X COORD FLAG XCOORDFLAG$=MID$(LI$,1,3) IF XCOORDFLAG$<>" 10" THEN goto DOXCOORD GETXCOORD: LINE INPUT #1,LI$ GOSUB PRINTLINE X$=MID$(LI$,1,25) DOYCOORD:' LOOK FOR Y COORD FLAG LINE INPUT #1,LI$ GOSUB PRINTLINE LOOKFORYCOORDFLAG: YCOORDFLAG$=MID$(LI$,1,3) IF YCOORDFLAG$<>" 20" THEN goto DOYCOORD GETYCOORD: LINE INPUT #1,LI$ GOSUB PRINTLINE Y$=MID$(LI$,1,25) DOZCOORD:' LOOK FOR Z COORD FLAG (JCC) LINE INPUT #1,LI$ GOSUB PRINTLINE LOOKFORZCOORDFLAG: ZCOORDFLAG$=MID$(LI$,1,3) IF ZCOORDFLAG$<>" 30" THEN goto DOZCOORD GETZCOORD: LINE INPUT #1,LI$ GOSUB PRINTLINE Z$=MID$(LI$,1,25) WRITEXYCOORDS: '(JCC) PRINT #2, X$;",";Y$;",";Z$ CHECKFOREND: 'END OF X,Y,Z TRIPLET, GET NEXT OR NEW LINE OR END POLYLINE LINE INPUT #1, LI$ SEQEND$=LEFT$(LI$,6) IF SEQEND$="SEQEND" THEN goto ENDPOLYLINE IF SEQEND$="VERTEX" THEN goto DOCOORDS GOTO CHECKFOREND ENDPOLYLINE: ' SECTION TO END THE POLYLINE INFO ' IF VERTEXCOUNT=2 THEN VERTEXCOUNT=3:PRINT #2, X$;",";Y$ ' THE ABOVE FIXES A GLITCH IN SURFER...NO 2 POINT LINES ALLOWED ' CORRECTED BY DUPLICATING THE 2ND COORD. FOR THE 3RD COORD. CLOSE #2 ' PRINT #3, VERTEXCOUNT;",";LAYERNAME$ OPEN "x.TMP" for input as #2 WHILE NOT EOF(2) LINE INPUT #2,LI$ GOSUB PRINTLINE PRINT #3, LI$ WEND CLOSE #2 ' CLOSE AFTER READING DATA OPEN "x.TMP" for output as #2 'OPEN TEMP FILE AGAIN FOR NEXT LINE POLYCOUNT=POLYCOUNT+1 GOTO BEGINPOLYLINE ' GO BACK AND LOOK FOR NEXT POLYLINE REM *** BEGIN ERROR ROUTINES beep() beep() PRINT "AN ERROR HAS OCCURED TRYING TO OPEN THE FILE: "+ FILEIN$ ". PLEASE CHECK THE NAME AND TRY AGAIN..." Ans%=MsgBox("AN ERROR HAS OCCURED TRYING TO OPEN THE FILE. PLEASE CHECK THE NAME AND TRY AGAIN. Exit the program?",4) If ans%=1 then end else goto beginning endif ENDFILE:' *** BEGIN ERROR ROUTINE FOR END OF FILE PRINT PRINT "END OF FILE HAS BEEN REACHED" PRINT "CLOSING INPUT AND OUTPUT FILES" PRINT "PROGRAM ENDING WAS NORMAL" CLOSE ' *** BEGIN SUBROUTINES printline:' PRINT LINE INPUT LI$ FOR DISPLAY print ">";LI$;" " return