Macro Zoom1 1/it

Zoom 1:1

Descrizione
Zoom 1:1 per visualizzare gli oggetti sullo schermo alle loro dimensioni reali.

Versione macro: 1.1
Ultima modifica: 05-03-2025
Versione FreeCAD: Python3+
Download: ToolBar Icon
Autore: TheMarkster
Autore
TheMarkster
Download
ToolBar Icon
Link
Versione macro
1.1
Data ultima modifica
05-03-2025
Versioni di FreeCAD
Python3+
Scorciatoia
Nessuna
Vedere anche
Nessuno

Descrizione

Ingrandisce l'immagine in modo che gli oggetti appaiano sullo schermo nelle loro dimensioni reali. Ad esempio, si dovrebbe essere in grado di misurare un cubo da 100 mm e rilevare una misura di 100 mm appoggiando un righello allo schermo.

Utilizzo

Eseguire la macro per ingrandire la visualizzazione fino alle dimensioni reali degli oggetti. A volte, a causa di limitazioni di Qt, le informazioni hardware fornite alla macro potrebbero risultare errate (ad esempio, la larghezza dello schermo in millimetri). Per questi casi è disponibile una finestra di dialogo per la calibrazione. Per visualizzarla, tenere premuto il tasto Ctrl mentre si esegue la macro. Verrà creato un cubo temporaneo di 100 mm. Misurare il cubo visualizzato sullo schermo con un righello o un calibro e inserire le misure (in mm) nella finestra di dialogo; il sistema calcolerà il parametro di correzione appropriato per il tuo hardware.

Questo parametro di regolazione è memorizzato nei parametri utente in Plugins/Zoom1_1_Macro/Tweak.

Come funziona

La dimensione dello schermo (della vista MDI, ovvero la vista 3D) viene ricavata da Qt in millimetri. L'altezza della telecamera viene quindi impostata sul valore minore tra la larghezza e l'altezza dello schermo. Ad esempio, se le dimensioni dello schermo sono 800 x 600, l'altezza della telecamera viene fissata a 600 unità sopra la scena.

Limitazioni

  1. A volte, per vari motivi, le informazioni sulle dimensioni dell'hardware fornite alla macro da Qt potrebbero risultare errate; in tal caso, è necessario utilizzare il parametro "Tweak" tramite la finestra di dialogo di calibrazione integrata.
  2. Funziona solo con le modalità di visualizzazione a proiezione ortografica.
  3. Ovviamente, questa funzione è utilizzabile solo entro un intervallo di dimensioni limitato.

Precauzioni

Bisogna prestare attenzione quando si avvicinano oggetti allo schermo o si tenta di misurare qualcosa su di esso, per evitare di graffiarne fisicamente la superficie.

Script

L'icona della macro

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