echte 3D DXF Datei in Freecad zu Solid umwandeln

In diesem Forum Fragen und Diskussionen in Deutsch
Forum rules
Foren-Regeln und hilfreiche Informationen

WICHTIG: Bitte zuerst lesen, bevor Sie posten
Danilo0702
Posts: 57
Joined: Thu Jan 31, 2019 4:15 pm

echte 3D DXF Datei in Freecad zu Solid umwandeln

Post by Danilo0702 »

ich habe jetzt 2 Tage damit verbracht, etwas einzuscannen (abtasten), weil alle Welt auf 3D-dxf schwört... gesagt getan, nur sitze ich jetzt vor dem PC und habe die dxf importiert und kann leider nichts (aber auch gar nichts) machen. Egal welche WB ich ansteuere, alles ist grau. Hat jemand nen Tipp? Hab mir zusätylich das Paket Oda converter installiert, um ne dwg daraus zu machen, aber das bringt mich auch nicht weiter. Der Scan ist fantastisch---schön scharfe Konturen und keine Fehler oder offene Linien. Ich will doch einfach dieses Drahtgitter mit einer "Hülle" überziehen, damit ich ein 3D Modell bekomme. Wo oder wie muss ich hier rangehen? Ich hänge die Datei mal mit an
Attachments
FINAL 10500 punkte CNC Datei 686 SW Obelix Griffschale.dfx.dxf
(471.21 KiB) Downloaded 80 times
freecad-heini-1
Veteran
Posts: 7790
Joined: Tue Jan 07, 2014 11:10 am
Contact:

Re: echte 3D DXF Datei in Freecad zu Solid umwandeln

Post by freecad-heini-1 »

Danilo0702 wrote: Thu Oct 10, 2019 7:56 pm ich habe jetzt 2 Tage damit verbracht, etwas einzuscannen (abtasten), weil alle Welt auf 3D-dxf schwört...
Woher hast Du diese Info?
Danilo0702 wrote: Thu Oct 10, 2019 7:56 pm gesagt getan, nur sitze ich jetzt vor dem PC und habe die dxf importiert und kann leider nichts (aber auch gar nichts) machen.
Ich möchte Dich bitten zu recherchieren, was ist 3D-DXF? Wer hat daran die Rechte, wer hat es entwickelt? Woher kommt es? Wer steckt dahinter? Mit welchen Software Progammen kann man eine 3D-DXF öffnen / bearbeiten?
Danilo0702 wrote: Thu Oct 10, 2019 7:56 pm Egal welche WB ich ansteuere, alles ist grau. Hat jemand nen Tipp? Hab mir zusätylich das Paket Oda converter installiert, um ne dwg daraus zu machen, aber das bringt mich auch nicht weiter. Der Scan ist fantastisch---schön scharfe Konturen und keine Fehler oder offene Linien. Ich will doch einfach dieses Drahtgitter mit einer "Hülle" überziehen, damit ich ein 3D Modell bekomme. Wo oder wie muss ich hier rangehen? Ich hänge die Datei mal mit an
Viele Grüße
Wilfried
usbhub
Posts: 280
Joined: Tue Apr 02, 2019 8:22 pm
Location: Earth

Re: echte 3D DXF Datei in Freecad zu Solid umwandeln

Post by usbhub »

Also ich konnte die Datei öffnen, auch wenn es etwas gedauert hat. Wie man das allerdings mit FreeCADkonvertiert, weiß ich nicht. Ich habe ein paar Online-Converter probiert, die haben aber alle Murks geliefert, das könnte also schwierig werden. Du könntest dir aber die Tets-Version von AutoCAD runterladen und das damit zu einem STL, STEP, oä. konvertieren.

usbhub
Danilo0702
Posts: 57
Joined: Thu Jan 31, 2019 4:15 pm

Re: echte 3D DXF Datei in Freecad zu Solid umwandeln

Post by Danilo0702 »

