public C3dWriter(C3dReader copyMetadataFrom, bool eventsEnabled = false) : this( copyMetadataFrom.Labels.ToArray <string>(), copyMetadataFrom.Header.FrameRate, copyMetadataFrom.AnalogLabels.ToArray <string>(), copyMetadataFrom.Header.AnalogSamplingRate, eventsEnabled) { _header.SetHeader(copyMetadataFrom.Header.GetRawData()); foreach (Parameter p in copyMetadataFrom.AllParameters) { string groupName = copyMetadataFrom.GetGroupName(p); CreateGroupIfNotExist(groupName); ParameterGroup grp = _nameToGroups[groupName]; if (!grp.HasParameter(p.Name)) { Parameter newParam = p.Clone(); if (_fs == null) { grp.Parameters.Add(newParam); } else { throw new ApplicationException("Cannot create a parameter " + newParam.Name + " after file was open."); } } else { Parameter param = grp.GetParameter(p.Name); param.CopyDataFrom(p); } // if file is open and we are modifieng an existig an parameter - update changes. if (_fs != null && p.OffsetInFile > 0) { UpdateParameter(p); } } }