Compare commits
2 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1c05e62d42 | ||
|
|
4757b3b6d8 |
|
|
@ -1,87 +0,0 @@
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Set the current view perpendicular to the selected line
|
|
||||||
# Place la vue perpendiculairement a la line selectionnee
|
|
||||||
# 2013 Jonathan Wiedemann,
|
|
||||||
# 2016 Werner Mayer,
|
|
||||||
# 2022 tchernomax, https://forum.freecadweb.org/viewtopic.php?p=630019#p630019
|
|
||||||
# 2023 FreeCutter, modifications towards linked objects like in workbench Assembly 4 , https://forum.freecad.org/viewtopic.php?p=718516#p718516
|
|
||||||
#
|
|
||||||
__title__ = "Align_View_to_Face"
|
|
||||||
__author__ = "Jonathan Wiedemann (Rockn)"
|
|
||||||
__url__ = "https://www.freecadweb.org/"
|
|
||||||
__Wiki__ = "https://wiki.freecadweb.org/Macro_Align_View_to_Face"
|
|
||||||
__version__ = "3.1"
|
|
||||||
__date__ = "2023/11/12" #YYYY/MM/DD
|
|
||||||
|
|
||||||
from pivy import coin
|
|
||||||
|
|
||||||
import FreeCAD as app
|
|
||||||
import FreeCADGui as gui
|
|
||||||
|
|
||||||
def pointAt(normal, up):
|
|
||||||
z = normal
|
|
||||||
y = up
|
|
||||||
x = y.cross(z)
|
|
||||||
y = z.cross(x)
|
|
||||||
|
|
||||||
rot = App.Matrix()
|
|
||||||
rot.A11 = x.x
|
|
||||||
rot.A21 = x.y
|
|
||||||
rot.A31 = x.z
|
|
||||||
|
|
||||||
rot.A12 = y.x
|
|
||||||
rot.A22 = y.y
|
|
||||||
rot.A32 = y.z
|
|
||||||
|
|
||||||
rot.A13 = z.x
|
|
||||||
rot.A23 = z.y
|
|
||||||
rot.A33 = z.z
|
|
||||||
|
|
||||||
return App.Placement(rot).Rotation
|
|
||||||
|
|
||||||
def get_selection_and_turn_view():
|
|
||||||
doc = app.activeDocument()
|
|
||||||
if doc is None:
|
|
||||||
app.Console.PrintWarning('Align_view_to_face: No file open, nothing to do\n')
|
|
||||||
return
|
|
||||||
|
|
||||||
selection = gui.Selection.getSelectionEx('', 0) # Returns a vector of selection objects
|
|
||||||
|
|
||||||
if not selection:
|
|
||||||
app.Console.PrintWarning('Align_view_to_face: Nothing selected, nothing to do\n')
|
|
||||||
return
|
|
||||||
|
|
||||||
cam = FreeCADGui.ActiveDocument.ActiveView.getCameraNode()
|
|
||||||
|
|
||||||
''' used to understand the 'getSelection' results
|
|
||||||
for selection_object in selection:
|
|
||||||
object_ = selection_object.Object
|
|
||||||
sub_fullpaths = selection_object.SubElementNames
|
|
||||||
if not sub_fullpaths:
|
|
||||||
# An object is selected, not a face, edge, vertex.
|
|
||||||
print(object_.Name)
|
|
||||||
for sub_fullpath in sub_fullpaths:
|
|
||||||
# One or more subelements are selected.
|
|
||||||
print(object_.Name, sub_fullpath)
|
|
||||||
'''
|
|
||||||
|
|
||||||
sel = selection[0]
|
|
||||||
face = sel.SubObjects[0]
|
|
||||||
if face.Area == 0: # trying to avoid errors due to wrong selected objects
|
|
||||||
app.Console.PrintWarning('Align_view_to_face: Please select a face - not an edge or vertex\n')
|
|
||||||
return
|
|
||||||
dir = face.normalAt(0,0)
|
|
||||||
|
|
||||||
if dir.z == 1 :
|
|
||||||
rot = pointAt(dir, App.Vector(0.0,1.0,0.0))
|
|
||||||
elif dir.z == -1 :
|
|
||||||
rot = pointAt(dir, App.Vector(0.0,1.0,0.0))
|
|
||||||
else :
|
|
||||||
rot = pointAt(dir, App.Vector(0.0,0.0,1.0))
|
|
||||||
|
|
||||||
cam.orientation.setValue(rot.Q)
|
|
||||||
gui.SendMsgToActiveView("ViewSelection")
|
|
||||||
app.Console.PrintWarning('Align_view_to_face: Done\n')
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
get_selection_and_turn_view()
|
|
||||||
|
|
@ -1,4 +0,0 @@
|
||||||
[
|
|
||||||
"/home/pgp/.var/app/org.freecad.FreeCAD/data/FreeCAD/Macro/MultiExport-FreeCAD/Macro_Align_View_to_Face.png",
|
|
||||||
"/home/pgp/.var/app/org.freecad.FreeCAD/data/FreeCAD/Macro/MultiExport-FreeCAD/Align_View_to_Face.FCMacro"
|
|
||||||
]
|
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 16 KiB |
13
README.md
13
README.md
|
|
@ -6,11 +6,18 @@ Cette macro permet d'exporter la sélection soit en fichier(s) .svg, soit en fic
|
||||||
|
|
||||||
## Utilisation
|
## Utilisation
|
||||||
|
|
||||||
Tout d'abord, il faut renommer les éléments que vous souhaitez exporter (que ce soit en .svg ou .stl) de la façon suivante : `EXP-nom_de_l'élement`.
|
|
||||||
|
|
||||||
Vous pouvez ensuite exécuter la macro. Vous verrez alors une fenêtre s'ouvrir contenant une liste d'éléments (ceux qui ont été correctement renommés) ainsi que 2 onglets, un pour l'exportation en .svg et l'autre pour l'exportation en .stl, contenant quelques champs à remplir.
|
Tout d'abord, vous devez renommer les éléments que vous souhaitez exporter en faisant finir soit par "_STL" soit par "_SVG".
|
||||||
|
Vous verrez alors ces éléments dans la liste présente dans la fenêtre de la macro. Vous pouvez désélectionner ou resélectionner des éléments grâce à cette liste.
|
||||||
|
Ensuite, vous pouvez spécifier le nombre de fois que vous souhaitez exporter un élément.
|
||||||
|
-
|
||||||
|
Les dimensions du plateau de découpe à spécifier correspondent aux dimensions pour la découpeuse laser (les valeurs par défaut sont celles de la Trotec).
|
||||||
|
Vous avez ensuite 2 options optionnelles, une pour chaque exportation :
|
||||||
|
- pour l'exportation SVG, vous pouvez utiliser un algorithme de calepinage qui limitera au maximum le nombre de fichiers créés lors de l'exportation (par défaut, crée un fichier par élément).
|
||||||
|
- pour l'exportation STL, vous pouvez choisir de convertir chaque élément en un seul et unique fichier STL, les éléments ne seront plus considérés comme des éléments indépendants (par défaut, crée un fichier par élément).
|
||||||
|
-
|
||||||
|
Enfin, il ne vous reste plus qu'à cliquer sur le bouton Exporter et la macro se chargera de tout exporter d'un coup dans un dossier créé à l'emplacement du document.
|
||||||
|
|
||||||
Cliquez sur les éléments que vous souhaitez exporter, puis suivez les indications ci-dessous, soit pour l'exportation en .svg, soit pour l'exportation en .stl, en fonction de ce que vous souhaitez.
|
|
||||||
|
|
||||||
### Exportation en .svg (Découpe laser)
|
### Exportation en .svg (Découpe laser)
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue