acad hispano
¿Quieres reaccionar a este mensaje? Regístrate en el foro con unos pocos clics o inicia sesión para continuar.

Tabla de áreas en secciones transversales.

2 participantes

Ir abajo

Tabla de áreas en secciones transversales. Empty Tabla de áreas en secciones transversales.

Mensaje por eliasp Vie Jun 14, 2024 6:38 pm

Buen día foro. Esperando todos se encuentren bien, les solicito su orientación.

Resulta y resalta que estoy trabajando en una nueva rutina para arear secciones transversales y me encontré con un pequeño inconveniente, a ver si logro explicarme:

Las secciones pueden tener dos, tres... 8 elementos. Para esto, tomé una rutina que compartió el maestro Devitg (Don Gabriel) para generar la lista de capas que se va a utlizar. Con esta lista, se leen los hatches correspondientes en cada sección y luego generar una tabla que compartió hace algunos años el amigo Bieres.

Mi problema está en que, al leer las áreas, cómo pasar esos datos a la tabla, recuerden que no siempre es un número fijo ni el mismo nombre.
Estuve tratando de experimentar con subindices.... pero me fue peor...

Por ejemplo en éste documento tengo 3 capas a leer su área: Corte, Terraplén y plantilla. Leer las 3 capas y luego esos valores, capa y área pasarlos a la tabla. A ver si no enredé mas el problema.
En el Anexo está el DWG y las dos rutinas que estoy trabajando.

Espero puedan orientarme

Saludos y gracias.........

PD. Yo creo que el camino sería algo así como: Leer áreas, asignar a dos variables "temporales" elemento y área y una vez leída la sección completa, entonces si, generar la tabla... así es como me lo imagino, en fin

https://www.dropbox.com/scl/fi/td53qd1wvmcdso3v6pf53/secciones.rar?rlkey=64vgg4sngwo4x1acdyv9qhfp9&st=osl5l0zi&dl=0

eliasp

Mensajes : 223
Fecha de inscripción : 17/03/2016

Volver arriba Ir abajo

Tabla de áreas en secciones transversales. Empty Re: Tabla de áreas en secciones transversales.

Mensaje por Marco Jacinto Sáb Jun 22, 2024 3:20 am

No entiendo que quieres hacer; pero te paso esta funcion que hice, permite crear una tabla de autocad, a partir de una lista de datos; puedes pasarle una lista con el orden de los encabezados, y luego una lista con los datos pareados, donde el primer valor es el del encabezado.

Código:

;|
Funciones publicadas en http://www.hispacad.com/foro/posting.php?mode=reply&f=2&t=68483#preview
Autor: Marco Jacinto, Guadalajara, Mexico 2015 Mcommands 2015
(or EscribeDatosenTabla (load "M:/Mcommands/01_DEV/05_Tablas/EscribeDatosenTabla.lsp"))
;|

(defun c:Datos2tabla (/ LSTDATOS OBJTABLA SUPRIMIRREGENERAR)

  (setq   lstdatos1 '(
        ("Variable" "Valor")
        ("Sentido" 1.0)
        ("Velocidad" 2.0)
        ("Deflecion" 3.0)
        ("PI" 4.0)
        ("PC" 5.0)
        ("PT" 6.0)
        )
  )
 
  (EscribeDatosenTabla
    (setq ObjTabla (vlax-ename->vla-object (car (entsel))))
    "Tabla 1"
    lstDatos1
    SuprimirRegenerar
    t
  )
 
  (princ)
)


;|
La función EscribeDatosenTabla grabará los valores de una lista siguiendo el valor de los
encabezados indicados.
Argumentos:
ObjTabla    Un objeto vla que represente a una tabla
Titulo     lstDatos
                SuprimirRegenerar
                TieneEncabezados?
