1 abr 2008

Archivos scripts para hacer rutinas (*.scr):


Con el comando "_script" de AutoCAD,
se pueden llamar archivos de extensión "*.scr"
realizados en el bloq de notas, siguiendo
lineas de comandos que reproducen
acciones completas del usuario, solo
se deben grabar las líneas introducidas
en la ventana de comandos, en un
orden cuidado.......Este método es
extremadamente sensible a los espacios
en blanco y a los saltos de lineas.
Todo script termina con el cursor en
la linea siguiente a la última órden
pero en el borde sin crear espacio en blanco
y todo salto de linea o línea en blanco
equivale a un ENTER.
(****Siempre al terminar cualquier comando de autocad, si se da ENTER,
repite el comando****).
En _script todo espacio vacio es un ENTER.
---------------------------------------
Un ejemplo:
Quiero tener un script que me haga
2 circulos concentricos de radios
300 y 500:
El script sería:
-----------------------------------
_circle
0,120
300

0,120
500

--------------------------------------ver adjunto
Otro ejemplo:
Hacer un script que audite y purgue un archivo:
sería:
----------------------------------------
_audit
_y

_purge
_a
*
_n

-----------------------------------------ver adjunto
*Al margen:
Si quiero repetir el último script ejecutado
ingreso el comando "_rscript".
Y si quiero poner comentarios dentro del
script hago lo mismo que en Autolisp,
punto y coma ";" y la linea siguiente
es comentario, pero por ser un script
tan sensible a los espacios en blanco,
no recomiendo poner lineas extras en él,
para poder concentrarse en lo importante
que es la secuencia de comandos con los
espacios "exactos"........

27 mar 2008

Lenguajes de programación en AutoCAD:

Tabla resúmen de los lenguajes usuales para programar en AutoCAD:
*Click en la imágen para ampliar*


26 mar 2008

Comando "fsigpl": para escribir un texto o frase siguiendo la curvatura de un objeto lineal de base.

Supongamos que necesito escribir una frase cualquiera
siguiendo una curva dada, entonces dibujo un objeto
lineal que me sirva de eje, el cual lo pedirá la rutina,
y luego queda solo el texto curvado y borra el eje:




;|*********************************************
Rutina "fsigpl" frase que sigue
la curva de un objeto lineal........
*********************************************
by (c) Prexem Victor Adolfo Bracamonte 2008
*********************************************
-------- www.prexem.blogspot.com -------
*********************************************|;
(prompt
"\n****La rutina requiere
\nun objeto lineal para eje del texto\n*****"
)
(defun bloqtextinmeasure (/ capa_ant alt
frase cant_espacios
plineb osmant picant
vla_plineb pt long_plineb
separac ent_text cont
dat_text pt_inic ang_rotac
ang_rotac_text caract
eras
)
(vl-load-com)
(setq capa_ant (getvar 'clayer))
(command "_layer" "_m" "c-ap" "_c" "1" "c-ap" "")
(setq alt (getdist "\naltura de texto:")
frase
(getstring t
"\nFrase a escribir en curva:"
)
cant_espacios (strlen frase)
)
(setvar "clayer" "c-ap")
(setq plineb
(car
(entsel
"\nSeleccione polilinea u objeto lineal base:"
)
)
)
(setq osmant (getvar "osmode"))
(setvar 'osmode 0)
(setq picant (getvar "pickbox"))
(setvar 'pickbox 0)
(setq vla_plineb (vlax-ename->vla-object plineb)
pt (vlax-curve-getstartpoint vla_plineb)
long_plineb
(vlax-curve-getdistatparam
vla_plineb
(vlax-curve-getendparam vla_plineb)
)
separac (/ long_plineb cant_espacios)
)
(command "_text" pt alt "0" "b1")
(command "_block" "c-ap" pt (entlast) "")
(setq ent_text (entlast))
(command "_measure" plineb "b" "c-ap" "_Y" separac)
(setvar "clayer" capa_ant)
(setq cont 0)
(repeat cant_espacios
(setq ent_text (entnext ent_text)
dat_text (entget ent_text)
)
(setq pt_inic (cdr (assoc 10 dat_text))
ang_rotac (cdr (assoc 50 dat_text))
ang_rotac_text (angtos ang_rotac 2 2)
caract (substr frase (+ cont 1) 1)
)
(command "_.text" pt_inic alt ang_rotac_text caract)
(setq cont (+ cont 1))
);repeat
(setq eras
(ssget "_X"
(list
(cons 0 "INSERT")
(cons 8 "c-ap")
)
)
)
(command "_erase" eras "")
(command "_erase" plineb "")
(command "_laydel" "_n" "c-ap" "" "_Y")
(command "_purge" "_A" "*" "_N")
(setvar 'osmode osmant)
(setvar 'pickbox picant)
(princ)
);defun
(defun err1 (m)
(progn
(prompt "*Fin de la aplicacion*")
(setvar 'osmode osmant)
(setvar 'pickbox picant)
(princ)
)
)
(defun c:fsigpl (/ errant *error*)
(setq errant *error*
*error* err1
)
(bloqtextinmeasure)
(setq *error* errant)
(princ)
)

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