Correccion de lisp de seleccion para que funcione con texto

Ver el tema anterior Ver el tema siguiente Ir abajo

Correccion de lisp de seleccion para que funcione con texto

Mensaje por carlosmgilp el Vie Jul 21, 2017 5:09 am

Hola muchachos, como están.
Necesito que me echen una mano con esto.

Normalmente utilizo este lisp de selección.

Código:
;; == Function MeExtEntsel
;; Extended Entsel function.
;; Arguments [Type]:
;; Pmt = User prompt [STR]
;; Flt = Filter list (see ssget)

;; Ems = Error message [STR]
;; Return [Type]:
;; > List with entity name and pickpoint
;; '((Ename (x y z)))

(defun meextentsel  (pmt flt ems / exloop selent selpnt)
  (while (not exloop)
    (initget " ")
    (setq selent (entsel (strcat "\n" pmt ": ")))
    (cond ((= selent "")                                    ;User pressed enter
          (setq exloop t
                selent nil))
          (selent                                          ;something selected
          (setq selpnt (trans (vlax-curve-getclosestpointto (car selent) (cadr selent)) 0 1))
          (if (ssget "_C" selpnt selpnt flt)              ;Check filter
            (setq exloop t)
            (princ ems)))                                  ;nothing selected
          (t (prompt " 1 selected, 0 found."))))
  selent)

Pero hoy necesito anexar unas opciones para que haga otras cosas en caso de no seleccionar un objeto.
Como podría modificar el lisp de selección para aceptar texto.
Así lo estaba montando, si solo utilizara entsel funciona, pero con este lisp no me permite utilizar el iniget.

Código:
(initget "Opciones" 128)
(setq cgp-entidad
      (meextentsel
        "Seleccione una linea or [Opciones]"
        '((0 . "LINE"))
        "El objeto seleccionado no es una linea"))
(if (= cgp-entidad "Opciones")
  (princ "Esta funcionando texto")
  (princ "No funciona texto"))

Gracias.

carlosmgilp

Mensajes : 96
Fecha de inscripción : 17/03/2016
Edad : 35
Localización : Venezuela

Ver perfil de usuario

Volver arriba Ir abajo

Re: Correccion de lisp de seleccion para que funcione con texto

Mensaje por nolo el Vie Jul 21, 2017 1:53 pm

Hola, parece que el lisp meextentsel solo tiene sentido en una selección que admita curvas para tomar el punto mas cercano
Código:
vlax-curve-getclosestpointto
Creo que haría falta conocer algo mas de lo que quieres que haga con el texto para poderlo reformarlo

Un saludo

nolo

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

Ver perfil de usuario

Volver arriba Ir abajo

Re: Correccion de lisp de seleccion para que funcione con texto

Mensaje por carlosmgilp el Sáb Jul 22, 2017 5:17 am

Hola hermano como estas.
Actualmente no tengo un lisp concreto, porque lo estoy  comenzando a hacer.
Pero voy a colocar un ejemplo de lo que va a ir.

Código:
(defun c:xxx  (/)
  (initget "Opciones" 128)
  (setq cgp-entidad (entsel "\nEspecifique objeto or [Opciones]: "))
;;;  (setq cgp-entidad
;;;         (meextentsel
;;;           "Seleccione una linea or [Opciones]"
;;;           '((0 . "LINE"))
;;;           "El objeto seleccionado no es una linea"))
  (cond ((= cgp-entidad "Opciones")
         (initget "Nombre Texto")
         (setq cgp-opcion (getkword "\nOpcion a modificar: [Nombre del layer / altura del Texto]"))
         (cond
;;;            ((= cgp-opcion "Nombre") (op-layer))
               ((= cgp-opcion "Texto") (op-altura-texto))))))


;;; Funcion Altura de texto

(defun op-altura-texto  (/ cgp-altura-nueva cgp-altura-actual)
  (setq cgp-altura-actual (getvar "textsize"))
  (setq cgp-altura-nueva (getreal "\nAltura actual:"))
  (if (= cgp-altura-nueva nil)
    (setq cgp-altura-actual (getvar "textsize"))
    (setvar "textsize" cgp-altura-nueva)))

Hasta los momentos lo voy a implementar para unos rótulos de texto, voy a agregar en el cond layer, altura de texto, prefijo, sufijo, entre otros.
En este ejemplo hasta los momentos agregue la altura del texto y funciona porque no estoy implementando la función de selección meextentsel, pero eso es lo que quiero, que aparte de lo que hace la función de selección, poder tener como respuesta texto para poder entrar a las opciones.
En mi opinion es la mejor función de selección que he probado hasta los momentos, aunque no es perfecta, tengo varias cosas por cambiarle, pero eso sera a futuro. Por ejemplo esa misma función que nombraste de vlax-curve-getclosestpointto no es tan exacta como parece, pues es mejor vlax-curve-getclosestpointtoprojection, pero eso son cosas que puedo hacer yo después. Así que la finalidad es enfocarse solamente en lo que admita el texto también, para que no te desvíes del tema.
Ya después de que la modifique te la paso para que me la corrijas. Jejejeje.
Bueno espero me hayas entendido ahora y disculpa el testamento.
Un saludo desde Venezuela.

carlosmgilp

Mensajes : 96
Fecha de inscripción : 17/03/2016
Edad : 35
Localización : Venezuela

Ver perfil de usuario

Volver arriba Ir abajo

Re: Correccion de lisp de seleccion para que funcione con texto

Mensaje por nolo el Sáb Jul 22, 2017 12:29 pm

No puedo probarlo pero creo que sería algo así
Código:
(defun meextentsel  (pmt flt ems / exloop selent selpnt)
  (while (not exloop)
    (initget "Opciones" " ") ;; pon aqui las posibles respuestas
    (setq selent (entsel (strcat "\n" pmt ": ")))
    (cond
;;;; y aqui lo que tiene que hacer si seleccionas opciones
 ((= selent "Opciones")
         (initget "Nombre Texto")
         (setq cgp-opcion (getkword "\nOpcion a modificar: [Nombre del layer / altura del Texto]"))
;;;;;etc
 (setq exloop t selent nil)) ;; y esto dependiendo si quieres salir después o elegir otra opción
 )


 ((= selent "")                                    ;User pressed enter
          (setq exloop t
                selent nil))

          (selent                                          ;something selected
          (setq selpnt (trans (vlax-curve-getclosestpointto (car selent) (cadr selent)) 0 1))
          (if (ssget "_C" selpnt selpnt flt)              ;Check filter
            (setq exloop t)
            (princ ems)))

                                  ;nothing selected
          (t (prompt " 1 selected, 0 found."))))
  selent)

Un saludo

nolo

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

Ver perfil de usuario

Volver arriba Ir abajo

Re: Correccion de lisp de seleccion para que funcione con texto

Mensaje por carlosmgilp el Sáb Jul 29, 2017 11:53 pm

Hola hermano como estas.

En tu caso incorpora todo dentro de la función y prácticamente dejaría de ser una función universal para utilizarla en cualquier programa.
Pues ya la había modificado de esa manera.
Así que la modifique un poco, pero cuando le doy enter continua en el bucle y no sale.
Y no se me ocurre algo para arreglar eso.
Sera que le puedes dar una revisada.
Es que antes para que cancelara la función al darle enter utilizaba el (initget " "), pero ahora como hay que meter opciones, no se como incorporar esa parte.
Si logro arreglar lo del enter, así como esta, quedaría lista.

Código:
(setq cgp-entidad
       (meextentsel
         "Seleccione una linea or [Opciones]"
         '((0 . "LINE"))
         "El objeto seleccionado no es una linea"))


(defun meextentsel  (pmt flt ems / exloop selent selpnt)
  (while (not exloop)
;;;    (initget " ")
    (initget "Opciones")
;;;    (initget "Opciones" " ")
;;;    (initget 128 "Opciones" " ")
;;;    (initget 128 "Opciones")                                ; pon aqui las posibles respuestas
    (setq selent (entsel (strcat "\n" pmt ": ")))
    (cond ((= selent "Opciones") (setq exloop t))           ; y aqui lo que tiene que hacer si seleccionas opciones
          ((= selent "")                                    ; User pressed enter
           (setq exloop t
                 selent nil))
          (selent                                           ; something selected)
           (setq selpnt (trans (vlax-curve-getclosestpointto (car selent) (cadr selent)) 0 1))
           (if (ssget "_C" selpnt selpnt flt)               ; Check filter
             (setq exloop t)
             (princ ems)))                                  ; nothing selected
          (t (prompt " 1 selected, 0 found."))))
  selent)

Bueno cualquier cosa me avisas y nuevamente mil gracias.

carlosmgilp

Mensajes : 96
Fecha de inscripción : 17/03/2016
Edad : 35
Localización : Venezuela

Ver perfil de usuario

Volver arriba Ir abajo

Re: Correccion de lisp de seleccion para que funcione con texto

Mensaje por nolo el Jue Ago 03, 2017 11:34 am

Prueba a cambiar:
Código:
((= selent "")                                    ; User pressed enter
           (setq exloop t
                 selent nil))
por
Código:
((null selent)                                    ; User pressed enter
           (setq exloop t))

Un saludo

nolo

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

Ver perfil de usuario

Volver arriba Ir abajo

Re: Correccion de lisp de seleccion para que funcione con texto

Mensaje por carlosmgilp el Vie Ago 04, 2017 10:48 pm

Hola hermano como estas.

Aun nada que funciona, pues cuando selecciono cualquier lado de la pantalla se sale del bucle y devuelve nil y no debería ser así.

carlosmgilp

Mensajes : 96
Fecha de inscripción : 17/03/2016
Edad : 35
Localización : Venezuela

Ver perfil de usuario

Volver arriba Ir abajo

Re: Correccion de lisp de seleccion para que funcione con texto

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.