Macro Build Utility/de

Generisches Makro-Symbol Erstellen Sie Ihr persönliches Symbol mit demselben Namen des Makros Dienstprogramm Zusammenbau

Beschreibung
Dieses Makro stellt ein Build-Dienstprogramm bereit, mit dem mehrere Projektdateien zu einer Projektdatei zusammengefügt werden können.

Versionsmakro : 1.0
Datum der letzten Änderung : 2015-01-21
FreeCAD version : Alle
Herunterladen : Werkzeugleisten-Symbol
Autor: Piffpoof
Autor
Piffpoof
Herunterladen
Werkzeugleisten-Symbol
Links
Macro-Version
1.0
Datum der letzten Änderung
2015-01-21
FreeCAD-Version(s)
Alle
Standardverknüpfung
None
Siehe auch
None

Beschreibung

Dieses Makro ist für den Einsatz in großen Projekten mit Hunderten von Objekten vorgesehen. Seine Verwendung in einem kleinen Projekt mit nur einer Datei wäre sinnlos und unnötig. Bei einem großen Projekt mit vielen Objekten und vielen Dateien, die zu einer endgültigen Datei zusammengeführt werden müssen, spart es jedoch Zeit, erspart dem Benutzer wiederholte Aktionen und verhindert menschliche Fehler.

Installation

Der gesamte Code für buildUtility.FCMacro befindet sich in einem Makro. Die Installation besteht also darin, den Code in das entsprechende Makroverzeichnis zu kopieren und pythonAssistantWindow über das Makro-Menü, die Python-Konsole oder eine Symbolleisten-Schaltfläche (die bevorzugte Methode) aufzurufen.

Anwendung

Das Build-Dienstprogramm funktioniert nach denselben Prinzipien wie die Build-Dateien, die zum Zusammenstellen großer Softwaresysteme (wie FreeCAD) verwendet werden. Mit einem Texteditor wird eine Textdatei erstellt, die den vom Build-Dienstprogramm geforderten Formaten entspricht. Das Build-Dienstprogramm liest dann einfach jede Zeile der Textdatei und führt die in dieser Textdatei angegebenen Aktionen aus.

Das Makro fordert den Benutzer zur Eingabe einer "Build-Datei" auf. Anschließend analysiert es diese Build-Datei. Es gibt drei zulässige Zeilentypen:

Die Dateiendung für Build Utility-Dateien lautet „.FCBld“. Dadurch wird verhindert, dass diese Dateien mit anderen Verwendungszwecken und Anwendungen verwechselt werden.

Jede in der Build-Datei angegebene Datei hat standardmäßig die Erweiterung ".FCStd". Beginnt die Zeile mit einem Verzeichnis, wird die Projektdatei aus diesem Unterordner gelesen. Andernfalls wird davon ausgegangen, dass die Zeile eine Projektdatei angibt. Verzeichnisse innerhalb von Verzeichnissen werden unterstützt, sodass eine beliebige Verschachtelungstiefe möglich ist. Das Dateispezifikationsformat entspricht dem "Unix"-Stil, wobei verschiedene Ebenen durch den Schrägstrich "/" getrennt werden.

Jede fehlende Datei wird in der Ausgabefenster ausgegeben. Jedes fehlende Verzeichnis wird in der Ausgabefenster ausgegeben.

Es wird ein neues Dokument erstellt und jedes Projekt wird in dieses neue und leere Dokument zusammengeführt. Das Dokument wird am Ende nicht gespeichert, dies bleibt dem Benutzer überlassen, falls gewünscht. Wenn die Datei nicht existiert, wird der Dateiname in das Ausgabefenster ausgegeben.

Benutzeroberfläche

Für dieses Makro gibt es überhaupt keine grafische Benutzeroberfläche. Das Makro liest eine mit einem Texteditor erstellte Textdatei und erstellt ein Modell in einem Ausgabedokument. Abgesehen vom Klicken auf die Schaltfläche in der Symbolleiste, um den Vorgang zu starten, ist keine Benutzerinteraktion erforderlich.

