Utilidades para Cambiar SCP y Vista en 2D

martes, 25 de agosto de 2015

Esta vez voy a compartir unas pequeñas utilidades de cambio de UCS y Vista en 2D.
Muchas veces me he encontrado con proyectos en 2d (plantas, alzado, secciones, etc.) donde es necesario dibujar en otras direcciones (SCP Sistema de coordenadas personales)(UCS en ingles) y ademas cambiar la vista para encontrarnos comodos trabajando. Despues volver a cambiar a otro SCP o al SCU - SCP Universal (WCS - UCS World en ingles) y así sucesibamente.


El proceso para cambiar el sistema de coordenadas de usuario (SCP) y la vista en autocad es simple:
  1. Llamar al comando "SCP" (_UCS) y utilizar "3P" (3 puntos) o "Z"(rotar sobre el eje Z).
  2. Llamar al comando "PLANTA" (_PLAN) para cambiar a la vista del nuevo SCP.
    Nota: Esto no es necesario si la variable "UCSFOLLOW" esta con un valor de 1, ya que con la variable en este modo la vista cambiará automáticamente al cambiar el SCP.
  3. Hacer "ZOOM" y "ENCUADRES" hasta situarnos de nuevo en la zona de trabajo, ya que al cambio de vista se visualiza el dibujo en toda su extensión.

Lo que hacemos con estas utilidades es intentar eliminar pasos que nos ralenticen el trabajo en autocad.
Nuestra orientación de SCP lo acortamos a dos puntos, el primer punto sera el origen de nuestro nuevo SCP y el segundo la dirección X y el tercero (dirección Y) la calculamos por código. De esta manera y como es para dibujo en 2d eliminamos el paso de selección del tercer punto. Pasamos los datos al comando "SCP".
La vista la cambiamos por código y por último restablecemos el centro de la vista y el zoom al nivel con el que estábamos trabajando anteriormente.
Comandos y Descripción.
UCs2P_Vw: Automático. Cambia el SCP indicando dos puntos, cambia la vista al nuevo SCP(UCS) y restaura el factor de zoon al que teníamos.
UCs2P_N: Solo SCP(UCS). Cambia el SCP indicando dos puntos.
UCs2P_?: Pregunta. Cambia el SCP indicando dos puntos y muestra un mensaje para que indiquemos si queremos o no cambiar a la vista del nuevo SCP. Si la respuesta es afirmativa, cambia la vista al nuevo SCP(UCS) y restaura el factor de zoon al que teníamos.
UCsW_Zoom: Cambia el SCP a Universal, cambia la vista al SCU y restaura el factor de zoon al que teníamos anteriormente.
UCs2P_Vw
UCs2P_N
UCs2P_?
UCsW_Zoom
Código.
Select all

;;*************************** 2d UCS Auxiliares ********************************
;;                                                                              
;;Revisiones:                                                                   
;; Versión LaMarmita                                                            
;; José Luis García Galán 24/08/15                                              
;; Versión 1.0.0                                                                
;; José Luis García Galán 27/09/05                                              
;;******************************************************************************

