Valores fijos por sesión

Ir abajo

Valores fijos por sesión Empty Valores fijos por sesión

Mensaje por oonan el Lun Ago 19, 2019 4:31 pm

Estimados,

hace mucho tiempo que no tomo el tema de lisp, hace mucho tiempo con ayuda de ustedes (antes Hispacad) fui creando un lisp que me ayudaba a colocar datos, en una sección (corte transversal) de una vialidad, en cualquier punto indicado.

Me funciona bien solo que me gustaría ajustar la parte de que al ingresar valores estos se mantengan hasta que o cambie los valores o cambie de sesión de Autocad, es decir, por ejemplo si la altura de texto lo indico en 0.50 este se mantenga cada que lo use en la misma sesión y no se utilice el valor que por defecto tiene que es de 0.20; esto seria lo mismo para las demás variables. En algún momento seguí el ejemplo de alguna rutina donde guardaba el valor en parte del Registro de windows pero no surge efecto y no entiendo el porque, como lo he mencionado al inicio hace tiempo que no veo temas de LISP.

Les dejo el link del archivo lisp y el DCL así como una sección donde aplicaría la rutina "DDHOMBRO", dentro del archivo lisp viene una descripción del uso.

https://drive.google.com/open?id=1Xv3ceORF4edo1n9R32zUv4VqO4GiRA0k

De antemano agradezco su ayuda!

oonan

Mensajes : 9
Fecha de inscripción : 11/06/2016

Volver arriba Ir abajo

Valores fijos por sesión Empty Re: Valores fijos por sesión

Mensaje por kasperle el Mar Ago 20, 2019 10:51 am

Hola...

Tres ideas por si no quieres meterte con el registro (que siempre da mucho susto hacerlo):

- Guardar los valores en el propio DWG, bien mediante un diccionario (hay mucha literatura por la red para construirlos...) o mediante VLAX-LDATA.

- Temporalmente, para una sesión con varios DWGs abiertos, usar el 'BlackBoard', que es accesible para todos ellos: mírate el uso de VL-BB-SET y VL-BB-REF en la ayuda de Autocad.

- Generar un fichero de texto con las 'preferencias' en una carpeta de uso general o donde se encuentre tu LSP; leerlo cuando se llame al programa y sobreescribirlo cuando se cambie algún dato.

En cualquier caso, deberás hacer algunos ajustes en el DCL (quitar los 'value' de las celdas y poner los valores que corresponda cuando se abre el formulario).

Un saludo,

kasperle

Mensajes : 20
Fecha de inscripción : 18/03/2016

Volver arriba Ir abajo

Valores fijos por sesión Empty Re: Valores fijos por sesión

Mensaje por oonan el Miér Ago 21, 2019 6:59 pm

Kasperle,

Agradezco tu respuesta, buscare acerca de los temas.


oonan

Mensajes : 9
Fecha de inscripción : 11/06/2016

Volver arriba Ir abajo

Valores fijos por sesión Empty Re: Valores fijos por sesión

Mensaje por Dominguez el Mar Oct 08, 2019 7:11 pm

OOnan:
en un par de dias te arreglo la rutina
saludos
Dominguez
Dominguez

Mensajes : 81
Fecha de inscripción : 20/03/2016
Edad : 69
Localización : Zaragoza (España)

Volver arriba Ir abajo

Valores fijos por sesión Empty Re: Valores fijos por sesión

Mensaje por oonan el Mar Oct 08, 2019 7:30 pm

Dominguez escribió:OOnan:
en un par de dias te arreglo la rutina
saludos

Maestro, agradezco de antemano tu gran ayuda, he estado buscando el como realizarlo pero soy autodidacta y si me ha costado trabajo entender lo de los diccionarios y mas las funciones Vlips que me indicaron anteriormente. Es por ello que si en ese paso de arreglar la rutina también podrías indicarme que hace el o las funciones que usaras, asi también aprendo de ello.

Mil gracias!

oonan

Mensajes : 9
Fecha de inscripción : 11/06/2016

Volver arriba Ir abajo

Valores fijos por sesión Empty Re: Valores fijos por sesión

Mensaje por Dominguez el Miér Oct 09, 2019 1:58 pm

