AutoLISP: Polar Array

I recently posted some alternatives to the new ARRAY commands that are in AutoCAD 2012 and forgot to post this one. It allows you to create a polar array.

Here’s How:

  • POLAR <enter> to start
  • Select Objects <enter> when done selecting
  • Specify the center point of the rotation
  • Specify the start point of the rotation
  • Specify the rotation angle: 2 ways shown
    • 1) With Dynamic Input enabled, I hit the TAB button on the keyboard and specify the angle degree
    • 2) Create a line the specifies the desired angle.

After you have made the Polar Array and like the results, do a REGEN (RE <enter>) to regenerate the model and get rid of the temporary dashed lines that were created while running the command.

;;; ========================================================================

;;; the following code are writen by CHEN QING JUN ;

;;; Civil engineering Department, South China University of Technology ;

;;; Purpose: To dynamic copy Object in polar ;

;;; Version v 1.0 2011.03.16 ;

;;; Http://chenqj.blogspot.com ;

;;; ========================================================================

;;; =======================================================================;

;;; The main function ;

;;; =======================================================================;

(vl-load-com)

(defun c:polar( / ang angnow gr oang p0 px px1 ss ss1)

(setq ss (std-sslist (ssget))

p0 (getpoint "\nP0,the center :") px (getpoint p0 "\nThe angle start Point:")

px1 (getpoint p0 "\nThe angle end Point:")

ang (- (angle p0 px1)(setq oang (angle p0 px)))

)

(prompt "\nThe rotation point:")

(while (= (car (setq gr (grread nil 5 0))) 5)

(if ss1 (mapcar 'vla-delete ss1))

(redraw)

(setq angnow (- (angle p0 (cadr gr)) oang))

(if (and (< ang 0)(> angnow 0)) (setq angnow (- angnow (* 2 pi))))

(if (and (> ang 0)(< angnow 0)) (setq angnow (+ (* 2 pi) angnow)))

(setq ss1 (q:ss:dyngenpolar ss (fix (/ angnow ang)) p0 ang))

(q:grdraw:arc p0 (/ (getvar "viewsize") 4.0) oang angnow)

)

(princ)

)

;;; =======================================================================;

;;; by qjchen, grdraw circle arc ;

;;; =======================================================================;

(defun q:grdraw:arc(cen r ang angadd / angdiv n)

(grdraw cen (polar cen ang r) 3 1)

(grdraw cen (polar cen (+ ang angadd) r) 3 1)

(setq n 100 angdiv (/ angadd n))

(repeat n

(grdraw (polar cen ang r)(polar cen (setq ang (+ ang angdiv)) r) 1 1)

)

)

;;; =======================================================================;

;;; by qjchen, copy ss according to the direction and vector ;

;;; =======================================================================;

(defun q:ss:dyngenpolar (sslst n cen ang / i obj1 ss xobj)

(setq ss nil)

(foreach x sslst

(setq xobj (vlax-ename->vla-object x) i 1)

(repeat n

(setq ss (cons (setq obj1 (vla-copy xobj)) ss))

(Vla-rotate obj1 (vlax-3d-point cen) (* ang i))

(setq i (1+ i))

)

)

ss

)

;;; =======================================================================;

;;; selection to list, by Reini Urban ;

;;; =======================================================================;

(defun std-sslist (ss / n lst)

(if (eq 'pickset (type ss))

(repeat (setq n (fix (sslength ss))) ; fixed

(setq lst (cons (ssname ss (setq n (1- n))) lst))))

)

(princ "by qjchen@gmail.com, To dynamic rotate copy object, the command is Test")
Advertisements

About AutoCAD Tips

This blog serves as a knowledge base for myself (and anyone else) so that I can reference tips & tricks that I have learned and also refer others to it as well. I hope that this blog helps you learn at least one tip to make your drafting/design experience better.
This entry was posted in AutoLISP, Modifying, TIPS. Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s