home *** CD-ROM | disk | FTP | other *** search
/ DTP Toolbox / DTPToolbox.iso / propage4.0 / arexx / asciiimport.pdrx < prev    next >
Encoding:
Text File  |  1994-08-11  |  3.8 KB  |  124 lines

  1. /*
  2. Routine to import PDraw ASCII files, as exported by the ASCII export genie.
  3. Written by Don Cox, Jan '94. Revised Aug. 94 Copyright. Not Public Domain.
  4. */
  5. /* $VER: ASCIIImport August 94 */
  6.  
  7. /*trace r*/
  8.  
  9. msg = PDSetup.rexx(2,0)
  10. units = getclip(pds_units)
  11. if msg ~= 1 then exit_msg(msg)
  12.  
  13. numeric digits 8
  14.  
  15. cr = '0a'x
  16.  
  17. shapefile = pdm_GetFilename("Select file to import", "PDraw:")
  18. if shapefile = "" then exit_msg("No file selected")
  19. box = pdm_ClickArea("Drag out box to contain shape")
  20. if box = "" then exit_msg("No box")
  21. parse var box cornerX cornerY cornerX2 cornerY2
  22. boxwidth = abs(cornerX2-cornerX)
  23. boxheight = abs(cornerY2-cornerY)
  24.  
  25. call pdm_ShowStatus("  Analysing file..")
  26. success = open("Input",shapefile,"R")
  27. if success = 0 then exit_msg("File "shapefile" could not be opened")
  28.  
  29. checkfile = readln("Input")
  30. if upper(checkfile) ~="PDRAW ASCII" then exit_msg("Not a Pro Draw ASCII file")
  31.  
  32. /* Find max and min values for X and Y in file */
  33.  
  34. do forever until eof("Input") /* find first data line */
  35.     numbers = readln("Input")
  36.     if word(numbers,2) ~= "BOXSIZE" then iterate /* comment line */
  37.     parse var numbers star keyword Xrange Yrange
  38.     if ~(datatype(Xrange, n) & datatype(Yrange, n)) then iterate
  39.     break
  40.     end
  41.  
  42.  
  43. scaleX = 1
  44. if xrange~=0 then scaleX = boxwidth/Xrange
  45. scaleY = 1
  46. if Yrange~=0 then scaleY = boxheight/Yrange
  47.  
  48.  
  49. /* Now go through file again actually plotting objects */
  50. call seek("Input",0, "B") /* back to start of file */
  51. identity = 1 /* count objects */
  52. call pdm_initplot(cornerX, cornerY, scaleX, scaleY,0)
  53. call pdm_ShowStatus("  Drawing Shape..")
  54.  
  55.  
  56. do until eof("Input") /* Find first data line */
  57.     numbers = readln("Input")
  58.     parse var numbers Xnumber Ynumber tangentX tangentY tangent2X tangent2Y comment
  59.     if (datatype(Xnumber, n) & datatype(Ynumber, n)) then break
  60.     end
  61.  
  62. /* plot first point */
  63. startX = Xnumber
  64. startY = Ynumber
  65.  
  66. numpoints = 1
  67. oldX = Xnumber
  68. oldY = Ynumber
  69.  
  70. if ~datatype(tangentX,n) then call pdm_PlotLine(Xnumber" "Ynumber)
  71. else call pdm_plotBezier(Xnumber" "Ynumber" "tangentX" "tangentY" "tangent2X" "tangent2Y)
  72.  
  73. /* plot the rest of the points */
  74. do forever until eof("Input")
  75.     numbers = readln("Input") /* get another pair */
  76.     if left(numbers,1) = "*" then iterate /* comment line */
  77.     if numbers = "" then do /* blank line separates objects */
  78.         if oldX = startX & oldY = startY then curves.identity = pdm_ClosePlot()
  79.         else curves.identity = pdm_EndPlot()
  80.         if curves.identity = 0 then identity = identity-1
  81.         call pdm_initplot(cornerX, cornerY, scaleX, scaleY,0)
  82.         numpoints = 0
  83.         identity = identity+1
  84.         do until eof("Input") /* Find first data line of new object */
  85.             numbers = readln("Input")
  86.             parse var numbers Xnumber Ynumber comment
  87.             if (datatype(Xnumber, n) & datatype(Ynumber, n)) then break
  88.             end
  89.         startX = Xnumber
  90.         startY = Ynumber
  91.         end
  92.     parse var numbers Xnumber Ynumber tangentX tangentY tangent2X tangent2Y comment
  93.     if (datatype(Xnumber, n) & datatype(Ynumber, n)) then do
  94.         oldX = Xnumber
  95.         oldY = Ynumber
  96.         numpoints=numpoints+1
  97.         if ~datatype(tangentX,n) then call pdm_PlotLine(Xnumber" "Ynumber)
  98.         else call pdm_plotBezier(Xnumber" "Ynumber" "tangentX" "tangentY" "tangent2X" "tangent2Y)
  99.         end
  100.     end
  101.  
  102. if oldX = startX & oldY = startY then curves.identity = pdm_ClosePlot()
  103. else curves.identity = pdm_EndPlot()
  104. if curves.identity = 0 then identity = identity-1
  105. if identity = 0 then exit_msg("No objects plotted")
  106.  
  107. call pdm_SelectObj(curves.1,curves.identity)
  108. call pdm_GroupObj()
  109.  
  110. exit_msg("Finished")
  111.  
  112.  
  113. exit_msg: procedure expose units
  114. do
  115.     parse arg message
  116.  
  117.     if message ~= '' then call pdm_Inform(1,message,)
  118.     call pdm_ClearStatus()
  119.     call pdm_SetUnits(units)
  120.     call pdm_AutoUpdate(1)
  121.     call pdm_UpdateScreen(0)
  122.     exit
  123. end
  124.