Eclipse SUMO - Simulation of Urban MObility
GNETagProperties.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-2024 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 // Abstract Base class for tag properties used in GNEAttributeCarrier
19 /****************************************************************************/
20 
21 
22 // ===========================================================================
23 // defines
24 // ===========================================================================
25 
26 #define MAXNUMBEROFATTRIBUTES 128
27 
28 // ===========================================================================
29 // included modules
30 // ===========================================================================
31 
32 #include "GNETagProperties.h"
33 
34 // ===========================================================================
35 // method definitions
36 // ===========================================================================
37 
39 }
40 
41 
42 GNETagProperties::GNETagProperties(const SumoXMLTag tag, const int tagType, const int tagProperty, const int tagParents,
43  const int conflicts, const GUIIcon icon, const SumoXMLTag XMLTag, const std::string tooltip,
44  const std::vector<SumoXMLTag> parentTags, const unsigned int backgroundColor,
45  const std::string fieldString) :
46  myTag(tag),
47  myTagStr(toString(tag)),
48  myTagType(tagType),
49  myTagProperty(tagProperty),
50  myTagParents(tagParents),
51  myConflicts(conflicts),
52  myIcon(icon),
53  myXMLTag(XMLTag),
54  myTooltipText(tooltip),
55  myParentTags(parentTags),
56  myFieldString(fieldString.empty() ? toString(tag) : fieldString),
57  myBackgroundColor(backgroundColor) {
58 }
59 
60 
62 
63 
66  return myTag;
67 }
68 
69 
72  if (isDemandElement()) {
73  return Supermode::DEMAND;
74  } else if (isDataElement() || isMeanData()) {
75  return Supermode::DATA;
76  } else {
77  return Supermode::NETWORK;
78  }
79 }
80 
81 
82 const std::string&
84  return myTagStr;
85 }
86 
87 
88 void
90  // check integrity only in debug mode
91 #ifdef DEBUG
92  if (myTagType == -1) {
93  throw ProcessError(TL("no tag type defined"));
94  }
95  if (myTagProperty == -1) {
96  throw ProcessError(TL("no tag property defined"));
97  }
98  if (myTagParents == -1) {
99  throw ProcessError(TL("no tag parent defined"));
100  }
101  if (myConflicts == -1) {
102  throw ProcessError(TL("no conflict defined"));
103  }
104  // check that element must ist at least networkElement, Additional, or shape
106  throw ProcessError(TL("no basic type property defined"));
107  }
108  // check that element only is networkElement, Additional, or shape at the same time
110  throw ProcessError(TL("multiple basic type properties defined"));
111  }
112  // check that element only is shape, TAZ, or wire at the same time
113  if ((isShapeElement() + isTAZElement() + isWireElement()) > 1) {
114  throw ProcessError(TL("element can be either shape or TAZ or wire element at the same time"));
115  }
116  // if element can mask the start and end position, check that bot attributes exist
118  throw ProcessError(TL("If attributes mask the start and end position, both attributes have to be defined"));
119  }
120  // check that master tag is valid
121  if (isChild() && myParentTags.empty()) {
122  throw FormatException("Parent tags cannot be empty");
123  }
124  // check that master was defined
125  if (!isChild() && !myParentTags.empty()) {
126  throw FormatException("Element doesn't support parent elements");
127  }
128  // check reparent
129  if (!isChild() && canBeReparent()) {
130  throw FormatException("Only Child elements can be reparent");
131  }
132  // check vClass icons
134  throw FormatException("Element require attribute SUMO_ATTR_VCLASS");
135  }
136  // check integrity of all attributes
137  for (const auto& attributeProperty : myAttributeProperties) {
138  attributeProperty.checkAttributeIntegrity();
139  // check that if attribute is vehicle classes, own a combination of Allow/disallow attribute
140  if (attributeProperty.isSVCPermission()) {
141  if ((attributeProperty.getAttr() != SUMO_ATTR_ALLOW) && (attributeProperty.getAttr() != SUMO_ATTR_DISALLOW) &&
142  (attributeProperty.getAttr() != SUMO_ATTR_CHANGE_LEFT) && (attributeProperty.getAttr() != SUMO_ATTR_CHANGE_RIGHT) &&
143  (attributeProperty.getAttr() != GNE_ATTR_STOPOEXCEPTION)) {
144  throw ProcessError(TL("Attributes aren't combinables"));
145  } else if ((attributeProperty.getAttr() == SUMO_ATTR_ALLOW) && !hasAttribute(SUMO_ATTR_DISALLOW)) {
146  throw ProcessError(TL("allow need a disallow attribute in the same tag"));
147  } else if ((attributeProperty.getAttr() == SUMO_ATTR_DISALLOW) && !hasAttribute(SUMO_ATTR_ALLOW)) {
148  throw ProcessError(TL("disallow need an allow attribute in the same tag"));
149  }
150  }
151  }
152 #endif // DEBUG
153 }
154 
155 
156 const std::string&
158  // iterate over attribute properties
159  for (const auto& attributeProperty : myAttributeProperties) {
160  if (attributeProperty.getAttr() == attr) {
161  if (!attributeProperty.hasDefaultValue()) {
162  throw ProcessError(TLF("attribute '%' doesn't have a default value", attributeProperty.getAttrStr()));
163  } else {
164  return attributeProperty.getDefaultValue();
165  }
166  }
167  }
168  throw ProcessError(TLF("Attribute '%' not defined", toString(attr)));
169 }
170 
171 
172 void
174  if ((myAttributeProperties.size() + 1) >= MAXNUMBEROFATTRIBUTES) {
175  throw ProcessError(TLF("Maximum number of attributes for tag % exceeded", attributeProperty.getAttrStr()));
176  } else {
177  // Check that attribute wasn't already inserted
178  for (const auto& attrProperty : myAttributeProperties) {
179  if (attributeProperty.getAttr() == attrProperty.getAttr()) {
180  throw ProcessError(TLF("Attribute '%' already inserted", attributeProperty.getAttrStr()));
181  }
182  }
183  // insert AttributeProperties in vector
184  myAttributeProperties.push_back(attributeProperty);
185  myAttributeProperties.back().setTagPropertyParent(this);
186  }
187 }
188 
189 
190 const std::string&
192  return myFieldString;
193 }
194 
195 
196 const std::string&
198  return myTooltipText;
199 }
200 
201 
202 unsigned int
204  return myBackgroundColor;
205 }
206 
207 
210  // iterate over attribute properties
211  for (const auto& attributeProperty : myAttributeProperties) {
212  if ((attributeProperty.getAttr() == attr) || (attributeProperty.hasAttrSynonym() && (attributeProperty.getAttrSynonym() == attr))) {
213  return attributeProperty;
214  }
215  }
216  // throw error if these attribute doesn't exist
217  throw ProcessError(TLF("Attribute '%' doesn't exist", toString(attr)));
218 }
219 
220 
221 std::vector<GNEAttributeProperties>::const_iterator
223  return myAttributeProperties.begin();
224 }
225 
226 
227 std::vector<GNEAttributeProperties>::const_iterator
229  return myAttributeProperties.end();
230 }
231 
232 
234 GNETagProperties::at(int index) const {
235  return myAttributeProperties.at(index);
236 }
237 
238 
239 int
241  return (int)myAttributeProperties.size();
242 }
243 
244 
245 GUIIcon
247  return myIcon;
248 }
249 
250 
253  return myXMLTag;
254 }
255 
256 
257 const std::vector<SumoXMLTag>&
259  return myParentTags;
260 }
261 
262 
263 bool
265  // iterate over attribute properties
266  for (const auto& attributeProperty : myAttributeProperties) {
267  if (attributeProperty.getAttr() == attr) {
268  return true;
269  }
270  }
271  return false;
272 }
273 
274 
275 bool
277  return (myTagType & NETWORKELEMENT) != 0;
278 }
279 
280 
281 bool
283  return (myTagType & ADDITIONALELEMENT) != 0;
284 }
285 
286 
287 bool
289  return (isAdditionalElement() && !isShapeElement() && !isTAZElement() && !isWireElement());
290 }
291 
292 
293 bool
295  return (myTagType & DEMANDELEMENT) != 0;
296 }
297 
298 
299 bool
301  return (myTagType & DATAELEMENT) != 0;
302 }
303 
304 
305 bool
307  return (myTagType & STOPPINGPLACE) != 0;
308 }
309 
310 
311 bool
313  return (myTagType & DETECTOR) != 0;
314 }
315 
316 
317 bool
319  return (myTagType & CALIBRATOR) != 0;
320 }
321 
322 
323 bool
325  return (myTagType & SHAPE) != 0;
326 }
327 
328 
329 bool
331  return (myTagType & TAZELEMENT) != 0;
332 }
333 
334 
335 bool
337  return (myTagType & WIRE) != 0;
338 }
339 
340 
341 bool
343  return (myTagType & JUPEDSIM) != 0;
344 }
345 
346 
347 bool
349  return (myTagType & VTYPE) != 0;
350 }
351 
352 bool
355 }
356 
357 bool
359  return (myTagType & VEHICLE) != 0;
360 }
361 
362 
363 bool
365  return (myTagType & ROUTE) != 0;
366 }
367 
368 
369 bool
371  return (myTagType & VEHICLESTOP) != 0;
372 }
373 
374 
375 bool
377  return (myTagType & VEHICLEWAYPOINT) != 0;
378 }
379 
380 
381 bool
383  return (myTagType & FLOW) != 0;
384 }
385 
386 
387 bool
389  return (myTagType & PERSON) != 0;
390 }
391 
392 
393 bool
395  return (myTagType & CONTAINER) != 0;
396 }
397 
398 
399 bool
401  return isPlanPerson() || isPlanContainer();
402 }
403 
404 
405 bool
407  return (myTagType & PERSONPLAN) != 0;
408 }
409 
410 
411 bool
413  return (myTagType & CONTAINERPLAN) != 0;
414 }
415 
416 
417 bool
419  return (myTagType & PERSONTRIP) != 0;
420 }
421 
422 
423 bool
425  return (myTagType & WALK) != 0;
426 }
427 
428 
429 bool
431  return (myTagType & RIDE) != 0;
432 }
433 
434 
435 bool
437  return (myTagType & TRANSPORT) != 0;
438 }
439 
440 
441 bool
443  return (myTagType & TRANSHIP) != 0;
444 }
445 
446 
447 bool
450 }
451 
452 
453 bool
455  return (myTagType & STOPPERSON) != 0;
456 }
457 
458 
459 bool
461  return (myTagType & STOPCONTAINER) != 0;
462 }
463 
464 
465 bool
467  return (myTagType & GENERICDATA) != 0;
468 }
469 
470 
471 bool
473  return (myTagType & MEANDATA) != 0;
474 }
475 
476 
477 bool
479  return (myTagParents & VEHICLE_ROUTE) != 0;
480 }
481 
482 
483 bool
485  return (myTagParents & VEHICLE_ROUTE_EMBEDDED) != 0;
486 }
487 
488 
489 bool
491  return (myTagParents & VEHICLE_EDGES) != 0;
492 }
493 
494 
495 bool
497  return (myTagParents & VEHICLE_JUNCTIONS) != 0;
498 }
499 
500 
501 bool
503  return (myTagParents & VEHICLE_TAZS) != 0;
504 }
505 
506 
507 bool
509  return (myTagParents & PLAN_CONSECUTIVE_EDGES) != 0;
510 }
511 
512 
513 bool
515  return (myTagParents & PLAN_ROUTE) != 0;
516 }
517 
518 
519 bool
521  return (myTagParents & PLAN_EDGE) != 0;
522 }
523 
524 
525 bool
527  return (myTagParents & PLAN_BUSSTOP) != 0;
528 }
529 
530 
531 bool
533  return (myTagParents & PLAN_TRAINSTOP) != 0;
534 }
535 
536 
537 bool
539  return (myTagParents & PLAN_CONTAINERSTOP) != 0;
540 }
541 
542 
543 bool
545  return planBusStop() || planTrainStop() || planContainerStop();
546 }
547 
548 
549 bool
551  return planFromEdge() || planToEdge() ||
553  planFromTAZ() || planToTAZ() ||
555 }
556 
557 
558 bool
560  return (myTagParents & PLAN_FROM_EDGE) != 0;
561 }
562 
563 
564 bool
566  return (myTagParents & PLAN_FROM_TAZ) != 0;
567 }
568 
569 
570 bool
572  return (myTagParents & PLAN_FROM_JUNCTION) != 0;
573 }
574 
575 
576 bool
579 }
580 
581 
582 bool
584  return (myTagParents & PLAN_FROM_BUSSTOP) != 0;
585 }
586 
587 
588 bool
590  return (myTagParents & PLAN_FROM_TRAINSTOP) != 0;
591 }
592 
593 
594 bool
596  return (myTagParents & PLAN_FROM_CONTAINERSTOP) != 0;
597 }
598 
599 
600 bool
602  return (myTagParents & PLAN_TO_EDGE) != 0;
603 }
604 
605 
606 bool
608  return (myTagParents & PLAN_TO_TAZ) != 0;
609 }
610 
611 
612 bool
614  return (myTagParents & PLAN_TO_JUNCTION) != 0;
615 }
616 
617 
618 bool
621 }
622 
623 
624 bool
626  return (myTagParents & PLAN_TO_BUSSTOP) != 0;
627 }
628 
629 
630 bool
632  return (myTagParents & PLAN_TO_TRAINSTOP) != 0;
633 }
634 
635 
636 bool
638  return (myTagParents & PLAN_TO_CONTAINERSTOP) != 0;
639 }
640 
641 
642 bool
644  return (myTagProperty & CHILD) != 0;
645 }
646 
647 
648 bool
650  return (myTagProperty & SYMBOL) != 0;
651 }
652 
653 
654 bool
656  return (myTagType & INTERNALLANE) != 0;
657 }
658 
659 
660 bool
662  return (myTagProperty & NOTDRAWABLE) == 0;
663 }
664 
665 
666 bool
668  // note: By default all elements can be selected, except Tags with "NOTSELECTABLE"
669  return (myTagProperty & NOTSELECTABLE) == 0;
670 }
671 
672 
673 bool
675  return (myTagProperty & CLOSESHAPE) != 0;
676 }
677 
678 
679 bool
681  return (myTagProperty & GEOSHAPE) != 0;
682 }
683 
684 
685 bool
687  return (myTagProperty & DIALOG) != 0;
688 }
689 
690 
691 bool
693  // note: By default all elements support parameters, except Tags with "NOPARAMETERS"
694  return (myTagProperty & NOPARAMETERS) == 0;
695 }
696 
697 
698 bool
700  return (myTagProperty & RTREE) != 0;
701 }
702 
703 
704 bool
706  return (myTagProperty & REPARENT) != 0;
707 }
708 
709 
710 bool
712  return (myTagProperty & MASKSTARTENDPOS) != 0;
713 }
714 
715 
716 bool
718  return (myTagProperty & CENTERAFTERCREATION) != 0;
719 }
720 
721 
722 bool
724  return (myTagProperty & REQUIRE_PROJ) != 0;
725 }
726 
727 
728 bool
730  return (myTagProperty & VCLASS_ICON) != 0;
731 }
732 
733 /****************************************************************************/
#define MAXNUMBEROFATTRIBUTES
Supermode
@brie enum for supermodes
@ NETWORK
Network mode (Edges, junctions, etc..)
@ DATA
Data mode (edgeData, LaneData etc..)
@ DEMAND
Demand mode (Routes, Vehicles etc..)
GUIIcon
An enumeration of icons used by the gui applications.
Definition: GUIIcons.h:33
#define TL(string)
Definition: MsgHandler.h:315
#define TLF(string,...)
Definition: MsgHandler.h:317
SumoXMLTag
Numbers representing SUMO-XML - element names.
@ SUMO_TAG_VTYPE_DISTRIBUTION
distribution of a vehicle type
SumoXMLAttr
Numbers representing SUMO-XML - attributes.
@ SUMO_ATTR_STARTPOS
@ SUMO_ATTR_DISALLOW
@ SUMO_ATTR_ALLOW
@ SUMO_ATTR_ENDPOS
@ GNE_ATTR_STOPOEXCEPTION
stop exceptions (virtual, used by edge and lanes)
@ SUMO_ATTR_CHANGE_LEFT
@ SUMO_ATTR_CHANGE_RIGHT
@ SUMO_ATTR_VCLASS
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
Definition: ToString.h:46
const std::string & getAttrStr() const
get XML Attribute
SumoXMLAttr getAttr() const
get XML Attribute
const std::string & getTooltipText() const
get tooltip text
bool isPlanTransport() const
return true if tag correspond to a transport
bool isMeanData() const
return true if tag correspond to a mean data element
bool isContainer() const
return true if tag correspond to a container element
bool planToContainerStop() const
return true if tag correspond to a plan that starts in containerStop
bool canBeReparent() const
return true if tag correspond to an element that can be reparent
bool isShapeElement() const
return true if tag correspond to a shape
std::vector< GNEAttributeProperties >::const_iterator end() const
get end of attribute values (used for iterate)
const std::vector< SumoXMLTag > & getParentTags() const
get parent tags
bool vClassIcon() const
return true if tag correspond to an element that has vClass icons
bool isPlan() const
plans
bool planFromJunction() const
return true if tag correspond to a plan that starts in junction
bool isTAZElement() const
return true if tag correspond to a TAZ element
bool isFlow() const
return true if tag correspond to a flow element
bool hasGEOShape() const
return true if tag correspond to an element that can use a geo shape
bool planToBusStop() const
return true if tag correspond to a plan that starts in busStop
bool isGenericData() const
data elements
bool planToStoppingPlace() const
return true if tag correspond to a plan that ends in stoppingPlace
bool planFromContainerStop() const
return true if tag correspond to a plan that starts in containerStop
const std::string & getTagStr() const
get Tag vinculated with this attribute Property in String Format (used to avoid multiple calls to toS...
bool planFromTo() const
return true if tag correspond to a plan with from-to parents
bool planRoute() const
return true if tag correspond to a plan placed over route
const GNEAttributeProperties & getAttributeProperties(SumoXMLAttr attr) const
get attribute (throw error if doesn't exist)
int myTagType
tag Types
SumoXMLTag myXMLTag
Tag written in XML and used in GNENetHelper::AttributeCarriers.
bool isChild() const
return true if tag correspond to an element child of another element (Example: E3->Entry/Exit)
bool planStoppingPlace() const
return true if tag correspond to a plan placed in stoppingPlace
bool isNetworkElement() const
element sets
void addAttribute(const GNEAttributeProperties &attributeProperty)
add attribute (duplicated attributed aren't allowed)
const std::string & getFieldString() const
get field string (by default tag in string format)
bool isDataElement() const
return true if tag correspond to a data element
bool isSelectable() const
return true if tag correspond to a selectable element
bool planToJunction() const
return true if tag correspond to a plan that starts in junction
bool isType() const
demand elements
std::string myTooltipText
tooltip text
std::vector< SumoXMLTag > myParentTags
vector with master tags (used by child elements)
bool isRoute() const
return true if tag correspond to a route element
bool isVehicle() const
return true if tag correspond to a vehicle element
bool isPlanStop() const
return true if tag correspond to a stop plan
bool planToTAZ() const
return true if tag correspond to a plan that starts in TAZ
bool planFromStoppingPlace() const
return true if tag correspond to a plan that starts in stoppingPlace
bool planConsecutiveEdges() const
plan parents
int myConflicts
conflicts
bool isPlacedInRTree() const
return true if Tag correspond to an element that has to be placed in RTREE
bool vehicleJunctions() const
return true if tag correspond to a vehicle placed over from-to junctions
std::string myFieldString
field string
bool isPlanStopContainer() const
return true if tag correspond to a container stop plan
const GNEAttributeProperties & at(int index) const
get attribute value
bool isPersonTrip() const
return true if tag correspond to a person trip
std::vector< GNEAttributeProperties > myAttributeProperties
vector with the attribute values vinculated with this Tag
GUIIcon getGUIIcon() const
get GUI icon associated to this Tag
bool hasParameters() const
return true if Tag correspond to an element that supports parameters "key1=value1|key2=value2|....
bool isStoppingPlace() const
additional elements
SumoXMLTag myTag
Sumo XML Tag vinculated wit this tag Property.
bool isCalibrator() const
return true if tag correspond to a calibrator (Only used to group all detectors in the XML)
unsigned int myBackgroundColor
background color (used in labels and textFields, by default white)
bool isDrawable() const
return true if tag correspond to a drawable element
SumoXMLTag getTag() const
get Tag vinculated with this attribute Property
std::vector< GNEAttributeProperties >::const_iterator begin() const
get begin of attribute values (used for iterate)
bool canMaskStartEndPos() const
return true if tag correspond to an element that can mask the attributes "start" and "end" position a...
bool planFromEdge() const
return true if tag correspond to a plan that starts in edge
Supermode getSupermode() const
get supermode associated with this tag
bool planFromBusStop() const
return true if tag correspond to a plan that starts in busStop
bool isDetector() const
return true if tag correspond to a shape (Only used to group all detectors in the XML)
bool planFromTrainStop() const
return true if tag correspond to a plan that starts in trainStop
void checkTagIntegrity() const
check Tag integrity (this include all their attributes)
bool planToTrainStop() const
return true if tag correspond to a plan that starts in trainStop
int myTagParents
tag parents
bool planFromTAZ() const
return true if tag correspond to a plan that starts in TAZ
bool vehicleRouteEmbedded() const
return true if tag correspond to a vehicle placed over an embedded route
bool isTypeDist() const
return true if tag correspond to a type distribution element
bool canCenterCameraAfterCreation() const
return true if tag correspond to an element that center camera after creation
bool isJuPedSimElement() const
return true if tag correspond to a JuPedSim element
bool isPlanContainer() const
return true if tag correspond to a container plan
bool planEdge() const
return true if tag correspond to a plan placed over edge
bool hasDialog() const
return true if tag correspond to an element that can be edited using a dialog
bool isAdditionalPureElement() const
return true if tag correspond to a pure additional element
std::string myTagStr
Sumo XML Tag vinculated wit this tag Property in String format.
bool isWireElement() const
return true if tag correspond to a Wire element
int getNumberOfAttributes() const
get number of attributes
bool planContainerStop() const
return true if tag correspond to a plan placed over containerStop
bool vehicleEdges() const
return true if tag correspond to a vehicle placed over from-to edges
bool canCloseShape() const
return true if tag correspond to an element that can close their shape
bool isPlanPerson() const
return true if tag correspond to a person plan
bool isDemandElement() const
return true if tag correspond to a demand element
const std::string & getDefaultValue(SumoXMLAttr attr) const
return the default value of the attribute of an element
int myTagProperty
tag properties
SumoXMLTag getXMLTag() const
get XML tag
bool isPlanRide() const
return true if tag correspond to a ride plan
bool isInternalLane() const
return true if tag correspond to an internal lane
GUIIcon myIcon
icon associated to this Tag
bool planTrainStop() const
return true if tag correspond to a plan placed over trainStop
bool isVehicleWaypoint() const
return true if tag correspond to a vehicle waypoint element
bool isAdditionalElement() const
return true if tag correspond to an additional element (note: this include TAZ, shapes and wires)
bool isSymbol() const
return true if tag correspond to a symbol element
bool hasAttribute(SumoXMLAttr attr) const
check if current TagProperties owns the attribute "attr"
bool isPlanStopPerson() const
return true if tag correspond to a person stop plan
unsigned int getBackGroundColor() const
get background color
bool isVehicleStop() const
return true if tag correspond to a vehicle stop element
bool isPerson() const
return true if tag correspond to a person element
bool vehicleTAZs() const
return true if tag correspond to a vehicle placed over from-to TAZs
~GNETagProperties()
destructor
bool vehicleRoute() const
plan parents
bool isPlanWalk() const
return true if tag correspond to a walk plan
bool planToEdge() const
return true if tag correspond to a plan that starts in edge
bool planBusStop() const
return true if tag correspond to a plan placed over busStop
bool requireProj() const
return true if tag correspond to an element that requires a geo projection
bool isPlanTranship() const
return true if tag correspond to a tranship
GNETagProperties()
default constructor