Viewing contents of file '../idllib/jhuapls1r/usr2/furn.pro'
;-------------------------------------------------------------
;+
; NAME:
; FURN
; PURPOSE:
; Plot a set of furniture and a room floor plan.
; CATEGORY:
; CALLING SEQUENCE:
; furn
; INPUTS:
; KEYWORD PARAMETERS:
; Keywords:
; /HARD means make hard copy.
; SCALE=s set scale, def=4: 4 feet per inch.
; ROOM=[dx,dy] Plot room: dx X dy feet (def=none).
; FILE=name name of furniture file. in
; File format:
; Each piece of furniture has a line in the file like:
; dx dy name
; where dx ,dy = x, y size in inches, name = label.
; Ex:
; 24 24 Chair
; 24 24 Chair
; 60 36 Table
; 30 15 File
; 30 15 File
; 66 12 Book Case
; 48 12 Book Case
; OUTPUTS:
; COMMON BLOCKS:
; NOTES:
; MODIFICATION HISTORY:
; R. Sterner, 8 Dec, 1993
;
; Copyright (C) 1993, Johns Hopkins University/Applied Physics Laboratory
; This software may be used, copied, or redistributed as long as it is not
; sold and this copyright notice is reproduced on each copy made. This
; routine is provided as is without any express or implied warranties
; whatsoever. Other limitations apply as described in the file disclaimer.txt.
;-
;-------------------------------------------------------------
pro furn, help=hlp, hard=hard, file=file, scale=scale, room=room
if keyword_set(hlp) then begin
print,' Plot a set of furniture and a room floor plan.'
print,' furn'
print,' All args are keywords.'
print,' Keywords:'
print,' /HARD means make hard copy.'
print,' SCALE=s set scale, def=4: 4 feet per inch.'
print,' ROOM=[dx,dy] Plot room: dx X dy feet (def=none).'
print,' FILE=name name of furniture file. in'
print,' File format:'
print,' Each piece of furniture has a line in the file like:'
print,' dx dy name'
print,' where dx ,dy = x, y size in inches, name = label.'
print,' Ex:'
print,' 24 24 Chair
print,' 24 24 Chair
print,' 60 36 Table
print,' 30 15 File
print,' 30 15 File
print,' 66 12 Book Case
print,' 48 12 Book Case
return
endif
if n_elements(scale) eq 0 then scale = 4. ; Feet/inch.
scale = float(scale)
;============ Furniture ==================
chinit, hard=hard
;-------- try to read an input file ---------
txt = ['24 24 Chair',$
'24 24 Chair',$
'24 24 Chair',$
'60 36 Desk/Table',$
'48 36 Computer Table',$
'60 36 Desk/Table',$
'60 36 Desk/Table',$
'48 12 Book Case',$
'48 12 Book Case',$
'48 12 Book Case',$
'30 15 File',$
'30 15 File',$
'30 15 File',$
'36 36 Computer',$
'36 36 Computer']
if n_elements(file) ne 0 then txt = getfile(file)
;--------- Set up text -----------
if keyword_set(hard) then begin ; Printout.
tsz = 1.2
tyoff = .06
clr = 220
endif else begin ; Screen.
tsz = .8
tyoff = .04
clr = 150
endelse
;-------- Interpret input file -----------
n = n_elements(txt)
dx = fltarr(n)
dy = fltarr(n)
nam = strarr(n)
for i = 0, n-1 do begin
dx(i) = getwrd(txt(i),0)/12./scale
dy(i) = getwrd('',1)/12./scale
nam(i) = getwrd('',2,99)
endfor
;--------- Plot input file -----------
bx = [0,1,1,0,0] ; A unit box.
by = [0,0,1,1,0]
y0 = 1. ; Bottom margin.
x0 = .5 ; Left margin.
xmx = 7. ; Right margin.
ht = 0. ; Line height.
x = x0 ; Starting point.
y = y0
;-------- Do scale first --------
mxf = fix((7.4-x0)*scale)
plots,[0,mxf]/scale+x0, [y0,y0]-.25
for t=0.,mxf do plots,[t,t]/scale+x0,[y0,y0-.05]-.25
for t=0.,mxf do xyouts,t/scale+x0,y0-.4-2*tyoff, $
strtrim(fix(t),2),align=.5,charsize=tsz
xyouts,.5*mxf/scale+x0,y0-.8,align=.5,'FEET',charsize=tsz
;-------- Do pieces ------------
for i = 0, n-1 do begin
tx = dx(i) ; Pull out x size,
ty = dy(i) ; y size, and
nm = nam(i) ; name.
if (x+tx) gt xmx then begin ; Newline.
x = x0 ; Move back to left margin.
y = y+ht ; Move up one line.
ht = 0. ; Reset max line height.
endif
px = x+bx*tx ; Piece outline.
py = y+by*ty
polyfill, px, py, color=clr ; Fill piece.
plots, px, py ; Plot outline.
lx = x + .5*tx ; Label positoin.
ly = y + .5*ty - tyoff
xyouts,lx,ly,align=.5,nm,charsize=tsz ; Label.
x = x + tx ; Next x.
ht = ht>ty ; Next y?
endfor
tmp = ''
if keyword_set(hard) then psterm else read,' Press RETURN',tmp
;============ Room ==================
;------- Plot room if requested --------
if n_elements(room) ne 0 then begin
x0 = .5
y0 = .5
chinit, hard=hard
dx = room(0)/scale
dy = room(1)/scale
plots,[0,dx,dx,0,0]+x0, [0,0,dy,dy,0]+y0,thick=5
x=makex(0,room(0),5)/scale
y=makex(0,room(1),5)/scale
for i=0,n_elements(y)-1 do plots,[0,dx]+x0,[y(i),y(i)]+y0,lines=3
for i=0,n_elements(x)-1 do plots,[x(i),x(i)]+x0,[0,dy]+y0,lines=3
x=makex(0,room(0),1)/scale
y=makex(0,room(1),1)/scale
for i=0,n_elements(y)-1 do plots,[0,dx]+x0,[y(i),y(i)]+y0,lines=1
for i=0,n_elements(x)-1 do plots,[x(i),x(i)]+x0,[0,dy]+y0,lines=1
if keyword_set(hard) then psterm
endif
return
end