Sunday, June 29, 2014

Test Functions

Test Functions


AutoLISP has got two text functions. They are:


- IF function
- COND function


IF Function


(if <expression> <then> <else>)


The expression is evaluated. If it is true, then the THEN part is performed. If not, then the ELSE part is performed.


Examples:


Function: Gives:


(if (= 1 3) "Yes" "No") "No"
(if (= 2 (+ 1 1) "Yes") "Yes"
(if (= 2 (+ 3 4) "Yes") nil


The THEN part or the ELSE part of the IF function can only contain one expression. If more there are more expressions, then PROGN is used.


Example:


(if (= a b)
(progn
(setq a (+ a 10))
(setq b (+ b 10))
)
(progn
(setq a (- a 10))
(setq b (- b 10))
)
)


Here is another example of how the IF function can be used. Now we have an AutoLISP program. A line is drawn and a circle and a text.


(defun c:ball1 (/ p1 p2 an tx aw ht)
(setq p1 (getpoint "\nFirst point:")
p2 (getpoint p1 "\nSecond point:")
an (angle p1 p2)
)
(initget 1 "Yes" No")
(setq aw (getkword "Text (Yes/No)? "))
(if (= aw "Yes")
(setq ht (getdist "\nHeight: ")
tx (getstring "\nText: ")
)
(setq ht (getdist p1 "\nRadius: "))
)
(command "line" (polar p1 an ht) p2 ""
"circle" p1 ht
)
(if (= aw "Yes")
(command "text" "m" p1 ht 0 tx)
)
)


COND Function


(cond (<text1> <result1> …)


This function is used to perform an action depending on the value of a variable. Here is an AutoLISP program that shows it.


If is the program from before. But now you can draw a circle, a square, or a triangle. You choose in the beginning.


(defun c:ball2 (/ p1 p2 an ht tx aw)
(setq p1 (getpoint "\nFirst point: ")
p2 (getpoint p1 "\nSecond point: ")
an (angle p1 p2)
ht (getdist "\nHeight text: ")
tx (getstring "\nText: ")
)
(initget "Cir Tri Quadr")
(setq aw (getkword "\nTriangle/Quadrant/
<Circle>: ")
)
(command "line" (polar p1 an ht) p2 "")
(cond
((= aw "Tri")
(command "polygon" 3
p1
"c"
(polar p1 an ht)
)
)
((= aw "Quadr")
(command "polygon" 4
p1
"c"
ht
)
)
(T
(command "circle" p1 ht)
)
)
(command "text" "m" p1 ht 0 txt)
)


Friday, June 20, 2014

Predicates Or Boolean Expressions

Predicates Or Boolean Expressions


We have done parametric drawing. Now we are going to talk about predicates or boolean expressions. AutoLISP has got a lot of them.


A predicate gives back true or lase. True is presented as T and false or untrue is presented as nil.


Predicates


(= <atom> <atom> …)


This function checks if two or more texts and numbers are equal. If so T is given back. Otherwise nil is given back.


Examples:


(= 4 4.0) T
(= 20 300) nil
(= 2.4 2.4 2.4) T
(= 400 500 400) nil
(= “I” “I”) T


(/= <atom> <atom>)


This fiction is the same as the one from before. Except. T is given back if untrue and nil is given back if true.


Examples:


(/= 10 20) T
(/= “You” “You”) nil
(/= 5.34 5.44) T

(< <atom> <atom>)


This function works on numbers and texts. T is given back if the first atom is smaller than the second atom.


Examples:


(< 10 20) T
(< “b” “c”) T
(< 357 2.4) nil
(< 2.3 88) T
(< 2.3 4.4) T


(<= <atom> <atom>)


Now there is checked if both atoms are equal or the first atom is smaller than the second atom.


Examples:


(<= 10 20) T
(<= “b” “b”) T
(<= 357 33.2) nil
(<= 2.9 9) T


(> <atom> <atom>)


Now there is checked if the first atom is more than the second atom. As before. The atoms can be numbers and texts.


Examples:


(> 120 17) T
(> “c” “b”) T
(> 3.5 1792) nil
(> 77.4 4.2) T
(> 77.4 4) T


(>= <atom> <atom>)


The same as before. Except now there is checked if the atoms are equal or the first atom is more than the second atom.


Examples:


(>= 120 17) T
(>= “c” “c”) T
(>= 3.5 1792) nil
(>= 77 4 4.0) T
(>= 77 4 9) nil


(equal <expression1> <expression2> <fuzz>)


The expressions are checked. Are they equal or not. If working with numbers, you want to introduce a fuzz.


Even if numbers are supposed to be equal, there can be a little difference between them. The difference is specified in the fuzz.


Examples:


(setq f1 '(a b c))
(setq f2 '(a b c))
(setq f3 f2)


(equal f1 f3) T
(equal f3 f2) T


(setq a 1.23456)
(setq b 1.23457)


(equal a b 0.00001) T


(eq <expression1> <expression2>)


This function is used to check if two lists are equal. Are they bound to the same object? If so T is given back.


Examples:


(setq f1 '(a b c))
(setq f2 '(a b c))
(setq f3 f2)


(eq f1 f3) nil
(eq f1 f3) T


(atom <item>)


This function gives back T if the item is an atom and not a list. If it is a list, then nil is given back.


Examples:


(setq a '(x y z))
(setq b 'a)


(atom 'a) T
(atom a) nil
(atom 'b) T
(atom b T
(atom '(a b c)) nil


(listp <item>)


You want to check if the item is a list. Use this function for doing that. It gives back T if it is an item.


Examples:


(listp '(a b c)) T
(listp 'a) nil
(listp 4.343) nil


(boundp <item>)


Use this fucntion to see whether the item has got a value. The value can be a number or a text.


Examples:


(setq a 2)
(setq b nil)


(boundp 'a) T
(boundp 'b) nil


(numberp <item>)


This function checks if the item is an integer number or an real number.


Examples:


(numberp 4) T
(numberp 3.824) T
(numberp “Hallo”) nil
(numberp (setq a 10)) T


(minusp <item>)


Is the item a negative integer number or a negative real number?


Examples:


(minusp -1) T
(minusp (- 1 4)) T
(minusp 830.3) nil


(zerop <item>)


Is the value of the item zero?


Examples:


(zerop 0) T
(zerop (- 4 4.0)) T
(zerop 0.00001) nil


(and <expression> …)


This function checks if all expressions have a value of that is not nil. If one value is nil, then it gives back nil.


Examples:


(setq a 100)
(setq b nil)
(setq c “text”)


(and 1.4 a c) T
(and 1.4 a b c) nil


(or <expression> …)


This function checks if at least one expression is unequal to nil. If all expressions are equal to nil, the it gives back nil.


Examples:


(setq a 100)
(setq b nil)
(setq c “text”)


(or nil a b c) T
(or nil b '()) nil




(not <item>)


The result of this function is T is the value of the item is nil. Otherwise it is is nil.


Examples:


(null <item>)


Now there is checked if the value of the item is nil. If so then T is given back.


Examples:


(setq a 123)
(setq b nil)
(setq c “text”)


(null a) nil
(null b) T
(null c) nil
(null '()) T


(type <item>)


Here the type of the item is found. These are the types that are known in AutoLISP.


REAL real number
FILE file descriptor
STR text
INT integer number
SYM symbol
LIST list and user function
SUBSR internal AutoLISP function
PICKSET selection set
ENAME entity name
PAGETB function page table


Examples:


(setq a 123)
(setq r 3.5)
(setq t “text”)
(setq l '(a b c))


(type 'a) SYM
(type a) INT
(type r) REAL
(type t) STR
(type l) LIST
(type *) SUBR




Saturday, June 14, 2014

Parametric Drawing


We can create AutoCAD drawings using AutoLISP. Here is an AutoLISP program that does the job. The name of the program is NEWDR.LSP.


The AutoLISP Program


(defun c:newdr (/ p1 p2 p3 p4 p5 p6 p7 sd ts ws)
(setvar “cmdecho” 0)
(setq p1 (getpoint “\nPosition door: “)
sd (getdist “\nStructural dimension: “)
ws (getdist “\nWidth style: “)
ts (getdist “\nThickness style: “)
p2 (polar p1 0 ts)
p3 (polar p2 (/ pi 2) ws)
p4 (polar p3 pi ts)
p5 (polar p2 0 sd)
p6 (polar p3 0 sd)
p7 (polar p3 (/ pi 2) sd)
)
(command “pline” p1 “w” 0 0 p2 p3 p4 “c”)
(command “copy” “l” “” p1 p5 “”)
(command “pline” p2 p5 “”)
(command “copy” “l” “” p2 p3 “”)
(command “pline” p3 p7 “”)
(command “arc” p6 “c” p3 p7)
(command “zoom” “a”)
(command “zoom” “0.8x”)
(setvar “cmdecho” 1) (princ)
)
(c:newdr)


Using the program a door will be drawn. See how the door looks. As you can see. The door has different sizes and a position.



Copy The AutoLISP Program


That is so good about the listing of an AutoLISP program. You can save it on your hard disk and use it again. Copy the program to a text file.


That is important. When the listing of an AutoLISP program is saved, it is saved with the extension LSP. It can be loaded into your CAD program.


Loading The AutoLISP Program


Let's talk about how to load an AutoLISP program into the AutoCAD program. That must be done first before you can use the AutoLISP program.


I will talk about loading the AutoLISP program into IntelliCAD. Loading it into AutoCAD is done in the same way. So don't worry.


You are in IntelliCAD. Click on Tools in the menu. In the pop-up menu click on Load Application. The Load Application files dialog box is displayed.


In the dialog box click on the Add File button. You can go to different folders and you can select the AutoLISP file that you want to load.


Click on the file. And click on the Open button. You come back into the Load Application file dialog box. Click in the Load button.


The AutoLISP file is now loaded into IntelliCAD. And you can start it by typing its name at the prompt.


Starting Automatically


Before I talk about the AutoLISP program, I want to say something about what has been added to the program. At the end you see:


(c:newdr)


Through that line the AutoLISP starts as it has been loaded into IntelliCAD. As you can see. The name of the AutoLISP program is in the line.


Functions


In the AutoLISP program we find functions. The first function we find it the DEFUN function. Here is the syntax of the DEFUN function:


(defun <symbol> <argument list> <expression> ...)


This how the DEFUN function is used for defining an AutoLISP function. SYMBOL is the name of the new AutoLISP function.


Arguments


In the argument list you find all the arguments that the new AutoLISP function needs to run properly. If not there, then an error occurs.


Local Variables


In the argument list you can find a slash. After the slash comes a list of variables. Those variables are local variables.


The local variables only have a value in the function. Outside the function they have no value. Or the value of them is nil.


If no argument list is given then the symbol of an empty list must be used. This is how that symbol looks like: ().


Variables that are not defined as local have a value outside the function. They have a value when the function is no longer running.


Here are some examples:


(defun funct (x y) – the function has two arguments


(defun funct (/ a b) – the function has two local variables


(defun funct (z / a) – the function has no argument and one local variable


(defun funct () - the function has no arguments



In the AutoLISP function the GETPOINT and GETDIST functions are used. To get information. In a separate chapter we talk about the functions.


As you can see. AutoCAD commands were used in the AutoLISP program. I will talk about using AutoCAD commands in another report.


Exercise


You now have seen how an AutoLISP program is created. You have seen how distances can be entered and how AutoCAD commands are used.



Go ahead. Write your own program. This time the program is going to draw a house. Enter the sizes of the house.

Friday, June 6, 2014

Arithmetic And Geometric Functions


Arithmetic Functions


That is important. In an arithmetic function the mathematical symbol always comes before the arguments.


(+ <number> <number> ...)


The plus sign is a mathematical symbol.


Examples:


Function Gives back


(+ 1 2) 3
(+ 12 13) 25
(+ 1 2 3 4 5) 15


(- <number> <number> ...)


Examples:


Function Gives back


(- 50 40) 10
(- 40 30 5 0) 5
(- 10 20) -10


(* <number> <number> ...)


Examples:


Function Gives back



(* 2 3) 6
(* 12 15 2) 360
(* 3 -4.5) -13.5


(/ <number> <number> ...)


Function Gives back



(/ 100 2) 50
(/ 100 2.0) 50.0
(/ 100 20 2) 5


(1+ <number>)


Example:



Function Gives back



(1+ 5) 6


(1- <number>)


Example:



Function Gives back



(1- 10) 9


(abs <number>)


This function gives the absolute value of the number. The number can be a real number of an integer.


Examples:


Function Gives back


(abs 100) 100
(abs -97.25) 97.25


(max <number> <number> ...)


This function gives back the number that is the maximum of all the numbers. The number can be a real number or an integer.


Examples:


Function Gives back


(max 12 20) 20
(max 5,5 7) 7


(min <number> <number> ...)


This function is the opposite of the previous function. Now the minimum number is given back. The number can be a real number or an integer.


Examples:


Function Gives back


(min 4.07 -144) -144
(min 88.5 19 5) 5


(gcd <number> <number>)


Now we are going to do a complicated calculation.With this function the greatest common divisor is found. The numbers are integers.


Examples:


Function Gives back



(gcd 81 57) 3
(gcd 12 20) 4


(rem <number> <number> ...)


This function calculates how much remains after a division. The numbers can be integers and real numbers.


Examples:



Function Gives back



(rem 42 12) 6
(rem 9 4) 1



(exp <number>)


This function raises e to the mach of the number. The number can be an integer as a real number. The result is always positive.


Examples:


Function Gives back



(exp 1) 2.71828
(exp 2.2) 9.02501
(exp -0.4) 0.67032


(expt <base> <exponent>)


Now the base number is raised to the mach of the exponent number. The base and the exponent can be integers and real numbers.


Examples:


Function Gives back



(expt 2 4) 16
(expt 3.0 2) 9.0


(sqrt <number>)


This function calculates the square root of the number. The number can be an integer as well as a real number.


Examples:


Function Gives back



(sqrt 9) 3
(sqrt 2.0) 1.41321


(log <number>)


This function gives as result the natural logarithm of the number. The number can be an integer as well as a real number.


Examples:


Function Gives back



(log 4.5) 1.50408
(log 1.22) 0.198851


pi


This is no function but a constant number. The value of the number is 3.1415926.


Geometric Functions


(cos <angle>)


This function calculates the cosinus of an angle. The angle is expressed in radians.


Examples:



Function Gives back



(cos 0) -1
(cos pi) 1



(sin <angle>)


The same as before. Except this time the sinus of an angle is calculated. The angle is expressed in radians.


Examples:


Function Gives back



(sin 1.0) 0.841471
(sin 0,0) 0.0


(atan <number> [<number>])


If the second number is not present, then the function gives back the tangent of the first number in radians.


The number of the angle can be between pi and -pi,


Examples:


Function Gives back



(atan 0.5) 0.463648
(atan 1.0) 0.785398
(atan -1.0) -0.785398


If the second number is present, then the function gives back the inverse tangent of the quotient of the two numbers.


Examples:



Function Gives back



(atan 2.0 3.0) 0.588003
(atan -2.0 3.0) -0.68003
(atan -2.0 -3.0) -2.55359
(atan 1.0 0.0) 1.570796
(atan -0.5 0.0) -1.570796


(angle <point1> <point2>)


The function calculates the angle of the straight line going from point1 to point2. It calculates the angle between the line and the active UCS.


UCS stands for User Coordinate System. And the angles are measured counter clockwise. And the angle is given in radians.


Examples:


Function Gives back



(angle '(1.0 1.0) '(1.0 4.0)) 1.5708
(angle '(5.0 1.33) '(2.4 1.33)) 3.14159


(distance <point1> <point2>)


The function gives the distance between the two points. The distance is given in screen units.


If the value of the FLATLAND system variable is unequal to zero, then 2D points are expected. If a 3D point is used, then the Z value is ignored.


Examples:
Function Gives back



(distance '(1.0 2.5 3.0)
'(7.7 2.5 3.0)
) 6.7
(distance '(1.0 5.0)
'(1.0 15.0)
) 10.0


(inters <point1> <point2> <point3> <point4> [<on>])


The function calculates where the lines between point 1 and point 2 and point 3 and point 4 cross. A point is given back.


When the optional argument ON is present and nil. Then the two lines are considered to be infinite.


Examples:


(setq p1 (list 1.0 1.0)
p2 (list 9.0 9.0)
p3 (list 4.0 1.0)
p4 (list 4.0 2.0)
)


Function Gives back



(inters p1 p2 p3 p4) nil
(inters p1 p2 p3 p4 T) nil
(inters p1 p2 p3 p4 nil) (4.0 4.0)


(polar <point> <angle> <distance>)


This function gives as a result a point that is under an angle from the point that has been given and on the distance.


Example:


Function Gives back



(polar '(1.0 1.0) 0 4.0) (5.0 1.0)


(osnap <point> <mode>)


Depending on the value of the text of the mode a point is calculated. These are the modes there
are:


Mode Description


nea” Nearest snap
endp” Endpoint snap
midp” Midpoint snap
centre” Center snap
perp” Perpendicular snap
tan” Tangent snap
quad” Quadrant snap
int” Insertion point snap
pnt” Point Snap
int” Intersection snap



Example:


Function



(setq pt (osnap pt “nea”))


Exercises



1. Write the following arithmetic functions:


- 12 plus 13
- 8 times 5
- 200 divided by 4
- What is maximum of 12, 25 3 2, 94?
- What is the greatest common divisor of 256 and 326?
- What is the 8th power of 3?


2. Using geometric functions:


- What is the angle of a horizontal line? From left to right and from right to left.
- What is the distance between the points 10,20 and 40,50?
- What point is found starting in punt 10,20 and under an angel of 45 degrees and over a distance of 25?