public void Recreate_NIST_TrainingStructure()
        {
            IStepReader reader   = getNISTTrainingStructure();
            iso_10303   iso10303 = serializer.Deserialize(reader);

            reader.Close();

            string path = "./sampleData/NIST_TrainingStructure_param_output.ifc";

            if (File.Exists(path))
            {
                File.Delete(path);
            }
            Assert.IsFalse(File.Exists(path));

            StreamWriter sr     = new StreamWriter(path);
            IStepWriter  writer = new StepWriter(sr);

            serializer.Serialize(writer, iso10303);
            writer.Close();

            Assert.IsTrue(File.Exists(path));

            //quick and dirty method for checking file
            string[] lines = File.ReadAllLines(path);
            Assert.IsNotNull(lines);
            Assert.AreEqual(17227 + 9, lines.Length);
        }
示例#2
0
        public StepFile Deserialize(IStepReader reader)
        {
            if (reader == null)
            {
                throw new ArgumentNullException("reader");
            }

            StepFile step = new StepFile();

            while (reader.Read())
            {
                switch (reader.TokenType)
                {
                case StepToken.EntityName:
                    step.Header.Add(deserializeEntity(reader));
                    continue;

                case StepToken.LineIdentifier:
                    int objectNumber = getObjectNumber(reader);
                    step.Data.Add(objectNumber, deserializeEntity(reader));
                    continue;

                default:
                    continue;
                }
            }

            //TODO should try to create the tree here.  Need to handle circular references though.

            return(step);
        }
示例#3
0
		public StepFile Deserialize(IStepReader reader)
		{
			if( reader == null )
				throw new ArgumentNullException( "reader" );
			
			StepFile step = new StepFile();
			
			while(reader.Read()){
				switch(reader.TokenType){
					case StepToken.EntityName:
						step.Header.Add( deserializeEntity( reader ) );
						continue;
					case StepToken.LineIdentifier:
						int objectNumber = getObjectNumber( reader );
						step.Data.Add( objectNumber, deserializeEntity( reader ) );
						continue;
					default:
						continue;
				}
			}
			
			//TODO should try to create the tree here.  Need to handle circular references though.
			
			return step;
		}
示例#4
0
 private StepValue deserializeNestedEntity(IStepReader reader)
 {
     if (reader == null)
     {
         throw new ArgumentNullException("reader");
     }
     return(StepValue.CreateNestedEntity(deserializeEntity(reader)));
 }
示例#5
0
        private StepValue deserializeProperty(IStepReader reader)
        {
            if (reader == null)
            {
                throw new ArgumentNullException("reader");
            }

            return(new StepValue(reader.TokenType, reader.Value));
        }
        public void CanDeserialize_NIST_TrainingStructure()
        {
            IStepReader reader   = getNISTTrainingStructure();
            iso_10303   iso10303 = serializer.Deserialize(reader);
            uos1        uos1     = iso10303.uos as uos1;

            Entity[] entities = uos1.Items;
            Assert.AreEqual(17227, entities.Length);
        }
示例#7
0
 public void CanReadSmallWallExample()
 {
 	SUT = this.createStepReader( ExampleData.StepIFC2X3SmallWallExample() );
     int count = 0;
     while(SUT.Read()){
         count++;
     }
     Assert.AreEqual(StepToken.EndSTEP, SUT.TokenType);
     Assert.AreEqual(1927, count );
 }
示例#8
0
        private StepValue deserializeLineReference(IStepReader reader)
        {
            if (reader == null)
            {
                throw new ArgumentNullException("reader");
            }

            return(new StepValue(reader.TokenType,
                                 CastLineIdToInt((string)reader.Value)));
        }
示例#9
0
        public void CanReadSmallWallExample()
        {
            SUT = this.createStepReader(ExampleData.StepIFC2X3SmallWallExample());
            int count = 0;

            while (SUT.Read())
            {
                count++;
            }
            Assert.AreEqual(StepToken.EndSTEP, SUT.TokenType);
            Assert.AreEqual(1927, count);
        }
