AutoCAD Cálculo de áreas

#1
Hola a todos, quisiera preguntaros si es posible realizar calculos de áreas curvas , y si se pudiera hacer , como se hace ?
tego instalado autocad 2005 , si necesito otro programa os agradeceria me lo comunicarais . si me podeis contestar rapido mejor q mejor ... Gracias de antemano .
 
#2
Si lo que preguntas es para calcular el area encerrada por una curva lo puedes hacer con la orden Dibujo/contorno..., que te crea una polilinea con el contorno (desactiva lo que haya dentro del area por si acaso) y luego directamente clickas en la polilinea y ves el area que tiene en su cuadro de propiedades.

Si lo que quieres es saber el area cuando lo que se curva es el plano que la contiene... a mí también!

Salut
 
#3
Hola Arquiche. Primero para empezar el area a calcular necesariamente debe estar hecha con polilineas cerradas ó splines, luego en la linea de comandos escribes FIELD, aparece un cuadro de dialogo, arriba a la izquierda esta Field Category, seleccionas Object, abajo en Field Names, escoges Object, luego en Object Type, pinchas el boton y seleccionas la polilinea ó splines a la que le quieres medir el area (recuerda que deben estar cerradas), luego abajo aparece un listado de todo lo que puedes hacer con esa polilinea ó spline, entonces marcas AREA y al lado de eso escoges el formato y la presición (cantidad de decimales). Otra cosa util es el boton FIELD FORMAT, en el puedes darle escala al calculo del AREA, colocar prefijo y sufijo, si quieres coma, punto ó espacio, etc. Espero no haber sido muy enredado y te sirva.
 
#4
muchas gracias tio , era la primera opcion . y ya ta resuelto joer q facil era .... se nota q soy un novato jejej gracias por la brevedad y por tu tiempo un abrazo
 
#6
Hola @Nelson, no conocía esta forma de sacar superficies, pero la considero un poco larga.
No sería más fácil utilizar un lisp, o a falta de este, incluso los comandos area y _list.
De todas formas gracias, he aprendido una cosa más.
 
#7
La gran ventaja que tiene hacerlo con campos (field) es que luego al estirar la polilinea puedes actualizar el campo automáticamente. (actualizacampo)

Saludos.
 
#8
Yo tengo hecho un boton con un macro con el que una vez que seleccionas la polilinea que quieres que te calcule el area, pinchas en la pantalla y te aparece el valor numerico de ese area. Te ahorra tenerlo que hacer a mano, y cuando son muchas areas a calcular se agradece.
 

eepa

Gran experto
#10
Mi truco para hallar este tipo de áreas es sombrear la zona y en propiedades del sombreado puedes consultar su área.

Saludos.
 
#11
:D :D Hola a todos.
Estoy muy interesada en al calculo de areas rapidamente, por esto me viene de perlas este foro.
Os cuento como calculo yo las areas, bueno yo trabajo con el 2004, con polilineas creo el contorno y dejando desplegada la barra de propiedades voy seleccionando cada una y me da su area en el cuadro de dialogo de area, es mas rapido que seleccionar area y luego seleccionar el boton de objeto.
1ª pregunta:¿ Se puede que el comando area por defecto te pida un objeto en lugar que el primer punto de una esquina?
2ªPregunta, puede hacerme un listado de las area seleccionadas, ojo, no me sirve el listado de F2 sino algo mas claro
3-Pregunta, xoubino puedes explicar lo de Yo tengo hecho un boton con un macro con el que una vez que seleccionas la polilinea que quieres que te calcule el area, pinchas en la pantalla y te aparece el valor numerico de ese area, no se como se hace un macro.
Podria insertarme un texto con dicho valor de area a la vez que lo calcula, ESO SERIA LA PANACEA.
4.- En el 2004, version español lo de field o campo o campos, no me reconoce el comando.
Buno gracias a todos y perdonar por el rollo que os he metido pero me ahorraria mucho trabajo si conoceis una manera mas agil de calcular el area.
 
