home *** CD-ROM | disk | FTP | other *** search
/ DTP Toolbox / DTPToolbox.iso / utilities / propage_pdraw / donsgenies / prodrawgenies.lha / IshapeImport.pdrx < prev    next >
Encoding:
Text File  |  1994-01-01  |  4.4 KB  |  141 lines

  1. /*
  2. Routine to import Ishapes from ImageMaster
  3. Written by Don Cox, Dec. '93. Copyright. Not Public Domain.
  4. */
  5.  
  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", "IMIMIM:Ishapes")
  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) ~="ISHAPE" then exit_msg("Not an Ishape 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 left(numbers,1) = "*" then iterate /* comment line */
  37.     parse var numbers Xnumber Ynumber comment
  38.     if ~(datatype(Xnumber, n) & datatype(Ynumber, n)) then iterate
  39.     biggestX = Xnumber
  40.     biggestY = Ynumber
  41.     smallestX = Xnumber
  42.     smallestY = Ynumber
  43.     break
  44.     end
  45.  
  46. do forever until eof("Input")
  47.     numbers = readln("Input")
  48.     if left(numbers,1) = "*" then iterate /* comment line */
  49.     parse var numbers Xnumber Ynumber comment
  50.     if ~(datatype(Xnumber, n) & datatype(Ynumber, n)) then iterate
  51.     if Xnumber > biggestX then biggestX = Xnumber
  52.     if Ynumber > biggestY then biggestY = Ynumber
  53.     if Xnumber < smallestX then smallestX = Xnumber
  54.     if Ynumber < smallestY then smallestY = Ynumber
  55.     end
  56. scaleX = 1
  57. Xrange = biggestX-smallestX
  58. if xrange~=0 then scaleX = boxwidth/Xrange
  59. scaleY = 1
  60. Yrange = biggestY-smallestY
  61. if Yrange~=0 then scaleY = boxheight/Yrange
  62.  
  63.  
  64. /* Now go through file again actually plotting objects */
  65. call seek("Input",0, "B") /* back to start of file */
  66. identity = 1 /* count objects */
  67. call pdm_initplot(cornerX, cornerY, scaleX, scaleY,0)
  68. call pdm_ShowStatus("  Drawing Shape..")
  69.  
  70. do until eof("Input") /* Find first data line */
  71.     numbers = readln("Input")
  72.     parse var numbers Xnumber Ynumber comment
  73.     if (datatype(Xnumber, n) & datatype(Ynumber, n)) then break
  74.     end
  75.  
  76. /* plot first point */
  77. startX = Xnumber
  78. startY = Ynumber
  79. biggestY = biggestY-smallestY
  80. numpoints = 1
  81. oldX = Xnumber
  82. oldY = Ynumber
  83. Ynumber = Ynumber-smallestY /* put baseline at zero */
  84. Ynumber = biggestY-Ynumber  /* ImageMaster has zero for Y at bottom */
  85. Xnumber = Xnumber-smallestX /* also set left side to zero */
  86. call pdm_plotline(Xnumber" "Ynumber)
  87.  
  88. /* plot the rest of the points */
  89. do forever until eof("Input")
  90.     numbers = readln("Input") /* get another pair */
  91.     if left(numbers,1) = "*" then iterate /* comment line */
  92.     if numbers = "" then do /* blank line separates objects */
  93.         if oldX = startX & oldY = startY then curves.identity = pdm_ClosePlot()
  94.         else curves.identity = pdm_EndPlot()
  95.         if curves.identity = 0 then identity = identity-1
  96.         call pdm_initplot(cornerX, cornerY, scaleX, scaleY,0)
  97.         numpoints = 0
  98.         identity = identity+1
  99.         do until eof("Input") /* Find first data line of new object */
  100.             numbers = readln("Input")
  101.             parse var numbers Xnumber Ynumber comment
  102.             if (datatype(Xnumber, n) & datatype(Ynumber, n)) then break
  103.             end
  104.         startX = Xnumber
  105.         startY = Ynumber
  106.         end
  107.     parse var numbers Xnumber Ynumber comment
  108.     if (datatype(Xnumber, n) & datatype(Ynumber, n)) then do
  109.         oldX = Xnumber
  110.         oldY = Ynumber
  111.         numpoints=numpoints+1
  112.         Ynumber = Ynumber-smallestY /* put baseline at zero */
  113.         Ynumber = biggestY-Ynumber  /* ImageMaster has zero for Y at bottom */
  114.         Xnumber = Xnumber-smallestX /* also set left side to zero */
  115.         call pdm_plotline(Xnumber" "Ynumber)
  116.         end
  117.     end
  118.  
  119. if oldX = startX & oldY = startY then curves.identity = pdm_ClosePlot()
  120. else curves.identity = pdm_EndPlot()
  121. if curves.identity = 0 then identity = identity-1
  122. if identity = 0 then exit_msg("No objects plotted")
  123.  
  124. call pdm_SelectObj(curves.1,curves.identity)
  125. call pdm_GroupObj()
  126.  
  127. exit_msg("Finished")
  128.  
  129.  
  130. exit_msg: procedure expose units
  131. do
  132.     parse arg message
  133.  
  134.     if message ~= '' then call pdm_Inform(1,message,)
  135.     call pdm_ClearStatus()
  136.     call pdm_SetUnits(units)
  137.     call pdm_AutoUpdate(1)
  138.     call pdm_UpdateScreen(0)
  139.     exit
  140. end
  141.