3D lisp for twisted wire pairs

Discussion in 'AutoCAD' started by tomcas, Dec 15, 2006.

  1. tomcas

    tomcas Guest

    I looking for a lisp that will do twisted wire pairs, as in twisted
    lockwire. I found some 2D but no 3D. Anyone have one?
     
    tomcas, Dec 15, 2006
    #1
  2. tomcas

    Dr Fleau Guest

    You're looking for a double helix lisp. Good luck with that. A simpler way
    would be to create 1 twisted wire using a spiral pline and a circle,
    extruding it along the spiral's path and mirror it around a point satisfying
    the condition of creating a double helix. Here's a lisp that creates 3D
    sprials very easily.

    Happy DNA making.


    ;;; A.Dudek
    ;;; 3DSPIRAL.LSP
    ;;; Copyright (C) 1993 by Autodesk, Inc.
    ;;;
    ;;; Permission to use, copy, modify, and distribute this software
    ;;; for any purpose and without fee is hereby granted, provided
    ;;; that the above copyright notice appears in all copies and that
    ;;; both that copyright notice and this permission notice appear in
    ;;; all supporting documentation.
    ;;;
    ;;; THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED
    ;;; WARRANTY. ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR
    ;;; PURPOSE AND OF MERCHANTABILITY ARE HEREBY DISCLAIMED.
    ;;;
    ;;; DESCRIPTION
    ;;;
    ;;; This is a programming example.
    ;;;
    ;;; Designed and implemented by Kelvin R. Throop in January 1985
    ;;;
    ;;; This program constructs a spiral. It can be loaded and called
    ;;; by typing either "spiral", "3dspiral" or the following:
    ;;; (cspiral <# rotations> <base point> <horiz growth per rotation>
    ;;; <points per circle> <start radius>
    ;;; <vert growth per rotation>).
    ;;;
    ;;;
    ;;; Revision 3/9/95 Anthony Dudek
    ;;; Fixed problem of not drawing a full 360 degree helix when using only one
    ;;; rotation of 3dpolyline
    ;;;

    (defun myerror (s) ; If an error (such as CTRL-C) occurs while this
    command is active...
    (if (/= s "Function cancelled")
    (princ (strcat "\nError: " s))
    )
    (setvar "cmdecho" ocmd) ; Restore saved modes
    (setvar "blipmode" oblp)
    (setq *error* olderr) ; Restore old *error* handler
    (princ)
    )

    (defun cspiral (ntimes bpoint hfac lppass strad vfac /
    ang dist tp ainc dhinc dvinc circle
    dv
    )

    (setvar "blipmode" 0) ; turn blipmode off
    (setvar "cmdecho" 0) ; turn cmdecho off
    (setq circle (* 3.141596235 2))
    (setq ainc (/ circle lppass))
    (setq dhinc (/ hfac lppass))
    (if vfac
    (setq dvinc (/ vfac lppass))
    )
    (setq ang 0.0)
    (if vfac
    (setq dist strad
    dv 0.0
    )
    (setq dist 0.0)
    )
    (if vfac
    (command "_3dpoly") ; start spiral ...
    (command "_pline" bpoint) ; start spiral from base point and...
    )
    (repeat ntimes
    ;;;
    ;;; section of revised code

    (if (= ntimes 1) ; if the number of
    ; rotations is 1
    (repeat (1+ lppass) ; then calculate points
    ; one extra time to allow
    ; for the missing polyline segment at the end of
    ; the rotation
    (setq tp (polar bpoint
    (setq ang (+ ang ainc))
    (setq dist (+ dist dhinc))
    )
    )
    (if vfac
    (setq tp (list (car tp) (cadr tp) (+ dv (caddr tp)))
    dv (+ dv dvinc)
    )
    )
    (command tp) ; continue to the next point...
    ) ; close inner repeat
    ;;;
    ; otherwise
    (repeat lppass
    (setq tp (polar bpoint
    (setq ang (+ ang ainc))
    (setq dist (+ dist dhinc))
    )
    )
    (if vfac
    (setq tp (list (car tp) (cadr tp) (+ dv (caddr tp)))
    dv (+ dv dvinc)
    )
    )
    (command tp) ; continue to the next point...
    ) ; close inner repeat
    ) ; close if
    ) ; close main repeat
    (command "") ; until done.
    (princ)
    ) ; close defun

    ;;;
    ;;; Interactive spiral generation
    ;;;

    (defun C:SPIRAL (/ olderr ocmd oblp nt bp cf lp)
    (command ".undo" "group")
    (setq olderr *error*
    *error* myerror
    )
    (setq ocmd (getvar "cmdecho"))
    (setq oblp (getvar "blipmode"))
    (setvar "cmdecho" 0)

    (initget 1) ; bp must not be null
    (setq bp (getpoint "\nCenter point: "))
    (initget 7) ; nt must not be zero, neg, or null
    (setq nt (getint "\nNumber of rotations: "))
    (initget 3) ; cf must not be zero, or null
    (setq cf (getdist "\nGrowth per rotation: "))
    (initget 6) ; lp must not be zero or neg
    (setq lp (getint "\nPoints per rotation <30>: "))
    (cond ((null lp) (setq lp 30)))
    (cspiral nt bp cf lp nil nil)
    (setvar "cmdecho" ocmd)
    (setvar "blipmode" oblp)
    (setq *error* olderr) ; Restore old *error* handler

    (princ)
    (command ".undo" "end")
    )

    ;;;
    ;;; Interactive spiral generation
    ;;;

    (defun C:3DSPIRAL (/ olderr ocmd oblp nt bp hg vg sr lp)
    (command ".undo" "group")
    (setq olderr *error*
    *error* myerror
    )
    (setq osn (getvar "OSMODE"))
    (setvar "OSMODE" 0)
    (setq ocmd (getvar "cmdecho"))
    (setq oblp (getvar "blipmode"))
    (setvar "cmdecho" 0)
    (initget 1) ; bp must not be null
    (setq bp (getpoint "\nCenter point: "))
    (initget 7) ; nt must not be zero, neg, or null
    (setq nt (getint "\nNumber of rotations: "))
    (initget 7) ; sr must not be zero, neg, or null
    (setq sr (getdist bp "\nStarting radius: "))
    (initget 1) ; cf must not be zero, or null
    (setq hg (getdist "\nHorizontal growth per rotation: "))
    (initget 3) ; cf must not be zero, or null
    (setq vg (getdist "\nVertical growth per rotation: "))
    (initget 6) ; lp must not be zero or neg
    (setq lp (getint "\nPoints per rotation <30>: "))
    (cond ((null lp) (setq lp 30)))
    (cspiral nt bp hg lp sr vg)
    (command "_CIRCLE" bp (* 7 sr))
    (setvar "cmdecho" ocmd)
    (setvar "blipmode" oblp)
    (setq *error* olderr) ; Restore old *error* handler
    (princ)
    (command ".undo" "end")
    (setvar "OSMODE" osn)
    )
    (defun C:3s ()
    (C:3dspiral)
    )
    ;;;
    (princ "\t3DSPIRAL.lsp loaded")
    (princ)
     
    Dr Fleau, Dec 15, 2006
    #2
  3. tomcas

    tomcas Guest

    Thanks
     
    tomcas, Dec 15, 2006
    #3
  4. tomcas

    Dr Fleau Guest

    Thanks


    I had to read twice. I missed your reply the first time ! :p
    My pleasure, friend.

    Dr Fleau
     
    Dr Fleau, Dec 19, 2006
    #4
Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.