acad hispano
¿Quieres reaccionar a este mensaje? Regístrate en el foro con unos pocos clics o inicia sesión para continuar.

Variable en registro

3 participantes

Ir abajo

Variable en registro Empty Variable en registro

Mensaje por amc.dicsac Vie Jun 24, 2016 6:33 pm


Hola que tal muchachos nesecito su ayuda, tengo un lispo que lo voy a tomar de ejemplo para explicarles mi duda:

Código:
(defun AX:BlockInsert (Nombre_Bloque / BlockEsc Msj_Bloque)
(setvar "cmdecho" 0)
(setq BlockEsc (getvar "USERS2")) ;;;------------ Guardo el valor "0.25" en la variable BlockEsc
(setq Msj_Bloque (strcat  "\n>> Indica inserción del bloque [ " Nombre_Bloque " ]: "))
(princ Msj_Bloque)
(command "._insert" Nombre_Bloque "_s" BlockEsc)
(while (= (logand (getvar "cmdactive") 1) 1)
    (command pause))
(vl-cmdf "explode" "last")
(setvar "cmdecho" 1)
(princ))

Este lisp inserta un bloque, adicionalmente use una variable del tipo "users2" en el acadoc.lsp para que cuando arranque autocad este tome el valor indicado (command "users2" "0.25") como sabran esta variable solamente guarda los valores en los archivos abiertos más no lo mantiene una vez cerrado el archivo o el autocad, no tengo mucha idea de como aplicar la función vl-registry-write es decir la puedo usar tal cual lo estaba haciendo con la variable users2 (command "users2" "0.25")

Gracias.
amc.dicsac
amc.dicsac

Mensajes : 83
Fecha de inscripción : 17/03/2016
Edad : 33
Localización : Lima - Perú

http://axprogramlisp.blogspot.pe/

Volver arriba Ir abajo

Variable en registro Empty Re: Variable en registro

Mensaje por devitg Vie Jun 24, 2016 6:48 pm

mejor que meterse en el tema de los REGISTRY, PUEDES USAR EL SETENV y el GETENV , pero si lo que quieres guardar es un valor , 0.25, puedes usar USERR1 al 5 que sí se guarda en el DWG , y luego lo conviertes con el RTOS para ingresarlo al bloque , y hasta tanto no hayas terminado el LISP y el mismo funcione tal como tu quieres, deja el (setvar "cmdecho" 0) en (setvar "cmdecho" 1), la pantalla de texto es de gran ayuda cuando estás programando , ya que te muestra todo lo que has hecho. Incluidos los mensajes de error , etc. ES como tenér una BITÁCORA de viaje.

devitg
Admin

Mensajes : 257
Fecha de inscripción : 16/03/2016
Edad : 75
Localización : CORDOBA ARGENTINA

https://acadhispano.foroargentina.net

Volver arriba Ir abajo

Variable en registro Empty Re: Variable en registro

Mensaje por carlosmgilp Vie Jun 24, 2016 8:48 pm

Con el permiso de Devit.

Y si utilizas un diccionario y con eso te quitas todos los dolores de cabeza y queda guardado para cada archivo.
Extraes todos los diccionarios del archivo y compruebas si existe el diccionario que quieres crear.
Si no existe, lo creas.
Agregas los valores predeterminados que quieres recuperar.
Y listo en vez de ir hasta acaddoc lo vas a mantener en el archivo.

Es otra opinión.
Saludos.

carlosmgilp

Mensajes : 149
Fecha de inscripción : 17/03/2016
Edad : 42
Localización : Venezuela

Volver arriba Ir abajo

Variable en registro Empty Diccionarios

Mensaje por amc.dicsac Vie Jun 24, 2016 9:41 pm

Hola carlosmgilp ambas ideas son buenas, por otro lado caresco de conocimiento sobre el tema de diccionarios, si serias tan amable de mostrarme un ejemplo te lo agradeceria.

Saludos
amc.dicsac
amc.dicsac

Mensajes : 83
Fecha de inscripción : 17/03/2016
Edad : 33
Localización : Lima - Perú

http://axprogramlisp.blogspot.pe/

Volver arriba Ir abajo

Variable en registro Empty Re: Variable en registro

Mensaje por carlosmgilp Sáb Jun 25, 2016 12:18 am

Hola como estas.

Te hice una medio función para que la entiendas.

En este ejemplo lo hice para dibujar un circulo.
Seleccionas el centro del circulo
Luego te pide el radio pero si te fijas lo coloque para que mostrara el radio actual del diccionario.
Puedes seleccionar en pantalla el radio o introducirlo por teclado.
En los diccionarios vlax-ldata-put para agregar valores y con vlax-ldata-get para recuperarlos.
Ya después guarda el archivo y ciérralo, después lo vuelves a abrir y prueba los valores guardados.

Código:
(vl-load-com)

;;; Funcion para dibujar circulo

(defun c:xxx  (/ centro radio)
  (cgp-dicc)
  (setq centro (getpoint "\ncentro"))
  (princ (rtos (vlax-ldata-get "CGP-RADIOS" "RADIO")))
  (setq radio (getdist))
  (if (= radio nil)
    (setq radio (vlax-ldata-put "CGP-RADIOS" "RADIO" (vlax-ldata-get "CGP-RADIOS" "RADIO")))
    (vlax-ldata-put "CGP-RADIOS" "RADIO" radio))
  (vl-cmdf "_.circle" centro radio))

;;; Funcion diccionario

(defun cgp-dicc  (/)
  (if (not (dictsearch (namedobjdict) "CGP-RADIOS"))
    (progn (vlax-ldata-put "CGP-RADIOS" "RADIO" 0.25))))

Bueno hermano espero te sirva.

carlosmgilp

Mensajes : 149
Fecha de inscripción : 17/03/2016
Edad : 42
Localización : Venezuela

Volver arriba Ir abajo

Variable en registro Empty Re: Variable en registro

Mensaje por devitg Sáb Jun 25, 2016 2:37 am

Esta es la opción con la variable USERR2  

Código:
(if (zerop (getvar  'USERR2)); verifica si el valor de USERR2 es igual a 0.0
    (setq BlockEsc (setvar 'USERR2(Getreal "\n Indique la escala del bloque :" )) ) ;;;------------ Guardo el valor "0.25" en la variable BlockEsc
    (setq BlockEsc (getvar "USERR2")) ;; toma el valor de la variable USERR2
  )

devitg
Admin

Mensajes : 257
Fecha de inscripción : 16/03/2016
Edad : 75
Localización : CORDOBA ARGENTINA

https://acadhispano.foroargentina.net

Volver arriba Ir abajo

Variable en registro Empty Re: Variable en registro

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Volver arriba

- Temas similares

 
Permisos de este foro:
No puedes responder a temas en este foro.