Página 1 de 1

Crea presentaciones/Layouts automáticamente

Publicado: Lun Jun 01, 2020 12:40 pm
por javi lapina
Con esta aplicación en LISP creada por mi, puedes generar de forma automática presentacione/Layouts

Echa un ojo al vídeo para ver como funciona
https://youtu.be/udkCNQUP1tM

También os dejo el código del LISP por si alguien lo quiere retocar y adecuar a sus necesidades

Código: Seleccionar todo

;-------------------------------------- crea presentaciones ------------------------------
(princ "\nEjecuta la aplicacion con la oreden:  presenta")
(defun c:presenta (/)  
 
 (setvar "cmdecho" 0)
 (vl-load-com)
 (setq i 0)
 (setq cuanta 0)
 (setq titu 0)
 (setq total 0
   minimo-list
    (list)
   maximo-list
    (list))


(defun *error* (msg)
  (setvar "osmode" osmode-ant)
  (setvar "aperture" aperture-ant)
  (setvar "pickbox" pickbox-ant)
  (princ "error: ")
  (princ msg)
  (princ)
 )
    (setq osmode-ant (getvar "osmode"))
    (setq aperture-ant (getvar "aperture"))
    (setq pickbox-ant (getvar "pickbox"))

 (setvar "osmode" 0)
 (command "_ucs" "_w")


  (alert "Tienes que tener una presentacion creada con el nombre 00 
Un BLOQUE con el mismo tamaño que el hueco de la ventana
y su origen debe de ser la esquina inferior izquierda.

Recomendacion:
Poner numero de hoja con CAMPO <variable de sistema CTAB> para numeracion automatica


Dudas a javilapina@gmail.com")
 
 
 (setq ent (car (entsel "\nSeleccionar bloque con el recuadro : ")))
 (setq pt0 (cdr (assoc 10 (entget ent))))
 (setvar "osmode" 32)
 (setq altu (getdist pt0 "\nAltura del recuadro : "))
 (setvar "osmode" 0)

 

 (setq altu (rtos altu))
 (setq titu (getstring "\nNumero de orden con el que comienzan las presentaciones : "))
 (setq titu (atoi titu)) 

 (setq conjunto (ssget "_X" '((0 . "VIEWPORT")))) 
 (vla-put...-DisplayLocked (vlax-ename->vla-object (SSNAME conjunto 0)) 0) 
 (setq vle (vlax-ename->vla-object ent))
 (setq nomb (vlax-get vle "name"))
 (setq  lista (ssget "_x"  (list (cons 2 nomb))))
 
 


(if (/= lista nil)
      (progn
       (setq policon (sslength lista))      
       (setq total (+ policon titu))
       (setq total (- total 1))    
       (setq cont 0)

         (repeat policon
              (setq blo (ssname lista cont))
   
   (setq total (rtos total 2 0))
   
   (command "_layout" "_c" "00" total)
   (command "_layout" "_s" total)
   (command "_mview" "_L" "_off" "_L" "")
   (command "_mspace")
   (command "_ucs" "_OB" blo)
   (command "_plan" "")
   

    (vla-GetBoundingBox
      (vlax-ename->vla-object blo)
      'minimo
      'maximo
    )
    (setq 
     minimo-list
      (cons (vlax-safearray->list minimo) minimo-list)
     maximo-list
      (cons (vlax-safearray->list maximo) maximo-list)
    )
 
   (setq pto (mapcar '/ (mapcar '+ (car minimo-list) (car maximo-list)) (list 2.0 2.0 2.0)))
   
   (command "_ucs" "_w")
   (command "_Zoom" "_c" pto altu)
   (command "_ucs" "_p")
   (command "_pspace")
   (command "_Zoom" "_e")

   (setq total (atof total))
   (setq total (- total 1))
     
                 

    (setq cont (+ cont 1))
    )
  )
)



(setq bloquear -1)

(vl-load-com)
    (setq conjunto (ssget "_X" '((0 . "VIEWPORT"))) i 0) 

(repeat (sslength conjunto) 

  (vla-put...-DisplayLocked 
  (vlax-ename->vla-object (SSNAME conjunto i)) bloquear) 
 
  (vla-put...-color 
  (vlax-ename->vla-object (SSNAME conjunto i)) 
  acByLayer) 

(setq i (1+ i)))


  (setvar "osmode" osmode-ant)
  (setvar "aperture" aperture-ant)
  (setvar "pickbox" pickbox-ant)
) 

Re: Crea presentaciones/Layouts automáticamente

Publicado: Vie Jun 05, 2020 1:14 pm
por Juan F
Buenas Javi.
Muchas gracias por el lisp, es muy interesante pero no logro hacerle funcionar en Bricscad. Me da el siguiente error:

: PRESENTA
Seleccionar bloque con el recuadro :
Altura del recuadro :
Numero de orden con el que comienzan las presentaciones : 1

; ----- LISP : Call Stack -----
; [0]...C:PRESENTA <<--
;
; ----- Error around expression -----
; (VLA-put......-DISPLAYLOCKED (VLAX-ENAME->VLA-OBJECT (SSNAME CONJUNTO 0)) 0)
; in file :
; \Desktop\presenta.lsp
;error: no function definition <VLA-put......-DISPLAYLOCKED> ; expected FUNCTION at [eval]

Tienes idea a qué se puede deber? :roll:
Muchas gracias

Re: Crea presentaciones/Layouts automáticamente

Publicado: Vie Jun 05, 2020 1:38 pm
por javi lapina
No tengo el programa instalado, pero voy hacer una consulta a un compi que trabaja con el, y con lo que sea ya te digo algo....

Re: Crea presentaciones/Layouts automáticamente

Publicado: Lun Jun 08, 2020 8:09 am
por Juan F
Perfecto Javi. Muchísimas gracias por tu interés.
Un saludo