freecad-heini-1 wrote: Fri Oct 11, 2019 2:17 pm
Danilo0702 wrote: Thu Oct 10, 2019 7:56 pm ich habe jetzt 2 Tage damit verbracht, etwas einzuscannen (abtasten), weil alle Welt auf 3D-dxf schwört...
Woher hast Du diese Info?
Danilo0702 wrote: Thu Oct 10, 2019 7:56 pm gesagt getan, nur sitze ich jetzt vor dem PC und habe die dxf importiert und kann leider nichts (aber auch gar nichts) machen.
Ich möchte Dich bitten zu recherchieren, was ist 3D-DXF? Wer hat daran die Rechte, wer hat es entwickelt? Woher kommt es? Wer steckt dahinter? Mit welchen Software Progammen kann man eine 3D-DXF öffnen / bearbeiten?
Danilo0702 wrote: Thu Oct 10, 2019 7:56 pm Egal welche WB ich ansteuere, alles ist grau. Hat jemand nen Tipp? Hab mir zusätylich das Paket Oda converter installiert, um ne dwg daraus zu machen, aber das bringt mich auch nicht weiter. Der Scan ist fantastisch---schön scharfe Konturen und keine Fehler oder offene Linien. Ich will doch einfach dieses Drahtgitter mit einer "Hülle" überziehen, damit ich ein 3D Modell bekomme. Wo oder wie muss ich hier rangehen? Ich hänge die Datei mal mit an
Viele Grüße
Wilfried
@freecad-heini-1 mit alle Welt meinte ich alle meine Bekannten in der CNC Szene--- ja, Autodesk ist der Macher, aber es muss doch möglich sein, solche Dateien zu konvertieren. Ich kann die dfx in Freecad einlesen und es werden mir ca 5000 Shapes angezeigt. Die Grafik des Scans stimmt in Freecad auch. Nur kann man da nichts anwählen.
usbhub
Posts: 280
Joined: Tue Apr 02, 2019 8:22 pm
Location: Earth

Re: echte 3D DXF Datei in Freecad zu Solid umwandeln

Post by usbhub »

Du hast den Scan ja mit irgendeiner Art von Software erstellt. Das erzeugte das erzeugte Modell musstest du ja exportieren. Könntest du nicht den vorhandenen Scan mit der Scan-Software erneut exportieren und ein anderes Format nehmen. Geht natürlich nur, wenn die Rohdaten noch vorhanden sind.
Ich würde aber weiterhin zu der Methode mit der AutoCAD-Test-Version tendieren.

Merke: Proprietäre Datenformate soweit irgendwie möglich, vermeiden (auch wenn der Bekanntenkreis das Gegenteil behauptet :) ).
freecad-heini-1
Veteran
Posts: 7790
Joined: Tue Jan 07, 2014 11:10 am
Contact:

Re: echte 3D DXF Datei in Freecad zu Solid umwandeln

Post by freecad-heini-1 »

Danilo0702 wrote: Fri Oct 11, 2019 5:50 pm @freecad-heini-1 mit alle Welt meinte ich alle meine Bekannten in der CNC Szene--- ja, Autodesk ist der Macher, aber es muss doch möglich sein, solche Dateien zu konvertieren. Ich kann die dfx in Freecad einlesen und es werden mir ca 5000 Shapes angezeigt. Die Grafik des Scans stimmt in Freecad auch. Nur kann man da nichts anwählen.
Versuche bitte mal den umgedrehten Weg eine Freecad fcstd in Autodesk zu öffnen.
Falls das nicht geht, dann frage bitte die "alle Welt" Bekannten und / oder den Support von Autodesk.

Closed-Source Dateiformate kann man meist nur mit dem Originalprogramm öffnen, oder mit Programmen, die für die Schnittstelle Lizensgebühren an den Hersteller bezahlen.

