-
Notifications
You must be signed in to change notification settings - Fork 9
/
lattice2Common.py
157 lines (132 loc) · 5.78 KB
/
lattice2Common.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
#***************************************************************************
#* *
#* Copyright (c) 2015 - Victor Titov (DeepSOIC) *
#* <[email protected]> *
#* *
#* 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 *
#* *
#***************************************************************************
import FreeCAD, Part
from lattice2Executer import CancelError
if FreeCAD.GuiUp:
import FreeCADGui
from PySide import QtCore, QtGui
def translate(context, text, disambig):
#Lattice2 is not translatable, sorry...
return text
def getParamRefine():
return FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/Part/Boolean").GetBool("RefineModel")
def getParamPDRefine():
return FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/PartDesign").GetBool("RefineModel")
def getIconPath(icon_dot_svg):
return ":/icons/" + icon_dot_svg
class SelectionError(FreeCAD.Base.FreeCADError):
'''Error that isused inside Gui command code'''
def __init__(self, title, message):
self.message = message
self.args = (message,)
self.title = title
def msgError(err = None, message = u'{errmsg}'):
import sys
if err is None:
err = sys.exc_info()[1]
if type(err) is CancelError: return # doesn't work! Why!
if hasattr(err, "isCancelError") and err.isCancelError: return #workaround
# can we get a traceback?
b_tb = err is sys.exc_info()[1]
if b_tb:
import traceback
tb = traceback.format_exc()
import FreeCAD as App
App.Console.PrintError(tb+'\n')
#make messagebox object
from PySide import QtGui
mb = QtGui.QMessageBox()
mb.setIcon(mb.Icon.Warning)
#fill in message
errmsg = ''
if hasattr(err,'message'):
if isinstance(err.message, dict):
errmsg = err.message['swhat']
elif len(err.message) > 0:
errmsg = err.message
else:
errmsg = str(err)
else:
errmsg = str(err)
mb.setText(message.format(errmsg= errmsg, err= err))
# fill in title
if hasattr(err, "title"):
mb.setWindowTitle(err.title)
else:
mb.setWindowTitle("Error")
#add traceback button
if b_tb:
btnClose = mb.addButton(QtGui.QMessageBox.StandardButton.Close)
btnCopy = mb.addButton("Copy traceback", QtGui.QMessageBox.ButtonRole.ActionRole)
mb.setDefaultButton(btnClose)
mb.exec_()
if b_tb:
if mb.clickedButton() is btnCopy:
cb = QtGui.QClipboard()
cb.setText(tb)
def infoMessage(title, message):
mb = QtGui.QMessageBox()
mb.setIcon(mb.Icon.Information)
mb.setText(message)
mb.setWindowTitle(title)
mb.exec_()
def deselect(sel):
'''deselect(sel): remove objects in sel from selection'''
for selobj in sel:
FreeCADGui.Selection.removeSelection(selobj.Object)
# OCC's Precision::Confusion; should have taken this from FreeCAD but haven't found; unlikely to ever change.
DistConfusion = 1e-7
ParaConfusion = 1e-8
if FreeCAD.GuiUp:
import lattice2_rc
def screen(feature):
"""screen(feature): protects link properties from being overwritten.
This is to be used as workaround for a bug where modifying an object accessed through
a link property of another object results in the latter being touched.
returns: feature"""
if not hasattr(feature,"isDerivedFrom"):
return feature
if not feature.isDerivedFrom("App::DocumentObject"):
return feature
if feature.Document is None:
return feature
feature = getattr(feature.Document, feature.Name)
return feature
def activeBody():
if FreeCAD.ActiveDocument is None: return None
if not hasattr(FreeCADGui.ActiveDocument.ActiveView, 'getActiveObject'): #prevent errors in 0.16
return None
return FreeCADGui.ActiveDocument.ActiveView.getActiveObject("pdbody")
def bodyOf(feature):
body = feature.getParentGeoFeatureGroup()
if body.isDerivedFrom('PartDesign::Body'):
return body
else:
return None
# Older FreeCAD has Support, newer has AttachmentSupport: https://github.com/FreeCAD/FreeCAD/issues/12894
def getAttachmentSupport(documentObject):
if hasattr(documentObject, 'AttachmentSupport'):
return documentObject.AttachmentSupport
elif hasattr(documentObject, 'Support'):
return documentObject.Support
raise AttributeError('No support property found')