Variable en registro

Ver el tema anterior Ver el tema siguiente Ir abajo

Variable en registro

Mensaje por amc.dicsac el 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.
avatar
amc.dicsac

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

Ver perfil de usuario http://axprogramlisp.blogspot.pe/

Volver arriba Ir abajo

Re: Variable en registro

Mensaje por Admin el 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.

Admin
Admin

Mensajes : 164
Fecha de inscripción : 16/03/2016
Edad : 69
Localización : CORDOBA ARGENTINA

Ver perfil de usuario http://acadhispano.foroargentina.net

Volver arriba Ir abajo

Re: Variable en registro

Mensaje por carlosmgilp el 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 : 96
Fecha de inscripción : 17/03/2016
Edad : 35
Localización : Venezuela

Ver perfil de usuario

Volver arriba Ir abajo

Diccionarios

Mensaje por amc.dicsac el 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
avatar
amc.dicsac

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

Ver perfil de usuario http://axprogramlisp.blogspot.pe/

Volver arriba Ir abajo

Re: Variable en registro

Mensaje por carlosmgilp el 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 : 96
Fecha de inscripción : 17/03/2016
Edad : 35
Localización : Venezuela

Ver perfil de usuario

Volver arriba Ir abajo

Re: Variable en registro

Mensaje por Admin el 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
  )

Admin
Admin

Mensajes : 164
Fecha de inscripción : 16/03/2016
Edad : 69
Localización : CORDOBA ARGENTINA

Ver perfil de usuario http://acadhispano.foroargentina.net

Volver arriba Ir abajo

Re: Variable en registro

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


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