FreeCAD

Форк
0
/
AppPartGui.cpp 
252 строки · 11.0 Кб
1
/***************************************************************************
2
 *   Copyright (c) 2002 Juergen Riegel <juergen.riegel@web.de>             *
3
 *                                                                         *
4
 *   This file is part of the FreeCAD CAx development system.              *
5
 *                                                                         *
6
 *   This program is free software; you can redistribute it and/or modify  *
7
 *   it under the terms of the GNU Lesser General Public License (LGPL)    *
8
 *   as published by the Free Software Foundation; either version 2 of     *
9
 *   the License, or (at your option) any later version.                   *
10
 *   for detail see the LICENCE text file.                                 *
11
 *                                                                         *
12
 *   FreeCAD is distributed in the hope that it will be useful,            *
13
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
14
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
15
 *   GNU Lesser General Public License for more details.                   *
16
 *                                                                         *
17
 *   You should have received a copy of the GNU Library General Public     *
18
 *   License along with FreeCAD; if not, write to the Free Software        *
19
 *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  *
20
 *   USA                                                                   *
21
 *                                                                         *
22
 ***************************************************************************/
23

24

25
#include "PreCompiled.h"
26
#ifndef _PreComp_
27
#endif
28

29
#include <Base/Console.h>
30
#include <Base/Interpreter.h>
31
#include <Base/PyObjectBase.h>
32
#include <Gui/Application.h>
33
#include <Gui/BitmapFactory.h>
34
#include <Gui/DlgPreferencesImp.h>
35
#include <Gui/WidgetFactory.h>
36
#include <Gui/Language/Translator.h>
37

38
#include "AttacherTexts.h"
39
#include "PropertyEnumAttacherItem.h"
40
#include "DlgSettings3DViewPartImp.h"
41
#include "DlgSettingsGeneral.h"
42
#include "DlgSettingsObjectColor.h"
43
#include "SoBrepEdgeSet.h"
44
#include "SoBrepFaceSet.h"
45
#include "SoBrepPointSet.h"
46
#include "SoFCShapeObject.h"
47
#include "ViewProvider.h"
48
#include "ViewProvider2DObject.h"
49
#include "ViewProviderAttachExtension.h"
50
#include "ViewProviderGridExtension.h"
51
#include "ViewProviderBoolean.h"
52
#include "ViewProviderBox.h"
53
#include "ViewProviderCircleParametric.h"
54
#include "ViewProviderCompound.h"
55
#include "ViewProviderConeParametric.h"
56
#include "ViewProviderCurveNet.h"
57
#include "ViewProviderCylinderParametric.h"
58
#include "ViewProviderEllipseParametric.h"
59
#include "ViewProviderExt.h"
60
#include "ViewProviderExtrusion.h"
61
#include "ViewProviderScale.h"
62
#include "ViewProviderHelixParametric.h"
63
#include "ViewProviderPrimitive.h"
64
#include "ViewProviderPython.h"
65
#include "ViewProviderImport.h"
66
#include "ViewProviderLineParametric.h"
67
#include "ViewProviderMirror.h"
68
#include "ViewProviderPlaneParametric.h"
69
#include "ViewProviderPointParametric.h"
70
#include "ViewProviderPrism.h"
71
#include "ViewProviderProjectOnSurface.h"
72
#include "ViewProviderRegularPolygon.h"
73
#include "ViewProviderRuledSurface.h"
74
#include "ViewProviderSphereParametric.h"
75
#include "ViewProviderSpline.h"
76
#include "ViewProviderTorusParametric.h"
77
#include "Workbench.h"
78
#include "WorkbenchManipulator.h"
79

80

81
// use a different name to CreateCommand()
82
void CreatePartCommands();
83
void CreateSimplePartCommands();
84
void CreateParamPartCommands();
85
void CreatePartSelectCommands();
86

87
void loadPartResource()
88
{
89
    // add resources and reloads the translators
90
    Q_INIT_RESOURCE(Part);
91
    Q_INIT_RESOURCE(Part_translation);
92
    Gui::Translator::instance()->refresh();
93
}
94

