В Revit 2013 у меня есть инструмент, который я делаю, чтобы копировать размеры с одного чертежного вида на другой. У меня получилось правильно создать новую версию измерения, включая Curve
, DimensionType
и References
, но у меня возникли проблемы со свойствами Above
, Below
, Prefix
и Suffix
. Они отлично копируются, если хотя бы один из них имеет значение. Однако, если ни один из них не имеет значения, он выдаст AccessViolationException
, когда я попытаюсь получить к ним доступ. Я пытался поймать это исключение, но оно всплывает и вызывает сбой Revit (я предполагаю, что это вызвано сбоем собственного кода).
Как я могу проверить, имеют ли эти свойства какое-либо значение, когда я копирую, не вызывая этот AccessViolationException
?
Autodesk Вопрос группы обсуждения
Я использую класс DimensionData
для хранения информации об измерении, чтобы его можно было использовать для создания измерения в отдельном документе.
private IEnumerable<DimensionData> GetDimensionDataSet(Document document,
View view)
{
if (document == null)
throw new ArgumentNullException("document");
if (view == null)
throw new ArgumentNullException("view");
List<DimensionData> dimensionDataSet = new List<DimensionData>();
FilteredElementCollector dimensionCollector =
new FilteredElementCollector(document, view.Id);
dimensionCollector.OfClass(typeof(Dimension));
foreach (Dimension oldDimension in dimensionCollector)
{
Line oldDimensionLine = (Line)oldDimension.Curve;
string dimensionTypeName = oldDimension.DimensionType.Name;
List<ElementId> oldReferences = new List<ElementId>();
foreach (Reference oldReference in oldDimension.References)
oldReferences.Add(oldReference.ElementId);
DimensionData dimensionData;
try
{
string prefix = oldDimension.Prefix;
dimensionData = new DimensionData(oldDimensionLine,
oldReferences,
dimensionTypeName,
prefix,
oldDimension.Suffix,
oldDimension.Above,
oldDimension.Below);
}
catch (AccessViolationException)
{
dimensionData = new DimensionData(oldDimensionLine,
oldReferences, dimensionTypeName);
}
dimensionDataSet.Add(dimensionData);
}
return dimensionDataSet;
}