;;-------------------------------- 2D-UCs2P ------------------------------------
;;Función principal                                                             
;;Argument: bChgView : 0 = Auto, 1 = preguntar, nil = No cambiar vista          
;;------------------------------------------------------------------------------
(defun 2D-UCs2P ( bChgView / PCent Size pt1 pt2 pt3
          ;|Functions|; *error* Get-2dPt)
        ;;---------------------------- *error* ----------------------------------
 ;; chequeo de *error*                                                    
 ;;-----------------------------------------------------------------------
 (defun *error* (msg / funC)
  (while (/= (getvar "CMDNAMES") "") (vl-cmdf))
   (if (= 8 (logand 8 (getvar "UNDOCTL")))
    (progn
     (vl-cmdf "_.undo" "_e")
     (vl-cmdf "_u")
    )
   )
   (if msg
           (if (not (wcmatch (strcase msg t) "*break,*cancel*,*exit*,interrup*"))
            (princ (strcat "\nUCs2P Error: " msg))
           )
   )
   (jlgg-Res_Vars)
   (princ)
  );c.defun
   ;;-------------------------------------------------------
         (defun Get-2dPt (pt) (list (car pt)(cadr pt) 0.0))   ; 2D coords
 
 ;;-------------------------- MAIN ----------------------------------------
 (jlgg-init_vars (list (list "OSOPTIONS" (boole 7 (getvar 'OSOPTIONS) 4))
         '("ELEVATION" 0.0)
         '("SNAPANG" 0)
         '("UCSFOLLOW" 0)
         '("osnapcoord" 1)
         '("cmdecho" 0)))
 
 (setq PCent (Get-2dPt (trans (getvar "VIEWCTR") 1 0))
       Size  (getvar "VIEWSIZE"))
 (prompt "\nAlineacion de SCP(UCS) con 2 Puntos: ")
 (if (setq pt1 (getpoint ">> Primer punto: "))
   (if (setq pt2 (getpoint pt1 ">> Dirección X: "))
    (progn
      ;;Option 1:
      ;;(setq pt1 (Get-2dPt pt1) pt2 (Get-2dPt pt2))
      ;;(vl-cmdf "_.UCS" "_O" pt1 "_.UCS" "_Z" pt1 pt2)
      ;;Option 2:
      (setq pt1 (Get-2dPt (trans pt1 1 0)) pt2 (Get-2dPt (trans pt2 1 0))) ;puntos a ucs Universal y 2D
      (setq pt3 (polar pt1 (+ (angle pt1 pt2)(/ pi 2)) 1.0))               ;obtenemos el punto 3 en ucsW
      (vl-cmdf "_.UNDO" "_BE")
      (vl-cmdf "_.UCS" "_W" "_.UCS" "_3P" pt1 pt2 pt3)
      ;;__________________________________________________________
      ;bChgView : 0 = Auto, 1 = preguntar, nil = No cambiar vista 
      (cond
       ((not bChgView))
       ((= bChgView 0)
 (vl-cmdf "_.PLAN" "_C")
 (vl-cmdf "_.ZOOM" "_C" (trans PCent 0 1) Size)
       )
       ((and (= bChgView 1)
      (= 6 (jlgg-LispMsg "¿Cambiar La Vista al nuevo\nSistema de Coordenadas Indicado?" 36 "Nuevo SCP (UCS)")))
        (vl-cmdf "_.PLAN" "_C")
        (setq PCent (trans PCent 0 1))
        (vl-cmdf "_.ZOOM" "_C" PCent Size)
       )
      );c.cond
      (vl-cmdf "_.UNDO" "_E")
    );c.prg
   );c.if
 );c.if
 (*error* nil)
);c.defun

;;------------------------------ C:UCs2P_Vw ------------------------------------
;;Función en automático                                                         
;;Cambia el SCP en 2D por dos puntos y Restaura a la vista del nuevo SCP(UCS)   
;;con el el factor de zoon actual con la misma medida de "VIEWSIZE"             
;;------------------------------------------------------------------------------
(defun C:UCs2P_Vw ()
 (2D-UCs2P 0)
 (princ)
);c.defun

;;------------------------------- c:UCs2P_N ------------------------------------
;;Función solo SCP(UCS)                                                         
;;Cambia el SCP en 2D por dos puntos (no cambia la vista)                       
;;------------------------------------------------------------------------------
(defun c:UCs2P_N ()
 (2D-UCs2P nil)
 (princ)
);c.defun

;;------------------------------- c:UCs2P_? ------------------------------------
;;Función como en automático, pero preguntando                                  
;;Cambia el SCP en 2D y pregunta si cambia a la vista del SCP(UCS)              
;;------------------------------------------------------------------------------
(defun c:UCs2P_? ()
 (2D-UCs2P 1)
 (princ)
);c.defun


;;------------------------------- c:UCsW_Zoom ----------------------------------
;;SCU(WCS)                                                                      
;;Restaura el SCP Universal (UCS Word) con el el factor de zoon actual con la   
;;misma medida de "VIEWSIZE"                                                    
;;------------------------------------------------------------------------------
(defun c:UCsW_Zoom ( / PCent Size
         ;|Functions|; *error* Get-2dPt)
  ;;---------------------------- *error* ----------------------------------
 ;; chequeo de *error*                                                    
 ;;-----------------------------------------------------------------------
 (defun *error* (msg / funC)
  (while (/= (getvar "CMDNAMES") "") (vl-cmdf))
   (if (= 8 (logand 8 (getvar "UNDOCTL")))
    (progn
     (vl-cmdf "_.undo" "_e")
     (vl-cmdf "_u")
    )
   )
   (if msg
           (if (not (wcmatch (strcase msg t) "*break,*cancel*,*exit*,interrup*"))
            (princ (strcat "\nUCsW_Zoom Error: " msg))
           )
   )
   (jlgg-Res_Vars)
   (princ)
  );c.defun
   ;;---------------------------------------------------------------
   (defun Get-2dPt (pt) (list (car pt)(cadr pt) 0.0))   ; 2D coords
 
 ;;-------------------------- MAIN ----------------------------------------
 (jlgg-init_vars (list (list "OSOPTIONS" (boole 7 (getvar 'OSOPTIONS) 4))
         '("ELEVATION" 0.0)
         '("SNAPANG" 0)
         '("UCSFOLLOW" 1)
         '("osnapcoord" 1)
         '("cmdecho" 0)))
 (vl-cmdf "_.UNDO" "_BE")
 (setq PCent (Get-2dPt (trans (getvar "VIEWCTR") 1 0))
       Size  (getvar "VIEWSIZE"))
 (if (= (getvar "WORLDUCS") 0)                            ;no esta en el usc universal
  (vl-cmdf "_.UCS" "_world" "_.ZOOM" "_C" PCent Size)
  (if (not (zerop (getvar "VIEWTWIST")))                  ;esta en el Wcs pero la vista esta girada
    (vl-cmdf "_.PLAN" "_world" "_.ZOOM" "_C" PCent Size)
  )  
 );c.if
 (vl-cmdf "_.UNDO" "_E")
 (*error* nil)
 (princ)
);c.defun

(princ)
Configuración.
Los archivos han de estar en una ruta de AutoCAD valida (ver Ordenación y carga de nuestros archivos de programación en AutoCAD)

En nuestro caso la ruta para estas utilidades la hemos colocado en el directorio "Utiles" dentro de nuestro proyecto: "LaMarmita\Utiles", y he añadido la ruta parcial de carga al código de "LaMarmita.mnl":
;;Carga de funciones de La Marmita:
(setq MiListLISP
      '("jlgg_Auxiliares.lsp"
        ;;simbolos:
        "Simbolos\\InsertEscalasGRP.lsp"
        "Simbolos\\SimbDetallesSecciones.lsp"
        ;;Utiles:
        "Utiles\\UCSAux.lsp"
       )
)
Actualizaciones necesarias.
El programa necesitará que estén cargadas y actualizadas las funciones comunes para los programas publicados en VisualLisp en La Marmita.
Descargar actualización: funciones Auxiliares
Para usarlo con el proyecto global de "La Marmita" se necesitan los archivos actualizados de menú de autocad.
Descargar actualización: Archivos de menú de La Marmita
Descarga.


Como siempre, espero sea de utilidad.
Un saludo a tod@s desde España.

No hay comentarios:

Publicar un comentario