¡Resuelto! Ir a solución.
Celso, Buenos días!
..a proposito de sun intervención con el lisp! me gustaría que me ayudaras con una rutina igual, pero que en ves de circulos, sea con poligonos, que pueda contar los objetos que estén dento de cualquier poligono señalado! saludos.
gracias.
Puedes hacer una consulta usando AutoCAD MAP / AutoCAD Civil 3D. Esta consulta te permite seleccionar los elementos que te interesan del dibujo basado en referencias externas. Luego puedes usar el comando qselect para seleccionar todos los que te interesan y si quieres usar un reporte o tabla de todos los datos que aparecen en el circulo puedes usar Data Extaction para sacar estos valores (inclusive exportarlos a MS Excel)
Aqui pongo un ejemplo, cuando lo hice:
Hola:
Autocad no tiene un modo de selección automática de objetos al interior de un círculo, pero se puede hacer algo aproximado con un poquito de programación lisp:
1.- Obtener el círculo contenedor (variable cc) y sus datos: centro, radio
(setq cc (entget (car (entsel))))
(setq radio (cdr (assoc 40 cc)))
(setq centro (cdr (assoc 10 cc)))
2.- Utilizar puntos sobre este círculo
;;Esta función entrega una lista de n puntos localizados en el perímetro del círculo con centro en center y radio ;;radius
(defun DiscretizeCircle(center radius n / ii delta px pxlist oldosmode)
(setq ii 0)
(setq delta (/ (* 2 pi) n))
(setq oldosmode (getvar "osmode"))
(setvar "osmode" 0)
(while (< ii n)
(setq px (polar center (* delta ii) radius))
(setq pxlist (cons px pxlist))
(setq ii (+ ii 1))
)
(setvar "osmode" oldosmode)
pxlist
)
3.- Filtrar para obtener los objetos (en la variable ss) al interior de este "círculo" (ahora es un polígono de n lados
(setq ss (ssget "wp" pxlist))
4.- contar objetos
(steq nobjetos (sslength ss))
5.- informar lo encontrado
(alert (strcat "Se encontró" (itoa nobjetos)))
Con todo eso tenemos para hacer una sola función del tipo comando:
(defun c:ObjIntCirc(/ cc radio centro pxlist ss)
(setq cc (entget (car (entsel))))
(setq radio (cdr (assoc 40 cc)))
(setq centro (cdr (assoc 10 cc)))
(setq pxlist (DiscretizeCircle centro radio 100)) ;100 puntos en la lista
(setq ss (ssget "wp" pxlist))
(if ss ; podría no haber objetos en ese caso ss es nil
(progn
(setq nojetos (sslength ss))
(alert (strcat "Se encontró " (itoa nobjetos) " objetos" ))
)
(alert "No hay objetos al interior del círculo")
)
(princ)
)
Para usarla debes cargar las funciones:
DiscretizeCircle y c:ObjIntCirc , o mejor ponerlas en un archivo de texto con extensión lsp y cargarlo con appload, o desde la IDE de VL.
Tiene practicamente 0 chequeo de errores por lo que se puede caer si no seleccionas un círculo al principio y por varios otros motivos, pero debería funcionar
Gastón Núñez
me gustaria si pueden enviarme una rutina para realizar o calcular e numero de objetos detro de un poligono y que me coloque la etiqueta de la cantidad de objetos.
gracias..o si en civil 3d hay una forma mas facil trabajando con parcel?????
Como seleccionar objetos o bloques dentro de una región o área especifica del plano en Autocad
seleccionar objetos o bloques dentro de un área especifica en el plano, aplicamos el comando SELECR, aparece un cuadro se selección, donde dice "aplicar a" esta la opción de "todo el dibujo", en lugar de esto damos clic en el cuadro de selección de objetos
aparecerá selección objetos, en la opción "Tipo de objeto" , colocamos referencia a bloque seleccionamos "nombre" y escogemos el nombre del bloque que necesitamos seleccionar en el área o región, aplicamos tecla Enter y aparecerán los bloques que se encuentre en esa área o región
¿No encontraste lo que buscabas? Pregúntale a la comunidad o comparte tus conocimientos.