Tabla de áreas en secciones transversales.
2 participantes
Página 1 de 1.
Tabla de áreas en secciones transversales.
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
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
Re: Tabla de áreas en secciones transversales.
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
![-](https://2img.net/i/empty.gif)
» Sumar Areas con Sombreados
» Ayuda con una rutina de áreas.
» Tabla de Puntos
» tabla con visual lisp
» Insertar Block en Tabla
» Ayuda con una rutina de áreas.
» Tabla de Puntos
» tabla con visual lisp
» Insertar Block en Tabla
Página 1 de 1.
Permisos de este foro:
No puedes responder a temas en este foro.