Exemplo n.º 1
0
        internal List <X3DNode> ParseSFNodeOrMFNodeValue()
        {
            // nodeStatement | [ ] | [ nodeStatements ]

            try
            {
                object token = PeekNextToken();

                List <X3DNode> ret = new List <X3DNode>();

                VRMLTokenTerminalSymbol tsToken = token as VRMLTokenTerminalSymbol;
                if (tsToken != null && tsToken.symbol == '[')
                {
                    char ts = GetNextTerminalSymbolToken();

                    for (; ;)
                    {
                        token   = PeekNextToken();
                        tsToken = token as VRMLTokenTerminalSymbol;
                        if (tsToken != null && tsToken.symbol == ']')
                        {
                            ts = GetNextTerminalSymbolToken();
                            break;
                        }

                        X3DNode node = ParseNodeStatement();
                        if (node != null)
                        {
                            ret.Add(node);
                        }
                    }
                }
                else
                {
                    VRMLTokenIdKeywordOrFieldType nullToken = token as VRMLTokenIdKeywordOrFieldType;
                    if (nullToken != null && nullToken.id == "NULL")
                    {
                        GetNextIDToken();                         // consume NULL
                        ErrorParsing(VRMLReaderError.ImproperInitializationOfMFNode);
                    }
                    else
                    {
                        X3DNode node = ParseNodeStatement();
                        if (node != null)
                        {
                            ret.Add(node);
                        }
                    }
                }

                return(ret);
            }
            catch (UserCancellationException) { throw; }
            catch (Exception ex)
            {
                ErrorParsingField(VRMLReaderError.MFNodeInvalid, ex);
            }

            return(null);
        }
Exemplo n.º 2
0
		protected override X3DContainer ParseContainer (X3DNode[] children, XElement elem)
		{
			
			Vector3? translation = ParseVectorAttribute (elem.Attribute ("translation")); 
			Rotation rotatinon = ParseRotationAttribute (elem.Attribute ("rotation")); 
			Vector3? scale = ParseVectorAttribute (elem.Attribute ("scale")); 

			return new X3DTransform (children, translation, rotatinon, scale);
		}
Exemplo n.º 3
0
		public X3DTransform (X3DNode[] nodes,  
			Vector3? translation, 
			Rotation rotatio, 
			Vector3? scale) : base (nodes)
		{
			this.Translation = translation;
			this.Rotation = rotatio;
			this.Scale = scale;
		}
        void ParseStatement()
        {
            // nodeStatement | protoStatement | exportStatement | importStatement | routeStatement

            object token = PeekNextToken();

            if (token == null)
            {
                ErrorUnexpectedEndOfStream();
            }

            VRMLTokenIdKeywordOrFieldType idToken = token as VRMLTokenIdKeywordOrFieldType;

            if (idToken == null)
            {
                ErrorParsingToken("statement keyword or node id", "", "statement");
            }

            switch (idToken.id)
            {
            case "PROTO":
            case "EXTERNPROTO":
                string nodeTypeId;
                int    lineOfProtoStart    = line;
                X3DPrototypeInstance proto = ParseProtoStatement(out nodeTypeId);
                if (protoDefinitions.ContainsKey(nodeTypeId))
                {
                    ErrorParsing(VRMLReaderError.PROTOAlreadyDefined, lineOfProtoStart);
                }
                else
                {
                    protoDefinitions.Add(nodeTypeId, proto);
                }
                break;

            case "EXPORT": ParseExportStatement(); break;

            case "IMPORT": ParseImportStatement(); break;

            case "ROUTE": ParseRouteStatement(); break;

            default:
                X3DNode node = ParseNodeStatement();
                if (node != null)
                {
                    nodes.Add(node);
                }
                break;
            }
        }
        X3DNode ParseNodeStatement()
        {
            // node | DEF nodeNameId node | USE nodeNameId

            object token = PeekNextToken();

            if (token == null)
            {
                ErrorUnexpectedEndOfStream();
            }

            VRMLTokenIdKeywordOrFieldType idToken = token as VRMLTokenIdKeywordOrFieldType;

            if (idToken == null)
            {
                ErrorParsingToken("DEF, USE or node id", "", "node statement");
            }

            switch (idToken.id)
            {
            case "DEF":
            {
                string  tokenDEF   = GetNextIDToken();
                string  nodeNameId = GetNextIDToken();
                X3DNode node       = ParseNode(nodeNameId);
                if (node == null)
                {
                    ErrorUnexpectedEndOfStream();
                }
                instances[nodeNameId] = node;
                return(node);
            }

            case "USE":
            {
                string tokenUSE   = GetNextIDToken();
                string nodeNameId = GetNextIDToken();
                if (instances.ContainsKey(nodeNameId))
                {
                    return(instances[nodeNameId]);
                }
                ErrorParsing(VRMLReaderError.USENameNotDefined);
                return(null);
            }

            default: return(ParseNode(null));
            }
        }
