Welcome to the Southern African Autolisp Website.

Afra-lISP


You are Visitor Number since 10th September 1998


Calculating Points - Polar

The Polar function is defined in the AutoCAD Customization
manual as follows :

POLAR : Returns the UCS 3D point at a specified angle and
distance from a point.

(polar pt ang dist)

This, I believe, is one of the most useful functions in the AutoCAD stable.
In a nutshell, you feed it a point, tell it the angle and distance from that
point that you want to be, and it will return the second point.
Can you imagine having to do that using car, cadr, etc.
First you would have to break the list down into each seperate component,
do all the calculations on each individual item, and then re-construct the list.
What a pain!!

Following is an example of how to use POLAR to construct a simple square
or rectangle from values input by the user :

(defun DTR (a)					;degrees to radians function
(* PI (/ a 180.0))
);defun
;=========================================
(defun C:BOX1 (/ IP P1 P2 P3 LENGTH HEIGHT	;define function and declare
		OLDSNAP OLDBLIP OLDLIGHT)	;variables as local

(setq OLDSNAP (getvar "OSMODE")			;store system variables
      OLDBLIP (getvar "BLIPMODE")
     OLDLIGHT (getvar "HIGHLIGHT")
);setq
;=========================================
(setvar "CMDECHO" 0)				;change system variables
(setvar "BLIPMODE" 0)
(setq IP (getpoint "\nInsertion Point: "))	;get insertion point
(setvar "OSMODE" 0)				;switch off snap
(setq LENGTH (getreal "\nEnter Length: ")	;get length of box
      HEIGHT (getreal "\nEnter Height: ")	;get height of box
);setq
;=========================================
(setq P1 (polar IP (DTR 0.0) LENGTH)		;calculate first corner
      P2 (polar P1 (DTR 90.0) HEIGHT)		;calculate second corner
      P3 (polar P2 (DTR 180.0) LENGTH)		;calculate third corner
);setq
;=========================================
(command "PLINE" IP "W" "" ""
	 P1 P2 P3 "C"
);command					;draw the box
;=========================================
(prompt "\nRotation Angle: ")			;prompt the user for rotation
(command "ROTATE" "LAST" "" IP pause)		;rotate the box
;=========================================
(setvar "OSMODE" OLDSNAP)			;reset system variables
(setvar "BLIPMODE" OLDBLIP)
(setvar "HIGHLIGHT" OLDLIGHT)
(princ)						;exit quietly
);defun

To save you typing here's the source code : Box1 Lisp (1 Kb)

As you can see, we first need to write a function to convert radians
to degrees. This is because when we deal with angles in AutoLISP they
must be in Radians.

Hint : This could be a Global function loaded from your Acad Lisp file.

Now to our main routine.

The first thing that we do is define the function and declare all the
variables as local. (Only used within this programme.)
Then we save certain system variables, before changing them, so that we
can reset them later.
Next we ask the user for Insertion Point, Length and Height of the box.
We then use the POLAR function to calculate the remaining 3 corners
of the box. (PT1, PT2 and PT3).
Then, just to be kind, we allow the user to rotate the box.
(Thats why we drew the box using a Pline.)
Lastly, we reset all the system variables that we changed back to their
original state.


Copyright © 1998 by Kenny Ramage
All rights reserved.
Information in this document is subject to change without notice.
Site created and maintained by Kenny Ramage.