#12
En el ADT 2006 en castellano es tal cual ACTUALIZACAMPO, (_updatefield en inglés), no sé si existe en otras versiones anteriores. Yo lo utilizo sobre todo para los cajetines de los planos.

Menu herramientas > actualizar campos

Saludos.
 
#13
@vorpal, gracias lo intentaré, uso el 2005
@moby, utiliza _ delante de las ordenes en ingles.
Cuéntame cómo te interesa que te ponga las superficies
S=0,00m2, Sup=0,00 m2, ¿necesitas que te ponga los perímetros?
 
#14
Yo no soy @moby, pero vamos, que también me interesa MOGOLLÓN-MOGOLLÓN eso :eek: :eek: :eek:

estoy harto de poner a mano las áreas... y eso que tengo en el curro las autohook que funcionan de maravilla (y también tenemos la orden de calcular áreas con un comando)
 
#16
Aquí dejo uno de ellos, espero os sirva.

Matc-G.lsp
Hay que poner un texto con “_Dtext”, donde deseemos colocar la superficie.

Teclear ACH > seleccionar la polilinea > enter > seleccionar el texto > enter

El resultado será: Sup. x,xx m2

Código:
; Matc-G.LSP (Español) 
 
; INDICE 0.- GENERAL
; 1.- ROTACION FIJA 45,90,180,270
; 3.- EDICION DE TEXTOS
; 4.- PEDIT (GROSOR A 0)
; 5.- SCALE EN P. INSERCCION
; 6.- VARIOS 
; 7.-
; 8.- CAMBIOS DE CAPAS DIRECTAS (M,P,C)
; CAMBIO A CAPA DE ULTIMO (M,P,C,D,L,SUP)
; SITUA CAPAS (M,P,C) 
; CAMBIA A CAPA Y COLOR A BYLAYER, A LT. HIDDEN
; 9.- DISPLAY: ZOOMS
; ZOOM A VISTAS PREGRABADAS, TILEMODE O Y 1
; 10.- AREAS
; 
 
;0:
 (defun g:entv (code ename)
 (cdr (assoc code (entget ename)))
 )
 
 (defun C:UF()(setvar"cmdecho"1)
 (setq oer *error* *error* err2)(command ".UCSICON" "0" "" ))
 
 
 (defun C:UN()(setvar"cmdecho"1)
 (setq oer *error* *error* err2)(command ".UCSICON" "1" "" ))
 
 (defun C:DC()(setvar"cmdecho"1)
 (SETQ CC(GETREAL "Definir constannte: "))
 )
 
 (defun c:U()(setvar"cmdecho"1)
 (setq oer *error* *error* err2)(command ".deshacer" "" ))
 
 (defun c:confused:a()(setvar"cmdecho"1)
 (setq oer *error* *error* err2)(command ".guardar" ""))
 
;1:
 (defun C:R45()(setvar"cmdecho"1)
 (SETQ SS1(SSGET))
 (setq oer *error* *error* err2)
 (SETQ BR(GETPOINT "Base de rotacion :" ))
 (command ".gira" SS1 "" BR "45" "" ))
 
 (defun C:R90()(setvar"cmdecho"1)
 (SETQ SS1(SSGET))
 (setq oer *error* *error* err2)
 (SETQ BR(GETPOINT "Base de rotacion :" ))
 (command ".gira" SS1 "" BR "90" "" ))
 
 (defun C:R180()(setvar"cmdecho"1)
 (SETQ SS1(SSGET))
 (setq oer *error* *error* err2)
 (SETQ BR(GETPOINT "Base de rotacion :" ))
 (command ".gira" SS1 "" BR "180" "" ))
 
 (defun C:R270()(setvar"cmdecho"1)
 (SETQ SS1(SSGET))
 (setq oer *error* *error* err2)
 (SETQ BR(GETPOINT "Base de rotacion :" ))
 (command ".gira" SS1 "" BR "270" "" ))
 
;2:
 
 
 
;3:
 
 (defun C:CHX()(setvar"cmdecho"1)
 (SETQ SS1(SSGET))
 (setq oer *error* *error* err2)(command ".Cambia" SS1 "" "" "" "" "" ""))
 
