Parece que está interesado en una porción plana de su modelo CAD. Si bien podría usar un archivo 3D y cortarlo usted mismo, parece un poco exagerado ya que la aplicación CAD es perfectamente capaz de hacer los cortes por usted.
rápido y sucio
Ok, entonces cada CAD tiene un modo de dibujo 2D, puede guardar ese dibujo como dxf
o pdf
ambos son fáciles de analizar. Si no encuentras una buena herramienta para esto, conviértela pdf
en algo svg
que sea más fácil de analizar. Este enfoque también se puede hacer rápido y sucio aprovechando herramientas como Inkscape o Illustrator. Hagamos un ejemplo porque es fácil de hacer:
Imagen 1 : Dibujo de exportación rápido y sucio como pdf
/ svg
luego aislar y leer puntos de ese archivo. Utilicé la versión modificada de esta herramienta para volcar coordenadas pdf
. Deberías poder hacer eso en Perl fácilmente. datos disponibles aquí
Método adecuado
Es posible acceder a SolidWorks e Inventor a través de un puente COM para que pueda acceder al modelo de datos de aplicaciones CAD directamente desde su código Perl. Esto tiene varios beneficios, pero sobre todo no necesita analizar archivos intermedios. Puede seleccionar los bordes relevantes y solo recorrerlos directamente desde el CAD. Ahora solo tengo acceso a SolidWorks en el trabajo, pero un enfoque similar funciona en inventor como lo he hecho.
Tenía algo de tiempo extra en el trabajo para hacer un VBA
código rápido para SolidWorks. El código toma todas las líneas de un boceto cerrado, las ordena en orden de polígono (con un ingenuo algoritmo N ^ 2) y las imprime en la VBA
consola de depuración.
Option Explicit
Sub main()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swPart As SldWorks.PartDoc
Dim swSelMgr As SldWorks.SelectionMgr
Dim swFeat As SldWorks.Feature
Dim swSketch As SldWorks.Sketch
Dim numLines As Long
Dim vLines As Variant
Dim dict As New Collection
Dim i As Variant
Set swApp = CreateObject("SldWorks.Application")
Set swModel = swApp.ActiveDoc
Set swPart = swModel
Set swSelMgr = swModel.SelectionManager
Set swFeat = swSelMgr.GetSelectedObject5(1)
Set swSketch = swFeat.GetSpecificFeature2
numLines = swSketch.GetLineCount2(1) 'Exclude crosshatch lines
vLines = swSketch.GetLines2(1) 'Exclude crosshatch lines
Dim startP, endP, line As Variant
For i = 1 To numLines - 1
line = Array(Array(vLines(12 * i + 6) * 1000, _
vLines(12 * i + 7) * 1000), _
Array(vLines(12 * i + 9) * 1000, _
vLines(12 * i + 10) * 1000))
dict.Add (line)
Next i
startP = Array(vLines(6) * 1000, _
vLines(7) * 1000)
endP = Array(vLines(9) * 1000, _
vLines(10) * 1000)
pp startP
pp endP
For i = 1 To dict.Count - 1
endP = NextPoint(dict, endP)
pp endP
Next i
End Sub
Sub pp(point As Variant)
Debug.Print " " & Str(point(0)) & ", " & Str(point(1))
End Sub
Function NextPoint(dict As Collection, point As Variant) As Variant
Dim i As Variant
For i = 1 To dict.Count
Dim data, startRP, endRP As Variant
data = dict.Item(i)
startRP = data(0)
endRP = data(1)
If endRP(0) = point(0) And endRP(1) = point(1) Then
dict.Remove (i)
NextPoint = startRP
Exit Function
End If
If startRP(0) = point(0) And startRP(1) = point(1) Then
dict.Remove (i)
NextPoint = endRP
Exit Function
End If
Next i
End Function
Como vba está llamando a COM, puede usar un código que puede usar casi cualquier idioma, por ejemplo, Perl implementa Win32 :: OLE que puede hacer el trabajo.
Imagen 2 : La parte de ejemplo con un boceto simple de un bucle da como resultado esta salida
Epílogo
Si realmente desea exportar datos de polígonos 3D y hacer el corte manualmente, exportaría OBJ o STL. Pero esto estaría muy abajo en mi lista de enfoques, principalmente porque todos los demás enfoques son más simples.