Aquí está la macro:
Respuestas del foro
(Foro CAD)
Del colaborador D:
Prueba esta rutina de ceceo.
;Guardar en el archivo dimarc.lsp y
;escriba dimarc en el mensaje
;(número rtos [modo [precisión]])
;1 Científico
;2 decimales
(contras 1 (rtos ArcLength 4 5));<-------
(asociación 1 dimobj)dimobj))
(entmoddimobj))
(Príncipe))
Si ejecutas la rutina lisp desde vlisp, desaparecerá cuando cierres el dibujo y tendrás que recargarla cada vez que quieras usarla. Al agregarlo a su suite de inicio, se cargará automáticamente.
Reemplázalo con esto:
<-------
(asociación 1 dimobj)dimobj))
(entmoddimobj))
(Príncipe))
Cambié el tipo a fracciones cambiando el número 4 a 5 en la declaración (rtos ArcLength 4 5). El primer # representa el tipo a mostrar, de ahí la lista del 1 al 5 al principio de la publicación. El segundo # es la precisión. Cuando se trata de fracciones (el primer # se establece en 5), la precisión es cómo se muestra la fracción.
1 = Número entero (si una dimensión es 2 se leerá 2)
2 = 1/4 más cercano
3 = 1/8 más cercano
4 = 1/16 más cercano
5 = 1/32 más cercano y así sucesivamente
Si observa, el código de reemplazo tiene algo agregado (strcat(rtos ArcLength 5 4) )). Así es como se descompone este fragmento de código. ArchLength es una variable que contiene la longitud real del arco que seleccionó. (Ejemplo:
15,7500)
Rtos es un comando lisp que convierte un número real (es decir, un número que tiene un decimal) en una cadena (es decir, cualquier cosa entre comillas 15.7500). Los dos números que ve después de ArchLength le indican a Rtos cómo convertir la variable ArcLength. En este caso, le dijimos que usara fracciones poniendo el 5 allí y queremos una precisión de 1/16, por lo que Rtos ahora devuelve 15.
Ahora agregamos otro comando lisp strcat. Este comando combina varias cadenas en una sola. Observe la . Esta es una cadena que contiene. Recuerde, una cadena siempre comienza con una comilla y termina con una comilla, por lo que para convertirse en una cadena agrega las comillas iniciales y finales (¿ya está perdido?). Creará la marca de pulgadas que solicitó.
Entonces strcat pone las dos cadenas 15 y juntas para formar 15. ¿Alguna pregunta?
Primera forma:
1. Copie la rutina ceceo. Realice el cambio a la configuración que desee. Cambie el nombre del comando c:
dimarc a c:
dimarc2 o lo que sea adecuado para usted, siempre y cuando no sea un comando existente de AutoCAD, y deje siempre el comando c:
. La c:
es lo que lo hace disponible para escribir en la ventana de comandos.
2. Guardar como nuevo nombre.lsp
3. Repita el procedimiento hasta que tenga una rutina configurada para cada tipo que desee.
4. Ahora agréguelos a su suite de inicio. Puede escribir el nombre de la rutina o puede crear un par de botones para llamar a las distintas rutinas por usted.
Ejemplo:
si nombraste una de las rutinas c:
dimarc2, crea un botón e ingresa la macro ^C^Cdimarc2; y llamará a la rutina cuando se haga clic. ^C^C borra el último comando. No es necesario que pongas la C:
solo el nombre y asegúrate de poner el punto y coma al final.
Segunda forma (sobre la marcha):
Configure un par de variables para el tipo y la precisión y una para la respuesta rápida a la pregunta.
No puedes usar la palabra tipo porque es un comando ceceo, así que usemos typ y prec.
Ahora configure la pregunta rápida que se le hará.
Para evitar ingresar datos incorrectos, usaremos el comando initget para limitar cuál será la respuesta. (initget SDEAF 1) la s es para Científico. La d es para decimal y así sucesivamente. Puedes eliminar la letra de las que no quieras, solo asegúrate de que haya un espacio entre cada letra.
Ahora solicite la respuesta (answ es la variable que contendrá la respuesta).
(setq respuesta (strcase(getkword Científico,Decimal,Ingeniería,Arquitectura,Fraccional:
)))
Simplemente escriba la primera letra de lo que desee. strcase convertirá todo lo que escribas a una letra mayúscula.
Ahora escriba un par de declaraciones if para configurar las dos variables como desee.
Le sugiero que predetermine la precisión de cada tipo para simplificar las cosas.
Sigamos con el espectáculo. Yo haré uno, tú haces el resto. Necesitará uno para cada respuesta disponible.
(if (= respuesta S )(setq typ 1 prec 3));_end if Scientific:
esta es una nota.
Ahora cree las otras declaraciones if, una para cada tipo que desee.
Ahora tenemos tres cosas que hacer.
1. Reemplace los números existentes en el código con nuestras nuevas variables.
(rtos ArcLength 5 5) se convierte en (rtos ArcLength typ prec)
2. Encuentra un lugar para colocar todo el código interesante que creamos al principio. Al observar el código, el colaborador D anticipó el error del usuario, como debería hacerlo cualquier buen programador. Encontrará un lugar justo después de que le solicite Seleccionar un Arco que verifica nuevamente que la selección sea un ARCO. Si el objeto es un ARC, procesa las siguientes líneas de código. De lo contrario, los omite y muestra el mensaje Esto no es ningún arco. Entonces queremos que nuestras cosas estén en la parte que solo se ejecuta si el objeto es un arco. Eso está justo después del comando lisp (prong. Pega todo ese código nuevo y radical que creaste justo después del (prong).
(declaración inicial)
(declaración rápida)
(si declaraciones)
3. ¡Mata tu variable! Como buen programador, das vida y debes quitarla. De lo contrario, tu variable te atrapará cuando menos lo esperes. No respetan a su creador y, por tanto, deben morir cuando ya no sean necesarios.
Para eliminar su variable, simplemente agréguelas a las que creó el colaborador D
(defun c:
dimarc ( / arclength center dimobj en endpoint obj startpoint)
La parte del fragmento de código anterior (/arclength center dimobj y endpoint obj startpoint) es donde haces esto. Simplemente agregue typ prec y responda al final de la lista
( / arco longitud centro dimobj en punto final obj punto de inicio tipo prec respuesta)
¡Guarda tu rutina ahora!
Cárgalo y pruébalo, si funciona. ¡Gran trabajo! Si tu computadora falla y explota en mil millones de pedazos, nunca te conocí y no tengo ni idea de lo que estás hablando.
La cuarta y última forma es reemplazar
(contras 1 (rtos ArcLength 4 5))
con
Esto retomará la configuración de estilo de dimensión actual.
Ahora todo lo que tenemos que hacer es introducir el sufijo del interrogador para las fracciones.
(setq dimobj (entget (entlast))
dimobj (sustituto
<-------
(asociación 1 dimobj)dimobj)))
(pronóstico
(setq dimobj (entget (entlast))
dimobj (sustituto
<-------
(asociación 1 dimobj)dimobj))))
coloque el código anterior entre:
y
(entmoddimobj))
Sobrescribiendo todo lo que hay en el medio.
(desfunción c:
spdim()
)
Cargue el archivo en AutoCAD mediante:
Aquí hay una línea macro en AutoCAD para el horizonte tenue: ^C^Cspdim;dim;hor;\\