CADTutor Posted September 17, 2002 Posted September 17, 2002 I copy here a message from fuccaro that I rescued from the old message board. This is so useful that I thought it would be great to kick-off this new AutoLISP board. I send you a short Lisp program to draw a helix. Deleting the line I marked you will get just a helix, but in my opinion, the final line help to put the shape to extrude in right position. For more help, you find me at mfuccaro@hotmail.com Best luck! And here is the program (defun C:Helix1() (setq nr 30);segments (setq fi (/ (* 2 PI) nr) i 0) (setq r (getreal "Radius of helix ")) (setq p (getreal "elevation ")) (setq old (getvar "osmode")) (command "3dpoly") (repeat (+ nr 1) (setq x (* r (sin (* i fi))) y (* r (cos (* i fi))) z (* i (/ p nr)) ) (command (list x y z)) (setq i (1+ i)) ) (command (list x y (+ z 10)));delete? (command "") (setvar "osmode" old) ) David Quote
fuccaro Posted November 11, 2002 Posted November 11, 2002 I vas announced by e-mail, that the lisp program above works fine only if OSNAP is OFF. Is true, please excuse me, but I simplified too much the program, trying to make it short. After the line (setq old (getvar 'snapmode')) please insert this one: (setvar 'snapmode' 0) Thanks to Koczka for observations. Quote
Mr T Posted November 11, 2002 Posted November 11, 2002 Here is a lisp for 3d spiral type objects http://pointa.autodesk.com/local/enu/portal/Articles/article.jsp?articleId=15872 HTH Nick (non lithssps CAD) Quote
fuccaro Posted November 12, 2002 Posted November 12, 2002 Thank you, Mr T for the link. It's an other approach, to generate surfaces when solids become hard to manipulate. Those are general propose programs, I rewrote the routines in a simple way, for our needs. First, here is a program for draw a helix, or a spiral if elevation (pitch) is set to zero. The number of turns may be real(!) You may set the start and the end radius independently, so conical springs are easy to draw. Negative value is accepted for radius (try this: Rb=10; Rt=-10; elev.=0, turns=2). I will return with an other program to extrude a shape on a helix path, generating a surface. So stay close! (defun C:Helcon() (setq segs 20); segments/turn (setq spin -1); -1=CW, 1=CCW (setq ri (getreal "base radius ") rf (getreal "top radius ")) (initget (+ 1 4)) (setq h (getreal "elevation ")) (initget (+ 1 2 4)) (setq tu (getreal "turns ")) (setq old (getvar "osmode")) (setvar "cmdecho" 0) (setq fi1 (/ (* 2 PI) segs) i 0) (setq points (fix (* tu segs)) h1 (/ h points) r1 (/ (- rf ri) points) s (getpoint "center of base ") end (list (car s) (cadr s) (+ h (caddr s)))) (setvar "osmode" 0 ) (command "line" s end "") (command "chprop" "l" "" "c" 1 "") (command "3dpoly") (setq i 0) (repeat (1+ points) (setq fi (* i fi1) h (* i h1) r (+ ri (* i r1))) (setq x (* r (cos fi)) y (* spin r (sin fi))) (command (list (+ (car s) x) (+ (cadr s) y) (+ (caddr s) h))) (setq i (1+ i))) (command "") (setvar "osmode" old)) Quote
CADTutor Posted November 13, 2002 Author Posted November 13, 2002 Fuccaro Thanks for the revised lisp file. I just tried it out and it works a treat. I used it to create the path for this extrusion: The solid extrusion is faceted because of the increment between points on the 3D Polyline. Do you think it would be possible to allow the user to set the increment? Also, it is possible to spline the resulting helix but AutoCAD won't allow an extrusion along a splined 3D Polyline. Has anyone found a way round this? Quote
fuccaro Posted November 13, 2002 Posted November 13, 2002 That's easy to change. In the second program line (marked with a comment) setting the number (20) to a higher value the spring will look better. Yes, it's possible to ask the user about a lot of things, like the color, the layer, ... I decided to make programs simple to use. But if you wish, just replace the second line (setq segs 20); segments/turn with this one: (setq segs (getint 'segments?')) I feel frustrated, I don't have possibility to insert images. The new in this program is the possibility to draw a conical helix, and with the number of turns as real. But in your image is just a simple, ordinary cylindrical helix, with exactly 5 turns. As I promised, I will be back with an other program, to extrude on a helix path other shapes, not just circles. I must just test it, than the world may have it. Quote
CADTutor Posted November 13, 2002 Author Posted November 13, 2002 You mean like this... ...yes, that works a treat too. Great work Fuccaro, can't wait to test out the extrude routine. Quote
Mr T Posted November 13, 2002 Posted November 13, 2002 Cool. But it could be drawn as a cone with an arrayed 'wigwam pole' arrangement on the outside and drawn as a 3D pline ???? Nick Quote
fuccaro Posted November 13, 2002 Posted November 13, 2002 Draw a horizontal line from (0,0,0) -this will be the axis of the helix. Draw a shape, most convenient as a polyline. The distance of the shape from the axis will give the radius of the helix. Start the program. When you are prompted about the number of points of the profile, enter the number of vertexes of the shape, if the shape is open. If it's a close one, you must enter number of points+1. Show the points in order, like when you draw the polyline. To close the shape, the last point must be identical with the first one. Here is a limit of the 3Dmesh size, if your surface will be incomplete and program ends with the message "Warning! surface is trimmed", try again decreasing the quality or the number of turns. (defun C:helsurf () (setq fin (getint " surface quality? (20...1 1=best)")) (setq nr (getint "nr. of points defining the profil?")) (setq nr (1- nr) tri 0) (setq oldc (getvar "cmdecho")) (setvar "cmdecho" 0) (setq lpa (list (getpoint "\n1 point?"))) (repeat nr (setq lpa (cons (getpoint "next point?") lpa))) (setq tu (getreal "\nturns?")) (setq xx (* 360 tu)) (setq xx (1+ (fix (/ xx fin)))) (if (> xx 255) (setq tri 1)) (setq xx (if (> xx 255) 255 xx)) (command "3dmesh" xx (length lpa)) (setq h (getdist "\n pitch (elevation/turn)")) (setq old (getvar "osmode")) (setvar "osmode" 0) (setq fi 0.0 h (/ h (* 2 pi))) (repeat xx (foreach pt lpa (setq ya (car pt)) (setq za (cadr pt)) (setq z (* za (sin fi))) (setq x (+ (* h fi) ya)) (setq y (* za (cos fi))) (command (list x y z))) (setq fi (+ fi (/ (* pi fin) 180)))) (setvar "osmode" old) (if (> tri 0) (prompt "\nWarning! surface is trimmed ")) (setvar "cmdecho" oldc)) Quote
CADTutor Posted November 14, 2002 Author Posted November 14, 2002 Yep, that works too... I have just one criticism of this routine. Why not ask the user to select the profile and have the routine work out the number of points and their coordinates? Obviously, you'd have to stipulate that the profile was formed using a polyline but this would avoid potential errors caused by the user entering the wrong number of points etc. Otherwise it works as advertised. Thanks Fuccaro. Quote
fuccaro Posted November 15, 2002 Posted November 15, 2002 Well, I feel that is enough about helix, -unless if someone will post here interesting special requests and I can help. My intention was (and is) to wrote simple programs, easy to understand and -why not- to use as "skeleton" or part in bigger applications. Thanks to David to quick and useful observations. So, see you in other topics! P.S. I have 3 reasons to post a picture here: 1 -To practice posting images (I hope it works). 2 -To show the results of a combination of the last two routines. 3 -To show to David, I didn't missing from school, when lesson about real numbers was (the number of turns is not an integer) Sorry, it don't works. The image is on my computer. If you wish, make me a visit :evil: (if the image is not here, try this link: http://fuccaro.netfirms.com/screw.jpg And the picture is here, thank you David! Quote
fuccaro Posted November 30, 2002 Posted November 30, 2002 Hello, people! I was asked if it's possible to change the sense of the helixes. The routine named HELCON has a line (setq spin -1); -1=CW, 1=CCW If you change it -with any text editor- like this (setq spin 1); -1=CW, 1=CCW you will reverse the sense. But I think is more easy to draw the helix as it is, and apply a mirror with the AutoCAD command. If somebody draw more helixes at a time, with different senses, try to change the mentioned line with this one (setq spin (getint 'spin? -1=CW, 1=CCW')) You will be asked about the spin for every helix. In the routines HELSURF and HELIX1 you may find the line (command (list x y z)) and replace z with (- 0 z) Happy rendering! Quote
CADTutor Posted January 2, 2003 Author Posted January 2, 2003 Here's a link sent to me by Michael Beall. Look at the November Lisp of the Month. Hey, you asked about the helix... Sometime during January I plan to pull all this helix stuff together and present it as a special tutorial (thanks fuccaro). Quote
CADTutor Posted January 3, 2003 Author Posted January 3, 2003 Duh! surely you guys can mind read? OK, here it is anyway http://www.spaug.org/LISP_Index.Html Quote
Mr T Posted January 3, 2003 Posted January 3, 2003 Here is a cool, thorough, tutorial on helixs. http://www.tenlinks.com/CAD/users/autocad/tutorials/SCREWS/screws3.htm Cheers Nick Quote
Mr T Posted January 3, 2003 Posted January 3, 2003 Sometime during January I plan to pull all this helix stuff together and present it as a special tutorial (thanks fuccaro). Here is a cool, thorough, tutorial on helixs, spirals screw threads etc. http://www.tenlinks.com/CAD/users/autocad/tutorials/SCREWS/screws3.htm Cheers Nick Quote
Guest superjari Posted January 4, 2003 Posted January 4, 2003 I think you really want us to go to that page don't you? :wink: Quote
Mr T Posted January 4, 2003 Posted January 4, 2003 I wondered why the post was not showing ? Now I realise that it was on page 2 !! Oops Sorry folks Nick Quote
CADTutor Posted January 4, 2003 Author Posted January 4, 2003 Oh! and I just thought you were trying to push up your member rating by adding multiple posts :wink: I've deleted any unecessary postings. 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.