Class TAnchorNode

Unit

Declaration

type TAnchorNode = class(TAbstractGroupingNode)

Description

Load the URL when the user activates (clicks) some geometry contained within the Anchor node's children.

Hierarchy

Overview

Methods

Protected function DirectEnumerateActive(Func: TEnumerateChildrenFunction): Pointer; override;
Public function LoadAnchor( out NewRootNode: TX3DRootNode; out NewViewpoint: TAbstractViewpointNode; CurrentRootNode: TX3DRootNode): boolean;
Public procedure CreateNode; override;
Public class function ClassX3DType: String; override;
Public procedure SetParameter(const Value: array of string); overload;
Public procedure SetParameter(const Value: TCastleStringList); overload;
Public procedure SetUrl(const Value: array of string); overload;
Public procedure SetUrl(const Value: TCastleStringList); overload;

Properties

Public property FdDescription: TSFString read FFdDescription;
Public property Description: String read GetDescription write SetDescription;
Public property FdParameter: TMFString read FFdParameter;
Public property FdUrl: TMFString read FFdUrl;

Description

Methods

Protected function DirectEnumerateActive(Func: TEnumerateChildrenFunction): Pointer; override;

This item has no description. Showing description inherited from TX3DNode.DirectEnumerateActive.

Enumerate all active child nodes of given node.

"Active nodes" are the ones affecting current look or collisions, e.g. from Switch node only one child will be enumerated. See Traverse for more precise definition.

"Direct" means that this enumerates only direct descendants, i.e. this is not recursive. See methods like Traverse or EnumerateNodes if you want recursive behavior.

This can enumerate both VRML1Children nodes and nodes within TSFNode and TMFNode fields.

Default implementation in this class enumerates all Children nodes of VRML 1.0. If you need to remove some children for VRML 1.0 (e.g. for Switch or LOD nodes) or add some children for VRML 2.0 you have to override this. You do not need to call inherited when overriding this — in fact, you should not, if you want to omit some nodes.

Stops and returns immediately if Func returns non-nil for some child.

Public function LoadAnchor( out NewRootNode: TX3DRootNode; out NewViewpoint: TAbstractViewpointNode; CurrentRootNode: TX3DRootNode): boolean;

Load the document, world and/or viewpoint referenced by this Anchor node.

This iterates over url field, for each URL trying to load referenced file. If URL specifies viewpoint name within 3D file (or current 3D world), we also search for viewpoint. If it will succeed for some URL, returns True, setting output parameters. Returns False if no loadable URL is found.

Output NewRootNode is the loaded world, or Nil if actually we should stay within the same world. Nil happens for URLs like #ViewpointName, or when URL refers to some non-3D document (that is opened with appropriate application on user system).

NewViewpoint is the new viewpoint that should be bound, or Nil if URL doesn't specify viewpoint name within 3D file. This viewpoint is part of NewRootNode graph, if NewRootNode <> Nil, or is part of CurrentRootNode if we should stay within current world (NewRootNode = Nil).

Note that this means that NewRootNode = nil and NewViewpoint = nil are valid output from this method, and indicate that nothing should be done.

CurrentRootNode is required to detect invalid viewpoint names within current file. An explanation why this is needed follows:

Invalid viewpoint names within newly loaded files are harmless, that is newly loaded file is accepted anyway and invalid viewpoint name is ignored. X3D spec says this explicitly.

But what should happen for invalid viewpoint names within current file? X3D spec doesn't say anything clear here (the part before "#" is valid in this case, since it just indicates current file, so someone could argue that URL is valid, only viewpoint name is wrong and so it should be ignored...). Consider url field like

[ "#NotExistingViewpoint", "#ExistingViewpoint" ]

It seems sensible that we detect "#NotExistingViewpoint" as invalid, and move on to the next URL (which may be local or not). That's why we need CurrentRootNode instance. When CurrentRootNode = nil, we understand that no file is currently loaded (at least, you don't have it's X3D graph). It means that any "#Viewpoint" within current model is considered invalid.

Public procedure CreateNode; override;

Create node fields and events.

Public class function ClassX3DType: String; override;

This item has no description. Showing description inherited from TX3DNode.ClassX3DType.

Node type name in VRML/X3D, for this class. Normal VRML/X3D node classes should override this to return something non-empty, and then X3DType automatically will return the same value.

Empty for classes that don't have a hardcoded VRML/X3D node name, like a special TX3DUnknownNode. Such special classes should override then X3DType to return actual non-empty name there.

You usually should call X3DType. The only use of this method is that it works on classes (it's "class function"), without needing at actual instance.

Public procedure SetParameter(const Value: array of string); overload;

This item has no description.

Public procedure SetParameter(const Value: TCastleStringList); overload;

This item has no description.

Public procedure SetUrl(const Value: array of string); overload;

This item has no description.

Public procedure SetUrl(const Value: TCastleStringList); overload;

This item has no description.

Properties

Public property FdDescription: TSFString read FFdDescription;

Internal wrapper for property Description. This wrapper API may change, we advise to access simpler Description instead, if it is defined (TODO: for now, some field types do not have a simpler counterpart).

Public property Description: String read GetDescription write SetDescription;

This item has no description.

Public property FdParameter: TMFString read FFdParameter;

Internal wrapper for property Parameter. This wrapper API may change, we advise to access simpler Parameter instead, if it is defined (TODO: for now, some field types do not have a simpler counterpart).

Public property FdUrl: TMFString read FFdUrl;

Internal wrapper for property Url. This wrapper API may change, we advise to access simpler Url instead, if it is defined (TODO: for now, some field types do not have a simpler counterpart).


Generated by PasDoc 0.16.0-snapshot.