Bueno Oonan:
Tu rutina ya tenia la solucion, lo que pasaba es que estaban desactivadas con (punto y coma) las funciones necesarias para que funcionara lo que pides, compara las dos rutinas y veras las diferencias.
Todo se trata de escribir en el registro de windows las variables modificadas, y la rutina buscara los valores alli, excepto al comienzo que te pondra valores por defecto.
Tambien he depurado un poco la rutina ya que todas las variables estaban globales, con lo cual te ocupaban mucha memoria, tambien he renombrado algunas variables, para hacerlas mas cortas.
Tambien he depurado un poco el fichero.DCL
En fin espero que este de tu agrado, si algo no te gusta lo arreglamos.
Un saludo

Fichero.LSP
Código:
;| Coloca los valores de elevación y distancia en una sección o perfil transversal de terreno o
    proyecto en puntos requeridos por el usuario.
  Modo de uso  : Aparecera una ventana de dialogo, la cual nos pide los siguientes valores:
    | Prefijos:
    | Rasante: valor por default "RAS="
    | offset : valor por default "OFF="

    | No. de decimales:
    | Rasante: valor por default "3"
    | Offset:  valor por default "3"

    | Texto:
    | Altura: valor por default "0.20" (para una escala de 1:100)|

  Despues nos pedira que ubiquemos un punto, el cual se tomara como origen de coordenadas cartesianas.
  Es necesario que el punto sea donde nuestra seccion tenga una distancia (0) cero y tenga una elevacion.
  Acto seguido, nos pedira que seleccionemos un texto con elevacion, la cual debe ser correspondiente al punto
  que elegimos como origen de nuestras coordenadas.
  Despues nos pedira que indicar un punto, el cual sera el que estamos buscando su elevacion y su distancia.
  Programo    : Eduardo Morales *// oonan_2@hotmail.com //*|;
;;;oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
 ;Separador de Millares (codigo obtenido de internet)
(defun fnum1 (num)
 (setq int (rtos num 2 decmallelev)
      pos (vl-string-search "." int)
      pos (if pos
       pos
       (strlen int)
     )
      fp  (substr int (+ pos 2) (strlen int))
      int (substr int 1 pos)
 )
 (while (< (strlen fp) decmallelev) (setq fp (strcat fp "0")))
 (repeat (/ pos 3)
  (setq   int (strcat (substr int 1 (- pos 3)) "," (substr int (- pos 2) (strlen int)))
   pos (- pos 3)
  )
 )
 (vl-string-left-trim
  ","
  (if (zerop decmallelev)
  int
  (strcat int "." fp)
  )
 )
)
;;;oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
 ;Separador de Millares