示例#10
0
        /// <summary>
        /// Deserializes STEP format data by reading stream provided by a StreamReader.  An iso_10303 object is returned.
        /// </summary>
        /// <param name="reader"></param>
        /// <returns></returns>
        public iso_10303 Deserialize(IStepReader reader)
        {
            if (reader == null)
            {
                throw new ArgumentNullException("reader");
            }

            this._internalDeserializer = new StepDeserializer();
            this._binder = new StepBinder();
            StepFile stepFile = this._internalDeserializer.Deserialize(reader);

            iso_10303 iso10303 = this._binder.Bind(stepFile);

            return(iso10303);
        }
示例#11
0
        /// <summary>
        /// Should only be called when reader is at a LineIdentifier token.
        /// Attempts to read the value of the line identifier, e.g. "#24"
        /// and cast it to an integer, e.g. 24.
        /// </summary>
        /// <returns></returns>
        private int getObjectNumber(IStepReader reader)
        {
            if (reader == null)
            {
                throw new ArgumentNullException("reader");
            }
            if (reader.TokenType != StepToken.LineIdentifier)
            {
                throw new StepSerializerException("getObjectNumber() was called when the ExpressReader was not at a LineIdentifier token");
            }
            if (reader.ValueType != typeof(string))
            {
                throw new StepSerializerException(String.Format(CultureInfo.InvariantCulture,
                                                                "getObjectNumber() expects the line identifier to be a string, it is instead a type of {0}",
                                                                reader.ValueType));
            }

            return(CastLineIdToInt(reader.Value.ToString()));
        }
示例#12
0
        /// <summary>
        /// If the reader is at an EntityName context, then this will return the entity name (with error checking)
        /// </summary>
        /// <returns></returns>
        private string getObjectName(IStepReader reader)
        {
            if (reader == null)
            {
                throw new ArgumentNullException("reader");
            }
            if (reader.TokenType != StepToken.EntityName)
            {
                throw new StepSerializerException("getObjectName() has been called, but the reader context is not that of an EntityName token");
            }
            if (reader.ValueType != typeof(string))
            {
                throw new StepSerializerException("getObjectName() cannot create an object name from a non-string value type");
            }
            string s = reader.Value.ToString();

            if (string.IsNullOrEmpty(s))
            {
                throw new StepSerializerException("getObjectName() only found a null Object name");
            }
            return(s);
        }
示例#13
0
 private void createSUT( string sample ){
 	StringReader reader = new StringReader( ExampleData.simpleStepWithCommentString() );
     SUT = new StepReader( reader );
 }
示例#14
0
        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        private StepValue deserializeArray(IStepReader reader)
        {
            if (reader == null)
            {
                throw new ArgumentNullException("reader");
            }

            IList <StepValue> values = new List <StepValue>();

            while (reader.Read())
            {
                logger.Debug(String.Format(CultureInfo.InvariantCulture,
                                           "deserializeArray read : {0} of value {1}",
                                           reader.TokenType,
                                           reader.Value));
                switch (reader.TokenType)
                {
                case StepToken.EndArray:
                    return(StepValue.CreateArray(values));

                case StepToken.LineReference:
                    values.Add(deserializeLineReference(reader));
                    continue;

                case StepToken.Enumeration:
                case StepToken.Boolean:
                case StepToken.Integer:
                case StepToken.Float:
                case StepToken.String:
                    values.Add(deserializeProperty(reader));
                    continue;

                case StepToken.Null:
                    values.Add(deserializeNull());
                    continue;

                case StepToken.EntityName:
                case StepToken.StartEntity:
                    values.Add(deserializeNestedEntity(reader));
                    continue;

                case StepToken.Operator:
                case StepToken.Overridden:
                case StepToken.EndEntity:
                case StepToken.EndLine:
                case StepToken.EndSection:
                case StepToken.EndSTEP:
                case StepToken.StartSTEP:
                case StepToken.StartSection:
                    throw new StepSerializerException(String.Format(CultureInfo.InvariantCulture,
                                                                    "deserializeArray found a token which was not expected: {0}",
                                                                    reader.TokenType));

                default:
                    throw new NotImplementedException(String.Format(CultureInfo.InvariantCulture,
                                                                    "This ExpressToken type is not yet implemented by deserializeArray(), {0}",
                                                                    reader.TokenType));
                }
            }
            throw new StepSerializerException("deserializeArray() reached the end of the reader without finding an endArray token");
        }
