在revit api中查找basepoint的坐标

时间:2012-11-19 15:31:03

标签: revit revit-api

我创建了一个计算网格之间交叉点的插件。交点计算的坐标使用基点位置作为坐标的原点。我想将坐标转换为测量点位置。我尝试使用以下代码获取基点的坐标:

ElementCategoryFilter filter = new ElementCategoryFilter(BuiltInCategory.OST_ProjectBasePoint);

FilteredElementCollector collector = new FilteredElementCollector(doc);
IList<Element> elements = collector.WherePasses(filter).ToElements();

foreach (Element element in elements)
{
    double x = element.get_Parameter(BuiltInParameter.BASEPOINT_EASTWEST_PARAM).AsDouble();
    double y = element.get_Parameter(BuiltInParameter.BASEPOINT_NORTHSOUTH_PARAM).AsDouble();
    double elevation = element.get_Parameter  (BuiltInParameter.BASEPOINT_ELEVATION_PARAM).AsDouble();
}

我想使用基点坐标来调整我在交叉点计算中找到的坐标,以使用测量点作为原点。但我不知道如何使用基点的值来调整坐标。基点中的值似乎不是使用测量点作为原点,而是使用内部坐标。或许我误解了basepoint中的值。任何指向我可以尝试的东西?

1 个答案:

答案 0 :(得分:1)

经过几天的工作,我终于找到了我的错误和问题的答案。对于任何与我有相同问题的人来说,这就是我将坐标转换为正确坐标的方式:

  • 我从基点获取的值是从调查点的偏移量,但是我的 错误是我是欧洲人:p我从基点获得的值以英尺为单位,而我的项目以毫米为单位。所以我创建了一个转换函数来将我从revit api(在我的例子中:basepoint values和grid intersect-function)得到的所有值转换为项目单位(毫米)。这是关于主题http://thebuildingcoder.typepad.com/blog/2011/12/unit-conversion-and-display-string-formatting.html

  • 的精彩博文
  • 我要做的第二件事是使用基点偏移来转换坐标。但是基点坐标系可能有一个旋转。所以我不得不首先旋转坐标

    double x = (pos.X * Math.Cos(angle)) - (pos.Y * Math.Sin(angle));
    double y = (pos.X * Math.Sin(angle)) + (pos.Y * Math.Cos(angle));
    

然后我可以改变坐标:

new XYZ(position.X + projectBasePoint.X, newPos.Y + projectBasePoint.Y, 0);