AutoCad - Bloque Sumatorio para IPs

 
Vista:

Bloque Sumatorio para IPs

Publicado por LZK (2 intervenciones) el 07/05/2025 15:01:19
Buenos días:

Estoy tratando de conseguir un bloque de autocad, el cual cada vez que lo inserte en el plano, realice un sumatorio automático, partiendo desde el 1 y sumando hasta el infinito. El motivo es crear un bloque que una vez selecciones una polilínea se coloque ese bloque en cada vértice de la polilínea y además haga un sumatorio de los vértices de dicha línea y vaya indicando vertice 1, vertice 2, vertice 3...
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Javier

Bloque Sumatorio para IPs

Publicado por Javier (9 intervenciones) el 23/01/2026 13:43:34
Se ve interesante tu cuestionamiento. ¿ya lo resolviste?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Bloque Sumatorio para IPs

Publicado por Lzk (2 intervenciones) el 24/01/2026 10:17:58
No, la verdad que por falta de tiempo no he podido investigar demasiado, pero el mayor problema es conseguir que el bloque vaya incrementando su valor automaticamente cada vez que marca un ip, un vetice.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Juanma
Val: 171
Bronce
Ha mantenido su posición en AutoCad (en relación al último mes)
Gráfica de AutoCad

Bloque Sumatorio para IPs

Publicado por Juanma (11 intervenciones) el 25/01/2026 13:45:09
Buenas,
Yo haría lo siguiente:
Primero creo un bloque con un atributo que sea el numero en cuestión, en principio, como si los fuera a colocar a mano. o puede ser una directriz con bloque.

segundo crea una rutina lisp en la que seleccionando la polilinea te coloque el bloque y te actualice el atributo con el numero del vértice.

si le solicitas la rutina lisp a Gemini, y le describes detalladamente lo que quieres que haga, puede que te la genere (a principio tenia muchos fallos, pero ya cada vez lo hace mejor).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de javier

Bloque Sumatorio para IPs

Publicado por javier (9 intervenciones) el 25/01/2026 20:58:39
Hola juanma,

Es lo que pense en un inicio; en algún momento, vi por la web, algo relacionado con este tema.
si logro encontrarlo, lo posteare con gusto.

Saludos...estamos en linea
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 1.285
Oro
Ha mantenido su posición en AutoCad (en relación al último mes)
Gráfica de AutoCad

Bloque Sumatorio para IPs

Publicado por Gerardo (980 intervenciones) el 27/01/2026 02:06:38
Hola Señores

Como a mi me encanta buscarle la quinta pata a los gatos , les dejo una pequeña rutina pero precedida de algunas anotaciones al respecto de este tema

1-Como se puede deducir de la propuesta de Juanma, en AutoCad no existe gran posibilidad de darle "comportamientos de este tipo" a los bloques al momento de insertar. Irónicamente algunos otros CAD del mercado, que son como "clones" de AutoCAD si tienen ese tipo de herramientas. Si quieren verlas en acción les dejo un par de links a videos:

GStarCAD (el que yo uso - este permite seleccionar la ruta de una polilínea como patrón de incremento)
https://youtu.be/d1cJM_uF8UI

ActCAD (no hace todo lo de autocad pero creo que es el más barato de todo el mercado y para algunos usuarios puede ser suficiente)
https://youtu.be/_VuBPhfXXYA

ZWCad No tiene propiamente algo como el comando ATTINC de los dos anteriores, pero la herramienta de copiar textos incrementando (que tambien la tienen casi todos los CAD del mercado excepto Autocad ) permite copiar atributos según entiendo

2-Ya que en autocad no se puede dar valor autoincrementado al insertarlo, pues el secreto estará en la forma de insertarlo que da más flexibilidad. Desde luego que para los que entramos a este foro siempre una rutina es lo mejor, porque las podemos hacer "a la medida", ¿pero que otra opción tendría en mi caso si solo tuviera Autocad (no gstarcad), si no supiera programar y no consiguiera la rutina y fueran cientos de atributos que no quiero editar uno por uno?
Que tal esto:
1-Insertar los bloques (todos con el numero 1 en el atributo)
2-Exportar los atributos a un TXT con ATTOUT
3-Al seleccionarlos para exportarlos hacerlo con el metodo "Fence" siguiendo la poli para que queden ordenados
4-Editar el TXT en excel donde se autonumera el valor del atributo
5-Reimportar el txt con ATTIN

3-Aunque creo que no valdrá para este tema, si es muy importante reconocer lo poderoso que es un atributo que contiene un campo (field) tipo objeto que apunta al propio bloque. Lo incluyo porque supongo que en un proyecto donde se rotulan vértices también se puede querer capturar coordenadas, o distancias que si valen para campos. Desgraciadamente las polilineas no tienen una propiedad que apunte al numero de vertice, pero en todo caso por si no lo han usado dejo por aqui un ejemplo. Solo se debe crear el field en la primera insercion, y luego irlo copiando, y al regenerar los valores se actualizan
https://drive.google.com/file/d/18ZPCcJNE0f2yyZoxOHV6lSxIB10Po05r/view?usp=sharing

