Class TAnchorNode

DescriptionHierarchyFieldsMethodsProperties

Unit

Declaration

type TAnchorNode = class(TAbstractX3DGroupingNode)

Description

no description available, TAbstractX3DGroupingNode description follows
no description available, TAbstractGroupingNode description follows

This is a VRML/X3D >= 2.0 grouping node. This will push/pop full TX3DGraphTraverseState in Before/AfterTraverse. It also propagates DirectionalLights in any child to all children in VRML2ActiceLights.

To keep X3D hierarchy, this descends from X3DChildNode. This way TAbstractX3DGroupingNode and TStaticGroupNode inherit also from X3DChildNode.

Hierarchy

Overview

Methods

Public procedure CreateNode; override;
Public class function ClassNodeTypeName: string; override;
Public class function URNMatching(const URN: string): boolean; override;
Public function LoadAnchor( out NewRootNode: TX3DRootNode; out NewViewpoint: TAbstractViewpointNode; CurrentRootNode: TX3DRootNode): boolean;

Properties

Public property FdDescription: TSFString read FFdDescription;
Public property FdParameter: TMFString read FFdParameter;
Public property FdUrl: TMFString read FFdUrl;

Description

Methods

Public procedure CreateNode; override;
 
Public class function ClassNodeTypeName: string; override;
 
Public class function URNMatching(const URN: string): boolean; override;
 
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.

Properties

Public property FdDescription: TSFString read FFdDescription;
 
Public property FdParameter: TMFString read FFdParameter;
 
Public property FdUrl: TMFString read FFdUrl;
 

Generated by PasDoc 0.12.1 on 2013-02-04 20:26:54