Problem beim importieren einer dxf Datei in Freecad
Problem beim importieren einer dxf Datei in Freecad
Hallo,
ich möchte meine dxf Dateien gerne in "3D" sehen. Habe seit einiger Zeit die neuste Version von FreeCad auf dem PC. Nun wollte ich einfach mal eine dxf importieren. Leider bekomme ich das nicht hin. Wenn ich die dxf öffne, erscheint unten in der Leiste eine kurze Fehlermeldung die den aktuellen dxf Dateipfad beinhaltet und das Fenster bleibt aber leer.
Habe es mit mehreren Dateien probiert.
Immer das selbe Spiel.
Kann mir da jemand helfen?
Oder gibts nen Tip für ein anderes Freeware Proggi zum darstellen?
Vielen Dank
ich möchte meine dxf Dateien gerne in "3D" sehen. Habe seit einiger Zeit die neuste Version von FreeCad auf dem PC. Nun wollte ich einfach mal eine dxf importieren. Leider bekomme ich das nicht hin. Wenn ich die dxf öffne, erscheint unten in der Leiste eine kurze Fehlermeldung die den aktuellen dxf Dateipfad beinhaltet und das Fenster bleibt aber leer.
Habe es mit mehreren Dateien probiert.
Immer das selbe Spiel.
Kann mir da jemand helfen?
Oder gibts nen Tip für ein anderes Freeware Proggi zum darstellen?
Vielen Dank
Last edited by Roy_043 on Mon Dec 25, 2023 9:17 am, edited 3 times in total.
Reason: Removed spam link
Reason: Removed spam link
Michael
Re: Problem beim importieren einer dxf Datei in Freecad
FreeCAD importiert so weit ich weiß nur 2D dxf, vielleicht liegt's daran.
Was ist ein Proggi?
Was ist ein Proggi?
A Sketcher Lecture with in-depth information is available in English, auf Deutsch, en français, en español.
Re: Problem beim importieren einer dxf Datei in Freecad
Hallo zusammen,
die Aussage, dasz DXF nur 2D importiert ist nicht ganz richtig.
Durchaus kann DXF auch 3D-Daten speichern und es gibt Programme,
die diese 3D-Daten auch importieren können.
Mir sind folgende CAD-Programme bekannt, die dies können.
a) TurboCAD
b) SpaceClaim
Mit Gruß
Werner
die Aussage, dasz DXF nur 2D importiert ist nicht ganz richtig.
Durchaus kann DXF auch 3D-Daten speichern und es gibt Programme,
die diese 3D-Daten auch importieren können.
Mir sind folgende CAD-Programme bekannt, die dies können.
a) TurboCAD
b) SpaceClaim
Mit Gruß
Werner
Re: Problem beim importieren einer dxf Datei in Freecad
Ich meinte nicht das dxf-Format an sich, sondern FreeCAD. Kann jemand das bestätigen - oder widerlegen -, dass FreeCAD dxf nur 2D importiert?
A Sketcher Lecture with in-depth information is available in English, auf Deutsch, en français, en español.
Re: Problem beim importieren einer dxf Datei in Freecad
Gibt es eine Beispieldatei?
Re: Problem beim importieren einer dxf Datei in Freecad
Wenn man in das zu Grunde liegende Import-Modul reinschaut dann werden nur 3D-Mesh unterstützt. Der interessantere Teil sind Daten des ACIS-Geometriekerns. Die Beschreibung ist seit um 2000 nicht mehr öffentlich zugänglich. Da hat Dassault die Hand drauf. Autodesk hat auf der Basis ACIS dann unabhängig weiterentwickelt (ShapeManager).
Auch das war und ist nicht öffentlich.
So gesehen könnte Freecad auch 3D-Daten aus dxf lesen, aber es wären nur Meshs. Das dürfte recht selten in dxf stecken. Es hätte allerdings keinen Vorteil gegenüber stl oder ply.
Mit freundlichen
Re: Problem beim importieren einer dxf Datei in Freecad
Beispieldatei:
Importeinstellungen:
benutzte version:
OS: Windows 10 (10.0)
Word size of OS: 64-bit
Word size of FreeCAD: 64-bit
Version: 0.19.19758 (Git)
Build type: Release
Branch: master
Hash: c165edd52c7f06ac09f992e5b5bf1d37661a8c0f
Python version: 3.7.3
Qt version: 5.12.5
Coin version: 4.0.0a
OCC version: 7.3.0
Locale: German/Germany (de_DE)
Importeinstellungen:
benutzte version:
OS: Windows 10 (10.0)
Word size of OS: 64-bit
Word size of FreeCAD: 64-bit
Version: 0.19.19758 (Git)
Build type: Release
Branch: master
Hash: c165edd52c7f06ac09f992e5b5bf1d37661a8c0f
Python version: 3.7.3
Qt version: 5.12.5
Coin version: 4.0.0a
OCC version: 7.3.0
Locale: German/Germany (de_DE)
Re: Problem beim importieren einer dxf Datei in Freecad
Danke für die Info.
A Sketcher Lecture with in-depth information is available in English, auf Deutsch, en français, en español.
Re: Problem beim importieren einer dxf Datei in Freecad
Gerne. Noch ergänzt: Alles was Shapemanager oder ACIS als Geometriekern hat dürfte mit 3D-DXF umgehen können.
Von Autodesk gibt es kostenlose Viewer und der edrawings-viewer wird vermutlich auch damit klarkommen.
Ich kann beides nicht testen, da kein Windows.
Mit freundlichen
Re: Problem beim importieren einer dxf Datei in Freecad
Die DXF-Datei enthält einfach nur Flächen mit 3 Punkten. Ich hatte mal eine einfache DXF-Lib mit numpy gebastelt. Wenn du Konsole kopierst, kannst du die nachfolgenden Schritt testen:UR_ wrote: ↑Sun Mar 15, 2020 8:26 am Beispieldatei:
sample area - sphere surface.DXF
Screenshot 001.png
Importeinstellungen:
Screenshot 002.png
benutzte version:
OS: Windows 10 (10.0)
Word size of OS: 64-bit
Word size of FreeCAD: 64-bit
Version: 0.19.19758 (Git)
Build type: Release
Branch: master
Hash: c165edd52c7f06ac09f992e5b5bf1d37661a8c0f
Python version: 3.7.3
Qt version: 5.12.5
Coin version: 4.0.0a
OCC version: 7.3.0
Locale: German/Germany (de_DE)
1. fc_dxflib.py
Code: Select all
# a FreeCAD Library
#***************************************************************************
#* (c) Benjamin Alterauge (gift) 2018 - 2019 *
#* *
#* This file is part of the FreeCAD CAx development system. *
#* *
#* This program is free software; you can redistribute it and/or modify *
#* it under the terms of the GNU Lesser General Public License (LGPL) *
#* as published by the Free Software Foundation; either version 2 of *
#* the License, or (at your option) any later version. *
#* for detail see the LICENCE text file. *
#* *
#* FreeCAD is distributed in the hope that it will be useful, *
#* but WITHOUT ANY WARRANTY; without even the implied warranty of *
#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
#* GNU Lesser General Public License for more details. *
#* *
#* You should have received a copy of the GNU Library General Public *
#* License along with FreeCAD; if not, write to the Free Software *
#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
#* USA *
#* *
#***************************************************************************
import numpy as np
import FreeCAD
GC_ENTITY_TYPE = 0
GC_HANDLE = 5
GC_DOUBLE = np.concatenate((np.arange(10,59),np.arange(140,147)))
GC_INT16 = np.concatenate((np.arange(60,79),np.arange(170,175),np.arange(400,409),np.arange(1060,1070)))
GC_INT32 = np.concatenate((np.arange(90,99),[1071]))
GC_X = 10
GC_Y = 20
GC_Z = 30
class DXFEntity:
def __init__(self, et=''): self.groupcodes = {GC_ENTITY_TYPE : et}
def set(self, gc, vl): self.groupcodes[gc] = vl
def value(self, gc): return self.groupcodes[gc]
def type(self): self.groupcodes[GC_ENTITY_TYPE]
def handle(self): self.groupcodes[GC_HANDLE]
def set_list(self, gc, vl):
if gc in self.groupcodes:
self.groupcodes[gc].append(vl)
else:
self.groupcodes[gc] = [vl]
class DXFPolyline(DXFEntity):
def __init__(self, et='POLYLINE'):
self.vertexes = []
DXFEntity.__init__(self, et)
def add_vertex(self, obj):
self.vertexes.append(obj)
def get_vertexes(self):
return self.vertexes
def count_vertexes(self):
return len(self.vertexes)
def to_wire(self):
import Part
dw = Part.makePolygon([i.vector() for i in self.get_vertexes()])
Part.show(dw)
return dw
def to_points(self):
import Points
pp=Points.Points()
pp.addPoints([i.vector() for i in self.get_vertexes()])
Points.show(pp)
return pp
def to_fc(self):
return self.to_wire()
def is_polyline(self):
return True
class DXFVertex(DXFEntity):
def __init__(self, et='VERTEX'):
DXFEntity.__init__(self, et)
self.set(GC_X, 0.0)
self.set(GC_Y, 0.0)
self.set(GC_Z, 0.0)
def x(self): return self.value(GC_X)
def y(self): return self.value(GC_Y)
def z(self): return self.value(GC_Z)
def vector(self): return FreeCAD.Vector(self.x(), self.y(), self.z())
def is_vertex(): return True
class DXFLine(DXFEntity):
def __init__(self, et='LINE'):
DXFEntity.__init__(self, et)
self.set(GC_X, 0.0)
self.set(GC_Y, 0.0)
self.set(GC_Z, 0.0)
self.set(GC_X+1, 0.0)
self.set(GC_Y+1, 0.0)
self.set(GC_Z+1, 0.0)
def x1(self): return self.value(GC_X)
def y1(self): return self.value(GC_Y)
def z1(self): return self.value(GC_Z)
def x2(self): return self.value(GC_X+1)
def y2(self): return self.value(GC_Y+1)
def z2(self): return self.value(GC_Z+1)
# def vector(self): return FreeCAD.Vector(self.x(), self.y(), self.z())
def is_line(self): return True
class DXFFACE(DXFEntity):
def __init__(self, et='PLANE'):
DXFEntity.__init__(self, et)
self.set(GC_X, 0.0)
self.set(GC_Y, 0.0)
self.set(GC_Z, 0.0)
self.set(GC_X+1, 0.0)
self.set(GC_Y+1, 0.0)
self.set(GC_Z+1, 0.0)
self.set(GC_X+2, 0.0)
self.set(GC_Y+2, 0.0)
self.set(GC_Z+2, 0.0)
def x1(self): return self.value(GC_X)
def y1(self): return self.value(GC_Y)
def z1(self): return self.value(GC_Z)
def x2(self): return self.value(GC_X+1)
def y2(self): return self.value(GC_Y+1)
def z2(self): return self.value(GC_Z+1)
def x3(self): return self.value(GC_X+2)
def y3(self): return self.value(GC_Y+2)
def z3(self): return self.value(GC_Z+2)
def is_plane(true): return True
class DXFSpline(DXFEntity):
def __init__(self, et='VERTEX'):
DXFEntity.__init__(self, et)
def flag(self): return self.value(70)
def is_spline(self): return True
def is_closed(self): return (self.value(70)<<1)
def is_periodic(self): return (self.value(70)<<2)
def is_rational(self): return (self.value(70)<<4)
def is_planar(self): return (self.value(70)<<8)
def is_linear(self): return (self.value(70)&16) > 0
def to_polygon(self):
import FreeCAD, Part
poly = []
for i in np.arange(len(self.value(GC_X))):
poly.append(FreeCAD.Vector(self.value(GC_X)[i],self.value(GC_Y)[i],self.value(GC_Z)[i]))
poly.pop(0)
print poly
try:
if (poly > 2):
print poly
return Part.makePolygon(poly)
elif (poly == 2):
return Part.LineSegment(poly)
else:
return None
except Part.OCCError:
return None
def dublette(dxffile):
code = int(dxffile.readline())
value = dxffile.readline().strip()
if (code == GC_ENTITY_TYPE):
value.upper()
elif code in GC_INT16:
value = np.int16(value)
elif code in GC_INT32:
value = np.int32(value)
elif code in GC_DOUBLE:
value = np.float64(value)
return [code, value]
def prase(filename):
entries = { 'POLYLINE': 0, 'VERTEX': 0, 'LINE': 0, 'SPLINE': 0, '3DFACE':0 }
result = []
dxffile = open(filename,'r')
while True:
code, value = dublette(dxffile)
if (value=='EOF'): break
elif (value=='SECTION'):
code, value = dublette(dxffile)
if (value=='ENTITIES'):
polyline = None
code, value = dublette(dxffile)
while not (value=='ENDSEC'):
if (code==GC_ENTITY_TYPE):
support = 0
if (value=='POLYLINE'):
polyline = DXFPolyline()
result.append(polyline)
support = 1
elif (value=='VERTEX'):
if polyline:
result.append(DXFVertex())
polyline.add_vertex(result[-1])
support = 1
elif (value=='3DFACE'):
result.append(DXFFACE())
support = 1
elif (value=='SEQEND'):
if polyline:
polyline = None
elif (value=='LINE'):
result.append(DXFLine())
support = 1
elif (value=='SPLINE'):
result.append(DXFSpline())
support = 2
if support>0:
entries[value] += 1
else:
if (support==1):
result[-1].set(code, value)
elif (support==2):
if code in [10,20,30,40]:
result[-1].set_list(code, value)
else:
result[-1].set(code, value)
code, value = dublette(dxffile)
dxffile.close()
return [entries, result]
Code: Select all
entries, result = prase('Dateiname.dxf')
Code: Select all
>>> entries
{'VERTEX': 0, 'LINE': 0, '3DFACE': 300, 'POLYLINE': 0, 'SPLINE': 0}
4. Fläche erstellen
Code: Select all
import Part
grp = []
for f in result:
v1 = FreeCAD.Vector(f.x1(),f.y1(),f.z1())
v2 = FreeCAD.Vector(f.x2(),f.y2(),f.z2())
v3 = FreeCAD.Vector(f.x3(),f.y3(),f.z3())
poly = Part.makePolygon([v2,v1,v3,v2])
grp.append(Part.Face(poly))
g = Part.makeCompound(grp)
Part.show(g)
Gruß
Benjamin