Macro Align View to Face/es: Difference between revisions

From FreeCAD Documentation
mNo edit summary
(Updating to match new version of source page)
 
(13 intermediate revisions by 2 users not shown)
Line 1: Line 1:
<languages/>
{{Macro/es|Name=Macro Align View to Face|Name/es=Macro Align View to Face|Description=This macro aligns the current view to a selected face|Author=Rockn|Version=1.0|Date=2014-03-12}}

<div class="mw-translate-fuzzy">
{{Macro/es
|Name=Macro Align View to Face
|Icone=Macro_Align_View_to_Face.png
|Translate=Vista de alineación de macro a cara
|Description=Esta macro alinea la vista actual a una cara seleccionada
|Author=Rockn
|Version=1.0
|Date=2014-03-12
|FCVersion=All
|Download=[https://www.freecadweb.org/wiki/images/d/d7/Macro_Align_View_to_Face.png ToolBar Icon]
}}
</div>

<span id="Description"></span>
==Descripción==


Esta macro gira la vista actual para apuntar perpendicularmente a una cara seleccionada de un objeto existente.
==Description==


==Usage==
This macro rotates the current view to point perpendicularly at a selected face of an existing object.


<div class="mw-translate-fuzzy">
==How to use==
==Cómo usar==
# Select a face on an object
# Seleccionar una cara en un objeto
# Run the macro
# Ejecutar la macro
</div>


==Script==
==Script==


ToolBar Icon [[Image:Macro_Align_View_to_Face.png]]
{{Code|code=

'''Macro_Align_View_to_Face.FCMacro'''
{{MacroCode|code=


# -*- coding: utf-8 -*-
# -*- coding: utf-8 -*-
# Set the current view perpendicular to the selected face
# Set the current view perpendicular to the selected line
# Place la vue perpendiculairement à la face selectionnee
# Place la vue perpendiculairement a la line selectionnee
# 2013 Jonathan Wiedemann, 2016 Werner Mayer
# 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
from pivy import coin

import FreeCAD as app
import FreeCADGui as gui


def pointAt(normal, up):
def pointAt(normal, up):
Line 41: Line 76:
return App.Placement(rot).Rotation
return App.Placement(rot).Rotation


def get_selection_and_turn_view():
s=Gui.Selection.getSelectionEx()
doc = app.activeDocument()
obj=s[0]
if doc is None:
faceSel = obj.SubObjects[0]
app.Console.PrintWarning('Align_view_to_face: No file open, nothing to do\n')
dir = faceSel.normalAt(0,0)
return
cam = FreeCADGui.ActiveDocument.ActiveView.getCameraNode()
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 dir.z == 1 :
if __name__ == '__main__':
get_selection_and_turn_view()
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")


}}
}}



<languages/>

Latest revision as of 12:00, 18 November 2023

Vista de alineación de macro a cara

Descripción
Esta macro alinea la vista actual a una cara seleccionada

Versión macro : 1.0
Fecha última modificación : 2014-03-12
Versión FreeCAD : All
Descargar : ToolBar Icon
Autor : Rockn
Autor
Rockn
Descargar
ToolBar Icon
Enlace
Versión Macro
1.0
Fecha última modificación
2014-03-12
Versión(es) FreeCAD
All
Acceso directo predeterminado
None
Ver también
None

Descripción

Esta macro gira la vista actual para apuntar perpendicularmente a una cara seleccionada de un objeto existente.

Usage

Cómo usar

  1. Seleccionar una cara en un objeto
  2. Ejecutar la macro

Script

ToolBar Icon

Macro_Align_View_to_Face.FCMacro

# -*- 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()