Los valores deben de tener este formato
(setq lstdatos '(
  ("Variable" "Valor");;;Los encabezados de los valores
  ("Sentido" 1.0)
  ("Velocidad" 2.0)
  ("Deflecion" 3.0)
  ("PI" 4.0)
  ("PC" 5.0)
  ("PT" 6.0)
))
|;


 ;|
  description
  @Param ObjTabla ?
  @Param Titulo ?
  @Param lstDatos Los datos a ingresar, pueden ser '((Encabezado1 Encabezado2)(Valor1 Valor2))
  o '((Encabezado1 . Valor1)(Encabezado2 . Valor2))
  @Param SuprimirRegenerar Indica si se deja de regenerar la tabla hasta terminar de procesar
  @Param TieneEncabezados? Indica si los datos son pareados, el primer valor es el encabezado.
  @Returns ?
|;
(DEFUN EscribeDatosenTabla (ObjTabla       Titulo         lstDatos
             SuprimirRegenerar            TieneEncabezados?
             /          COLCT         ENCABEZADOS
             ENCABUSCAR       LSTIDS         ROW
             X          Y            Z
             celtextHeigth    mu:lstTextos    ProcesaListaDatos
             EscribeDatosAlFinal            AgregaColRows
           )
;;;(setq x y mu:lstTextos Encabezados
  (DEFUN ProcesaListaDatos (x mu:lstTextos / ATTTAG ENCABUSCAR ATTTEXT)
    (SETQ AttTag  (CAR x)
     AttText (CADR x)
;;;     EncABuscar
;;;     (IF (SETQ EncABuscar (dxf atttag mu:lstTextos))
;;;       EncABuscar
;;;       AttTag
;;;     )
    )
    (EscribeDatosAlFinal (CADR x) (CAR x))
  )
;;;(SETQ TXT 1)
  (DEFUN EscribeDatosAlFinal (txt EncABuscar / COLUMNS INTCOUNT2 POS ROWS)
    (IF   (AND TXT
       (SETQ intCount2 (VL-POSITION EncABuscar Encabezados))
   )
      (PROGN
;;;   (SETQ intCount2 pos)
   (VLA-SETTEXT
     ObjTabla
     row
     intCount2
     (SETQ   txt (COND
            ((= (TYPE txt) 'REAL)
            (RTOS TXT 2 2)
            )
            ((= (TYPE txt) 'INT)
            (ITOA TXT)
            )
            (T TXT)
          )
     )
   )
;;;(setq celtextHeigth 0.18)
   (IF (< (VLA-GETCOLUMNWIDTH ObjTabla intCount2)
         (SETQ ColW (* 1
             celtextHeigth
             (COND ((<= (STRLEN txt) 3) 4)
              ((> (STRLEN txt) 20) (/ (STRLEN txt) 1.6))
              (T (/ (STRLEN txt) 0.75))
             )
           )
         )
       )
     (VLA-SETCOLUMNWIDTH
       ObjTabla
       intCount2
       ColW
     )
   )
;;;(vla-GetCellAlignment objTabla row  intCount2)

   (VLA-SETCELLALIGNMENT
     ObjTabla
     row
     intCount2
     (IF (MEMBER intCount2 '(6 8))
       4
       ;;MiddleLeft 
       5
       ;;MiddleCenter
     )
   )
   (SETQ intCount2 (1+ intCount2))
      )
    )
  )

;;;(setq TipoProcesar "columns")
;;;(setq TipoProcesar "rows")
;;;(setq totalItemsCt 12)

  (DEFUN AgregaColRows (ObjTabla TipoProcesar totalItemsCt /)
    (IF
      (<= (SETQ ItemsCt (VLAX-GET-PROPERTY ObjTabla TipoProcesar))
     totalItemsCt
      )
      (REPEAT (SETQ rep (- totalItemsCt ItemsCt))
    (SETQ ItemsCt (APPLY (READ (STRCAT "Vla-get-" TipoProcesar))
               (LIST ObjTabla)
            )
    )
;;;(vla-InsertRows ObjTabla row Height Rows)
    (APPLY   (READ (STRCAT "vla-insert" TipoProcesar))
      (LIST ObjTabla
            (1- ItemsCt)
            0.1
            1
      )
    )
      )
    )
  )


;;;Comienza funcion
  (IF
    (AND ObjTabla
    lstDatos
    (LISTP lstDatos)
    (EQ (TYPE ObjTabla) 'VLA-OBJECT)
    (= (VLA-GET-OBJECTNAME ObjTabla) "AcDbTable")
    )
;;;(setq ProcesaListaDatos T)
;;;    (setq Titulo "Probando tabla")
    (PROGN
      (IF SuprimirRegenerar
    (VLA-PUT-REGENERATETABLESUPPRESSED ObjTabla :VLAX-TRUE)
      )
      (SETQ row 0)
;;;Si la tabla tiene Titulo se coloca.
      (IF (EQ (VLA-GET-TITLESUPPRESSED ObjTabla) :VLAX-FALSE)
    (PROGN
     (VLA-SETTEXT
       ObjTabla
       row
       0
       Titulo
;;;       "PROBANDO"
     )
     (setq row (1+ row))
    )
      )
      (SETQ Encabezados (CAR lstDatos))
;;;(setq ObjTabla (c:dump))
;;;Si la tabla tiene encabezados se agrega una fila adicional
      (IF (EQ (VLA-GET-HEADERSUPPRESSED ObjTabla) :VLAX-FALSE)
    (SETQ row (+ 1 row))
      )
      (SETQ LstIds (IF   TieneEncabezados?
            (CDR lstDatos)
            (MAPCAR
         '(LAMBDA (x)
           (MAPCAR
             '(LAMBDA (y z)
            (LIST y z)
               )
             Encabezados
             x
           )
          )
         lstDatos
            )
          )
      )
;;;      (setq row 2)
      (AgregaColRows ObjTabla "columns" (LENGTH Encabezados))
      (AgregaColRows
    ObjTabla
    "rows"
    (+ row
       (LENGTH LstIds)
;;;       (IF   (EQ (VLA-GET-TITLESUPPRESSED ObjTabla) :VLAX-FALSE)
;;;         1
;;;         0
;;;       )
    )
      )
     
      (SETQ celtextHeigth (VLA-GETCELLTEXTHEIGHT objTabla 1 0))
      (IF (EQ (VLA-GET-HEADERSUPPRESSED ObjTabla) :VLAX-FALSE) ; _Modificado por
                        ; mcoan
                        ; 4/29/13
               ; 8:52
               ; PM
    (PROGN
     (SETQ ct -1)
;;;Se establecen los valores de los encabezados
     (MAPCAR
       '(LAMBDA (x)
      (VLA-SETTEXT
        ObjTabla
        1
        (SETQ ct (1+ ct))
        x
      )
         )
       Encabezados
     )
     (APPLY (READ (STRCAT "vla-insert" "rows"))
        (LIST   ObjTabla
         2
         0.1
         1
        )
     )
     (SETQ row (1+ row))
    )
      )
;;;(setq x (car LstIds))
;;;      (setq y (car x))
      (MAPCAR
    '(LAMBDA (x)
       (MAPCAR
         '(LAMBDA (y)
       (ProcesaListaDatos y nil)
         )
         x
       )
       (SETQ row (1+ row))
     )
    LstIds
      )
      (VLA-PUT-HEIGHT
    ObjTabla
    (* (VLA-GET-ROWS objtabla) celtextHeigth)
      )
      (IF SuprimirRegenerar
    (VLA-PUT-REGENERATETABLESUPPRESSED ObjTabla :VLAX-FALSE)
      )
;;;      (vla-put-RegenerateTableSuppressed (c:dump) :vlax-false)
    )
    (PRINC "\n Los argumentos no son correctos")
  )
)



Marco Jacinto

Mensajes : 104
Fecha de inscripción : 12/08/2016

Volver arriba Ir abajo

Volver arriba

- Temas similares

 
Permisos de este foro:
No puedes responder a temas en este foro.