Ich habe mir den CAD-Exchanger gekauft, denn ab- und zu muss ich native closed-Source CAD-Formate öffnen und weiter bearbeiten.
Siehe dazu meine Foren-Fragen mit den jeweiligen Antworten:
https://forum.freecadweb.org/viewtopic. ... id#p239784

https://forum.freecadweb.org/viewtopic. ... id#p206067
usbhub
Posts: 280
Joined: Tue Apr 02, 2019 8:22 pm
Location: Earth

Re: echte 3D DXF Datei in Freecad zu Solid umwandeln

Post by usbhub »

Habe mir gerade den CAD-Exchanger angesehen. Ist ja ein cooles Teil! Unter Pricing gibt es im Tab "Cloud" auch Free. Dann kannst du zwar nur Dateien bis 50MB und 10 Konvertierungen im Monat machen, das dürfte ja aber reichen. Man muss sich nur einmal anmelden.

Alternativ kannst du evtl. auch Wilfried ganz lieb bitten, ob er dir die Datei konvertiert :)
Danilo0702
Posts: 57
Joined: Thu Jan 31, 2019 4:15 pm

Re: echte 3D DXF Datei in Freecad zu Solid umwandeln

Post by Danilo0702 »

usbhub wrote: Fri Oct 11, 2019 6:40 pm Du hast den Scan ja mit irgendeiner Art von Software erstellt. Das erzeugte das erzeugte Modell musstest du ja exportieren. Könntest du nicht den vorhandenen Scan mit der Scan-Software erneut exportieren und ein anderes Format nehmen. Geht natürlich nur, wenn die Rohdaten noch vorhanden sind.
Ich würde aber weiterhin zu der Methode mit der AutoCAD-Test-Version tendieren.

Merke: Proprietäre Datenformate soweit irgendwie möglich, vermeiden (auch wenn der Bekanntenkreis das Gegenteil behauptet :) ).
@usbhub; nein, das ist nicht möglich. Das ist winpcnc, eine NC Software mit ganz einfachen CAM Möglichkeiten. Es gehen nur (nc, cnc, plt und txt).
Der Scan kann theoretisch sofort über das Programm gefräst werden. Was ist aber, wenn mann den Scan noch ein bisschen modifizieren möchte?
Danilo0702
Posts: 57
Joined: Thu Jan 31, 2019 4:15 pm

Re: echte 3D DXF Datei in Freecad zu Solid umwandeln

Post by Danilo0702 »

Habe mir auch grad den CAD Exchanger angeschaut und mal gedownloadet. Das Programm kann keine 3D dxf Dateien konvertieren.
User avatar
Gift
Posts: 769
Joined: Tue Aug 18, 2015 10:08 am
Location: Germany, Sauerland

Re: echte 3D DXF Datei in Freecad zu Solid umwandeln

Post by Gift »

Die DXF-Datei enthält einfach nur Linien. Ich hatte mal eine einfache DXF-Lib mit numpy gebastelt. Wenn du Konsole kopierst, kannst du die nachfolgenden Schritt testen:

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 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 }
    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=='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]

2. Datei laden

Code: Select all

entries, result = prase('Dateiname.dxf')
3. Infos anzeigen

Code: Select all

>>> entries
{'VERTEX': 0, 'LINE': 5331, 'POLYLINE': 0, 'SPLINE': 0}

4. Linien erstellen

Code: Select all

import Part
grp = []
for ln in result:
    grp.append(Part.LineSegment(FreeCAD.Vector(ln.x1(),ln.y1(),ln.z1()), FreeCAD.Vector(ln.x2(),ln.y2(),ln.z2())))

s = Part.Shape(grp)
Part.show(s)
Eine Punktewolke aus dem jeweils ersten Punkt der Linie wäre sicherlich sinnvoller um eine Fläche zu generieren. Evt. kann ich mir das morgen mal anschauen.

Gruß
Benjamin
Attachments
Import.FCStd
(236.78 KiB) Downloaded 47 times
import.jpg
import.jpg (105.35 KiB) Viewed 2148 times
Post Reply