Revit 2013 では、ある製図ビューから別の製図ビューに寸法をコピーするツールを作成しています。Curve
、DimensionType
、およびを含むディメンションの新しいバージョンを適切に作成することができましたがReferences
、プロパティAbove
、Below
、Prefix
、およびに問題がありSuffix
ます。それらの少なくとも 1 つに値があれば、問題なくコピーされます。ただし、それらのいずれにも値がない場合は、それらAccessViolationException
にアクセスしようとすると がスローされます。その例外をキャッチしようとしましたが、バブルアップして Revit がクラッシュします (失敗したネイティブ コードが原因であると想定しています)。
これをトリガーせずにコピーを行うときに、これらのプロパティに値があるかどうかを確認するにはどうすればよいAccessViolationException
ですか?
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;
}