home *** CD-ROM | disk | FTP | other *** search
/ PC Electronics for your PC / pcelectronics.bin / Elec_dos / SUBDWG / LSP / CVISTA.LSP < prev    next >
Lisp/Scheme  |  1994-10-27  |  4KB  |  112 lines

  1.  
  2. ;************************************************************************
  3. ;* Comando: cvista()
  4. ;* Comentarios: este comando se utiliza para crear las distintas vistas
  5. ;* de los equipos de las subestaciones. A partir del dibujo se generan
  6. ;* los bloques de las vista, la vistas se nombran de la siguiente forma
  7. ;* (prefijo)+"_"+(nombre equipo) donde prefijo puede ser: "x", "y", "z",
  8. ;* "-x", "-y", "-z", "3d", "ala". Por ejemplo "ala_desconectador"
  9. ;************************************************************************
  10. ;
  11. ; change.log
  12. ; 26/10/94    C.Perigault    Se arreglo una mala ubicacion de los parentesis
  13. ;                            que cerraban el defun de cVista, confundiendo 
  14. ;                            la funcion rotacion
  15. ;
  16. ; 26/10/94    C.Perigault    El angulo de rotacion del ala debe ser 90 (y no 0)
  17.                              en la ListaRotacion
  18.  
  19. (defun c:cVista ( / osmode cmdecho gridmode ListaRotacion
  20.             NombreEquipo vista insercion conjunto
  21.             NombreBloque reemplazar temp NombreEquipo)
  22.   (setq ucs 1)
  23.   (setq wcs 0)
  24.   ; guardamos el estado del sistema del usuario
  25.   (setq osmode   (getvar "OSMODE"  ))
  26.   (setq cmdecho  (getvar "CMDECHO" ))
  27.   (setq gridmode (getvar "GRIDMODE"))
  28.   (setvar "GRIDMODE" 0)
  29.   (setvar "CMDECHO"  0)
  30.   (setvar "OSMODE"   0)
  31.   ; en esta lista se guardan la rotaciones que se le deben hacer
  32.   ; al bloque para que al insertarse lo hagan segun la vista
  33.   (setq ListaRotacion '(("x"   ( 90 0  90))
  34.             ("y"   ( 90 0 180))
  35.             ("z"   (  0 0   0))
  36.             ("-x"  ( 90 0 -90))
  37.             ("-y"  ( 90 0   0))
  38.             ("-z"  (180 0   0))
  39.             ("3d"  (  0 0   0))
  40.             ("ala" ( 90 0   0))))
  41.  
  42.    (setq NombreEquipo (getstring "\nIngrese el nombre del equipo : "))
  43.    (setq vista nil)
  44.    (while (not (equal vista "quit"))
  45.      (initget 1 "x y z -x -y -z 3d Ala Quit")
  46.      (setq vista (strcase (getkword "\nx/y/z/-x/-y/-z/Ala/3d/Quit : ")t))
  47.      (if (not (equal vista "quit"))
  48.        (progn
  49.      ; seleccionamos el bloque y su punto de insercion
  50.      (setvar "OSMODE" osmode)
  51.      (setq insercion (getpoint "\nPunto de insercion :"))
  52.      (setvar "OSMODE" 0)
  53.      (setq conjunto (ssget))
  54.  
  55.      (setq NombreBloque (strcat vista "_" NombreEquipo))
  56.      ; vemos si el bloque existe de ser asi le preguntamos
  57.      ; al usuario si desea redefinirlo
  58.      (if (tblsearch "BLOCK" NombreBloque)
  59.        ; si existe preguntamos al usuario si desea reemplazarlo
  60.        (progn
  61.          (initget 1 "Si No")
  62.          (setq reemplazar
  63.          (strcase
  64.            (getkword
  65.          (strcat "\nEl bloque " NombreBloque " ya existe reemplazarlo (s/n)"))t))
  66.          (if (equal reemplazar "si")
  67.            (progn
  68.          ; debemos copiar el bloque ya que al crearlo lo borramos
  69.          (command "COPY" conjunto "" '(0 0 0) '(0 0 0))
  70.          ; aplicamos las rotaciones necesarias para que se inserte
  71.          ; segun la vista
  72.          (setq temp (cadr (assoc vista ListaRotacion)))
  73.          (Rotacion conjunto insercion (car temp) (cadr temp) (caddr temp))
  74.          (command "BLOCK" NombreBloque "Y" insercion conjunto "")
  75.          (redraw))))
  76.      (progn
  77.        ; debemos copiar el bloque ya que al crearlo lo borramos
  78.        (command "COPY" conjunto "" '(0 0 0) '(0 0 0))
  79.        (setq temp (cadr (assoc vista ListaRotacion)))
  80.        ; aplicamos las rotaciones necesarias para que se inserte
  81.        ; segun la vista
  82.        (Rotacion conjunto insercion (car temp) (cadr temp) (caddr temp))
  83.        (command "BLOCK" NombreBloque insercion conjunto "")
  84.        (redraw))))))
  85.   ; volvemos al estado original de acad
  86.   (setvar "GRIDMODE" gridmode)
  87.   (setvar "OSMODE"   osmode  )
  88.   (setvar "CMDECHO"  cmdecho )
  89. )
  90.  
  91. ;********************************************************************
  92. ;* Funcion : Rotacion (conjunto punto rx ry rz)
  93. ;* Parametros :
  94. ;*              - conjunto : entidades que se desean rotar
  95. ;*              - punto    : punto de rotacion
  96. ;*              - rx       : rotacion con respecto al eje x
  97. ;*              - ry       : rotacion con respecto al eje y
  98. ;*              - rz       : rotacion con respecto al eje z
  99. ;********************************************************************
  100. (defun Rotacion (conjunto  punto rx ry rz)
  101.   (setq punto (trans punto ucs wcs))
  102.   (command "UCS" "Y" "90")
  103.   (command "ROTATE" conjunto "" (trans punto wcs ucs) rx)
  104.   (command "UCS" "P")
  105.   (command "UCS" "X" "-90")
  106.   (command "ROTATE" conjunto "" (trans punto wcs ucs)  ry)
  107.   (command "UCS" "P")
  108.   (command "ROTATE" conjunto "" (trans punto wcs ucs)  rz)
  109.  
  110. )
  111.