Jump to content

Makro Zoom 1:1

From FreeCAD Documentation
This page is a translated version of the page Macro Zoom1 1 and the translation is 100% complete.

Zoom 1:1

Beschreibung
1:1-Zoom, sodass Objekte in ihrer tatsächlichen Größe auf dem Bildschirm angezeigt werden.

Versionsmakro : 1.1
Datum der letzten Änderung : 2025-03-05
FreeCAD version : Python3+
Herunterladen : Werkzeugleisten-Symbol
Autor: TheMarkster
Autor
TheMarkster
Herunterladen
Werkzeugleisten-Symbol
Links
Macro-Version
1.1
Datum der letzten Änderung
2025-03-05
FreeCAD-Version(s)
Python3+
Standardverknüpfung
None
Siehe auch
None

Beschreibung

Vergrößert das Bild der Kamera, sodass Objekte auf Ihrem Bildschirm in ihrer tatsächlichen Größe angezeigt werden. So sollten Sie beispielsweise einen 100-mm-Würfel mit einem an den Bildschirm gehaltenen Lineal als 100 mm messen können.

Anwendung

Führen Sie das Makro aus, um die tatsächliche Größe Ihrer Objekte anzuzeigen. Aufgrund von Einschränkungen bei Qt können die an das Makro übergebenen Hardware-Informationen manchmal falsch sein, beispielsweise die Bildschirmbreite in Millimetern. Für solche Fälle gibt es einen Kalibrierungsdialog. Um den Dialog aufzurufen, drücken Sie während der Ausführung des Makros die Strg-Taste. Es wird ein temporärer Würfel mit einer Kantenlänge von 100 mm erstellt. Messen Sie den auf Ihrem Bildschirm angezeigten Würfel mit einem Lineal oder Messschieber und geben Sie Ihre Messwerte (in mm) in den Dialog ein. Der Dialog berechnet dann den für Ihre Hardware geeigneten Optimierungsparameter.

Dieser Tweak-Parameter wird in den Benutzerparametern unter Plugins/Zoom1_1_Macro/Tweak gespeichert.

Wie es funktioniert

Die Bildschirmgröße (der MDI-Ansicht, auch bekannt als 3D-Ansicht) wird in MM aus Qt abgerufen. Die Kamerahöhe wird dann auf den kleineren Wert von Bildschirmbreite oder -höhe gesetzt. Wenn die Bildschirmbreite/-höhe beispielsweise 800 bzw. 600 beträgt, wird die Kamerahöhe auf 600 über der Szene festgelegt.

Einschränkungen

  1. Manchmal können die Informationen, die Qt dem Makro bezüglich der Hardwareabmessungen zur Verfügung stellt, aus verschiedenen Gründen falsch sein. In diesem Fall muss der Tweak-Parameter über den integrierten Kalibrierungsdialog verwendet werden.
  2. Funktioniert nur mit orthogonalen Kameramodi.
  3. Natürlich gibt es nur einen begrenzten Bereich von Größen, in denen dies verwendet werden kann.

Vorsichtsmaßnahmen

Beim Hochhalten von Gegenständen oder beim Versuch, Dinge auf dem Bildschirm zu vermessen, ist Vorsicht geboten, damit der Bildschirm nicht zerkratzt wird.

Skript

Das Makro-Symbol

Zoom1_1.FCMacro

# -*- coding: utf-8 -*-
#Zoom 1:1 macro
#2021, by <TheMarkster>, based on work of kisolre
#Attempts to zoom 3D view such that objects on the screen
#appear to be their actual size
#For example, a 100mm cube should measure 100mm on your screen
#This relies on information provided by Qt about the underlying
#hardware, which Qt admits is not always reliable
#Thus we have a Tweak parameter to workaround such cases.
#Press Ctrl key while executing the macro to bring up the
#calibration dialog and set the tweak for your hardware.


import FreeCAD, FreeCADGui
from PySide import QtGui, QtCore
from pivy import coin

__version__ = "1.1"

def zoomActual(tweak=1.0):
    gv = av.graphicsView()
    height = gv.heightMM()
    width = gv.widthMM()
    node = av.getCameraNode()
    node.height.setValue(tweak*min(width,height))

doc = FreeCAD.ActiveDocument
if not doc:
    doc = FreeCAD.newDocument()
    FreeCAD.Console.PrintMessage("No document, creating one.\n")
av = FreeCADGui.activeView()
pg = FreeCAD.ParamGet("User parameter:Plugins/Zoom1_1_Macro")
tweak = pg.GetFloat("Tweak",1.0)
if hasattr(av,"graphicsView") and hasattr(av.getCameraNode(),"height"):
    zoomActual(tweak)
    modifiers = QtGui.QApplication.keyboardModifiers()
    if modifiers == QtCore.Qt.ControlModifier:
        visible = [obj for obj in doc.Objects if hasattr(obj,"ViewObject") and obj.ViewObject.Visibility == True]
        for obj in doc.Objects:
            if hasattr(obj,"ViewObject"):
                obj.ViewObject.Visibility = False
        cube = doc.addObject("Part::Box","TemporaryCalibrationCube")
        cube.Length = cube.Height = cube.Width = 100
        cube.ViewObject.DisplayMode = "Shaded"
        av.viewFront()
        doc.recompute()
        zoomActual(1.0)
        text = "\
Calibration dialog\n\
\n\
A temporary 100x100x100 mm cube has been created for this\n\
calibration. Measure this cube and enter your measurements.\n\
A tweak value will be calculated based on what you enter and \n\
will be stored in user parameters / Plugins / Zoom1_1_Macro\n\
\n\
You can move this dialog if necessary, but be sure not to zoom\n\
in or out before measuring the cube. If the cube does not fit\n\
cancel this dialog, resize the 3D view, and try again.\n\
\n\
Enter measured Cube Width or Height (in MM):\n"
        win = FreeCADGui.getMainWindow()
        title = "Zoom1_1 macro v"+__version__
        dlg = QtGui.QInputDialog()
        usertweak,ok = dlg.getDouble(win,title,text,100.0)
        doc.removeObject(cube.Name)
        for obj in visible:
            obj.ViewObject.Visibility = True
        if not ok:
            FreeCAD.Console.PrintMessage("Canceled, keeping current tweak value\n")
        else:
            tweak = usertweak/100.0
            pg.SetFloat("Tweak", tweak)
            zoomActual(tweak)
    FreeCAD.Console.PrintMessage("Zoom 1:1 macro -- Ctrl + execute to calibrate, if necessary\n")
    FreeCAD.Console.PrintMessage("Tweak = "+str(tweak)+"\n")
elif not hasattr(av.getCameraNode(),"height"):
    FreeCAD.Console.PrintError("Error: Only orthographic camera types are supported.\n")
else:
    FreeCAD.Console.PrintError("Error acquiring QGraphicsView. You might need to update your version of FreeCAD.\n")