251 lines
12 KiB
Python
251 lines
12 KiB
Python
# ***************************************************************************
|
|
# * Copyright (c) 2011 Yorik van Havre <yorik@uncreated.net> *
|
|
# * *
|
|
# * This program is free software; you can redistribute it and/or modify *
|
|
# * it under the terms of the GNU Lesser General Public License (LGPL) *
|
|
# * as published by the Free Software Foundation; either version 2 of *
|
|
# * the License, or (at your option) any later version. *
|
|
# * for detail see the LICENCE text file. *
|
|
# * *
|
|
# * This program is distributed in the hope that it will be useful, *
|
|
# * but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
|
# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
|
# * GNU Library General Public License for more details. *
|
|
# * *
|
|
# * You should have received a copy of the GNU Library General Public *
|
|
# * License along with this program; if not, write to the Free Software *
|
|
# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
|
|
# * USA *
|
|
# * *
|
|
# ***************************************************************************
|
|
|
|
"""Initialization of the Arch workbench (graphical interface)."""
|
|
|
|
import os
|
|
import FreeCAD
|
|
import FreeCADGui
|
|
|
|
|
|
class ArchWorkbench(FreeCADGui.Workbench):
|
|
"""The Arch workbench definition."""
|
|
|
|
def __init__(self):
|
|
def QT_TRANSLATE_NOOP(context, text):
|
|
return text
|
|
|
|
__dirname__ = os.path.join(FreeCAD.getResourceDir(), "Mod", "Arch")
|
|
_tooltip = ("The Arch workbench is used to model "
|
|
"architectural components, and entire buildings")
|
|
self.__class__.Icon = os.path.join(__dirname__,
|
|
"Resources", "icons",
|
|
"ArchWorkbench.svg")
|
|
self.__class__.MenuText = QT_TRANSLATE_NOOP("Arch", "Arch")
|
|
self.__class__.ToolTip = QT_TRANSLATE_NOOP("Arch", _tooltip)
|
|
|
|
def Initialize(self):
|
|
"""When the workbench is first loaded."""
|
|
|
|
def QT_TRANSLATE_NOOP(context, text):
|
|
return text
|
|
|
|
import Draft_rc
|
|
import DraftTools
|
|
import DraftGui
|
|
import Arch_rc
|
|
import Arch
|
|
|
|
from ArchStructure import _ArchStructureGroupCommand
|
|
from ArchAxis import _ArchAxisGroupCommand
|
|
from ArchPanel import CommandPanelGroup
|
|
from ArchMaterial import _ArchMaterialToolsCommand
|
|
from ArchPipe import _ArchPipeGroupCommand
|
|
|
|
stru_group = _ArchStructureGroupCommand
|
|
axis_group = _ArchAxisGroupCommand
|
|
pan_group = CommandPanelGroup
|
|
mat_group = _ArchMaterialToolsCommand
|
|
pipe_group = _ArchPipeGroupCommand
|
|
|
|
# Set up command lists
|
|
self.archtools = ["Arch_Wall",
|
|
([QT_TRANSLATE_NOOP("Arch", "Structure tools")],
|
|
list(stru_group.GetCommands(stru_group))), # tuple len=2: submenu
|
|
("Arch_StructureTools", ), # tuple len=1: toolbar flyout
|
|
"Arch_Rebar_Submenu", # will be replaced or removed
|
|
"Arch_Rebar", # may be replaced
|
|
"Arch_CurtainWall",
|
|
"Arch_BuildingPart",
|
|
"Arch_Project",
|
|
"Arch_Site",
|
|
"Arch_Building",
|
|
"Arch_Floor",
|
|
"Arch_Reference",
|
|
"Arch_Window",
|
|
"Arch_Roof",
|
|
([QT_TRANSLATE_NOOP("Arch", "Axis tools")],
|
|
list(axis_group.GetCommands(axis_group))),
|
|
("Arch_AxisTools", ),
|
|
"Arch_SectionPlane",
|
|
"Arch_Space",
|
|
"Arch_Stairs",
|
|
([QT_TRANSLATE_NOOP("Arch", "Panel tools")],
|
|
list(pan_group.GetCommands(pan_group))),
|
|
("Arch_PanelTools", ),
|
|
"Arch_Equipment",
|
|
"Arch_Frame",
|
|
"Arch_Fence",
|
|
"Arch_Truss",
|
|
"Arch_Profile",
|
|
([QT_TRANSLATE_NOOP("Arch", "Material tools")],
|
|
list(mat_group.GetCommands(mat_group))),
|
|
("Arch_MaterialTools", ),
|
|
"Arch_Schedule",
|
|
([QT_TRANSLATE_NOOP("Arch", "Pipe tools")],
|
|
list(pipe_group.GetCommands(pipe_group))),
|
|
("Arch_PipeTools", ),
|
|
"Arch_CutPlane",
|
|
"Arch_CutLine",
|
|
"Arch_Add",
|
|
"Arch_Remove",
|
|
"Arch_Survey"]
|
|
|
|
self.utilities = ["Arch_Component",
|
|
"Arch_CloneComponent",
|
|
"Arch_SplitMesh",
|
|
"Arch_MeshToShape",
|
|
"Arch_SelectNonSolidMeshes",
|
|
"Arch_RemoveShape",
|
|
"Arch_CloseHoles",
|
|
"Arch_MergeWalls",
|
|
"Arch_Check",
|
|
"Arch_ToggleIfcBrepFlag",
|
|
"Arch_3Views",
|
|
"Arch_IfcSpreadsheet",
|
|
"Arch_ToggleSubs"]
|
|
|
|
# Add the rebar tools from the Reinforcement addon, if available
|
|
try:
|
|
import RebarTools
|
|
except Exception:
|
|
del self.archtools[3] # remove "Arch_Rebar_Submenu"
|
|
pass
|
|
else:
|
|
class RebarGroupCommand:
|
|
def GetCommands(self):
|
|
return tuple(RebarTools.RebarCommands + ["Arch_Rebar"])
|
|
|
|
def GetResources(self):
|
|
_tooltip = ("Create various types of rebars, "
|
|
"including U-shaped, L-shaped, and stirrup")
|
|
return {'MenuText': QT_TRANSLATE_NOOP("Arch", 'Rebar tools'),
|
|
'ToolTip': QT_TRANSLATE_NOOP("Arch", _tooltip)}
|
|
|
|
def IsActive(self):
|
|
return not FreeCAD.ActiveDocument is None
|
|
FreeCADGui.addCommand('Arch_RebarTools', RebarGroupCommand())
|
|
self.archtools[3] = ([QT_TRANSLATE_NOOP("Arch", "Rebar tools")],
|
|
RebarTools.RebarCommands + ["Arch_Rebar"])
|
|
self.archtools[4] = ("Arch_RebarTools", )
|
|
|
|
# Set up Draft command lists
|
|
import draftutils.init_tools as it
|
|
self.draft_drawing_commands = it.get_draft_drawing_commands()
|
|
self.draft_annotation_commands = it.get_draft_annotation_commands()
|
|
self.draft_modification_commands = it.get_draft_modification_commands()
|
|
self.draft_utility_commands = it.get_draft_utility_commands_menu()
|
|
self.draft_context_commands = it.get_draft_context_commands()
|
|
|
|
# Set up toolbars
|
|
it.init_toolbar(self,
|
|
QT_TRANSLATE_NOOP("Workbench", "Arch tools"),
|
|
self.archtools)
|
|
it.init_toolbar(self,
|
|
QT_TRANSLATE_NOOP("Draft", "Draft creation tools"),
|
|
self.draft_drawing_commands)
|
|
it.init_toolbar(self,
|
|
QT_TRANSLATE_NOOP("Draft", "Draft annotation tools"),
|
|
self.draft_annotation_commands)
|
|
it.init_toolbar(self,
|
|
QT_TRANSLATE_NOOP("Draft", "Draft modification tools"),
|
|
self.draft_modification_commands)
|
|
|
|
# Set up menus
|
|
it.init_menu(self,
|
|
[QT_TRANSLATE_NOOP("Arch", "&Arch"),
|
|
QT_TRANSLATE_NOOP("Arch", "Utilities")],
|
|
self.utilities)
|
|
it.init_menu(self,
|
|
[QT_TRANSLATE_NOOP("Arch", "&Arch")],
|
|
self.archtools)
|
|
it.init_menu(self,
|
|
[QT_TRANSLATE_NOOP("Arch", "&Draft"),
|
|
QT_TRANSLATE_NOOP("Arch", "Creation")],
|
|
self.draft_drawing_commands)
|
|
it.init_menu(self,
|
|
[QT_TRANSLATE_NOOP("Arch", "&Draft"),
|
|
QT_TRANSLATE_NOOP("Arch", "Annotation")],
|
|
self.draft_annotation_commands)
|
|
it.init_menu(self,
|
|
[QT_TRANSLATE_NOOP("Arch", "&Draft"),
|
|
QT_TRANSLATE_NOOP("Arch", "Modification")],
|
|
self.draft_modification_commands)
|
|
it.init_menu(self,
|
|
[QT_TRANSLATE_NOOP("Arch", "&Draft"),
|
|
QT_TRANSLATE_NOOP("Arch", "Utilities")],
|
|
self.draft_utility_commands)
|
|
|
|
FreeCADGui.addIconPath(":/icons")
|
|
FreeCADGui.addLanguagePath(":/translations")
|
|
|
|
# Set up preferences pages
|
|
if hasattr(FreeCADGui, "draftToolBar"):
|
|
if not hasattr(FreeCADGui.draftToolBar, "loadedArchPreferences"):
|
|
FreeCADGui.addPreferencePage(":/ui/preferences-arch.ui", QT_TRANSLATE_NOOP("Arch", "Arch"))
|
|
FreeCADGui.addPreferencePage(":/ui/preferences-archdefaults.ui", QT_TRANSLATE_NOOP("Arch", "Arch"))
|
|
FreeCADGui.draftToolBar.loadedArchPreferences = True
|
|
if not hasattr(FreeCADGui.draftToolBar, "loadedPreferences"):
|
|
FreeCADGui.addPreferencePage(":/ui/preferences-draft.ui", QT_TRANSLATE_NOOP("Draft", "Draft"))
|
|
FreeCADGui.addPreferencePage(":/ui/preferences-draftsnap.ui", QT_TRANSLATE_NOOP("Draft", "Draft"))
|
|
FreeCADGui.addPreferencePage(":/ui/preferences-draftvisual.ui", QT_TRANSLATE_NOOP("Draft", "Draft"))
|
|
FreeCADGui.addPreferencePage(":/ui/preferences-drafttexts.ui", QT_TRANSLATE_NOOP("Draft", "Draft"))
|
|
FreeCADGui.draftToolBar.loadedPreferences = True
|
|
|
|
FreeCAD.Console.PrintLog('Loading Arch workbench, done.\n')
|
|
|
|
def Activated(self):
|
|
"""When entering the workbench."""
|
|
if hasattr(FreeCADGui, "draftToolBar"):
|
|
FreeCADGui.draftToolBar.Activated()
|
|
if hasattr(FreeCADGui, "Snapper"):
|
|
FreeCADGui.Snapper.show()
|
|
FreeCAD.Console.PrintLog("Arch workbench activated.\n")
|
|
|
|
def Deactivated(self):
|
|
"""When leaving the workbench."""
|
|
if hasattr(FreeCADGui, "draftToolBar"):
|
|
FreeCADGui.draftToolBar.Deactivated()
|
|
if hasattr(FreeCADGui, "Snapper"):
|
|
FreeCADGui.Snapper.hide()
|
|
FreeCAD.Console.PrintLog("Arch workbench deactivated.\n")
|
|
|
|
def ContextMenu(self, recipient):
|
|
"""Define an optional custom context menu."""
|
|
self.appendContextMenu("Utilities", self.draft_context_commands)
|
|
|
|
def GetClassName(self):
|
|
"""Type of workbench."""
|
|
return "Gui::PythonWorkbench"
|
|
|
|
|
|
FreeCADGui.addWorkbench(ArchWorkbench)
|
|
|
|
# Preference pages for importing and exporting various file formats
|
|
# are independent of the loading of the workbench and can be loaded at startup
|
|
import Arch_rc
|
|
from PySide.QtCore import QT_TRANSLATE_NOOP
|
|
FreeCADGui.addPreferencePage(":/ui/preferences-ifc.ui", QT_TRANSLATE_NOOP("Draft", "Import-Export"))
|
|
FreeCADGui.addPreferencePage(":/ui/preferences-ifc-export.ui", QT_TRANSLATE_NOOP("Draft", "Import-Export"))
|
|
FreeCADGui.addPreferencePage(":/ui/preferences-dae.ui", QT_TRANSLATE_NOOP("Draft", "Import-Export"))
|
|
|
|
FreeCAD.__unit_test__ += ["TestArch"]
|