AutoCAD ¿Sabes si hay un error en código de VisualLisp?

#1
Hola a todos, quiero saber si este código está bien... y si está mal cómo AutoCAD me lo corrige. Tengo AutoCAD 2004.
El código es el siguiente:

Código:
; RUEDA.LSP: Dibujo de una rueda dentada
(defun dibuja_rueda
(centro radio numdi/ dang ang ang1 ang2 ang3 pto1 pto2 pto3 pto4 pto5 radd blip cmd)

(setq blip(getvar "BLIPMODE"))
(setq cmd(getvar "CMDECHO"))
(setvar "BLIPMODE" 0)
(setvar "CMDECHO" 0)

(setq dang (*3.141592 2))
(setq dang (/ dang numdi))
(setq ang1 (/ dang 4))
(setq ang2 (/ dang 2))
(setq ang3 (* 3 ang1))

(setq ang 0)
(repeat numdi
 (setq pto1 (polar centro ang radio))
 (setq pto3 (polar centro (+ ang ang2) radio))
 (setq radd (/ (distance pto1 pto3) 2))
 (setq pto2 (polar centro (+ ang ang1)(+ radio radd)))
 (command "arco" pto1 pto2 pto3)

 (setq pto5 (polar centro (+ ang dang) radio))
 (setq radd(/ (distance pto3 pto5)2))
 (setq pto4(polar centro (+ang ang3)(- radio radd)))
 (command "arco" pto3 pto4 pto5)

 (setq ang (+ ang dang))
 )

 (setvar "BLIPMODE" blip) ;restablecemos BLIPMODE
 (setvar "CMDECHO" cmd) ;restablecemos CMDECHO
 nil
 )

 ;La función RUEDA es la que solicita los parámetros.
 (defun c:rueda(/ cen rru ndi)

 (initget 1)
 (setq cen (getpoint" \nCentro de la rueda:"))
 (initget 7)
 (setq rru (getdist" \nRadio de la rueda:"))
 (initget 7)
 (setq ndi (getint" \nNúmero de dientes:"))
 (dibuja_rueda cen rru ndi)
 )
 
#2
Es bunea costumbre indentar las líneas para ver el nivel de anidamiento de o de paréntesis abiertos.

Creo que es el programa "visual lisp" el que te permite verificar la sintaxis de una rutina como esta.

Saludos.
 
#3
Había unos cuantos errores, prueba con este código...
Saludos.

Código:
; RUEDA.LSP: Dibujo de una rueda dentada
(defun dibuja_rueda
( / );(centro radio ndi / dang ang ang1 ang2 ang3 pto1 pto2 pto3 pto4 pto5 radd blip cmd)
(setq blip(getvar "BLIPMODE"))
(setq cmd(getvar "CMDECHO"))
(setvar "BLIPMODE" 0)
(setvar "CMDECHO" 0)
(setq dang (* 3.141592 2))
(setq dang (/ dang ndi))
(setq ang1 (/ dang 4))
(setq ang2 (/ dang 2))
(setq ang3 (* 3 ang1))
(setq ang 0)
(repeat ndi
(setq pto1 (polar centro ang radio))
(setq pto3 (polar centro (+ ang ang2) radio))
(setq radd (/ (distance pto1 pto3) 2))
(setq pto2 (polar centro (+ ang ang1)(+ radio radd)))
(command "_arc" pto1 pto2 pto3)
(setq pto5 (polar centro (+ ang dang) radio))
(setq radd(/ (distance pto3 pto5)2))
(setq pto4(polar centro (+ ang ang3)(- radio radd)))
(command "_arc" pto3 pto4 pto5)
(setq ang (+ ang dang))
)
(setvar "BLIPMODE" blip) ;restablecemos BLIPMODE
(setvar "CMDECHO" cmd) ;restablecemos CMDECHO
nil
)
;La función RUEDA es la que solicita los parámetros.
(defun c:rueda(/)
(initget 1)
(setq centro (getpoint" \nCentro de la rueda:"))
(initget 7)
(setq radio (getdist" \nRadio de la rueda:"))
(initget 7)
(setq ndi (getint" \nNúmero de dientes:"))
(dibuja_rueda) ;)
)
 
Arriba