访问Dimension的Above,Below,Suffix和Prefix属性时的AccessViolationException

时间:2013-01-30 22:59:47

标签: c# revit revit-api

在Revit 2013中,我使用的工具可以将尺寸从一个绘图视图复制到另一个绘图视图。我已经准确地创建了维度的新版本,包括CurveDimensionTypeReferences,但我遇到了属性问题Above,{ {1}},BelowPrefix。如果至少其中一个有值,它们就可以复制。但是,如果它们都没有值,那么当我尝试访问它们时它将抛出Suffix。我试图捕获该异常,但它冒泡并且崩溃Revit(我假设它是由本机代码导致失败)。

如何在不触发此AccessViolationException的情况下进行复制时检查这些属性是否具有任何值?

Autodesk Discussion Group Question

AccessViolationException类是我自己用来存储维度信息的,因此可以用它来创建单独文档中的维度。

DimensionData

2 个答案:

答案 0 :(得分:0)

关于交易:据我所知,当您进行任何类型的更改(修改,删除,添加)时,您只需要在交易中。如果您所做的只是收集维度信息,则不需要事务,但是当您使用该信息在另一个文档中创建新维度时,该代码必须位于事务内。我有一些正在开发的程序尚未修改文档,只是收集参数设置并将它们发布到TaskDialog.Show()。这些程序工作正常,我在代码中看不到任何实际修改模型的内容,因此这似乎不是您的问题。

答案 1 :(得分:-1)

好像我错了。 您可以将问题发布到ADN支持吗?

我建议的解决方案是使用Parameters代替Dimension element类属性的Dimension

例如,您可以通过以下代码获取SuffixPrefix

var suffixParameter =
    oldDimension.get_Parameter(BuiltInParameter.SPOT_SLOPE_SUFFIX);
string suffix = null;
if (suffixParameter != null)
{
    suffix = suffixParameter.AsString();
}

var prefixParameter =
    oldDimension.get_Parameter(BuiltInParameter.SPOT_SLOPE_PREFIX);
string prefix = null;
if (prefixParameter != null)
{
    prefix = prefixParameter.AsString();
}

不幸的是,我没有告诉你如何通过参数获取AboveBelow属性,因为我没有要测试的项目。但您可以使用BuiltInParameter Checker

轻松确定参数

希望它有所帮助。