home *** CD-ROM | disk | FTP | other *** search
- /*
- Routine to import PDraw ASCII files, as exported by the ASCII export genie.
- Written by Don Cox, Jan '94. Revised Aug. 94 Copyright. Not Public Domain.
- */
- /* $VER: ASCIIImport August 94 */
-
- /*trace r*/
-
- msg = PDSetup.rexx(2,0)
- units = getclip(pds_units)
- if msg ~= 1 then exit_msg(msg)
-
- numeric digits 8
-
- cr = '0a'x
-
- shapefile = pdm_GetFilename("Select file to import", "PDraw:")
- if shapefile = "" then exit_msg("No file selected")
- box = pdm_ClickArea("Drag out box to contain shape")
- if box = "" then exit_msg("No box")
- parse var box cornerX cornerY cornerX2 cornerY2
- boxwidth = abs(cornerX2-cornerX)
- boxheight = abs(cornerY2-cornerY)
-
- call pdm_ShowStatus(" Analysing file..")
- success = open("Input",shapefile,"R")
- if success = 0 then exit_msg("File "shapefile" could not be opened")
-
- checkfile = readln("Input")
- if upper(checkfile) ~="PDRAW ASCII" then exit_msg("Not a Pro Draw ASCII file")
-
- /* Find max and min values for X and Y in file */
-
- do forever until eof("Input") /* find first data line */
- numbers = readln("Input")
- if word(numbers,2) ~= "BOXSIZE" then iterate /* comment line */
- parse var numbers star keyword Xrange Yrange
- if ~(datatype(Xrange, n) & datatype(Yrange, n)) then iterate
- break
- end
-
-
- scaleX = 1
- if xrange~=0 then scaleX = boxwidth/Xrange
- scaleY = 1
- if Yrange~=0 then scaleY = boxheight/Yrange
-
-
- /* Now go through file again actually plotting objects */
- call seek("Input",0, "B") /* back to start of file */
- identity = 1 /* count objects */
- call pdm_initplot(cornerX, cornerY, scaleX, scaleY,0)
- call pdm_ShowStatus(" Drawing Shape..")
-
-
- do until eof("Input") /* Find first data line */
- numbers = readln("Input")
- parse var numbers Xnumber Ynumber tangentX tangentY tangent2X tangent2Y comment
- if (datatype(Xnumber, n) & datatype(Ynumber, n)) then break
- end
-
- /* plot first point */
- startX = Xnumber
- startY = Ynumber
-
- numpoints = 1
- oldX = Xnumber
- oldY = Ynumber
-
- if ~datatype(tangentX,n) then call pdm_PlotLine(Xnumber" "Ynumber)
- else call pdm_plotBezier(Xnumber" "Ynumber" "tangentX" "tangentY" "tangent2X" "tangent2Y)
-
- /* plot the rest of the points */
- do forever until eof("Input")
- numbers = readln("Input") /* get another pair */
- if left(numbers,1) = "*" then iterate /* comment line */
- if numbers = "" then do /* blank line separates objects */
- if oldX = startX & oldY = startY then curves.identity = pdm_ClosePlot()
- else curves.identity = pdm_EndPlot()
- if curves.identity = 0 then identity = identity-1
- call pdm_initplot(cornerX, cornerY, scaleX, scaleY,0)
- numpoints = 0
- identity = identity+1
- do until eof("Input") /* Find first data line of new object */
- numbers = readln("Input")
- parse var numbers Xnumber Ynumber comment
- if (datatype(Xnumber, n) & datatype(Ynumber, n)) then break
- end
- startX = Xnumber
- startY = Ynumber
- end
- parse var numbers Xnumber Ynumber tangentX tangentY tangent2X tangent2Y comment
- if (datatype(Xnumber, n) & datatype(Ynumber, n)) then do
- oldX = Xnumber
- oldY = Ynumber
- numpoints=numpoints+1
- if ~datatype(tangentX,n) then call pdm_PlotLine(Xnumber" "Ynumber)
- else call pdm_plotBezier(Xnumber" "Ynumber" "tangentX" "tangentY" "tangent2X" "tangent2Y)
- end
- end
-
- if oldX = startX & oldY = startY then curves.identity = pdm_ClosePlot()
- else curves.identity = pdm_EndPlot()
- if curves.identity = 0 then identity = identity-1
- if identity = 0 then exit_msg("No objects plotted")
-
- call pdm_SelectObj(curves.1,curves.identity)
- call pdm_GroupObj()
-
- exit_msg("Finished")
-
-
- exit_msg: procedure expose units
- do
- parse arg message
-
- if message ~= '' then call pdm_Inform(1,message,)
- call pdm_ClearStatus()
- call pdm_SetUnits(units)
- call pdm_AutoUpdate(1)
- call pdm_UpdateScreen(0)
- exit
- end
-