AutoCad - AutoLISP: Ayuda para generar esto.

   
Vista:
Imágen de perfil de Nicolás

AutoLISP: Ayuda para generar esto.

Publicado por Nicolás (21 intervenciones) el 20/04/2015 16:42:40
Hola programadores, tengo poco manejo por no decir nada en este lenguaje, y me ayudaría mucho hacer lo siguiente...

Tengo una gran variedad de puntos en el espacio (x,y,z) y quisiera que al ejecutar el comando, al tocar uno de esos puntos me creara un texto al lado con la cota "("z")" en otra capa, mas la creación del mismo punto en otra capa.

Es decir, quedan 3 capas:
-PUNTOS: donde están todos los puntos
-COTA: donde están las cotas de los puntos seleccionados
-PUNTOSSEL: donde están los puntos seleccionados

Pueden haber variaciones, ya que no se hasta que punto se puede hacer la idea. No tengo mucho tiempo como para investigar por eso les pido su ayuda, gracias

Ya si saben que comandos me pueden servir, me ayuda un monton
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
información
Otras secciones de LWP con contenido de AutoCad
- Cursos de AutoCad
- Temas de AutoCad
- Chat de AutoCad
información
Cursos y Temas de AutoCad
- Curso de AutoCad 2015
- Curso de iniciación al Autocad
- 3D Tutorials AutoCAD 2009

AutoLISP: Ayuda para generar esto.

Publicado por Gerardo (443 intervenciones) el 21/04/2015 05:18:51
Si realmente quieres hacer una funcion para eso, creo que con pocas funciones autolisp se logra lo que pides. Creo que las siguientes 10 serian suficientes

defun (para definir un comando)
polar (para calcular puntos de insercion de los textos relativos al punto a rotular)
ssget (para seleccionar todos los puntos)
ssname (para obtener el nombre de entidad de cada punto seleccionado por ssget)
entget (para obtener la lista de definicion DXF de cada punto desde su nombre de entidad)
assoc (para localizar las cordenadas X Y Z del punto que estan en el codigo 10)
car, cdr, cadr, last (para obtener primer, resto, segundo y ultimo elemento de una lista, asi obtiens X Y Z del pto)
setq (para asignar los valores de coordenadas a los puntos seleccionados)
command o entmake (para crear los textos, los nuevos puntos y las capas)
setvar (por si ocupas asignar valores a variables comundes de autocad como osmode o clayer)

Vas al editor de autolisp, das F1 y miras cada una en la ayuda. Tienen una breve explicacion y un ejemplo para que comprendas bien

Ahora bien, si no quieres aprender a programar y es solo por este trabajo no te compliques, hay otras formas de resolverlo:

1-Grabando una macro
2-Buscando una rutina ya hecha. Quizas te toque hacer manualmente la copia de puntos a otra capa lo cual es muy sencillo con el comando selectsimilar, pero al menos lo de rotular puntos debe estar resuelto pro alguien
3-Descargar un trial de 30 dias del AutoCAD Civil 3D, seleccionas todos los puntos, los duplicas en una capa y con un solo comando los puedes convertir todos a puntos cogo, creas un estilo de anotacion con la cota y se rotulan solitos y dinamicamente.

Yo te recomiendo la tercera opcion. Una vez familiarizado con ese programa y teniendolo instalado, lo que te digo se hace en 5 minutos sin importar cuantos puntos tengas.

Ahora bien, si insistes en programar, pues animo con las funciones que te di, comienza a ver que vas armando y por aqui puedes preguntar lo que no te quede claro con la ayuda del autocad
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Nicolás

AutoLISP: Ayuda para generar esto.

Publicado por Nicolás (21 intervenciones) el 21/04/2015 18:02:35
Muchas gracias por tu aporte, por el apuro termine buscando en manuales e internet y conseguí armar el programa.
Ya que la programación es tan compleja lo hice con comandos diferentes, sin embargo agradezco tu ayuda ya que no es el ultimo AutoLISP que pienso hacer y cada comando que aprenda me ayudará (ademas de que puedo mejorar el ya hecho)...

Así es como me quedo:

(defun c:COT ()
(setvar "pdmode" 32)___________________Configuro la
(setvar "pdsize" 0.4)_______________________cota
(setq Pto (getpoint))____________________Elijo el punto
(setq Z (caddr Pto))____________________Extraigo la Z
(command "capa" "e" "pto" "co" "7" "" "")_____Creo la capa
(command "punto" Pto)_________________Creo punto en la capa
(command "capa" "e" "cota" "co" "7" "" "")____Creo otra capa
(setq A (RTOS Z 2 2))__________________Disminuyo a dos decimales y/o saco ceros a la derecha
(setq B (strcat "(" A ")"))_________________Le pongo parentesis a los lados del numero
(setq ref (getvar "osmode"))______________Copio la configuración de referencia a objetos
(setq 3dref (getvar "3dosmode"))__________Copio la configuración de referencia a objetos 3D
(setvar "osmode" 0)____________________Desactivo la referencia a objetos
(setvar "3dosmode" 0)__________________Desactivo la referencia a objetos 3D
(command "texto" "@0.5,0.5" "0.9" 0 B)_____Pongo el texto (al desactivar la referencia no se ubica ensima del punto)
(setvar "osmode" ref)___________________Devuelvo la configuración de referencia a objetos
(setvar "3dosmode" 3dref)_______________Devuelvo la configuración de referencia a objetos 3D
)

Tengo el Autocad 2013 lo cual me ayudo mucho escribiendo primero algunas pruebas en la parte de comandos. No es muuy complejo el programa, pero me ayuda perfectamente a ponerle cotas a los puntos que voy seleccionando...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

AutoLISP: Ayuda para generar esto.

Publicado por Gerardo (443 intervenciones) el 21/04/2015 18:36:40
Bien por ti

Fijate en esta pequeña modificación que le hago a tu código.
A como lo tienes actualmente cada vez que invocas al comando cot procesas un punto y termina el comando, necesitando ser invocado de vuelta.
Metiendo el proceso de dibujado dentro de un bucle "while" y poniendo el (setq Pto (getpoint)) como condición de parada de ese bucle, podras ir procesando puntos mientras el usuario pique en ellos, y terminar cuando se presione intro (o click derecho o barra espaciadora). Asi para multiples puntos solo debes llamar al comando una sola vez.

Ademas he puesto el valor de osnap en 8 - es decir solamente "nodo", para no tener que estar activando osnaps para leer los puntos y desactivándolos para trazar lo nuevo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
(defun c:COT ()
 (setvar "pdmode" 32)
 (setvar "pdsize" 0.4)
 (setq ref (getvar "osmode"))
 (setq 3dref (getvar "3dosmode"))
 (setvar "osmode" 8)
 (setvar "3dosmode" 8)
 
 (while (setq Pto (getpoint))
  (setq Z (caddr Pto))
  (command "capa" "e" "pto" "co" "7" "" "")
  (command "punto" Pto)
  (command "capa" "e" "cota" "co" "7" "" "")
  (setq A (RTOS Z 2 2))
  (setq B (strcat "(" A ")"))
  (command "texto" "@0.5,0.5" "0.9" 0 B)
 )
 
 (setvar "osmode" ref)
 (setvar "3dosmode" 3dref)
)



Y para cuando quieras seguir estudiando autolisp y ver las funciones que te mencione antes, echale un ojo a este otro tipo de bucle. Este te permite que el usuario no tenga que picar en los puntos, sino que le pides que los seleccione como objetos en pantalla y este podría por ejemplo hacer una ventana o un lasso, o escribir "all" y todos los puntos que estén en esa selección serán procesados sin necesidad de ir picando.

1
2
3
4
5
6
7
8
9
10
11
12
(setq n 0)                                  ;contador inicia en cero
(setq seleccion (ssget '((0 . "POINT")))    ;pide al usuario que seleccione puntos
(repeat (sslength seleccion)                ;inicia bucle de tantas repeticiones como puntos en seleccion
    (setq entidad (ssname seleccion n))    ;toma el nombre del n-esimo objeto seleccionado
    (setq n (1+ n))                         ;incrementa n en 1
    (setq listadef (entget entidad))         ;extrae lista de definición de entidad
    (setq PTO (cdr (assoc 10 listadef)))    ;toma las coordenadas del punto desde listadef

    ....
     **Aquí tienes PTO para proceder a hacer lo que quieras con cada uno de ellos**
    ...                                     
)                                            ;fin del bucle repeat
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Nicolás

AutoLISP: Ayuda para generar esto.

Publicado por Nicolás (21 intervenciones) el 21/04/2015 19:45:13
wow, me leíste la mente, me preguntaba como no tener que repetir el comando con cada punto y casualmente hace unos minutos le había cambiado lo del osmode en 8 por si no estaba configurado antes de usar el comando...
La verdad me sirve mucho tus opiniones, inclusive este ultimo bucle me ayudará para otro comando que me pidió mi papá para cuando todo los puntos del plano necesitan cotas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar