Eclipse SUMO - Simulation of Urban MObility
Loading...
Searching...
No Matches
GNENetDiffTool.cpp
Go to the documentation of this file.
1/****************************************************************************/
2// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3// Copyright (C) 2001-2026 German Aerospace Center (DLR) and others.
4// This program and the accompanying materials are made available under the
5// terms of the Eclipse Public License 2.0 which is available at
6// https://www.eclipse.org/legal/epl-2.0/
7// This Source Code may also be made available under the following Secondary
8// Licenses when the conditions for such availability set forth in the Eclipse
9// Public License 2.0 are satisfied: GNU General Public License, version 2
10// or later which is available at
11// https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
12// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
13/****************************************************************************/
18// Netdiff tool used in netedit
19/****************************************************************************/
20
22#include <netedit/GNEUndoList.h>
23#include <netedit/GNEViewNet.h>
28#include <utils/xml/XMLSubSys.h>
29
30#include "GNENetDiffTool.h"
31
32// ===========================================================================
33// member method definitions
34// ===========================================================================
35
36GNENetDiffTool::GNENetDiffTool(GNEApplicationWindow* applicationWindow, const std::string& toolPath, FXMenuPane* menu) :
37 GNEPythonTool(applicationWindow, toolPath, "", menu) {
38 // fill options
41}
42
43
45
46
47void
50 // obtain curren network folder
51 const auto networkPath = OptionsCont::getOptions().getString("sumo-net-file");
52 if (networkPath.empty()) {
53 myPythonToolsOptions.set("outprefix", "");
54 } else {
55 myPythonToolsOptions.set("outprefix", FileHelpers::getFilePath(networkPath) + "diff");
56 }
57}
58
59
60void
62 // first check if there is a network
64 // get selector operator modul from selector frame
66 // select elements
67 if (myPythonToolsOptions.getBool("select-modified")) {
68 selectorModul->loadFromFile(myPythonToolsOptions.getString("outprefix") + ".changed.sel.txt");
69 }
70 if (myPythonToolsOptions.getBool("select-added")) {
71 selectorModul->loadFromFile(myPythonToolsOptions.getString("outprefix") + ".created.sel.txt");
72 }
73 if (myPythonToolsOptions.getBool("select-deleted")) {
74 selectorModul->loadFromFile(myPythonToolsOptions.getString("outprefix") + ".deleted.sel.txt");
75 }
76 // load shapes
77 if (myPythonToolsOptions.getBool("load-shapes-modified")) {
78 loadShapes(myPythonToolsOptions.getString("outprefix") + ".changed.shape.add.xml");
79 }
80 if (myPythonToolsOptions.getBool("load-shapes-added")) {
81 loadShapes(myPythonToolsOptions.getString("outprefix") + ".created.shape.add.xml");
82 }
83 if (myPythonToolsOptions.getBool("load-shapes-deleted")) {
84 loadShapes(myPythonToolsOptions.getString("outprefix") + ".deleted.shape.add.xml");
85 }
86 }
87}
88
89
90std::string
92 std::string arguments;
93 // add arguments
94 arguments += "\"" + myPythonToolsOptions.getString("original-net") + "\" ";
95 arguments += "\"" + myPythonToolsOptions.getString("modified-net") + "\" ";
96 arguments += "\"" + myPythonToolsOptions.getString("outprefix") + "\" ";
97 // check if save selection
98 if (myPythonToolsOptions.getBool("select-modified") ||
99 myPythonToolsOptions.getBool("select-added") ||
100 myPythonToolsOptions.getBool("select-deleted")) {
101 arguments += "--write-selections ";
102 }
103 // check if save shapes
104 if (myPythonToolsOptions.getBool("load-shapes-modified") ||
105 myPythonToolsOptions.getBool("load-shapes-added") ||
106 myPythonToolsOptions.getBool("load-shapes-deleted")) {
107 arguments += "--write-shapes ";
108 }
109 // add rest of arguments
110 if (myPythonToolsOptions.getBool("load-shapes-modified")) {
111 arguments += "--write-shapes ";
112 }
113 if (myPythonToolsOptions.getBool("write-selections")) {
114 arguments += "--write-selections ";
115 }
116 if (myPythonToolsOptions.getBool("plain-geo")) {
117 arguments += "--plain-geo ";
118 }
119 if (myPythonToolsOptions.getBool("verbose")) {
120 arguments += "--verbose ";
121 }
122 if (myPythonToolsOptions.getBool("use-prefix")) {
123 arguments += "--use-prefix ";
124 }
125 if (myPythonToolsOptions.getBool("direct")) {
126 arguments += "--direct ";
127 }
128 if (myPythonToolsOptions.getBool("patch-on-import")) {
129 arguments += "--patch-on-import ";
130 }
131 if (myPythonToolsOptions.getBool("remove-plain")) {
132 arguments += "--remove-plain ";
133 }
134 if (myPythonToolsOptions.getString("copy").size() > 0) {
135 arguments += "--copy " + myPythonToolsOptions.getString("copy") + " ";
136 }
137 if (myPythonToolsOptions.getString("path").size() > 0) {
138 arguments += "--path " + myPythonToolsOptions.getString("path") + " ";
139 }
140 return getCommandPath() + " " + arguments;
141}
142
143
144void
146 // build custom options for netdiff
147 options.addOptionSubTopic("input");
148 options.doRegister("original-net", new Option_Network(""));
149 options.addDescription("original-net", "input", TL("Original network"));
150
151 options.doRegister("modified-net", new Option_Network(""));
152 options.addDescription("modified-net", "input", TL("Modified network"));
153
154 options.addOptionSubTopic("output");
155 options.doRegister("outprefix", new Option_FileName());
156 options.addDescription("outprefix", "output", TL("Output prefix network"));
157
158 options.doRegister("write-selections", new Option_Bool(false));
159 options.addDescription("write-selections", "output", TL("Write selection files for created, deleted and changed elements"));
160
161 options.doRegister("write-shapes", new Option_Bool(false));
162 options.addDescription("write-shapes", "output", TL("Write shape files for created, deleted and changed elements"));
163
164 options.doRegister("plain-geo", new Option_Bool(false));
165 options.addDescription("plain-geo", "output", TL("Write geo coordinates instead of network coordinates"));
166
167 options.addOptionSubTopic("Processing");
168 options.doRegister("verbose", new Option_Bool(false));
169 options.addDescription("verbose", "Processing", TL("Give more output"));
170
171 options.doRegister("use-prefix", new Option_Bool(false));
172 options.addDescription("use-prefix", "Processing", TL("Interpret source and dest as plain-xml prefix instead of network names"));
173
174 options.doRegister("direct", new Option_Bool(false));
175 options.addDescription("direct", "Processing", TL("Compare source and dest files directly"));
176
177 options.doRegister("patch-on-import", new Option_Bool(false));
178 options.addDescription("patch-on-import", "Processing", TL("Generate patch that can be applied during initial network import (exports additional connection elements)"));
179
180 options.doRegister("remove-plain", new Option_Bool(false));
181 options.addDescription("remove-plain", "Processing", TL("Avoid saving plain xml files of source and destination networks"));
182
183 options.doRegister("copy", new Option_String());
184 options.addDescription("copy", "Processing", TL("Comma-separated list of element names to copy (if they are unchanged)"));
185
186 options.doRegister("path", new Option_String());
187 options.addDescription("path", "Processing", TL("Path to binaries"));
188
189 options.addOptionSubTopic("Select");
190 options.doRegister("select-modified", new Option_Bool(false));
191 options.addDescription("select-modified", "Select", TL("Select modified elements"));
192
193 options.doRegister("select-added", new Option_Bool(false));
194 options.addDescription("select-added", "Select", TL("Select added elements"));
195
196 options.doRegister("select-deleted", new Option_Bool(false));
197 options.addDescription("select-deleted", "Select", TL("Select deleted elements"));
198
199 options.addOptionSubTopic("Load");
200 options.doRegister("load-shapes-modified", new Option_Bool(false));
201 options.addDescription("load-shapes-modified", "Load", TL("Load shapes for elements"));
202
203 options.doRegister("load-shapes-added", new Option_Bool(false));
204 options.addDescription("load-shapes-added", "Load", TL("Load shapes for added"));
205
206 options.doRegister("load-shapes-deleted", new Option_Bool(false));
207 options.addDescription("load-shapes-deleted", "Load", TL("Load shapes for deleted elements"));
208}
209
210
211void
212GNENetDiffTool::loadShapes(const std::string& file) {
213 // get undo list
214 auto undoList = myApplicationWindow->getUndoList();
215 // disable validation for additionals
216 XMLSubSys::setValidation("never", "auto", "auto");
217 // get (or create) bucket for this new file
219 // Create additional handler
221 // begin undoList operation
222 undoList->begin(Supermode::NETWORK, GUIIcon::SUPERMODENETWORK, TL("load shapes from '") + file + "'");
223 // Run parser
224 if (!generalHandler.parse()) {
225 // write error
226 WRITE_ERROR(TLF("Loading of shape file '%' failed", file));
227 } else {
228 // write info
229 WRITE_MESSAGE(TLF("Loading of shape file '%' successfully", file));
230 }
231 // end undoList operation
232 undoList->end();
233 // restore validation for additionals
234 XMLSubSys::setValidation("auto", "auto", "auto");
235 // update view
236 myApplicationWindow->getViewNet()->update();
237}
238
239/****************************************************************************/
@ NETWORK
Network mode (Edges, junctions, etc..)
@ SUPERMODENETWORK
#define WRITE_MESSAGE(msg)
Definition MsgHandler.h:288
#define WRITE_ERROR(msg)
Definition MsgHandler.h:295
#define TL(string)
Definition MsgHandler.h:304
#define TLF(string,...)
Definition MsgHandler.h:306
static std::string getFilePath(const std::string &path)
Removes the file information from the given path.
FileBucket * getBucket(const FileBucket::Type type, const std::string &filename, const bool create)
get bucket
GNEUndoList * getUndoList()
get pointer to undoList
GNEViewNet * getViewNet()
get pointer to viewNet
GNEApplicationWindowHelper::FileBucketHandler * getFileBucketHandler() const
get file bucket handler
std::string getCommand() const
get command (python + script + arguments)
void loadShapes(const std::string &file)
load shapes
void postProcessing()
execute post processing
~GNENetDiffTool()
destructor
GNENetDiffTool(GNEApplicationWindow *applicationWindow, const std::string &toolPath, FXMenuPane *menu)
Constructor.
void setCurrentValues()
set current values (used for set values like current folder and similar)
void fillNetDiffOptions(OptionsCont &options)
fill netDiff options
GNEApplicationWindow * myApplicationWindow
application window
OptionsCont myPythonToolsOptionsOriginal
original tools options
std::string getCommandPath() const
get command (python + script)
OptionsCont myPythonToolsOptions
tools options
void loadFromFile(const std::string &file) const
load from file
GNESelectorFrame::SelectionOperation * getSelectionOperationModul() const
get selection operation modul
GNENet * getNet() const
get the net object
GNEViewParent * getViewParent() const
get the net object
GNESelectorFrame * getSelectorFrame() const
get frame for select elements
bool parse()
parse
A storage for options typed value containers)
Definition OptionsCont.h:89
void addDescription(const std::string &name, const std::string &subtopic, const std::string &description)
Adds a description for an option.
std::string getString(const std::string &name) const
Returns the string-value of the named option (only for Option_String)
void doRegister(const std::string &name, Option *o)
Adds an option under the given name.
bool set(const std::string &name, const std::string &value, const bool append=false)
Sets the given value for the named option.
void addOptionSubTopic(const std::string &topic)
Adds an option subtopic.
bool getBool(const std::string &name) const
Returns the boolean-value of the named option (only for Option_Bool)
void resetWritable()
Resets all options to be writeable.
static OptionsCont & getOptions()
Retrieves the options.
static void setValidation(const std::string &validationScheme, const std::string &netValidationScheme, const std::string &routeValidationScheme)
Enables or disables validation.
Definition XMLSubSys.cpp:83