;4:
 (defun C:W0()(setvar"cmdecho"1)
 (setq SS1(SSGET))
 (command ".editpol" SS1 "G" "0" ""))
 
 (defun C:WC()(setvar"cmdecho"1)
 (setq SS1(SSGET))
 (command ".editpol" SS1 "G" "CC" ""))
 
 
;5:
 (defun C:confused:CC()(setvar"cmdecho"1)
 (SETQ SS1(SSGET))
 (setq oer *error* *error* err2)
 (SETQ BR(GETPOINT "Punto Base: " ))
 (command ".escala" SS1 "" BR CC))
 
 
;8:
 (defun C:CHM()(setvar"cmdecho"1)
 (SETQ SS1(SSGET))
 (setq oer *error* *error* err2)(command ".CAMBIA" SS1 "" "P" "C" "M" ""))
 
 (defun C:CHP()(setvar"cmdecho"1)
 (SETQ SS1(SSGET))
 (setq oer *error* *error* err2)(command ".CAMBIA" SS1 "" "P" "C" "P" ""))
 
 (defun C:CHS()(setvar"cmdecho"1)
 (SETQ SS1(SSGET))
 (setq oer *error* *error* err2)(command ".CAMBIA" SS1 "" "P" "C" "S" ""))
 
;8.2:
 (defun C:UM()(setvar"cmdecho"1)
 (setq oer *error* *error* err2)(command ".CAMBIA" "LT" "" "P" "C" "M" ""))
 
 (defun C:UP()(setvar"cmdecho"1)
 (setq oer *error* *error* err2)(command ".CAMBIA" "LT" "" "P" "C" "P" ""))
 
 (defun C:UH()(setvar"cmdecho"1)
 (setq oer *error* *error* err2)(command ".CAMBIA" "LT" "" "P" "LA" "H" ""))
 
;8.3:
 (defun C:confused:TM()(setvar"cmdecho"1)
 (setq oer *error* *error* err2)(command ".CAPA" "E" "M" ""))
 
 (defun C:confused:TP()(setvar"cmdecho"1)
 (setq oer *error* *error* err2)(command ".CAPA" "E" "P" ""))
 
 (defun C:CRD()(setvar"cmdecho"1)
 (setq oer *error* *error* err2)
 (command ".CAPA" "N" "D" "L" "HIDDEN" "D" ""))
 
;8.4:
 (defun C:eek:N()(setvar"cmdecho"1)
 (setq oer *error* *error* err2)(command ".CAPA" "ACT"))
 
 (defun C:eek:F()(setvar"cmdecho"1)
 (setq oer *error* *error* err2)(command ".CAPA" "DES"))
 
 (defun C:confused:UN()(setvar"cmdecho"1)
 (setq oer *error* *error* err2)(command ".CAPA" "ACT" "SUP" ""))
 
 (defun C:confused:UF()(setvar"cmdecho"1)
 (setq oer *error* *error* err2)(command ".CAPA" "DES" "SUP,*|SUP" ""))
 
;8.5:
 (defun C:CB()(setvar"cmdecho"1)
 (SETQ SS1(SSGET))
 (setq oer *error* *error* err2)
 (SETQ NC(GETSTRING "Nueva capa :" ))
 (command ".CAMBIA" SS1 "" "P" "O" "BYLAYER" "C" NC ""))
 
 (defun C:CONT()(setvar"cmdecho"1)
 (SETQ SS1(SSGET))
 (setq oer *error* *error* err2)(command ".CAMBIA" SS1 "" "P" "T" "CONTINUOUS" ""))
 
 (defun C:VR1() (setvar"cmdecho"1)
 (setq oer *error* *error* err2)
 (command ".VISRETAIN" "1" ""))
 
 (defun C:Cmp()(setvar"cmdecho"1)
 (SETQ SS1(SSGET)) 
 (setq oer *error* *error* err2)
 (command ".CAMBIA" ss1 "" "P" "O" "6" "C" "P" "")) 
 
