AutoCad - offset en lisp

 
Vista:

offset en lisp

Publicado por VGAETE (83 intervenciones) el 14/05/2002 15:09:02
necesito hacer un offset a un arco de tres puntos hacia abajo, luego borrar el arco de referencia y hacer un fillet r=0 con dos
lineas que se encuentran en los extremos del arco.
Me pueden ayudar.....
Saludos
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

RE:offset en lisp

Publicado por SpeedCAD (362 intervenciones) el 14/05/2002 15:58:06
Hola amigo: Bueno vamos por paso:
1. cuando generes el arco luego en la linea siguiente debes ingresar lo siguiente (setq arco (entlas)) esto te almacenara en la variable arco el nombre de la ultima entidad que haz dibujado (en este caso un arco), entonces quedaria asi:
(command "arc" ...etc)
(setq arco (entlast))
2. ahora debes hacer el offset de la siguiente forma:
(command "offset" 10 arco (list 0 0)), con (list 0 0) te enviara el offset automaticamente hacia abajo.
3. para borrar el primer arco dibujado se hace de la siguiente forma:
(command "erase" arco "")
4. para hacer el fillet es asi (previamente debes almacenar las entidades con ENTLAST):
(command "fillet" "r" 0)
(command "fillet" linea1 linea2)

Y con eso queda listo....

Un saludo de SpeedCAD... :-)
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

RE:offset en lisp

Publicado por Oswaldo (1 intervención) el 16/12/2021 15:23:44
SpeedCAD tengo una duda, como puedo hacer el offset hacia arriba o hacia adentro de una figura?
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

RE:offset en lisp

Publicado por Gerardo (986 intervenciones) el 31/05/2022 21:14:24
Hola Oswaldo
No había visto esta pregunta.

Dejo esto por si en estos 5 meses aún no obtuviste la respuesta o por si a alguien más le sirve

Si haces offset con el método Offset (ActiveX) de los objetos este siempre se calcula hacia la derecha, por lo que un valor positivo irá a la derecha y un valor negativo a la izquierda en el sentido de avance. En cuanto a los arcos, siempre son en sentido antihorario, por lo que valor positivo es externo y valor negativo es interno.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
(defun c:offset-derecho ()
  (setq ent (car (entsel))
        obj (vlax-ename->vla-object ent)
        dist (getdist "distancia del offset")
  )
  (vlax-invoke-method obj 'Offset dist)
)
(defun c:offset-izquierdo ()
  (setq ent (car (entsel))
        obj (vlax-ename->vla-object ent)
        dist (getdist "distancia del offset")
  )
  (vlax-invoke-method obj 'Offset (- dist))
)

Y si quieres usar comandos, pues debes calcular un punto, en el caso de los arcos basta con un polar hacia uno de los extremos del arco, un valor de distancia mayor al radio será externo y un valor menor será interno.

En el caso de los polígonos, como estos pueden ser cerrados y trazados en sentido horario, no siempre derecha es externo. Lo que yo hago es sumar los angulos internos (con una medicion simple de delta entre cada par de aristas) para verificar si el lado de la mediciíón es externo o interno. Te dejo por aquí la funcióm que yo uso, que toma la lista de vértices y verifica si está trazado en sentido horario o antihorario:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
(defun gc:horario (lista / magic ant vert sig angini angfin increm angdef suma)
	(setq magic	(- (length lista) 2)
			suma	0
			ant	(nth magic lista)
			vert	(last lista)
	)
	(foreach sig lista
		(setq angini	(angle vert ant)
				angfin	(angle vert sig)
				increm	(- 6.283185307179586 angini)
				angdef	(rem (+ angfin increm) 6.2831853071796)
				suma		(+ suma angdef)
				ant		vert
				vert		sig
		)
	)
	(equal (* magic pi) suma 0.01)
)
(La sumatoria de angulos internos de cualquier polígono es igual a la cantidad-de-lados mutiplicado por pi radianes (o 180°) menos 2pi(360°)

Entonces si el poligono es horario derecha es interno y si el polígono es antihorario derecha=externo, y pues por ejemplo para hacer un offset a lo interno, usando el metodo Offset de objeto ActivX, si esa función retorna verdadero la distancia la pongo en positivo y si retorna falso (nil) la pongo en negativo
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