Freecad lahme Ente

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

WICHTIG: Bitte zuerst lesen, bevor Sie posten
polymer
Posts: 278
Joined: Fri Sep 12, 2014 8:49 am

Re: Freecad lahme Ente

Post by polymer »

Nur so nebenbei:

Was hast du denn für einen Rechner?

CPU, GPU, RAM, OS ?

mfg
freecad-heini-1
Veteran
Posts: 7791
Joined: Tue Jan 07, 2014 11:10 am
Contact:

Re: Freecad lahme Ente

Post by freecad-heini-1 »

@polymer
lese bitte noch mal hier, lade die Freecad Datei herunter, setze X auf 8 Array's und Y auf 6 Array's.
Stoppe die Zeit und poste bitte alle Angaben zu Freecad, dem Betriebssystem und Deiner Hardware.
jeno
Veteran
Posts: 1854
Joined: Sun Jun 29, 2014 10:41 am

Re: Freecad lahme Ente

Post by jeno »

freecad-heini-1 wrote:Hier die andere Version, leider auch eine lahme Ente.
blister-test.fcstd
Wer damit experimentieren möchte...
Boa das dauert ...
Stimmt...kann ich so bestätigen.
Mein System OS: Debian GNU/Linux 9.0 (stretch), Word size of OS: 64-bit, Word size of FreeCAD: 64-bit, Version: 0.16. ..OCC version: 6.8.0.oce-0.17
mit einem i5-6500 mit 8Gbyte RAM
Die gefühlte Zeit liegt bei knapp vor ewig :roll: Real schätze ich so um 2 Minuten, denn ich habs nicht gestoppt.
Interessant wäre nun, ob jemand das auch mit opencascade 7 oder 7.1 testen würde und Unterschiede feststellen kann.

jeno
freecad-heini-1
Veteran
Posts: 7791
Joined: Tue Jan 07, 2014 11:10 am
Contact:

Re: Freecad lahme Ente

Post by freecad-heini-1 »

Hier ein Test in Pro-Engineer in echtzeit:
proe-muster-48-fach.gif
proe-muster-48-fach.gif (356.43 KiB) Viewed 2228 times
Man muss sich vor Augen führen, dass Pro/E nicht native in Windows 7 Pro läuft sondern virtualisiert in VirtualBox. Host Betriebssystem ist ein Xubuntu 16.04, Gastsystem ist Windows 7 Pro.

Als nächstes werde ich mal den Kerzel-Motor aus Freecad in Pro/E importieren.
User avatar
microelly2
Veteran
Posts: 4688
Joined: Tue Nov 12, 2013 4:06 pm
Contact:

Re: Freecad lahme Ente

Post by microelly2 »

Das Rendern von Parts dauert, aber wenn man statt dessen ein Mesh/eine Point Cloud generiert geht es auch wieder schnell,


viewtopic.php?f=22&t=19559

ich suche da nach alternativen 3D-Darstellungen
in ein paar Spezialfällen geht das ja auchgschon und da kann man optimistisch s.ein
freecad-heini-1
Veteran
Posts: 7791
Joined: Tue Jan 07, 2014 11:10 am
Contact:

Re: Freecad lahme Ente

Post by freecad-heini-1 »

Hier das Array in der Darstellung Drahtgitter:
array-48-drahtgitter.gif
array-48-drahtgitter.gif (631.1 KiB) Viewed 2210 times
Hier die Darstellung mit Punkten:
array-48-punkte.gif
array-48-punkte.gif (687.84 KiB) Viewed 2210 times
Und hier mit Flächen (Original bzw. flache Linien):
array-48-original.gif
array-48-original.gif (176.64 KiB) Viewed 2210 times
Was die Zeit enorm in die Höhe treibt ist die Option Fuse true.
User avatar
microelly2
Veteran
Posts: 4688
Joined: Tue Nov 12, 2013 4:06 pm
Contact:

Re: Freecad lahme Ente

Post by microelly2 »

freecad-heini-1 wrote:Whow, Thickness -0,5mm hat geklappt, aber lahm ohne Ende.
Hat jemand eine Idee warum das alles sooo laaange dauert?
blister-thickness-9.gif
Ich glaube, dass die Fusionsalgorithmen für Freiformflächen wie sie bei den Abrundungen oder Kugeln auftreten zu langsam sind.
Für meinen Testfall geht die Berechnung des Modells im Hintergrund sehr schnell aber für die Ansicht komme ich nur mit einem Mesh in akzeptable
Zeiten.
Mein Mauermesh mit 2,4 Mill Punkten war in einer halben Minute fertig.
bp_366.png
bp_366.png (204.73 KiB) Viewed 2182 times
Meine Idee ist es immer noch, aus einem Hintergrundmodell so ein Mesh zu berechnen Gerade für solche regelmässigen Array-Strukturen würde dann die Berechnung einer Zelle und das Kopieren schnell gehen.

Steht die Frage, wie schnell kommerzielle Programme auf einer so komplizierte Flächen eine boolsche Operation ausführen z.B. den Abdruck eines Schraubengewindes.
freecad-heini-1
Veteran
Posts: 7791
Joined: Tue Jan 07, 2014 11:10 am
Contact:

Re: Freecad lahme Ente

Post by freecad-heini-1 »

