Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
eclipse
GitHub Repository: eclipse/sumo
Path: blob/main/src/netedit/GNENet.h
169666 views
1
/****************************************************************************/
2
// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3
// Copyright (C) 2001-2025 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
/****************************************************************************/
14
/// @file GNENet.h
15
/// @author Jakob Erdmann
16
/// @date Feb 2011
17
///
18
// The lop level container for GNE-network-components such as GNEEdge and
19
// GNEJunction. Contains an internal instances of NBNetBuilder GNE components
20
// wrap netbuild-components of this underlying NBNetBuilder and supply
21
// visualisation and editing capabilities (adapted from GUINet)
22
//
23
// WorkrouteFlow (rough draft)
24
// wrap NB-components
25
// do netedit stuff
26
// call NBNetBuilder::buildLoaded to save results
27
//
28
/****************************************************************************/
29
#pragma once
30
#include <config.h>
31
32
#include "GNENetHelper.h"
33
#include "GNEPathManager.h"
34
35
// ===========================================================================
36
// class definitions
37
// ===========================================================================
38
/**
39
* @class GNENet
40
* @brief A NBNetBuilder extended by visualisation and editing capabilities
41
*/
42
class GNENet : public GUIGlObject {
43
44
public:
45
/// @brief constructor
46
GNENet(NBNetBuilder* netBuilder, const GNETagPropertiesDatabase* tagPropertiesDatabase);
47
48
/// @brief Destructor
49
~GNENet();
50
51
/// @brief get tag properties database
52
const GNETagPropertiesDatabase* getTagPropertiesDatabase() const;
53
54
/// @brief get all attribute carriers used in this net
55
GNENetHelper::AttributeCarriers* getAttributeCarriers() const;
56
57
/// @brief get all attribute carriers templates used in this net
58
GNENetHelper::ACTemplate* getACTemplates() const;
59
60
/// @brief get saving files handler
61
GNENetHelper::SavingFilesHandler* getSavingFilesHandler() const;
62
63
/// @brief get saving status
64
GNENetHelper::SavingStatus* getSavingStatus() const;
65
66
/// @brief get network path manager
67
GNEPathManager* getNetworkPathManager();
68
69
/// @brief get demand path manager
70
GNEPathManager* getDemandPathManager();
71
72
/// @brief get data path manager
73
GNEPathManager* getDataPathManager();
74
75
/// @name inherited from GUIGlObject
76
/// @{
77
/**@brief Returns an own popup-menu
78
*
79
* @param[in] app The application needed to build the popup-menu
80
* @param[in] parent The parent window needed to build the popup-menu
81
* @return The built popup-menu
82
* @see GUIGlObject::getPopUpMenu
83
*/
84
GUIGLObjectPopupMenu* getPopUpMenu(GUIMainWindow& app, GUISUMOAbstractView& parent);
85
86
/**@brief Returns an own parameter window
87
*
88
* @param[in] app The application needed to build the parameter window
89
* @param[in] parent The parent window needed to build the parameter window
90
* @return The built parameter window
91
* @see GUIGlObject::getParameterWindow
92
*/
93
GUIParameterTableWindow* getParameterWindow(GUIMainWindow& app, GUISUMOAbstractView& parent);
94
95
/**@brief Returns the boundary to which the view shall be centered in order to show the object
96
*
97
* @return The boundary the object is within
98
* @see GUIGlObject::getCenteringBoundary
99
*/
100
Boundary getCenteringBoundary() const;
101
102
/// @brief expand boundary
103
void expandBoundary(const Boundary& newBoundary);
104
105
/// @brief Returns the Z boundary (stored in the x() coordinate) values of 0 do not affect the boundary
106
const Boundary& getZBoundary() const;
107
108
/// @brief add Z in net boundary
109
void addZValueInBoundary(const double z);
110
111
/**@brief Draws the object
112
* @param[in] s The settings for the current view (may influence drawing)
113
* @see GUIGlObject::drawGL
114
*/
115
void drawGL(const GUIVisualizationSettings& s) const;
116
117
/// @}
118
119
/// @brief returns the bounder of the network
120
const Boundary& getBoundary() const;
121
122
/**@brief Returns the RTree used for visualisation speed-up
123
* @return The visualisation speed-up
124
* @note only use in GNEViewNet constructor. For edit grid ALWAYS use addGLObjectIntoGrid/removeGLObjectIntoGrid
125
*/
126
SUMORTree& getGrid();
127
128
/// @brief et edges and number of lanes
129
const std::map<std::string, int>& getEdgesAndNumberOfLanes() const;
130
131
/**@brief creates a new junction
132
* @param[in] position The position of the new junction
133
* @param[in] undoList The undolist in which to mark changes
134
* @return the new junction
135
*/
136
GNEJunction* createJunction(const Position& pos, GNEUndoList* undoList);
137
138
/**@brief creates a new edge (unless an edge with the same geometry already
139
* exists)
140
* @param[in] src The starting junction
141
* @param[in] dest The ending junction
142
* @param[in] edgeTemplate The template edge from which to copy attributes (including lane attrs)
143
* @param[in] undoList The undoList in which to mark changes
144
* @param[in] suggestedName
145
* @param[in] wasSplit Whether the edge was created from a split
146
* @param[in] allowDuplicateGeom Whether to create the edge even though another edge with the same geometry exists
147
* @param[in] recomputeConnections Whether connections on the affected junctions must be recomputed
148
* @return The newly created edge or 0 if no edge was created
149
*/
150
GNEEdge* createEdge(GNEJunction* src, GNEJunction* dest, GNEEdge* edgeTemplate, GNEUndoList* undoList,
151
const std::string& suggestedName = "", bool wasSplit = false, bool allowDuplicateGeom = false,
152
bool recomputeConnections = true);
153
154
/**@brief delete network element
155
* @param[in] networkElement The network element to be removed
156
* @param[in] undoList The undolist in which to mark changes
157
*/
158
void deleteNetworkElement(GNENetworkElement* networkElement, GNEUndoList* undoList);
159
160
/**@brief removes junction and all incident edges
161
* @param[in] junction The junction to be removed
162
* @param[in] undoList The undolist in which to mark changes
163
*/
164
void deleteJunction(GNEJunction* junction, GNEUndoList* undoList);
165
166
/**@brief removes edge
167
* @param[in] edge The edge to be removed
168
* @param[in] undoList The undolist in which to mark changes
169
*/
170
void deleteEdge(GNEEdge* edge, GNEUndoList* undoList, bool recomputeConnections);
171
172
/**@brief replaces edge
173
* @param[in] which The edge to be replaced
174
* @param[in] by The replacement edge
175
* @param[in] undoList The undolist in which to mark changes
176
*/
177
void replaceIncomingEdge(GNEEdge* which, GNEEdge* by, GNEUndoList* undoList);
178
179
/**@brief removes lane
180
* @param[in] lane The lane to be removed
181
* @param[in] undoList The undolist in which to mark changes
182
*/
183
void deleteLane(GNELane* lane, GNEUndoList* undoList, bool recomputeConnections);
184
185
/**@brief remove connection
186
* @param[in] connection The connection to be removed
187
* @param[in] undoList The undolist in which to mark changes
188
*/
189
void deleteConnection(GNEConnection* connection, GNEUndoList* undoList);
190
191
/**@brief remove crossing
192
* @param[in] crossing The crossing to be removed
193
* @param[in] undoList The undolist in which to mark changes
194
*/
195
void deleteCrossing(GNECrossing* crossing, GNEUndoList* undoList);
196
197
/**@brief remove additional
198
* @param[in] additional The additional to be removed
199
* @param[in] undoList The undolist in which to mark changes
200
*/
201
void deleteAdditional(GNEAdditional* additional, GNEUndoList* undoList);
202
203
/**@brief remove TAZSourceSink
204
* @param[in] TAZSourceSink The TAZSourceSink to be removed
205
* @param[in] undoList The undolist in which to mark changes
206
*/
207
void deleteTAZSourceSink(GNETAZSourceSink* TAZSourceSink, GNEUndoList* undoList);
208
209
/**@brief remove demand element
210
* @param[in] demandElement The Shape to be removed
211
* @param[in] undoList The undolist in which to mark changes
212
*/
213
void deleteDemandElement(GNEDemandElement* demandElement, GNEUndoList* undoList);
214
215
/**@brief remove data set
216
* @param[in] dataSet The data set to be removed
217
* @param[in] undoList The undolist in which to mark changes
218
*/
219
void deleteDataSet(GNEDataSet* dataSet, GNEUndoList* undoList);
220
221
/**@brief remove data interval
222
* @param[in] dataInterval The data interval to be removed
223
* @param[in] undoList The undolist in which to mark changes
224
*/
225
void deleteDataInterval(GNEDataInterval* dataInterval, GNEUndoList* undoList);
226
227
/**@brief remove generic data
228
* @param[in] genericData The generic data to be removed
229
* @param[in] undoList The undolist in which to mark changes
230
*/
231
void deleteGenericData(GNEGenericData* genericData, GNEUndoList* undoList);
232
233
/**@brief remove generic data
234
* @param[in] genericData The generic data to be removed
235
* @param[in] undoList The undolist in which to mark changes
236
*/
237
void deleteMeanData(GNEMeanData* meanData, GNEUndoList* undoList);
238
239
/**@brief duplicates lane
240
* @param[in] lane The lane to be duplicated
241
* @param[in] undoList The undolist in which to mark changes
242
*/
243
void duplicateLane(GNELane* lane, GNEUndoList* undoList, bool recomputeConnections);
244
245
/**@brief transform lane to restricted lane
246
* @param[in] vclass vehicle class to restrict
247
* @param[in] lane The lane to be transformed
248
* @param[in] undoList The undolist in which to mark changes
249
*/
250
bool restrictLane(SUMOVehicleClass vclass, GNELane* lane, GNEUndoList* undoList);
251
252
/**@brief add restricted lane to edge
253
* @param[in] vclass vehicle class to restrict
254
* @param[in] edge The edge in which insert restricted lane
255
* @param[in] index to be changed
256
* @param[in] undoList The undolist in which to mark changes
257
*/
258
bool addRestrictedLane(SUMOVehicleClass vclass, GNEEdge* edge, int index, GNEUndoList* undoList);
259
260
/**@brief add restricted lane to edge
261
* @param[in] edge The edge in which insert restricted lane
262
* @param[in] index to be changed
263
* @param[in] undoList The undolist in which to mark changes
264
*/
265
bool addGreenVergeLane(GNEEdge* edge, int index, GNEUndoList* undoList);
266
267
/**@brief remove restricted lane
268
* @param[in] vclass vehicle class to restrict
269
* @param[in] edge the edge in which remove sidewalk
270
* @param[in] undoList The undolist in which to mark changes
271
*/
272
bool removeRestrictedLane(SUMOVehicleClass vclass, GNEEdge* edge, GNEUndoList* undoList);
273
274
/**@brief split edge at position by inserting a new junction
275
* @param[in] edge The edge to be split
276
* @param[in] pos The position on which to insert the new junction
277
* @return The new junction and the new edge
278
*/
279
std::pair<GNEJunction*, GNEEdge*> splitEdge(GNEEdge* edge, const Position& pos, GNEUndoList* undoList, GNEJunction* newJunction = 0);
280
281
/**@brief split all edges at position by inserting one new junction
282
* @param[in] edge The edge to be split
283
* @param[in] oppositeEdge The oppositeEdge to be split
284
* @param[in] pos The position on which to insert the new junction
285
*/
286
void splitEdgesBidi(GNEEdge* edge, GNEEdge* oppositeEdge, const Position& pos, GNEUndoList* undoList);
287
288
/**@brief reverse edge
289
* @param[in] edge The edge to be reversed
290
*/
291
void reverseEdge(GNEEdge* edge, GNEUndoList* undoList);
292
293
/**@brief add reversed edge
294
* @param[in] edge The edge of which to add the reverse
295
* @param[in] disconnected add edge reversed or disconnected parallel
296
* @return Return the new edge or 0
297
*/
298
GNEEdge* addReversedEdge(GNEEdge* edge, const bool disconnected, GNEUndoList* undoList);
299
300
/**@brief merge the given junctions
301
* edges between the given junctions will be deleted
302
* @param[in] moved The junction that will be eliminated
303
* @param[in] target The junction that will be enlarged
304
* @param[in] undoList The undo list with which to register changes
305
*/
306
void mergeJunctions(GNEJunction* moved, const GNEJunction* target, GNEUndoList* undoList);
307
308
/// @brief select all roundabout edges and junctions for the current roundabout
309
void selectRoundabout(GNEJunction* junction, GNEUndoList* undoList);
310
311
/// @brief transform the given junction into a roundabout
312
void createRoundabout(GNEJunction* junction, GNEUndoList* undoList);
313
314
/// @brief save the network
315
void saveNetwork();
316
317
/// @brief save plain xml representation of the network (and nothing else)
318
void savePlain(const std::string& prefix);
319
320
/// @brief save log of joined junctions (and nothing else)
321
void saveJoined(const std::string& filename);
322
323
/// @brief Set the net to be notified of network changes
324
void setViewNet(GNEViewNet* viewNet);
325
326
/// @brief add GL Object into net
327
void addGLObjectIntoGrid(GNEAttributeCarrier* AC);
328
329
/// @brief add GL Object into net
330
void removeGLObjectFromGrid(GNEAttributeCarrier* AC);
331
332
/// @brief modifies endpoins of the given edge
333
void changeEdgeEndpoints(GNEEdge* edge, const std::string& newSourceID, const std::string& newDestID);
334
335
/// @brief get view net
336
GNEViewNet* getViewNet() const;
337
338
/// @brief returns the tllcont of the underlying netbuilder
339
NBTrafficLightLogicCont& getTLLogicCont();
340
341
/// @brief returns the NBEdgeCont of the underlying netbuilder
342
NBEdgeCont& getEdgeCont();
343
344
/// @brief initialize GNEConnections
345
void initGNEConnections();
346
347
/// @brief recompute the network and update lane geometries
348
void computeAndUpdate(OptionsCont& neteditOptions, bool volatileOptions);
349
350
/**@brief trigger full netbuild computation
351
* param[in] window The window to inform about delay
352
* param[in] force Whether to force recomputation even if not needed
353
* param[in] volatileOptions enable or disable volatile options
354
*/
355
void computeNetwork(GNEApplicationWindow* window, bool force = false, bool volatileOptions = false);
356
357
/**@brief compute demand elements
358
* param[in] window The window to inform about delay
359
*/
360
void computeDemandElements(GNEApplicationWindow* window);
361
362
/**@brief compute data elements
363
* param[in] window The window to inform about delay
364
*/
365
void computeDataElements(GNEApplicationWindow* window);
366
367
/**@brief join selected junctions
368
* @note difference to mergeJunctions:
369
* - can join more than 2
370
* - connected edges will keep their geometry (big junction shape is created)
371
* - no hierarchy: if any junction has a traffic light than the resulting junction will
372
*/
373
bool joinSelectedJunctions(GNEUndoList* undoList);
374
375
/// @brief clear invalid crossings
376
bool cleanInvalidCrossings(GNEUndoList* undoList);
377
378
/// @brief removes junctions that have no edges
379
void removeSolitaryJunctions(GNEUndoList* undoList);
380
381
/// @brief clean unused routes
382
void cleanUnusedRoutes(GNEUndoList* undoList);
383
384
/// @brief join routes
385
void joinRoutes(GNEUndoList* undoList);
386
387
/// @brief adjust person plans
388
void adjustPersonPlans(GNEUndoList* undoList);
389
390
/// @brief clean invalid demand elements
391
void cleanInvalidDemandElements(GNEUndoList* undoList);
392
393
/// @brief replace the selected junction by geometry node(s) and merge the edges
394
void replaceJunctionByGeometry(GNEJunction* junction, GNEUndoList* undoList);
395
396
/// @brief replace the selected junction by a list of junctions for each unique edge endpoint
397
void splitJunction(GNEJunction* junction, bool reconnect, GNEUndoList* undoList);
398
399
/// @brief clear junction's connections
400
void clearJunctionConnections(GNEJunction* junction, GNEUndoList* undoList);
401
402
/// @brief reset junction's connections
403
void resetJunctionConnections(GNEJunction* junction, GNEUndoList* undoList);
404
405
/// @brief clear additionals
406
void clearAdditionalElements(GNEUndoList* undoList);
407
408
/// @brief clear demand elements
409
void clearDemandElements(GNEUndoList* undoList);
410
411
/// @brief clear data elements
412
void clearDataElements(GNEUndoList* undoList);
413
414
/// @brief clear meanDatas
415
void clearMeanDataElements(GNEUndoList* undoList);
416
417
/**@brief trigger recomputation of junction shape and logic
418
* param[in] window The window to inform about delay
419
*/
420
void computeJunction(GNEJunction* junction);
421
422
/// @brief inform the net about the need for recomputation
423
void requireRecompute();
424
425
/// @brief check if net require recomputing
426
bool isNetRecomputed() const;
427
428
/// @brief get pointer to the main App
429
FXApp* getApp();
430
431
/// @brief get net builder
432
NBNetBuilder* getNetBuilder() const;
433
434
/// @brief add edge id to the list of explicit turnarounds
435
void addExplicitTurnaround(std::string id);
436
437
/// @brief remove edge id from the list of explicit turnarounds
438
void removeExplicitTurnaround(std::string id);
439
440
/// @brief save additional elements
441
bool saveAdditionals();
442
443
/// @brief save JuPedSim elements
444
bool saveJuPedSimElements(const std::unordered_set<const GNEAttributeCarrier*>& ACs, const std::string& file);
445
446
/// @brief save demand element elements of the network
447
bool saveDemandElements();
448
449
/// @brief save data set elements of the network
450
bool saveDataElements();
451
452
/// @brief get minimum interval
453
double getDataSetIntervalMinimumBegin() const;
454
455
/// @brief get maximum interval
456
double getDataSetIntervalMaximumEnd() const;
457
458
/// @brief save meanData elements of the network
459
bool saveMeanDatas();
460
461
/**@brief save TLS Programs elements of the network
462
* @param[in] filename name of the file in which save TLS Programs
463
*/
464
void saveTLSPrograms(const std::string& filename);
465
466
/// @brief get number of TLS Programs
467
int getNumberOfTLSPrograms() const;
468
469
/**@brief save edgeTypes elements of the network
470
* @param[in] filename name of the file in which save edgeTypes
471
*/
472
void saveEdgeTypes(const std::string& filename);
473
474
/// @name Functions related to Enable or disable update geometry of elements after insertion
475
/// @{
476
/// @brief enable update geometry of elements after inserting or removing an element in net
477
void enableUpdateGeometry();
478
479
/// @brief disable update geometry of elements after inserting or removing an element in net
480
void disableUpdateGeometry();
481
482
/// @brief check if update geometry after inserting or removing has to be updated
483
bool isUpdateGeometryEnabled() const;
484
485
/// @}
486
487
/// @name Functions related to Enable or disable update data of elements after insertion
488
/// @{
489
/// @brief enable update data elements after inserting or removing an element in net
490
void enableUpdateData();
491
492
/// @brief disable update data elements after inserting or removing an element in net
493
void disableUpdateData();
494
495
/// @brief check if update data after inserting or removing has to be updated
496
bool isUpdateDataEnabled() const;
497
498
/// @}
499
500
/// @name get junction id counter
501
unsigned int& getJunctionIDCounter();
502
503
/// @name get edge id counter
504
unsigned int& getEdgeIDCounter();
505
506
/// @brief variable used for write headers in additional, demand and data elements
507
static const std::map<SumoXMLAttr, std::string> EMPTY_HEADER;
508
509
protected:
510
/// @brief the rtree which contains all GUIGlObjects (so named for historical reasons)
511
SUMORTree myGrid;
512
513
/// @brief The internal netbuilder
514
NBNetBuilder* myNetBuilder;
515
516
/// @brief The net to be notified of about changes
517
GNEViewNet* myViewNet = nullptr;
518
519
/// @brief pointer to tagProperties database
520
const GNETagPropertiesDatabase* myTagPropertiesDatabase = nullptr;
521
522
/// @brief attributeCarriers module
523
GNENetHelper::AttributeCarriers* myAttributeCarriers = nullptr;
524
525
/// @brief attributeCarriers templates
526
GNENetHelper::ACTemplate* myACTemplates = nullptr;
527
528
/// @brief saving files handler module
529
GNENetHelper::SavingFilesHandler* mySavingFilesHandler = nullptr;
530
531
/// @brief saving status module
532
GNENetHelper::SavingStatus* mySavingStatus = nullptr;
533
534
/// @brief Network path manager
535
GNEPathManager* myNetworkPathManager = nullptr;
536
537
/// @brief Demand path manager
538
GNEPathManager* myDemandPathManager = nullptr;
539
540
/// @brief Data path manager
541
GNEPathManager* myDataPathManager = nullptr;
542
543
/// @name counters for junction/edge IDs
544
// @{
545
unsigned int myJunctionIDCounter = 0;
546
unsigned int myEdgeIDCounter = 0;
547
// @}
548
549
/// @brief list of edge ids for which turn-arounds must be added explicitly
550
std::set<std::string> myExplicitTurnarounds;
551
552
/// @brief whether the net needs recomputation
553
bool myNeedRecompute = true;
554
555
/// @brief Flag to enable or disable update geometry of elements after inserting or removing element in net
556
bool myUpdateGeometryEnabled = true;
557
558
/// @brief Flag to enable or disable update data elements after inserting or removing element in net
559
bool myUpdateDataEnabled = true;
560
561
private:
562
/// @brief Init Junctions and edges
563
void initJunctionsAndEdges();
564
565
/// @brief return true if there are already a Junction in the given position, false in other case
566
bool checkJunctionPosition(const Position& pos);
567
568
/// @brief save additionals after confirming invalid objects
569
void saveAdditionalsConfirmed();
570
571
/// @brief save demand elements after confirming invalid objects
572
void saveDemandElementsConfirmed();
573
574
/// @brief save data elements after confirming invalid objects
575
void saveDataElementsConfirmed();
576
577
/// @brief save meanDatas
578
void saveMeanDatasConfirmed();
579
580
/// @brief write additional element by type and sorted by ID
581
void writeAdditionalByType(OutputDevice& device, const std::unordered_set<const GNEAttributeCarrier*>& ACs,
582
const std::vector<SumoXMLTag> tags) const;
583
584
/// @brief write demand element by type and sorted by ID
585
void writeDemandByType(OutputDevice& device, const std::unordered_set<const GNEAttributeCarrier*>& ACs, SumoXMLTag tag) const;
586
587
/// @brief write route distributions sorted by ID
588
void writeRouteDistributions(OutputDevice& device, const std::unordered_set<const GNEAttributeCarrier*>& ACs) const;
589
590
/// @brief write route sorted by ID
591
void writeRoutes(OutputDevice& device, const std::unordered_set<const GNEAttributeCarrier*>& ACs, const bool additionalFile) const;
592
593
/// @brief write vTypeDistributions sorted by ID
594
void writeVTypeDistributions(OutputDevice& device, const std::unordered_set<const GNEAttributeCarrier*>& ACs) const;
595
596
/// @brief write vTypes sorted by ID
597
void writeVTypes(OutputDevice& device, const std::unordered_set<const GNEAttributeCarrier*>& ACs, const bool additionalFile) const;
598
599
/// @brief write meanData element by type and sorted by ID
600
void writeMeanDatas(OutputDevice& device, const std::unordered_set<const GNEAttributeCarrier*>& ACs, SumoXMLTag tag) const;
601
602
/// @brief write vType comment
603
bool writeVTypeComment(OutputDevice& device, const std::unordered_set<const GNEAttributeCarrier*>& ACs, const bool additionalFile) const;
604
605
/// @brief write route comment
606
bool writeRouteComment(OutputDevice& device, const std::unordered_set<const GNEAttributeCarrier*>& ACs, const bool additionalFile) const;
607
608
/// @brief write routeProbe comment
609
bool writeRouteProbeComment(OutputDevice& device, const std::unordered_set<const GNEAttributeCarrier*>& ACs) const;
610
611
/// @brief write calibrator comment
612
bool writeCalibratorComment(OutputDevice& device, const std::unordered_set<const GNEAttributeCarrier*>& ACs) const;
613
614
/// @brief write stoppingPlace comment
615
bool writeStoppingPlaceComment(OutputDevice& device, const std::unordered_set<const GNEAttributeCarrier*>& ACs) const;
616
617
/// @brief write detector comment
618
bool writeDetectorComment(OutputDevice& device, const std::unordered_set<const GNEAttributeCarrier*>& ACs) const;
619
620
/// @brief write other additional comment
621
bool writeOtherAdditionalsComment(OutputDevice& device, const std::unordered_set<const GNEAttributeCarrier*>& ACs) const;
622
623
/// @brief write shape comment
624
bool writeShapesComment(OutputDevice& device, const std::unordered_set<const GNEAttributeCarrier*>& ACs) const;
625
626
/// @brief write JuPedSim comment
627
bool writeJuPedSimComment(OutputDevice& device, const std::unordered_set<const GNEAttributeCarrier*>& ACs) const;
628
629
/// @brief write TAZ comment
630
bool writeTAZComment(OutputDevice& device, const std::unordered_set<const GNEAttributeCarrier*>& ACs) const;
631
632
/// @brief write Wire comment
633
bool writeWireComment(OutputDevice& device, const std::unordered_set<const GNEAttributeCarrier*>& ACs) const;
634
635
/// @brief write meanDataEdge comment
636
bool writeMeanDataEdgeComment(OutputDevice& device) const;
637
638
/// @brief write Wire comment
639
bool writeMeanDataLaneComment(OutputDevice& device) const;
640
641
/// @brief replace in list attribute
642
static void replaceInListAttribute(GNEAttributeCarrier* ac, SumoXMLAttr key, const std::string& which, const std::string& by, GNEUndoList* undoList);
643
644
/// @brief the z boundary (stored in the x-coordinate), values of 0 are ignored
645
Boundary myZBoundary;
646
647
/// @brief map with the Edges and their number of lanes
648
std::map<std::string, int> myEdgesAndNumberOfLanes;
649
650
/// @brief marker for whether the z-boundary is initialized
651
static const double Z_INITIALIZED;
652
653
/// @brief Invalidated default constructor.
654
GNENet() = delete;
655
656
/// @brief Invalidated copy constructor.
657
GNENet(const GNENet&) = delete;
658
659
/// @brief Invalidated assignment operator.
660
GNENet& operator=(const GNENet&) = delete;
661
};
662
663