A More Versatile Program Branch- the (cond) Function with autolisp in AutoCAD
Many decision branches are multi-forked—that is, there are several possible outcomes, each with a unique result. Rather than nest a series of (if) statements, a single (cond) function can handle a multi-fork branch extremely well.
Explanation: the (cond) function
(cond
(test1
expression11
…
expression1n
)
(test2
expression21
…
expression2n
)
…
(testn
expressionn1
)
…
expressionnn
(T nil)
) ;end cond
- Each test expression is evaluated sequentially until one is found that is non-nil. It then evaluates those expressions that follow the test that succeeded, returning the value of the last of these expressions.
- Any number of test expressions is possible.
- It is common to use T as the final test expression as an error-checking mechanism in case all other tests fail. For example:
( T (prompt “\nNo conditions were met.”))
Example
(defun c:object ()
(initget 1 “Circle Square Rectang”)
(setq CMD (getkword “\nEnter object type Circle/Square/Rectangle: “))
(setq PT (getpoint “\nEnter a point: “))
(cond
((= CMD “Circle”) (command “circle” PT 0.5))
((= CMD “Square”) (command “pline” PT “@1<0” “@1<90” “@1<180” “c”))
((= CMD “Rectang”) (command “pline” PT “@2<0” “@1<90” “@2<180” “c”))
)
)
- A copy of this example is on your class disk as OBJECT.LSP
PRACTICE
Create an AutoLISP routine that will let the user select from a list of blocks and insert it. Test it in the file OFFICE.dwg. Estimated time for completion: 10 minutes.
Steps to solution
1. Ask user to select from a list of blocks.
2. Test which block name was chosen and insert the block.
Solution
(defun c:furn ()
(initget 1 “Chair Desk PC Plant”)
(setq FURN (getkword “\n Enter furniture type to insert Chair/Desk/PC/Plant: “))
(cond
((= FURN “Chair”) (command “insert” “Chair” “s” “1” pause pause))
((= FURN “Desk”) (command “insert” “Desk” “s” “1” pause pause))
((= FURN “PC”) (command “insert” “PC” “s” “1” pause pause))
((= FURN “Plant”) (command “insert” “Plant” “s” pause pause))
)
(princ)
)
- A complete solution to this exercise is on your class disk as FURN-A.LSP.