示例#15
0
		/// <summary>
		/// Should only be called when reader is at a LineIdentifier token.
		/// Attempts to read the value of the line identifier, e.g. "#24"
		/// and cast it to an integer, e.g. 24.
		/// </summary>
		/// <returns></returns>
		private int getObjectNumber(IStepReader reader){
			if(reader == null)
				throw new ArgumentNullException("reader");
			if(reader.TokenType != StepToken.LineIdentifier)
				throw new StepSerializerException( "getObjectNumber() was called when the ExpressReader was not at a LineIdentifier token" );
			if(reader.ValueType != typeof(string))
				throw new StepSerializerException( String.Format(CultureInfo.InvariantCulture,
				                                                 "getObjectNumber() expects the line identifier to be a string, it is instead a type of {0}",
				                                                 reader.ValueType));
			
			return CastLineIdToInt( reader.Value.ToString() );
		}
示例#16
0
		/// <summary>
		/// Attempts to read a nested entity
		/// </summary>
		/// <param name="reader"></param>
		/// <returns></returns>
		private StepDataObject deserializeEntity(IStepReader reader){
			if(reader == null)
				throw new ArgumentNullException( "reader" );
			
			StepDataObject edo = new StepDataObject();
			bool entityStarted = false;
			
			//nested entities are already on the EntityName token
			if(reader.TokenType == StepToken.EntityName)
				edo.ObjectName = getObjectName(reader);
			
			while(reader.Read()){
				logger.Debug(String.Format(CultureInfo.InvariantCulture,
				                           "deserializer read token {0}. value {1}",
				                           reader.TokenType,
				                           reader.Value));
				switch(reader.TokenType){
					case StepToken.EntityName:
						if(!entityStarted)
							edo.ObjectName = getObjectName( reader );
						else //it's a nested entity
							edo.Properties.Add( deserializeNestedEntity( reader ) );
						continue;
					case StepToken.LineReference:
						edo.Properties.Add(deserializeLineReference( reader ));
						continue;
					case StepToken.Enumeration:
					case StepToken.Boolean:
					case StepToken.Integer:
					case StepToken.Float:
					case StepToken.String:
					case StepToken.Date:
						edo.Properties.Add(deserializeProperty( reader ));
						continue;
					case StepToken.StartArray:
						edo.Properties.Add(deserializeArray( reader ));
						continue;
					case StepToken.StartEntity:
						if(!entityStarted)
							entityStarted = true;
						else
							throw new StepSerializerException(String.Format(CultureInfo.InvariantCulture,
							                                                "A token was found which was not expected: {0}",
							                                                reader.TokenType));
						continue;
					case StepToken.Operator:
					case StepToken.Comment:
						continue;
					case StepToken.Overridden:
						edo.Properties.Add(deserializeOverridden());
						continue;
					case StepToken.Null:
						edo.Properties.Add(deserializeNull());
						continue;
					case StepToken.EndEntity:
						return edo;
					case StepToken.EndLine:
					case StepToken.EndSection:
					case StepToken.EndSTEP:
					case StepToken.StartSTEP:
					case StepToken.StartSection:
						throw new StepSerializerException(String.Format(CultureInfo.InvariantCulture,
						                                                "A token was found which was not expected: {0}",
						                                                reader.TokenType));
					default:
						throw new NotImplementedException(String.Format(CultureInfo.InvariantCulture,
						                                                "The {0} ExpressToken type is not yet implemented by deserializeEntity()",
						                                                reader.TokenType));
				}
				//TODO should do some verification here (properties are after entityStart and before EntityEnd etc.)
			}
			throw new StepSerializerException( "The reader reached the end without finding an endEntity token" );
		}