(defun fnum2 (num)
 (setq int (rtos num 2 decmalldist)
      pos (vl-string-search "." int)
      pos (if pos
       pos
       (strlen int)
     )
      fp  (substr int (+ pos 2) (strlen int))
      int (substr int 1 pos)
 )
 (while (< (strlen fp) decmalldist) (setq fp (strcat fp "0")))
 (repeat (/ pos 3)
  (setq   int (strcat (substr int 1 (- pos 3)) "," (substr int (- pos 2) (strlen int)))
   pos (- pos 3)
  )
 )
 (vl-string-left-trim
  ","
  (if (zerop decmalldist)
  int
  (strcat int "." fp)
  )
 )
)
;;;oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
(defun system_variables   ()
 (setq stl (getvar "TextStyle"))
 (setq lay (getvar "Clayer"))
 (setq ltp (getvar "Celtype"))
 (setq osm (getvar "Osmode"))
 (setq col (getvar "Cecolor"))
 (setq blp (getvar "Blipmode"))
 (setq mcr (getvar "Modemacro"))
)
;;;oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
(defun to_restore_system ()
 (setvar "TextStyle" stl)
 (setvar "Clayer" lay)
 (setvar "Celtype" ltp)
 (setvar "Osmode" osm)
 (setvar "Cecolor" col)
 (setvar "Blipmode" blp)
 (setvar "Modemacro" mcr)
)
;;;oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
(defun cargar_tipo_linea ()
 (if (not (tblsearch "LTYPE" "CENTRO1"))
  (vl-cmdf ".-linetype"
     "_l"
     "CENTRO1"
     (if (= (getvar "measurement") 1)
       (findfile "C:/CAD&Support/Trazos y Lineas/Lineax.lin")
       (findfile "C:/CAD&Support/Trazos y Lineas/Lineax.lin")
     )
     ""
  )
 )
)
;;;oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
(defun anejo_ctr_ln ()
 (setq valorfactorwidth 0.90)
 (setq valorminlong 3.0)
 (setq widthtexto (* valorfactorwidth altutexto))
 (setq strlnelev (strlen prefelev resultadocota1))
 (setq strlndist (strlen prefdist offdist))
 (setq longcalline0 (max strlnelev strlndist))
 (setq longline0 (* longcalline0 widthtexto))
 (if (< longline0 valorminlong)
  (setq longline1 valorminlong)
  (setq longline1 longline0)
 )
 (setq longlinea longline1)
)
;;;oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
(defun ctr_ln ()
 (setq nmblyerlin "SCC_CTR_LN")
 (setq clyerlin 3)
 (vl-cmdf "_-layer" "_m" nmblyerlin "_c" clyerlin "" "_lt" "centro1" "" "")
 (setq ptt (polar ptoreq (/ pi 2) longlinea))
 (vl-cmdf "line" ptoreq ptt "")
 (setvar "celtype" ltp)
)
;;;oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
(defun box_dialog_controls ()
 (setvar "osmode" 2081)
 (setq hombro_dcl (load_dialog "DDHombro.dcl"))
 (if (not (new_dialog "DDHombro" hombro_dcl))
  (progn (alert "\nDDHombro.dcl wasn't Found!!") (quit))
 )
 (setq prefjras   (vl-registry-read
       "HKEY_CURRENT_USER\\Software\\Ing.LEMoralesP@Hotmail.com\\DDHombro.Vlx\\Prefijo Rasante"
      )
 )
 (if (null prefjras)
  (setq prefjras "RAS=")
 )
 (setq prefjoff   (vl-registry-read
       "HKEY_CURRENT_USER\\Software\\Ing.LEMoralesP@Hotmail.com\\DDHombro.Vlx\\Prefijo Offset"
      )
 )
 (if (null prefjoff)
  (setq prefjoff "OFF=")
 )
 (setq ndecras (vl-registry-read
      "HKEY_CURRENT_USER\\Software\\Ing.LEMoralesP@Hotmail.com\\DDHombro.Vlx\\Nº Decimales Rasante"
         )
 )
 (if (null ndecras)
  (setq ndecras "3")
 )
 (setq ndecoff (vl-registry-read
      "HKEY_CURRENT_USER\\Software\\Ing.LEMoralesP@Hotmail.com\\DDHombro.Vlx\\Nº Decimales Offset"
         )
 )
 (if (null ndecoff)
  (setq ndecoff "3")
 )
 (setq altexto (vl-registry-read
      "HKEY_CURRENT_USER\\Software\\Ing.LEMoralesP@Hotmail.com\\DDHombro.Vlx\\Altura del Texto"
         )
 )
 (if (null altexto)
  (setq altexto "0.20")
 )
 (set_tile "Prefjras" prefjras)
 (set_tile "Prefjoff" prefjoff)
 (set_tile "NDecras" ndecras)
 (set_tile "NDecoff" ndecoff)
 (set_tile "Altexto" altexto)
 (set_tile "Quien_Soy" "*// Ing.LEMoralesP@hotmail.com //*oonan")
 (action_tile "Prefjras" "(setq Prefjras $value)")
 (action_tile "Prefjoff" "(setq Prefjoff $value)")
 (action_tile "NDecras" "(setq NDecras $value)")
 (action_tile "NDecoff" "(setq NDecoff $value)")
 (action_tile "Altexto" "(setq Altexto $value)")
 (action_tile "cancel" "(exit)")
 (start_dialog)
 (unload_dialog hombro_dcl)
 (setq prefelev prefjras)
 (vl-registry-write
  "HKEY_CURRENT_USER\\Software\\Ing.LEMoralesP@Hotmail.com\\DDHombro.Vlx\\Prefijo Rasante"
  ""
  prefelev
 )
 (setq prefdist prefjoff)
 (vl-registry-write
  "HKEY_CURRENT_USER\\Software\\Ing.LEMoralesP@Hotmail.com\\DDHombro.Vlx\\Prefijo Offset"
  ""
  prefdist
 )
 (setq decmallelev (atoi ndecras))
 (vl-registry-write
  "HKEY_CURRENT_USER\\Software\\Ing.LEMoralesP@Hotmail.com\\DDHombro.Vlx\\Nº Decimales Rasante"
  ""
  ndecras
 )
 (setq decmalldist (atoi ndecoff))
 (vl-registry-write
  "HKEY_CURRENT_USER\\Software\\Ing.LEMoralesP@Hotmail.com\\DDHombro.Vlx\\Nº Decimales Offset"
  ""
  ndecoff
 )
 (setq altutexto (atof altexto))
 (vl-registry-write
  "HKEY_CURRENT_USER\\Software\\Ing.LEMoralesP@Hotmail.com\\DDHombro.Vlx\\Altura del Texto"
  ""
  altexto
 )
)
;;;oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
(defun calulate_hombro ()
 (setvar "modemacro" "Ing.LEMoralesP@hotmail.com")
 (setq ptorigen (getpoint (strcat "\nUbica el Origen (cero)>:")))
 (setq seltexto (entget (car (entsel "\nselecciona el texto de elevacion>:"))))
 (while   (setq ptoreq (getpoint (strcat "\nIndica el punto a obtener>:")))
  (setq ptoreqorx (car ptorigen)) ;coordenada X pto origen
  (setq ptoreqory (cadr ptorigen)) ;coordenada Y pto origen
  (setq ptoreqx (car ptoreq)) ;coordenada X pto requerido
  (setq ptoreqy (cadr ptoreq)) ;coordenada Y pto requerido
  (setq ptoreqtextx ptoreqx)
  (setq valorx (abs (- ptoreqorx ptoreqx))) ;valor de distancia en X sin signo
  (setq valory (abs (- ptoreqory ptoreqy))) ;valor de distancia en Y sin signo
  (setq listatexto (cdr (assoc 1 seltexto))) ;obtencion de lista de texto
  (setq sincoma (vl-string-subst "" "," listatexto)) ;quita las comas del texto
  (setq realdetexto (atof sincoma)) ;convierte la cadena a numero real
  (if (> ptoreqy ptoreqory) ;Sí Y punto requerido > Y desde origen
  (setq sumacota (+ realdetexto valory))
  (setq sumacota (- realdetexto valory))
  )
  (setq resultadocota1 (fnum1 sumacota)) ;coloca una coma separadora de miles
  (setq valorx1 (fnum2 valorx)) ;Redondea la distancia X a 2 decimales
  (if (> ptoreqorx ptoreqx) ;Si X desde origen > X punto requerido
  (setq offdist (strcat "-" valorx1)) ;colocar el signo "-" (menos) ó
  (setq offdist (strcat "" valorx1)) ;No colocar Signo
  )
  (anejo_ctr_ln)
  (setq ptoreqtexty (+ (cadr ptoreq) (* longlinea 0.5)))
  (setq coordtexto (list ptoreqtextx ptoreqtexty))
  (setq pt1-1 (polar coordtexto 0 -0.00)) ;Coordenadas para colocar texto Off
  (setq pt1-2 (polar coordtexto 0 0.08)) ;Coordenadas para colocar texto Ras
  (setq angorot (/ pi 2)) ;Angulo de 90 grados
  (if (null (tblobjname "STYLE" "R-80"))
  (entmake '((0 . "STYLE")
         (100 . "AcDbSymbolTableRecord")
         (100 . "AcDbTextStyleTableRecord")
         (2 . "R-80")
         (70 . 0)
         (40 . 0.20)
         (3 . "Romans.shx")
       )
  )
  )
  (if (null (tblobjname "LAYER" "A-TEXTOS 10"))
  (entmake '((0 . "LAYER")
         (100 . "AcDbSymbolTableRecord")
         (100 . "AcDbLayerTableRecord")
         (2 . "A-TEXTOS 10")
         (70 . 0)
         (62 . 10)
         (370 . -3)
       )
  )
  )
  (entmake (list '(0 . "TEXT")
       '(100 . "AcDbEntity")
       '(410 . "Model")
       '(8 . "A-TEXTOS 10")
       '(100 . "AcDbText")
       '(62 . 256)
       '(10 0.0 0.0 0.0)
       (cons 40 altutexto)
       (cons 1 (strcat prefdist offdist))
       (cons 50 angorot)
       '(41 . 1)
       '(51 . 0.0)
       '(7 . "R-80")
       '(72 . 1)
       (cons 11 pt1-1)
       '(210 0.0 0.0 1.0)
       '(100 . "AcDbText")
       '(73 . 1)
     )
  )
  (entmake (list '(0 . "TEXT")
       '(100 . "AcDbEntity")
       '(410 . "Model")
       '(8 . "A-TEXTOS 10")
       '(100 . "AcDbText")
       '(62 . 256)
       '(10 0.0 0.0 0.0)
       (cons 40 altutexto)
       (cons 1 (strcat prefelev resultadocota1))
       (cons 50 angorot)
       '(41 . 1)
       '(51 . 0.0)
       '(7 . "R-80")
       '(72 . 1)
       (cons 11 pt1-2)
       '(210 0.0 0.0 1.0)
       '(100 . "AcDbText")
       '(73 . 3)
     )
  )
  (cargar_tipo_linea)
  (ctr_ln)
 )
 (to_restore_system)
 (princ)
)
;;;oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
(defun *error* (msg) (alert "\n  Restored System") (to_restore_system) (exit) (prin1))
;;;oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
(defun c:ddhombro (/ decmallelev fp int   pos decmalldist   blp col   lay ltp   mcr osm   stl altutexto longcalline0 longline0
        longline1 longlinea offdist prefelev   resultadocota1 strlndist strlnelev valorfactorwidth valorminlong
        widthtexto clyerlin nmblyerlin ptoreq ptt altexto hombro_dcl   ndecoff   ndecras   prefjoff prefjras angorot
        coordtexto listatexto prefdist pt1-1   pt1-2 ptoreqorx   ptoreqory ptoreqtextx ptoreqtexty ptoreqx ptoreqy
        ptorigen realdetexto   seltexto sincoma sumacota valorx valorx1 valory   actual_echo
        )
 (vl-load-com)
 (system_variables)
 (setq actual_echo (getvar "cmdecho"))
 (setvar "cmdecho" 0)
 (box_dialog_controls)
 (calulate_hombro)
 (setvar "cmdecho" actual_echo)
 (prin1)
)
;;;oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo

Fichero.DCL
Código:
DDHombro:dialog{label="ANOTAR EN SECCIÓN";
  :text{label="";key="Quien_Soy";width=21;is_enabled=false;}
  :row{
    :boxed_radio_column{label="Prefijos";
      :edit_box{label="Rasante :";mnemonic="R";edit_width=13;edit_limit=13;key="Prefjras";}
      :edit_box{label="Offset :";mnemonic="O";edit_width=13;edit_limit=13;key="Prefjoff";}
    }
  }
  :row{
    :boxed_radio_column{label="Nº de decimales";
      :edit_box{label="Rasante :";mnemonic="a";edit_width=3;edit_limit=3;key="NDecras";}
      :edit_box{label="Offset :";mnemonic="f";edit_width=3;edit_limit=3;key="NDecoff";}
    }
  }
  :row{
    :boxed_column{label="Texto";
      :edit_box{label="Altura :";mnemonic="l";edit_width=4;edit_limit=4;key="Altexto";}
    }
  }
  spacer;
  ok_cancel;
}
Dominguez
Dominguez

Mensajes : 81
Fecha de inscripción : 20/03/2016
Edad : 69
Localización : Zaragoza (España)

Volver arriba Ir abajo

Valores fijos por sesión Empty Re: Valores fijos por sesión

