home *** CD-ROM | disk | FTP | other *** search
- /*
- Routine to import Ishapes from ImageMaster
- Written by Don Cox, Dec. '93. Copyright. Not Public Domain.
- */
-
-
- /*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", "IMIMIM:Ishapes")
- 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) ~="ISHAPE" then exit_msg("Not an Ishape 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 left(numbers,1) = "*" then iterate /* comment line */
- parse var numbers Xnumber Ynumber comment
- if ~(datatype(Xnumber, n) & datatype(Ynumber, n)) then iterate
- biggestX = Xnumber
- biggestY = Ynumber
- smallestX = Xnumber
- smallestY = Ynumber
- break
- end
-
- do forever until eof("Input")
- numbers = readln("Input")
- if left(numbers,1) = "*" then iterate /* comment line */
- parse var numbers Xnumber Ynumber comment
- if ~(datatype(Xnumber, n) & datatype(Ynumber, n)) then iterate
- if Xnumber > biggestX then biggestX = Xnumber
- if Ynumber > biggestY then biggestY = Ynumber
- if Xnumber < smallestX then smallestX = Xnumber
- if Ynumber < smallestY then smallestY = Ynumber
- end
- scaleX = 1
- Xrange = biggestX-smallestX
- if xrange~=0 then scaleX = boxwidth/Xrange
- scaleY = 1
- Yrange = biggestY-smallestY
- 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 comment
- if (datatype(Xnumber, n) & datatype(Ynumber, n)) then break
- end
-
- /* plot first point */
- startX = Xnumber
- startY = Ynumber
- biggestY = biggestY-smallestY
- numpoints = 1
- oldX = Xnumber
- oldY = Ynumber
- Ynumber = Ynumber-smallestY /* put baseline at zero */
- Ynumber = biggestY-Ynumber /* ImageMaster has zero for Y at bottom */
- Xnumber = Xnumber-smallestX /* also set left side to zero */
- call pdm_plotline(Xnumber" "Ynumber)
-
- /* 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 comment
- if (datatype(Xnumber, n) & datatype(Ynumber, n)) then do
- oldX = Xnumber
- oldY = Ynumber
- numpoints=numpoints+1
- Ynumber = Ynumber-smallestY /* put baseline at zero */
- Ynumber = biggestY-Ynumber /* ImageMaster has zero for Y at bottom */
- Xnumber = Xnumber-smallestX /* also set left side to zero */
- call pdm_plotline(Xnumber" "Ynumber)
- 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
-