示例#17
0
		/// <summary>
		/// If the reader is at an EntityName context, then this will return the entity name (with error checking)
		/// </summary>
		/// <returns></returns>
		private string getObjectName(IStepReader reader){
			if(reader == null)
				throw new ArgumentNullException("reader");
			if(reader.TokenType != StepToken.EntityName)
				throw new StepSerializerException("getObjectName() has been called, but the reader context is not that of an EntityName token");
			if(reader.ValueType != typeof(string))
				throw new StepSerializerException("getObjectName() cannot create an object name from a non-string value type");
			string s = reader.Value.ToString();
			if(string.IsNullOrEmpty(s))
				throw new StepSerializerException("getObjectName() only found a null Object name");
			return s;
		}
示例#18
0
        /// <summary>
        /// Attempts to read a nested entity
        /// </summary>
        /// <param name="reader"></param>
        /// <returns></returns>
        private StepDataObject deserializeEntity(IStepReader reader)
        {
            if (reader == null)
            {
                throw new ArgumentNullException("reader");
            }

            StepDataObject edo           = new StepDataObject();
            bool           entityStarted = false;

            //nested entities are already on the EntityName token
            if (reader.TokenType == StepToken.EntityName)
            {
                edo.ObjectName = getObjectName(reader);
            }

            while (reader.Read())
            {
                logger.Debug(String.Format(CultureInfo.InvariantCulture,
                                           "deserializer read token {0}. value {1}",
                                           reader.TokenType,
                                           reader.Value));
                switch (reader.TokenType)
                {
                case StepToken.EntityName:
                    if (!entityStarted)
                    {
                        edo.ObjectName = getObjectName(reader);
                    }
                    else                             //it's a nested entity
                    {
                        edo.Properties.Add(deserializeNestedEntity(reader));
                    }
                    continue;

                case StepToken.LineReference:
                    edo.Properties.Add(deserializeLineReference(reader));
                    continue;

                case StepToken.Enumeration:
                case StepToken.Boolean:
                case StepToken.Integer:
                case StepToken.Float:
                case StepToken.String:
                case StepToken.Date:
                    edo.Properties.Add(deserializeProperty(reader));
                    continue;

                case StepToken.StartArray:
                    edo.Properties.Add(deserializeArray(reader));
                    continue;

                case StepToken.StartEntity:
                    if (!entityStarted)
                    {
                        entityStarted = true;
                    }
                    else
                    {
                        throw new StepSerializerException(String.Format(CultureInfo.InvariantCulture,
                                                                        "A token was found which was not expected: {0}",
                                                                        reader.TokenType));
                    }
                    continue;

                case StepToken.Operator:
                case StepToken.Comment:
                    continue;

                case StepToken.Overridden:
                    edo.Properties.Add(deserializeOverridden());
                    continue;

                case StepToken.Null:
                    edo.Properties.Add(deserializeNull());
                    continue;

                case StepToken.EndEntity:
                    return(edo);

                case StepToken.EndLine:
                case StepToken.EndSection:
                case StepToken.EndSTEP:
                case StepToken.StartSTEP:
                case StepToken.StartSection:
                    throw new StepSerializerException(String.Format(CultureInfo.InvariantCulture,
                                                                    "A token was found which was not expected: {0}",
                                                                    reader.TokenType));

                default:
                    throw new NotImplementedException(String.Format(CultureInfo.InvariantCulture,
                                                                    "The {0} ExpressToken type is not yet implemented by deserializeEntity()",
                                                                    reader.TokenType));
                }
                //TODO should do some verification here (properties are after entityStart and before EntityEnd etc.)
            }
            throw new StepSerializerException("The reader reached the end without finding an endEntity token");
        }
