Cerrar
¿Te gusta hispacad? Compártelo
Llámenos: 668 83 00 83

Creacion de un arco a partir de dos puntos y longitud

El lenguaje de programación principal que tiene AutoCAD® para la personalización, permitiendo crear programas o rutinas que mejoran o complementan las herramientas existentes. Con unas nociones básicas de este lenguaje de programación es posible realizar programas que optimicen tareas repetitivas o incluso realicen tareas de gran complejidad. Trate de plantear sus dudas exponiendo ejemplos de lo que desea conseguir. Evite pedir la realización de un programa completo. Este foro está dedicado a la resolución de dudas concretas de un determinado código o parte del mismo.

Moderadores: Jorge_BH, Yoland, SpeedCAD, Acad version, devitg

Creacion de un arco a partir de dos puntos y longitud

Notapor navearg » Mar 13 May, 2008 02:05

Estimados, tengo un pequeño gran problema que planteo a ver si pudieran darme una mano.

Necesitaria poder crear un arco ente dos puntos y que tenga una longitud determinada.

Es decir, dada una distancia (p/ej: 2m) entre dos puntos seleccionados en el dibujo, poder dibujar un arco que una esos dos puntos con una longitud de un 10% mas (es decir: 2.20).

Subo un ejemplo para tratar de clarificar un poco mas la necesidad.

Bueno, es todo por el momento.

Salu2 a to2.
No tienes los permisos requeridos para ver los archivos adjuntos a este mensaje.
Sera lo que deba ser, sino no sera nada. Incluso asi seria algo: "nada".
navearg
 
Mensajes: 49
Registrado: Mié 26 Sep, 2007 23:23
Ubicación: Posadas - Misiones

Notapor gerardogqa » Mar 13 May, 2008 16:02

No es la solucion que un matematico quisiera ver, porque solo funciona para el caso que planteas del 10% mas y el bulge lo encontre por aproximacion grafica, pero a fin de cuentas es una forma, rustica pero valida, de resolverlo


