Comunidad
AutoCAD - Todos los productos - Español
Bienvenido/a al foro de los productos de la familia AutoCAD de Autodesk! Comparte tu conocimiento, haz preguntas y explora los temas populares de AutoCAD.
cancelar
Mostrando los resultados de 
Mostrar  solo  | Buscar en lugar de 
Quiere decir: 

Lisp para convertir 2D polyline a 3D polyline

3 RESPUESTAS 3
RESUELTAS
Responder
Mensaje 1 de 4
Ray-Sync
334 Vistas, 3 Respuestas

Lisp para convertir 2D polyline a 3D polyline

Hola, espero que estén bien. Tengo una pregunta relacionada al título: ¿Conocen de algún lisp para lograr obtener un 3D polyline o un spline a partir de un 2D polyline?
Sucede que he dibujado esto en AutoCAD:

RaySync_0-1698180414465.png

Mediante programación. Los conocedores del tema entenderán que la propiedad "setbulgue" es solo para un 2D polyline, pero dado que quiero dibujar un 3D polyline o un spline y, con los beneficios que me ofrece setbulgue, me veo obligado primero a dibujar en 2D para luego convertirlo a un 3D polyline o un spline. En otras palabras,  quiero crear un "estribo en 3D" mediante programación en VBA pero si me proporcionan una rutina LISP, tendré la orientación necesaria para lograrlo.
El procedimiento por el cual estoy trabajando  básicamente es "extruir" un círculo a lo largo de un "path" (representado por una polilínea en 3D o spline) para crear ese dibujo. Pero no puedo crear un 3D polyline, directamente porque no tiene la propiedad "setbulgue", el único que lo tiene es un "2D polyline". Tampoco puedo  usar el método extruir sobre esa polilínea en 2D porque hay lados que se intersectan y AutoCAD no permite eso.
En conclusión, si pudieran orientarme, os agradecería.
Att. Jeff..  

jefferson
3 RESPUESTAS 3
Mensaje 2 de 4
calderg1000
en respuesta a: Ray-Sync

Saludos @Ray-Sync 

Creo que val-setbulge si se puede aplicar a una Lwpolyline, Solo que es un tema algo elaborado pero con mucho sentido. Aquí te dejo el link de un código el que te puede ayudar. 

https://adndevblog.typepad.com/autocad/2012/09/setting-the-bulge-of-a-polyline-using-activex-in-lisp...

Por otro no creo que sea necesario convertir a 3DPolyine ya que a una Lwpolyline también se le puede aplicar Extrude para obtener los estribos en 3D. 

Aunque constructivamente un estribo para una columna o una viga, no se encuentran en un mismo plano, pero para efectos de presentación, creo que seria suficiente que se dibuje un un plano, dándole a uno de los ganchos un radio menor, tal como se visualiza en la imagen.

calderg1000_0-1698330968251.png

 

 

 


Carlos Calderon G
EESignature
>Did you find this post helpful? Feel free to Like this post.
Did your question get successfully answered? Then click on the ACCEPT SOLUTION button.

Mensaje 3 de 4
Ray-Sync
en respuesta a: calderg1000

Gracias por la respuesta @calderg1000. Concuerdo con tu enunciado "val-setbulge si se puede aplicar a una Lwpolyline" y el cual es un método excelente para generar las curvas necesarias de un Lwpolyline. No obstante, los  Lwpolylines o polylines no trabajan con las coordenadas "z"  o al menos eso sé de mi experiencia con VBA para AutoCAD. Y, dado que, mi finalidad es generar un estribo en 3D usando la función "extrude along path" de AutoCAD, me veo obligado a crear un 3D polyline porque Lwpolyline tiene lados superpuestos (las curvas de los ganchos son los que se superpornen).
Como mencioné anteriormente, un 3D polyline no tiene  la propiedad "setbulge" y tras pensarlo detenidamente creo que optaré por generar las curvas de los estribos mediante la composición de varios puntos, algo parecido como un helicoidal:

Sub Helicoide()
'definir variables
Dim pl As Acad3DPolyline
Dim rad As Double, dia As Double, sc As Double, alt As Double
Dim pi As Double, dz As Double, dh As Double, da As Double, dr As Double
Dim cc(0 To 2) As Double
Dim pp As Variant
Dim p() As Double
Dim k As Integer, num As Integer
' asignar valores
rad = 1: dia = 0.25: num = 4: sc = 3: alt = sc * num
pi = 4 * Atn(1): dz = sc / 128: dh = dz: da = pi / 64: dr = da
'crear centro
cc(0) = 0#: cc(1) = 0#: cc(2) = 0#:
' Bucle para crear los puntos a lo largo del helicoide
Do While dz <= alt
pp = ThisDrawing.Utility.PolarPoint(cc, da, rad)
' Agrega los puntos al array p
ReDim Preserve p(k + 2)
p(k) = pp(0):  p(k + 1) = pp(1):  p(k + 2) = dz
' Actualiza las variables dz y da para avanzar en el helicoide
dz = dz + dh: da = da + dr
k = k + 3
Loop
' Crea una polilínea 3D a lo largo del helicoide
Set pl = ThisDrawing.ModelSpace.Add3DPoly(p)
End Sub

 

jefferson
Mensaje 4 de 4
calderg1000
en respuesta a: Ray-Sync

Saludos @Ray-Sync 

Que genial ese código VBA para crear la helicoidal, pero obedece a una distribución de puntos con un arreglo POLAR., como se podría adaptar para que se ajuste a un estribo.

Intente algo rápido y obtuve lo siguiente, parece que la idea esta buena porque se genera un traslape interesante. Pero muy lejos de parecerse a un estribo.

Hice los cambios aquí y luego le aplique extrude.

 

' asignar valores
rad = 1: dia = 0.25: num = 1: sc = 0.1: alt = sc * num
pi = 4 * Atn(1): dz = sc / 128: dh = dz: da = 1.2 * pi / 64: dr = da

 

 

calderg1000_0-1698466824717.png

 

 


Carlos Calderon G
EESignature
>Did you find this post helpful? Feel free to Like this post.
Did your question get successfully answered? Then click on the ACCEPT SOLUTION button.

¿No encontraste lo que buscabas? Pregúntale a la comunidad o comparte tus conocimientos.

Publicar en los foros  

Autodesk Design & Make Report

New events in the Spanish Community