22 mar 2008

Cambiar un determinado tipo de bloque por otro dando los nombres:


;| Hacer un comando para cambiar un tipo de bloque
por otro........
------------------------------------------------------|;
(defun c:cambia_bloq ( /
cmdant
osmant
nombre_ant
sel
cont
nombre_post
bloque
data
)
;| Guardo valores de variables
y las establezco en 0: |;
(setq cmdant (getvar 'cmdecho))
(setvar "cmdecho" 0)
(setq osmant (getvar 'osmode))
(setvar "osmode" 0)
;| Pide el nombre del bloque a
cambiar, es el nombre asignado por el usuario,
luego hace una seleccion por nombre,
de todos los bloques
en todas las capas ....
Y pide el nombre del nuevo bloque: |;
(setq nombre_ant (getstring "\nDar nombre de bloque a cambiar: ")
sel (ssget "_X" (list (cons 0 "INSERT")(cons 2 nombre_ant)))
cont 0
nombre_post (getstring "\nDar nombre de bloque nuevo: ")
)
;| En un buclé "repeat" que se repite tantas
veces como bloques hayamos seleccionado,
extrae nombre de entidad-autocad de cada uno,
con ello extrae la lista-data de cada bloque,
modifica el nombre en esa lista-data,
con la nueva lista-data modifica el objeto con "entmod"
y luego recrea la imagen del bloque con "entupd": |;
(repeat
(sslength sel)
(setq bloque (ssname sel cont))
(setq data (entget bloque))
(setq data (subst (cons 2 nombre_post) (assoc 2 data) data))
(entmod data)
(entupd bloque)
(setq cont (+ cont 1))
);repeat
;| Vuelve atrás valores de variables: |;
(setvar "cmdecho" cmdant)
(setvar "osmode" osmant)
(princ)
)
;fin defun

12 mar 2008

Comando "chcolor" en vlisp, para seleccionar objetos por color y cambiar color por otro:

;;;----Rutina "chcolor"
;;;----pide numero de color a buscar
;;;----y numero de color nuevo
;;;----selecciona objetos segun color
;;;----y cambia color por el nuevo
;;;----luego queda indicada la
;;;----selección.
;;;***********************************************************
;;;*(c) by Prexem - Víctor Adolfo Bracamonte - 2008*
;;;***********************************************************
(defun c:chcolor ( /
color-busc
newcolor
sel
cant
index
selxcol
ent
vla-obj
color-obj
)
(vl-load-com)
(setq color-busc
(getint
"\nDar numero del color buscado: "
)
newcolor
(getint
"\nDar numero del color nuevo: "
)
)
(setq sel (ssget "_X")
cant (sslength sel)
index 0
selxcol (ssadd)
)
(repeat cant
(setq ent (ssname sel index)
vla-obj (vlax-ename->vla-object ent)
color-obj (vla-get-color vla-obj)
)
(if (equal color-busc color-obj)
(setq selxcol (ssadd ent selxcol))
);if
(setq index (1+ index))
);repeat
(command "_chprop" selxcol "" "c" newcolor "")
(sssetfirst nil selxcol)
(prompt "\n*ESCAPE para deseleccionar*")
(princ)
);fin defun

10 mar 2008

Rutina vlisp para numerar secuencialmente bloques desde un número inicial dado:

;;; Numerador secuencial de bloques
;;; comando "num_bl"
;;; (c) by PREXEM -
;;; Víctor Adolfo Bracamonte - 2008.
;;;*************************************
(defun c:num_bl (/
osmodant
cmdant
mob_bl
sel
n
numero
cont
bl
pt0
pttext
)
(setq osmodant (getvar 'osmode))
(setvar "osmode" 0)
(setq cmdant (getvar 'cmdecho))
(setvar "cmdecho" 0)
(setq nomb_bl
(getstring t "\nDar nombre del bloque: ")
)
(prompt "\nSeleccione Bloques : ")
(setq sel (ssget
(list
(cons 0 "INSERT")
(cons 2 nomb_bl)
)
)
n (sslength sel)
numero (getint "\nDar numero inicial: ")
cont 0
)
(repeat n
(setq bl (ssname sel cont)
pt0 (cdr (assoc 10 (entget bl)))
pttext (mapcar
'+
pt0
(list 10 10 0)
)
)
(command "_.text"
"_J"
"_R"
pttext
""
""
(itoa numero)
)
(setq cont (1+ cont)
numero (1+ numero)
)
);repeat
(setvar "osmode" osmodant)
(setvar "cmdecho" cmdant)
(princ)
);fin defun

5 mar 2008

Video Tutorial para hacer bloques dinámicos en español:

Un video que muestra detalladamente y paso a paso la construcción de un bloque dinámico de

una vista de una mesa de ancho variable (Archivo de 9,5 minutos y 36 Mb de peso):