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