:9:
 (defun C:ZE()(setvar"cmdecho"1)
 (setq oer *error* *error* err2)(command ".REGENAUTO""ACT")
 (setq oer *error* *error* err2)(command ".ZOOM""E"))
 
 (defun C:ZD()(setvar"cmdecho"1)
 (setq oer *error* *error* err2)(command ".ZOOM" "D"))
 
 (defun C:ZP()(setvar"cmdecho"1)
 (setq oer *error* *error* err2)(command ".ZOOM" "P"))
 
 (defun C:ZW()(setvar"cmdecho"1)
 (setq oer *error* *error* err2)(command ".ZOOM" "V"))
 
 (defun C:W()(setvar"cmdecho"1)
 (command ".ZOOM" "v"))
 
 (defun C:ZG()(setvar"cmdecho"1)
 (command ".Vista" "R" "G" ""))
 
 (defun C:Z1()(setvar"cmdecho"1)
 (command ".Vista" "R" "1" ""))
 
 (defun C:Z2()(setvar"cmdecho"1)
 (command ".Vista" "R" "2" ""))
 
 (defun C:Z3()(setvar"cmdecho"1)
 (command ".Vista" "R" "3" ""))
 
 (defun C:TL0()(setvar"cmdecho"1)
 (command ".TILEMODE" "0" ""))
 
 (defun C:TL1()(setvar"cmdecho"1)
 (command ".TILEMODE" "1" ""))
 
 (defun C:confused:V()(setvar"cmdecho"1)
 (SETQ V(GETSTRING "Nombre vista: "))
 (command ".Vista" "g" v ""))
 
;10:
 
(defun c:ach ()
 (setq SS1 (ssget))
 (Command "Area" "E" SS1)
 (setq Sup (strcat "Sup. " (rtos(getvar "area") 2 2)" m2"))
 (setq SS2 (ssget)) 
 (Command ".Cambia" SS2 "" "" "" "" "" "" Sup))
 
 
 
 
; EOF MATC-G.LSP
Estas maravillas no las se hacer, pero llegan a mis manos.
 
#17
Veo que lo que explica @LGOMEZ es un poco lioso para los que no esten muy puestos en esto de los macros. Yo os explico paso a paso como lo tengo hecho para el que le pueda servir:

1. Nos situamos encima de alguna de las barras de herramientas y le damos al boton derecho del raton
2. Pulsamos sobre Personalizar
3. En la pestaña comando, seleccionamos definido por el usuario y "Boton definido por el usuario"
4. Pulsamos sobre la pestaña "propiedades"
5. Pulsamos sobre el boton que hemos creado y se nos abrira un cuadro donde se indicara el nombre, descripcion y macro asociada ese boton.
6. El nombre elegimos el que queremos, la descripcion pues lo mismo, y en la macro ponemos:
_area;o;\;;_text;\;0;$M=$(rtos,$(getvar,area),2,2);
7. Modifficamos la imagen del boton para no confundirlo con otro y ya esta lista para funcionar, basta con seleccionar una polilinea y el lugar donde queremos que nos inserte el texto del area.
 
#18
De mis antiquisimos tiempos de programador LISP guardo esta rutinilla, que lo que hace es dibuja una polilinea envolvente, calcula su área, la mete en un texto y borra la polilinea.

Solo hace falta cargar este LSP e invocar el comando AREAT

Saludos.
Código:
;***** AREAT: coloca el valor de area de una entidad cerrada en un texto
(defun C:AREAT ( / a2 a3 a4 a5 punto)
 (setq punto (getpoint "\nPunto interno:"))
 (command "_bpoly" punto "")
 (command "_AREA" "_e" "_last")
 (command "_REDRAWALL")
 (setq a2 (+ 2.5 (* 100 (getvar "AREA"))))
 (setq a3 (/ (* 5.0 (fix (/ a2 5))) 100))
 (setq a4 (strcat (rtos a3 2 2) "m2"))
 (setq a5 (strcat "P=" (rtos (getvar "PERIMETER") 2 2) "m"))
 ;(command "_ERASE" "_last" "")
 (command "_TEXT" punto "" "0" a4) 
)
 
#20
Aquí dejo otro Lisp, que previa selección de las polilíneas, inserta un texto con la superficie, el perimetro y los totales de ambas dimensiones, solicitando la altura de texto que deseas.

Se carga como cualquier lisp y el comando es SPT

Código:
;;; Copyright ©2004 by draftteam softwar
 
;;; All rights reserved
 
;;;
 
;;; DRAFTTEAM PROVIDES THIS PROGRAM SOFTWARE "AS IS" AND WITH ALL
;;; FAULTS. DRAFTTEAM SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTY
;;; OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR USE. DRAFTTEAM
;;; SOFTWARE DOES NOT WARRANT THAT THE OPERATION OF THE PROGRAM WILL
;;; BE UNINTERRUPTED OR ERROR FREE
 
;;;
 
;;; code: José Luis García
 
 
;;; modificion sobre la original para que ponga tb el perimetro
 
;;; modificacion hecha por Lucinda Gómez Obregón en agosto 2005, para que ponga
Total Superficie Util / S= y P= y que el comando de arranque sea SPT
 
;;; ------------------------------------------------------------------------------------
 (vl-load-com)
;;-----------------------c:confused:pT-------------------------------------------------
;;calcula el area y el perimetro de multiples polilineas 
;; -------------------------------------------------------------------------------------
 
