Macro BoundingBox Tracing/it: Difference between revisions
Renatorivo (talk | contribs) No edit summary |
mNo edit summary |
||
Line 1: | Line 1: | ||
{{Macro/it|Icon=BoundBoxTracing|Name=Macro BoundingBox Tracing|Name/it=Traccia contenitore|Description=Questa macro crea una traccia rossa (modificabile) intorno al BoundingBox con 6 rettangoli.|Author=Mario52|Version=0.6 |
{{Macro/it|Icon=BoundBoxTracing|Name=Macro BoundingBox Tracing|Name/it=Traccia contenitore|Description=Questa macro crea una traccia rossa (modificabile) intorno al BoundingBox con 6 rettangoli.|Author=Mario52|Version=0.6|Date=08/08/2017}} |
||
==Descrizione== |
==Descrizione== |
Revision as of 09:16, 27 September 2017
File:BoundBoxTracing Macro BoundingBox Tracing |
Descrizione |
---|
Questa macro crea una traccia rossa (modificabile) intorno al BoundingBox con 6 rettangoli. Versione macro: 0.6 Ultima modifica: 08/08/2017 Autore: Mario52 |
Autore |
Mario52 |
Download |
None |
Link |
Raccolta di macro Come installare le macro Personalizzare la toolbar |
Versione macro |
0.6 |
Data ultima modifica |
08/08/2017 |
Versioni di FreeCAD |
None |
Scorciatoia |
Nessuna |
Vedere anche |
Nessuno |
Descrizione
Questa macro crea una traccia rossa di 6 rettangoli (modificabile) del parallelepipedo contenitore dell'oggetto.
Utilizzo
Selezionare l'oggetto e lanciare la macro. Vengono creati 6 rettangoli rossi attorno all'oggetto, il colore può essere cambiato.
Se createVol = 1 (Linea 33) viene creato un volume
Per cambiare il colore o altre opzioni modificare le righe da 31 a 49, sezione configurazione
##exampleCode## ##### Section configuration begin ################## ##### for volume begin ################### createVol = 1 # give 1 for create Volume # mettre a 1 pour creer un volume createDimVol = 1 # 1 = create dimension info : 0 = not dimension info ##### for volume end ################### ##### for dimensions info begin ########## createDim = 1 # 1 = create dimension info : 0 = not create dimension info DisplayModeText = "Screen" # available : "Screen" or "World" JustificationText = "Center" # available : "Center" or "Left" or "Right" FontSizeText = 10.0 # text info dimension TextColorText_R = 0.0 # text color info red 1 = 255 TextColorText_G = 0.0 # text color info green 1 = 255 TextColorText_B = 0.0 # text color info blue 1 = 255 arondi = 3 # round the info ex: 3 = 3 decimals ##### for dimensions info end ########## ##### Section configuration end ####################
Icona
Scaricare il file immagine e copiarlo nel proprio repertorio macro.
Cliccare sull'immagine con il tasto destro del mouse e salvarla nella nuova posizione selezionando "Salva oggetto con nome ..."
Macro
Macro_BoundingBox_Tracing.FCMacro
# -*- coding: utf-8 -*-
# cette macro trace en rouge (modifiable) le tour du boundingbox avec 6 rectangles
# si "createVol" = 1 il sera cree un volume (rouge) de la dimension du BoundBox
# this macro red trace (editable) around the BoundingBox with 6 rectangles
# if "createVol" = 1 on volume (red) is created
# Macro_BoundingBox_Tracing
#
#OS: Windows Vista #OS: Windows 8.1 #OS: Windows 10
#Platform: 32-bit #Word size of OS: 64-bit #Word size of OS: 64-bit
#Version: 0.14.3389 #Word size of FreeCAD: 64-bit #Word size of FreeCAD: 64-bit
#Python version: 2.6.2 #Version: 0.15.4671 (Git) #Version: 0.16.6700 (Git)
#Qt version: 4.5.2 #Branch: releases/FreeCAD-0-15 #Build type: Release
#Coin version: 3.1.0 #Hash: 244b3aef360841646cbfe80a1b225c8b39c8380c #Branch: releases/FreeCAD-0-16
#SoQt version: 1.4.1 #Python version: 2.7.8 #Hash: 7b925d11aa69ac405b423635adb1e2833f18a817
#OCC version: 6.5.1 #Qt version: 4.8.6 #Python version: 2.7.8
# #Coin version: 4.0.0a #Qt version: 4.8.6
# #OCC version: 6.8.0.oce-0.17 #Coin version: 4.0.0a
#OCC version: 6.8.0.oce-0.17
__title__ = "BoundingBox_Tracing"
__author__ = "Mario52"
__url__ = "http://www.freecadweb.org/index-fr.html"
__Wiki__ = "https://www.freecadweb.org/wiki/Macro_BoundingBox_Tracing"
__version__ = "0.6"
__date__ = "08/08/2017"
import FreeCAD, FreeCADGui, Draft, Part
App = FreeCAD
##### Section configuration begin ##################
##### for volume begin ###################
createVol = 1 # give 1 for create Volume # mettre a 1 pour creer un volume
createDimVol = 1 # 1 = create dimension info : 0 = not dimension info
##### for volume end ###################
##### for dimensions info begin ##########
createDim = 1 # 1 = create dimension info : 0 = not create dimension info
DisplayModeText = "Screen" # available : "Screen" or "World"
JustificationText = "Center" # available : "Center" or "Left" or "Right"
FontSizeText = 10.0 # text info dimension
TextColorText_R = 0.0 # text color info red 1 = 255
TextColorText_G = 0.0 # text color info green 1 = 255
TextColorText_B = 0.0 # text color info blue 1 = 255
arondi = 3 # round the info ex: 3 = 3 decimals
##### for dimensions info end ##########
##### Section configuration end ####################
sel = FreeCADGui.Selection.getSelection()
selEx = FreeCADGui.Selection.getSelectionEx()
objs = [selobj.Object for selobj in selEx]
if len(objs) >= 1:
if hasattr(objs[0], "Shape"):
s = objs[0].Shape
elif hasattr(objs[0], "Mesh"): # upgrade with wmayer thanks #http://forum.freecadweb.org/viewtopic.php?f=13&t=22331
s = objs[0].Mesh
elif hasattr(objs[0], "Points"):
s = objs[0].Points
try:
# LineColor
red = 1.0 # 1 = 255
green = 0.0 #
blue = 0.0 #
# boundBox
boundBox_ = s.BoundBox
boundBoxLX = boundBox_.XLength
boundBoxLY = boundBox_.YLength
boundBoxLZ = boundBox_.ZLength
nameLabel = sel[0].Label
a = str(boundBox_)
a,b = a.split('(')
c = b.split(',')
oripl_X = float(c[0])
oripl_Y = float(c[1])
oripl_Z = float(c[2])
App.Console.PrintMessage(str(boundBox_)+"\r\n")
App.Console.PrintMessage("Rectangle : "+str(boundBoxLX)+" x "+str(boundBoxLY)+" x "+str(boundBoxLZ)+"\r\n")
if (createVol == 1) and (boundBoxLX > 0) and (boundBoxLY > 0) and (boundBoxLZ > 0): # Create Volume
BDvol = App.ActiveDocument.addObject("Part::Box",nameLabel + "_BoundBoxVolume")
#BDvol.Label = "BoundBoxVolume"
BDvol.Length.Value = boundBoxLX
BDvol.Width.Value = boundBoxLY
BDvol.Height.Value = boundBoxLZ
BDvol.Placement=App.Placement(App.Vector(oripl_X,oripl_Y,oripl_Z), App.Rotation(App.Vector(0,0,1),0), App.Vector(0,0,0))
FreeCADGui.ActiveDocument.getObject(BDvol.Name).LineColor = (red, green, blue)
FreeCADGui.ActiveDocument.getObject(BDvol.Name).PointColor = (red, green, blue)
FreeCADGui.ActiveDocument.getObject(BDvol.Name).ShapeColor = (red, green, blue)
FreeCADGui.ActiveDocument.getObject(BDvol.Name).Transparency = 80
App.Console.PrintMessage(nameLabel + "_BoundBoxVolume : " + str(BDvol.Shape.Volume)+"\r\n")
if createDimVol == 1: # section create dimension info for volume
conteneurVol = []
del conteneurVol[:]
conteneurVol = App.activeDocument().addObject("App::DocumentObjectGroup",nameLabel + "_BoundBoxVolume_Info")
pl_0C1 = Draft.makeText([str(round(boundBoxLX,arondi))],point=FreeCAD.Vector(oripl_X + (boundBoxLX/2), oripl_Y, oripl_Z))
pl_0C1.ViewObject.DisplayMode = DisplayModeText
pl_0C1.ViewObject.Justification = JustificationText
pl_0C1.ViewObject.TextColor = (TextColorText_R, TextColorText_G, TextColorText_B)
pl_0C1.ViewObject.FontSize = FontSizeText
pl_0C1.Label = nameLabel + "_Volume_X_" + str(round(boundBoxLX,arondi))
conteneurVol.addObject(pl_0C1)
pl_0C2 = Draft.makeText([str(round(boundBoxLY,arondi))],point=FreeCAD.Vector(oripl_X, oripl_Y + (boundBoxLY/2), oripl_Z))
pl_0C2.ViewObject.DisplayMode = DisplayModeText
pl_0C2.ViewObject.Justification = JustificationText
pl_0C2.ViewObject.TextColor = (TextColorText_R, TextColorText_G, TextColorText_B)
pl_0C2.ViewObject.FontSize = FontSizeText
pl_0C2.Label = nameLabel + "_Volume_Y_" + str(round(boundBoxLY,arondi))
conteneurVol.addObject(pl_0C2)
pl_0C3 = Draft.makeText([str(round(boundBoxLZ,arondi))],point=FreeCAD.Vector(oripl_X, oripl_Y, oripl_Z + (boundBoxLZ/2)))
pl_0C3.ViewObject.DisplayMode = DisplayModeText
pl_0C3.ViewObject.Justification = JustificationText
pl_0C3.ViewObject.TextColor = (TextColorText_R, TextColorText_G, TextColorText_B)
pl_0C3.ViewObject.FontSize = FontSizeText
pl_0C3.Label = nameLabel + "_Volume_Z_" + str(round(boundBoxLZ,arondi))
conteneurVol.addObject(pl_0C3)
else:
App.Console.PrintMessage("Not BoundBox possible"+"\r\n")
App.Console.PrintMessage("_____________________"+"\r\n")
#####
conteneurRectangle = []
del conteneurRectangle[:]
conteneurRectangle = App.activeDocument().addObject("App::DocumentObjectGroup",nameLabel + "_BoundBoxRectangle")
if createDim == 1: # conteneur dimension info
conteneurInfo = []
del conteneurInfo[:]
conteneurInfo = App.activeDocument().addObject("App::DocumentObjectGroup",nameLabel + "_BoundBoxRectangle_Info")
try:
if (boundBoxLX and boundBoxLY) > 0.0:
pl_0 = App.Placement(App.Vector(oripl_X,oripl_Y,oripl_Z), App.Rotation(0.0,0.0,0.0))
double = Draft.makeRectangle(length=boundBoxLX,height=boundBoxLY,placement=pl_0,face=False,support=None) #OK
double.Label = nameLabel + "_BoundBoxRectangle_Bo"
FreeCADGui.activeDocument().activeObject().LineColor = (red, green, blue)
conteneurRectangle.addObject(double)
# else:
# App.Console.PrintError("not value 0"+"\n")
if createDim == 1: # section create dimension info
pl_0C1 = Draft.makeText([str(round(boundBoxLX,arondi))],point=FreeCAD.Vector(pl_0.Base.x + (boundBoxLX/2), pl_0.Base.y, pl_0.Base.z))
pl_0C1.ViewObject.DisplayMode = DisplayModeText
pl_0C1.ViewObject.Justification = JustificationText
pl_0C1.ViewObject.TextColor = (TextColorText_R, TextColorText_G, TextColorText_B)
pl_0C1.ViewObject.FontSize = FontSizeText
pl_0C1.Label = nameLabel + "_Rectangle_Bo_0X_" + str(round(boundBoxLX,arondi))
conteneurInfo.addObject(pl_0C1)
pl_0C2 = Draft.makeText([str(round(boundBoxLY,arondi))],point=FreeCAD.Vector(pl_0.Base.x, pl_0.Base.y + (boundBoxLY/2), pl_0.Base.z))
pl_0C2.ViewObject.DisplayMode = DisplayModeText
pl_0C2.ViewObject.Justification = JustificationText
pl_0C2.ViewObject.TextColor = (TextColorText_R, TextColorText_G, TextColorText_B)
pl_0C2.ViewObject.FontSize = FontSizeText
pl_0C2.Label = nameLabel + "_Rectangle_Bo_0Y_" + str(round(boundBoxLY,arondi))
conteneurInfo.addObject(pl_0C2)
except:
App.Console.PrintError("not done 0"+"\n")
try:
if (boundBoxLX and boundBoxLY) > 0.0:
pl_1 = App.Placement(App.Vector(oripl_X,oripl_Y,oripl_Z+boundBoxLZ), App.Rotation(0.0,0.0,0.0))
double = Draft.makeRectangle(length=boundBoxLX,height=boundBoxLY,placement=pl_1,face=False,support=None) #Ok
double.Label = nameLabel + "_BoundBoxRectangle_To"
FreeCADGui.activeDocument().activeObject().LineColor = (red, green, blue)
conteneurRectangle.addObject(double)
# else:
# App.Console.PrintError("not value 1"+"\n")
if createDim == 1: # section create dimension info
pl_0C1 = Draft.makeText([str(round(boundBoxLX,arondi))],point=FreeCAD.Vector(pl_1.Base.x + (boundBoxLX/2), pl_1.Base.y, pl_1.Base.z))
pl_0C1.ViewObject.DisplayMode = DisplayModeText
pl_0C1.ViewObject.Justification = JustificationText
pl_0C1.ViewObject.TextColor = (TextColorText_R, TextColorText_G, TextColorText_B)
pl_0C1.ViewObject.FontSize = FontSizeText
pl_0C1.Label = nameLabel + "_Rectangle_To_1X_" + str(round(boundBoxLX,arondi))
conteneurInfo.addObject(pl_0C1)
pl_0C2 = Draft.makeText([str(round(boundBoxLY,arondi))],point=FreeCAD.Vector(pl_1.Base.x, pl_1.Base.y + (boundBoxLY/2), pl_1.Base.z))
pl_0C2.ViewObject.DisplayMode = DisplayModeText
pl_0C2.ViewObject.Justification = JustificationText
pl_0C2.ViewObject.TextColor = (TextColorText_R, TextColorText_G, TextColorText_B)
pl_0C2.ViewObject.FontSize = FontSizeText
pl_0C2.Label = nameLabel + "_Rectangle_To_1Y_" + str(round(boundBoxLY,arondi))
conteneurInfo.addObject(pl_0C2)
except:
App.Console.PrintError("not done 1"+"\n")
try:
if (boundBoxLX and boundBoxLZ) > 0.0:
pl_2 = App.Placement(App.Vector(oripl_X,oripl_Y,oripl_Z), App.Rotation(0.0,0.0,90))
double = Draft.makeRectangle(length=boundBoxLX,height=boundBoxLZ,placement=pl_2,face=False,support=None) #Ok
double.Label = nameLabel + "_BoundBoxRectangle_Fr"
FreeCADGui.activeDocument().activeObject().LineColor = (red, green, blue)
conteneurRectangle.addObject(double)
# else:
# App.Console.PrintError("not value 2"+"\n")
if createDim == 1: # section create dimension info
pl_0C1 = Draft.makeText([str(round(boundBoxLX,arondi))],point=FreeCAD.Vector(pl_2.Base.x + (boundBoxLX/2), pl_2.Base.y, pl_2.Base.z))
pl_0C1.ViewObject.DisplayMode = DisplayModeText
pl_0C1.ViewObject.Justification = JustificationText
pl_0C1.ViewObject.TextColor = (TextColorText_R, TextColorText_G, TextColorText_B)
pl_0C1.ViewObject.FontSize = FontSizeText
pl_0C1.Label = nameLabel + "_Rectangle_Fr_2X_" + str(round(boundBoxLX,arondi))
conteneurInfo.addObject(pl_0C1)
pl_0C2 = Draft.makeText([str(round(boundBoxLZ,arondi))],point=FreeCAD.Vector(pl_2.Base.x, pl_2.Base.y, pl_2.Base.z + (boundBoxLZ/2)))
pl_0C2.ViewObject.DisplayMode = DisplayModeText
pl_0C2.ViewObject.Justification = JustificationText
pl_0C2.ViewObject.TextColor = (TextColorText_R, TextColorText_G, TextColorText_B)
pl_0C2.ViewObject.FontSize = FontSizeText
pl_0C2.Label = nameLabel + "_Rectangle_Fr_2Z_" + str(round(boundBoxLZ,arondi))
conteneurInfo.addObject(pl_0C2)
except:
App.Console.PrintError("not done 2"+"\n")
try:
if (boundBoxLX and boundBoxLZ) > 0.0:
pl_3 = App.Placement(App.Vector(oripl_X,oripl_Y+boundBoxLY,oripl_Z), App.Rotation(0.0,0.0,90))
double = Draft.makeRectangle(length=boundBoxLX,height=boundBoxLZ,placement=pl_3,face=False,support=None) #Ok
double.Label = nameLabel + "_BoundBoxRectangle_Re"
FreeCADGui.activeDocument().activeObject().LineColor = (red, green, blue)
conteneurRectangle.addObject(double)
# else:
# App.Console.PrintError("not value 3"+"\n")
if createDim == 1: # section create dimension info
pl_0C1 = Draft.makeText([str(round(boundBoxLX,arondi))],point=FreeCAD.Vector(pl_3.Base.x + (boundBoxLX/2), pl_3.Base.y, pl_3.Base.z))
pl_0C1.ViewObject.DisplayMode = DisplayModeText
pl_0C1.ViewObject.Justification = JustificationText
pl_0C1.ViewObject.TextColor = (TextColorText_R, TextColorText_G, TextColorText_B)
pl_0C1.ViewObject.FontSize = FontSizeText
pl_0C1.Label = nameLabel + "_Rectangle_Re_3X_" + str(round(boundBoxLX,arondi))
conteneurInfo.addObject(pl_0C1)
pl_0C2 = Draft.makeText([str(round(boundBoxLZ,arondi))],point=FreeCAD.Vector(pl_3.Base.x, pl_3.Base.y, pl_3.Base.z + (boundBoxLZ/2)))
pl_0C2.ViewObject.DisplayMode = DisplayModeText
pl_0C2.ViewObject.Justification = JustificationText
pl_0C2.ViewObject.TextColor = (TextColorText_R, TextColorText_G, TextColorText_B)
pl_0C2.ViewObject.FontSize = FontSizeText
pl_0C2.Label = nameLabel + "_Rectangle_Re_3Z_" + str(round(boundBoxLZ,arondi))
conteneurInfo.addObject(pl_0C2)
except:
App.Console.PrintError("not done 3"+"\n")
try:
if (boundBoxLY and boundBoxLZ) > 0.0:
pl_4 = App.Placement(App.Vector(oripl_X,oripl_Y,oripl_Z), App.Rotation(90,0.0,90))
double = Draft.makeRectangle(length=boundBoxLY,height=boundBoxLZ,placement=pl_4,face=False,support=None) #Ok
double.Label = nameLabel + "_BoundBoxRectangle_Le"
FreeCADGui.activeDocument().activeObject().LineColor = (red, green, blue)
conteneurRectangle.addObject(double)
# else:
# App.Console.PrintError("not value 4"+"\n")
if createDim == 1: # section create dimension info
pl_0C1 = Draft.makeText([str(round(boundBoxLY,arondi))],point=FreeCAD.Vector(pl_4.Base.x, pl_4.Base.y + (boundBoxLY/2), pl_4.Base.z))
pl_0C1.ViewObject.DisplayMode = DisplayModeText
pl_0C1.ViewObject.Justification = JustificationText
pl_0C1.ViewObject.TextColor = (TextColorText_R, TextColorText_G, TextColorText_B)
pl_0C1.ViewObject.FontSize = FontSizeText
pl_0C1.Label = nameLabel + "_Rectangle_Le_4Y_" + str(round(boundBoxLY,arondi))
conteneurInfo.addObject(pl_0C1)
pl_0C2 = Draft.makeText([str(round(boundBoxLZ,arondi))],point=FreeCAD.Vector(pl_4.Base.x, pl_4.Base.y, pl_4.Base.z + (boundBoxLZ/2)))
pl_0C2.ViewObject.DisplayMode = DisplayModeText
pl_0C2.ViewObject.Justification = JustificationText
pl_0C2.ViewObject.TextColor = (TextColorText_R, TextColorText_G, TextColorText_B)
pl_0C2.ViewObject.FontSize = FontSizeText
pl_0C2.Label = nameLabel + "_Rectangle_Le_4Z_" + str(round(boundBoxLZ,arondi))
conteneurInfo.addObject(pl_0C2)
except:
App.Console.PrintError("not done 4"+"\n")
try:
if (boundBoxLY and boundBoxLZ) > 0.0:
pl_5 = App.Placement(App.Vector(oripl_X+boundBoxLX,oripl_Y,oripl_Z), App.Rotation(90,0.0,90))
double = Draft.makeRectangle(length=boundBoxLY,height=boundBoxLZ,placement=pl_5,face=False,support=None) #Ok
double.Label = nameLabel + "_BoundBoxRectangle_Ri"
FreeCADGui.activeDocument().activeObject().LineColor = (red, green, blue)
conteneurRectangle.addObject(double)
# else:
# App.Console.PrintError("not value 5"+"\n")
if createDim == 1: # section create dimension info
pl_0C1 = Draft.makeText([str(round(boundBoxLY,arondi))],point=FreeCAD.Vector(pl_5.Base.x, pl_5.Base.y + (boundBoxLY/2), pl_5.Base.z))
pl_0C1.ViewObject.DisplayMode = DisplayModeText
pl_0C1.ViewObject.Justification = JustificationText
pl_0C1.ViewObject.TextColor = (TextColorText_R, TextColorText_G, TextColorText_B)
pl_0C1.ViewObject.FontSize = FontSizeText
pl_0C1.Label = nameLabel + "_Rectangle_Ri_5Y_" + str(round(boundBoxLY,arondi))
conteneurInfo.addObject(pl_0C1)
pl_0C2 = Draft.makeText([str(round(boundBoxLZ,arondi))],point=FreeCAD.Vector(pl_5.Base.x, pl_5.Base.y, pl_5.Base.z + (boundBoxLZ/2)))
pl_0C2.ViewObject.DisplayMode = DisplayModeText
pl_0C2.ViewObject.Justification = JustificationText
pl_0C2.ViewObject.TextColor = (TextColorText_R, TextColorText_G, TextColorText_B)
pl_0C2.ViewObject.FontSize = FontSizeText
pl_0C2.Label = nameLabel + "_Rectangle_Ri_5Z_" + str(round(boundBoxLZ,arondi))
conteneurInfo.addObject(pl_0C2)
except:
App.Console.PrintError("not done 5"+"\n")
#####
App.ActiveDocument.recompute()
except Exception:
App.Console.PrintError("Bad selection"+"\n")
else:
App.Console.PrintMessage("Select an object !"+"\n")
Versione
ver 0.6 le 08/08/2017: add text info dimension , contener for rectangles, info rectangles, info volume, add section configuration color , label object selected
ver 0.5 le 08/05/2017 : upgrade adesso acceta gli elementi "mesh" e "Points" grazie wmayer Makro Bounding-Box für STL importierte Teile und für Punktewolken
ver 0.5 le 08/05/2017 : upgrade now accept the "mesh" and "Points" thanks wmayer Makro Bounding-Box für STL importierte Teile und für Punktewolken
ver 0.4 il 04/06/2016 : testo se value = 0 allora non crea il boundbox (esempio: obietto Draft)