示例#19
0
 /// <summary>
 /// Deserializes STEP format data by reading stream provided by a StreamReader.  An iso_10303 object is returned.
 /// </summary>
 /// <param name="reader"></param>
 /// <returns></returns>
 public iso_10303 Deserialize(IStepReader reader)
 {
     if( reader == null )
         throw new ArgumentNullException( "reader" );
     
     this._internalDeserializer = new StepDeserializer();
     this._binder = new StepBinder();
     StepFile stepFile = this._internalDeserializer.Deserialize(reader);
     
     iso_10303 iso10303 = this._binder.Bind( stepFile );
     return iso10303;
 }
 private iso_10303 Deserialize(IStepReader reader)
 {
     return(serializer.Deserialize(reader));
 }
示例#21
0
		private StepValue deserializeNestedEntity(IStepReader reader){
			if(reader == null)
				throw new ArgumentNullException("reader");
			return StepValue.CreateNestedEntity(deserializeEntity(reader));
		}
示例#22
0
		private StepValue deserializeProperty(IStepReader reader){
			if(reader == null)
				throw new ArgumentNullException("reader");
			
			return new StepValue(reader.TokenType, reader.Value);
		}
示例#23
0
		/// <summary>
		/// 
		/// </summary>
		/// <returns></returns>
		private StepValue deserializeArray(IStepReader reader){
			if(reader == null)
				throw new ArgumentNullException("reader");
			
			IList<StepValue> values = new List<StepValue>();
			while(reader.Read()){
				logger.Debug(String.Format(CultureInfo.InvariantCulture,
				                           "deserializeArray read : {0} of value {1}",
				                           reader.TokenType,
				                           reader.Value));
				switch(reader.TokenType){
					case StepToken.EndArray:
						return StepValue.CreateArray(values);
					case StepToken.LineReference:
						values.Add(deserializeLineReference(reader));
						continue;
					case StepToken.Enumeration:
					case StepToken.Boolean:
					case StepToken.Integer:
					case StepToken.Float:
					case StepToken.String:
						values.Add(deserializeProperty(reader));
						continue;
					case StepToken.Null:
						values.Add(deserializeNull());
						continue;
					case StepToken.EntityName:
					case StepToken.StartEntity:
						values.Add(deserializeNestedEntity(reader));
						continue;
					case StepToken.Operator:
					case StepToken.Overridden:
					case StepToken.EndEntity:
					case StepToken.EndLine:
					case StepToken.EndSection:
					case StepToken.EndSTEP:
					case StepToken.StartSTEP:
					case StepToken.StartSection:
						throw new StepSerializerException( String.Format(CultureInfo.InvariantCulture,
						                                                 "deserializeArray found a token which was not expected: {0}",
						                                                 reader.TokenType));
					default:
						throw new NotImplementedException(String.Format(CultureInfo.InvariantCulture,
						                                                "This ExpressToken type is not yet implemented by deserializeArray(), {0}",
						                                                reader.TokenType));
				}
			}
			throw new StepSerializerException( "deserializeArray() reached the end of the reader without finding an endArray token" );
		}
示例#24
0
		private StepValue deserializeLineReference(IStepReader reader){
			if(reader == null)
				throw new ArgumentNullException("reader");
			
			return new StepValue(reader.TokenType,
			                     CastLineIdToInt((string)reader.Value));
		}
 private iso_10303 Deserialize(IStepReader reader){
 	return serializer.Deserialize( reader );
 }
示例#26
0
        private void createSUT(string sample)
        {
            StringReader reader = new StringReader(ExampleData.simpleStepWithCommentString());

            SUT = new StepReader(reader);
        }