Macro para observar dimensiones en CAD

Los codificadores de Ace ajustan una macro para observar las dimensiones en el estilo arquitectónico. 17 de marzo de 2005
Pregunta
Acabo de encontrar una macro que dimensiona arcos, pero hay un problema cuando se usa. La dimensión que aparece no adquiere las características de mi estilo de dimensión. Toma el tamaño del texto, pero solo tiene dimensiones en decimales y yo uso unidades arquitectónicas. ¿Cómo puedo reescribir esta macro para que adopte todas las características de mi estilo de dimensión? ¿Hay alguna manera de escribir un nombre funcional (dimarc) para este comando de modo que no tenga que usar el botón de la barra de herramientas cada vez?

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


;3 Ingeniería (pies y pulgadas decimales)
;4 Arquitectónico (pies y fracciones de pulgadas)
;5 fraccionario
(defun c:
dimarc ( / arclength center dimobj en endpoint obj startpoint)
(vl-load-com)



(pronóstico
(setq Obj (vlax-ename->vla-Object en)
ArcLength (vla-get-ArcLength Obj)
Centro (vlax-safearray->list (vlax-variant-value (vla-get-center obj)))
StartPoint (vlax-safearray->list (vlax-variant-value (vla-get-StartPoint obj)))
EndPoint (vlax-safearray->list (vlax-variant-value (vla-get-EndPoint obj))))


(setq dimobj (entget (entlast))
dimobj (sustituto

(contras 1 (rtos ArcLength 4 5));<-------
(asociación 1 dimobj)dimobj))
(entmoddimobj))

(Príncipe))


Del interrogador original:

Gracias. Eso realmente funcionó, considerando que nunca lo había hecho antes. Aquí está mi resumen:
fui a vlisp (nunca había estado allí antes), escribí la cadena... y luego usé el comando, pero nunca se guardó. Supongo que por eso no funcionará en ningún otro dibujo. ¿Algún consejo?

Del colaborador J:

Escribe vlisp
Ingrese a la rutina ceceo
Guarde la rutina lisp en una carpeta que pueda encontrar
En AutoCAD tipo appload
Pulsa en la maleta donde dice start up suite
Navegue hasta la carpeta donde guardó el archivo lisp y agréguelo a su suite de inicio.

Cierre AutoCAD, inicie AutoCAD y estará allí cada vez que abra un dibujo nuevo o antiguo.

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.


Del interrogador original:

Eso es justo lo que necesitaba, gracias.

Del colaborador B:

Yo también soy un novato en lo que respecta a las rutinas de ceceo. ¿Hay alguna manera de cambiar los modos sobre la marcha? Algunos dibujos pueden requerir (2) formato decimal, mientras que otros pueden requerir (4) arquitectónico (pies y fraccionario) u otros pueden necesitar (5) fraccionario, etc. Gracias de antemano por cualquier consejo adicional sobre esto.

Del interrogador original:



Del interrogador original:

Nix la parte de las unidades:
encontré dónde especificaste cuál usar (todavía estoy tratando de aprender la jerga). Pero todavía tengo que descubrir dónde agregar un sufijo.

Del colaborador J:

Vea la sección del código anterior:

(contras 1 (rtos ArcLength 4 5));<-------
(asociación 1 dimobj)dimobj))
(entmoddimobj))

(Príncipe))

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?


Del interrogador original:

Muchas gracias, me has ayudado enormemente. ¡Ahora el comando funciona!

Del colaborador J:

Colaborador B, puedes abordar tu solicitud de dos maneras diferentes.

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.


Del colaborador D:

La tercera forma podría ser simplemente reemplazar la línea.
(contras 1 (rtos ArcLength 4 5))


Esto debería retomar la configuración actual de su unidad.

Del colaborador J:

En primer lugar, eso sería demasiado fácil y funcionaría en algunos casos. La precisión de una dimensión no está controlada por luprec y el tipo de dimstyle no está controlado por lunits, pero diste en el clavo.

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.


Los comentarios a continuación se agregaron después de que esta discusión del foro se archivara como un artículo de la base de conocimientos (add your comment). Comentario del colaborador A:

A continuación se muestra una rutina para cambiar el formato de la dimensión en AutoCAD. No cambia el valor de la dimensión, sin embargo, redondea la dimensión para fracciones (3,758 se convierte en 3). Cuando la tolerancia fraccionaria lo permite, esto no supone un problema. Aquí está la rutina, editada en el bloc de notas, guardada como spdim.lsp:

(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;\\