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

Selección y dcl

3 participantes

Ir abajo

Selección y dcl Empty Selección y dcl

Mensaje por amc.dicsac Vie Sep 23, 2016 9:02 pm

Hola que tal nesecito su ayuda porfavor, este lisp permite seleccionar textos para cambiarlos de tamaño según la escala que se elija en el poppup_list. Lo que quiero es que primero me pida la selección de textos y luego se ejecute el dcl, actualmente el lisp hace lo contrario primero se ejecuta el dcl luego escojo la escala y despues selecciono el texto

Código:
;; DCL Temporal ---> Lee Mac
(setq EscalaTextVersion "1.1")

(defun TextoEscala:GetSavePath ( / tmp )
    (cond      
        (   (setq tmp (getvar 'ROAMABLEROOTPREFIX))
            (strcat (vl-string-right-trim "\" (vl-string-translate "/" "\" tmp)) "\\Support")
        )
        (   (setq tmp (findfile "ACAD.pat"))
            (vl-string-right-trim "\" (vl-string-translate "/" "\" (vl-filename-directory tmp)))
        )
        (   (vl-string-right-trim "\" (vl-filename-directory (vl-filename-mktemp))))
    )
)

;; Agregar Listado ---> Lee Mac
(defun _ax:start ( key lst )
   (start_list key)
   (mapcar 'add_list lst)
   (end_list)
   lst
)

;; ssget  -  Lee Mac
;; A wrapper for the ssget function to permit the use of a custom selection prompt
;; msg - [str] selection prompt
;; arg - [lst] list of ssget arguments
    
(defun LM:ssget ( msg arg / sel )
  (princ msg)
  (setvar 'nomutt 1)
  (setq sel (vl-catch-all-apply 'ssget arg))
  (setvar 'nomutt 0)
  (if (not (vl-catch-all-error-p sel)) sel)
 )

;; Start Undo  -  Lee Mac
;; Opens an Undo Group.
 
(defun LM:startundo ( doc )
    (LM:endundo doc)
    (vla-startundomark doc)
)
 
;; End Undo  -  Lee Mac
;; Closes an Undo Group.
 
(defun LM:endundo ( doc )
    (while (= 8 (logand 8 (getvar 'undoctl)))
        (vla-endundomark doc)
    )
)

;; Active Document  -  Lee Mac
;; Returns the VLA Active Document Object
 
(defun LM:acdoc nil
    (eval (list 'defun 'LM:acdoc 'nil (vla-get-activedocument (vlax-get-acad-object))))
    (LM:acdoc)
)


;;; ----------------------- Función Principal ----------------------
(defun c:MESCTEXT (/ *error* texto_escala)
(vl-load-com)
;;; Control de errores
(defun *error* ( msg )
        (LM:endundo (LM:acdoc))
        (if (not (wcmatch (strcase msg t) "*break,*cancel*,*exit*"))
            (princ (strcat "\nError: " msg))
        )
        (princ)
    )
  
(setq texto_escala '("*Selecciona Escala*" "1:20" "1:25" "1:50" "1:75" "1:100" "1:125" "1:200" "1:250" "1:500" "MS:PS"))


;;----------Ruta temporal y configuración DCL ---------------------------------
;;Guardamos la ruta con la funcíon (NumInc:GetSavePath)
;;-----------------------------------------------------------------------------
(setq savepath (TextoEscala:GetSavePath))
(setq dcl (strcat savepath "\\Biblioteca_Block" (vl-string-translate "." "-" EscalaTextVersion) ".dcl"))
(setq des (open dcl "w"))
(foreach line
'(
"spc1 : spacer"
"{"
"    height = 0.1;"
"    fixed_height = true;"
"    width = 0.1;"
"    fixed_width = true;"
"}"
"EscalaText : dialog { label = "Escala textos:"; width=30;"
"spc1;"  
" : row { alignment = left; "
" : paragraph {"
" : text_part {key = "LtSample8"; label = "";}"
"             }"
"       }"  
"spc1;"  
":popup_list { key = "key_text_escala"; width=20; value = "1";}"
"spc1;"
" : row {"
" : button { label = " &Cancelar "; mnemonic = "C"; key = "cancel"; fixed_width = true; is_cancel = true;}"
" : button { label = " &Aplicar "; key = "key_in"; fixed_width = true;}"
"       }"
"spc1;"
" : row { alignment = left; "
" : text  {label = "Copyright (c) Ax:Program Lisp"; } "
"       }"
"}"
 )
(write-line line des))
(progn (close des) (< 0 (setq dch (load_dialog dcl))))
(if (not (new_dialog "EscalaText" dch "" (cond (*screenpointEscalaText*) ('(-1 -1)))))
(progn
(alert (strcat "\n                   **ERROR**       "
               "\n--------------------------------------------------------------------------------"
               "\nlamentamos este inconveniente porfavor comunicate via"
               "\nemail  [ amc.dicsac@gmail.com ]"
               "\n"))
(exit)))

;;Carpetas por defecto
(if (null key_text_escala) (setq key_text_escala "0"))

;;--------------------------- _addlist -----------------------------------------
;;Agregamos la lista con su propio "key"
;;------------------------------------------------------------------------------
(_ax:start "key_text_escala" texto_escala)


;;--------------------------- set_tile / action_tile "key_text_escala"-----------------------------------------
;;Definimos la lista de escalas para luego usarlas
;;y la guardarmos en la varibale key_text_escala
;;------------------------------------------------------------------------------------------------------
(set_tile "key_text_escala" key_text_escala)
(set_tile "LtSample8" (strcat "Seleccion la escala..."))
(action_tile "key_text_escala" "(setq var_text_escala (nth (atoi (setq key_text_escala $value)) texto_escala))")

(action_tile "cancel" "(setq *screenpointEscalaText* (done_dialog 1))")
(action_tile "key_in" "(setq *screenpointEscalaText* (done_dialog 2))")
(setq ddiag (start_dialog))
(princ)
(if (= ddiag 1) (prompt "\n*Programa Cancelado...*"))
(if (= ddiag 2) (2ap_Program_Escalatext))
(setq dch (unload_dialog dch))
(if (and dcl (findfile dcl))
(vl-file-delete dcl))
(if (< 0 dch) (unload_dialog dch))
(setvar "cmdecho" 1)
(princ))


;;----------- Programa para modificar las escalar ----------------
(defun 2ap_Program_Escalatext ( )
(cond ((= var_text_escala "1:20") (setq opt_escala 0.035))
      ((= var_text_escala "1:25") (setq opt_escala 0.040))
      ((= var_text_escala "1:50") (setq opt_escala 0.10))
      ((= var_text_escala "1:75") (setq opt_escala 0.13))
      ((= var_text_escala "1:100") (setq opt_escala 0.18))
      ((= var_text_escala "1:125") (setq opt_escala 0.23))
      ((= var_text_escala "1:200") (setq opt_escala 0.36))
      ((= var_text_escala "1:250") (setq opt_escala 0.40))
      ((= var_text_escala "1:500") (setq opt_escala 0.90))
      ((= var_text_escala "MS:PS") (setq opt_escala 2.0)))
(LM:startundo (LM:acdoc))
(prompt "\n- Cambiar texto(s) de altura: ")
(if (setq i -1 ObjSelect (LM:ssget "\nSelecciona el texto, mtext o attdef <exit>: " '(((0 . "text,mtext,attdef")))))
(while (setq nt (ssname ObjSelect (setq i (1+ i))))
(entmod
(subst (cons 40 opt_escala)(assoc 40 (entget nt))(entget nt)))))
(prompt (strcat "\n- Modificado [ " (itoa (sslength ObjSelect)) " ] textos con altura [ " (rtos opt_escala 2 3) " ] "))
(LM:endundo (LM:acdoc))
(princ))
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

Selección y dcl Empty Re: Selección y dcl

Mensaje por Marco Jacinto Sáb Sep 24, 2016 3:22 am

Te recomiendo usar mejor las escalas anotativas (el menu de escalas siempre esta disponible, solo hay que entender como hacer el cambio de la variable cannoscale), en este post tengo un ejemplo de como usarlo y creo que hace lo mismo que tu rutina.

http://mcommands.blogspot.mx/2013/07/asc-escalado-de-bloques-textos-y-cotas.html?q=asc

Marco Jacinto

Mensajes : 91
Fecha de inscripción : 12/08/2016

Volver arriba Ir abajo

Selección y dcl Empty Re: Selección y dcl

Mensaje por amc.dicsac Lun Sep 26, 2016 5:36 pm

Marco Jacinto escribió:Te recomiendo usar mejor las escalas anotativas (el menu de escalas siempre esta disponible, solo hay que entender como hacer el cambio de la variable cannoscale), en este post tengo un ejemplo de como usarlo y creo que hace lo mismo que tu rutina.

http://mcommands.blogspot.mx/2013/07/asc-escalado-de-bloques-textos-y-cotas.html?q=asc

Gracias Marco Jacinto por la respuesta, pero en el lugar donde trabajo no usamos nada que sea anotativo, los vbloques, las capas, los estilos de texto etc., tienen que estar bajo las normas de la empresa.

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

Selección y dcl Empty Re: Selección y dcl

Mensaje por Marco Jacinto Lun Sep 26, 2016 5:43 pm

Mi propuesta es en el sentido de usar el menu despegable de las escalas anotativas, no los objetos anotativos. Yo lo uso asi, ya que al intentar programar una barra con el combo de las escalas se me hizo un lío gigantesco, despues que aparecieron los objetos anotativos, opte por la solucion que comento arriba.

Marco Jacinto

Mensajes : 91
Fecha de inscripción : 12/08/2016

Volver arriba Ir abajo

Selección y dcl Empty Re: Selección y dcl

Mensaje por nolo Miér Sep 28, 2016 6:38 pm

Terrible, para este foro, en el código hay que poner el doble de contrabaras que quieras que vean los demás o subir un archivo
En fin, prueba a cambiar la función 2ap_Program_Escalatext por esta

Código:
(defun 2ap_Program_Escalatext (ObjSelect )
(cond ((= var_text_escala "1:20") (setq opt_escala 0.035))
      ((= var_text_escala "1:25") (setq opt_escala 0.040))
      ((= var_text_escala "1:50") (setq opt_escala 0.10))
      ((= var_text_escala "1:75") (setq opt_escala 0.13))
      ((= var_text_escala "1:100") (setq opt_escala 0.18))
      ((= var_text_escala "1:125") (setq opt_escala 0.23))
      ((= var_text_escala "1:200") (setq opt_escala 0.36))
      ((= var_text_escala "1:250") (setq opt_escala 0.40))
      ((= var_text_escala "1:500") (setq opt_escala 0.90))
      ((= var_text_escala "MS:PS") (setq opt_escala 2.0)))
(LM:startundo (LM:acdoc))
;;;(prompt "\n- Cambiar texto(s) de altura: ")
;;;;(if (setq i -1 ObjSelect (LM:ssget "\nSelecciona el texto, mtext o attdef <exit>: " '(((0 . "text,mtext,attdef")))))
(setq i -1)
(while (setq nt (ssname ObjSelect (setq i (1+ i))))
 (entmod
 (subst (cons 40 opt_escala)(assoc 40 (entget nt))(entget nt))
 )
);;;;)
(prompt (strcat "\n- Modificado [ " (itoa (sslength ObjSelect)) " ] textos con altura [ " (rtos opt_escala 2 3) " ] "))
(LM:endundo (LM:acdoc))
(princ))
y añade el condicional con la selección al principio de la rutina principal

Código:
(prompt "\n- Cambiar texto(s) de altura: ")
(if (setq ObjSelect (LM:ssget "\nSelecciona el texto, mtext o attdef <exit>: " '(((0 . "text,mtext,attdef"))) ))
(progn

;;----------Ruta temporal y configuración DCL ---------------------------------
;;Guardamos la ruta con la funcíon (NumInc:GetSavePath)
;; et etc .....

Sin olvidar poner al salir del dcl, con la selección

Código:
(if (= ddiag 2) (2ap_Program_Escalatext ObjSelect))


Un saludo

nolo

Mensajes : 182
Fecha de inscripción : 17/03/2016

Volver arriba Ir abajo

Selección y dcl Empty Re: Selección y dcl

Mensaje por amc.dicsac Miér Sep 28, 2016 7:00 pm

Hola nolo la solución funciona perfectamente.

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

Selección y dcl Empty Re: Selección y dcl

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.