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

   
Vista:
Imágen de perfil de Nicolás

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

Publicado por Nicolás (21 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
información
Otras secciones de LWP con contenido de AutoCad
- Cursos de AutoCad
- Temas de AutoCad
- Chat de AutoCad
información
Cursos y Temas de AutoCad
- Manual AutoCad 2009 Bidimensional
- Curso de AutoCAD 2013
- Curso de AutoCad 2015

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

Publicado por Gerardo (443 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

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

Publicado por Nicolás (21 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

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

Publicado por Gerardo (443 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