Bien, gracias por la paciencia si me leyeron todo jaja... aqui esta la idea de rutina, escrita en terminos didácticos:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
(defun c:test ( / alt-texto lent nent vrts cont objt angAnt angSig angulo angmen angmay angmed rotar ptoAtt)
	(setq alt-texto 2.5)
	;definir un bloque sencillo. Se puede cambiar por un nombre fijo de uno que ya existe
	(if (null (tblsearch "BLOCK" "Auto-PI-Vertice"))
		(mapcar	'entmake
			'(	((0 . "BLOCK")(100 . "AcDbEntity")(100 . "AcDbBlockBegin")(70 . 0)(2 . "Auto-PI-Vertice")(10 0 0 0))
				((0 . "LINE")(8 . "Auto-PI-Vertice")(62 . 0)(10 0.5 0. 0.)(11 5. 0. 0.))
				((0 . "CIRCLE")(8 . "Auto-PI-Vertice")(62 . 0)(10 0. 0. 0.)(40 . 0.5))
				((0 . "ENDBLK")(100 . "AcDbEntity")(100 . "AcDbBlockEnd"))
			)
		)
	)
 
	(if	(=	"LWPOLYLINE" (cdr (assoc 0	;Verificación de que la entidad sea una lwply
		;Seleccionar una polilínea liviana
		(setq nent	(car (entsel "Seleccione una polilínea:"))
				lent	(entget nent)
		))))
		(progn
			;extraer vértices
			(setq vrts	(mapcar 'cdr (vl-remove-if '(lambda(A)(/= (car A) 10))lent))
			;Contador de vértice
					cont	0
			;Objeto activX para obtener angulos
					objt	(vlax-ename->vla-object nent)
			)
			;iterar por cada vértice
			(while (setq vert (car vrts))
				(setq vrts		(cdr vrts)	;Ir reduciendo vértices por analizar
						;Calcular el ángulo de inserción del bloque (y rotación del texto)
						;Esto lo complicamos usando vlax-curve-getFirstDeriv en vez de solo (angle pt1 pt2) para que si la poli tiene curvas
						;los ángulos sean perpendiculares a las tangencias (de la poli, no neceariamente de ejes viales)
						angAnt	(if (> cont 0)
										(rem (+ (angle '(0. 0. 0.) (vlax-curve-getFirstDeriv objt (- cont 0.01))) pi) (* 2 pi)) ;angulo del tramo anterior
									)
						angSig	(if vrts
										(angle '(0. 0. 0.)  (vlax-curve-getFirstDeriv objt (+ cont 0.01)))				;angulo del tramo siguiente
									)
						angulo	(cond				;aangulo medio para el bloque
										(	(null angAnt)								;si es el primer tramo
											(rem (+ angSig (/ pi 2)) (* 2 pi))	;irá perpendicular a este por la izquierda
										)
										(	(null angSig)									;si es el ultimo tramo
											(rem (+ angAnt (* pi 1.5)) (* 2 pi))	;irá perpendicular al mismo por la izq
										)
										; Si es intermedio calcular la mediatriz del lado más abierto
										(	(setq angmen	(min angAnt angSig)
													angmay	(max angAnt angSig)
													angmed	(/ (- angmay angmen) 2)
											)
											(rem
												(if (< angmed (/ pi 2))
													(+ angmay pi (- angmed))
													(+ angmen angmed)
												)
												(* 2 pi)
											)
										)
									)
						;si se debe rotar el atributo para que no quede de cabeza
						rotar		(< (/ pi 2) angulo (* pi 1.5))
						;Punto de insercion del atributo
						ptoAtt	(polar vert angulo (* alt-texto 1.2))
						;avanzar el contador de vértices (se pone aquí porque el parámetro para vlax-curve-getFirstDeriv
						;inicia en 0 pero la numeración de atributos inicia en 1)
						cont		(1+ cont)
 
				)
				;Insertar el bloque
				(entmake (list	'(0 . "INSERT")
									'(2 . "Auto-PI-Vertice")
									(cons 10 vert)			;posición
									(cons 50 angulo)		;rotación
									(cons 41 alt-texto)	;escala en función
									(cons 42 alt-texto)  ;de la altura del
									(cons 43 alt-texto)  ;texto indicada
									'(66 . 1)				;Incluye atributos
							)
				)
				;Crear el atributo
				(entmake	(list
								'(0 . "ATTRIB")
								'(410 . "Model")
								(cons 10 ptoAtt)
								(cons 1 (strcat "PI: " (itoa cont)))
								'(7 . "STANDARD")
								(cons 72 (if rotar 2 0))
								(cons 11 ptoAtt)
								'(2 . "P.I.")
								(cons 40 alt-texto)
								'(70 . 0)
								(cons 50 (+ angulo (if rotar pi 0)))
								'(74 . 1)
								'(280 . 1)
							)
				)
				;finalizan antributos
				(entmake '((0 . "SEQEND")(100 . "AcDbEntity")))
			)
		)
		(alert "No seleccionó una polilínea válida")
	)
	(princ)
)

Basicamente es insertar un bloque con un atributo e ir incrementando el valor. Yo le agrego dos puntos que son los que le dan alguna complejidad: 1-que en cada vértice elija la mediatriz al lado donde el angulo es más abierto para que en angulos cerrados no se traslape el bloque con la misma polilinea y 2-Invertir la rotación y justificación del atributo cuando el ángulo del bloque va hacia la izquierda, esto para que no quede el texto de cabeza.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar