home *** CD-ROM | disk | FTP | other *** search
/ Monster Media 1993 #2 / Image.iso / cad / jul93.zip / MPLOT.LSP < prev    next >
Lisp/Scheme  |  1993-06-21  |  5KB  |  172 lines

  1. ;==========================================================
  2. ; MPLOT.LSP Copyright 1993 by Looking Glass Microproducts
  3. ;==========================================================
  4. ; Produce Multiple Single-Layer plots from a drawing 
  5. ;=============================================================
  6. (defun C:MPLOT (/ ERROR PUSHVARS POPVARS SYSVARS OLD-ERROR NOTRANS
  7.                 ITEM GET_PLOT_LAYERS MPLOT PLOT_FIRST_LAYER PLOT_OTHER_LAYERS
  8. )
  9.    ;==========================================================
  10.    ; Error Handler
  11.    (defun ERROR (S)
  12.       (if (not
  13.              (member
  14.                 S
  15.                 '("Function cancelled" "console break")
  16.              )
  17.           )
  18.          (alert S)
  19.       )
  20.       (command ".undo" "end")
  21.       (command ".undo" "1")
  22.       (POPVARS)
  23.       (princ)
  24.    )
  25.    ;==========================================================
  26.    ; Set and Save System Variables
  27.    (defun PUSHVARS (VLIST)
  28.       (foreach PAIR VLIST
  29.          (setq
  30.             SYSVARS (cons
  31.                        (cons
  32.                           (strcase (car PAIR))
  33.                           (getvar
  34.                              (car PAIR)
  35.                           )
  36.                        )
  37.                        SYSVARS
  38.                     )
  39.          )
  40.          (if (cdr PAIR) (setvar (car PAIR) (cdr PAIR)))
  41.       )
  42.    )
  43.    ;==========================================================
  44.    ; Restore System Variables
  45.    (defun POPVARS ()
  46.       (foreach PAIR SYSVARS (setvar (car PAIR) (cdr PAIR)))
  47.       (setq *error* OLD-ERROR)
  48.       (setq SYSVARS nil)
  49.    )
  50.    ;==========================================================
  51.    ; Disallow transparent invocation of routine.
  52.    (defun NOTRANS ()
  53.       (cond
  54.          ((zerop (logand (getvar "cmdactive") (+ 1 2 4 8))))
  55.          ((alert
  56.              "This command may not be invoked transparently."
  57.           )
  58.          )
  59.       )
  60.    )
  61.    ;==========================================================
  62.    ; Item from association list
  63.    (defun ITEM (A B) (cdr (assoc A B)))
  64.    ;==========================================================
  65.    ; Get the layers to be plotted
  66.    (defun GET_PLOT_LAYERS (/ FIRST LNAMES ENTRY NAME FLAGS COLOR
  67.    )
  68.       (setq FIRST t)
  69.       (while (setq ENTRY (tblnext "layer" FIRST))
  70.          (setq
  71.             FIRST nil
  72.             NAME  (ITEM 2 ENTRY)
  73.             COLOR (ITEM 62 ENTRY)
  74.             FLAGS (ITEM 70 ENTRY)
  75.          )
  76.          (if (and
  77.                 (/= NAME CLAYER)         ; not the current layer
  78.                 (> COLOR 0)              ; on
  79.                 (zerop (logand FLAGS 1)) ; not frozen
  80.              )
  81.             (setq LNAMES (cons NAME LNAMES))
  82.          )
  83.       )
  84.       (if LNAMES (ACAD_STRLSORT LNAMES))
  85.    )
  86.    ;==========================================================
  87.    ; Main Routine
  88.    (defun MPLOT (/ CLAYER LAYERS)
  89.       (cond
  90.          ((progn
  91.              (alert
  92.                 (strcat
  93.                    "Make the format layer the current layer."
  94.                    "\nTurn on all the layers to be plotted."
  95.                 )
  96.              )
  97.              (command ".ddlmodes")
  98.              (zerop (getvar "diastat"))
  99.           )
  100.             ; Layer dialog box was cancelled
  101.          )
  102.          ((null
  103.              (setq
  104.                 CLAYER (getvar "clayer")
  105.                 LAYERS (GET_PLOT_LAYERS)
  106.              )
  107.           )
  108.             (alert "No layers to plot.")
  109.          )
  110.          (t (PLOT_FIRST_LAYER) (PLOT_OTHER_LAYERS))
  111.       )
  112.    )
  113.    ;==========================================================
  114.    (defun PLOT_FIRST_LAYER ()
  115.       (command
  116.          ".layer" "off" "*" "on" CLAYER "on" (car LAYERS) ""
  117.       )
  118.       (setvar "cmdecho" 1)
  119.       (command ".plot")
  120.       (textpage)
  121.       (while (/= 0 (getvar "cmdactive"))
  122.          (command pause)
  123.       )
  124.    )
  125.    ;==========================================================
  126.    (defun PLOT_OTHER_LAYERS ()
  127.       (setvar "cmdecho" 0)
  128.       (while (cdr LAYERS)
  129.          (command
  130.             ".layer" "off" (car LAYERS) "on" (cadr LAYERS) ""
  131.          )
  132.          (textpage)
  133.          (prompt
  134.             (strcat
  135.                "\nPlotting layer "
  136.                (cadr LAYERS)
  137.                "\n\n"
  138.             )
  139.          )
  140.          (command ".plot")
  141.          (while (/= 0 (getvar "cmdactive"))
  142.             (command "")
  143.          )
  144.          (setq LAYERS (cdr LAYERS))
  145.       )
  146.    )
  147.    ;==========================================================
  148.    ; Body of c:mplot  
  149.    (if (NOTRANS)
  150.       (progn
  151.          (setq OLD-ERROR *error* *error* ERROR)
  152.          (setvar "cmdecho" 0)
  153.          (command "_undo" "group")
  154.          (PUSHVARS
  155.             '(("cmddia" . 0) ("expert" . 1))
  156.          )
  157.          (MPLOT)
  158.          (command ".undo" "end")
  159.          (command ".undo" "1")
  160.          (POPVARS)
  161.       )
  162.    )
  163.    (princ)
  164. )
  165. (princ
  166.    (strcat
  167.       "  MPLOT.LSP (Copyright 1993 by"
  168.       " Looking Glass Microproducts) loaded."
  169.    )
  170. )
  171. (princ)
  172.