Mensaje por oonan el Miér Oct 09, 2019 4:02 pm

Maestro @Dominguez:

Agradezco el valioso tiempo que me estas brindando para este tema, he revisado la rutina con las adecuaciones y para lo que es el colocado del texto eso va bien (RAS= y OFF=), salvo cuando es cambiar los valores numéricos, es decir, cuando cambio el numero de decimales y altura de texto no se guardan los valores nuevos, se mantienen los indicados por default.

desde ya muchas gracias por tu apoyo.

oonan

Mensajes : 9
Fecha de inscripción : 11/06/2016

Volver arriba Ir abajo

Valores fijos por sesión Empty Re: Valores fijos por sesión

Mensaje por Dominguez el Jue Oct 10, 2019 11:49 am

oonan escribió:Maestro @Dominguez:
cuando cambio el numero de decimales y altura de texto no se guardan los valores nuevos, se mantienen los indicados por default.
Tengo que decirte que a mi me funciona todo perfectamente, las modificaciones de altura del texto y decimales de RAS y OFF se cambian sin ningun problema en el registro de windows.
me imagino que estaras ejecutando los ficheros que yo ye he corregido, (anula los antiguos)
Un saludo
Dominguez
Dominguez

Mensajes : 81
Fecha de inscripción : 20/03/2016
Edad : 69
Localización : Zaragoza (España)

Volver arriba Ir abajo

Valores fijos por sesión Empty Re: Valores fijos por sesión

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.