190 lines
9.2 KiB
Python
190 lines
9.2 KiB
Python
#***************************************************************************
|
|
#* *
|
|
#* Copyright (c) 2009 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 *
|
|
#* *
|
|
#***************************************************************************
|
|
|
|
__title__="FreeCAD Draft Workbench - Init file"
|
|
__author__ = "Yorik van Havre <yorik@uncreated.net>"
|
|
__url__ = ["http://www.freecadweb.org"]
|
|
|
|
class DraftWorkbench (Workbench):
|
|
"the Draft Workbench"
|
|
Icon = """
|
|
/* XPM */
|
|
static char * draft_xpm[] = {
|
|
"16 16 17 1",
|
|
" c None",
|
|
". c #5F4A1C",
|
|
"+ c #5A4E36",
|
|
"@ c #8A4D00",
|
|
"# c #835A04",
|
|
"$ c #7E711F",
|
|
"% c #847954",
|
|
"& c #C27400",
|
|
"* c #817D74",
|
|
"= c #E79300",
|
|
"- c #BFAB0C",
|
|
"; c #ADA791",
|
|
"> c #B3AE87",
|
|
", c #B0B2AE",
|
|
"' c #ECD200",
|
|
") c #D6D8D5",
|
|
"! c #FCFEFA",
|
|
" ,!!)!!!!!!!!!",
|
|
" ,!!>;!!!!!!!!",
|
|
" ,!!>-,!!!!!!!",
|
|
" ,!!>'$)!!!!!!",
|
|
" ,!!>-'%!!!!!!",
|
|
" ,!!>-$-;!!!!!",
|
|
" ,!!>-*-$)!!!!",
|
|
" @&+!!>-*;-%!!!!",
|
|
"@&=+)!;'-''-*!!!",
|
|
".@@.;;%%....+;;!",
|
|
".&&===========$,",
|
|
".&&=====&&####.,",
|
|
".&&.++***,,)))!!",
|
|
"#==+)!!!!!!!!!!!",
|
|
" ##+)!!!!!!!!!!!",
|
|
" *,,,,,,,,,,,,"};"""
|
|
|
|
MenuText = "Draft"
|
|
ToolTip = "The Draft module is used for basic 2D CAD Drafting"
|
|
|
|
def Initialize(self):
|
|
def QT_TRANSLATE_NOOP(scope, text):
|
|
return text
|
|
|
|
# run self-tests
|
|
depsOK = False
|
|
try:
|
|
from pivy import coin
|
|
if FreeCADGui.getSoDBVersion() != coin.SoDB.getVersion():
|
|
raise AssertionError("FreeCAD and Pivy use different versions of Coin. This will lead to unexpected behaviour.")
|
|
except AssertionError:
|
|
FreeCAD.Console.PrintWarning("Error: FreeCAD and Pivy use different versions of Coin. This will lead to unexpected behaviour.\n")
|
|
except ImportError:
|
|
FreeCAD.Console.PrintWarning("Error: Pivy not found, Draft workbench will be disabled.\n")
|
|
except:
|
|
FreeCAD.Console.PrintWarning("Error: Unknown error while trying to load Pivy\n")
|
|
else:
|
|
try:
|
|
import PySide
|
|
except ImportError:
|
|
FreeCAD.Console.PrintWarning("Error: PySide not found, Draft workbench will be disabled.\n")
|
|
else:
|
|
depsOK = True
|
|
if not depsOK:
|
|
return
|
|
|
|
# import Draft tools, icons and macros menu
|
|
try:
|
|
import os,macros,Draft_rc,DraftTools, DraftGui
|
|
from DraftTools import translate
|
|
FreeCADGui.addLanguagePath(":/translations")
|
|
FreeCADGui.addIconPath(":/icons")
|
|
self.appendMenu(["&Macro",translate("draft","Installed Macros")],macros.macrosList)
|
|
except Exception as inst:
|
|
print inst
|
|
FreeCAD.Console.PrintError("Error: Initializing one or more of the Draft modules failed, Draft will not work as expected.\n")
|
|
|
|
# setup menus
|
|
self.cmdList = ["Draft_Line","Draft_Wire","Draft_Circle","Draft_Arc","Draft_Ellipse",
|
|
"Draft_Polygon","Draft_Rectangle", "Draft_Text",
|
|
"Draft_Dimension", "Draft_BSpline","Draft_Point",
|
|
"Draft_ShapeString","Draft_Facebinder","Draft_BezCurve"]
|
|
self.modList = ["Draft_Move","Draft_Rotate","Draft_Offset",
|
|
"Draft_Trimex", "Draft_Upgrade", "Draft_Downgrade", "Draft_Scale",
|
|
"Draft_Drawing","Draft_Edit","Draft_WireToBSpline","Draft_AddPoint",
|
|
"Draft_DelPoint","Draft_Shape2DView","Draft_Draft2Sketch","Draft_Array",
|
|
"Draft_PathArray","Draft_Clone"]
|
|
self.treecmdList = ["Draft_ApplyStyle","Draft_ToggleDisplayMode","Draft_AddToGroup",
|
|
"Draft_SelectGroup","Draft_SelectPlane",
|
|
"Draft_ShowSnapBar","Draft_ToggleGrid"]
|
|
self.lineList = ["Draft_UndoLine","Draft_FinishLine","Draft_CloseLine"]
|
|
self.utils = ["Draft_Heal","Draft_FlipDimension",
|
|
"Draft_ToggleConstructionMode","Draft_ToggleContinueMode"]
|
|
self.snapList = ['Draft_Snap_Lock','Draft_Snap_Midpoint','Draft_Snap_Perpendicular',
|
|
'Draft_Snap_Grid','Draft_Snap_Intersection','Draft_Snap_Parallel',
|
|
'Draft_Snap_Endpoint','Draft_Snap_Angle','Draft_Snap_Center',
|
|
'Draft_Snap_Extension','Draft_Snap_Near','Draft_Snap_Ortho',
|
|
'Draft_Snap_Dimensions','Draft_Snap_WorkingPlane']
|
|
self.appendToolbar(QT_TRANSLATE_NOOP("Workbench","Draft creation tools"),self.cmdList)
|
|
self.appendToolbar(QT_TRANSLATE_NOOP("Workbench","Draft modification tools"),self.modList)
|
|
self.appendMenu(translate("draft","&Draft"),self.cmdList+self.modList)
|
|
self.appendMenu([translate("draft","&Draft"),translate("draft","Utilities")],self.utils+self.treecmdList)
|
|
self.appendMenu([translate("draft","&Draft"),translate("draft","Wire tools")],self.lineList)
|
|
self.appendMenu([translate("draft","&Draft"),translate("draft","Snapping")],self.snapList)
|
|
if hasattr(FreeCADGui,"draftToolBar"):
|
|
if not hasattr(FreeCADGui.draftToolBar,"loadedPreferences"):
|
|
FreeCADGui.addPreferencePage(":/ui/userprefs-base.ui","Draft")
|
|
FreeCADGui.addPreferencePage(":/ui/userprefs-snap.ui","Draft")
|
|
FreeCADGui.addPreferencePage(":/ui/userprefs-visual.ui","Draft")
|
|
FreeCADGui.addPreferencePage(":/ui/userprefs-import1.ui","Draft")
|
|
FreeCADGui.addPreferencePage(":/ui/userprefs-import2.ui","Draft")
|
|
FreeCADGui.draftToolBar.loadedPreferences = True
|
|
Log ('Loading Draft module...done\n')
|
|
|
|
def Activated(self):
|
|
if hasattr(FreeCADGui,"draftToolBar"):
|
|
FreeCADGui.draftToolBar.Activated()
|
|
if hasattr(FreeCADGui,"Snapper"):
|
|
FreeCADGui.Snapper.show()
|
|
Msg("Draft workbench activated\n")
|
|
|
|
def Deactivated(self):
|
|
if hasattr(FreeCADGui,"draftToolBar"):
|
|
FreeCADGui.draftToolBar.Deactivated()
|
|
if hasattr(FreeCADGui,"Snapper"):
|
|
FreeCADGui.Snapper.hide()
|
|
Msg("Draft workbench deactivated\n")
|
|
|
|
def ContextMenu(self, recipient):
|
|
if (recipient == "View"):
|
|
if (FreeCAD.activeDraftCommand == None):
|
|
if (FreeCADGui.Selection.getSelection()):
|
|
self.appendContextMenu("Draft",self.cmdList+self.modList)
|
|
self.appendContextMenu("Utilities",self.treecmdList)
|
|
else:
|
|
self.appendContextMenu("Draft",self.cmdList)
|
|
else:
|
|
if (FreeCAD.activeDraftCommand.featureName == "Line"):
|
|
self.appendContextMenu("",self.lineList)
|
|
else:
|
|
if (FreeCADGui.Selection.getSelection()):
|
|
self.appendContextMenu("Utilities",self.treecmdList)
|
|
|
|
def GetClassName(self):
|
|
return "Gui::PythonWorkbench"
|
|
|
|
# ability to turn off the Draft workbench (since it is also all included in Arch)
|
|
if not FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/Draft").GetBool("hideDraftWorkbench"):
|
|
FreeCADGui.addWorkbench(DraftWorkbench)
|
|
|
|
# add Import/Export types
|
|
App.addImportType("Autodesk DXF (*.dxf)","importDXF")
|
|
App.addImportType("SVG as geometry (*.svg)","importSVG")
|
|
App.addImportType("Open CAD Format (*.oca *.gcad)","importOCA")
|
|
App.addImportType("Common airfoil data (*.dat)","importAirfoilDAT")
|
|
App.addExportType("Autodesk DXF (*.dxf)","importDXF")
|
|
App.addExportType("Flattened SVG (*.svg)","importSVG")
|
|
App.addExportType("Open CAD Format (*.oca)","importOCA")
|
|
App.addImportType("Autodesk DWG (*.dwg)","importDWG")
|
|
App.addExportType("Autodesk DWG (*.dwg)","importDWG")
|