95
namespace PartGui
96
{
97
class Module: public Py::ExtensionModule<Module>
98
{
99
public:
100
    Module()
101
        : Py::ExtensionModule<Module>("PartGui")
102
    {
103
        initialize("This module is the PartGui module.");  // register with Python
104
    }
105

106
private:
107
};
108

109
PyObject* initModule()
110
{
111
    return Base::Interpreter().addModule(new Module);
112
}
113

114
}  // namespace PartGui
115

116
PyMOD_INIT_FUNC(PartGui)
117
{
118
    if (!Gui::Application::Instance) {
119
        PyErr_SetString(PyExc_ImportError, "Cannot load Gui module in console application.");
120
        PyMOD_Return(nullptr);
121
    }
122

123
    // load needed modules
124
    try {
125
        Base::Interpreter().runString("import Part");
126
        Base::Interpreter().runString("import MatGui");
127
    }
128
    catch (const Base::Exception& e) {
129
        PyErr_SetString(PyExc_ImportError, e.what());
130
        PyMOD_Return(nullptr);
131
    }
132

133
    PyObject* partGuiModule = PartGui::initModule();
134

135
    Base::Console().Log("Loading GUI of Part module... done\n");
136

137
    Gui::BitmapFactory().addPath(QString::fromLatin1(":/icons/booleans"));
138
    Gui::BitmapFactory().addPath(QString::fromLatin1(":/icons/create"));
139
    Gui::BitmapFactory().addPath(QString::fromLatin1(":/icons/parametric"));
140
    Gui::BitmapFactory().addPath(QString::fromLatin1(":/icons/tools"));
141

142
    // clang-format off
143
    static struct PyModuleDef pAttachEngineTextsModuleDef = {
144
        PyModuleDef_HEAD_INIT,
145
        "AttachEngineResources",
146
        "AttachEngineResources",
147
        -1,
148
        AttacherGui::AttacherGuiPy::Methods,
149
        nullptr, nullptr, nullptr, nullptr
150
    };
151
    // clang-format on
152

153
    PyObject* pAttachEngineTextsModule = PyModule_Create(&pAttachEngineTextsModuleDef);
154

155
    Py_INCREF(pAttachEngineTextsModule);
156
    PyModule_AddObject(partGuiModule, "AttachEngineResources", pAttachEngineTextsModule);
157

158
    // clang-format off
159
    PartGui::PropertyEnumAttacherItem               ::init();
160
    PartGui::SoBrepFaceSet                          ::initClass();
161
    PartGui::SoBrepEdgeSet                          ::initClass();
162
    PartGui::SoBrepPointSet                         ::initClass();
163
    PartGui::SoFCControlPoints                      ::initClass();
164
    PartGui::ViewProviderAttachExtension            ::init();
165
    PartGui::ViewProviderAttachExtensionPython      ::init();
166
    PartGui::ViewProviderGridExtension              ::init();
167
    PartGui::ViewProviderGridExtensionPython        ::init();
168
    PartGui::ViewProviderSplineExtension            ::init();
169
    PartGui::ViewProviderSplineExtensionPython      ::init();
170
    PartGui::ViewProviderPartExt                    ::init();
171
    PartGui::ViewProviderPart                       ::init();
172
    PartGui::ViewProviderPrimitive                  ::init();
173
    PartGui::ViewProviderEllipsoid                  ::init();
174
    PartGui::ViewProviderPython                     ::init();
175
    PartGui::ViewProviderBox                        ::init();
176
    PartGui::ViewProviderPrism                      ::init();
177
    PartGui::ViewProviderRegularPolygon             ::init();
178
    PartGui::ViewProviderWedge                      ::init();
179
    PartGui::ViewProviderImport                     ::init();
180
    PartGui::ViewProviderCurveNet                   ::init();
181
    PartGui::ViewProviderExtrusion                  ::init();
182
    PartGui::ViewProviderScale                      ::init();
183
    PartGui::ViewProvider2DObject                   ::init();
184
    PartGui::ViewProvider2DObjectPython             ::init();
185
    PartGui::ViewProvider2DObjectGrid               ::init();
186
    PartGui::ViewProviderMirror                     ::init();
187
    PartGui::ViewProviderFillet                     ::init();
188
    PartGui::ViewProviderChamfer                    ::init();
189
    PartGui::ViewProviderRevolution                 ::init();
190
    PartGui::ViewProviderLoft                       ::init();
191
    PartGui::ViewProviderSweep                      ::init();
192
    PartGui::ViewProviderOffset                     ::init();
193
    PartGui::ViewProviderOffset2D                   ::init();
194
    PartGui::ViewProviderThickness                  ::init();
195
    PartGui::ViewProviderRefine                     ::init();
196
    PartGui::ViewProviderReverse                    ::init();
197
    PartGui::ViewProviderCustom                     ::init();
198
    PartGui::ViewProviderCustomPython               ::init();
199
    PartGui::ViewProviderBoolean                    ::init();
200
    PartGui::ViewProviderMultiFuse                  ::init();
201
    PartGui::ViewProviderMultiCommon                ::init();
202
    PartGui::ViewProviderCompound                   ::init();
203
    PartGui::ViewProviderSpline                     ::init();
204
    PartGui::ViewProviderCircleParametric           ::init();
205
    PartGui::ViewProviderLineParametric             ::init();
206
    PartGui::ViewProviderPointParametric            ::init();
207
    PartGui::ViewProviderEllipseParametric          ::init();
208
    PartGui::ViewProviderHelixParametric            ::init();
209
    PartGui::ViewProviderSpiralParametric           ::init();
210
    PartGui::ViewProviderPlaneParametric            ::init();
211
    PartGui::ViewProviderSphereParametric           ::init();
212
    PartGui::ViewProviderCylinderParametric         ::init();
213
    PartGui::ViewProviderConeParametric             ::init();
214
    PartGui::ViewProviderTorusParametric            ::init();
215
    PartGui::ViewProviderRuledSurface               ::init();
216
    PartGui::ViewProviderFace                       ::init();
217
    PartGui::ViewProviderProjectOnSurface           ::init();
218

219
    PartGui::Workbench                              ::init();
220
    auto manip = std::make_shared<PartGui::WorkbenchManipulator>();
221
    Gui::WorkbenchManipulator::installManipulator(manip);
222

223
    // instantiating the commands
224
    CreatePartCommands();
225
    CreateSimplePartCommands();
226
    CreateParamPartCommands();
227
    CreatePartSelectCommands();
228
    try {
229
        const char* cmd = "__import__('AttachmentEditor.Commands').Commands";
230
        Py::Object ae = Base::Interpreter().runStringObject(cmd);
231
        Py::Module(partGuiModule).setAttr(std::string("AttachmentEditor"), ae);
232
    }
233
    catch (Base::PyException& err) {
234
        err.ReportException();
235
    }
236

237
    // register preferences pages
238
    Gui::Dialog::DlgPreferencesImp::setGroupData("Part/Part Design", "Part design", QObject::tr("Part and Part Design workbench"));
239
    (void)new Gui::PrefPageProducer<PartGui::DlgSettingsGeneral>(QT_TRANSLATE_NOOP("QObject", "Part/Part Design"));
240
    (void)new Gui::PrefPageProducer<PartGui::DlgSettings3DViewPart>(QT_TRANSLATE_NOOP("QObject", "Part/Part Design"));
241
    (void)new Gui::PrefPageProducer<PartGui::DlgSettingsObjectColor>(QT_TRANSLATE_NOOP("QObject", "Part/Part Design"));
242
    (void)new Gui::PrefPageProducer<PartGui::DlgImportExportIges>(QT_TRANSLATE_NOOP("QObject", "Import-Export"));
243
    (void)new Gui::PrefPageProducer<PartGui::DlgImportExportStep>(QT_TRANSLATE_NOOP("QObject", "Import-Export"));
244
    Gui::ViewProviderBuilder::add(Part::PropertyPartShape::getClassTypeId(),
245
                                  PartGui::ViewProviderPart::getClassTypeId());
246
    // clang-format on
247

248
    // add resources and reloads the translators
249
    loadPartResource();
250

251
    PyMOD_Return(partGuiModule);
252
}
253

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.