69 FXIMPLEMENT(
GNELane, FXDelegator, 0, 0)
85 myParentEdge(*static_cast<
GNEEdge*>(0)),
99 int noLinks = (int)cons.size();
109 for (
int i = noLinks; --i >= 0;) {
110 double x2 = x1 - (double)(w / 2.);
112 cons[lefthand ? noLinks - 1 - i : i]);
123 int noLinks = (int)cons.size();
133 for (
int i = noLinks; --i >= 0;) {
134 double x2 = x1 - (double)(w / 2.);
135 int linkNo = cons[lefthand ? noLinks - 1 - i : i].tlLinkNo;
152 double rot = (double) atan2((end.
x() - f.
x()), (f.
y() - end.
y())) * (double) 180.0 / (
double)
PI;
157 glTranslated(end.
x(), end.
y(), 0);
158 glRotated(rot, 0, 0, 1);
163 for (std::vector<NBEdge::Connection>::const_iterator i = edgeCons.begin(); i != edgeCons.end(); ++i) {
164 if ((*i).fromLane ==
myIndex) {
206 glTranslated(0, 5, 0);
208 glTranslated(0, -5, 0);
226 for (std::vector<NBEdge::Connection>::iterator it = connections.begin(); it != connections.end(); it++) {
240 glColor3d(.4, .4, .4);
243 glColor3d(.7, .4, .4);
246 glColor3d(.7, .7, .7);
249 glColor3d(.7, .7, 1);
251 glColor3d(.75, .5, 0.25);
256 const Position& endPos = it->toEdge->getLaneShape(it->toLane)[0];
258 glVertex2d(startPos.
x(), startPos.
y());
259 glVertex2d(endPos.
x(), endPos.
y());
298 const double selectionScale = selected || selectedEdge ? s.
selectionScale : 1;
305 glGetFloatv(GL_CURRENT_COLOR, color);
309 }
else if (s.
scale * exaggeration < 1.) {
321 const double halfRailWidth = 0.725 * exaggeration;
333 glTranslated(0, 0, .1);
339 drawCrossties(0.3 * exaggeration, 1 * exaggeration, 1 * exaggeration);
352 if (exaggeration == 1) {
372 double iconWidth = 1;
387 glRotated(90, 0, 0, 1);
415 int e = (int)
getShape().size() - 1;
416 for (
int i = 0; i < e; ++i) {
421 const double length =
MIN2((
double)3, myShapeLengths[i] - t);
424 glVertex2d(-mw, -t - length);
425 glVertex2d(halfWidth * 0.5 * scale, -t - length);
426 glVertex2d(halfWidth * 0.5 * scale, -t);
435 glTranslated(0, 0, 0.2);
482 FXMenuPane* addSpecialLanes =
new FXMenuPane(ret);
484 FXMenuPane* removeSpecialLanes =
new FXMenuPane(ret);
486 FXMenuPane* transformSlanes =
new FXMenuPane(ret);
503 new FXMenuCascade(ret, (
"remove special" +
toString(
SUMO_TAG_LANE) +
"s").c_str(), 0, removeSpecialLanes);
504 new FXMenuCascade(ret, (
"transform to special" +
toString(
SUMO_TAG_LANE) +
"s").c_str(), 0, transformSlanes);
512 FXMenuPane* addSpecialLanes =
new FXMenuPane(ret);
514 FXMenuPane* removeSpecialLanes =
new FXMenuPane(ret);
516 FXMenuPane* transformSlanes =
new FXMenuPane(ret);
519 FXMenuCommand* addSidewalk =
new FXMenuCommand(addSpecialLanes,
"Sidewalk", pedestrianIcon, &parent,
MID_GNE_ADD_LANE_SIDEWALK);
520 FXMenuCommand* addBikelane =
new FXMenuCommand(addSpecialLanes,
"Bikelane", bikeIcon, &parent,
MID_GNE_ADD_LANE_BIKE);
521 FXMenuCommand* addBuslane =
new FXMenuCommand(addSpecialLanes,
"Buslane", busIcon, &parent,
MID_GNE_ADD_LANE_BUS);
523 FXMenuCommand* removeSidewalk =
new FXMenuCommand(removeSpecialLanes,
"Sidewalk", pedestrianIcon, &parent,
MID_GNE_REMOVE_LANE_SIDEWALK);
524 removeSidewalk->disable();
525 FXMenuCommand* removeBikelane =
new FXMenuCommand(removeSpecialLanes,
"Bikelane", bikeIcon, &parent,
MID_GNE_REMOVE_LANE_BIKE);
526 removeBikelane->disable();
527 FXMenuCommand* removeBuslane =
new FXMenuCommand(removeSpecialLanes,
"Buslane", busIcon, &parent,
MID_GNE_REMOVE_LANE_BUS);
528 removeBuslane->disable();
531 FXMenuCommand* transformLaneToBikelane =
new FXMenuCommand(transformSlanes,
"Bikelane", bikeIcon, &parent,
MID_GNE_TRANSFORM_LANE_BIKE);
532 FXMenuCommand* transformLaneToBuslane =
new FXMenuCommand(transformSlanes,
"Buslane", busIcon, &parent,
MID_GNE_TRANSFORM_LANE_BUS);
533 FXMenuCommand* revertTransformation =
new FXMenuCommand(transformSlanes,
"revert transformation", 0, &parent,
MID_GNE_REVERT_TRANSFORMATION);
535 FXMenuCascade* cascadeAddSpecialLane =
new FXMenuCascade(ret, (
"add special" +
toString(
SUMO_TAG_LANE)).c_str(), 0, addSpecialLanes);
536 FXMenuCascade* cascadeRemoveSpecialLane =
new FXMenuCascade(ret, (
"remove special" +
toString(
SUMO_TAG_LANE)).c_str(), 0, removeSpecialLanes);
537 new FXMenuCascade(ret, (
"transform to special" +
toString(
SUMO_TAG_LANE)).c_str(), 0, transformSlanes);
539 if (edgeHasSidewalk) {
540 transformLaneToSidewalk->disable();
541 addSidewalk->disable();
542 removeSidewalk->enable();
544 if (edgeHasBikelane) {
545 transformLaneToBikelane->disable();
546 addBikelane->disable();
547 removeBikelane->enable();
549 if (edgeHasBuslane) {
550 transformLaneToBuslane->disable();
551 addBuslane->disable();
552 removeBuslane->enable();
555 if (edgeHasSidewalk && edgeHasBikelane && edgeHasBuslane) {
556 cascadeAddSpecialLane->disable();
558 if (!edgeHasSidewalk && !edgeHasBikelane && !edgeHasBuslane) {
559 cascadeRemoveSpecialLane->disable();
563 revertTransformation->enable();
565 revertTransformation->disable();
571 new FXMenuCommand(ret,
"Select state for all links from this edge:", 0, 0, 0);
573 for (std::vector<std::string>::const_iterator it = names.begin(); it != names.end(); it++) {
575 FXMenuRadio* mc =
new FXMenuRadio(ret, (*it).c_str(),
this, FXDataTarget::ID_OPTION + state);
581 FXMenuCommand* mc =
new FXMenuCommand(ret,
"Additional options available in 'Inspect Mode'", 0, 0, 0);
582 mc->handle(&parent, FXSEL(SEL_COMMAND, FXWindow::ID_DISABLE), 0);
585 new FXMenuSeparator(ret);
588 new FXMenuCommand(ret, (
"Shape pos: " +
toString(pos)).c_str(), 0, 0, 0);
590 new FXMenuCommand(ret, (
"Height: " +
toString(height)).c_str(), 0, 0, 0);
595 (
dynamic_cast<GNEViewNet&
>(parent)).markPopupPosition();
626 const std::vector<double>&
632 const std::vector<double>&
655 int segments = (int)
getShape().size() - 1;
659 for (
int i = 0; i < segments; ++i) {
663 myShapeRotations.push_back((
double) atan2((s.
x() - f.
x()), (f.
y() - s.
y())) * (double) 180.0 / (
double)
PI);
668 (*i)->updateGeometry();
674 for (std::vector<GNEConnection*>::iterator i = incomingConnections.begin(); i != incomingConnections.end(); i++) {
675 (*i)->updateGeometry();
679 for (std::vector<GNEConnection*>::iterator i = outGoingConnections.begin(); i != outGoingConnections.end(); i++) {
680 (*i)->updateGeometry();
742 if (*i == additional) {
767 const std::vector<GNEAdditional*>&
838 return canParse<double>(value);
843 if (value ==
"default") {
849 return canParse<double>(value);
851 return canParse<bool>(value);
889 if (value ==
"default") {
911 switch (activeScheme) {
927 switch (activeScheme) {
929 for (PositionVector::const_iterator ii =
getShape().begin(); ii !=
getShape().end() - 1; ++ii) {
934 for (
int ii = 1; ii < (int)
getShape().size(); ++ii) {
951 switch (activeScheme) {
953 switch (myPermissions) {
974 return (
double)myPermissions;
1016 glTranslated(0, 0, 0.1);
1017 int e = (int)
getShape().size() - 1;
1018 for (
int i = 0; i < e; ++i) {
1024 glVertex2d(-halfWidth, -t);
1025 glVertex2d(-halfWidth, -t - length);
1026 glVertex2d(halfWidth, -t - length);
1027 glVertex2d(halfWidth, -t);
1039 glColor3d(0.3, 0.3, 0.3);
1042 int e = (int)
getShape().size() - 1;
1043 for (
int i = 0; i < e; ++i) {
1048 const double length =
MIN2(width * 0.5, myShapeLengths[i] - t);
1049 glBegin(GL_TRIANGLES);
1050 glVertex2d(0, -t - length);
1051 glVertex2d(-width * 0.25, -t);
1052 glVertex2d(+width * 0.25, -t);
1083 std::vector<GNEConnection*>
1086 std::vector<GNEConnection*> incomingConnections;
1089 if (junctionSource) {
1093 for (std::vector<GNEConnection*>::const_iterator j = (*i)->getGNEConnections().begin(); j != (*i)->getGNEConnections().end(); j++) {
1094 if ((*j)->getNBEdgeConnection().fromLane ==
getIndex()) {
1095 incomingConnections.push_back(*j);
1100 return incomingConnections;
1104 std::vector<GNEConnection*>
1108 std::vector<GNEConnection*> outcomingConnections;
1110 for (std::vector<GNEConnection*>::const_iterator i = edgeConnections.begin(); i != edgeConnections.end(); i++) {
1111 if ((*i)->getNBEdgeConnection().fromLane ==
getIndex()) {
1112 outcomingConnections.push_back(*i);
1115 return outcomingConnections;
1123 for (std::vector<GNEConnection*>::iterator i = incomingConnections.begin(); i != incomingConnections.end(); i++) {
1128 for (std::vector<GNEConnection*>::iterator i = outcomingConnections.begin(); i != outcomingConnections.end(); i++) {
static void drawTexturedBox(int which, double size)
Draws a named texture as a box with the given size.
int getConnectionIndex(const NBEdge *from, const NBEdge::Connection &con) const
return the index of the given connection
The link is a partial left direction.
std::string getVehicleClassNames(SVCPermissions permissions, bool expand)
Returns the ids of the given classes, divided using a ' '.
double getLength() const
Returns the computed length of the edge.
bool setMultiColor(const GUIColorer &c) const
sets multiple colors according to the current scheme index and some lane function ...
std::vector< double > myShapeLengths
The lengths of the shape parts.
void drawLane2LaneConnections() const
draw lane to lane connections
LinkState getLinkState(const NBEdge *incoming, NBEdge *outgoing, int fromLane, int toLane, bool mayDefinitelyPass, const std::string &tlID) const
get link state
bool isRestricted(SUMOVehicleClass vclass) const
check if this lane is restricted
double scale
information about a lane's width (temporary, used for a single view)
double laneWidthExaggeration
The lane exaggeration (upscale thickness)
PositionVector shape
The lane's shape.
GNENet * myNet
the net to inform about updates
GNETLSEditorFrame * myTLSEditor
the tls-editor for setting multiple links in TLS-mode
static void drawBoxLines(const PositionVector &geom, const std::vector< double > &rots, const std::vector< double > &lengths, double width, int cornerDetail=0, double offset=0)
Draws thick lines.
double z() const
Returns the z-position.
AdditionalVector myAdditionals
list with the additionals vinculated with this lane
void buildNameCopyPopupEntry(GUIGLObjectPopupMenu *ret, bool addSeparator=true)
Builds entries which allow to copy the name / typed name into the clipboard.
begin/end of the description of a single lane
GUIGLObjectPopupMenu * getPopUpMenu(GUIMainWindow &app, GUISUMOAbstractView &parent)
Returns an own popup-menu.
SUMOVehicleClass
Definition of vehicle classes to differ between different lane usage and authority types...
void setEndOffset(int lane, double offset)
set lane specific end-offset (negative lane implies set for all lanes)
double getLaneSpeed(int lane) const
get lane speed
const RGBColor * mySpecialColor
optional special color
static const RGBColor selectedLaneColor
color of selected lane
static void drawTextAtEnd(const std::string &text, const PositionVector &shape, double x, double size, RGBColor color)
draw text and the end of shape
static RGBColor fromHSV(double h, double s, double v)
Converts the given hsv-triplet to rgb.
static GUIGlID getTexture(GUITexture which)
returns a texture previously defined in the enum GUITexture
double distanceTo2D(const Position &p2) const
returns the euclidean distance in the x-y-plane
void setSpeed(int lane, double speed)
set lane specific speed (negative lane implies set for all lanes)
Position positionAtOffset2D(double pos, double lateralOffset=0) const
Returns the position at the given length.
Boundary getBoundary() const
returns the boundry (including lanes)
GUIColorer laneColorer
The lane colorer.
Stores the information about how to visualize structures.
This is an uncontrolled, minor link, has to stop.
int getPriority() const
Returns the priority of the edge.
double y() const
Returns the y-position.
GUIVisualizationSettings * getVisualisationSettings() const
get visualitation settings
int SVCPermissions
bitset where each bit declares whether a certain SVC may use this edge/lane
void removeAdditionalChild(GNEAdditional *additional)
remove additional child to this lane
The representation of a single edge during network building.
bool showRails
Information whether rails shall be drawn.
The link is a 180 degree turn.
double getPositionRelativeToParametricLength(double position) const
static RGBColor colorForLinksState(FXuint state)
return the color for each linkstate
bool hasRestrictedLane(SUMOVehicleClass vclass) const
check if edge has a restricted lane
double x() const
Returns the x-position.
const std::vector< double > & getShapeRotations() const
returns the vector with the shape rotations
void buildCenterPopupEntry(GUIGLObjectPopupMenu *ret, bool addSeparator=true)
Builds an entry which allows to center to the object.
bool isSelected(GUIGlObjectType type, GUIGlID id)
Returns the information whether the object with the given type and id is selected.
void setPermissions(SVCPermissions permissions, int lane=-1)
set allowed/disallowed classes for the given lane or for all lanes if -1 is given ...
This lane is powered by an underlying GNEEdge and basically knows how to draw itself.
int editMode
the current NETEDIT mode (temporary)
bool showLaneDirection
Whether to show direction indicators for lanes.
double getSpeed() const
returns the current speed of lane
transform lane to sidewalk
double endOffset
This lane's offset to the intersection begin.
SumoXMLAttr
Numbers representing SUMO-XML - attributes.
std::vector< RGBColor > myShapeColors
The color of the shape parts (cached)
This is an uncontrolled, right-before-left link.
bool drawAsRailway(const GUIVisualizationSettings &s) const
whether to draw this lane as a railway
const double SUMO_const_laneOffset
bool getBool(const std::string &name) const
Returns the boolean-value of the named option (only for Option_Bool)
const std::vector< GNEConnection * > & getGNEConnections()
returns a reference to the GNEConnection vector
void handleMultiChange(GNELane *lane, FXObject *obj, FXSelector sel, void *data)
update phase definition for the current traffic light and phase
bool isRailway(SVCPermissions permissions)
Returns whether an edge with the given permission is a railway edge.
double getColorValue(int activeScheme) const
return value for lane coloring according to the given scheme
Lane & getLaneStruct(int lane)
set non-default geometry endpoint
The link is controlled by a tls which is off, not blinking, may pass.
This is an uncontrolled, all-way stop link.
void buildPositionCopyEntry(GUIGLObjectPopupMenu *ret, bool addSeparator=true)
Builds an entry which allows to copy the cursor position if geo projection is used, also builds an entry for copying the geo-position.
static const double UNSPECIFIED_WIDTH
unspecified lane width
A class that stores a 2D geometrical boundary.
int myIndex
The index of this lane.
bool setFunctionalColor(int activeScheme) const
sets the color according to the current scheme index and some lane function
This is an uncontrolled, zipper-merge link.
The link is a (hard) left direction.
std::vector< std::string > getStrings() const
static OptionsCont & getOptions()
Retrieves the options.
bool accelRamp
Whether this lane is an acceleration lane.
void setAcceleration(int lane, bool accelRamp)
marks one lane as acceleration lane
std::vector< double > myLaneRestrictedTextureRotations
Rotations of textures of restricted lanes.
void drawGL(const GUIVisualizationSettings &s) const
Draws the object.
LinkDirection
The different directions a link between two lanes may take (or a stream between two edges)...
The link is a straight direction.
restore geometry endpoint to node position
void p_add(GNEChange_Attribute *cmd)
special method, avoid empty changes, always execute
std::vector< Connection > getConnectionsFromLane(int lane) const
Returns connections from a given lane.
bool drawAsWaterway(const GUIVisualizationSettings &s) const
whether to draw this lane as a waterways
static double naviDegree(const double angle)
int getIndex() const
returns the index of the lane
double getLaneParametricLength() const
returns the parameteric length of the lane
GUIGlObjectType getType() const
Returns the type of the object as coded in GUIGlObjectType.
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
static void setColor(const RGBColor &c)
Sets the gl-color to this value.
GNEEdge & getParentEdge()
Returns underlying parent edge.
void setAttribute(SumoXMLAttr key, const std::string &value, GNEUndoList *undoList)
const std::vector< GNEEdge * > & getGNEIncomingEdges() const
Returns incoming GNEEdges.
This is an uncontrolled, minor link, has to brake.
std::string getLaneID(int lane) const
get Lane ID (Secure)
int getNumLanes() const
Returns the number of lanes.
A point in 2D or 3D with translation and scaling methods.
void addAdditionalChild(GNEAdditional *additional)
add additional child to this lane
transform lane to bikelane
bool controlsEdge(GNEEdge &edge) const
whether the given edge is controlled by the currently edited tlDef
bool isLogicValid()
whether this junction has a valid logic
bool isWaterway(SVCPermissions permissions)
Returns whether an edge with the given permission is a waterway edge.
std::vector< double > myShapeRotations
friend class GNEChange_Attribute
declare friend class
T get(const std::string &str) const
std::vector< GNEConnection * > getGNEIncomingConnections()
returns a vector with the incoming GNEConnections of this lane
GNEJunction * getGNEJunctionDestiny() const
returns the destination-junction
LinkState
The right-of-way state of a link between two lanes used when constructing a NBTrafficLightLogic, in MSLink and GNEInternalLane.
void drawArrows() const
draw arrows
GUIVisualizationTextSettings drawLinkTLIndex
static void drawOutlineCircle(double width, double iwidth, int steps=8)
Draws an unfilled circle around (0,0)
The link is a (hard) right direction.
Boundary & grow(double by)
extends the boundary by the given amount
SVCPermissions parseVehicleClasses(const std::string &allowedS)
Parses the given definition of allowed vehicle classes into the given containers Deprecated classes g...
virtual const std::string & getMicrosimID() const
Returns the id of the object as known to microsim.
const std::string getID() const
function to support debugging
const T getColor(const double value) const
static void drawLine(const Position &beg, double rot, double visLength)
Draws a thin line.
std::vector< GNEConnection * > getGNEOutcomingConnections()
returns a vector with the outgoing GNEConnections of this lane
std::vector< Connection > myConnections
List of connections to following edges.
GNEJunction * getGNEJunctionSource() const
returns the source-junction
double laneMinSize
The minimum visual lane width for drawing.
The link is a partial right direction.
double getLaneShapeLength() const
returns the length of the lane's shape
double width
This lane's width.
SVCPermissions getPermissions(int lane=-1) const
get the union of allowed classes over all lanes or for a specific lane
vehicle is a passenger car (a "normal" car)
void updateGeometry()
update pre-computed geometry information
std::string getAttribute(SumoXMLAttr key) const
begin/end of the description of an edge
LinkDirection getDirection(const NBEdge *const incoming, const NBEdge *const outgoing, bool leftHand=false) const
Returns the representation of the described stream's direction.
EditMode getCurrentEditMode() const
get the current edit mode
bool canParseVehicleClasses(const std::string &classes)
Checks whether the given string contains only known vehicle classes.
A road/street connecting two junctions (netedit-version)
void drawDirectionIndicators() const
direction indicators for lanes
GNEEdge & myParentEdge
The Edge that to which this lane belongs.
double getLaneWidth() const
Returns the default width of lanes of this edge.
const PositionVector & getShape() const
returns the shape of the lane
double selectionScale
the current selection scaling in NETEDIT (temporary)
double length() const
Returns the length.
void updateConnectionIDs()
void drawMarkings(const bool &selectedEdge, double scale) const
draw lane markings
long onDefault(FXObject *, FXSelector, void *)
multiplexes message to two targets
const PositionVector & getLaneShape(int i) const
Returns the shape of the nth lane.
virtual void setMicrosimID(const std::string &newID)
Changes the microsimID of the object.
void drawTLSLinkNo(const GUIVisualizationSettings &s) const
draw TLS Link Number
An Element which don't belongs to GNENet but has influency in the simulation.
The link is controlled by a tls which is off and blinks, has to brake.
void drawCrossties(double length, double spacing, double halfWidth) const
draw crossties for railroads
std::vector< Position > myLaneRestrictedTexturePositions
Position of textures of restricted lanes.
void setSpecialColor(const RGBColor *Color2)
This is an uncontrolled, major link, may pass.
void drawLinkNo(const GUIVisualizationSettings &s) const
draw link Number
void buildSelectionPopupEntry(GUIGLObjectPopupMenu *ret, bool addSeparator=true)
Builds an entry which allows to (de)select the object.
void drawLinkRules() const
draw link rules
static const StringBijection< FXuint > LinkStateNames
long names for link states
static FXColor getFXColor(const RGBColor &col)
converts FXColor to RGBColor
Represents a single node (junction) during network building.
GUIGlID getGlID() const
Returns the numerical id of the object.
The link is a 180 degree turn (left-hand network)
static void drawTriangleAtEnd(const Position &p1, const Position &p2, double tLength, double tWidth)
Draws a triangle at the end of the given line.
Position getPositionInformation() const
Returns the cursor's x/y position within the network.
Boundary getBoxBoundary() const
Returns a boundary enclosing this list of lines.
const std::string & getParentName() const
Returns the name of the parent object (if any)
static const RGBColor selectionColor
color of selection
mode for connecting lanes
mode for creating new edges
static void drawBoxLine(const Position &beg, double rot, double visLength, double width, double offset=0)
Draws a thick line.
bool isValid(SumoXMLAttr key, const std::string &value)
NBEdge * getNBEdge()
returns the internal NBEdge
const std::vector< double > & getShapeLengths() const
returns the vector with the shape lengths
Copy edge name (for lanes only)
double getLoadedLength() const
Returns the length was set explicitly or the computed length if it wasn't set.
double nearest_offset_to_point2D(const Position &p, bool perpendicular=true) const
return the nearest offest to point 2D
double getPositionRelativeToShapeLength(double position) const
void mkItem(const char *name, bool dynamic, ValueSource< unsigned > *src)
Adds a row which obtains its value from an unsigned-ValueSource.
GUIParameterTableWindow * getParameterWindow(GUIMainWindow &app, GUISUMOAbstractView &parent)
Returns an own parameter window.
GUISelectedStorage gSelected
A global holder of selected objects.
void closeBuilding()
Closes the building of the table.
A window containing a gl-object's parameter.
static FXIcon * getIcon(GUIIcon which)
returns a icon previously defined in the enum GUIIcon
GUIVisualizationTextSettings drawLinkJunctionIndex
NBNode * getToNode() const
Returns the destination node of the edge.
Boundary getCenteringBoundary() const
Returns the boundary to which the view shall be centered in order to show the object.
void setLaneWidth(int lane, double width)
set lane specific width (negative lane implies set for all lanes)
transform lane to busLane
void buildPopupHeader(GUIGLObjectPopupMenu *ret, GUIMainWindow &app, bool addSeparator=true)
Builds the header.
GNEViewNet * getViewNet() const
get view net
const std::vector< GNEAdditional * > & getAdditionalChilds() const
get additional childs of lane
The link has no direction (is a dead end link)
static RGBColor getColor()
gets the gl-color
SumoXMLTag getTag() const
get XML Tag assigned to this object