AutoCad - AUTOLISP: crear linea, polilineas, etc con vista previa.

 
Vista:
Imágen de perfil de Nicolás
Val: 42
Ha mantenido su posición en AutoCad (en relación al último mes)
Gráfica de AutoCad

AUTOLISP: crear linea, polilineas, etc con vista previa.

Publicado por Nicolás (33 intervenciones) el 19/07/2016 17:39:09
Hola programadores! ando preguntando mucho lo se! pero necesito hacer polilineas sin saber que tantos vértices tendrá y ademas poder ir viendo como se va creando (como el comando polilinea en si), no se si me explico.

Ejemplo de utilidad:

El programa pedirá crear la polilinea cerrada, al terminar, se calculará el área de esta y la multiplicará por una altura que le diga...
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
sin imagen de perfil
Val: 1.338
Oro
Ha mantenido su posición en AutoCad (en relación al último mes)
Gráfica de AutoCad

AUTOLISP: crear linea, polilineas, etc con vista previa.

Publicado por Gerardo (783 intervenciones) el 20/07/2016 05:42:51
Hola

Ayer te decia que es preferible no usar command. Hoy te advierto que en casos como este la diferencia y dificultad entre usar el comando pline y no hacerlo es significativa

Te adjunto un par de funciones que ejemplifican cada metodo. Como veras la primera es bastante mas sencilla, y la segunda es bastante mas profesional.


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
(defun c:poly1 nil
	(command "_pline")
	(while (= (getvar "cmdactive") 1)
		(command pause)
	)
	(command)
	(command "_Area" "_object" "_last")
	(alert
		(strcat
			"Volumen: "
			(rtos (* (getvar "Area") (getreal "\nAltura:")) 2 2)
			"m³"
		)
	)
)
 
 
 
 
(defun c:poly2 ( / ptini puntos parar lectura codigo dato area altura)
	(setq ptini (getpoint "\nPunto inicial")
			puntos (list (list (car ptini)(cadr ptini)))
	)
	(prompt "\n  _Siguiente punto (u=deshacer, intro o click derecho para terminar.):")
	(while (null parar)
		(setq lectura (grread t 12 0)
				codigo (car lectura)
				dato (cadr lectura)
		)
		(cond
			(	(= codigo 5)
				(redraw)
				(grvecs
					(append
						(if (> (length puntos) 1)
							(cons 2 (apply 'append (mapcar 'list puntos (cdr puntos))))
						)
						(list -2 (car puntos) (list (car dato) (cadr dato)))
						(list 251 (last puntos) (list (car dato) (cadr dato)))
					)
				)
			)
			(	(= codigo 3)
				(setq puntos (cons (list (car dato)(cadr dato)) puntos))
			)
			(	(and	(= codigo 2)
						(member dato '(85 117))
						(> (length puntos) 1)
				)
				(setq puntos (cdr puntos))
			)
			(	(or (member codigo '(11 25))
					 (and (= codigo 2) (member dato '(13 32) ) )
				)
				(if (= codigo 11)(grread))
				(if (> (length puntos) 2)
					(progn
						(redraw)
						(entmake
							(append
								(list '(0 . "LWPOLYLINE")
										'(100 . "AcDbEntity")
										'(100 . "AcDbPolyline")
										(cons 90 (length puntos))
								)
								(mapcar '(lambda(A)(cons 10 A)) (reverse puntos))
								'((70 . 1))
							)
						)
						(setq area (vla-get-Area (vlax-ename->vla-object (entlast)))
								altura (getreal "\nAltura:")
						)
					)
				)
				(setq parar t)
			)
		)
 
	)
	(if (and area altura)
		(alert (strcat "Area: " (rtos area 2 2) "m²"
							"\nAltura: " (rtos altura 2 2) "m"
							"\n\nVolumen: " (rtos (* area altura) 2 2) "m³"
				)
		)
	)
)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Nicolás
Val: 42
Ha mantenido su posición en AutoCad (en relación al último mes)
Gráfica de AutoCad

AUTOLISP: crear linea, polilineas, etc con vista previa.

Publicado por Nicolás (33 intervenciones) el 20/07/2016 14:34:59
Gerardo, como siempre, es un asombro leer tus tan desarrolladas respuestas. Hacia mucho no leía un autolisp con tantos comandos desconocidos. El "cmdactive" seguro me servirá mucho, y con respecto al desarrollo profesional, tendré que estudiarlo bien ya que seguro utilizaré algo de eso en el futuro, muchas gracias!
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.338
Oro
Ha mantenido su posición en AutoCad (en relación al último mes)
Gráfica de AutoCad

AUTOLISP: crear linea, polilineas, etc con vista previa.

Publicado por Gerardo (783 intervenciones) el 20/07/2016 19:28:44
A la orden

Eso es con la polilinea que tiene la dificultad que mencionas de que las entradas de usuario son variables por no saber cuantos vertices tendra.

En una linea comun es muy simple, basta con darle el primer punto como argumento a la funcion getpoint al solicitar el segundo y veras una liga entre el primero y el cursor

1
2
3
(setq pt1 (getpoint "Primer punto:")
      pt2 (getpoint "Segundo punto:" pt1)
)

Incluso eso te reconocera los valores de modo ortogonal y rastreos angulares que tengas activos

Otra opcion con la polilinea es dibujarla con dos vertices despues de solicitar el segundo, y luego solicitar un tercer punto con el metodo de getpoint que te comente y en vez de hacer una nueva poli mas bien le agregas el nuevo punto al final a la existente.

De nuevo eso funcionaria con command agregando con la opcion insert del comando pedit, con DXF, aplicando entmod a una lista extendida con el nuevo punto o con ActiveX con el metodo Vla-AddVertex del objeto polilinea.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

AUTOLISP: crear linea, polilineas, etc con vista previa.

Publicado por osven (2 intervenciones) el 21/12/2018 06:06:30
estimado Gerardo :

Justo estaba buscando informacion parecida a esta la cual esto es lo mas que se asemeja a lo que busco .

pero mi duda es. que pasa si tengo las coordenadas de varias lineas. me explico un poco mejor.
yo tengo que insertar lineas en autocad las cuales las tengo en excel.
en excel tengo sus coordenadas en (x,y) de cada extremo.

es decir . ej (1,1) - (2,2) ----> extremos de la linea

1
2
3
(setq pt1 (getpoint "1,1:")
      pt2 (getpoint "2,2:" pt1)
)


creo que aplicaria. porque pongo los datos de cada extremo y lisp crearía las lineas.
ahora bien, tengo 400 lineas existe una forma donde pueda crear esto en lisp de alguna forma mas automática ?

te agradecería tu ayuda saludos
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 Nicolás
Val: 42
Ha mantenido su posición en AutoCad (en relación al último mes)
Gráfica de AutoCad

AUTOLISP: crear linea, polilineas, etc con vista previa.

Publicado por Nicolás (33 intervenciones) el 21/12/2018 18:13:05
Lo que quieres hacer es generar una polilinea con esas líneas? O solo dibujarlas y listo?

El código que mencionaste solo se usa para seleccionar puntos y guardarlos en variables, si ya tienes los extremos en Excel y solo quieres que se grafiquen líneas a partir de tu Excel no necesitarás de getpoint.
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

AUTOLISP: crear linea, polilineas, etc con vista previa.

Publicado por osven (2 intervenciones) el 21/12/2018 18:49:14
hola nicolas .
gracias por contestar . claro tengo los extremos de todas las lineas aprox 400 lineas es decir 800 coordenadas
y necesito crear estas lineas independiente una de otra ... por que al ser polilineas influye el orden en que se ingresan estas coordenadas .

yo tengo un conocimiento basico mas inclinado al nulo sobre programacion lisp .
por eso mi duda si existe un codigo en lisp donde pueda escribir estos puntos extremos de la linea y crearlas en autocad.

no se si me explique bien ...

de antemano te agradezco tu tiempo .
saludos
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 Nicolás
Val: 42
Ha mantenido su posición en AutoCad (en relación al último mes)
Gráfica de AutoCad

AUTOLISP: crear linea, polilineas, etc con vista previa.

Publicado por Nicolás (33 intervenciones) el 27/12/2018 18:03:37
Perdón por tardar en la respuesta, las fiestas me tuvieron ocupado jaja.
No sé si ya has avanzado en el tema pero si, se puede hacer... Tendré que rememorizar el uso de autolisp con Excel pero no llevará mucho tiempo, si quieres ni bien leas esto escríbeme cómo están ordenadas las coordenadas en el Excel para poder tomar los datos.
Un saludo
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 Nicolás
Val: 42
Ha mantenido su posición en AutoCad (en relación al último mes)
Gráfica de AutoCad

AUTOLISP: crear linea, polilineas, etc con vista previa.

Publicado por Nicolás (33 intervenciones) el 26/01/2017 16:14:57
Ya pasó su buen tiempo desde esta consulta pero finalmente necesité el desarrollo mas profesional, ya lo estudié y hasta hice mis muchas modificaciones (para hacer un recuadro estilo selección en el caso actual)... me surge una única duda al respecto, se puede hacer otras formar que no sean rectas, como círculos, curvas, elipses... realmente ahora no lo necesito, pero me surgió la duda... por lo que con un si y la mención del comando me alcanzaría para investigarlo, no es necesario que hagas toda una demostración jeje.
Y como siempre, muchas gracias por tus ayudas.
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