AutoCad - Error "tonto" en una función

 
Vista:

Error "tonto" en una función

Publicado por Ibontxu (34 intervenciones) el 13/03/2003 14:11:21
Hola, tengo una función que me va a buscar un dibujo ya hecho en función de los párametros que determine el
operador. Dichos parámetros me los da a traves de un cuadro de diálogo.

Cuando se ejecuta la función se para en este punto: "(setq auxiliar1 (itoa dnmayor))", es decir meto en la variable
auxiliar1 la conversión a numérico del contenido de la variable dnmayor. En AutoCAD 14 funciona sin problemas
la totalidad de la función, pero en AutoCAD 2000 me da el siguiente error en la línea de comandos:

"error: tipo de argumento erróneo: fixnump:"

Parece que el argumento que le paso a la función de conversión ITOA no es correcto, sin embargo dnmayor contiene un número.
Incluso he probado a usar la función ATOI, por si acaso, pero obtengo un error semejante, y repito, en AutoCAD 14
funciona sin ningún problema.

Espero algún consejo, saludos, Ibontxu.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Error

Publicado por SpeedCAD (362 intervenciones) el 13/03/2003 15:57:39
Hola...

Lo que me imagino es que dnmayor lo quieres pasar a cadena de texto. Pero si utilizas itoa el numero contenido en dnmayor debe ser entero, de lo contrario te dara ese error, si dnmayor contiene u numero real, por ejemplo 2.5 entonces deberas ocupar rtos, por ejemplo:

(setq dnmayor 2.5)
(setq auxiliar1 (rtos dnmayor))

Esto devualve "2.5"

Si quieres mas de dos decimales se hace de la siguiente forma:

(setq auxiliar1 (rtos dnmayor 2 4))

Esto devuelve con 4 decimales, siempre y cuando los demas decimales no sean ceros.

Si estas en un cuadro de dialogo, para que salga un valor por defecto en la caja de texto deberas asignarlo con rtos, por ejemplo:

(set_tile "lt" (rtos lt 2 2))

donde "lt" seria el key del dcl y lt la variable

Y luego para ocupar el dato de la varible lt en la rutina para que la lea como numero se hace lo siguiente:

(SETQ lt (ATOF (GET_TILE "lt")))

Espero que te solucione el problema...

Un saludo de SpeedCAD... :)
CHILE
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Error

Publicado por SpeedCAD (362 intervenciones) el 13/03/2003 15:57:39
Hola...

Lo que me imagino es que dnmayor lo quieres pasar a cadena de texto. Pero si utilizas itoa el numero contenido en dnmayor debe ser entero, de lo contrario te dara ese error, si dnmayor contiene u numero real, por ejemplo 2.5 entonces deberas ocupar rtos, por ejemplo:

(setq dnmayor 2.5)
(setq auxiliar1 (rtos dnmayor))

Esto devualve "2.5"

Si quieres mas de dos decimales se hace de la siguiente forma:

(setq auxiliar1 (rtos dnmayor 2 4))

Esto devuelve con 4 decimales, siempre y cuando los demas decimales no sean ceros.

Si estas en un cuadro de dialogo, para que salga un valor por defecto en la caja de texto deberas asignarlo con rtos, por ejemplo:

(set_tile "lt" (rtos lt 2 2))

donde "lt" seria el key del dcl y lt la variable

Y luego para ocupar el dato de la varible lt en la rutina para que la lea como numero se hace lo siguiente:

(SETQ lt (ATOF (GET_TILE "lt")))

Espero que te solucione el problema...

Un saludo de SpeedCAD... :)
CHILE
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ahora quizá sea un DCL

Publicado por Ibontxu (34 intervenciones) el 14/03/2003 14:16:14
Hola:

No he detectado bien el fallo de la rutina y por eso la solución que me propuso SpeedCAD no funciona bien. Lo que me pasa es lo siguiente: varias lineas por encima de la función ITOA que comentaba ayer hago una llamada a un cuadro DCL. En este cuadro, selecciono los valores que deseo que tome la variable \"dnmayor\" y pongo:

:radio_button {
label = \"25\";
action = \"(setq dnmayor 25)\";
}
:radio_button {
label = \"32\";
action = \"(setq dnmayor 32)\";
...etc

Para comprobar que el valor de \"dnmayor\" llega bien a la rutina de AutoLISP, he puesto, antes de la función ITOA y despues de la llamada al cuadro DCL, lo siguiente:

(if (eq dnmayor nil)
(progn
(setq dnmayor 200)
)
)

Y resulta que siempre me coge ese valor, es decir ¡el action del cuadro dcl no pasa el valor a la variable \"dnmayor\", y \"dnmayor\" se queda nula!.

Y encima lo mas curioso es que como comentaba ayer, en AutoCAD 14 si funciona y en 2000 no.

¿?

Misterio sin resolver, ¿alguna sugerencia?, saludos, Ibontxu.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ahora quizá sea un DCL

Publicado por SpeedCAD (362 intervenciones) el 17/03/2003 14:33:22
Hola...

Yo solo te sugiero que no trabajes con action desde los DCL, para eso ocupa el mismo archivo lisp que es mucho mejor y mas seguro..., busca en la ayuda de AutoCAD, sino me avisas y te mando un ejemplo muy sencillo...

Un saludo de SpeedCAD... :)
CHILE
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ahora quizá sea un DCL

Publicado por Ibontxu (34 intervenciones) el 18/03/2003 08:59:43
Ok, probaré con el action_tile del archivo lisp que tengo y te aviso a ver. gracias por todo.

Un saludo, Ibontxu.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar