Página 1 de 1

Como automatizar linea ocultas??

Publicado: Vie Nov 07, 2008 9:08 pm
por elzuma
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.

Publicado: Lun Nov 10, 2008 6:18 pm
por elzuma
Nadie se anima a darme una pista??

Publicado: Lun Nov 17, 2008 10:08 am
por Afga
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

Publicado: Jue Nov 20, 2008 8:11 pm
por elzuma
estoy atascado. no me funciona le comando getpoint.

Sigo investigando.

Publicado: Jue Nov 20, 2008 8:20 pm
por elzuma
Me acabo de dar cuenta que son variables y comandos de lisp, ok, voy a ver si me pongo con mi primer LISP.

Publicado: Mié Nov 26, 2008 9:30 pm
por elzuma
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??

Publicado: Jue Nov 27, 2008 11:57 am
por Afga
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:

Publicado: Jue Nov 27, 2008 12:32 pm
por elzuma
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.

Publicado: Jue Nov 27, 2008 5:07 pm
por Afga
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:

Publicado: Mié Dic 03, 2008 7:54 pm
por elzuma
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.

Publicado: Mar Mar 24, 2009 1:33 pm
por elzuma
Agfa te he mandado un correo relativo a este asunto ¿lo has recibido?

Publicado: Jue Abr 23, 2009 5:59 pm
por elzuma
Agfa, posteo este mensaje para preguntarte si has recibido mi correo.

Saludos.