Como automatizar linea ocultas??

dudas y consultas sobre AutoCad

Moderador: Moderadores

Responder
elzuma
En prácticas
Mensajes: 15
Registrado: Vie Nov 07, 2008 8:02 pm

Como automatizar linea ocultas??

Mensaje por elzuma » Vie Nov 07, 2008 9:08 pm

HOla a todos, os leo desde hace tiempo y he pensado en participar activa-mente en el foro, y me he propuesto para el 2009 aprender de una puñetera vez AUTOLISP.

Me preguntaba para ir abriendo boca como se puede hacer la siguiente rutina o automatización.

Necesito que marcando dos puntos de una linea cualesquiera, el segmento entre esos dos puntos los separe de la linea y los pase a otra capa por ejemplo una que se llame oculta.

Seria bastante util para dibujar una pieza del tiron sin preocuparse que va oculto y que no y una vez lo tengas dibujado, decir de aqui hasta aqui oculto esto visto...


No necesito que me lo deis resuelto del tiron, sino que me guieis un poco de por donde deben ir los tiros.
Saludos a todos.

elzuma
En prácticas
Mensajes: 15
Registrado: Vie Nov 07, 2008 8:02 pm

Mensaje por elzuma » Lun Nov 10, 2008 6:18 pm

Nadie se anima a darme una pista??

Avatar de Usuario
Afga
Moderador
Moderador
Mensajes: 886
Registrado: Lun Sep 04, 2006 4:10 pm

Mensaje por Afga » Lun Nov 17, 2008 10:08 am

1º creas la capa OCULTA que mencionas con su nombre, color y tipo de línea que necesites.
2º mediante "getpoint" obtienes los extremos de la zona de la línea a ocultar.
3º con el comando _break parte la línea entre los dos puntos anteriormente seleccioandos
4º seleccionas la capa necesaria mediante la variable CLAYER (capa OCULTA).
5º mediante el comando línea dibujas la nueva linea en la capa OCULTA entre los dos puntos indicados en el paso 2º.

Recuerda los enlaces en donde se publicaron que había buenos manuales por internet. Saludos

elzuma
En prácticas
Mensajes: 15
Registrado: Vie Nov 07, 2008 8:02 pm

Mensaje por elzuma » Jue Nov 20, 2008 8:11 pm

estoy atascado. no me funciona le comando getpoint.

Sigo investigando.

elzuma
En prácticas
Mensajes: 15
Registrado: Vie Nov 07, 2008 8:02 pm

Mensaje por elzuma » Jue Nov 20, 2008 8:20 pm

Me acabo de dar cuenta que son variables y comandos de lisp, ok, voy a ver si me pongo con mi primer LISP.

elzuma
En prácticas
Mensajes: 15
Registrado: Vie Nov 07, 2008 8:02 pm

Mensaje por elzuma » Mié Nov 26, 2008 9:30 pm

Voy bien encaminado con la rutina?¿

;;;RUTINA PARA CREAR LINEAS OCULTAS;;;
;;;SE SELECCIONAN DOS PUNTOS DE UNA;;;
;;;LINEA Y EL SEGMENTO ENTRE ESOSO ;;;
;;;DOS PUNTOS VA A PARAR A A UNA ;;;
;;;CAPA QUE SE LLAMA OCULTA;;;
(DEFUN C:LINEAOCULTA ()
--(SETQ P1 (GETPOINT "INTRODUCE EL PUNTO INICIAL: "))
--(SETQ P2 (GETPOINT "INTRODUCE EL PUNTO FINAL: "))
--(COMMAND "_BREAK" P1 P2)
--(COMMAND "CLAYER" OCULTA)
--(COMMAND "_LINE" P1 P2)
)

Como hago para ejecutarla??

Avatar de Usuario
Afga
Moderador
Moderador
Mensajes: 886
Registrado: Lun Sep 04, 2006 4:10 pm

Mensaje por Afga » Jue Nov 27, 2008 11:57 am

Mejor algo tal que así, no?

;;;RUTINA PARA CREAR LINEAS OCULTAS;;; 
;;;SE SELECCIONAN DOS PUNTOS DE UNA;;; 
;;;LINEA Y EL SEGMENTO ENTRE ESOSO ;;; 
;;;DOS PUNTOS VA A PARAR A A UNA ;;; 
;;;CAPA QUE SE LLAMA OCULTA;;;

;; //////////////////////////////////////////////////////////////////////////
;; control de errores                                                        

(defun err_loc (msg
   
     (
if msg 
       (princ (strcat " Error - " msg)) 
     ) 
      (
setq *error* locerr locerr nil
      (
princ
      (
princ "\n\nTeclee \"LOCULTA\" o ENTER para ejecutar el comando"

)
 ;_end defun errcsup

;; ////////////////////////////////////////////////////////////////////////// 

(defun c:LOCULTA (/ locerr capa refenti p1 p2 ent)

  (
vl-load-com)
  (
setq locerr *error* *error* err_loc
  (
vl-cmdf "_undo" "_begin")
  (
setq capa (getvar "clayer"))  ;obtenemos el valor de la capa actual en una variable
  (setq refenti (getvar "osmode")) ;obtenemos el valor de la referncia a objetos actual en una variable

  (while            ;ciclo para poder ejecutar la orden en varias lineas ejecutándola solo una vez
  (setvar "osmode" 547)
  (
setq p1 (getpoint "\nIndique PRIMER punto: "))  ;obtenemos primero punto de corte
  (setq p2 (getpoint "\nIndique SEGUNDO punto: " p1)) ;obtenemos segundo punto de corte
  (setq ent (ssname (ssget "_c" p1 p2 '((0 . "line"))) 0))   ;obtenemos la entidad seleccionada mediante los puntos

  (setvar "osmode" 0)  ;ponemos el valor de la referncia a objetos a cero.
  (vl-cmdf "_break" ent "" p1 p2)

  ;comprobamos si la capa "OCULTA" a crear existe en el dibujo o no.
  (if (= (tblsearch "LAYER" "OCULTA") nil)
      (
vl-cmdf "_-layer" "_make" "OCULTA" "_color" "2" "" "_ltype" "Continuous" "" "")  ;crea y activa la capa oculta
      (setvar "CLAYER" "OCULTA") ;seleccionamos la capa deseada.
  )

  (
vl-cmdf "_line" p1 p2 "")
  )
 ;_end de while o de ciclo

  (setvar "clayer" capa)   ;restauramos la capa
  (setvar "osmode" refenti)  ;restauramos el valor de la referencia a objetos

  (vl-cmdf "_undo" "_end")
  (
princ)
  (
princ "\n\nTeclee \"LOCULTA\" o ENTER para ejecutar el comando")

)
 ;end defun LOCULTA

(princ)
(
alert "\nNueva función recorte de lineas cargada - Pulse \"LOCULTA\" para ejecutarla
    \tDesigned by JSR - noviembre de 2008"
)


Insisto en que te mires los post en donde se enumeron los numerosos manuales que hay por internet. Así empezamos todos.

Para saber como se ejecutan estas ordenes, en este enlace hay un tutorial de como hacerlo.
viewtopic.php?t=1914

Solo una mención a esta rutina. Solo funciona para lineas y no debe haber entidades superpuestas.

Saludos :wink:

elzuma
En prácticas
Mensajes: 15
Registrado: Vie Nov 07, 2008 8:02 pm

Mensaje por elzuma » Jue Nov 27, 2008 12:32 pm

Edito: Acabo de probar la rutina y aunque hay partes de ella que no entiendo lo que hacen, ya me las estudiare este fin de semana, no funciona bien, he dibujado para probar un monto de lineas que se cruzan enre si y no funciona correctamente, yo creo que es por el comand o partir, quizas lo que tenga que hacer es recortar y redibujar porque hay veces que cortal a las perperndiculares a la linea.

¿quieres decir que no vale para polilineas, a que te refieres con entidades? ¿a bloques?.

Perdón por la ignorancia.

Avatar de Usuario
Afga
Moderador
Moderador
Mensajes: 886
Registrado: Lun Sep 04, 2006 4:10 pm

Mensaje por Afga » Jue Nov 27, 2008 5:07 pm

elzuma escribió:Edito: Acabo de probar la rutina y aunque hay partes de ella que no entiendo lo que hacen, ya me las estudiare este fin de semana, no funciona bien, he dibujado para probar un monto de lineas que se cruzan enre si y no funciona correctamente, yo creo que es por el comand o partir, quizas lo que tenga que hacer es recortar y redibujar porque hay veces que cortal a las perperndiculares a la linea.

¿quieres decir que no vale para polilineas, a que te refieres con entidades? ¿a bloques?.

Perdón por la ignorancia.
La rutina funciona bien, pero como ya dije solo está programada para funcionar con lineas y no se pueden superponer entidades (o lo que tu dices como un monton de líneas que se cruzan). Esto lo dije al final del post en donde expuse la aplicación.

Decir que yo la expuse como base para si quieres adaptarla a tus neesidades y mejorarla. También decirte que si quieres iniciarte en Lisp , creo deberias empezar por algo más básico, e ir poco a poco adquiriendo conocimientos nuevos. No se aprende Lisp en dos días, y menos a saber como entiende el lenguaje de programación AutoCAD y como deben estructurarse las aplicaciones.

Saludos :wink:

elzuma
En prácticas
Mensajes: 15
Registrado: Vie Nov 07, 2008 8:02 pm

Mensaje por elzuma » Mié Dic 03, 2008 7:54 pm

Sigo dándole vueltas a esta rutina, me he empapado casi todo el material que me recomendasteis.

Se podría plantear el comando de la siguiente manera?

Se me ha ocurrido que se puede junto con las ordenes de poner primero poner delante... que cuando pongas algo por encima lo de debajo se ponga en discontinua, no se si es posible o ya me estoy pasando.

¿como lo enfocaríais? no quiero que me deis código, sino como se enfocaría.

Gracias.

elzuma
En prácticas
Mensajes: 15
Registrado: Vie Nov 07, 2008 8:02 pm

Mensaje por elzuma » Mar Mar 24, 2009 1:33 pm

Agfa te he mandado un correo relativo a este asunto ¿lo has recibido?

elzuma
En prácticas
Mensajes: 15
Registrado: Vie Nov 07, 2008 8:02 pm

Mensaje por elzuma » Jue Abr 23, 2009 5:59 pm

Agfa, posteo este mensaje para preguntarte si has recibido mi correo.

Saludos.

Responder