¿Cómo crear una rutina LISP que me extraiga el atributo de un bloque dinámico en AutoCAD?

¿Cómo crear una rutina LISP que me extraiga el atributo de un bloque dinámico en AutoCAD?

nuelma19965BFNT
Participant Participant
1.196 Vistas
3 Respuestas
Mensaje 1 de 4

¿Cómo crear una rutina LISP que me extraiga el atributo de un bloque dinámico en AutoCAD?

nuelma19965BFNT
Participant
Participant

Hola apreciados usuarios de AutoCAD, el día de hoy acudo a ustedes en busca de una ayuda, he estado realizando una rutina lisp que me extraiga el atributo de un bloque dinamico y me lo deposite en un text de altura 1.8 (el text también es insertado por la rutina), sin embargo llevo varios intentos y no lo he podido conseguir ya que mis conocimientos en Autolisp son muy básicos, pido por favor me ayuden a conseguir el resultado descrito anteriormente, adjunto imagen del bloque con el atributo.

 

Agradezco la atención prestada.

 

@nuelma19965BFNT para una mayor claridad  @joaquim.moral ha editado el título original: AYUDA POR FAVOR, RUTINA LISP QUE EXTRAIGA EL ATRIBUTO DE UN BLOQUE.

Recuerda consultar cómo escoger el mejor título para tu post. ¡Gracias por participar!

0 Me gusta
Soluciones aceptadas (2)
1.197 Vistas
3 Respuestas
Respuestas (3)
Mensaje 2 de 4

pbejse
Mentor
Mentor
Solución aceptada
(defun c:demo ( / atr pt )
  (if (and
	(setq atr (car (nentsel "\nSelect Attribute")))
	(setq pt (getpoint "\nPick point for TEXT location:"))
	)
    (progn
      (setq atrEnt (entget atr))
  	(entmakex
	  (append (list	(cons 0 "TEXT")
			(cons 10 pt)
			(Cons 40 1.80)
		  )
		  (mapcar '(lambda (d) (assoc d atrEnt)) '(8 1 50))
	  )
	)
      )
    )    (princ)
  )
Mensaje 3 de 4

nuelma19965BFNT
Participant
Participant

Hola amigo, buenas tardes, te doy las gracias por tu tan pronta respuesta y por la rutina lisp, es exactamente lo que buscaba me funciona a la perfección, es genial, quisiera que por favor me explicaras como la hiciste.

0 Me gusta
Mensaje 4 de 4

pbejse
Mentor
Mentor
Solución aceptada

@nuelma19965BFNT wrote:

Hola amigo, buenas tardes, te doy las gracias por tu tan pronta respuesta y por la rutina lisp, es exactamente lo que buscaba me funciona a la perfección, es genial, quisiera que por favor me explicaras como la hiciste.


 

Here you go

(defun c:demo ( / atr pt );	<- local variables, set to nil after the program ends
  (if (and
	(setq atr (car (nentsel "\nSelect Attribute")))		; nested selection
	(setq pt (getpoint "\nPick point for TEXT location:"))	;  prompt the user to select a point
	)							;    on the screen
    (progn
      (setq atrEnt (entget atr))				; this will give you the data of the
      								; selected attribute			
  	(entmakex						; Makes a new object or entity, in this case 
	  (append (list	(cons 0 "TEXT")				; a TEXT object
			(cons 10 pt)				; 10 is DXF code for insertion point
								; PT is the value for getpoint
			(Cons 40 1.80)				;<-This is hardcoded TEXT height
		  )
;;	This line will get the current value of the selected attribute	;;
;;	8 = Layer, 1 = string, 7 = Textstyle, 50 = rotation		;;
		  (mapcar '(lambda (d) (assoc d atrEnt)) '(8 1 7 50 ))
;;									;;
	  )
	)
      )
    )    (princ)
  )

 

Hope this helps [ Espero que esto ayude ]