[AUTOLISP] Cómo obtener el código field de todos los atributos de mi bloque.

Dudas y consultas sobre CAD. AutoCAD, Microstation y resto de aplicaciones CAD

Moderador: Moderadores

Responder
Fernix
En prácticas
Mensajes: 2
Registrado: Mar Jun 30, 2020 3:05 am
Contactar:

[AUTOLISP] Cómo obtener el código field de todos los atributos de mi bloque.

Mensaje por Fernix »

Hola gente, como están, tengo una consulta sobre un código lisp.

Lo que quisiera hacer con el codigo es que en lugar de obtener los valores de los atributos, obtenga los datos necesarios para insertarlo como un "field".

Paso a mostrar cómo obtengo lo que quiero manualmente:
-Primero en donde lo quiero insertar doy click derecho e insertar campo, objetos y para seleccionar ó CTRL+F
1.png
1.png (8.05 KiB) Visto 6767 veces
-Y acá ya obtengo el código:
3.png
3.png (30.3 KiB) Visto 6767 veces
%<\AcObjProp Object(%<\_ObjId 2768815267232>%).TextString>%
Lo que me gustaria saber es si con lisp hay alguna manera de generar ese código de todos los campos;insertarlo no seria mayor problema pero generarlo es mi duda; para que al cambiar uno de los bloques el otro se actualice automaticamente.

Desde ya muchas gracias, y saludos a todos.

Plannerly ™ La plataforma de gestión BIM ™ SmartLeanBIM® © 2021
Plantillas para crear el Plan de Ejecución BIM (BEP). Cumplimiento de la norma ISO-19650
Plan gratuito en el que puedes acceder a todas las plantillas y si al comprarlo introduces el código DELINEACION obtendrás un 10% de descuento
Avatar de Usuario
javi lapina
Auxiliar
Mensajes: 51
Registrado: Sab Abr 14, 2018 7:33 pm
Contactar:

Re: [AUTOLISP] Cómo obtener el código field de todos los atributos de mi bloque.

Mensaje por javi lapina »

No se si te sirve, pero este lisp copia el valor de un atributo a otro atributo, con campo.

Código: Seleccionar todo

;------------------COPIA EL CONTENIDO DE UN atributo y lo pega a otro atributo CON UN CAMPO ----------------
(princ "\nEjecuta la aplicacion con la oreden:  MTB2")
(defun C:MTB2 (/  ename enam data ss)
;;;	pBe Dec2014			;;;
  (while (not
	   (progn
	     (princ "\n<<<Select blocks to process>>>")
	     (setq ename (ssget "_:S:E" '((0 . "INSERT") (66 . 1))))
	   )
	 )
    (princ "\nInvalid or null selection")
  )
  (cond
    ((and
       (setq enam (ssname ename 0))
       (setq data (_FieldsVal enam t nil));<-- Get Mode & Fields mode
       (princ "\n<<<Select blocks to process>>>")
       (setq ss (ssget "_:L" '((0 . "INSERT") (66 . 1))))
       (repeat (setq i (sslength ss))
	 (_FieldsVal (ssname ss (setq i (1- i))) nil data);<-- Set Mode 
       )
     )
    )
  )
  (vla-regen (vla-get-ActiveDocument (vlax-get-acad-object))
	     acActiveViewport
  )
  (princ)
)
   

;;;		    <<< pBe >>>				;;;
;;; 	Subfunction to Attribute Set/Get Fields/TEXT	;;;
;;;	blk = The attribute block			;;;
;;;	mode 	= T for Field Values			;;;
;;;  		= nil for String Values			;;;
;;;	lst	= If supplied, function in Set Mode     ;;;
;;;		= nil for Get Mode			;;;
  
  (defun _FieldsVal (blk mode lst / m f)
    (setq f (if	mode
	      (lambda (e)
		(strcat "%<\\AcObjProp Object(%<\\_ObjId "
			(itoa (vla-get-ObjectId e))
			">%).TextString>%")
	      )
	      (lambda (e) (vla-get-textstring e))
	    )
    )
    (mapcar '(lambda (at)
	       (if lst
		 (if (setq m (assoc (vla-get-tagstring at) lst))
		   (vla-put...-textstring at (cadr m))
		 )
		 (list (vla-get-tagstring at) (f at))
	       )
	       )
	    (vlax-invoke (vlax-ename->vla-object blk) 'Getattributes)
    )
  )
;;;		End of _FieldsVal			;;;

(vl-load-com)
Master en AutoCad y sigo aprendiendo.....
Fernix
En prácticas
Mensajes: 2
Registrado: Mar Jun 30, 2020 3:05 am
Contactar:

Re: [AUTOLISP] Cómo obtener el código field de todos los atributos de mi bloque.

Mensaje por Fernix »

Me sirvio muy util.. aun intento entender esas funciones para poder modificarlo pero de momento me va muy bien.
Consulta rápida, que tan dificil sería meter una pausa en el codigo para poder selecionar bloques (ya que ahora no me estaria siendo posible) que estén en presentaciones diferentes ?

Un saludo.
Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 38 invitados