Optionen

Es gibt keine grafische Benutzeroberfläche, daher gibt es auch keine Optionen. Die einzigen Alternativen bestehen darin, die drei oben beschriebenen Zeilentypen in der Textdatei zu verwenden.

Anmerkungen

Um noch einmal zu wiederholen, was zu Beginn gesagt wurde: Bei einem kleinen Modell mit nur einer Datei ist diese Makrofunktion nutzlos. Für Personen, die Flugzeuge, Lokomotiven, Schiffe, Gebäude, physikalische Anlagen oder komplexe Schaltkreise modellieren, bietet es jedoch einen eindeutigen Nutzen und Vorteil. Durch die Wahl der Dateiendung „.FCBld“ soll eine Art Standard für Build-Dateien innerhalb von FreeCAD geschaffen werden. Durch die Reservierung des Präfixzeichens „@“ in der Befehlsdateidefinition soll die zukünftige Verwendung und (falls erforderlich) Erweiterung ermöglicht werden.

Verweise

keine (so weit)

Skript

Werkzeugleisten-Symbol

Macro_Build_Utility.FCMacro

#
#						Build Utility
#                       v 0.0 - build from files and files in sub-folders
#
#***********************************************************************************
# routine to read in a build file and merge all specified projects
"""
This function asks the user for a "build file". It then parses that build file, there
are 3 legal line types:
- lines starting with the comment character "#" which are ignored
- lines starting with the subfile character "@" which are ignored
	Note:	the "@" character is for future enhancement when sub-build files 
			will be handled
- all other lines which may be a project file or a subfolder (sub-directory)
If the line is a subfolder then the project file is read from that subfolder.
Otherwise it is assumed the line specifies a project file.
A new document is created and each project is "Project Merged" into that new and empty document.
The document is not saved at the end, this is left for the user if desired.
If the file does not exist then the file name is Printed to the Report view
"""
"""
Example file:
#this is a sample build file
#==============================
@sub-build-files - not presently inplemented
# first the top-level file
metal
# now some misc files
./black/black
./blue/blue
# file does not exist
zebra 
# folder does not exist
/bear/bear
# multiple files in one sub-folder
./engineering/green
./engineering/grey
#multiple files in hierarchical folders
./externalModules/white
./externalModules/red/red
#./externalModules/red/stackerAssembly - commented out as not currently loading
./externalModules/red/orange
./externalModules/red/level3/yellow
"""
# import statements
import FreeCAD
import os.path
from PySide import QtGui

# UI Class definitions

# Class definitions

# Function definitionss

# Constant definitions
buildTargetDocument = "build_target"
commentTag = "#"
subfileTag = "@"
lineFeed = "\n"
subfolder = "./"
carriageReturn = "\r"
fileSeparator = "/"
fcFileExtension      = ".FCStd"
fcFileExtensionUC  = ".FCSTD"
fcFileExtensionLen = -6

