Macro Align View to Face: Difference between revisions

From FreeCAD Documentation
(Update macro from http://forum.freecadweb.org/viewtopic.php?f=22&t=14526#p116690)
mNo edit summary
Line 52: Line 52:


if dir.z == 1 :
if dir.z == 1 :
rot = pointAt(dir, App.Vector(0.0,1.0,0.0))
rot = pointAt(dir, App.Vector(0.0,1.0,0.0))
elif dir.z == -1 :
elif dir.z == -1 :
rot = pointAt(dir, App.Vector(0.0,1.0,0.0))
rot = pointAt(dir, App.Vector(0.0,1.0,0.0))
else :
else :
rot = pointAt(dir, App.Vector(0.0,0.0,1.0))
rot = pointAt(dir, App.Vector(0.0,0.0,1.0))


cam.orientation.setValue(rot.Q)
cam.orientation.setValue(rot.Q)

Revision as of 14:29, 7 March 2016

Macro Align View to Face

Description
This macro aligns the current view to a selected face

Author: Rockn
Author
Rockn
Download
None
Links
Macro Version
1.0
Date last modified
None
FreeCAD Version(s)
None
Default shortcut
None
See also
None

Description

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

How to use

  1. Select a face on an object
  2. Run the macro

Script

# -*- coding: utf-8 -*-
# Set the current view perpendicular to the selected face
# Place la vue perpendiculairement à la face selectionnee
# 2013 Jonathan Wiedemann, 2016 Werner Mayer

from pivy import coin

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

s=Gui.Selection.getSelectionEx()
obj=s[0]
faceSel = obj.SubObjects[0]
dir = faceSel.normalAt(0,0)
cam = FreeCADGui.ActiveDocument.ActiveView.getCameraNode()

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")