Macro 3d Printer Slicer

From FreeCAD Documentation
Revision as of 15:03, 7 July 2019 by Mario52 (talk | contribs)
Other languages:

Macro_3d_Printer_Slicer

Beschreibung
Export in Slicing-Software für 3D-Drucker. Exportiert die STL-Datei in das gleiche Verzeichnis wie die ursprüngliche Designdatei und öffnet sie dann in Slicing-Software.

Versionsmakro : 0.1
Datum der letzten Änderung : 2013-10-10
FreeCAD version : All
Herunterladen : ToolBar Icon
Autor: cae2100
Autor
cae2100
Herunterladen
ToolBar Icon
Links
Macro-Version
0.1
Datum der letzten Änderung
2013-10-10
FreeCAD-Version(s)
All
Standardverknüpfung
None
Siehe auch
None

Beschreibung

Wenn dieser Code ausgeführt wird, wird der derzeit geöffnete Entwurf in eine STL-Datei exportiert und in der von Ihnen verwendeten Slicing-Software geöffnet. Dieses Beispiel ist für KISSlicer, kann aber zur Verwendung geändert werden Slic3r, Cura, oder eine andere 3D-Druckersoftware. Sie kann auch leicht modifiziert werden, um die CAM-Software für CNC-Maschinen zu öffnen.

Es wird am besten durch Erstellen eines Links zu dem Makro in der Symbolleiste verwendet. Wenn Sie zum Schneiden des Objekts bereit sind, klicken Sie einfach darauf. Das Objekt wird in FreeCAD auf dem Bildschirm angezeigt und erscheint auf der Benutzeroberfläche der Slicing-Software . Außerdem wird eine STL-Datei mit demselben Dateinamen wie die Designdatei in demselben Verzeichnis wie die Designdatei als Sicherung erstellt.

Skript

Die SLICER-Variable kann in eine beliebige Slicing-Software Ihrer Wahl geändert werden. Vergewissern Sie sich, dass Sie die Variable gesetzt haben, bevor Sie sie ausführen, oder es wird ein Fehler im Skript angezeigt.

ToolBar Icon

Macro_3d_Printer_Slicer.py

import FreeCAD
import Mesh
import sys
import math
import os
import subprocess
# some fuctions
def getPlacement(quat,vect,obj):
  if quat[3] > -1  and quat[3] < 1:
    delta = math.acos(quat[3])*2.0
    scale = math.sin(delta/2)
    rx = quat[0]/scale
    ry = quat[1]/scale
    rz = quat[2]/scale
  else:
    delta = 0
    rx = 0
    ry = 0
    rz = 1
  info0 = "translation "+str(vect.x)+" "+str(vect.y)+" "+str(vect.z)
  info1 = "rotation "+str(rx)+" "+str(ry)+" "+str(rz)+" "+str(delta)
  return info0+" "+info1
# some definitions
placement = App.Placement(App.Vector(0,0,0),App.Rotation(0,0,0,1))
# user need to set this directory where slicing software is located
OutDir = FreeCAD.ActiveDocument.FileName.replace(FreeCAD.ActiveDocument.Label + ".fcstd", "")
visible_objs = []
SLICER = "/kisslicer location/"                          # Put your Slicer program location here
os.chdir(SLICER)
# Get Objects in document
doc = App.ActiveDocument
objs = doc.Objects
# hide all
for obj in objs:
   if obj.ViewObject.isVisible():
      visible_objs.append(obj)
for obj in visible_objs:
  # get volume
  volume = obj.Shape.Volume
  # get Rotation and translation of volume
  quat = obj.Placement.Rotation.Q
  vect = obj.Placement.Base
  pinfo = getPlacement(quat,vect,obj)
  # reset placement, export it and set at original placement
  oldPlacement = obj.Placement
  obj.Placement = placement
  obj.Placement = oldPlacement   
stlFile = OutDir+str(doc.Label)+".stl"
Mesh.export(visible_objs,stlFile)
subprocess.Popen([SLICER + "KISSlicer", stlFile])

Credits

Dank an Wmayer für seine Hilfe beim Schreiben dieses Skripts.
Ursprüngliches Forumsthema: http://forum.freecadweb.org/viewtopic.php?f=10&t=4686