Wer Zugriff auf ein Profi-CAD-System hat, der kann einen Vergleich mit Freecad starten, z.B. mit der Kerzel-Engine:
https://forum.freecadweb.org/viewtopic. ... 37#p128337
kerzel-engine.png
kerzel-engine.png (237.74 KiB) Viewed 2175 times
Step und / oder Iges Export aus Freecad und dann im anderen CAD-System laden.
user1234
Veteran
Posts: 3512
Joined: Mon Jul 11, 2016 5:08 pm

Re: Freecad lahme Ente

Post by user1234 »

FYI:

Code: Select all

OS: Debian GNU/Linux 8.7 (jessie)
Word size of OS: 64-bit
Word size of FreeCAD: 64-bit
Version: 0.17.10085 (Git)
Build type: Unknown
Branch: master
Hash: 89925e21a3a496fefd20aa47f9a974350330b0c9
Python version: 2.7.9
Qt version: 4.8.6
Coin version: 4.0.0a
OCC version: 7.1.0
Die Datei "blister-test.fcstd" mit einen Feld von 7x7:

Flaschenhals 1: Fuse --> ca. 1 min const.

Falschenhals 2: Grafik maximale Abweichung 7,5% und 7° und ohne Antialising --> ab dieser Abweichung halbwegs flott (ca. 5s) und mit 15fps.
Alles was feiner als 3% und 3° kann man vergessen bei meinen Laptop.

Maschine.:
i7-2670QM 64bit (ca. 2,2GHz Quad benutzt aber wegen der Temp. ständig nur einen Kern und das reduziert auf 800MHz)
8GB RAM
Grafikkarte: AMD HD6850M, 1GB VRAM

Ich hoffe die Info zu OCCT7.1 hilft ein wenig.

Grüße user1234
Attachments
Screenshot.png
Screenshot.png (259.75 KiB) Viewed 2156 times
User avatar
Gift
Posts: 769
Joined: Tue Aug 18, 2015 10:08 am
Location: Germany, Sauerland

Re: Freecad lahme Ente

Post by Gift »

Ich habe etwas rumgespielt:

Code: Select all

import Draft
import time
FreeCAD.open(u"blister-test.fcstd")
App.setActiveDocument("blister_test")
App.ActiveDocument=App.getDocument("blister_test")
Gui.ActiveDocument=Gui.getDocument("blister_test")
FreeCAD.ActiveDocument.recompute()
start_time = time.time()
FreeCAD.getDocument("blister_test").getObject("Array").NumberX = 8
FreeCAD.getDocument("blister_test").getObject("Array").NumberY = 6
FreeCAD.ActiveDocument.recompute()
print("===> %s seconds" % (time.time() - start_time))


Code: Select all

OS: Mac OS X
Word size of OS: 64-bit
Word size of FreeCAD: 64-bit
Version: 0.17.9113 (Git)
Build type: Release
Branch: (detached from 04a56fb)
Hash: 04a56fbceb3621e93092f5338b40cbeefd0c5014
Python version: 2.7.12
Qt version: 4.8.7
Coin version: 3.1.3
OCC version: 7.0.0
Ergab: ===> 83.281689167 seconds

Quelle: https://github.com/FreeCAD/FreeCAD/blob ... t/Draft.py

Code: Select all

    def rectArray(self,shape,xvector,yvector,zvector,xnum,ynum,znum,fuse=False):
        import Part
        base = [shape.copy()]
        for xcount in range(xnum):
            currentxvector=Vector(xvector).multiply(xcount)
            if not xcount==0:
                nshape = shape.copy()
                nshape.translate(currentxvector)
                base.append(nshape)
            for ycount in range(ynum):
                currentyvector=FreeCAD.Vector(currentxvector)
                currentyvector=currentyvector.add(Vector(yvector).multiply(ycount))
                if not ycount==0:
                    nshape = shape.copy()
                    nshape.translate(currentyvector)
                    base.append(nshape)
                for zcount in range(znum):
                    currentzvector=FreeCAD.Vector(currentyvector)
                    currentzvector=currentzvector.add(Vector(zvector).multiply(zcount))
                    if not zcount==0:
                        nshape = shape.copy()
                        nshape.translate(currentzvector)
                        base.append(nshape)
        if fuse and len(base) > 1:
            return base[0].multiFuse(base[1:]).removeSplitter()
        else:
            return Part.makeCompound(base)
Das sah mir recht umständlich aus um ein paar Translate zu sparen. Bei großen Arrays habe ich dafür immer die "bedingten Sprünge". Daher habe ich den Code wie folgt geändert. Hat aber leider nichts gebracht.

Code: Select all

    def rectArray(self,shape,xvector,yvector,zvector,xnum,ynum,znum,fuse=False):
        import Part
        base = []
        for xcount in range(xnum):
            currentxvector=Vector(xvector).multiply(xcount)
            for ycount in range(ynum):
                currentyvector=Vector(yvector).multiply(ycount)
                for zcount in range(znum):
                    currentzvector=Vector(zvector).multiply(zcount)
                    nshape = shape.copy()
                    nshape.translate(currentxvector)
                    nshape.translate(currentyvector)
                    nshape.translate(currentzvector)
                    base.append(nshape)
        if len(base) == 0: 
            base = [shape.copy()]
        if fuse and len(base) > 1:
            return base[0].multiFuse(base[1:]).removeSplitter()
        else:
            return Part.makeCompound(base)
Nur das auskommentieren von RemoveSplitter hat eine deutliche Verbesserung gebracht.
Post Reply