Código: Seleccionar todo
(defun c:algo ( / p1 p2 H D R B C)
   (setq p1 (getpoint "Primer punto")
        p2 (getpoint "segundo punto")
        B 0.3930365552623698
        D (distance p1 p2)
        H (* B D 0.5)
        R (+ (/ (* D D) (* 8.0 H)) (* 0.5 H))
        C (polar p1 (+ (angle p1 p2) (atan ( / (- R H) (/ D 2.0) )) ) R)
   )
   (entmake (list '(0 . "ARC")'(100 . "AcDbEntity")'(410 . "Model")(cons 10 C)
   (cons 40 R)'(210 0.0 0.0 1.0)(cons 50 (angle C p1))(cons 51 (angle C p2))))
)
gerardogqa
 
Mensajes: 2312
Registrado: Mar 06 Mar, 2007 21:47

Notapor dominguez » Mar 13 May, 2008 16:13

Bueno para que veas que respondemos a tu solicitud, aqui tienes otra solucion, un poco mas divertida que la anterior.

Código: Seleccionar todo
   ; Dibuja un arco de longitud indicada de extremo a extremo de una linea.
   ; Luis dominguez Gómez © 2008

(defun c:arco_long (/ arco_real cuerda p1 p2 arco_ok p0)
   (setvar "cmdecho" 0)
   (setvar "ucsicon" 2)
   (setvar "cecolor" "1")
   (setq cuerda (entget (car (entsel))))
   (setq p1 (cdr (assoc 10 cuerda)))
   (setq p2 (cdr (assoc 11 cuerda)))
   (setq cuerda (distance p1 p2))
   (prompt "\nLongitud de linea: ")
   (prin1 cuerda)
   (setq arco_ok (getreal "   ¿Longitud de Arco?: "))
   (setq p0 (polar p1 (angle p1 p2) (/ cuerda 2.0)))
   (setq p0 (polar p0 (+ (angle p1 p2) (/ pi 2.0)) (* cuerda 0.002)))
   (command "_arc" p1 p0 p2)
   (command "_PEDIT" (entlast) "_Y" "_X")
   (command "_area" "_o" (entlast))
   (setq arco_real (getvar "perimeter"))
   (while (< arco_real (* arco_ok 0.995))
      (command "_erase" (entlast) "")
      (setq p0 (polar p0 (+ (angle p1 p2) (/ pi 2.0)) (* cuerda 0.002)))
      (command "_arc" p1 p0 p2)
      (command "_PEDIT" (entlast) "_Y" "_X")
      (command "_area" "_o" (entlast))
      (setq arco_real (getvar "perimeter"))
   )
   (while (<= arco_real (* arco_ok 1.0))
      (command "_erase" (entlast) "")
      (setq p0 (polar p0 (+ (angle p1 p2) (/ pi 2.0)) (* cuerda 0.00001)))
      (command "_arc" p1 p0 p2)
      (command "_PEDIT" (entlast) "_Y" "_X")
      (command "_area" "_o" (entlast))
      (setq arco_real (getvar "perimeter"))
   )
   (command "_change" (entlast) "" "_p" "_c" "_bylayer" "")
   (setvar "cecolor" "bylayer")
   (command "_explode" "_l")
   (prin1)
)


Saludos
Última edición por dominguez el Mar 20 May, 2008 08:48, editado 3 veces en total
Luis Dominguez Gómez
Uso acad 2008 en VISTA.
luisfuentef@gmail.com

Cuando creas que ya lo tienes claro, Te equivocas
Lo bueno deja de serlo, cuando se descubre algo mejor
dominguez
 
Mensajes: 1762
Registrado: Vie 25 Feb, 2005 14:59
Ubicación: Zaragoza (ESPAÑA)

Notapor prexem » Mar 13 May, 2008 23:37

........................................................................................
Última edición por prexem el Vie 03 Sep, 2010 06:27, editado 2 veces en total
prexem
 
Mensajes: 691
Registrado: Mar 30 Ene, 2007 21:13

Notapor navearg » Mié 14 May, 2008 21:40

Estimadisimos, muchisismas gracias a cada uno por su ayuda!
Ando con poco tiempo por cuestiones laborales, pero prometo entre esta noche o mañana estudiare las respuestas y pondre otra opcion que se me ocurrio!

Salu2 a to2!
Sera lo que deba ser, sino no sera nada. Incluso asi seria algo: "nada".
navearg
 
Mensajes: 49
Registrado: Mié 26 Sep, 2007 23:23
Ubicación: Posadas - Misiones

Re: ...........

Notapor alomarc » Jue 15 May, 2008 14:59

prexem escribió:Otra solución:
8)


Oye, tiene por ahi alguna fallita ya que el resultado no te da realmente un 10%. Aqui mi resultado:

ARC Layer: "3"
Space: Model space
Handle = 1979
center point, X= 63.1373 Y= 104.4627 Z= 0.0000
radius 1.4895
start angle 48
end angle 132
length
2.1927

Salu2.
eh, perdon !
¡No!, el AutoCAD es una herramienta de ayuda para tu trabajo...
... Mas nunca hara tu trabajo !
ok . . . ?
Oye . . . tu haces la diferencia. http://www.usuarios.lycos.es/ayudemosasofia/
alomarc
 
Mensajes: 191
Registrado: Mié 27 Feb, 2008 19:52

Notapor navearg » Jue 15 May, 2008 22:23

Estimados, he probado fusgasmente las soluciones planteadas:
Las de gerardogqa y prexem, si bien no termino de entenderlas dan buenos resultados, muy aproximados.
La de dominguez no me funciona.
Aca pongo otra que da resultados aproximados que logre armar por prueba y error.

Código: Seleccionar todo
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Dibuja una polilina con forma de arco con un 10% mas de longitud que la distancia lineal ;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; By Navearg - 05/2008 ;;;
;;; navearg@hotmail.com ;;;

(defun c:dibcan ()
 
  (setq p1 (getpoint " \nSeleccionar punto de inicio")
   p2 (getpoint " Seleccionar punto final" p1)
     dist (distance p1 p2)
     rad (* dist 0.7343)
   )
  (command "_pline" p1 "a" "r" rad p2 "")

)


No considero que sea una solucion muy algebraica pero alcanza los resultados!. Estoy en plan de averiguar cual seria la solucion algebraicamente correcta y que permita, a traves de una variable, setear el porcentaje de incremento deseado, para poder luego codificarla.

Cuando consiga algun avance lo publico.

Salu2 a to2 y nuevamente muchas gracias.
Sera lo que deba ser, sino no sera nada. Incluso asi seria algo: "nada".
navearg
 
Mensajes: 49
Registrado: Mié 26 Sep, 2007 23:23
Ubicación: Posadas - Misiones

Notapor prexem » Jue 15 May, 2008 22:54

..........................................................................................
Última edición por prexem el Vie 03 Sep, 2010 06:21, editado 1 vez en total
prexem
 
Mensajes: 691
Registrado: Mar 30 Ene, 2007 21:13

Notapor prexem » Jue 15 May, 2008 23:20

...........................................................................................
Última edición por prexem el Vie 03 Sep, 2010 06:28, editado 1 vez en total
prexem
 
Mensajes: 691
Registrado: Mar 30 Ene, 2007 21:13

Notapor prexem » Vie 16 May, 2008 00:21

..................................................................................
Última edición por prexem el Vie 03 Sep, 2010 06:28, editado 1 vez en total
prexem
 
Mensajes: 691
Registrado: Mar 30 Ene, 2007 21:13

Notapor devitg » Vie 16 May, 2008 02:52

Hola Prexem . me puedes explicar el cómo o el porqué de esto

radio (* 0.75 long_cuerda).

Gracias
Uso acad 2008 en XP.
DEVITG@GMAIL.COM
Si tuviera ocho horas , para voltear un arbol , me pasaria seis horas afilando mi hacha.
Abraham Lincoln
Mi nombre es Gabriel (Gabo)
devitg
 
Mensajes: 5526
Registrado: Lun 15 Mar, 2004 00:46
Ubicación: CORDOBA ARGENTINA

Notapor prexem » Vie 16 May, 2008 03:15

..................................................
Última edición por prexem el Vie 03 Sep, 2010 07:04, editado 16 veces en total
prexem
 
Mensajes: 691
Registrado: Mar 30 Ene, 2007 21:13

Notapor devitg » Vie 16 May, 2008 03:38

Gracias
Uso acad 2008 en XP.
DEVITG@GMAIL.COM
Si tuviera ocho horas , para voltear un arbol , me pasaria seis horas afilando mi hacha.
Abraham Lincoln
Mi nombre es Gabriel (Gabo)
devitg
 
Mensajes: 5526
Registrado: Lun 15 Mar, 2004 00:46
Ubicación: CORDOBA ARGENTINA

Notapor dominguez » Vie 16 May, 2008 08:15

navearg escribió:Estimados, he probado fusgasmente las soluciones planteadas:

La de dominguez no me funciona.

Salu2 a to2 y nuevamente muchas gracias.

A mi en autocad 2005 me funciona perfectamente, mira el dibujo para que veas la forma de trabajar de la rutina, modificandole un par de variables, puedes obtener la precision que tu prefieras.
Ademas mi solucion es para cualquier longitud de arco que quieras conseguir, (no solamente +10%)

Un saludo
No tienes los permisos requeridos para ver los archivos adjuntos a este mensaje.
Luis Dominguez Gómez
Uso acad 2008 en VISTA.
luisfuentef@gmail.com

Cuando creas que ya lo tienes claro, Te equivocas
Lo bueno deja de serlo, cuando se descubre algo mejor
dominguez
 
Mensajes: 1762
Registrado: Vie 25 Feb, 2005 14:59
Ubicación: Zaragoza (ESPAÑA)

Re: ...........

Notapor alomarc » Vie 16 May, 2008 16:51

[/quote]Realmente en operaciones intermedias el autocad redondea cifras,
creando siempre algún margen de error, pero el dato de la longitud
de arco es introducido como:
long_arco=(* 1.10 long_cuerda)
:arrow:[/quote]

Si tienes razon, mas bien no me exprese como quise, lo qu e intente decir fue exactamente que en 4 decimales aun un usuario normal los podria utilizar . . . manejando la misma precision en AutoCAD.. como en el Lisp de gerardo:

ARC Layer: "3"
Space: Model space
Handle = 725f
center point, X= 9.2761 Y= 16.7263 Z= 0.0000
radius 1.4687
start angle 227
end angle 313
length 2.2000


Pero si, es cuestion de darle la precision que uno considera para su trabajo.
Felicidades a todos y gracias por compartirlos.

salu2.
eh, perdon !
¡No!, el AutoCAD es una herramienta de ayuda para tu trabajo...
... Mas nunca hara tu trabajo !
ok . . . ?
Oye . . . tu haces la diferencia. http://www.usuarios.lycos.es/ayudemosasofia/
alomarc
 
Mensajes: 191
Registrado: Mié 27 Feb, 2008 19:52

Siguiente

Volver a AUTOLISP / VISUAL LISP

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados