Selección y dcl

Ver el tema anterior Ver el tema siguiente Ir abajo

Selección y dcl

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

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

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

Volver arriba Ir abajo

Re: Selección y dcl

Mensaje por Marco Jacinto el 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 : 8
Fecha de inscripción : 12/08/2016

Ver perfil de usuario

Volver arriba Ir abajo

Re: Selección y dcl

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

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

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

Volver arriba Ir abajo

Re: Selección y dcl

Mensaje por Marco Jacinto el 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 : 8
Fecha de inscripción : 12/08/2016

Ver perfil de usuario

Volver arriba Ir abajo

Re: Selección y dcl

Mensaje por nolo el 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 : 98
Fecha de inscripción : 17/03/2016

Ver perfil de usuario

Volver arriba Ir abajo

Re: Selección y dcl

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

Hola nolo la solución funciona perfectamente.

Gracias

amc.dicsac

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

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

Volver arriba Ir abajo

Re: Selección y dcl

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba

- Temas similares

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