(defun c:confused:pT ( / sele cod Htxt$ ListaAreas ListaPerim mens TotArea TotPerim mens)
 (setq TotArea 0.0 TotPerim 0.0)
 (or HTxt (setq HTxt (getvar "TEXTSIZE")))
 (initget 6)
 (if (setq Htxt$ (getdist (strcat "\nAltura de texto;< " (rtos Htxt) " >: ")))
 (setq HTxt Htxt$)
 )
 (prompt "\nSeleccione Polilineas para suma de Areas: ")
 (if (setq sele (ssget (list '(0 . "LWPOLYLINE"))))
 (progn
 (vl-cmdf "_.UNDO" "_BE")
 (setq Cod 0 )
 (mapcar (function (lambda (LwPol / Centroid Area$ Perim$)
 (setq Area$ (vlax-curve-getArea LwPol)
 Perim$ (vlax-curve-getDistAtParam LwPol (vlax-curve-getEndParam LwPol)))
 (setq TotArea ( TotArea Area$)
 TotPerim ( TotPerim Perim$))
 (setq Centroid (CentroidePol LwPol))
 (XDraw_Txt HTxt Centroid (strcat "S= " (rtos Area$ 2 2) " m2") 256 4 0) ;paso a poner el texto del area en el centro del poligono
 (XDraw_Txt HTxt (POLAR Centroid (* 1.5 PI) (* 1.5 HTxt)) (strcat "P= " (rtos Perim$ 2 2) " ml") 256 4 0) ;paso a poner el texto del perimetro en el centro del poligono
 (setq Cod (1 Cod))
 (prompt (strcat "\rSe Analizarón " (itoa Cod) " Polilineas..."))
 )) (SsToList sele));c.mapcar
 (if (setq pick_pt (getpoint "\nPunto insercion suma areas: "))
 (progn
 (XDraw_Txt HTxt pick_pt (strcat "Total Superficie Util = " (rtos TotArea 2 2) " m2") 256 4 0)
 (XDraw_Txt HTxt (POLAR pick_pt (* 1.5 PI) (* 1.5 HTxt)) (strcat "Total Perimetro = " (rtos TotPerim 2 2) " ml") 256 4 0)
 )
 )
 (princ)
 (if (not (zerop TotArea))
 (progn
 (setq mens (strcat "\nListado de Areas:\n\n"
 "Nº de Polilineas Seleccionadas: " (itoa (sslength sele)) " \n\n"
 "Area Total: \t" (rtos TotArea) "\n"
 "Perimetro Total:\t" (rtos TotPerim) "\n"))
 (alert mens)
 )
 )
 (vl-cmdf "_UNDO" "_E")
 );c.prg
 (Alert "\nError en SELECCION\n\nNo se seleccionarón Polilineas.")
 );c.if
 (prin1)
);c.defun
 
;;---------------------------------------------------------------------------------------
;; dibuja un texto en la pantalla
;; --------------------------------------------------------------------------------------
(defun XDraw_Txt (al p cad col codh codv)
 (setq EntTxt 
 (entmakex 
 (list '(0 . "TEXT");'(8 . "ARQ_Areas_C_Cuadros") 
 (cons 62 col) 
 (cons 40 al) 
 (cons 1 cad) 
 '(50 . 0.0) '(41 . 1.0) 
 (cons 7 (getvar "TEXTSTYLE")) 
 (cons 72 codh) 
 (cons 10 p) 
 (cons 11 p) 
 (cons 73 codv) 
 );c.list 
 );c.entmk 
 );c.setq 
);c.defun 
 
;;------------------------------------------- 
;; conjunto de seleccion a lista de entidades 
;;------------------------------------------- 
(defun SSToList (ss / ssl n) 
 (if (and ss :) (type ss) 'PICKSET)) 
 (repeat (1 (setq n (1- (sslength ss)))) 
 (setq ssl (cons (ssname ss n) ssl) n (1- n)) 
 );c.repeat 
 ) 
 ssl 
);c.defun 
 
(defun dxf (n eg) (cdr (assoc n eg))) 
 
;---------------------------------------------------- 
;lista de vertices de LWPOLYLINE 
;---------------------------------------------------- 
(defun GetVertPol (Pol / LPtspol) 
 (mapcar 'cdr 
 (vl-remove-if (function (lambda (x) (/= (car x) 10))) (entget Pol))) 
) 
 
;;------------------------------------------------------------------------------- 
;;; Centroide de LWPOLILINE 
;;------------------------------------------------------------------------------- 
(defun CentroidePol (Poliline / lVertices Centroide) 
 (setq lVertices (GetVertPol Poliline) 
 Centroide (trans (CentroidLisPts lVertices) 0 1) ) 
) ;_ fin de defun 
 
;;---------------------------- CentroidLisPts ----------------------------------- 
;; (Centroide de lista de puntos obtenidos de Polilinea) 
;;------------------------------------------------------------------------------- 
(defun CentroidLisPts (vlist / segno n ttl_area basex basey p1 p2 x1 x2 y1 y2 t_x t_y 
 t_area t_xm t_ym r_x r_y r_area r_xm r_ym Mx My) 
 (setq vlist (append vlist (list (car vlist))) 
 segno (1- (length vlist)) 
 n 0 
 Ttl_Area 0.0 
 Mx 0.0 
 My 0.0 
 basex (car (nth 0 vlist)) 
 basey (cadr (nth 0 vlist))) 
 (repeat segno 
 (setq p1 (nth n vlist) 
 p2 (nth (1 n) vlist) 
 x1 (car p1) 
 y1 (cadr p1) 
 x2 (car p2) 
 y2 (cadr p2) 
 t_x (- (* ( x2 x2 x1) 0.333333) basex) 
 t_y (- (* ( y1 y1 y2) 0.333333) basey) 
 t_area (* (- y2 y1) (- x2 x1) 0.5) 
 t_xm (* t_area t_x) 
 t_ym (* t_area t_y) 
 r_x (- (/ ( x1 x2) 2) basex) 
 r_y (- (/ ( basey y1) 2) basey) 
 r_area (* (- x2 x1) (- y1 basey)) 
 r_xm (* r_area r_x) 
 r_ym (* r_area r_y) 
 Ttl_Area ( Ttl_Area t_area r_area) 
 Mx ( Mx t_xm r_xm) 
 My ( My t_ym r_ym) 
 n (1 n)) ;_ c. setq 
 ) ;_ c. repeat 
 (list ( (/ Mx Ttl_Area) basex) ( (/ My Ttl_Area) basey))) ;c. defun 
(princ)
 
Arriba