public StepFile ReadFile() { var fileSyntax = _lexer.LexFileSyntax(); foreach (var headerMacro in fileSyntax.Header.Macros) { ApplyHeaderMacro(headerMacro); } var itemMap = new Dictionary <int, StepRepresentationItem>(); var binder = new StepBinder(itemMap); StepRepresentationItem.UnsupportedItemTypes.Clear(); foreach (var itemInstance in fileSyntax.Data.ItemInstances) { if (itemMap.ContainsKey(itemInstance.Id)) { throw new StepReadException("Duplicate item instance", itemInstance.Line, itemInstance.Column); } var item = StepRepresentationItem.FromTypedParameter(binder, itemInstance.SimpleItemInstance, itemInstance.Id); if (item != null) { itemMap.Add(itemInstance.Id, item); _file.Items.Add(item); } } binder.BindRemainingValues(); return(_file); }
public StepFile ReadFile() { var fileSyntax = _lexer.LexFileSyntax(); foreach (var headerMacro in fileSyntax.Header.Macros) { ApplyHeaderMacro(headerMacro); } var itemMap = new Dictionary <int, List <StepRepresentationItem> >(); var binder = new StepBinder(itemMap); StepRepresentationItem.UnsupportedItemTypes.Clear(); foreach (var itemInstance in fileSyntax.Data.ItemInstances) { if (itemMap.ContainsKey(itemInstance.Id)) { throw new StepReadException("Duplicate item instance", itemInstance.Line, itemInstance.Column); } List <StepRepresentationItem> items = new List <StepRepresentationItem>(); if (itemInstance.SimpleItemInstance is StepSimpleItemSyntax) { var item = StepRepresentationItem.FromTypedParameterToItem(binder, itemInstance.SimpleItemInstance, itemInstance.Id); if (item != null) { items.Add(item); } } else if (itemInstance.SimpleItemInstance is StepComplexItemSyntax) { items = StepRepresentationItem.FromTypedParameterToItems(binder, itemInstance.SimpleItemInstance, itemInstance.Id); } else { LogWriter.Instance.WriteErrorLog("Unsupported step item syntax " + itemInstance.SimpleItemInstance.GetType().Name); } if (items.Count > 0) { itemMap.Add(itemInstance.Id, items); foreach (var item in items) { _file.Items.Add(item); } } } binder.BindRemainingValues(); return(_file); }