teknomatika Posted March 15, 2012 Posted March 15, 2012 Greetings. I've been doing some very simpes routines. One of them is designed to draw a sequence of circles with a radius increment values and the z coordinate. Unfortunately, without my being able to understand (I am still basic), the routine works properly sometimes, not others, drawing circles but without changing the z coordinate. After the routine had wanted an evolution in order to draw a sphere composed of circles, but here I know that the requirement is complicated because the radius of each circle will have an appropriate value. I appreciate the help. ;;v1 (defun c:scir () (setq pnt1 (getpoint "\n Sets center point of 1s circle:")) (setq rcir (getreal "\n Sets the radius of circle:")) (setq rinc (getreal "\n Sets a radius increment:")) (setq incz (getreal "\n Sets z coord increment:")) (setq ncir (getint "\n Sets n of circles:")) (repeat ncir (command "circle" pnt1 rcir) (setq xpnt1 (car pnt1)) (setq ypnt1 (cadr pnt1)) (setq zpnt1 (+(caddr pnt1)incz)) (setq pnt1 (list xpnt1 ypnt1 zpnt1)) (setq rcir (+ rcir rinc)) );repeat (princ) );defun (prompt "\nType SCIR") Quote
MSasu Posted March 15, 2012 Posted March 15, 2012 You may have the OSNAP mode activated when there is no Z incrementation - try to disable it when input the center point: (command "[color=red]_[/color]circle" [color=red]"_non"[/color] pnt1 rcir) Regards, Mircea Quote
Lee Mac Posted March 15, 2012 Posted March 15, 2012 Some quick revisions to your code: (defun c:scir ( [color=red]/ incz ncir pnt1 rcir rinc[/color] ) [color=green];; Localise your variables![/color] [color=red](if [/color][color=green];; allow for null user input[/color] [color=red](and[/color] [color=green];; all of the following must be non-nil[/color] (setq pnt1 (getpoint "\nCenter of 1st circle: ")) (setq rcir (get[color=red]dist[/color] "\nCircle radius: " [color=red]pnt1[/color])) (setq rinc (getreal "\nRadius increment: ")) (setq incz (getreal "\nZ-Coord increment: ")) (setq ncir (getint "\nNumber of circles: ")) [color=red])[/color] (repeat ncir (command "[color=red]_.[/color]circle" [color=red]"_non"[/color] pnt1 rcir) [color=green] ;; "[color=red]_.[/color]" to allow for other language versions and redefined commmands ;; [color=red]"_non"[/color] to ignore all OSnap when supplying the point[/color] [color=red] (setq pnt1 (list (car pnt1) (cadr pnt1) (+ (caddr pnt1) incz)) rcir (+ rcir rinc) )[/color] ) [color=red])[/color] (princ) ) (prompt "\nType SCIR") Though, you may also want to look into using entmake for this task to increase performance, since creating simple entities (such as Circles / Lines) is relatively easy, e.g.: (defun c:scir ( / incz ncir pnt1 rcir rinc ) (if (and (setq pnt1 (getpoint "\nCenter of 1st circle: ")) (setq rcir (getdist "\nCircle radius: " pnt1)) (setq rinc (getreal "\nRadius increment: ")) (setq incz (getreal "\nZ-Coord increment: ")) (setq ncir (getint "\nNumber of circles: ")) ) (repeat ncir [color=red](entmake (list '(0 . "CIRCLE") (cons 40 rcir) (cons 10 pnt1)))[/color] (setq pnt1 (list (car pnt1) (cadr pnt1) (+ (caddr pnt1) incz)) rcir (+ rcir rinc) ) ) ) (princ) ) (prompt "\nType SCIR") (Of course, this simple example doesn't account for changes in UCS) Quote
teknomatika Posted March 15, 2012 Author Posted March 15, 2012 msasu: tanks for help Lee Mac: As always, fantastic. Tanks! Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.