# code ***********************************************************************************
buildFilePathName=QtGui.QFileDialog.getOpenFileName()[0]
if len(buildFilePathName) > 0:
	# set up a new empty "build_target" document
	FreeCAD.newDocument(buildTargetDocument)
	FreeCAD.setActiveDocument(buildTargetDocument)
	FreeCAD.ActiveDocument=FreeCAD.getDocument(buildTargetDocument)
	guiDoc=FreeCADGui.ActiveDocument
	#
	lastFileSeparator = buildFilePathName.rindex(fileSeparator)
	buildFilePath = buildFilePathName[: lastFileSeparator]
	buildFileName = buildFilePathName[lastFileSeparator +1:]
	#
	buildFileContents = open(buildFilePathName,"r")
	buildFileLines = buildFileContents.readlines()
	buildFileContents.close()
	#
	for line in buildFileLines:
		if line[0] == commentTag:
			# line of internal comment
			pass
		elif line[0] == subfileTag:
			# line of sub-build-file (not presently implemented)
			pass
		else:
			# a line which should specify a FreeCAD project file
			# - may be preceded by a sub-directory e.g. "./subdir309/"
			# - project file may be missing file extension
			#
			# if line break at end of file spec then remove
			if line[-1:] == lineFeed:
				line = line[:-1]
			if line[-1:] == carriageReturn:
				line = line[:-1]
			# if no FreeCAD project file extension supplied then append one
			# make an uppercase comparison in case of mixed case
			tempLine = fcFileExtension + line.upper()
			if fcFileExtensionUC != tempLine[fcFileExtensionLen:]:
				line = line + fcFileExtension
			# if there is a leading subdirectory then remove "./" from beginning
			if subfolder[0:2] == line[0:2]:
				line = line[2:]
			projectFileSpec = str(buildFilePath) + str("/") + str(line)
			if os.path.exists(projectFileSpec):
				guiDoc.mergeProject(projectFileSpec)
			else:
				FreeCAD.Console.PrintMessage('project file "' + projectFileSpec + '" not found' + "\n")

	# set view back to "build_target", it is up to user to save it (if they want)
	FreeCAD.setActiveDocument(buildTargetDocument)
	FreeCAD.ActiveDocument=FreeCAD.getDocument(buildTargetDocument)
	FreeCADGui.ActiveDocument=FreeCADGui.getDocument(buildTargetDocument)
	FreeCADGui.SendMsgToActiveView("ViewFit")
	FreeCADGui.activeDocument().activeView().viewAxometric()
#
#OS: Mac OS X
#Word size: 64-bit
#Version: 0.14.3703 (Git)
#Branch: releases/FreeCAD-0-14
#Hash: c6edd47334a3e6f209e493773093db2b9b4f0e40
#Python version: 2.7.5
#Qt version: 4.8.6
#Coin version: 3.1.3
#SoQt version: 1.5.0
#OCC version: 6.7.0
#
#thus ends the macro...

Beispiel

Man arbeitet mit einigen anderen Abteilungen des Unternehmens zusammen, um mit FreeCAD ein großes CAD-Modell für einen externen Kunden zu erstellen. Zur Vorbereitung der bevorstehenden Präsentation muss man die Modelle aus den Subsystemen 'schwarz' und 'blau' integrieren. Die Konstruktionsabteilung ist für die Subsysteme 'grün' und 'grau' zuständig, und man hat das Untersystem 'Metall' auf dem eigenen Computer. Der Kunde verwendet ebenfalls FreeCAD, und der Entwurf muss in die Untersysteme 'rot' und 'gelb' integriert werden. Der externe Kunde hat mitgeteilt, dass die Stacker-Baugruppe noch nicht einsatzbereit ist, sodass man sie in der Build-Datei auskommentieren muss.

Es gibt viele Verzeichnispfade einzugeben, daher gibt man die Befehle in die Textdatei "Build Utility" ein, sodass man sie mit einem einzigen Klick auf eine Schaltfläche in der Symbolleiste ausführen kann.

Der Inhalt der unten gezeigten Build-Datei "buildFile.FCBld" zeigt die Dateistruktur für das oben beschriebene Projekt.

#this is the build file for the complete assembly
#==============================
@sub-build-files - not presently implemented
# first the top-level file
metal
# now some misc files
./black/black
./blue/blue
# file does not exist
zebra 
# folder does not exist
/bear/bear
# multiple files in one sub-folder
./engineering/green
./engineering/grey
#multiple files in hierarchical folders
./externalModules/white
./externalModules/red/red
#./externalModules/red/stackerAssembly - commented out as not currently loading
./externalModules/red/orange
./externalModules/red/level3/yellow

Eine Zusammenfassung der Datei und ihrer Verarbeitung lautet wie folgt:

#this is the build file for the complete assembly
#==============================
@sub-build-files - not presently implemented
metal
./black/black
./blue/blue
#./externalModules/red/stackerAssembly - commented out as not currently loading
./externalModules/red/orange
./externalModules/red/level3/yellow