Exemplo n.º 6
0
        List <X3DNode> ParseUntypedFieldValueNodeArray()
        {
            List <X3DNode> ret = new List <X3DNode>();

            for (; ;)
            {
                object token = PeekNextToken();

                VRMLTokenTerminalSymbol tsToken = token as VRMLTokenTerminalSymbol;
                if (tsToken != null && tsToken.symbol == ']')
                {
                    return(ret);                                                   // done
                }
                X3DNode node = ParseNodeStatement();
                if (node != null)
                {
                    ret.Add(node);
                }
            }
        }
Exemplo n.º 7
0
        internal void ErrorParsingNode(VRMLReaderError error, Exception reason, X3DNode node, string fieldName, X3DNode value, int line)
        {
            if (error == VRMLReaderError.UnexpectedNodeType)
            {
                if (errorHandling.UnexpectedNodeType != ErrorWarnIgnore.Ignore)
                {
                    string msg = "Error parsing node: Unexpected type while parsing node: '" + node.GetNodeName() + "' field: '" + fieldName + "'";
                    if (value != null)
                    {
                        msg += " found: '" + value.GetNodeName() + "'";
                    }
                    msg += " in line: " + line;
                    WriteWarning(msg);
                }
                if (errorHandling.UnexpectedNodeType != ErrorWarnIgnore.Error)
                {
                    return;
                }
            }
            else if (error == VRMLReaderError.UnknownFieldInNode)
            {
                if (errorHandling.UnknownFieldInNode != ErrorWarnIgnore.Ignore)
                {
                    string msg = "Error parsing node: Unknown field while parsing node: '" + node.GetNodeName() + "' field: '" + fieldName + "' in line: " + line;
                    WriteWarning(msg);
                }
                if (errorHandling.UnknownFieldInNode != ErrorWarnIgnore.Error)
                {
                    return;
                }
            }
            else if (error == VRMLReaderError.SFImageInvalid)
            {
                string msg = "Error parsing node: Could not parse SFImage value while parsing node: '" + node.GetNodeName() + "' field: '" + fieldName + "' in line: " + line;
                WriteWarning(msg);
            }

            throw new VRMLReaderException(error, reason, line);
        }
        X3DNode ParseRootNodeStatement()
        {
            // node | DEF nodeNameId node

            object token = PeekNextToken();

            if (token == null)
            {
                ErrorUnexpectedEndOfStream();
            }

            VRMLTokenIdKeywordOrFieldType idToken = token as VRMLTokenIdKeywordOrFieldType;

            if (idToken == null)
            {
                ErrorParsingToken("DEF or node id", "", "root node statement");
            }

            switch (idToken.id)
            {
            case "DEF":
            {
                string  tokenDEF   = GetNextIDToken();
                string  nodeNameId = GetNextIDToken();
                X3DNode node       = ParseNode(nodeNameId);
                if (node == null)
                {
                    ErrorUnexpectedEndOfStream();
                }
                instances[nodeNameId] = node;
                return(node);
            }

            default: return(ParseNode(null));
            }
        }
Exemplo n.º 9
0
		protected override X3DContainer ParseContainer (X3DNode[] nodes, XElement elem)
		{
			return new X3DScene (nodes);
		}
Exemplo n.º 10
0
		public X3DScene (X3DNode[] nodes) : base (nodes)
		{
		}
Exemplo n.º 11
0
 internal void ErrorParsingNode(VRMLReaderError error, X3DNode node, string fieldName, X3DNode value, int line)
 {
     ErrorParsingNode(error, null, node, fieldName, value, line);
 }